Changeset 9676


Ignore:
Timestamp:
Jun 6, 2008, 5:16:58 AM (11 years ago)
Author:
rme
Message:

In misc_ref_common, just go ahead and do mark-as-imm on a node register
instead of goofing around trying to use byte registers to store a 16 bit
value in two halves.

SPthrow: correct misplaced instruction

Add a commented-out destbind1. (Leaving it in results makes ld gripe about
"bad vanilla relocation length". Don't know why yet.)

SPdestructuring_bind, SPdestructuring_bind_inner: don't use a real register
for %whole_reg; store it in the tcr spill area.

SPbuiltin_aset1: expect vector in temp1

SPspread_lexprz: fix bug

SParef2, SPaset2: new

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/ia32/lisp-kernel/x86-spentry32.s

    r9625 r9676  
    5959_endsubp(misc_ref)
    6060
    61 /* %imm0 = subtag, %arg_y = vector, %arg_z = index. */
     61/* %imm0_b = subtag, %arg_y = vector, %arg_z = index. */
    6262/* Bounds/type-checking done in caller. */
    6363_startfn(C(misc_ref_common))
     64        __(movzbl %imm0_b,%imm0)
    6465        __(leal local_label(misc_ref_jmp)(,%imm0,4),%imm0)
    6566        __(jmp *(%imm0))
     
    880881        __(movl %arg_y,%imm0)
    881882        __(shrl $1,%imm0)
    882         __(movl %arg_z,%arg_y)
    883         /* If there's a better way, I'd be glad to hear of it. */
    884         __(shll $8-fixnumshift,%arg_z)
    885         __(movb %arg_z_bh,misc_data_offset(%temp0,%imm0))
    886         __(xorb %arg_z_bh,%arg_z_bh)
    887         __(shrl $8,%arg_z)
    888         __(movb %arg_z_bh,misc_data_offset+1(%temp0,%imm0))
    889         __(movl %arg_y,%arg_z)
     883        __(mark_as_imm(%temp1))
     884        __(unbox_fixnum(%arg_z,%temp1))
     885        __(movw %temp1_w,misc_data_offset(%temp0,%imm0))
     886        __(mark_as_node(%temp1))
    890887        __(ret)
    891888local_label(misc_set_s16):
     
    899896        __(movl %arg_y,%imm0)
    900897        __(shrl $1,%imm0)
    901         __(movl %arg_z,%arg_y)
    902         /* If there's a better way, I'd be glad to hear of it. */
    903         __(shll $8-fixnumshift,%arg_z)
    904         __(movb %arg_z_bh,misc_data_offset(%temp0,%imm0))
    905         __(xorb %arg_z_bh,%arg_z_bh)
    906         __(sarl $8,%arg_z)
    907         __(movb %arg_z_bh,misc_data_offset+1(%temp0,%imm0))
    908         __(movl %arg_y,%arg_z)
     898        __(mark_as_imm(%temp1))
     899        __(unbox_fixnum(%arg_z,%temp1))
     900        __(movw %temp1_w,misc_data_offset(%temp0,%imm0))
     901        __(mark_as_node(%temp1))
    909902        __(ret)
    910903local_label(misc_set_bit_vector):
     
    11551148        __(jne local_label(_throw_loop))
    11561149        __(push %ra0)
    1157         __(uuo_error_reg_not_tag(Rtemp0,subtag_catch_frame))
     1150        __(uuo_error_reg_not_tag(Rarg_y,subtag_catch_frame))
    11581151        __(pop %ra0)
    11591152        __(jmp _SPthrow)
     
    11631156        __(movd %mm0,%nargs)
    11641157        __(jne local_label(_throw_multiple))
     1158        __(movl $nil_value,%arg_z)
    11651159        __(test %nargs,%nargs)
    11661160        __(je local_label(_throw_one_value))
     
    11681162        __(add %nargs,%esp)
    11691163local_label(_throw_one_value):
    1170         __(movl $nil_value,%arg_z)
    11711164        __(movl $local_label(_threw_one_value),%ra0)
    11721165        __(jmp _SPnthrow1value)
     
    27792772_endsubp(misc_alloc)
    27802773
     2774/* N.B. arg count word in %imm0, not %nargs */
     2775/* no %whole_reg;  it's in %rcontext:tcr.save0 */
     2776/* %arg_reg is %temp1, key vector in %arg_y */
    27812777_startfn(C(destbind1))
    2782         __(int $3)
    2783         __(jmp *%ra0)
     2778        __(uuo_error_debug_trap)
     2779dnl     /* Save entry %esp in case of error   */
     2780dnl     __(movd %esp,%mm0)
     2781dnl     /* Save arg count word */
     2782dnl     __(movd %imm0,%mm1)
     2783dnl     /* Extract required arg count.   */
     2784dnl         __(testb %imm0_b,%imm0_b)
     2785dnl     __(je local_label(opt))         /* skip if no required args   */
     2786dnl     __(movzbl %imm0_b,%imm0)
     2787dnl local_label(req_loop):     
     2788dnl     __(compare_reg_to_nil(%arg_reg))
     2789dnl     __(je local_label(toofew))
     2790dnl     __(movb $fulltagmask,%imm0_bh)
     2791dnl     __(andb %arg_reg_b,%imm0_bh)
     2792dnl     __(cmpb $fulltag_cons,%imm0_bh)
     2793dnl     __(jne local_label(badlist))
     2794dnl     __(subb $1,%imm0_b)
     2795dnl     __(pushl cons.car(%arg_reg))
     2796dnl     __(_cdr(%arg_reg,%arg_reg))
     2797dnl     __(jne local_label(req_loop))
     2798dnl     __(movd %mm1,%imm0)
     2799dnl local_label(opt):
     2800dnl     __(movzbl %imm0_bh,%imm0)
     2801dnl     __(test %imm0,%imm0)
     2802dnl     __(je local_label(rest_keys))
     2803dnl     __(btl $initopt_bit,%imm0)
     2804dnl     __(jc local_label(opt_supp))
     2805dnl     /* 'simple' &optionals:  no supplied-p, default to nil.   */
     2806dnl local_label(simple_opt_loop):
     2807dnl     __(compare_reg_to_nil(%arg_reg))
     2808dnl     __(je local_label(default_simple_opt))
     2809dnl     __(movb $fulltagmask,%imm0_bh)
     2810dnl     __(andb %arg_reg_b,%imm0_bh)
     2811dnl     __(cmpb $fulltag_cons,%imm0_bh)
     2812dnl     __(jne local_label(badlist))
     2813dnl     __(subb $1,%imm0_b)
     2814dnl     __(pushl cons.car(%arg_reg))
     2815dnl     __(_cdr(%arg_reg,%arg_reg))
     2816dnl     __(jne local_label(simple_opt_loop))
     2817dnl     __(jmp local_label(rest_keys))
     2818dnl local_label(default_simple_opt):
     2819dnl     __(subb $1,%imm0_b)
     2820dnl     __(pushl $nil_value)
     2821dnl     __(jne local_label(default_simple_opt))
     2822dnl     __(jmp local_label(rest_keys))
     2823dnl local_label(opt_supp):
     2824dnl     __(movb $fulltagmask,%imm0_bh)
     2825dnl     __(andb %arg_reg_b,%imm0_bh)
     2826dnl     __(compare_reg_to_nil(%arg_z))
     2827dnl     __(je local_label(default_hard_opt))
     2828dnl     __(cmpb $fulltag_cons,%imm0_bh)
     2829dnl     __(jne local_label(badlist))
     2830dnl     __(subb $1,%imm0_b)
     2831dnl     __(pushl cons.car(%arg_reg))
     2832dnl     __(_cdr(%arg_reg,%arg_reg))
     2833dnl     __(push $t_value)
     2834dnl     __(jne local_label(opt_supp))
     2835dnl     __(jmp local_label(rest_keys))
     2836dnl local_label(default_hard_opt):
     2837dnl     __(subb $1,%imm0_b)
     2838dnl     __(push $nil_value)
     2839dnl     __(push $nil_value)
     2840dnl     __(jne local_label(default_hard_opt))
     2841dnl local_label(rest_keys):     
     2842dnl     __(btl $restp_bit,%imm0)
     2843dnl     __(jc local_label(have_rest))
     2844dnl     __(btl $keyp_bit,%imm0)
     2845dnl     __(jc local_label(have_keys))
     2846dnl     __(compare_reg_to_nil(%arg_reg))
     2847dnl     __(jne local_label(toomany))
     2848dnl     __(movss %fpzero,%rcontext:tcr.save0)
     2849dnl     __(jmp *%ra0)
     2850dnl local_label(have_rest):
     2851dnl     __(pushl %arg_reg)
     2852dnl     __(btl $keyp_bit,%imm0)
     2853dnl     __(jc local_label(have_keys))
     2854dnl     __(movss %fpzero,%rcontext:tcr.save0)
     2855dnl     __(jmp *%ra0)
     2856dnl     /* Ensure that arg_reg contains a proper,even-length list.  */
     2857dnl     /* Insist that its length is <= 512 (as a cheap circularity check.)   */
     2858dnl local_label(have_keys):
     2859dnl     __(movl $256,%imm0)
     2860dnl     __(push %arg_reg)
     2861dnl     __(push %arg_z)
     2862dnl     __(xorl %arg_z,%arg_z)
     2863dnl local_label(count_keys_loop):
     2864dnl     __(compare_reg_to_nil(%arg_reg))
     2865dnl     __(je local_label(counted_keys))
     2866dnl     __(subl $1,%imm0)
     2867dnl     __(jl local_label(toomany))
     2868dnl     __(movb $fulltag_mask,%arg_z_bh)
     2869dnl     __(andb %arg_reg_b,%arg_z_bh)
     2870dnl     __(cmpb $fulltag_cons,%arg_z_bh)
     2871dnl     __(jne local_label(badlist))
     2872dnl     __(_cdr(%arg_reg,%arg_reg))
     2873dnl     __(movb $fulltag_mask,%arg_z_bh)
     2874dnl     __(andb %arg_reg_b,%arg_z_bh)
     2875dnl     __(cmpb $fulltag_cons,%arg_z_bh)
     2876dnl     __(jne local_label(badlist))
     2877dnl     __(_cdr(%arg_reg,%arg_reg))
     2878dnl     __(jmp local_label(count_keys_loop))
     2879dnl local_label(counted_keys):         
     2880dnl     /* We've got a proper, even-length list of key/value pairs in  */
     2881dnl     /* arg_reg. For each keyword var in the lambda-list, push a pair  */
     2882dnl     /* of NILs on the vstack.   */
     2883dnl     __(pop %arg_z)
     2884dnl     __(pop %arg_reg)
     2885dnl     __(movd %mm1,%imm0)
     2886dnl     __(shrl $16,%imm0)
     2887dnl     __(movzbl %imm0_b,%imm0)
     2888dnl     __(movl %esp,%rcontext:tcr.unboxed0)    /* 0th value/supplied-p pair */
     2889dnl     __(jmp local_label(push_pair_test))
     2890dnl local_label(push_pair_loop):
     2891dnl     __(push $nil_value)
     2892dnl     __(push $nil_value)
     2893dnl local_label(push_pair_test):       
     2894dnl     __(subb $1,%imm0_b)
     2895dnl     __(jge local_label(push_pair_loop))
     2896dnl     __(push %temp0) /* keyword */
     2897dnl     __(push %arg_z) /* value */
     2898dnl     __(vector_length(%arg_y,%imm0))
     2899dnl     __(push %arg_reg)
     2900dnl     __(push %imm0)  /* keyword vector length */
     2901dnl     __(movl $0,%rcontext:tcr.unboxed1) /* count of unknown keywords seen */
     2902dnl local_label(match_keys_loop):
     2903dnl     __(movl 4(%esp),%arg_reg)
     2904dnl     __(compare_reg_to_nil(%arg_reg))
     2905dnl     __(je local_label(matched_keys))
     2906dnl     __(_car(%arg_reg,%temp0))
     2907dnl     __(_cdr(%arg_reg,%arg_reg))
     2908dnl     __(_car(%arg_reg,%arg_z))
     2909dnl     __(_cdr(%arg_reg,%arg_reg))
     2910dnl     __(movl %arg_reg,4(%esp))
     2911dnl     __(xorl %temp1,%temp1)
     2912dnl     __(jmp local_label(match_test))
     2913dnl local_label(match_loop):
     2914dnl     __(cmpl misc_data_offset(%arg_y,%temp1),%arg_z)
     2915dnl     __(je local_label(matched))
     2916dnl     __(addl $node_size,%temp1)
     2917dnl local_label(match_test):
     2918dnl     __(cmpl %temp1,(%esp))  /* compare index, keyword vector length */
     2919dnl     __(jne local_label(match_loop))
     2920dnl     /* No match.  Note unknown keyword, check for :allow-other-keys   */
     2921dnl     __(addl $1,%rcontext:tcr.unboxed1)
     2922dnl     __(cmpl $nrs.kallowotherkeys,%temp0)
     2923dnl     __(jne local_label(match_keys_loop))
     2924dnl     __(subl $1,%rcontext:tcr.unboxed1)
     2925dnl     __(btsl $seen_aok_bit,%imm0)
     2926dnl     __(jc local_label(match_keys_loop))
     2927dnl     /* First time we've seen :allow-other-keys.  Maybe set aok_bit.   */
     2928dnl     __(compare_reg_to_nil(%arg_z))
     2929dnl     __(je local_label(match_keys_loop))
     2930dnl     __(btsl $aok_bit,%imm0)
     2931dnl     __(jmp local_label(match_keys_loop))
     2932dnl     /* Got a match.  Worry about :allow-other-keys here, too.   */
     2933dnl local_label(matched):
     2934dnl     __(negl %temp1)
     2935dnl     __(shll $1,%temp1)
     2936dnl     __(addl %rcontext:tcr.unboxed0,%temp1)
     2937dnl     __(cmpl $nil_value,-node_size*2(%temp1))
     2938dnl     __(jne local_label(match_keys_loop))
     2939dnl     __(movl %arg_z,-node_size(%temp1))
     2940dnl     __(movl $t_value,-node_size*2(%temp1))
     2941dnl     __(cmpl $nrs.kallowotherkeys,%temp0)
     2942dnl     __(jne local_label(match_keys_loop))
     2943dnl     __(btsl $seen_aok_bit,%imm0)
     2944dnl     __(jnc local_label(match_keys_loop))
     2945dnl     __(compare_reg_to_nil(%arg_z))
     2946dnl     __(je local_label(match_keys_loop))
     2947dnl     __(btsl $aok_bit,%imm0)
     2948dnl     __(jmp local_label(match_keys_loop))
     2949dnl local_label(matched_keys): 
     2950dnl     __(cmpl $0,%rcontext:tcr.unboxed1)      /* any unknown keys seen? */
     2951dnl     __(je local_label(keys_ok))
     2952dnl     __(btl $aok_bit,%imm0)
     2953dnl     __(jnc local_label(badkeys))
     2954dnl local_label(keys_ok):       
     2955dnl     __(movss %fpzero,%rcontext:tcr.save0)
     2956dnl     __(jmp *%ra0)
     2957dnl     /* Some unrecognized keywords.  Complain generically about   */
     2958dnl     /* invalid keywords.   */
     2959dnl local_label(badkeys):
     2960dnl     __(movl $XBADKEYS,%arg_y)
     2961dnl     __(jmp local_label(destructure_error))
     2962dnl local_label(toomany):
     2963dnl     __(movl $XCALLTOOMANY,%arg_y)
     2964dnl     __(jmp local_label(destructure_error))
     2965dnl local_label(toofew):
     2966dnl     __(movl $XCALLTOOFEW,%arg_y)
     2967dnl     __(jmp local_label(destructure_error))
     2968dnl local_label(badlist):
     2969dnl     __(movl $XCALLNOMATCH,%arg_y)
     2970dnl local_label(destructure_error):
     2971dnl     __(movd %mm0,%esp)              /* undo everything done to the stack */
     2972dnl     __(movl %rcontext:tcr.save0,%arg_z)     /* %whole_reg */
     2973dnl     __(movss %fpzero,%rcontext:tcr.save0)
     2974dnl     __(set_nargs(2))
     2975dnl     __(push %ra0)
     2976dnl     __(jmp _SPksignalerr)
    27842977_endfn(C(destbind1))
    27852978
     
    27892982
    27902983_spentry(destructuring_bind)
    2791         __(mov %arg_reg,%whole_reg)
     2984        __(movl %arg_reg,%rcontext:tcr.save0)   /* %whole_reg */
    27922985        __(jmp C(destbind1))
    27932986_endsubp(destructuring_bind)
    27942987
    27952988_spentry(destructuring_bind_inner)
    2796         __(mov %arg_z,%whole_reg)
     2989        __(movl %arg_z,%rcontext:tcr.save0)     /* %whole_reg */
    27972990        __(jmp C(destbind1))
    27982991_endsubp(destructuring_bind_inner)
     
    28743067/* values. This makes recover_values harder.   */
    28753068_spentry(add_values)
    2876         __(int $3)
    28773069        /* do we need to preserve imm0? */
    28783070        __(test %nargs,%nargs)
     
    29353127
    29363128_spentry(recover_values_for_mvcall)
    2937         __(int $3)
    29383129        __(movl %ra0,%rcontext:tcr.save0) /* temp0 */
    29393130        /* First, walk the segments reversing the pointer to previous  */
     
    36903881
    36913882_spentry(builtin_aset1)
     3883        __(movl %temp1,%temp0)
    36923884        __(extract_typecode(%temp0,%imm0))
    36933885        __(box_fixnum(%imm0,%temp1))
     
    36973889        __(push $reserved_frame_marker)
    36983890        __(push $reserved_frame_marker)
    3699         __(push %temp0) /* vector */
    3700         __(push %temp1) /* return addr */
     3891        __(push %temp0)
     3892        __(push %temp1)
    37013893        __(jump_builtin(_builtin_aset1,3))
    37023894_endsubp(builtin_aset1)
     
    38704062        /* lexpr count is two or more: vpush args from the lexpr until */
    38714063        /* we have only two left, then assign them to arg_y and arg_z */
    3872 2:      __(cmpl $(3*node_size),%imm0)
     40642:      __(cmpl $(2*node_size),%imm0)
     4065        __(je local_label(push_loop_end))
     4066local_label(push_loop):
    38734067        __(lea -1*node_size(%imm0),%imm0)
    38744068        __(push -node_size(%arg_y))
    38754069        __(lea -1*node_size(%arg_y),%arg_y)
     4070        __(cmpl $(2*node_size),%imm0)
    38764071        __(jne 2b)
     4072local_label(push_loop_end):
    38774073        __(movl -node_size*2(%arg_y),%arg_z)
    38784074        __(movl -node_size*1(%arg_y),%arg_y)
     
    39404136_endsubp(callback)
    39414137
     4138/* temp0 = array, arg_y = i, arg_z = j. Typecheck everything.
     4139   We don't know whether the array is alleged to be simple or
     4140   not, and don't know anythng about the element type.  */
     4141
    39424142_spentry(aref2)
    3943         __(int $3)
     4143        __(testl $fixnummask,%arg_y)
     4144        __(je 0f)
     4145        __(uuo_error_reg_not_fixnum(Rarg_y))
     41460:      __(testb $fixnummask,%arg_z_b)
     4147        __(je 1f)
     4148        __(uuo_error_reg_not_fixnum(Rarg_z))
     41491:      __(extract_typecode(%temp0,%imm0))
     4150        __(cmpb $subtag_arrayH,%imm0_b)
     4151        __(jne 2f)
     4152        __(cmpl $2<<fixnumshift,arrayH.rank(%temp0))
     4153        __(je 3f)
     41542:      __(uuo_error_reg_not_type(Rtemp0,error_object_not_array_2d))
     41553:      __(cmpl arrayH.dim0(%temp0),%arg_y)
     4156        __(jb 4f)
     4157        __(uuo_error_array_bounds(Rarg_y,Rtemp0))
     41584:      __(movl arrayH.dim0+node_size(%temp0),%imm0)
     4159        __(cmpl %imm0,%arg_z)
     4160        __(jb 5f)
     4161        __(uuo_error_array_bounds(Rarg_z,Rtemp0))
     41625:      __(sarl $fixnumshift,%imm0)
     4163        __(imull %arg_y,%imm0)
     4164        __(addl %imm0,%arg_z)
     4165        __(movl %temp0,%arg_y)
     4166        __(xorl %temp1,%temp1)
     41676:      __(addl arrayH.displacement(%arg_y),%arg_z)
     4168        __(movl arrayH.data_vector(%arg_y),%arg_y)
     4169        __(extract_subtag(%arg_y,%imm0_b))
     4170        __(cmpb $subtag_vectorH,%imm0_b)
     4171        __(ja C(misc_ref_common))
     4172        __(jmp 6b)
    39444173_endsubp(aref2)
    39454174
     
    39484177_endsubp(aref3)
    39494178
     4179/* As with aref2, but temp1 = array, temp0 = i, arg_y = j, arg_z = new_value */
    39504180_spentry(aset2)
    3951         __(int $3)
     4181        __(testb $fixnummask,%temp0_b)
     4182        __(je 0f)
     4183        __(uuo_error_reg_not_fixnum(Rtemp0))
     41840:      __(testl $fixnummask,%arg_y)
     4185        __(je 1f)
     4186        __(uuo_error_reg_not_fixnum(Rarg_y))
     41871:      __(extract_typecode(%temp1,%imm0))
     4188        __(cmpb $subtag_arrayH,%imm0_b)
     4189        __(jne 2f)
     4190        __(cmpl $2<<fixnumshift,arrayH.rank(%temp1))
     4191        __(je 3f)
     41922:      __(uuo_error_reg_not_type(Rtemp1,error_object_not_array_2d))
     41933:      __(cmpl arrayH.dim0(%temp1),%temp0)
     4194        __(jb 4f)
     4195        __(uuo_error_array_bounds(Rtemp0,Rtemp1))
     41964:      __(movl arrayH.dim0+node_size(%temp1),%imm0)
     4197        __(cmpl %imm0,%arg_y)
     4198        __(jb 5f)
     4199        __(uuo_error_array_bounds(Rarg_y,Rtemp1))
     42005:      __(sarl $fixnumshift,%imm0)
     4201        __(imull %temp0,%imm0)
     4202        __(addl %imm0,%arg_y)
     4203        __(movl %temp1,%temp0)
     4204        __(xorl %temp1,%temp1)
     42056:      __(addl arrayH.displacement(%temp0),%arg_y)
     4206        __(movl arrayH.data_vector(%temp0),%temp0)
     4207        __(extract_subtag(%temp0,%imm0_b))
     4208        __(cmpb $subtag_vectorH,%imm0_b)
     4209        __(ja C(misc_set_common))
     4210        __(jmp 6b)
    39524211_endsubp(aset2)
    39534212
     
    41604419_endsubp(unused_6)
    41614420
     4421/* %temp1 = array, %temp0 = i,%arg_y = j, %arg_z = k */
     4422/*
     4423_spentry(aref3)
     4424        __(testb $fixnummask,%temp0_b)
     4425        __(je 0f)
     4426        __(uuo_error_reg_not_fixnum(Rtemp0))
     44270:      __(testl $fixnummask,%arg_y)
     4428        __(je 1f)
     4429        __(uuo_error_reg_not_fixnum(Rarg_y))
     44301:      __(testb $fixnummask,%arg_z_b)
     4431        __(je 2f)
     4432        __(uuo_error_reg_not_fixnum(Rarg_z))
     44332:      __(extract_typecode(%temp1,%imm0))
     4434        __(cmpb $subtag_arrayH,%imm0_b)
     4435        __(jne 3f)
     4436        __(cmpl $3<<fixnumshift,arrayH.rank(%temp1))
     4437        __(je 4f)
     44383:      __(uuo_error_reg_not_type(Rtemp1,error_object_not_array_3d))
     44394:      __(cmpl arrayH.dim0(%temp1),%temp0)
     4440        __(jb 5f)
     4441        __(uuo_error_array_bounds(Rtemp0,Rtemp1))
     44425:      __(movl arrayH.dim0+node_size(%temp1),%imm0)
     4443        __(cmpl %imm0,%arg_y)
     4444        __(jb 6f)
     4445        __(uuo_error_array_bounds(Rarg_y,Rtemp1))
     44466:      __(unbox_fixnum(%imm0,%imm0))
     4447        __(movl arrayH.dim0+(node_size*2)(%temp1),%imm1)
     4448        __(cmpq %imm1,%arg_z)
     4449        __(jb,pt 7f)
     4450        __(uuo_error_array_bounds(Rarg_z,Rtemp0))
     44517:      __(unbox_fixnum(%imm1,%imm1))
     4452        __(imulq %imm1,%arg_y)
     4453        __(mulq %imm1)
     4454        __(imulq %imm0,%arg_x)
     4455        __(addq %arg_x,%arg_z)
     4456        __(addq %arg_y,%arg_z)
     4457        __(movq %temp0,%arg_y)
     44588:      __(addq arrayH.displacement(%arg_y),%arg_z)
     4459        __(movq arrayH.data_vector(%arg_y),%arg_y)
     4460        __(extract_subtag(%arg_y,%imm1_b))
     4461        __(cmpb $subtag_vectorH,%imm1_b)
     4462        __(ja C(misc_ref_common))
     4463        __(jmp 8b)
     4464_endsubp(aref3)
     4465*/       
     4466
     4467/* %temp1 = array, %imm0 = i, %temp0 = j, %arg_y = k, %arg_z = newval. */
     4468/*
     4469_spentry(aset3)
     4470        __(testb $fixnummask,%temp0_b)
     4471        __(je,pt 0f)
     4472        __(uuo_error_reg_not_fixnum(Rtemp0))
     44730:      __(testb $fixnummask,%arg_x_b)
     4474        __(je,pt 1f)
     4475        __(uuo_error_reg_not_fixnum(Rarg_x))
     44761:      __(testb $fixnummask,%arg_y_b)
     4477        __(je,pt 2f)
     4478        __(uuo_error_reg_not_fixnum(Rarg_y))
     44792:      __(extract_typecode(%temp1,%imm0))
     4480        __(cmpb $subtag_arrayH,%imm0_b)
     4481        __(jne 3f)
     4482        __(cmpq $3<<fixnumshift,arrayH.rank(%temp1))
     4483        __(je,pt 4f)
     44843:      __(uuo_error_reg_not_type(Rtemp1,error_object_not_array_3d))
     44854:      __(cmpq arrayH.dim0(%temp1),%temp0)
     4486        __(jb,pt 5f)
     4487        __(uuo_error_array_bounds(Rtemp0,Rtemp1))
     44885:      __(movq arrayH.dim0+node_size(%temp1),%imm0)
     4489        __(cmpq %imm0,%arg_x)
     4490        __(jb,pt 6f)
     4491        __(uuo_error_array_bounds(Rarg_x,Rtemp1))
     44926:      __(unbox_fixnum(%imm0,%imm0))
     4493        __(movq arrayH.dim0+(node_size*2)(%temp1),%imm1)
     4494        __(cmpq %imm1,%arg_y)
     4495        __(jb,pt 7f)
     4496        __(uuo_error_array_bounds(Rarg_y,Rtemp1))
     44977:      __(unbox_fixnum(%imm1,%imm1))
     4498        __(imulq %imm1,%arg_x)
     4499        __(mulq %imm1)
     4500        __(imulq %imm0,%temp0)
     4501        __(addq %temp0,%arg_y)
     4502        __(addq %arg_x,%arg_y)
     4503        __(movq %temp1,%arg_x)
     45048:      __(addq arrayH.displacement(%arg_x),%arg_y)
     4505        __(movq arrayH.data_vector(%arg_x),%arg_x)
     4506        __(extract_subtag(%arg_x,%imm1_b))
     4507        __(cmpb $subtag_vectorH,%imm1_b)
     4508        __(ja C(misc_set_common))
     4509        __(jmp 8b)
     4510_endsubp(aset3)
     4511*/
Note: See TracChangeset for help on using the changeset viewer.