Changeset 5465


Ignore:
Timestamp:
Nov 3, 2006, 2:16:49 PM (18 years ago)
Author:
Gary Byers
Message:

.SParef2, .SPaset2.

Location:
trunk/ccl/lisp-kernel
Files:
2 edited

Legend:

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

    r5433 r5465  
    65506550        __(blr)
    65516551
    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)
     65790:      __(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)
     65871:             
     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)
     66150:      __(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)
     66231:             
     6624        __(uuo_interr(error_object_not_array_2d,temp0))       
    65586625               
    65596626_spentry(unused_2)
  • trunk/ccl/lisp-kernel/ppc-spjump.s

    r4315 r5465  
    7070        _spjump(keyword_bind)
    7171        _spjump(poweropen_ffcall)
    72         _spjump(unused_0)
     72        _spjump(aref2)
    7373        _spjump(ksignalerr)
    7474        _spjump(stack_rest_arg)
     
    117117        _spjump(stack_misc_alloc_init)
    118118        _spjump(set_hash_key)
    119         _spjump(unused_1)
     119        _spjump(aset2)
    120120        _spjump(callbuiltin)
    121121        _spjump(callbuiltin0)
Note: See TracChangeset for help on using the changeset viewer.