Ignore:
Timestamp:
Feb 22, 2004, 1:27:13 AM (16 years ago)
Author:
gb
Message:

PPC64 changes (some of them rather suspect ...). 32-bit kernel may be a
little funky ...

File:
1 edited

Legend:

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

    r529 r557  
    100100        __(li fn,0)
    101101        __(add imm1,vsp,nargs)
    102         __(la imm1,-4(imm1))
     102        __(la imm1,-node_size(imm1))
    103103        __(bne cr0,local_label(_throw_all_values))
    104104        __(set_nargs(1))
     
    127127        __(bne cr1,local_label(_throw_multiple))
    128128/* Catcher expects single value in arg_z */
    129         __(ldr(arg_z,-4(imm0)))
     129        __(ldr(arg_z,-node_size(imm0)))
    130130        __(b local_label(_throw_pushed_values))
    131131local_label(_throw_multiple):
     
    135135        __(subi imm2,imm2,fixnum_one)
    136136        __(cmpri(imm2,0))
    137         __(lwzu temp0,-4(imm0))
     137        __(ldru(temp0,-node_size(imm0)))
    138138        __(push(temp0,imm1))
    139139        __(bgt local_label(_throw_mvloop))
     
    190190        __(b local_label(_nthrowv_push_test))
    191191local_label(_nthrowv_push_loop):
    192         __(lwzu temp1,-4(imm1))
     192        __(ldru(temp1,-node_size(imm1)))
    193193        __(push(temp1,imm0))
    194194local_label(_nthrowv_push_test):
     
    227227        __(add imm1,nargs,vsp)
    228228        __(ldr(imm0,tsp_frame.backlink(tsp)))                      /* end of tsp frame */
    229         __(str(rzero,-4(imm0)))
     229        __(str(rzero,-node_size(imm0)))
    230230        __(la imm0,tsp_frame.data_offset(tsp))
    231231        __(str(nargs,0(imm0)))
    232232        __(b local_label(_nthrowv_tpushtest))
    233233local_label(_nthrowv_tpushloop):
    234         __(lwzu temp0,-4(imm1))
    235         __(stru(temp0,4(imm0)))
     234        __(ldru(temp0,-node_size(imm1)))
     235        __(stru(temp0,node_size(imm0)))
    236236        __(subi imm2,imm2,fixnum_one)
    237237local_label(_nthrowv_tpushtest):
    238238        __(cmpri(imm2,0))
    239239        __(bne local_label(_nthrowv_tpushloop))
    240         __(stru(imm4,4(imm0)))
     240        __(stru(imm4,node_size(imm0)))
    241241        __(ldr(vsp,lisp_frame.savevsp(sp)))
    242242        __(str(rzero,lisp_frame.savevsp(sp)))       /* tell stack overflow code to skip this frame */
     
    251251        __(b local_label(_nthrowv_tpoptest))
    252252local_label(_nthrowv_tpoploop):
    253         __(lwzu temp0,4(imm0))
     253        __(ldru(temp0,node_size(imm0)))
    254254        __(vpush(temp0))
    255255        __(subi imm2,imm2,fixnum_one)
     
    257257        __(cmpri(imm2,0))
    258258        __(bne local_label(_nthrowv_tpoploop))
    259         __(ldr(imm4,4(imm0)))
     259        __(ldr(imm4,node_size(imm0)))
    260260        __(unlink(tsp))
    261261        __(b local_label(_nthrowv_nextframe))
     
    319319        __(TSP_Alloc_Fixed_Boxed(8)) /* tsp overhead, value, throw count */
    320320        __(str(arg_z,tsp_frame.data_offset(tsp)))
    321         __(str(imm4,tsp_frame.data_offset+4(tsp)))
     321        __(str(imm4,tsp_frame.data_offset+node_size(tsp)))
    322322        __(ldr(vsp,lisp_frame.savevsp(sp)))
    323323        __(str(rzero,lisp_frame.savevsp(sp)))       /* Tell stack overflow code to ignore this frame */
    324324        __(bctrl)
    325325        __(ldr(arg_z,tsp_frame.data_offset(tsp)))
    326         __(ldr(imm4,tsp_frame.data_offset+4(tsp)))
     326        __(ldr(imm4,tsp_frame.data_offset+node_size(tsp)))
    327327        __(ldr(fn,lisp_frame.savefn(sp)))
    328328        __(ldr(loc_pc,lisp_frame.savelr(sp)))
     
    367367        __(ldr(temp0,0(vsp)))
    368368        __(cmpri(nargs,fixnum_one))
    369         __(la vsp,4(vsp))
     369        __(la vsp,node_size(vsp))
    370370        __(Cons(arg_z,temp0,arg_z))
    371371        __(subi nargs,nargs,fixnum_one)
     
    382382        __(ldr(temp0,0(vsp)))
    383383        __(cmpri(nargs,fixnum_one))
    384         __(la vsp,4(vsp))
     384        __(la vsp,node_size(vsp))
    385385        __(Cons(arg_z,temp0,arg_z))
    386386        __(subi nargs,nargs,fixnum_one)
     
    4014011:      __(ldr(temp0,0(vsp)))
    402402        __(cmpri(cr1,nargs,fixnum_one))
    403         __(la vsp,4(vsp))
     403        __(la vsp,node_size(vsp))
    404404        __(rplaca(imm1,temp0))
    405405        __(rplacd(imm1,arg_z))
     
    4224221:      __(ldr(temp0,0(vsp)))
    423423        __(cmpri(cr1,nargs,fixnum_one))
    424         __(la vsp,4(vsp))
     424        __(la vsp,node_size(vsp))
    425425        __(rplaca(imm1,temp0))
    426426        __(rplacd(imm1,arg_z))
     
    447447        __(add imm1,imm0,nargs)
    4484481:
    449         __(la nargs,-4(nargs))
     449        __(la nargs,-node_size(nargs))
    450450        __(cmpri(cr1,nargs,0))
    451451        __(ldr(temp1,0(vsp)))
    452         __(la vsp,4(vsp))
    453         __(stwu temp1,-4(imm1))
     452        __(la vsp,node_size(vsp))
     453        __(stru(temp1,-node_size(imm1)))
    454454        __(bne cr1,1b)
    4554552:
     
    504504   heap-cons the object if there's no room on the tstack.) */
    505505_spentry(stack_misc_alloc)
     506ifdef([PPC64],[
     507        ],[       
    506508        __(rlwinm. imm2,arg_y,32-fixnumshift,0,(8+fixnumshift)-1)
    507509        __(unbox_fixnum(imm0,arg_z))
     
    550552        __(srwi imm2,imm2,fixnumshift+3)
    551553        __(b 1b)
    552 
     554])
     555       
    553556/* subtype (boxed, of course) is vpushed, followed by nargs bytes worth of */
    554557/* initial-contents.  Note that this can be used to cons any type of initialized */
     
    638641        __(li arg_z,nil_value)
    639642        __(neg imm1,imm1)
    640         __(subi imm1,imm1,4)
     643        __(subi imm1,imm1,node_size)
    641644        __(bge 1f)
    642645        __(ldrx(arg_z,imm0,imm1))
    6436461:     
    644         __(la vsp,4(imm0))
     647        __(la vsp,node_size(imm0))
    645648        __(blr)
    646649       
     
    665668        __(add imm0,nargs,vsp)
    666669        __(blt- cr0,1f)
    667         __(ldr(arg_z,-4(imm0)))
     670        __(ldr(arg_z,-node_size(imm0)))
    6686711:
    669672        __(mr vsp,temp0)
     
    696699        __(cmpr(cr0,imm2,nargs))
    697700        __(addi imm2,imm2,fixnum_one)
    698         __(lwzu arg_z,-4(imm1))
     701        __(ldru(arg_z,-node_size(imm1)))
    699702        __(push(arg_z,imm0))
    700703        __(bne cr0,5b)
     
    756759        __(ldr(temp0,0(vsp)))
    757760        __(cmpri(imm1,fixnum_one))
    758         __(la vsp,4(vsp))
     761        __(la vsp,node_size(vsp))
    759762        __(Cons(arg_z,temp0,arg_z))
    760763        __(subi imm1,imm1,fixnum_one)
     
    776779        __(ldr(temp0,0(vsp)))
    777780        __(cmpri(imm1,fixnum_one))
    778         __(la vsp,4(vsp))
     781        __(la vsp,node_size(vsp))
    779782        __(Cons(arg_z,temp0,arg_z))
    780783        __(subi imm1,imm1,fixnum_one)
     
    793796        __(ldr(temp0,0(vsp)))
    794797        __(cmpri(imm1,fixnum_one))
    795         __(la vsp,4(vsp))
     798        __(la vsp,node_size(vsp))
    796799        __(Cons(arg_z,temp0,arg_z))
    797800        __(subi imm1,imm1,fixnum_one)
     
    890893        __(subi arg_z,arg_z,2<<fixnumshift)
    891894        __(cmplri(cr0,arg_z,0))
    892         __(ldr(arg_x,0(varptr)))
    893         __(ldr(arg_y,4(varptr)))
    894         __(str(imm4,0(varptr)))
    895         __(str(imm4,4(varptr)))
    896         __(la varptr,8(varptr))
    897         __(str(arg_x,0(valptr)))
    898         __(str(arg_y,4(valptr)))
    899         __(la valptr,8(valptr))
     895        __(ldr(arg_x,node_size*0(varptr)))
     896        __(ldr(arg_y,node_size*1(varptr)))
     897        __(str(imm4,node_size*0(varptr)))
     898        __(str(imm4,node_size*1(varptr)))
     899        __(la varptr,node_size*2(varptr))
     900        __(str(arg_x,node_size*0(valptr)))
     901        __(str(arg_y,node_size*1(valptr)))
     902        __(la valptr,node_size*2(valptr))
    900903        __(bne cr0,4b)
    901904
     
    9139165:
    914917        __(cmpwi cr0,keyword_flags,16<<fixnumshift) /* seen :a-o-k yet ? */
    915         __(lwzu arg_z,-4(valptr))
    916         __(lwzu arg_y,-4(valptr))
     918        __(ldru(arg_z,-node_size(valptr)))
     919        __(ldru(arg_y,-node_size(valptr)))
    917920        __(cmpri(cr1,arg_y,nil_value))
    918921        __(li arg_x,nrs.kallowotherkeys)
     
    13371340/* Argument in arg_z, result in imm0.  May use temp0. */
    13381341_spentry(getxlong)
     1342ifdef([PPC64],[
     1343        ],[       
    13391344        __(extract_lisptag(imm0,arg_z))
    13401345        __(cmpri(cr0,imm0,tag_fixnum))
     
    13681373local_label(error):
    13691374        __(uuo_interr(error_object_not_integer,arg_z)) /* not quite right but what 68K MCL said */
    1370        
     1375
     1376])
     1377               
    13711378/* Everything up to the last arg has been vpushed, nargs is set to
    13721379   the (boxed) count of things already pushed.
     
    13751382   ppc2-invoke-fn assumes that temp1 is preserved here. */
    13761383_spentry(spreadargz)
     1384ifdef([PPC64],[
     1385        ],[       
    13771386        __(extract_lisptag(imm1,arg_z))
    13781387        __(cmpri(cr1,imm1,tag_list))
     
    14081417        __(set_nargs(2))
    14091418        __(b _SPksignalerr)
    1410 
     1419])
    14111420       
    14121421/* Tail-recursively funcall temp0. */
     
    14241433        __(add imm1,imm1,vsp)
    142514341:
    1426         __(lwzu temp2,-4(imm1))
     1435        __(ldru(temp2,-node_size(imm1)))
    14271436        __(cmpr(cr0,imm1,vsp))
    14281437        __(push(temp2,imm0))
     
    14481457        __(mtlr loc_pc)
    144914581:
    1450         __(lwzu temp2,-4(imm1))
     1459        __(ldru(temp2,-node_size(imm1)))
    14511460        __(cmpr(cr0,imm1,vsp))
    14521461        __(push(temp2,imm0))
     
    14821491        __(add imm1,imm1,vsp)
    148314921:
    1484         __(lwzu temp2,-4(imm1))
     1493        __(ldru(temp2,-node_size(imm1)))
    14851494        __(cmpr(cr0,imm1,vsp))
    14861495        __(push(temp2,imm0))
     
    15071516        __(add imm1,imm1,vsp)
    150815171:
    1509         __(lwzu temp2,-4(imm1))
     1518        __(ldru(temp2,-node_size(imm1)))
    15101519        __(cmpr(cr0,imm1,vsp))
    15111520        __(push(temp2,imm0))
     
    15421551        __(add imm1,imm1,vsp)
    154315521:
    1544         __(lwzu fname,-4(imm1))
     1553        __(ldru(fname,-node_size(imm1)))
    15451554        __(cmpr(cr0,imm1,vsp))
    15461555        __(push(fname,imm0))
     
    15581567       
    15591568_spentry(misc_ref)
     1569ifdef([PPC64],[
     1570        ],[
    15601571        __(trap_unless_fulltag_equal(arg_y,fulltag_misc,imm0))
    15611572        __(trap_unless_lisptag_equal(arg_z,tag_fixnum,imm0))
     
    15681579   lisp object in arg_z.  Do type and bounds-checking.
    15691580*/
    1570        
     1581])       
    15711582misc_ref_common:
     1583ifdef([PPC64],[
     1584        ],[       
    15721585        __(extract_fulltag(imm2,imm1))
    15731586        __(cmpri(cr0,imm2,fulltag_nodeheader))
     
    16671680        __(str(imm1,double_float.value+4(arg_z)))
    16681681        __(blr)
     1682])       
    16691683       
    16701684       
     
    16871701        __(vpush(imm0))
    16881702        __(vpush(imm0))
    1689         __(andi. imm0,vsp,1<<2) /* (oddp vsp ?) */
     1703        __(andi. imm0,vsp,1<<word_shift) /* (oddp vsp ?) */
    16901704        __(beq cr0,1f)
    1691         __(str(arg_y,8(vsp))) /* car */
    1692         __(str(arg_z,4(vsp))) /* cdr */
    1693         __(la arg_z,fulltag_cons+4(vsp))
    1694         __(blr)
    1695 1:
    1696         __(str(arg_y,4(vsp))) /* car, again */
     1705        __(str(arg_y,node_size*2(vsp))) /* car */
     1706        __(str(arg_z,node_size(vsp))) /* cdr */
     1707        __(la arg_z,fulltag_cons+node_size(vsp))
     1708        __(blr)
     17091:
     1710        __(str(arg_y,node_size(vsp))) /* car, again */
    16971711        __(str(arg_z,0(vsp)))
    16981712        __(la arg_z,fulltag_cons(vsp))
     
    18151829        __(li arg_z,nil_value)
    18161830        __(ldr(imm2,tsp_frame.backlink(tsp)))
    1817         __(la imm2,-8+tag_list(imm2))
     1831        __(la imm2,-tsp_frame.fixed_overhead+fulltag_cons(imm2))
    18181832        __(b 2f)
    181918331:
     
    18471861
    18481862_spentry(stkgvector)
    1849         __(la imm0,-4(nargs))
     1863        __(la imm0,-fixnum_one(nargs))
    18501864        __(cmpri(cr1,imm0,0))
    18511865        __(add imm1,vsp,nargs)
    1852         __(lwzu temp0,-4(imm1))
     1866        __(ldru(temp0,-node_size(imm1)))
    18531867        __(slwi imm2,imm0,num_subtag_bits-fixnumshift)
    18541868        __(rlwimi imm2,temp0,32-fixnumshift,32-num_subtag_bits,31)
     
    18631877        __(addi imm0,imm0,fixnum1)
    18641878        __(cmpr(cr1,imm0,nargs))
    1865         __(lwzu temp0,-4(imm1))
    1866         __(stwu temp0,4(imm3))
     1879        __(ldru(temp0,-node_size(imm1)))
     1880        __(stru(temp0,node_size(imm3)))
    186718812:
    18681882        __(bne cr1,1b)
     
    18871901
    18881902_spentry(misc_alloc)
     1903ifdef([PPC64],[
     1904        ],[       
    18891905        __(extract_unsigned_byte_bits_(imm2,arg_y,24))
    18901906        __(unbox_fixnum(imm0,arg_z))
     
    191919359:
    19201936        __(uuo_interr(error_object_not_unsigned_byte_24,arg_y))
     1937])       
    19211938       
    19221939/* almost exactly as above, but "swap exception handling info"
     
    19962013        __(b 1f)
    199720140:      __(mr imm1,imm2)
    1998         __(ldr(temp0,4(imm1)))
     2015        __(ldr(temp0,binding.sym(imm1)))
    19992016        __(cmpr(temp0,arg_y))
    2000         __(ldr(imm2,0(imm1)))
     2017        __(ldr(imm2,binding.link(imm1)))
    20012018        __(cmpri(cr1,imm2,0))
    20022019        __(bne 1f)
    2003         __(ldr(arg_z,8(imm1)))
     2020        __(ldr(arg_z,binding.val(imm1)))
    20042021        __(b 9f)
    200520221:      __(bne cr1,0b)
     
    20322049
    20332050_spentry(macro_bind)
     2051ifdef([PPC64],[
     2052        ],[       
    20342053        __(mr whole_reg,arg_reg)
    20352054        __(extract_lisptag(imm0,arg_reg))
     
    20432062        __(set_nargs(2))
    20442063        __(b _SPksignalerr)
    2045 
     2064])
    20462065
    20472066_spentry(destructuring_bind)
     
    20512070_spentry(destructuring_bind_inner)
    20522071        __(mr whole_reg,arg_z)
    2053 destbind1:     
     2072destbind1:
     2073ifdef([PPC64],[
     2074        ],[
    20542075        /* Extract required arg count. */
    20552076         /* A bug in gas: can't handle shift count of "32" (= 0 */
     
    22272248        __(li temp0,t_value)
    22282249        __(bne cr0,match_keys_loop)     /* already saw this */
    2229         __(str(arg_y,4(imm0)))
    2230         __(str(temp0,0(imm0)))
     2250        __(str(arg_y,node_size*1(imm0)))
     2251        __(str(temp0,node_size*2(imm0)))
    22312252        __(b match_keys_loop)
    22322253match_test:
     
    22592280        __(set_nargs(2))
    22602281        __(b _SPksignalerr)
    2261        
     2282])     
    22622283/* vpush the values in the value set atop the vsp, incrementing nargs. */
    22632284/* Discard the tsp frame; leave values atop the vsp. */
     
    22712292        __(mr imm2,tsp) /* last segment */
    22722293local_label(walkloop):
    2273         __(ldr(imm3,12(imm1))) /* next segment */
     2294        __(ldr(imm3,tsp_frame.fixed_overhead+node_size(imm1))) /* next segment */
    22742295        __(cmpr(cr0,imm0,imm3)) /* last segment? */
    2275         __(str(imm2,12(imm1))) /* reverse pointer */
     2296        __(str(imm2,tsp_frame.fixed_overhead+node_size(imm1))) /* reverse pointer */
    22762297        __(mr imm2,imm1) /* last segment <- current segment */
    22772298        __(mr imm1,imm3) /* current segment <- next segment */
     
    22812302/* walk backwards, pushing values on VSP and incrementing NARGS */
    22822303local_label(pushloop):
    2283         __(ldr(imm0,8(imm2))) /* nargs in segment */
     2304        __(ldr(imm0,tsp_frame.data_offset(imm2))) /* nargs in segment */
    22842305        __(cmpri(cr0,imm0,0))
    22852306        __(cmpr(cr1,imm2,tsp))
    2286         __(la imm3,16(imm2))
     2307        __(la imm3,tsp_frame.data_offset+(2*node_size)(imm2))
    22872308        __(add imm3,imm3,imm0)
    22882309        __(add nargs,nargs,imm0)
    22892310        __(b 2f)
    229023111:
    2291         __(lwzu arg_z,-4(imm3))
     2312        __(ldru(arg_z,-node_size(imm3)))
    22922313        __(cmpri(cr0,imm0,fixnum_one))
    22932314        __(subi imm0,imm0,fixnum_one)
     
    229523162:
    22962317        __(bne cr0,1b)
    2297         __(ldr(imm2,12(imm2))) /* previous segment */
     2318        __(ldr(imm2,tsp_frame.data_offset+node_size(imm2))) /* previous segment */
    22982319        __(bne cr1,local_label(pushloop))
    22992320        __(unlink(tsp))
     
    23092330        __(beq cr1,local_label(yz))
    23102331        __(blt cr1,local_label(z))
    2311         __(ldr(arg_z,0(vsp)))
    2312         __(ldr(arg_y,4(vsp)))
    2313         __(ldr(arg_x,8(vsp)))
    2314         __(la vsp,12(vsp))
     2332        __(ldr(arg_z,node_size*0(vsp)))
     2333        __(ldr(arg_y,node_size*1(vsp)))
     2334        __(ldr(arg_x,node_size*2(vsp)))
     2335        __(la vsp,node_size*3(vsp))
    23152336        __(blr)
    23162337local_label(yz):
    2317         __(ldr(arg_z,0(vsp)))
    2318         __(ldr(arg_y,4(vsp)))
    2319         __(la vsp,8(vsp))
     2338        __(ldr(arg_z,node_size*0(vsp)))
     2339        __(ldr(arg_y,node_size*1(vsp)))
     2340        __(la vsp,node_size*2(vsp))
    23202341        __(blr)
    23212342local_label(z):
    2322         __(ldr(arg_z,0(vsp)))
    2323         __(la vsp,4(vsp))
     2343        __(ldr(arg_z,node_size*0(vsp)))
     2344        __(la vsp,node_size*1(vsp))
    23242345        __(blr)
    23252346
     
    23472368/* like misc_set, only pass the (boxed) subtag in temp0 */
    23482369_spentry(subtag_misc_set)
     2370ifdef([PPC64],[
     2371],[               
    23492372        __(trap_unless_fulltag_equal(arg_x,fulltag_misc,imm0))
    23502373        __(trap_unless_lisptag_equal(arg_y,tag_fixnum,imm0))
     
    23522375        __(trlge(arg_y,imm0))
    23532376        __(unbox_fixnum(imm1,temp0))
     2377])       
    23542378misc_set_common:
     2379        ifdef([PPC64],[
     2380        ],[
    23552381        __(extract_fulltag(imm2,imm1))
    23562382        __(cmpri(cr0,imm2,fulltag_nodeheader))
     
    25142540        __(strx(imm2,arg_x,imm0))
    25152541        __(blr)
    2516        
     2542])       
    25172543
    25182544/* "spread" the lexpr in arg_z.
     
    25272553        __(cmpri(cr1,nargs,0))
    25282554        __(cmpri(cr2,nargs,2<<fixnumshift))
    2529         __(la imm1,4(imm1))
     2555        __(la imm1,node_size(imm1))
    25302556        __(bge cr3,9f)
    25312557        __(beq cr4,2f)
     
    25472573        __(cmpri(cr3,imm0,4<<fixnumshift))
    25482574        __(subi imm0,imm0,fixnumone)
    2549         __(lwzu arg_z,-4(imm1))
     2575        __(ldru(arg_z,-node_size(imm1)))
    25502576        __(vpush(arg_z))
    255125779:
    25522578        __(bne cr3,8b)
    2553         __(ldr(arg_x,-4(imm1)))
    2554         __(ldr(arg_y,-8(imm1)))
    2555         __(ldr(arg_z,-12(imm1)))
     2579        __(ldr(arg_x,-node_size*1(imm1)))
     2580        __(ldr(arg_y,-node_size*2(imm1)))
     2581        __(ldr(arg_z,-node_size*3(imm1)))
    25562582        __(blr)
    25572583
     
    25592585        /* lexpr, maybe vpop arg_x */
    256025862:     
    2561         __(ldr(arg_y,-4(imm1)))
    2562         __(ldr(arg_z,-8(imm1)))
     2587        __(ldr(arg_y,-node_size*1(imm1)))
     2588        __(ldr(arg_z,-node_size*2(imm1)))
    25632589        __(beqlr cr2)           /* return if (new) nargs = 2 */
    25642590        __(vpop(arg_x))
     
    25682594        /* maybe vpop arg_y, arg_x */
    256925951:     
    2570         __(ldr(arg_z,-4(imm1)))
     2596        __(ldr(arg_z,-node_size(imm1)))
    25712597        __(bltlr cr2)           /* return if (new) nargs < 2 */
    25722598        __(vpop(arg_y))
     
    26032629        __(cmpri(cr0,imm3,1<<fixnumshift))
    26042630        __(subi imm3,imm3,1<<fixnumshift)
    2605         __(lwzu temp0,-4(imm0))
    2606         __(stwu temp0,-4(imm2))
     2631        __(ldru(temp0,-node_size(imm0)))
     2632        __(stru(temp0,-node_size(imm2)))
    26072633        __(bne cr0,1b)
    260826342:
     
    26362662        __(str(imm1,tsp_frame.backlink(tsp))) /* keep one tsp "frame" as far as rest of lisp is concerned */
    26372663        __(str(nargs,tsp_frame.data_offset(tsp)))
    2638         __(str(imm2,tsp_frame.data_offset+4(tsp))) /* previous tsp */
    2639         __(la imm3,tsp_frame.data_offset+8(tsp))
     2664        __(str(imm2,tsp_frame.data_offset+node_size(tsp))) /* previous tsp */
     2665        __(la imm3,tsp_frame.data_offset+node_size*2(tsp))
    26402666        __(add imm3,imm3,nargs)
    26412667        __(add imm0,vsp,nargs)
     
    26432669        __(b 2f)
    264426701:
    2645         __(lwzu arg_z,-4(imm0))
     2671        __(ldru(arg_z,-node_size(imm0)))
    26462672        __(cmpr(cr0,imm0,vsp))
    2647         __(stwu arg_z,-4(imm3))
     2673        __(stru(arg_z,-node_size(imm3)))
    264826742:
    26492675        __(bne cr0,1b)
     
    28612887        /* Next, determine the length of arg_y.  We */
    28622888        /* know that it's a proper list. */
    2863         __(li imm0,-4)
     2889        __(li imm0,-node_size)
    28642890        __(mr temp0,arg_y)
    286528911:
    28662892        __(cmpri(cr0,temp0,nil_value))
    2867         __(la imm0,4(imm0))
     2893        __(la imm0,node_size(imm0))
    28682894        __(_cdr(temp0,temp0))
    28692895        __(bne 1b)
     
    32793305
    32803306_spentry(builtin_eql)
     3307ifdef([PPC64],[
     3308        ],[       
    32813309        __(cmpr(cr0,arg_y,arg_z))
    32823310        __(extract_lisptag(imm0,arg_y))
     
    329233202:      __(li arg_z,nil_value)
    32933321        __(blr)
     3322])       
    32943323       
    32953324_spentry(builtin_length)
     3325ifdef([PPC64],[
     3326        ],[   
    32963327        __(extract_typecode(imm0,arg_z))
    32973328        __(cmpri(cr0,imm0,min_vector_subtag))
     
    33293360        __(mr arg_z,temp2)
    33303361        __(blr)
     3362])       
    33313363
    33323364_spentry(builtin_seqtype)
     3365ifdef([PPC64],[
     3366],[               
    33333367        __(extract_typecode(imm0,arg_z))
    33343368        __(cmpri(cr0,imm0,tag_list))
     
    334233762:
    33433377        __(jump_builtin(_builtin_seqtype,1))
     3378])       
    33443379       
    33453380_spentry(builtin_assq)
     
    43194354        /* Next, determine the length of arg_y.  We */
    43204355        /* know that it's a proper list. */
    4321         __(li imm0,-4)
     4356        __(li imm0,-node_size)
    43224357        __(mr temp4,arg_y)
    432343581:
    43244359        __(cmpri(cr0,temp4,nil_value))
    4325         __(la imm0,4(imm0))
     4360        __(la imm0,node_size(imm0))
    43264361        __(_cdr(temp4,temp4))
    43274362        __(bne 1b)
Note: See TracChangeset for help on using the changeset viewer.