Changeset 263


Ignore:
Timestamp:
Jan 11, 2004, 5:54:59 PM (21 years ago)
Author:
Gary Byers
Message:

Start to replace some old (old-binding scheme) entries with &restv support.
SPsvar_progvsave: save the old binding, not the new one.

File:
1 edited

Legend:

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

    r250 r263  
    333333
    334334
    335 /* Bind special symbol in arg_y to value in arg_z. */
    336 _spentry(bind)
    337         __(ldr(imm0,symbol.flags(arg_y)))
    338         __(ori imm0,imm0,sym_vbit_bound_mask)
    339         __(ldr(imm1,tcr.db_link(rcontext)))
    340         __(vpush(arg_z))
    341         __(vpush(arg_y))
    342         __(vpush(imm1))
    343         __(str(vsp,tcr.db_link(rcontext)))
    344         __(str(imm0,symbol.flags(arg_y)))
    345         __(blr)
     335
     336_spentry(req_stack_restv_arg)
    346337       
    347 _spentry(bind_self)
    348         /* Uh, this isn't exactly easy with deep binding.
    349            Do the lookup inline, so any error will be
    350            more intelligible */
    351         __(ldr(imm0,symbol.flags(arg_z)))
    352         __(andi. imm0,imm0,sym_vbit_bound_mask)
    353         __(mr arg_y,arg_z)
    354         __(ldr(imm2,tcr.db_link(rcontext)))
    355         __(cmpri(cr1,imm2,0))
    356         __(beq 2f)
    357         __(b 1f)
    358 0:      __(mr imm1,imm2)
    359         __(ldr(temp0,4(imm1)))
    360         __(cmpr(temp0,arg_y))
    361         __(ldr(imm2,0(imm1)))
    362         __(cmpri(cr1,imm2,0))
    363         __(bne 1f)
    364         __(ldr(arg_z,8(imm1)))
    365         __(b 9f)       
    366 1:      __(bne cr1,0b)
    367 2:      __(ldr(arg_z,symbol.vcell(arg_y)))
    368 9:      __(ldr(imm0,symbol.flags(arg_y)))
    369         __(ori imm0,imm0,sym_vbit_bound_mask)
    370         __(ldr(imm1,tcr.db_link(rcontext)))
    371         __(vpush(arg_z))
    372         __(vpush(arg_y))
    373         __(vpush(imm1))
    374         __(str(vsp,tcr.db_link(rcontext)))
    375         __(str(imm0,symbol.flags(arg_y)))
    376         __(blr)
    377 
    378 
    379 /* Bind special symbol in arg_z to  NIL. */
    380 _spentry(bind_nil)
    381         __(ldr(imm0,symbol.flags(arg_z)))
    382         __(ori imm0,imm0,sym_vbit_bound_mask)
    383         __(li temp1,nil_value)
    384         __(ldr(imm1,tcr.db_link(rcontext)))
    385         __(vpush(temp1))
    386         __(vpush(arg_z))
    387         __(vpush(imm1))
    388         __(str(vsp,tcr.db_link(rcontext)))
    389         __(str(imm0,symbol.flags(arg_z)))
    390         __(blr)
     338_spentry(stack_cons_restv_arg)
     339
     340_spentry(stack_restv_arg)
    391341       
    392342
    393 /* Undo one special binding. */
    394 _spentry(unbind)
    395         __(ldr(imm1,tcr.db_link(rcontext)))
    396         __(ldr(imm1,0(imm1)))
    397         __(str(imm1,tcr.db_link(rcontext)))
    398         __(blr)
     343_spentry(vspreadargz)
    399344
    400345
     
    26552600   arg_y is a known, non-nil symbol. */
    26562601_spentry(setqsym)
    2657         __(ldr(imm0,symbol.flags(arg_y)))
    2658         __(andi. imm0,imm0,sym_vbit_const_mask)
    2659         __(beq _SPspecset)
    2660         __(mr arg_z,arg_y)
    2661         __(lwi(arg_y,XCONST))
    2662         __(set_nargs(2))
    2663         __(b _SPksignalerr)
    26642602               
    26652603_spentry(reset)
     
    39943932        __(blr)
    39953933
    3996 /*
    3997   arg_y must be a real, live symbol. On exit, arg_z might be an
    3998   unbound_marker; any caller who cares should check for that.
    3999 */
    4000 _spentry(specref)
    4001         __(ldr(imm2,tcr.db_link(rcontext)))
    4002         __(ldr(imm0,symbol.flags(arg_y)))
    4003         __(andi. imm0,imm0,sym_vbit_bound_mask)
    4004         __(cmpri(cr1,imm2,0))
    4005         __(beq 9f)
    4006         __(b 1f)
    4007         .align 5
    4008 0:      __(mr imm1,imm2)
    4009         __(ldr(temp0,binding.sym(imm2)))
    4010         __(ldr(imm2,binding.link(imm2)))
    4011         __(cmpr(temp0,arg_y))
    4012         __(cmpri(cr1,imm2,0))
    4013         __(bne 1f)
    4014         __(ldr(arg_z,binding.val(imm1)))
    4015         __(blr)
    4016 1:      __(bne cr1,0b)
    4017 9:      __(ldr(arg_z,symbol.vcell(arg_y)))
    4018         __(li imm1,0)
    4019         __(blr)
    4020 
    4021 /*
    4022   Likewise, arg_y must be a real symbol.
    4023 */
    4024 _spentry(specset)
    4025         __(ldr(imm0,symbol.flags(arg_y)))
    4026         __(andi. imm0,imm0,sym_vbit_bound_mask)
    4027         __(ldr(imm2,tcr.db_link(rcontext)))
    4028         __(cmpri(cr1,imm2,0))
    4029         __(beq 2f)
    4030         __(b 1f)
    4031         .align 5
    4032 0:      __(mr imm1,imm2)
    4033         __(ldr(temp0,binding.sym(imm2)))
    4034         __(ldr(imm2,binding.link(imm2)))
    4035         __(cmpr(temp0,arg_y))
    4036         __(cmpri(cr1,imm2,0))
    4037         __(bne 1f)
    4038         __(str(arg_z,binding.val(imm1)))
    4039         __(blr)
    4040 1:      __(bne cr1,0b)
    4041 2:      __(str(arg_z,symbol.vcell(arg_y)))
    4042         __(blr)
    4043 
    4044 _spentry(specrefcheck)
    4045         __(ldr(imm0,symbol.flags(arg_y)))
    4046         __(andi. imm0,imm0,sym_vbit_bound_mask)
    4047         __(ldr(imm2,tcr.db_link(rcontext)))
    4048         __(cmpri(cr1,imm2,0))
    4049         __(beq 8f)
    4050         __(b 1f)
    4051         .align 5
    4052 0:      __(mr imm1,imm2)
    4053         __(ldr(temp0,binding.sym(imm2)))
    4054         __(ldr(imm2,binding.link(imm2)))
    4055         __(cmpr(temp0,arg_y))
    4056         __(cmpri(cr1,imm2,0))
    4057         __(bne 1f)
    4058         __(ldr(arg_z,binding.val(imm1)))
    4059         __(b 9f)
    4060 1:      __(bne cr1,0b)
    4061 8:      __(ldr(arg_z,symbol.vcell(arg_y)))
    4062 9:      __(treqi(arg_z,unbound_marker))
    4063         __(blr)
     3934_spentry(heap_restv_arg)
     3935
     3936_spentry(req_heap_restv_arg)
     3937
     3938_spentry(heap_cons_restv_arg)
    40643939
    40653940        /* Restore current thread's interrupt level to arg_z,
     
    44474322        __(_car(temp2,arg_z))
    44484323        __(_cdr(arg_z,arg_z))
    4449 4:      __(push(temp2,imm2))
     43244:      __(push(temp3,imm2))
    44504325        __(push(imm0,imm2))
    44514326        __(push(imm1,imm2))
Note: See TracChangeset for help on using the changeset viewer.