Changeset 9676
- Timestamp:
- Jun 5, 2008, 10:16:58 PM (16 years ago)
- File:
-
- 1 edited
-
branches/ia32/lisp-kernel/x86-spentry32.s (modified) (16 diffs)
Legend:
- Unmodified
- Added
- Removed
-
branches/ia32/lisp-kernel/x86-spentry32.s
r9625 r9676 59 59 _endsubp(misc_ref) 60 60 61 /* %imm0 = subtag, %arg_y = vector, %arg_z = index. */61 /* %imm0_b = subtag, %arg_y = vector, %arg_z = index. */ 62 62 /* Bounds/type-checking done in caller. */ 63 63 _startfn(C(misc_ref_common)) 64 __(movzbl %imm0_b,%imm0) 64 65 __(leal local_label(misc_ref_jmp)(,%imm0,4),%imm0) 65 66 __(jmp *(%imm0)) … … 880 881 __(movl %arg_y,%imm0) 881 882 __(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)) 890 887 __(ret) 891 888 local_label(misc_set_s16): … … 899 896 __(movl %arg_y,%imm0) 900 897 __(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)) 909 902 __(ret) 910 903 local_label(misc_set_bit_vector): … … 1155 1148 __(jne local_label(_throw_loop)) 1156 1149 __(push %ra0) 1157 __(uuo_error_reg_not_tag(R temp0,subtag_catch_frame))1150 __(uuo_error_reg_not_tag(Rarg_y,subtag_catch_frame)) 1158 1151 __(pop %ra0) 1159 1152 __(jmp _SPthrow) … … 1163 1156 __(movd %mm0,%nargs) 1164 1157 __(jne local_label(_throw_multiple)) 1158 __(movl $nil_value,%arg_z) 1165 1159 __(test %nargs,%nargs) 1166 1160 __(je local_label(_throw_one_value)) … … 1168 1162 __(add %nargs,%esp) 1169 1163 local_label(_throw_one_value): 1170 __(movl $nil_value,%arg_z)1171 1164 __(movl $local_label(_threw_one_value),%ra0) 1172 1165 __(jmp _SPnthrow1value) … … 2779 2772 _endsubp(misc_alloc) 2780 2773 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 */ 2781 2777 _startfn(C(destbind1)) 2782 __(int $3) 2783 __(jmp *%ra0) 2778 __(uuo_error_debug_trap) 2779 dnl /* Save entry %esp in case of error */ 2780 dnl __(movd %esp,%mm0) 2781 dnl /* Save arg count word */ 2782 dnl __(movd %imm0,%mm1) 2783 dnl /* Extract required arg count. */ 2784 dnl __(testb %imm0_b,%imm0_b) 2785 dnl __(je local_label(opt)) /* skip if no required args */ 2786 dnl __(movzbl %imm0_b,%imm0) 2787 dnl local_label(req_loop): 2788 dnl __(compare_reg_to_nil(%arg_reg)) 2789 dnl __(je local_label(toofew)) 2790 dnl __(movb $fulltagmask,%imm0_bh) 2791 dnl __(andb %arg_reg_b,%imm0_bh) 2792 dnl __(cmpb $fulltag_cons,%imm0_bh) 2793 dnl __(jne local_label(badlist)) 2794 dnl __(subb $1,%imm0_b) 2795 dnl __(pushl cons.car(%arg_reg)) 2796 dnl __(_cdr(%arg_reg,%arg_reg)) 2797 dnl __(jne local_label(req_loop)) 2798 dnl __(movd %mm1,%imm0) 2799 dnl local_label(opt): 2800 dnl __(movzbl %imm0_bh,%imm0) 2801 dnl __(test %imm0,%imm0) 2802 dnl __(je local_label(rest_keys)) 2803 dnl __(btl $initopt_bit,%imm0) 2804 dnl __(jc local_label(opt_supp)) 2805 dnl /* 'simple' &optionals: no supplied-p, default to nil. */ 2806 dnl local_label(simple_opt_loop): 2807 dnl __(compare_reg_to_nil(%arg_reg)) 2808 dnl __(je local_label(default_simple_opt)) 2809 dnl __(movb $fulltagmask,%imm0_bh) 2810 dnl __(andb %arg_reg_b,%imm0_bh) 2811 dnl __(cmpb $fulltag_cons,%imm0_bh) 2812 dnl __(jne local_label(badlist)) 2813 dnl __(subb $1,%imm0_b) 2814 dnl __(pushl cons.car(%arg_reg)) 2815 dnl __(_cdr(%arg_reg,%arg_reg)) 2816 dnl __(jne local_label(simple_opt_loop)) 2817 dnl __(jmp local_label(rest_keys)) 2818 dnl local_label(default_simple_opt): 2819 dnl __(subb $1,%imm0_b) 2820 dnl __(pushl $nil_value) 2821 dnl __(jne local_label(default_simple_opt)) 2822 dnl __(jmp local_label(rest_keys)) 2823 dnl local_label(opt_supp): 2824 dnl __(movb $fulltagmask,%imm0_bh) 2825 dnl __(andb %arg_reg_b,%imm0_bh) 2826 dnl __(compare_reg_to_nil(%arg_z)) 2827 dnl __(je local_label(default_hard_opt)) 2828 dnl __(cmpb $fulltag_cons,%imm0_bh) 2829 dnl __(jne local_label(badlist)) 2830 dnl __(subb $1,%imm0_b) 2831 dnl __(pushl cons.car(%arg_reg)) 2832 dnl __(_cdr(%arg_reg,%arg_reg)) 2833 dnl __(push $t_value) 2834 dnl __(jne local_label(opt_supp)) 2835 dnl __(jmp local_label(rest_keys)) 2836 dnl local_label(default_hard_opt): 2837 dnl __(subb $1,%imm0_b) 2838 dnl __(push $nil_value) 2839 dnl __(push $nil_value) 2840 dnl __(jne local_label(default_hard_opt)) 2841 dnl local_label(rest_keys): 2842 dnl __(btl $restp_bit,%imm0) 2843 dnl __(jc local_label(have_rest)) 2844 dnl __(btl $keyp_bit,%imm0) 2845 dnl __(jc local_label(have_keys)) 2846 dnl __(compare_reg_to_nil(%arg_reg)) 2847 dnl __(jne local_label(toomany)) 2848 dnl __(movss %fpzero,%rcontext:tcr.save0) 2849 dnl __(jmp *%ra0) 2850 dnl local_label(have_rest): 2851 dnl __(pushl %arg_reg) 2852 dnl __(btl $keyp_bit,%imm0) 2853 dnl __(jc local_label(have_keys)) 2854 dnl __(movss %fpzero,%rcontext:tcr.save0) 2855 dnl __(jmp *%ra0) 2856 dnl /* Ensure that arg_reg contains a proper,even-length list. */ 2857 dnl /* Insist that its length is <= 512 (as a cheap circularity check.) */ 2858 dnl local_label(have_keys): 2859 dnl __(movl $256,%imm0) 2860 dnl __(push %arg_reg) 2861 dnl __(push %arg_z) 2862 dnl __(xorl %arg_z,%arg_z) 2863 dnl local_label(count_keys_loop): 2864 dnl __(compare_reg_to_nil(%arg_reg)) 2865 dnl __(je local_label(counted_keys)) 2866 dnl __(subl $1,%imm0) 2867 dnl __(jl local_label(toomany)) 2868 dnl __(movb $fulltag_mask,%arg_z_bh) 2869 dnl __(andb %arg_reg_b,%arg_z_bh) 2870 dnl __(cmpb $fulltag_cons,%arg_z_bh) 2871 dnl __(jne local_label(badlist)) 2872 dnl __(_cdr(%arg_reg,%arg_reg)) 2873 dnl __(movb $fulltag_mask,%arg_z_bh) 2874 dnl __(andb %arg_reg_b,%arg_z_bh) 2875 dnl __(cmpb $fulltag_cons,%arg_z_bh) 2876 dnl __(jne local_label(badlist)) 2877 dnl __(_cdr(%arg_reg,%arg_reg)) 2878 dnl __(jmp local_label(count_keys_loop)) 2879 dnl local_label(counted_keys): 2880 dnl /* We've got a proper, even-length list of key/value pairs in */ 2881 dnl /* arg_reg. For each keyword var in the lambda-list, push a pair */ 2882 dnl /* of NILs on the vstack. */ 2883 dnl __(pop %arg_z) 2884 dnl __(pop %arg_reg) 2885 dnl __(movd %mm1,%imm0) 2886 dnl __(shrl $16,%imm0) 2887 dnl __(movzbl %imm0_b,%imm0) 2888 dnl __(movl %esp,%rcontext:tcr.unboxed0) /* 0th value/supplied-p pair */ 2889 dnl __(jmp local_label(push_pair_test)) 2890 dnl local_label(push_pair_loop): 2891 dnl __(push $nil_value) 2892 dnl __(push $nil_value) 2893 dnl local_label(push_pair_test): 2894 dnl __(subb $1,%imm0_b) 2895 dnl __(jge local_label(push_pair_loop)) 2896 dnl __(push %temp0) /* keyword */ 2897 dnl __(push %arg_z) /* value */ 2898 dnl __(vector_length(%arg_y,%imm0)) 2899 dnl __(push %arg_reg) 2900 dnl __(push %imm0) /* keyword vector length */ 2901 dnl __(movl $0,%rcontext:tcr.unboxed1) /* count of unknown keywords seen */ 2902 dnl local_label(match_keys_loop): 2903 dnl __(movl 4(%esp),%arg_reg) 2904 dnl __(compare_reg_to_nil(%arg_reg)) 2905 dnl __(je local_label(matched_keys)) 2906 dnl __(_car(%arg_reg,%temp0)) 2907 dnl __(_cdr(%arg_reg,%arg_reg)) 2908 dnl __(_car(%arg_reg,%arg_z)) 2909 dnl __(_cdr(%arg_reg,%arg_reg)) 2910 dnl __(movl %arg_reg,4(%esp)) 2911 dnl __(xorl %temp1,%temp1) 2912 dnl __(jmp local_label(match_test)) 2913 dnl local_label(match_loop): 2914 dnl __(cmpl misc_data_offset(%arg_y,%temp1),%arg_z) 2915 dnl __(je local_label(matched)) 2916 dnl __(addl $node_size,%temp1) 2917 dnl local_label(match_test): 2918 dnl __(cmpl %temp1,(%esp)) /* compare index, keyword vector length */ 2919 dnl __(jne local_label(match_loop)) 2920 dnl /* No match. Note unknown keyword, check for :allow-other-keys */ 2921 dnl __(addl $1,%rcontext:tcr.unboxed1) 2922 dnl __(cmpl $nrs.kallowotherkeys,%temp0) 2923 dnl __(jne local_label(match_keys_loop)) 2924 dnl __(subl $1,%rcontext:tcr.unboxed1) 2925 dnl __(btsl $seen_aok_bit,%imm0) 2926 dnl __(jc local_label(match_keys_loop)) 2927 dnl /* First time we've seen :allow-other-keys. Maybe set aok_bit. */ 2928 dnl __(compare_reg_to_nil(%arg_z)) 2929 dnl __(je local_label(match_keys_loop)) 2930 dnl __(btsl $aok_bit,%imm0) 2931 dnl __(jmp local_label(match_keys_loop)) 2932 dnl /* Got a match. Worry about :allow-other-keys here, too. */ 2933 dnl local_label(matched): 2934 dnl __(negl %temp1) 2935 dnl __(shll $1,%temp1) 2936 dnl __(addl %rcontext:tcr.unboxed0,%temp1) 2937 dnl __(cmpl $nil_value,-node_size*2(%temp1)) 2938 dnl __(jne local_label(match_keys_loop)) 2939 dnl __(movl %arg_z,-node_size(%temp1)) 2940 dnl __(movl $t_value,-node_size*2(%temp1)) 2941 dnl __(cmpl $nrs.kallowotherkeys,%temp0) 2942 dnl __(jne local_label(match_keys_loop)) 2943 dnl __(btsl $seen_aok_bit,%imm0) 2944 dnl __(jnc local_label(match_keys_loop)) 2945 dnl __(compare_reg_to_nil(%arg_z)) 2946 dnl __(je local_label(match_keys_loop)) 2947 dnl __(btsl $aok_bit,%imm0) 2948 dnl __(jmp local_label(match_keys_loop)) 2949 dnl local_label(matched_keys): 2950 dnl __(cmpl $0,%rcontext:tcr.unboxed1) /* any unknown keys seen? */ 2951 dnl __(je local_label(keys_ok)) 2952 dnl __(btl $aok_bit,%imm0) 2953 dnl __(jnc local_label(badkeys)) 2954 dnl local_label(keys_ok): 2955 dnl __(movss %fpzero,%rcontext:tcr.save0) 2956 dnl __(jmp *%ra0) 2957 dnl /* Some unrecognized keywords. Complain generically about */ 2958 dnl /* invalid keywords. */ 2959 dnl local_label(badkeys): 2960 dnl __(movl $XBADKEYS,%arg_y) 2961 dnl __(jmp local_label(destructure_error)) 2962 dnl local_label(toomany): 2963 dnl __(movl $XCALLTOOMANY,%arg_y) 2964 dnl __(jmp local_label(destructure_error)) 2965 dnl local_label(toofew): 2966 dnl __(movl $XCALLTOOFEW,%arg_y) 2967 dnl __(jmp local_label(destructure_error)) 2968 dnl local_label(badlist): 2969 dnl __(movl $XCALLNOMATCH,%arg_y) 2970 dnl local_label(destructure_error): 2971 dnl __(movd %mm0,%esp) /* undo everything done to the stack */ 2972 dnl __(movl %rcontext:tcr.save0,%arg_z) /* %whole_reg */ 2973 dnl __(movss %fpzero,%rcontext:tcr.save0) 2974 dnl __(set_nargs(2)) 2975 dnl __(push %ra0) 2976 dnl __(jmp _SPksignalerr) 2784 2977 _endfn(C(destbind1)) 2785 2978 … … 2789 2982 2790 2983 _spentry(destructuring_bind) 2791 __(mov %arg_reg,%whole_reg)2984 __(movl %arg_reg,%rcontext:tcr.save0) /* %whole_reg */ 2792 2985 __(jmp C(destbind1)) 2793 2986 _endsubp(destructuring_bind) 2794 2987 2795 2988 _spentry(destructuring_bind_inner) 2796 __(mov %arg_z,%whole_reg)2989 __(movl %arg_z,%rcontext:tcr.save0) /* %whole_reg */ 2797 2990 __(jmp C(destbind1)) 2798 2991 _endsubp(destructuring_bind_inner) … … 2874 3067 /* values. This makes recover_values harder. */ 2875 3068 _spentry(add_values) 2876 __(int $3)2877 3069 /* do we need to preserve imm0? */ 2878 3070 __(test %nargs,%nargs) … … 2935 3127 2936 3128 _spentry(recover_values_for_mvcall) 2937 __(int $3)2938 3129 __(movl %ra0,%rcontext:tcr.save0) /* temp0 */ 2939 3130 /* First, walk the segments reversing the pointer to previous */ … … 3690 3881 3691 3882 _spentry(builtin_aset1) 3883 __(movl %temp1,%temp0) 3692 3884 __(extract_typecode(%temp0,%imm0)) 3693 3885 __(box_fixnum(%imm0,%temp1)) … … 3697 3889 __(push $reserved_frame_marker) 3698 3890 __(push $reserved_frame_marker) 3699 __(push %temp0) /* vector */3700 __(push %temp1) /* return addr */3891 __(push %temp0) 3892 __(push %temp1) 3701 3893 __(jump_builtin(_builtin_aset1,3)) 3702 3894 _endsubp(builtin_aset1) … … 3870 4062 /* lexpr count is two or more: vpush args from the lexpr until */ 3871 4063 /* we have only two left, then assign them to arg_y and arg_z */ 3872 2: __(cmpl $(3*node_size),%imm0) 4064 2: __(cmpl $(2*node_size),%imm0) 4065 __(je local_label(push_loop_end)) 4066 local_label(push_loop): 3873 4067 __(lea -1*node_size(%imm0),%imm0) 3874 4068 __(push -node_size(%arg_y)) 3875 4069 __(lea -1*node_size(%arg_y),%arg_y) 4070 __(cmpl $(2*node_size),%imm0) 3876 4071 __(jne 2b) 4072 local_label(push_loop_end): 3877 4073 __(movl -node_size*2(%arg_y),%arg_z) 3878 4074 __(movl -node_size*1(%arg_y),%arg_y) … … 3940 4136 _endsubp(callback) 3941 4137 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 3942 4142 _spentry(aref2) 3943 __(int $3) 4143 __(testl $fixnummask,%arg_y) 4144 __(je 0f) 4145 __(uuo_error_reg_not_fixnum(Rarg_y)) 4146 0: __(testb $fixnummask,%arg_z_b) 4147 __(je 1f) 4148 __(uuo_error_reg_not_fixnum(Rarg_z)) 4149 1: __(extract_typecode(%temp0,%imm0)) 4150 __(cmpb $subtag_arrayH,%imm0_b) 4151 __(jne 2f) 4152 __(cmpl $2<<fixnumshift,arrayH.rank(%temp0)) 4153 __(je 3f) 4154 2: __(uuo_error_reg_not_type(Rtemp0,error_object_not_array_2d)) 4155 3: __(cmpl arrayH.dim0(%temp0),%arg_y) 4156 __(jb 4f) 4157 __(uuo_error_array_bounds(Rarg_y,Rtemp0)) 4158 4: __(movl arrayH.dim0+node_size(%temp0),%imm0) 4159 __(cmpl %imm0,%arg_z) 4160 __(jb 5f) 4161 __(uuo_error_array_bounds(Rarg_z,Rtemp0)) 4162 5: __(sarl $fixnumshift,%imm0) 4163 __(imull %arg_y,%imm0) 4164 __(addl %imm0,%arg_z) 4165 __(movl %temp0,%arg_y) 4166 __(xorl %temp1,%temp1) 4167 6: __(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) 3944 4173 _endsubp(aref2) 3945 4174 … … 3948 4177 _endsubp(aref3) 3949 4178 4179 /* As with aref2, but temp1 = array, temp0 = i, arg_y = j, arg_z = new_value */ 3950 4180 _spentry(aset2) 3951 __(int $3) 4181 __(testb $fixnummask,%temp0_b) 4182 __(je 0f) 4183 __(uuo_error_reg_not_fixnum(Rtemp0)) 4184 0: __(testl $fixnummask,%arg_y) 4185 __(je 1f) 4186 __(uuo_error_reg_not_fixnum(Rarg_y)) 4187 1: __(extract_typecode(%temp1,%imm0)) 4188 __(cmpb $subtag_arrayH,%imm0_b) 4189 __(jne 2f) 4190 __(cmpl $2<<fixnumshift,arrayH.rank(%temp1)) 4191 __(je 3f) 4192 2: __(uuo_error_reg_not_type(Rtemp1,error_object_not_array_2d)) 4193 3: __(cmpl arrayH.dim0(%temp1),%temp0) 4194 __(jb 4f) 4195 __(uuo_error_array_bounds(Rtemp0,Rtemp1)) 4196 4: __(movl arrayH.dim0+node_size(%temp1),%imm0) 4197 __(cmpl %imm0,%arg_y) 4198 __(jb 5f) 4199 __(uuo_error_array_bounds(Rarg_y,Rtemp1)) 4200 5: __(sarl $fixnumshift,%imm0) 4201 __(imull %temp0,%imm0) 4202 __(addl %imm0,%arg_y) 4203 __(movl %temp1,%temp0) 4204 __(xorl %temp1,%temp1) 4205 6: __(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) 3952 4211 _endsubp(aset2) 3953 4212 … … 4160 4419 _endsubp(unused_6) 4161 4420 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)) 4427 0: __(testl $fixnummask,%arg_y) 4428 __(je 1f) 4429 __(uuo_error_reg_not_fixnum(Rarg_y)) 4430 1: __(testb $fixnummask,%arg_z_b) 4431 __(je 2f) 4432 __(uuo_error_reg_not_fixnum(Rarg_z)) 4433 2: __(extract_typecode(%temp1,%imm0)) 4434 __(cmpb $subtag_arrayH,%imm0_b) 4435 __(jne 3f) 4436 __(cmpl $3<<fixnumshift,arrayH.rank(%temp1)) 4437 __(je 4f) 4438 3: __(uuo_error_reg_not_type(Rtemp1,error_object_not_array_3d)) 4439 4: __(cmpl arrayH.dim0(%temp1),%temp0) 4440 __(jb 5f) 4441 __(uuo_error_array_bounds(Rtemp0,Rtemp1)) 4442 5: __(movl arrayH.dim0+node_size(%temp1),%imm0) 4443 __(cmpl %imm0,%arg_y) 4444 __(jb 6f) 4445 __(uuo_error_array_bounds(Rarg_y,Rtemp1)) 4446 6: __(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)) 4451 7: __(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) 4458 8: __(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)) 4473 0: __(testb $fixnummask,%arg_x_b) 4474 __(je,pt 1f) 4475 __(uuo_error_reg_not_fixnum(Rarg_x)) 4476 1: __(testb $fixnummask,%arg_y_b) 4477 __(je,pt 2f) 4478 __(uuo_error_reg_not_fixnum(Rarg_y)) 4479 2: __(extract_typecode(%temp1,%imm0)) 4480 __(cmpb $subtag_arrayH,%imm0_b) 4481 __(jne 3f) 4482 __(cmpq $3<<fixnumshift,arrayH.rank(%temp1)) 4483 __(je,pt 4f) 4484 3: __(uuo_error_reg_not_type(Rtemp1,error_object_not_array_3d)) 4485 4: __(cmpq arrayH.dim0(%temp1),%temp0) 4486 __(jb,pt 5f) 4487 __(uuo_error_array_bounds(Rtemp0,Rtemp1)) 4488 5: __(movq arrayH.dim0+node_size(%temp1),%imm0) 4489 __(cmpq %imm0,%arg_x) 4490 __(jb,pt 6f) 4491 __(uuo_error_array_bounds(Rarg_x,Rtemp1)) 4492 6: __(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)) 4497 7: __(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) 4504 8: __(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.
