Changeset 263
- Timestamp:
- Jan 11, 2004, 5:54:59 PM (21 years ago)
- File:
-
- 1 edited
-
trunk/ccl/lisp-kernel/spentry.s (modified) (4 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/ccl/lisp-kernel/spentry.s
r250 r263 333 333 334 334 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) 346 337 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) 391 341 392 342 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) 399 344 400 345 … … 2655 2600 arg_y is a known, non-nil symbol. */ 2656 2601 _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)2664 2602 2665 2603 _spentry(reset) … … 3994 3932 __(blr) 3995 3933 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) 4064 3939 4065 3940 /* Restore current thread's interrupt level to arg_z, … … 4447 4322 __(_car(temp2,arg_z)) 4448 4323 __(_cdr(arg_z,arg_z)) 4449 4: __(push(temp 2,imm2))4324 4: __(push(temp3,imm2)) 4450 4325 __(push(imm0,imm2)) 4451 4326 __(push(imm1,imm2))
Note:
See TracChangeset
for help on using the changeset viewer.
