OLD | NEW |
1 // Copyright 2011 the V8 project authors. All rights reserved. | 1 // Copyright 2011 the V8 project authors. All rights reserved. |
2 // Redistribution and use in source and binary forms, with or without | 2 // Redistribution and use in source and binary forms, with or without |
3 // modification, are permitted provided that the following conditions are | 3 // modification, are permitted provided that the following conditions are |
4 // met: | 4 // met: |
5 // | 5 // |
6 // * Redistributions of source code must retain the above copyright | 6 // * Redistributions of source code must retain the above copyright |
7 // notice, this list of conditions and the following disclaimer. | 7 // notice, this list of conditions and the following disclaimer. |
8 // * Redistributions in binary form must reproduce the above | 8 // * Redistributions in binary form must reproduce the above |
9 // copyright notice, this list of conditions and the following | 9 // copyright notice, this list of conditions and the following |
10 // disclaimer in the documentation and/or other materials provided | 10 // disclaimer in the documentation and/or other materials provided |
(...skipping 3471 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3482 // have been verified by the caller to not be a smi. | 3482 // have been verified by the caller to not be a smi. |
3483 | 3483 |
3484 // Check that the key is a smi. | 3484 // Check that the key is a smi. |
3485 __ JumpIfNotSmi(key, &miss_force_generic); | 3485 __ JumpIfNotSmi(key, &miss_force_generic); |
3486 | 3486 |
3487 __ ldr(r3, FieldMemOperand(receiver, JSObject::kElementsOffset)); | 3487 __ ldr(r3, FieldMemOperand(receiver, JSObject::kElementsOffset)); |
3488 // r3: elements array | 3488 // r3: elements array |
3489 | 3489 |
3490 // Check that the index is in range. | 3490 // Check that the index is in range. |
3491 __ ldr(ip, FieldMemOperand(r3, ExternalArray::kLengthOffset)); | 3491 __ ldr(ip, FieldMemOperand(r3, ExternalArray::kLengthOffset)); |
3492 __ cmp(ip, Operand(key, ASR, kSmiTagSize)); | 3492 __ cmp(key, ip); |
3493 // Unsigned comparison catches both negative and too-large values. | 3493 // Unsigned comparison catches both negative and too-large values. |
3494 __ b(lo, &miss_force_generic); | 3494 __ b(hs, &miss_force_generic); |
3495 | 3495 |
3496 __ ldr(r3, FieldMemOperand(r3, ExternalArray::kExternalPointerOffset)); | 3496 __ ldr(r3, FieldMemOperand(r3, ExternalArray::kExternalPointerOffset)); |
3497 // r3: base pointer of external storage | 3497 // r3: base pointer of external storage |
3498 | 3498 |
3499 // We are not untagging smi key and instead work with it | 3499 // We are not untagging smi key and instead work with it |
3500 // as if it was premultiplied by 2. | 3500 // as if it was premultiplied by 2. |
3501 ASSERT((kSmiTag == 0) && (kSmiTagSize == 1)); | 3501 ASSERT((kSmiTag == 0) && (kSmiTagSize == 1)); |
3502 | 3502 |
3503 Register value = r2; | 3503 Register value = r2; |
3504 switch (elements_kind) { | 3504 switch (elements_kind) { |
(...skipping 299 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3804 | 3804 |
3805 // Register usage. | 3805 // Register usage. |
3806 Register value = r0; | 3806 Register value = r0; |
3807 Register key = r1; | 3807 Register key = r1; |
3808 Register receiver = r2; | 3808 Register receiver = r2; |
3809 // r3 mostly holds the elements array or the destination external array. | 3809 // r3 mostly holds the elements array or the destination external array. |
3810 | 3810 |
3811 // This stub is meant to be tail-jumped to, the receiver must already | 3811 // This stub is meant to be tail-jumped to, the receiver must already |
3812 // have been verified by the caller to not be a smi. | 3812 // have been verified by the caller to not be a smi. |
3813 | 3813 |
3814 __ ldr(r3, FieldMemOperand(receiver, JSObject::kElementsOffset)); | |
3815 | |
3816 // Check that the key is a smi. | 3814 // Check that the key is a smi. |
3817 __ JumpIfNotSmi(key, &miss_force_generic); | 3815 __ JumpIfNotSmi(key, &miss_force_generic); |
3818 | 3816 |
| 3817 __ ldr(r3, FieldMemOperand(receiver, JSObject::kElementsOffset)); |
| 3818 |
3819 // Check that the index is in range | 3819 // Check that the index is in range |
3820 __ SmiUntag(r4, key); | |
3821 __ ldr(ip, FieldMemOperand(r3, ExternalArray::kLengthOffset)); | 3820 __ ldr(ip, FieldMemOperand(r3, ExternalArray::kLengthOffset)); |
3822 __ cmp(r4, ip); | 3821 __ cmp(key, ip); |
3823 // Unsigned comparison catches both negative and too-large values. | 3822 // Unsigned comparison catches both negative and too-large values. |
3824 __ b(hs, &miss_force_generic); | 3823 __ b(hs, &miss_force_generic); |
3825 | 3824 |
3826 // Handle both smis and HeapNumbers in the fast path. Go to the | 3825 // Handle both smis and HeapNumbers in the fast path. Go to the |
3827 // runtime for all other kinds of values. | 3826 // runtime for all other kinds of values. |
3828 // r3: external array. | 3827 // r3: external array. |
3829 // r4: key (integer). | |
3830 if (elements_kind == JSObject::EXTERNAL_PIXEL_ELEMENTS) { | 3828 if (elements_kind == JSObject::EXTERNAL_PIXEL_ELEMENTS) { |
3831 // Double to pixel conversion is only implemented in the runtime for now. | 3829 // Double to pixel conversion is only implemented in the runtime for now. |
3832 __ JumpIfNotSmi(value, &slow); | 3830 __ JumpIfNotSmi(value, &slow); |
3833 } else { | 3831 } else { |
3834 __ JumpIfNotSmi(value, &check_heap_number); | 3832 __ JumpIfNotSmi(value, &check_heap_number); |
3835 } | 3833 } |
3836 __ SmiUntag(r5, value); | 3834 __ SmiUntag(r5, value); |
3837 __ ldr(r3, FieldMemOperand(r3, ExternalArray::kExternalPointerOffset)); | 3835 __ ldr(r3, FieldMemOperand(r3, ExternalArray::kExternalPointerOffset)); |
3838 | 3836 |
3839 // r3: base pointer of external storage. | 3837 // r3: base pointer of external storage. |
3840 // r4: key (integer). | |
3841 // r5: value (integer). | 3838 // r5: value (integer). |
3842 switch (elements_kind) { | 3839 switch (elements_kind) { |
3843 case JSObject::EXTERNAL_PIXEL_ELEMENTS: | 3840 case JSObject::EXTERNAL_PIXEL_ELEMENTS: |
3844 // Clamp the value to [0..255]. | 3841 // Clamp the value to [0..255]. |
3845 __ Usat(r5, 8, Operand(r5)); | 3842 __ Usat(r5, 8, Operand(r5)); |
3846 __ strb(r5, MemOperand(r3, r4, LSL, 0)); | 3843 __ strb(r5, MemOperand(r3, key, LSR, 1)); |
3847 break; | 3844 break; |
3848 case JSObject::EXTERNAL_BYTE_ELEMENTS: | 3845 case JSObject::EXTERNAL_BYTE_ELEMENTS: |
3849 case JSObject::EXTERNAL_UNSIGNED_BYTE_ELEMENTS: | 3846 case JSObject::EXTERNAL_UNSIGNED_BYTE_ELEMENTS: |
3850 __ strb(r5, MemOperand(r3, r4, LSL, 0)); | 3847 __ strb(r5, MemOperand(r3, key, LSR, 1)); |
3851 break; | 3848 break; |
3852 case JSObject::EXTERNAL_SHORT_ELEMENTS: | 3849 case JSObject::EXTERNAL_SHORT_ELEMENTS: |
3853 case JSObject::EXTERNAL_UNSIGNED_SHORT_ELEMENTS: | 3850 case JSObject::EXTERNAL_UNSIGNED_SHORT_ELEMENTS: |
3854 __ strh(r5, MemOperand(r3, r4, LSL, 1)); | 3851 __ strh(r5, MemOperand(r3, key, LSL, 0)); |
3855 break; | 3852 break; |
3856 case JSObject::EXTERNAL_INT_ELEMENTS: | 3853 case JSObject::EXTERNAL_INT_ELEMENTS: |
3857 case JSObject::EXTERNAL_UNSIGNED_INT_ELEMENTS: | 3854 case JSObject::EXTERNAL_UNSIGNED_INT_ELEMENTS: |
3858 __ str(r5, MemOperand(r3, r4, LSL, 2)); | 3855 __ str(r5, MemOperand(r3, key, LSL, 1)); |
3859 break; | 3856 break; |
3860 case JSObject::EXTERNAL_FLOAT_ELEMENTS: | 3857 case JSObject::EXTERNAL_FLOAT_ELEMENTS: |
3861 // Perform int-to-float conversion and store to memory. | 3858 // Perform int-to-float conversion and store to memory. |
| 3859 __ SmiUntag(r4, key); |
3862 StoreIntAsFloat(masm, r3, r4, r5, r6, r7, r9); | 3860 StoreIntAsFloat(masm, r3, r4, r5, r6, r7, r9); |
3863 break; | 3861 break; |
3864 case JSObject::EXTERNAL_DOUBLE_ELEMENTS: | 3862 case JSObject::EXTERNAL_DOUBLE_ELEMENTS: |
3865 __ add(r3, r3, Operand(r4, LSL, 3)); | 3863 __ add(r3, r3, Operand(key, LSL, 2)); |
3866 // r3: effective address of the double element | 3864 // r3: effective address of the double element |
3867 FloatingPointHelper::Destination destination; | 3865 FloatingPointHelper::Destination destination; |
3868 if (CpuFeatures::IsSupported(VFP3)) { | 3866 if (CpuFeatures::IsSupported(VFP3)) { |
3869 destination = FloatingPointHelper::kVFPRegisters; | 3867 destination = FloatingPointHelper::kVFPRegisters; |
3870 } else { | 3868 } else { |
3871 destination = FloatingPointHelper::kCoreRegisters; | 3869 destination = FloatingPointHelper::kCoreRegisters; |
3872 } | 3870 } |
3873 FloatingPointHelper::ConvertIntToDouble( | 3871 FloatingPointHelper::ConvertIntToDouble( |
3874 masm, r5, destination, | 3872 masm, r5, destination, |
3875 d0, r6, r7, // These are: double_dst, dst1, dst2. | 3873 d0, r6, r7, // These are: double_dst, dst1, dst2. |
(...skipping 12 matching lines...) Expand all Loading... |
3888 case JSObject::NON_STRICT_ARGUMENTS_ELEMENTS: | 3886 case JSObject::NON_STRICT_ARGUMENTS_ELEMENTS: |
3889 UNREACHABLE(); | 3887 UNREACHABLE(); |
3890 break; | 3888 break; |
3891 } | 3889 } |
3892 | 3890 |
3893 // Entry registers are intact, r0 holds the value which is the return value. | 3891 // Entry registers are intact, r0 holds the value which is the return value. |
3894 __ Ret(); | 3892 __ Ret(); |
3895 | 3893 |
3896 if (elements_kind != JSObject::EXTERNAL_PIXEL_ELEMENTS) { | 3894 if (elements_kind != JSObject::EXTERNAL_PIXEL_ELEMENTS) { |
3897 // r3: external array. | 3895 // r3: external array. |
3898 // r4: index (integer). | |
3899 __ bind(&check_heap_number); | 3896 __ bind(&check_heap_number); |
3900 __ CompareObjectType(value, r5, r6, HEAP_NUMBER_TYPE); | 3897 __ CompareObjectType(value, r5, r6, HEAP_NUMBER_TYPE); |
3901 __ b(ne, &slow); | 3898 __ b(ne, &slow); |
3902 | 3899 |
3903 __ ldr(r3, FieldMemOperand(r3, ExternalArray::kExternalPointerOffset)); | 3900 __ ldr(r3, FieldMemOperand(r3, ExternalArray::kExternalPointerOffset)); |
3904 | 3901 |
3905 // r3: base pointer of external storage. | 3902 // r3: base pointer of external storage. |
3906 // r4: key (integer). | |
3907 | 3903 |
3908 // The WebGL specification leaves the behavior of storing NaN and | 3904 // The WebGL specification leaves the behavior of storing NaN and |
3909 // +/-Infinity into integer arrays basically undefined. For more | 3905 // +/-Infinity into integer arrays basically undefined. For more |
3910 // reproducible behavior, convert these to zero. | 3906 // reproducible behavior, convert these to zero. |
3911 if (CpuFeatures::IsSupported(VFP3)) { | 3907 if (CpuFeatures::IsSupported(VFP3)) { |
3912 CpuFeatures::Scope scope(VFP3); | 3908 CpuFeatures::Scope scope(VFP3); |
3913 | 3909 |
3914 if (elements_kind == JSObject::EXTERNAL_FLOAT_ELEMENTS) { | 3910 if (elements_kind == JSObject::EXTERNAL_FLOAT_ELEMENTS) { |
3915 // vldr requires offset to be a multiple of 4 so we can not | 3911 // vldr requires offset to be a multiple of 4 so we can not |
3916 // include -kHeapObjectTag into it. | 3912 // include -kHeapObjectTag into it. |
3917 __ sub(r5, r0, Operand(kHeapObjectTag)); | 3913 __ sub(r5, r0, Operand(kHeapObjectTag)); |
3918 __ vldr(d0, r5, HeapNumber::kValueOffset); | 3914 __ vldr(d0, r5, HeapNumber::kValueOffset); |
3919 __ add(r5, r3, Operand(r4, LSL, 2)); | 3915 __ add(r5, r3, Operand(key, LSL, 1)); |
3920 __ vcvt_f32_f64(s0, d0); | 3916 __ vcvt_f32_f64(s0, d0); |
3921 __ vstr(s0, r5, 0); | 3917 __ vstr(s0, r5, 0); |
3922 } else if (elements_kind == JSObject::EXTERNAL_DOUBLE_ELEMENTS) { | 3918 } else if (elements_kind == JSObject::EXTERNAL_DOUBLE_ELEMENTS) { |
3923 __ sub(r5, r0, Operand(kHeapObjectTag)); | 3919 __ sub(r5, r0, Operand(kHeapObjectTag)); |
3924 __ vldr(d0, r5, HeapNumber::kValueOffset); | 3920 __ vldr(d0, r5, HeapNumber::kValueOffset); |
3925 __ add(r5, r3, Operand(r4, LSL, 3)); | 3921 __ add(r5, r3, Operand(key, LSL, 2)); |
3926 __ vstr(d0, r5, 0); | 3922 __ vstr(d0, r5, 0); |
3927 } else { | 3923 } else { |
3928 // Hoisted load. vldr requires offset to be a multiple of 4 so we can | 3924 // Hoisted load. vldr requires offset to be a multiple of 4 so we can |
3929 // not include -kHeapObjectTag into it. | 3925 // not include -kHeapObjectTag into it. |
3930 __ sub(r5, value, Operand(kHeapObjectTag)); | 3926 __ sub(r5, value, Operand(kHeapObjectTag)); |
3931 __ vldr(d0, r5, HeapNumber::kValueOffset); | 3927 __ vldr(d0, r5, HeapNumber::kValueOffset); |
3932 __ EmitECMATruncate(r5, d0, s2, r6, r7, r9); | 3928 __ EmitECMATruncate(r5, d0, s2, r6, r7, r9); |
3933 | 3929 |
3934 switch (elements_kind) { | 3930 switch (elements_kind) { |
3935 case JSObject::EXTERNAL_BYTE_ELEMENTS: | 3931 case JSObject::EXTERNAL_BYTE_ELEMENTS: |
3936 case JSObject::EXTERNAL_UNSIGNED_BYTE_ELEMENTS: | 3932 case JSObject::EXTERNAL_UNSIGNED_BYTE_ELEMENTS: |
3937 __ strb(r5, MemOperand(r3, r4, LSL, 0)); | 3933 __ strb(r5, MemOperand(r3, key, LSR, 1)); |
3938 break; | 3934 break; |
3939 case JSObject::EXTERNAL_SHORT_ELEMENTS: | 3935 case JSObject::EXTERNAL_SHORT_ELEMENTS: |
3940 case JSObject::EXTERNAL_UNSIGNED_SHORT_ELEMENTS: | 3936 case JSObject::EXTERNAL_UNSIGNED_SHORT_ELEMENTS: |
3941 __ strh(r5, MemOperand(r3, r4, LSL, 1)); | 3937 __ strh(r5, MemOperand(r3, key, LSL, 0)); |
3942 break; | 3938 break; |
3943 case JSObject::EXTERNAL_INT_ELEMENTS: | 3939 case JSObject::EXTERNAL_INT_ELEMENTS: |
3944 case JSObject::EXTERNAL_UNSIGNED_INT_ELEMENTS: | 3940 case JSObject::EXTERNAL_UNSIGNED_INT_ELEMENTS: |
3945 __ str(r5, MemOperand(r3, r4, LSL, 2)); | 3941 __ str(r5, MemOperand(r3, key, LSL, 1)); |
3946 break; | 3942 break; |
3947 case JSObject::EXTERNAL_PIXEL_ELEMENTS: | 3943 case JSObject::EXTERNAL_PIXEL_ELEMENTS: |
3948 case JSObject::EXTERNAL_FLOAT_ELEMENTS: | 3944 case JSObject::EXTERNAL_FLOAT_ELEMENTS: |
3949 case JSObject::EXTERNAL_DOUBLE_ELEMENTS: | 3945 case JSObject::EXTERNAL_DOUBLE_ELEMENTS: |
3950 case JSObject::FAST_ELEMENTS: | 3946 case JSObject::FAST_ELEMENTS: |
3951 case JSObject::FAST_DOUBLE_ELEMENTS: | 3947 case JSObject::FAST_DOUBLE_ELEMENTS: |
3952 case JSObject::DICTIONARY_ELEMENTS: | 3948 case JSObject::DICTIONARY_ELEMENTS: |
3953 case JSObject::NON_STRICT_ARGUMENTS_ELEMENTS: | 3949 case JSObject::NON_STRICT_ARGUMENTS_ELEMENTS: |
3954 UNREACHABLE(); | 3950 UNREACHABLE(); |
3955 break; | 3951 break; |
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3997 __ and_(r5, r5, Operand(HeapNumber::kSignMask), LeaveCC, lt); | 3993 __ and_(r5, r5, Operand(HeapNumber::kSignMask), LeaveCC, lt); |
3998 __ b(lt, &done); | 3994 __ b(lt, &done); |
3999 | 3995 |
4000 __ and_(r7, r5, Operand(HeapNumber::kSignMask)); | 3996 __ and_(r7, r5, Operand(HeapNumber::kSignMask)); |
4001 __ and_(r5, r5, Operand(HeapNumber::kMantissaMask)); | 3997 __ and_(r5, r5, Operand(HeapNumber::kMantissaMask)); |
4002 __ orr(r7, r7, Operand(r5, LSL, kMantissaInHiWordShift)); | 3998 __ orr(r7, r7, Operand(r5, LSL, kMantissaInHiWordShift)); |
4003 __ orr(r7, r7, Operand(r6, LSR, kMantissaInLoWordShift)); | 3999 __ orr(r7, r7, Operand(r6, LSR, kMantissaInLoWordShift)); |
4004 __ orr(r5, r7, Operand(r9, LSL, kBinary32ExponentShift)); | 4000 __ orr(r5, r7, Operand(r9, LSL, kBinary32ExponentShift)); |
4005 | 4001 |
4006 __ bind(&done); | 4002 __ bind(&done); |
4007 __ str(r5, MemOperand(r3, r4, LSL, 2)); | 4003 __ str(r5, MemOperand(r3, key, LSL, 1)); |
4008 // Entry registers are intact, r0 holds the value which is the return | 4004 // Entry registers are intact, r0 holds the value which is the return |
4009 // value. | 4005 // value. |
4010 __ Ret(); | 4006 __ Ret(); |
4011 | 4007 |
4012 __ bind(&nan_or_infinity_or_zero); | 4008 __ bind(&nan_or_infinity_or_zero); |
4013 __ and_(r7, r5, Operand(HeapNumber::kSignMask)); | 4009 __ and_(r7, r5, Operand(HeapNumber::kSignMask)); |
4014 __ and_(r5, r5, Operand(HeapNumber::kMantissaMask)); | 4010 __ and_(r5, r5, Operand(HeapNumber::kMantissaMask)); |
4015 __ orr(r9, r9, r7); | 4011 __ orr(r9, r9, r7); |
4016 __ orr(r9, r9, Operand(r5, LSL, kMantissaInHiWordShift)); | 4012 __ orr(r9, r9, Operand(r5, LSL, kMantissaInHiWordShift)); |
4017 __ orr(r5, r9, Operand(r6, LSR, kMantissaInLoWordShift)); | 4013 __ orr(r5, r9, Operand(r6, LSR, kMantissaInLoWordShift)); |
4018 __ b(&done); | 4014 __ b(&done); |
4019 } else if (elements_kind == JSObject::EXTERNAL_DOUBLE_ELEMENTS) { | 4015 } else if (elements_kind == JSObject::EXTERNAL_DOUBLE_ELEMENTS) { |
4020 __ add(r7, r3, Operand(r4, LSL, 3)); | 4016 __ add(r7, r3, Operand(key, LSL, 2)); |
4021 // r7: effective address of destination element. | 4017 // r7: effective address of destination element. |
4022 __ str(r6, MemOperand(r7, 0)); | 4018 __ str(r6, MemOperand(r7, 0)); |
4023 __ str(r5, MemOperand(r7, Register::kSizeInBytes)); | 4019 __ str(r5, MemOperand(r7, Register::kSizeInBytes)); |
4024 __ Ret(); | 4020 __ Ret(); |
4025 } else { | 4021 } else { |
4026 bool is_signed_type = IsElementTypeSigned(elements_kind); | 4022 bool is_signed_type = IsElementTypeSigned(elements_kind); |
4027 int meaningfull_bits = is_signed_type ? (kBitsPerInt - 1) : kBitsPerInt; | 4023 int meaningfull_bits = is_signed_type ? (kBitsPerInt - 1) : kBitsPerInt; |
4028 int32_t min_value = is_signed_type ? 0x80000000 : 0x00000000; | 4024 int32_t min_value = is_signed_type ? 0x80000000 : 0x00000000; |
4029 | 4025 |
4030 Label done, sign; | 4026 Label done, sign; |
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4066 __ orr(r5, r5, Operand(r6, LSR, r9)); | 4062 __ orr(r5, r5, Operand(r6, LSR, r9)); |
4067 | 4063 |
4068 __ bind(&sign); | 4064 __ bind(&sign); |
4069 __ teq(r7, Operand(0, RelocInfo::NONE)); | 4065 __ teq(r7, Operand(0, RelocInfo::NONE)); |
4070 __ rsb(r5, r5, Operand(0, RelocInfo::NONE), LeaveCC, ne); | 4066 __ rsb(r5, r5, Operand(0, RelocInfo::NONE), LeaveCC, ne); |
4071 | 4067 |
4072 __ bind(&done); | 4068 __ bind(&done); |
4073 switch (elements_kind) { | 4069 switch (elements_kind) { |
4074 case JSObject::EXTERNAL_BYTE_ELEMENTS: | 4070 case JSObject::EXTERNAL_BYTE_ELEMENTS: |
4075 case JSObject::EXTERNAL_UNSIGNED_BYTE_ELEMENTS: | 4071 case JSObject::EXTERNAL_UNSIGNED_BYTE_ELEMENTS: |
4076 __ strb(r5, MemOperand(r3, r4, LSL, 0)); | 4072 __ strb(r5, MemOperand(r3, key, LSR, 1)); |
4077 break; | 4073 break; |
4078 case JSObject::EXTERNAL_SHORT_ELEMENTS: | 4074 case JSObject::EXTERNAL_SHORT_ELEMENTS: |
4079 case JSObject::EXTERNAL_UNSIGNED_SHORT_ELEMENTS: | 4075 case JSObject::EXTERNAL_UNSIGNED_SHORT_ELEMENTS: |
4080 __ strh(r5, MemOperand(r3, r4, LSL, 1)); | 4076 __ strh(r5, MemOperand(r3, key, LSL, 0)); |
4081 break; | 4077 break; |
4082 case JSObject::EXTERNAL_INT_ELEMENTS: | 4078 case JSObject::EXTERNAL_INT_ELEMENTS: |
4083 case JSObject::EXTERNAL_UNSIGNED_INT_ELEMENTS: | 4079 case JSObject::EXTERNAL_UNSIGNED_INT_ELEMENTS: |
4084 __ str(r5, MemOperand(r3, r4, LSL, 2)); | 4080 __ str(r5, MemOperand(r3, key, LSL, 1)); |
4085 break; | 4081 break; |
4086 case JSObject::EXTERNAL_PIXEL_ELEMENTS: | 4082 case JSObject::EXTERNAL_PIXEL_ELEMENTS: |
4087 case JSObject::EXTERNAL_FLOAT_ELEMENTS: | 4083 case JSObject::EXTERNAL_FLOAT_ELEMENTS: |
4088 case JSObject::EXTERNAL_DOUBLE_ELEMENTS: | 4084 case JSObject::EXTERNAL_DOUBLE_ELEMENTS: |
4089 case JSObject::FAST_ELEMENTS: | 4085 case JSObject::FAST_ELEMENTS: |
4090 case JSObject::FAST_DOUBLE_ELEMENTS: | 4086 case JSObject::FAST_DOUBLE_ELEMENTS: |
4091 case JSObject::DICTIONARY_ELEMENTS: | 4087 case JSObject::DICTIONARY_ELEMENTS: |
4092 case JSObject::NON_STRICT_ARGUMENTS_ELEMENTS: | 4088 case JSObject::NON_STRICT_ARGUMENTS_ELEMENTS: |
4093 UNREACHABLE(); | 4089 UNREACHABLE(); |
4094 break; | 4090 break; |
(...skipping 331 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4426 masm->isolate()->builtins()->KeyedStoreIC_MissForceGeneric(); | 4422 masm->isolate()->builtins()->KeyedStoreIC_MissForceGeneric(); |
4427 __ Jump(ic, RelocInfo::CODE_TARGET); | 4423 __ Jump(ic, RelocInfo::CODE_TARGET); |
4428 } | 4424 } |
4429 | 4425 |
4430 | 4426 |
4431 #undef __ | 4427 #undef __ |
4432 | 4428 |
4433 } } // namespace v8::internal | 4429 } } // namespace v8::internal |
4434 | 4430 |
4435 #endif // V8_TARGET_ARCH_ARM | 4431 #endif // V8_TARGET_ARCH_ARM |
OLD | NEW |