Changeset 15818


Ignore:
Timestamp:
May 24, 2013, 8:36:51 AM (8 years ago)
Author:
gb
Message:

ARM write-barrier changes.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/source/lisp-kernel/arm-spentry.s

    r15815 r15818  
    759759        __(mov imm1,imm1,lsr imm2)
    760760        __(mov imm0,imm0,lsr #bitmap_shift)
    761         __(ref_global(temp0,refbits))
    762         __(add temp0,temp0,imm0,lsl #word_shift)
    763         __(ldr imm2,[temp0])
     761        __(ref_global(temp1,refbits))
     762        __(add temp1,temp1,imm0,lsl #word_shift)
     763        __(ldr imm2,[temp1])
    764764        __(tst imm2,imm1)
    765765        __(bxne lr)
    766 0:      __(ldrex imm2,[temp0])
     7660:      __(ldrex imm2,[temp1])
    767767        __(orr imm2,imm2,imm1)
    768         __(strex imm0,imm2,[temp0])
     768        __(strex imm0,imm2,[temp1])
    769769        __(cmp imm0,#0)
    770         __(bne 0b)       
     770        __(bne 0b)
     771        __(sub imm0,arg_y,temp0)
     772        __(mov imm0,imm0,lsr #dnode_shift+8)
     773        __(and imm2,imm0,#31)
     774        __(mov imm1,#0x80000000)
     775        __(mov imm1,imm1,lsr imm2)
     776        __(mov imm0,imm0,lsr #bitmap_shift)
     777        __(ref_global(temp1,ephemeral_refidx))
     778        __(add temp1,temp1,imm0,lsl #word_shift)
     7791:      __(ldrex imm2,[temp1])
     780        __(orr imm2,imm2,imm1)
     781        __(strex imm0,imm2,[temp1])
     782        __(cmp imm0,#0)
     783        __(bne 1b)
    771784        __(bx lr)
    772785
     
    790803        __(mov imm1,imm1,lsr imm2)
    791804        __(mov imm0,imm0,lsr #bitmap_shift)
    792         __(ref_global(temp0,refbits))
    793         __(add temp0,temp0,imm0,lsl #word_shift)
    794         __(ldr imm2,[temp0])
     805        __(ref_global(temp1,refbits))
     806        __(add temp1,temp1,imm0,lsl #word_shift)
     807        __(ldr imm2,[temp1])
    795808        __(tst imm2,imm1)
    796809        __(bxne lr)
    797 0:      __(ldrex imm2,[temp0])
     8100:      __(ldrex imm2,[temp1])
    798811        __(orr imm2,imm2,imm1)
    799         __(strex imm0,imm2,[temp0])
     812        __(strex imm0,imm2,[temp1])
    800813        __(cmp imm0,#0)
    801814        __(bne 0b)       
     815        __(sub imm0,arg_y,temp0)
     816        __(mov imm0,imm0,lsr #dnode_shift+8)
     817        __(and imm2,imm0,#31)
     818        __(mov imm1,#0x80000000)
     819        __(mov imm1,imm1,lsr imm2)
     820        __(mov imm0,imm0,lsr #bitmap_shift)
     821        __(ref_global(temp1,ephemeral_refidx))
     822        __(add temp1,temp1,imm0,lsl #word_shift)
     8231:      __(ldrex imm2,[temp1])
     824        __(orr imm2,imm2,imm1)
     825        __(strex imm0,imm2,[temp1])
     826        __(cmp imm0,#0)
     827        __(bne 1b)
    802828        __(bx lr)
    803829       
     
    825851        __(mov imm1,imm1,lsr imm2)
    826852        __(mov imm0,imm0,lsr #bitmap_shift)
    827         __(ref_global(temp0,refbits))
    828         __(add temp0,temp0,imm0,lsl #word_shift)
    829         __(ldr imm2,[temp0])
     853        __(ref_global(temp1,refbits))
     854        __(add temp1,temp1,imm0,lsl #word_shift)
     855        __(ldr imm2,[temp1])
    830856        __(tst imm2,imm1)
    831857        __(bxne lr)     
    832 0:      __(ldrex imm2,[temp0])
     8580:      __(ldrex imm2,[temp1])
    833859        __(orr imm2,imm2,imm1)
    834         __(strex imm0,imm2,[temp0])
     860        __(strex imm0,imm2,[temp1])
    835861        __(cmp imm0,#0)
    836         __(bne 0b)       
     862        __(bne 0b)
     863        __(add imm0,arg_y,#misc_data_offset)
     864        __(add imm0,imm0,arg_x)
     865        __(sub imm0,imm0,temp0)
     866        __(mov imm0,imm0,lsr #dnode_shift+8)
     867        __(and imm2,imm0,#31)
     868        __(mov imm1,#0x80000000)
     869        __(mov imm1,imm1,lsr imm2)
     870        __(mov imm0,imm0,lsr #bitmap_shift)
     871        __(ref_global(temp1,ephemeral_refidx))
     872        __(add temp1,temp1,imm0,lsl #word_shift)
     8731:      __(ldrex imm2,[temp1])
     874        __(orr imm2,imm2,imm1)
     875        __(strex imm0,imm2,[temp1])
     876        __(cmp imm0,#0)
     877        __(bne 1b)   
    837878        __(bx lr)
    838879
     
    861902        __(mov imm1,imm1,lsr imm2)
    862903        __(mov imm0,imm0,lsr #bitmap_shift)
    863         __(ref_global(temp0,refbits))
    864         __(add temp0,temp0,imm0,lsl #word_shift)
    865         __(ldr imm2,[temp0])
     904        __(ref_global(temp1,refbits))
     905        __(add temp1,temp1,imm0,lsl #word_shift)
     906        __(ldr imm2,[temp1])
    866907        __(tst imm2,imm1)
    867908        __(bxne lr)
    868 0:      __(ldrex imm2,[temp0])
     9090:      __(ldrex imm2,[temp1])
    869910        __(orr imm2,imm2,imm1)
    870         __(strex imm0,imm2,[temp0])
     911        __(strex imm0,imm2,[temp1])
    871912        __(cmp imm0,#0)
    872         __(bne 0b)       
     913        __(bne 0b)
     914        __(add imm0,arg_y,#misc_data_offset)
     915        __(add imm0,imm0,arg_x)
     916        __(sub imm0,imm0,temp0)
     917        __(mov imm0,imm0,lsr #dnode_shift+8)
     918        __(and imm2,imm0,#31)
     919        __(mov imm1,#0x80000000)
     920        __(mov imm1,imm1,lsr imm2)
     921        __(mov imm0,imm0,lsr #bitmap_shift)
     922        __(ref_global(temp1,ephemeral_refidx))
     923        __(add temp1,temp1,imm0,lsl #word_shift)
     9241:      __(ldrex imm2,[temp1])
     925        __(orr imm2,imm2,imm1)
     926        __(strex imm0,imm2,[temp1])
     927        __(cmp imm0,#0)
     928        __(bne 1b)   
     929       
    873930/* Now need to ensure that the hash table itself is in the refmap; we
    874931   know that it's in bounds, etc. */
    875         __(ref_global(temp0,ref_base))
     932
    876933        __(sub imm0,arg_x,temp0)
    877934        __(mov imm0,imm0,lsr #dnode_shift)
     
    880937        __(mov imm1,imm1,lsr imm2)
    881938        __(mov imm0,imm0,lsr #bitmap_shift)
    882         __(ref_global(temp0,refbits))
    883         __(add temp0,temp0,imm0,lsl #word_shift)
    884         __(ldr imm2,[temp0])
     939        __(ref_global(temp1,refbits))
     940        __(add temp1,temp1,imm0,lsl #word_shift)
     941        __(ldr imm2,[temp1])
    885942        __(tst imm2,imm1)
    886943        __(bxne lr)
    887 1:      __(ldrex imm2,[temp0])
     9442:      __(ldrex imm2,[temp1])
    888945        __(orr imm2,imm2,imm1)
    889         __(strex imm0,imm2,[temp0])
     946        __(strex imm0,imm2,[temp1])
    890947        __(cmp imm0,#0)
    891         __(bne 1b)       
     948        __(bne 2b)       
     949        __(sub imm0,arg_x,temp0)
     950        __(mov imm0,imm0,lsr #dnode_shift+8)
     951        __(and imm2,imm0,#31)
     952        __(mov imm1,#0x80000000)
     953        __(mov imm1,imm1,lsr imm2)
     954        __(mov imm0,imm0,lsr #bitmap_shift)
     955        __(ref_global(temp1,ephemeral_refidx))
     956        __(add temp1,temp1,imm0,lsl #word_shift)
     9573:      __(ldrex imm2,[temp1])
     958        __(orr imm2,imm2,imm1)
     959        __(strex imm0,imm2,[temp1])
     960        __(cmp imm0,#0)
     961        __(bne 3b)       
    892962        __(bx lr)
    893963       
     
    921991        __(ldrex temp1,[imm2])
    922992        __(cmp temp1,arg_y)
    923         __(bne 5f)
     993        __(bne 9f)
    924994        __(strex imm0,arg_z,[imm2])
    925995        .globl C(egc_store_node_conditional_test)
     
    928998        __(bne 1b)
    929999        __(cmp arg_z,arg_x)
    930         __(blo 4f)
    931 
    932         __(ref_global(imm0,ref_base))
     1000        __(blo 8f)
     1001
     1002        __(ref_global(temp0,ref_base))
    9331003        __(ref_global(imm1,oldspace_dnode_count))
    934         __(sub imm0,imm2,imm0)
     1004        __(sub imm0,imm2,temp0)
    9351005        __(mov imm0,imm0,lsr #dnode_shift)
    9361006        __(cmp imm0,imm1)
    937         __(bhs 4f)
     1007        __(bhs 8f)
    9381008        __(and imm1,imm0,#31)
    9391009        __(mov arg_x,#0x80000000)
    9401010        __(mov imm1,arg_x,lsr imm1)
    941         __(ref_global(temp0,refbits))
     1011        __(ref_global(temp1,refbits))
    9421012        __(mov imm0,imm0,lsr #bitmap_shift)
    943         __(add temp0,temp0,imm0,lsl #word_shift)
    944         __(ldr imm2,[temp0])
     1013        __(add temp1,temp1,imm0,lsl #word_shift)
     1014        __(ldr imm2,[temp1])
    9451015        __(tst imm2,imm1)
    9461016        __(bxne lr)
    947 2:      __(ldrex imm2,[temp0])
     10172:      __(ldrex imm2,[temp1])
    9481018        __(orr imm2,imm2,imm1)
    949         __(strex imm0,imm2,[temp0])
    950         .globl C(egc_set_hash_key_conditional_test)
    951 C(egc_set_hash_key_conditional_test):
     1019        __(strex imm0,imm2,[temp1])
    9521020        __(cmp imm0,#0)
    9531021        __(bne 2b)
    954         __(b 4f)
     1022        __(b 8f)
    9551023 
    9561024/* arg_z = new value, arg_y = expected old value, arg_x = hash-vector,
     
    9661034        __(ldrex temp1,[imm2])
    9671035        __(cmp temp1,arg_y)
    968         __(bne 5f)
     1036        __(bne 9f)
    9691037        __(strex imm0,arg_z,[imm2])
     1038        .globl C(egc_set_hash_key_conditional_test)
     1039C(egc_set_hash_key_conditional_test):
    9701040        __(cmp imm0,#0)
    9711041        __(bne 0b)
    9721042        __(cmp arg_z,arg_x)
    973         __(blo 4f)
     1043        __(blo 8f)
    9741044        __(ref_global(temp0,ref_base))
    9751045        __(sub imm0,imm2,temp0)
     
    9771047        __(ref_global(imm1,oldspace_dnode_count))
    9781048        __(cmp imm0,imm1)
    979         __(bhs 4f)
     1049        __(bhs 8f)
    9801050        __(and imm2,imm0,#31)
    9811051        __(mov imm1,#0x80000000)
    9821052        __(mov imm1,imm1,lsr imm2)
    9831053        __(mov imm0,imm0,lsr #bitmap_shift)
    984         __(ref_global(temp0,refbits))
    985         __(add temp0,temp0,imm0,lsl #word_shift)
    986         __(ldr imm2,[temp0])
     1054        __(ref_global(temp1,refbits))
     1055        __(add temp1,temp1,imm0,lsl #word_shift)
     1056        __(ldr imm2,[temp1])
    9871057        __(tst imm2,imm1)
    9881058        __(bxne lr)
    989 1:      __(ldrex imm2,[temp0])
     10591:      __(ldrex imm2,[temp1])
    9901060        __(orr imm2,imm2,imm1)
    991         __(strex imm0,imm2,[temp0])
     1061        __(strex imm0,imm2,[temp1])
    9921062        __(cmp imm0,#0)
    993         __(bne 1b)       
     1063        __(bne 1b)
     1064        __(add imm0,arg_y,#misc_data_offset)
     1065        __(add imm0,arg_x,imm0)
     1066        __(sub imm0,imm0,temp0)
     1067        __(mov imm0,imm0,lsr #dnode_shift+8)
     1068        __(and imm2,imm0,#31)
     1069        __(mov imm1,#0x80000000)
     1070        __(mov imm1,imm1,lsr imm2)
     1071        __(mov imm0,imm0,lsr #bitmap_shift)
     1072        __(ref_global(temp1,ephemeral_refidx))
     1073        __(add temp1,temp1,imm0,lsl #word_shift)
     10742:      __(ldrex imm2,[temp1])
     1075        __(orr imm2,imm2,imm1)
     1076        __(strex imm0,imm2,[temp1])
     1077        __(cmp imm0,#0)
     1078        __(bne 2b)   
    9941079/* Now need to ensure that the hash table itself is in the refmap; we
    9951080   know that it's in bounds, etc. */
    996         __(ref_global(temp0,ref_base))
    9971081        __(sub imm0,arg_x,temp0)
    9981082        __(mov imm0,imm0,lsr #dnode_shift)
     
    10011085        __(mov imm1,imm1,lsr imm2)
    10021086        __(mov imm0,imm0,lsr #bitmap_shift)
    1003         __(ref_global(temp0,refbits))
    1004         __(add temp0,temp0,imm0,lsl #word_shift)
    1005         __(ldr imm2,[temp0])
     1087        __(ref_global(temp1,refbits))
     1088        __(add temp1,temp1,imm0,lsl #word_shift)
     1089        __(ldr imm2,[temp1])
    10061090        __(tst imm2,imm1)
    10071091        __(bxne lr)
    1008 1:      __(ldrex imm2,[temp0])
     10923:      __(ldrex imm2,[temp1])
    10091093        __(orr imm2,imm2,imm1)
    1010         __(strex imm0,imm2,[temp0])
     1094        __(strex imm0,imm2,[temp1])
    10111095        __(cmp imm0,#0)
    1012         __(bne 1b)       
     1096        __(bne 3b)
     1097        __(sub imm0,arg_x,temp0)
     1098        __(mov imm0,imm0,lsr #dnode_shift+8)
     1099        __(and imm2,imm0,#31)
     1100        __(mov imm1,#0x80000000)
     1101        __(mov imm1,imm1,lsr imm2)
     1102        __(mov imm0,imm0,lsr #bitmap_shift)
     1103        __(ref_global(temp1,ephemeral_refidx))
     1104        __(add temp1,temp1,imm0,lsl #word_shift)
     11054:      __(ldrex imm2,[temp1])
     1106        __(orr imm2,imm2,imm1)
     1107        __(strex imm0,imm2,[temp1])
     1108        __(cmp imm0,#0)
     1109        __(bne 4b)
     1110       
    10131111C(egc_write_barrier_end):
    1014 4:      __(mov arg_z,#nil_value)
     11128:      __(mov arg_z,#nil_value)
    10151113        __(add arg_z,arg_z,#t_offset)
    10161114        __(bx lr)
    1017 5:      __(_clrex(arg_z))
     11159:      __(_clrex(arg_z))
    10181116        __(mov arg_z,#nil_value)
    10191117        __(bx lr)
Note: See TracChangeset for help on using the changeset viewer.