Changeset 5465
- Timestamp:
- Nov 3, 2006, 2:16:49 PM (18 years ago)
- Location:
- trunk/ccl/lisp-kernel
- Files:
-
- 2 edited
-
ppc-spentry.s (modified) (1 diff)
-
ppc-spjump.s (modified) (2 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/ccl/lisp-kernel/ppc-spentry.s
r5433 r5465 6550 6550 __(blr) 6551 6551 6552 /* Trap into the kernel debugger if any unused subprim is called */ 6553 _spentry(unused_0) 6554 __(b _SPbreakpoint) 6555 6556 _spentry(unused_1) 6557 __(b _SPbreakpoint) 6552 /* arg_x = array, arg_y = i, arg_z = j. Typecheck everything. 6553 We don't know whether the array is alleged to be simple or 6554 not, and don't know anythng about the element type. */ 6555 _spentry(aref2) 6556 __(extract_typecode(imm2,arg_x)) 6557 __(trap_unless_lisptag_equal(arg_y,tag_fixnum,imm0)) 6558 __(cmpri(cr2,imm2,subtag_arrayH)) 6559 __(trap_unless_lisptag_equal(arg_z,tag_fixnum,imm0)) 6560 __(bne cr2,1f) 6561 __(ldr(imm1,arrayH.rank(arg_x))) 6562 __(cmpri(imm1,2<<fixnumshift)) 6563 __(bne 1f) 6564 /* It's a 2-dimensional array. Check bounds */ 6565 __(ldr(imm0,arrayH.dim0(arg_x))) 6566 __(trlge(arg_y,imm0)) 6567 __(ldr(imm0,arrayH.dim0+node_size(arg_x))) 6568 __(trlge(arg_z,imm0)) 6569 __(unbox_fixnum(imm0,imm0)) 6570 __ifdef([PPC64]) 6571 __(mulld arg_y,arg_y,imm0) 6572 __else 6573 __(mullw arg_y,arg_y,imm0) 6574 __endif 6575 __(add arg_z,arg_z,arg_y) 6576 /* arg_z is now row-major-index; get data vector and 6577 add in possible offset */ 6578 __(mr arg_y,arg_x) 6579 0: __(ldr(arg_y,arrayH.data_vector(arg_y))) 6580 __(extract_subtag(imm1,arg_y)) 6581 __(cmpri(imm1,subtag_vectorH)) 6582 __(bgt local_label(misc_ref_common)) 6583 __(ldr(imm0,arrayH.displacement(arg_x))) 6584 __(mr arg_x,arg_y) 6585 __(add arg_z,arg_z,imm0) 6586 __(b 0b) 6587 1: 6588 __(uuo_interr(error_object_not_array_2d,arg_x)) 6589 6590 /* As for aref2 above, but temp = array, arg_x = i, arg_y = j, arg_z = newval */ 6591 _spentry(aset2) 6592 __(extract_typecode(imm2,temp0)) 6593 __(trap_unless_lisptag_equal(arg_x,tag_fixnum,imm0)) 6594 __(cmpri(cr2,imm2,subtag_arrayH)) 6595 __(trap_unless_lisptag_equal(arg_y,tag_fixnum,imm0)) 6596 __(bne cr2,1f) 6597 __(ldr(imm1,arrayH.rank(temp0))) 6598 __(cmpri(imm1,2<<fixnumshift)) 6599 __(bne 1f) 6600 /* It's a 2-dimensional array. Check bounds */ 6601 __(ldr(imm0,arrayH.dim0(temp0))) 6602 __(trlge(arg_x,imm0)) 6603 __(ldr(imm0,arrayH.dim0+node_size(temp0))) 6604 __(trlge(arg_y,imm0)) 6605 __(unbox_fixnum(imm0,imm0)) 6606 __ifdef([PPC64]) 6607 __(mulld arg_x,arg_x,imm0) 6608 __else 6609 __(mullw arg_x,arg_x,imm0) 6610 __endif 6611 __(add arg_y,arg_y,arg_x) 6612 /* arg_y is now row-major-index; get data vector and 6613 add in possible offset */ 6614 __(mr arg_x,temp0) 6615 0: __(ldr(arg_x,arrayH.data_vector(arg_x))) 6616 __(extract_subtag(imm1,arg_x)) 6617 __(cmpri(imm1,subtag_vectorH)) 6618 __(bgt local_label(misc_set_common)) 6619 __(ldr(imm0,arrayH.displacement(temp0))) 6620 __(mr temp0,arg_x) 6621 __(add arg_y,arg_y,imm0) 6622 __(b 0b) 6623 1: 6624 __(uuo_interr(error_object_not_array_2d,temp0)) 6558 6625 6559 6626 _spentry(unused_2) -
trunk/ccl/lisp-kernel/ppc-spjump.s
r4315 r5465 70 70 _spjump(keyword_bind) 71 71 _spjump(poweropen_ffcall) 72 _spjump( unused_0)72 _spjump(aref2) 73 73 _spjump(ksignalerr) 74 74 _spjump(stack_rest_arg) … … 117 117 _spjump(stack_misc_alloc_init) 118 118 _spjump(set_hash_key) 119 _spjump( unused_1)119 _spjump(aset2) 120 120 _spjump(callbuiltin) 121 121 _spjump(callbuiltin0)
Note:
See TracChangeset
for help on using the changeset viewer.
