Changeset 11221


Ignore:
Timestamp:
Oct 25, 2008, 8:51:07 PM (11 years ago)
Author:
rme
Message:

Implement SParef3 and SPaset3 (ticket:364).

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/source/lisp-kernel/x86-spentry32.s

    r11194 r11221  
    43734373_endsubp(aref2)
    43744374
     4375/* Like aref2, but temp1 = array, temp0 = i, arg_y = j, arg_z = k */
    43754376_spentry(aref3)
    4376         __(int $3)
     4377        __(testb $fixnummask,%temp0_b)
     4378        __(jne 0f)
     4379        __(testl $fixnummask,%arg_y)
     4380        __(jne 1f)
     4381        __(testb $fixnummask,%arg_z_b)
     4382        __(jne 2f)
     4383        __(extract_typecode(%temp1,%imm0))
     4384        __(cmpb $subtag_arrayH,%imm0_b)
     4385        __(jne 3f)
     4386        __(cmpl $3<<fixnumshift,arrayH.rank(%temp1))
     4387        __(jne 3f)
     4388        __(cmpl arrayH.dim0(%temp1),%temp0)
     4389        __(jae 4f)
     4390        __(movl arrayH.dim0+node_size(%temp1),%imm0)
     4391        __(cmpl %imm0,%arg_y)
     4392        __(jae 5f)
     4393        __(cmpl arrayH.dim0+(node_size*2)(%temp1),%arg_z)
     4394        __(jae 6f)
     4395        /* index computation: k + dim2 * (j + dim1 * i) */
     4396        /* (plus minor fussing for fixnum scaling) */
     4397        __(sarl $fixnumshift,%imm0)
     4398        __(imull %imm0,%temp0)
     4399        __(addl %arg_y,%temp0)
     4400        __(movl arrayH.dim0+(node_size*2)(%temp1),%imm0)
     4401        __(sarl $fixnumshift,%imm0)
     4402        __(imull %imm0,%temp0)
     4403        __(addl %temp0,%arg_z)
     4404        __(movl %temp1,%arg_y)
     44058:      __(addl arrayH.displacement(%arg_y),%arg_z)
     4406        __(movl arrayH.data_vector(%arg_y),%arg_y)
     4407        __(extract_subtag(%arg_y,%imm0_b))
     4408        __(cmpb $subtag_vectorH,%imm0_b)
     4409        __(ja C(misc_ref_common))
     4410        __(jmp 8b)
     44110:      __(uuo_error_reg_not_fixnum(Rtemp0))
     44121:      __(uuo_error_reg_not_fixnum(Rarg_y))
     44132:      __(uuo_error_reg_not_fixnum(Rarg_z))
     44143:      __(uuo_error_reg_not_type(Rtemp1,error_object_not_array_3d))
     44154:      __(uuo_error_array_bounds(Rtemp0,Rtemp1))
     44165:      __(uuo_error_array_bounds(Rarg_y,Rtemp1))
     44176:      __(uuo_error_array_bounds(Rarg_z,Rtemp1))
    43774418_endsubp(aref3)
    43784419
     
    44114452_endsubp(aset2)
    44124453
     4454/* temp1 = array, imm0 = i, temp0 = j, arg_y = k, arg_z = newval */
     4455/* ARRAY-DIMENSION-LIMIT is required to be a fixnum, so using imm0 is OK. */
    44134456_spentry(aset3)
    4414         __(int $3)
     4457        __(testb $fixnummask,%imm0_b)
     4458        __(jne 0f)
     4459        __(push %imm0)
     4460        __(testb $fixnummask,%temp0_b)
     4461        __(jne 1f)
     4462        __(testl $fixnummask,%arg_y)
     4463        __(jne 2f)
     4464        __(extract_typecode(%temp1,%imm0))
     4465        __(cmpb $subtag_arrayH,%imm0_b)
     4466        __(jne 3f)
     4467        __(cmpl $3<<fixnumshift,arrayH.rank(%temp1))
     4468        __(jne 3f)
     4469        __(movl arrayH.dim0(%temp1),%imm0)
     4470        __(cmpl %imm0,(%esp))   /* i on stack */
     4471        __(jae 4f)
     4472        __(movl arrayH.dim0+node_size(%temp1),%imm0)
     4473        __(cmpl %imm0,%temp0)
     4474        __(jae 5f)
     4475        __(cmpl arrayH.dim0+(node_size*2)(%temp1),%arg_y)
     4476        __(jae 6f)
     4477        /* index computation: k + dim2 * (j + dim1 * i) */
     4478        /* (plus minor fussing for fixnum scaling) */
     4479        __(sarl $fixnumshift,%imm0)
     4480        __(imull (%esp),%imm0)  /* i on stack */
     4481        __(addl %imm0,%temp0)
     4482        __(addl $node_size,%esp)
     4483        __(movl arrayH.dim0+(node_size*2)(%temp1),%imm0)
     4484        __(sarl $fixnumshift,%imm0)
     4485        __(imull %imm0,%temp0)
     4486        __(addl %temp0,%arg_y)
     4487        __(movl %temp1,%temp0)
     44888:      __(addl arrayH.displacement(%temp0),%arg_y)
     4489        __(movl arrayH.data_vector(%temp0),%temp0)
     4490        __(extract_subtag(%temp0,%imm0_b))
     4491        __(cmpb $subtag_vectorH,%imm0_b)
     4492        __(ja C(misc_set_common))
     4493        __(jmp 8b)
     44940:      __(uuo_error_reg_not_fixnum(Rimm0))
     44951:      __(uuo_error_reg_not_fixnum(Rtemp0))
     44962:      __(uuo_error_reg_not_fixnum(Rarg_y))
     44973:      __(uuo_error_reg_not_type(Rtemp0,error_object_not_array_3d))
     44984:      __(uuo_error_array_bounds(Rimm0,Rtemp1))
     44995:      __(uuo_error_array_bounds(Rtemp0,Rtemp1))
     45006:      __(uuo_error_array_bounds(Rarg_y,Rtemp1))
    44154501_endsubp(aset3)
    44164502
Note: See TracChangeset for help on using the changeset viewer.