Changeset 15817


Ignore:
Timestamp:
May 24, 2013, 4:49:02 AM (8 years ago)
Author:
gb
Message:

New write-barrier for PPC.

File:
1 edited

Legend:

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

    r15815 r15817  
    481481        __(sub imm0,arg_y,imm2)
    482482        __(load_highbit(imm3))
    483         __(srri(imm0,imm0,dnode_shift))       
     483        __(srri(imm0,imm0,dnode_shift))
     484        __(srri(imm2,imm0,8))       
    484485        __(ref_global(imm1,oldspace_dnode_count))
    485486        __(extract_bit_shift_count(imm4,imm0))
     
    487488        __(srr(imm3,imm3,imm4))
    488489        __(srri(imm0,imm0,bitmap_shift))       
    489         __(ref_global(imm2,refbits))
     490        __(ref_global(temp0,refbits))
    490491        __(bgelr)
    491492        __(slri(imm0,imm0,word_shift))
    492         __(ldrx(imm1,imm2,imm0))
     493        __(ldrx(imm1,temp0,imm0))
    493494        __(and. imm1,imm1,imm3)
    494495        __(bnelr)
    495 1:      __(lrarx(imm1,imm2,imm0))
     4961:      __(lrarx(imm1,temp0,imm0))
    496497        __(or imm1,imm1,imm3)
    497         __(strcx(imm1,imm2,imm0))
     498        __(strcx(imm1,temp0,imm0))
    498499        __(bne- 1b)
    499500        __(isync)
     501        __(extract_bit_shift_count(imm4,imm2))
     502        __(srri(imm2,imm2,bitmap_shift))
     503        __(load_highbit(imm3))
     504        __(ref_global(temp0,ephemeral_refidx))
     505        __(slri(imm2,imm2,word_shift))
     506        __(srr(imm3,imm3,imm4))
     5072:      __(lrarx(imm1,temp0,imm2))
     508        __(or imm1,imm1,imm3)
     509        __(strcx(imm1,temp0,imm2))
     510        __(bne 2b)
     511        __(isync)       
    500512        __(blr)
    501513
     
    515527        __(extract_bit_shift_count(imm4,imm0))
    516528        __(cmplr(imm0,imm1))
     529        __(srri(imm2,imm0,8))
    517530        __(srr(imm3,imm3,imm4))
    518531        __(srri(imm0,imm0,bitmap_shift))       
    519         __(ref_global(imm2,refbits))
     532        __(ref_global(temp0,refbits))
    520533        __(bgelr)
    521534        __(slri(imm0,imm0,word_shift))
    522         __(ldrx(imm1,imm2,imm0))
     535        __(ldrx(imm1,temp0,imm0))
    523536        __(and. imm1,imm1,imm3)
    524537        __(bnelr)       
    525 1:      __(lrarx(imm1,imm2,imm0))
     5381:      __(lrarx(imm1,temp0,imm0))
    526539        __(or imm1,imm1,imm3)
    527         __(strcx(imm1,imm2,imm0))
     540        __(strcx(imm1,temp0,imm0))
    528541        __(bne- 1b)
    529542        __(isync)
     543        __(extract_bit_shift_count(imm4,imm2))
     544        __(srri(imm2,imm2,bitmap_shift))
     545        __(load_highbit(imm3))
     546        __(ref_global(temp0,ephemeral_refidx))
     547        __(slri(imm2,imm2,word_shift))
     548        __(srr(imm3,imm3,imm4))
     5492:      __(lrarx(imm1,temp0,imm2))
     550        __(or imm1,imm1,imm3)
     551        __(strcx(imm1,temp0,imm2))
     552        __(bne 2b)
     553        __(isync)       
    530554        __(blr)
    531555
     
    548572        __(srri(imm0,imm0,dnode_shift))       
    549573        __(cmplr(imm0,imm1))
     574        __(srri(imm2,imm0,8))
    550575        __(extract_bit_shift_count(imm4,imm0))
    551576        __(srri(imm0,imm0,bitmap_shift))       
    552577        __(srr(imm3,imm3,imm4))
    553         __(ref_global(imm2,refbits))
     578        __(ref_global(temp0,refbits))
    554579        __(bgelr)
    555580        __(slri(imm0,imm0,word_shift))
    556         __(ldrx(imm1,imm2,imm0))
     581        __(ldrx(imm1,temp0,imm0))
    557582        __(and. imm1,imm1,imm3)
    558583        __(bnelr)       
    559 1:      __(lrarx(imm1,imm2,imm0))
     5841:      __(lrarx(imm1,temp0,imm0))
    560585        __(or imm1,imm1,imm3)
    561         __(strcx(imm1,imm2,imm0))
     586        __(strcx(imm1,temp0,imm0))
    562587        __(bne- 1b)
    563588        __(isync)
     589        __(extract_bit_shift_count(imm4,imm2))
     590        __(srri(imm2,imm2,bitmap_shift))
     591        __(load_highbit(imm3))
     592        __(ref_global(temp0,ephemeral_refidx))
     593        __(slri(imm2,imm2,word_shift))
     594        __(srr(imm3,imm3,imm4))
     5952:      __(lrarx(imm1,temp0,imm2))
     596        __(or imm1,imm1,imm3)
     597        __(strcx(imm1,temp0,imm2))
     598        __(bne 2b)
     599        __(isync)       
    564600        __(blr)
    565601
     
    583619        __(srri(imm0,imm0,dnode_shift))       
    584620        __(cmplr(imm0,imm1))
     621        __(srri(imm2,imm0,8))
    585622        __(extract_bit_shift_count(imm4,imm0))
    586623        __(srri(imm0,imm0,bitmap_shift))       
    587624        __(srr(imm3,imm3,imm4))
    588         __(ref_global(imm2,refbits))
     625        __(ref_global(temp0,refbits))
     626        __(ref_global(temp1,ephemeral_refidx))
    589627        __(bgelr)
    590628        __(slri(imm0,imm0,word_shift))
    591         __(ldrx(imm1,imm2,imm0))
     629        __(ldrx(imm1,temp0,imm0))
    592630        __(and. imm1,imm1,imm3)
    593         __(bne 2f)       
    594 1:      __(lrarx(imm1,imm2,imm0))
     631        __(bne 3f)       
     6321:      __(lrarx(imm1,temp0,imm0))
    595633        __(or imm1,imm1,imm3)
    596         __(strcx(imm1,imm2,imm0))
     634        __(strcx(imm1,temp0,imm0))
    597635        __(bne- 1b)
    598636        __(isync)
    599 2:             
     637        __(load_highbit(imm3))
     638        __(extract_bit_shift_count(imm4,imm2))
     639        __(srri(imm2,imm2,bitmap_shift))
     640        __(srr(imm3,imm3,imm4))
     641        __(slri(imm2,imm2,word_shift))
     6422:      __(lrarx(imm1,temp1,imm2))
     643        __(or imm1,imm1,imm3)
     644        __(strcx(imm1,temp1,imm2))
     645        __(bne 2b)
     646        __(isync)       
     6473:             
    600648        __(ref_global(imm1,ref_base))
    601649        __(sub imm0,arg_x,imm1)
    602650        __(srri(imm0,imm0,dnode_shift))
     651        __(srri(imm2,imm0,8))
    603652        __(load_highbit(imm3))
    604653        __(extract_bit_shift_count(imm4,imm0))
     
    606655        __(srr(imm3,imm3,imm4))
    607656        __(slri(imm0,imm0,word_shift))
    608         __(ldrx(imm1,imm2,imm0))
     657        __(ldrx(imm1,temp0,imm0))
    609658        __(and. imm1,imm1,imm3)
    610659        __(bnelr)
    611 3:      __(lrarx(imm1,imm2,imm0))
     6604:      __(lrarx(imm1,temp0,imm0))
    612661        __(or imm1,imm1,imm3)
    613         __(strcx(imm1,imm2,imm0))
    614         __(bne- 3b)
     662        __(strcx(imm1,temp0,imm0))
     663        __(bne- 4b)
    615664        __(isync)
     665        __(load_highbit(imm3))
     666        __(extract_bit_shift_count(imm4,imm2))
     667        __(srri(imm2,imm2,bitmap_shift))
     668        __(srr(imm3,imm3,imm4))
     669        __(slri(imm2,imm2,word_shift))
     6705:      __(lrarx(imm1,temp1,imm2))
     671        __(or imm1,imm1,imm3)
     672        __(strcx(imm1,temp1,imm2))
     673        __(bne 5b)
     674        __(isync)       
    616675        __(blr)
    617676       
     
    6437021:      __(lrarx(temp1,arg_x,imm4))
    644703        __(cmpr(cr1,temp1,arg_y))
    645         __(bne cr1,5f)
     704        __(bne cr1,9f)
    646705        __(strcx(arg_z,arg_x,imm4))
    647706        .globl C(egc_store_node_conditional_test)
     
    656715        __(srri(imm0,imm0,dnode_shift))       
    657716        __(cmplr(imm0,imm1))
    658         __(extract_bit_shift_count(imm2,imm0))
     717        __(srri(imm2,imm0,8))
     718        __(extract_bit_shift_count(imm4,imm0))
    659719        __(srri(imm0,imm0,bitmap_shift))       
    660         __(srr(imm3,imm3,imm2))
    661         __(ref_global(imm2,refbits))
    662         __(bge 4f)
     720        __(srr(imm3,imm3,imm4))
     721        __(ref_global(temp0,refbits))
     722        __(bge 8f)
    663723        __(slri(imm0,imm0,word_shift))
    664 2:      __(lrarx(imm1,imm2,imm0))
     7242:      __(lrarx(imm1,temp0,imm0))
    665725        __(or imm1,imm1,imm3)
    666         __(strcx( imm1,imm2,imm0))
     726        __(strcx(imm1,temp0,imm0))
    667727        __(bne- 2b)
    668728        __(isync)
    669         __(b 4f)
     729        __(load_highbit(imm3))
     730        __(extract_bit_shift_count(imm4,imm2))
     731        __(srri(imm2,imm2,bitmap_shift))
     732        __(ref_global(temp0,ephemeral_refidx))
     733        __(srr(imm3,imm3,imm4))
     734        __(slri(imm2,imm2,word_shift))
     7353:      __(lrarx(imm1,temp0,imm2))
     736        __(or imm1,imm1,imm3)
     737        __(strcx(imm1,temp0,imm2))
     738        __(bne 3b)
     739        __(isync)       
     740        __(b 8f)
    670741
    671742/* arg_z = new value, arg_y = expected old value, arg_x = hash-vector,
     
    6817521:      __(lrarx(temp1,arg_x,imm4))
    682753        __(cmpr(cr1,temp1,arg_y))
    683         __(bne cr1,5f)
     754        __(bne cr1,9f)
    684755        __(strcx(arg_z,arg_x,imm4))
    685756        .globl C(egc_set_hash_key_conditional_test)
     
    694765        __(srri(imm0,imm0,dnode_shift))
    695766        __(cmplr(imm0,imm1))
    696         __(extract_bit_shift_count(imm2,imm0))
    697         __(srri(imm0,imm0,bitmap_shift))
    698         __(srr(imm3,imm3,imm2))
    699         __(ref_global(imm2,refbits))
    700         __(bge 4f)
     767        __(srri(imm2,imm0,8))
     768        __(extract_bit_shift_count(imm4,imm0))
     769        __(srri(imm0,imm0,bitmap_shift))       
     770        __(srr(imm3,imm3,imm4))
     771        __(ref_global(temp0,refbits))
     772        __(ref_global(temp1,ephemeral_refidx))
     773        __(bge 8f)
    701774        __(slri(imm0,imm0,word_shift))
    702 2:      __(lrarx(imm1,imm2,imm0))
     7752:      __(lrarx(imm1,temp0,imm0))
    703776        __(or imm1,imm1,imm3)
    704         __(strcx(imm1,imm2,imm0))
     777        __(strcx(imm1,temp0,imm0))
    705778        __(bne- 2b)
    706779        __(isync)
     780        __(load_highbit(imm3))
     781        __(extract_bit_shift_count(imm4,imm2))
     782        __(srri(imm2,imm2,bitmap_shift))
     783        __(srr(imm3,imm3,imm4))
     784        __(slri(imm2,imm2,word_shift))
     7853:      __(lrarx(imm1,temp1,imm2))
     786        __(or imm1,imm1,imm3)
     787        __(strcx(imm1,temp1,imm2))
     788        __(bne 3b)
     789        __(isync)       
     790       
    707791        /* Memoize hash table header */         
    708792        __(ref_global(imm1,ref_base))
     
    710794        __(srri(imm0,imm0,dnode_shift))
    711795        __(load_highbit(imm3))
     796        __(srri(imm2,imm0,8))
    712797        __(extract_bit_shift_count(imm4,imm0))
    713798        __(srri(imm0,imm0,bitmap_shift))
    714799        __(srr(imm3,imm3,imm4))
    715800        __(slri(imm0,imm0,word_shift))
    716         __(ldrx(imm1,imm2,imm0))
     801        __(ldrx(imm1,temp0,imm0))
    717802        __(and. imm1,imm1,imm3)
    718         __(bne 4f)
    719 3:      __(lrarx(imm1,imm2,imm0))
     803        __(bne 8f)
     8044:      __(lrarx(imm1,temp0,imm0))
    720805        __(or imm1,imm1,imm3)
    721         __(strcx(imm1,imm2,imm0))
    722         __(bne- 3b)
     806        __(strcx(imm1,temp0,imm0))
     807        __(bne- 4b)
     808        __(isync)
     809        __(load_highbit(imm3))
     810        __(extract_bit_shift_count(imm4,imm2))
     811        __(srri(imm2,imm2,bitmap_shift))
     812        __(srr(imm3,imm3,imm4))
     813        __(slri(imm2,imm2,word_shift))
     8145:      __(lrarx(imm1,temp1,imm2))
     815        __(or imm1,imm1,imm3)
     816        __(strcx(imm1,temp1,imm2))
     817        __(bne 5b)
    723818        __(isync)
    724819C(egc_write_barrier_end):
    725 4:      __(li arg_z,t_value)
    726         __(blr)
    727 5:      __(li imm0,RESERVATION_DISCHARGE)
     8208:      __(li arg_z,t_value)
     821        __(blr)
     8229:      __(li imm0,RESERVATION_DISCHARGE)
    728823        __(strcx(rzero,0,imm0))
    729824        __(li arg_z,nil_value)
Note: See TracChangeset for help on using the changeset viewer.