Changeset 521


Ignore:
Timestamp:
Feb 11, 2004, 10:59:19 AM (21 years ago)
Author:
Gary Byers
Message:

Parameterize more for ppc32/ppc64.

File:
1 edited

Legend:

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

    r40 r521  
    4444
    4545ifdef([PPC64],[
     46        define([clrrri],[
     47        clrrdi $@
     48        ])       
     49        define([clrlri],[
     50        clrldi $@
     51        ])
     52        define([clrlri_],[
     53        clrldi. $@
     54        ])
    4655        define([ldr],[
    4756        ld $@
     
    8392        tdeqi $@
    8493        ])
     94        define([trnei],[
     95        tdnei $@
     96        ])
     97        define([trgti],[
     98        tdgti $@
     99        ])
    85100        define([srari],[
    86101        sradi #@
     
    93108        ])
    94109],[
     110        define([clrrri],[
     111        clrrwi $@
     112        ])
     113        define([clrlri],[
     114        clrlwi $@
     115        ])
     116        define([clrlri_],[
     117        clrlwi. $@
     118        ])
    95119        define([ldr],[
    96120        lwz $@
     
    135159        tweqi $@
    136160        ])
     161        define([trnei],[
     162        twnei $@
     163        ])
     164        define([trgti],[
     165        twgti $@
     166        ])
    137167        define([srari],[
    138168        srawi #@
     
    151181        define([dnode_align],[
    152182        la $1,($3+(dnode_size-1))($2)
    153         ifdef([PPC64],[
    154         clrrdi $1,$1,dnode_align_bits
    155         ],[
    156         clrrwi $1,$1,dnode_align_bits
    157         ])])
     183        clrrri($1,$1,dnode_align_bits)
     184])
    158185
    159186define([extract_fulltag],[
    160         clrlwi $1,$2,nbits_in_word-ntagbits])
     187        clrlri($1,$2,nbits_in_word-ntagbits)
     188        ])
    161189
    162190define([extract_lisptag],[
    163         clrlwi $1,$2,nbits_in_word-nlisptagbits])
     191        clrlri($1,$2,nbits_in_word-nlisptagbits)
     192        ])
    164193
    165194define([extract_lisptag_],[
    166         clrlwi. $1,$2,nbits_in_word-nlisptagbits])
    167 
    168 define([merge_lisptag],[
    169         rlwimi $1,$2,nlisptagbits,28,29])
    170 
    171 define([merge_lisptag_],[
    172         rlwimi. $1,$2,nlisptagbits,28,29])
    173 
    174 define([extract_2_lisptags],[
    175         extract_lisptag($1,$2)
    176         merge_lisptag($1,$3)])
    177 
    178 define([extract_2_lisptags_],[
    179         extract_lisptag($1,$2)
    180         merge_lisptag_($1,$3)])
     195        clrlri_($1,$2,nbits_in_word-nlisptagbits)
     196        ])
    181197
    182198define([extract_subtag],[
     
    187203
    188204define([extract_header],[
    189         lwz $1,misc_header_offset($2)])
     205        ldr($1,misc_header_offset($2))])
    190206
    191207define([extract_typecode],[
     
    210226
    211227define([push],[
    212         stwu $1,-4($2)])
     228        stru($1,-node_size($2))])
    213229       
    214230        /* Generally not a great idea. */
    215231define([pop],[
    216         lwz $1,0($2)
    217         la $2,4($2)])
     232        ldr($1,0($2))
     233        la $2,node_size($2)])
    218234       
    219235define([vpush],[
     
    223239        pop($1,vsp)])
    224240       
    225 define([memoize],[
    226         push($1,memo)])
    227241               
    228242define([unlink],[
    229         lwz $1,0($1)])
     243        ldr($1,0($1))
     244 ])
    230245
    231246       
     
    256271                       
    257272define([getvheader],[
    258         lwz $1,vector.header($2)])
     273        ldr($1,vector.header($2))])
    259274       
    260275        /* Size is unboxed element count */
    261276define([header_size],[
    262         srwi $1,$2,num_subtag_bits])
     277        srri($1,$2,num_subtag_bits)])
    263278       
    264279        /* "Length" is fixnum element count */
     
    277292       
    278293define([ref_global],[
    279         lwz $1,lisp_globals.$2(0)])
     294        ldr($1,lisp_globals.$2(0))
     295])
    280296
    281297define([set_global],[
    282         stw $1,lisp_globals.$2(0)])
     298        str($1,lisp_globals.$2(0))
     299])
    283300
    284301define([ref_nrs_value],[
    285         lwz $1,((nrs.$2)+(symbol.vcell))(0)])
     302        ldr($1,((nrs.$2)+(symbol.vcell))(0))
     303])
    286304       
    287305define([set_nrs_value],[
    288         stw $1,((nrs.$2)+(symbol.vcell))(0)])
     306        str($1,((nrs.$2)+(symbol.vcell))(0))
     307])
    289308
    290309define([extract_unsigned_byte_bits],[
    291         rlwinm $1,$2,0,32-fixnumshift,31-($3+fixnumshift)])
     310        rlwinm $1,$2,0,32-fixnumshift,31-($3+fixnumshift)
     311])
    292312
    293313define([extract_unsigned_byte_bits_],[/* dest,src,width*/
    294         rlwinm. $1,$2,0,32-fixnumshift,31-($3+fixnumshift)])
    295        
     314        rlwinm. $1,$2,0,32-fixnumshift,31-($3+fixnumshift)
     315])
     316
    296317        /* vpop argregs - nargs is known to be non-zero */
    297318define([vpop_argregs_nz],[
    298319        new_macro_labels()
    299         cmplwi cr1,nargs,2*4
     320        cmplri(cr1,nargs,node_size*2)
    300321        vpop(arg_z)
    301322        blt cr1,macro_label(l0)
     
    305326macro_label(l0):])
    306327
     328               
    307329        /* vpush argregs */
    308330define([vpush_argregs],[
    309331        new_macro_labels()
    310         cmplwi cr0,nargs,0
    311         cmplwi cr1,nargs,2*4
     332        cmplri(cr0,nargs,0)
     333        cmplri(cr1,nargs,node_size*2)
    312334        beq cr0,macro_label(done)
    313335        blt cr1,macro_label(z)
     
    322344
    323345define([create_lisp_frame],[
    324         stwu sp,-lisp_frame.size(sp)])
    325 
     346        stru(sp,-lisp_frame.size(sp))
     347])
     348
     349               
    326350define([build_lisp_frame],[
    327351        create_lisp_frame()
    328         stw ifelse($1,[],fn,$1),lisp_frame.savefn(sp)
    329         stw ifelse($2,[],loc_pc,$2),lisp_frame.savelr(sp)
    330         stw ifelse($3,[],vsp,$3),lisp_frame.savevsp(sp)
    331 ])
    332        
     352        str(ifelse($1,[],fn,$1),lisp_frame.savefn(sp))
     353        str(ifelse($2,[],loc_pc,$2),lisp_frame.savelr(sp))
     354        str(ifelse($3,[],vsp,$3),lisp_frame.savevsp(sp))
     355])
     356
     357               
    333358define([discard_lisp_frame],[
    334359        la sp,lisp_frame.size(sp)])
     
    336361       
    337362define([_car],[
    338         lwz $1,cons.car($2)])
     363        ldr($1,cons.car($2))
     364])
    339365       
    340366define([_cdr],[
    341         lwz $1,cons.cdr($2)])
     367        ldr($1,cons.cdr($2))])
    342368       
    343369define([rplaca],[
    344         stw $2,cons.car($1)])
     370        str($2,cons.car($1))])
    345371       
    346372define([rplacd],[
    347         stw $2,cons.cdr($1)])
     373        str($2,cons.cdr($1))])
    348374
    349375define([vpush_saveregs],[
     
    358384       
    359385define([restore_saveregs],[
    360         lwz save0,0($1)
    361         lwz save1,4($1)
    362         lwz save2,8($1)
    363         lwz save3,12($1)       
    364         lwz save4,16($1)
    365         lwz save5,20($1)
    366         lwz save6,24($1)
    367         lwz save7,28($1)])
     386        ldr(save0,node_size*0($1))
     387        ldr(save1,node_size*1($1))
     388        ldr(save2,node_size*2($1))
     389        ldr(save3,node_size*3($1))
     390        ldr(save4,node_size*4($1))
     391        ldr(save5,node_size*5($1))
     392        ldr(save6,node_size*6($1))
     393        ldr(save7,node_size*7($1))
     394])
    368395
    369396define([vpop_saveregs],[
    370397        restore_saveregs(vsp)
    371         la vsp,32(vsp)])
     398        la vsp,node_size*8(vsp)])
    372399
    373400define([trap_unless_lisptag_equal],[
    374401        extract_lisptag($3,$1)
    375         twnei $3,$2])
     402        trnei($3,$2)
     403])
    376404
    377405define([trap_unless_fulltag_equal],[
    378406        extract_fulltag($3,$1)
    379         twnei $3,$2])
     407        trnei($3,$2)
     408])
    380409       
    381410define([trap_unless_typecode_equal],[
    382411        extract_typecode($3,$1)
    383         twnei $3,$2])
     412        trnei($3,$2)
     413])
    384414       
    385415/* "jump" to the code-vector of the function in nfn. */
    386416define([jump_nfn],[
    387         lwz temp0,_function.codevector(nfn)
     417        ldr(temp0,_function.codevector(nfn))
    388418        mtctr temp0
    389         bctr])
     419        bctr
     420])
    390421
    391422/* "call the code-vector of the function in nfn. */
    392423define([call_nfn],[
    393         lwz temp0,_function.codevector(nfn)
     424        ldr(temp0,_function.codevector(nfn))
    394425        mtctr temp0
    395         bctrl])
     426        bctrl
     427])
    396428       
    397429
    398430/* "jump" to the function in fnames function cell. */
    399431define([jump_fname],[
    400         lwz nfn,symbol.fcell(fname)
    401         jump_nfn()])
     432        ldr(nfn,symbol.fcell(fname))
     433        jump_nfn()
     434])
    402435
    403436/* call the function in fnames function cell. */
    404437define([call_fname],[
    405         lwz nfn,symbol.fcell(fname)
    406         call_nfn()])
     438        ldr(nfn,symbol.fcell(fname))
     439        call_nfn()
     440])
    407441
    408442define([do_funcall],[
    409443        new_macro_labels()
    410444        extract_lisptag(imm0,temp0)
    411         cmpwi imm0,tag_misc
     445        cmpri(imm0,tag_misc)
    412446        mr nfn,temp0
    413447        bne- macro_label(bad)
    414448        extract_subtag(imm0,temp0)
    415         cmpwi imm0,subtag_function
    416         cmpwi cr1,imm0,subtag_symbol
     449        cmpri(imm0,subtag_function)
     450        cmpri(cr1,imm0,subtag_symbol)
    417451        bne cr0,macro_label(_sym)
    418452        jump_nfn()
     
    427461define([mkcatch],[
    428462        mflr loc_pc
    429         lwz imm0,tcr.catch_top(rcontext)
     463        ldr(imm0,tcr.catch_top(rcontext))
    430464        lwz imm1,0(loc_pc) /* a forward branch to the catch/unwind cleanup */
    431465        rlwinm imm1,imm1,0,6,29 /* extract LI */
     
    437471        TSP_Alloc_Fixed_Boxed(catch_frame.size)
    438472        la imm1,tsp_frame.data_offset+fulltag_misc(tsp)
    439         stw arg_z,catch_frame.catch_tag(imm1)
    440         stw imm0,catch_frame.link(imm1)
    441         stw imm2,catch_frame.mvflag(imm1)
    442         lwz imm0,tcr.db_link(rcontext)
    443         stw sp,catch_frame.csp(imm1)
     473        str(arg_z,catch_frame.catch_tag(imm1))
     474        str(imm0,catch_frame.link(imm1))
     475        str(imm2,catch_frame.mvflag(imm1))
     476        ldr(imm0,tcr.db_link(rcontext))
     477        str(sp,catch_frame.csp(imm1))
    444478        lwi(imm2,(catch_frame.element_count<<num_subtag_bits)|subtag_catch_frame)
    445         stw imm0,catch_frame.db_link(imm1)
     479        str(imm0,catch_frame.db_link(imm1))
    446480        stmw first_nvr,catch_frame.regs(imm1)
    447         stw imm2,catch_frame.header(imm1)
    448         lwz imm0,tcr.xframe(rcontext)
    449         stw imm0,catch_frame.xframe(imm1)
    450         stw rzero,catch_frame.tsp_segment(imm1)
    451         stw imm1,tcr.catch_top(rcontext)
     481        str(imm2,catch_frame.header(imm1))
     482        ldr(imm0,tcr.xframe(rcontext))
     483        str(imm0,catch_frame.xframe(imm1))
     484        str(rzero,catch_frame.tsp_segment(imm1))
     485        str(imm1,tcr.catch_top(rcontext))
    452486        blr
    453487])     
    454488
    455 /* Altivec. N.B.: gas 2.11 supports the Altivec instruction set */
    456 
    457 define([LVX],[
    458         .long (31<<26)+(($1)<<21)+(($2)<<16)+(($3<<11))+(103<<1)
    459 ])
    460 
    461 define([STVX],[
    462         .long (31<<26)+(($1)<<21)+(($2)<<16)+(($3<<11))+(231<<1)
    463 ])
    464 
    465 define([MFVSCR],[
    466         .long (4<<26)+(($1)<<21)+(770<<1)
    467 ])
    468 
    469 define([MTVSCR],[
    470         .long (4<<26)+(($1)<<21)+(802<<1)
    471 ])
     489
    472490
    473491define([DCBZL],[
     
    510528define([Cons],[
    511529        la allocptr,(-cons.size+fulltag_cons)(allocptr)
    512         twllt allocptr,allocbase
    513         stw $3,cons.cdr(allocptr)
    514         stw $2,cons.car(allocptr)
     530        trllt(allocptr,allocbase)
     531        str($3,cons.cdr(allocptr))
     532        str($2,cons.car(allocptr))
    515533        mr $1,allocptr
    516534        clear_alloc_tag()
     
    545563        la $3,-fulltag_misc($3)
    546564        sub allocptr,allocptr,$3
    547         twllt allocptr,allocbase
    548         stw $2,misc_header_offset(allocptr)
     565        trllt(allocptr,allocbase)
     566        str($2,misc_header_offset(allocptr))
    549567        mr $1,allocptr
    550568        clear_alloc_tag()
     
    556574define([Misc_Alloc_Fixed],[
    557575        la allocptr,(-$3)+fulltag_misc(allocptr)
    558         twllt allocptr,allocbase
    559         stw $2,misc_header_offset(allocptr)
     576        trllt(allocptr,allocbase)
     577        str($2,misc_header_offset(allocptr))
    560578        mr $1,allocptr
    561579        clear_alloc_tag()
     
    587605
    588606define([Set_TSP_Frame_Unboxed],[
    589         stw tsp,tsp_frame.type(tsp)
     607        str(tsp,tsp_frame.type(tsp))
    590608])
    591609
    592610define([Set_TSP_Frame_Boxed],[
    593         stw rzero,tsp_frame.type(tsp)
     611        str(rzero,tsp_frame.type(tsp))
    594612])
    595613               
     
    626644        new_macro_labels()
    627645        mr $1,tsp
    628         lwz $2,tsp_frame.backlink(tsp)
     646        ldr($2,tsp_frame.backlink(tsp))
    629647        la $2,-8($2)
    630648        b macro_label(zero_tsp_test)
     
    632650        stfdu fp_zero,8($1)
    633651macro_label(zero_tsp_test):     
    634         cmpw ifelse($3,[],[cr0],$3),$1,$2
     652        cmpr(ifelse($3,[],[cr0],$3),$1,$2)
    635653        bne ifelse($3,[],[cr0],$3),macro_label(zero_tsp_loop)
    636654])
     
    640658        new_macro_labels()
    641659        mr $1,tsp
    642         lwz $2,tsp_frame.backlink(tsp)
     660        ldr($2,tsp_frame.backlink(tsp))
    643661        la $2,-8($2)
    644662macro_label(zero_tsp_loop):
    645663        stfdu fp_zero,8($1)
    646         cmpw ifelse($3,[],[cr0],$3),$1,$2
     664        cmpr(ifelse($3,[],[cr0],$3),$1,$2)
    647665        bne ifelse($3,[],[cr0],$3),macro_label(zero_tsp_loop)
    648666])
     
    652670define([TSP_Alloc_Var_Unboxed],[
    653671        neg ifelse($2,[],$1,$2),$1
    654         stwux tsp,tsp,ifelse($2,[],$1,$2)
     672        strux(tsp,tsp,ifelse($2,[],$1,$2))
    655673        Set_TSP_Frame_Unboxed()
    656674])
     
    671689define([check_pending_interrupt],[
    672690        new_macro_labels()
    673         lwz nargs,tcr.interrupt_level(rcontext)
    674         cmpwi ifelse($1,[],[cr0],$1),nargs,0
     691        ldr(nargs,tcr.interrupt_level(rcontext))
     692        cmpri(ifelse($1,[],[cr0],$1),nargs,0)
    675693        blt ifelse($1,[],[cr0],$1),macro_label(done)
    676694        bgt ifelse($1,[],[cr0],$1),macro_label(trap)
    677         lwz nargs,tcr.interrupt_pending(rcontext)
     695        ldr(nargs,tcr.interrupt_pending(rcontext))
    678696macro_label(trap):
    679         twgti nargs,0
     697        trgti(nargs,0)
    680698macro_label(done):
    681699])
Note: See TracChangeset for help on using the changeset viewer.