Changeset 10615


Ignore:
Timestamp:
Sep 5, 2008, 1:56:58 AM (12 years ago)
Author:
gb
Message:

PPC version of set_hash_key_conditional (untested).
Still needs pc_luser_xp support in ppc-exceptions.c

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/gz/lisp-kernel/ppc-spentry.s

    r10613 r10615  
    630630        __(bne cr1,3f)
    631631        __(strcx(arg_z,arg_x,imm4))
     632        .globl C(store_node_conditonal_test)
     633C(store_node_conditonal_test): 
    632634        __(bne 1b)
    633635        __(isync)
     
    6536553:      __(li imm0,RESERVATION_DISCHARGE)
    654656        __(strcx(rzero,0,imm0))
    655 C(egc_write_barrier_end):
    6566574:      __(li arg_z,nil_value)
    657658        __(blr)
     
    659660        __(blr)
    660661
    661        
     662/* arg_z = new value, arg_y = expected old value, arg_x = hash-vector,
     663   vsp[0] = (boxed) byte-offset */
     664_spentry(set_hash_key_conditional)
     665        .globl C(egc_set_hash_key_conditional)
     666C(egc_set_hash_key_conditional):
     667        __(crclr 2)             /* 2 = cr0_EQ */
     668        __(cmplr(cr2,arg_z,arg_x))
     669        __(vpop(imm4))
     670        __(unbox_fixnum(imm4,imm4))
     6711:      __(lrarx(temp1,arg_x,imm4))
     672        __(cmpr(cr1,temp1,arg_y))
     673        __(bne cr1,4f)
     674        __(strcx(arg_z,arg_x,imm4))
     675        .globl C(egc_set_hash_key_conditional_test)
     676C(egc_set_hash_key_conditional_test):   
     677        __(bne 1b)
     678        __(isync)
     679        __(add imm0,imm4,arg_x)
     680        __(ref_global(imm2,heap_start))
     681        __(ref_global(imm1,oldspace_dnode_count))
     682        __(sub imm0,imm0,imm2)
     683        __(load_highbit(imm3))
     684        __(srri(imm0,imm0,dnode_shift))
     685        __(cmplr(imm0,imm1))
     686        __(extract_bit_shift_count(imm2,imm0))
     687        __(srri(imm0,imm0,bitmap_shift))
     688        __(srr(imm3,imm3,imm2))
     689        __(ref_global(imm2,refbits))
     690        __(bge 5f)
     691        __(slri(imm0,imm0,word_shift))
     6922:      __(lrarx(imm1,imm2,imm0))
     693        __(or imm1,imm1,imm3)
     694        __(strcx(imm1,imm2,imm0))
     695        __(bne- 2b)
     696        /* Memoize hash table header */         
     697        __(ref_global(imm1,heap_start))
     698        __(sub imm0,arg_x,imm1)
     699        __(srri(imm0,imm0,dnode_shift))
     700        __(load_highbit(imm3))
     701        __(extract_bit_shift_count(imm4,imm0))
     702        __(srri(imm0,imm0,bitmap_shift))
     703        __(srr(imm3,imm3,imm4))
     704        __(slri(imm0,imm0,word_shift))
     705        __(ldrx(imm1,imm2,imm0))
     706        __(and. imm1,imm1,imm3)
     707        __(bne 5f)
     7083:      __(lrarx(imm1,imm2,imm0))
     709        __(or imm1,imm1,imm3)
     710        __(strcx(imm1,imm2,imm0))
     711        __(bne- 3b)
     712        __(isync)
     713        __(b 5f)
     7144:      __(li imm0,RESERVATION_DISCHARGE)
     715        __(strcx(rzero,0,imm0))
     716C(egc_write_barrier_end):
     717        __(li arg_z,nil_value)
     718        __(blr)
     7195:      __(li arg_z,t_value)
     720        __(blr)
     721       
     722       
     723               
    662724_spentry(conslist)
    663725        __(li arg_z,nil_value)
Note: See TracChangeset for help on using the changeset viewer.