Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(233)

Side by Side Diff: src/arm/stub-cache-arm.cc

Issue 7778013: NewGC: Merge bleeding edge up to 9009. (Closed) Base URL: http://v8.googlecode.com/svn/branches/experimental/gc/
Patch Set: Created 9 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « src/arm/macro-assembler-arm.cc ('k') | src/ast.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 1177 matching lines...) Expand 10 before | Expand all | Expand 10 after
1188 Register scratch1, 1188 Register scratch1,
1189 Register scratch2, 1189 Register scratch2,
1190 Register scratch3, 1190 Register scratch3,
1191 Object* value, 1191 Object* value,
1192 String* name, 1192 String* name,
1193 Label* miss) { 1193 Label* miss) {
1194 // Check that the receiver isn't a smi. 1194 // Check that the receiver isn't a smi.
1195 __ JumpIfSmi(receiver, miss); 1195 __ JumpIfSmi(receiver, miss);
1196 1196
1197 // Check that the maps haven't changed. 1197 // Check that the maps haven't changed.
1198 Register reg = 1198 CheckPrototypes(object, receiver, holder, scratch1, scratch2, scratch3, name,
1199 CheckPrototypes(object, receiver, holder, 1199 miss);
1200 scratch1, scratch2, scratch3, name, miss);
1201 1200
1202 // Return the constant value. 1201 // Return the constant value.
1203 __ mov(r0, Operand(Handle<Object>(value))); 1202 __ mov(r0, Operand(Handle<Object>(value)));
1204 __ Ret(); 1203 __ Ret();
1205 } 1204 }
1206 1205
1207 1206
1208 MaybeObject* StubCompiler::GenerateLoadCallback(JSObject* object, 1207 MaybeObject* StubCompiler::GenerateLoadCallback(JSObject* object,
1209 JSObject* holder, 1208 JSObject* holder,
1210 Register receiver, 1209 Register receiver,
(...skipping 2289 matching lines...) Expand 10 before | Expand all | Expand 10 after
3500 // have been verified by the caller to not be a smi. 3499 // have been verified by the caller to not be a smi.
3501 3500
3502 // Check that the key is a smi. 3501 // Check that the key is a smi.
3503 __ JumpIfNotSmi(key, &miss_force_generic); 3502 __ JumpIfNotSmi(key, &miss_force_generic);
3504 3503
3505 __ ldr(r3, FieldMemOperand(receiver, JSObject::kElementsOffset)); 3504 __ ldr(r3, FieldMemOperand(receiver, JSObject::kElementsOffset));
3506 // r3: elements array 3505 // r3: elements array
3507 3506
3508 // Check that the index is in range. 3507 // Check that the index is in range.
3509 __ ldr(ip, FieldMemOperand(r3, ExternalArray::kLengthOffset)); 3508 __ ldr(ip, FieldMemOperand(r3, ExternalArray::kLengthOffset));
3510 __ cmp(ip, Operand(key, ASR, kSmiTagSize)); 3509 __ cmp(key, ip);
3511 // Unsigned comparison catches both negative and too-large values. 3510 // Unsigned comparison catches both negative and too-large values.
3512 __ b(lo, &miss_force_generic); 3511 __ b(hs, &miss_force_generic);
3513 3512
3514 __ ldr(r3, FieldMemOperand(r3, ExternalArray::kExternalPointerOffset)); 3513 __ ldr(r3, FieldMemOperand(r3, ExternalArray::kExternalPointerOffset));
3515 // r3: base pointer of external storage 3514 // r3: base pointer of external storage
3516 3515
3517 // We are not untagging smi key and instead work with it 3516 // We are not untagging smi key and instead work with it
3518 // as if it was premultiplied by 2. 3517 // as if it was premultiplied by 2.
3519 ASSERT((kSmiTag == 0) && (kSmiTagSize == 1)); 3518 ASSERT((kSmiTag == 0) && (kSmiTagSize == 1));
3520 3519
3521 Register value = r2; 3520 Register value = r2;
3522 switch (elements_kind) { 3521 switch (elements_kind) {
(...skipping 299 matching lines...) Expand 10 before | Expand all | Expand 10 after
3822 3821
3823 // Register usage. 3822 // Register usage.
3824 Register value = r0; 3823 Register value = r0;
3825 Register key = r1; 3824 Register key = r1;
3826 Register receiver = r2; 3825 Register receiver = r2;
3827 // r3 mostly holds the elements array or the destination external array. 3826 // r3 mostly holds the elements array or the destination external array.
3828 3827
3829 // This stub is meant to be tail-jumped to, the receiver must already 3828 // This stub is meant to be tail-jumped to, the receiver must already
3830 // have been verified by the caller to not be a smi. 3829 // have been verified by the caller to not be a smi.
3831 3830
3832 __ ldr(r3, FieldMemOperand(receiver, JSObject::kElementsOffset));
3833
3834 // Check that the key is a smi. 3831 // Check that the key is a smi.
3835 __ JumpIfNotSmi(key, &miss_force_generic); 3832 __ JumpIfNotSmi(key, &miss_force_generic);
3836 3833
3834 __ ldr(r3, FieldMemOperand(receiver, JSObject::kElementsOffset));
3835
3837 // Check that the index is in range 3836 // Check that the index is in range
3838 __ SmiUntag(r4, key);
3839 __ ldr(ip, FieldMemOperand(r3, ExternalArray::kLengthOffset)); 3837 __ ldr(ip, FieldMemOperand(r3, ExternalArray::kLengthOffset));
3840 __ cmp(r4, ip); 3838 __ cmp(key, ip);
3841 // Unsigned comparison catches both negative and too-large values. 3839 // Unsigned comparison catches both negative and too-large values.
3842 __ b(hs, &miss_force_generic); 3840 __ b(hs, &miss_force_generic);
3843 3841
3844 // Handle both smis and HeapNumbers in the fast path. Go to the 3842 // Handle both smis and HeapNumbers in the fast path. Go to the
3845 // runtime for all other kinds of values. 3843 // runtime for all other kinds of values.
3846 // r3: external array. 3844 // r3: external array.
3847 // r4: key (integer).
3848 if (elements_kind == JSObject::EXTERNAL_PIXEL_ELEMENTS) { 3845 if (elements_kind == JSObject::EXTERNAL_PIXEL_ELEMENTS) {
3849 // Double to pixel conversion is only implemented in the runtime for now. 3846 // Double to pixel conversion is only implemented in the runtime for now.
3850 __ JumpIfNotSmi(value, &slow); 3847 __ JumpIfNotSmi(value, &slow);
3851 } else { 3848 } else {
3852 __ JumpIfNotSmi(value, &check_heap_number); 3849 __ JumpIfNotSmi(value, &check_heap_number);
3853 } 3850 }
3854 __ SmiUntag(r5, value); 3851 __ SmiUntag(r5, value);
3855 __ ldr(r3, FieldMemOperand(r3, ExternalArray::kExternalPointerOffset)); 3852 __ ldr(r3, FieldMemOperand(r3, ExternalArray::kExternalPointerOffset));
3856 3853
3857 // r3: base pointer of external storage. 3854 // r3: base pointer of external storage.
3858 // r4: key (integer).
3859 // r5: value (integer). 3855 // r5: value (integer).
3860 switch (elements_kind) { 3856 switch (elements_kind) {
3861 case JSObject::EXTERNAL_PIXEL_ELEMENTS: 3857 case JSObject::EXTERNAL_PIXEL_ELEMENTS:
3862 // Clamp the value to [0..255]. 3858 // Clamp the value to [0..255].
3863 __ Usat(r5, 8, Operand(r5)); 3859 __ Usat(r5, 8, Operand(r5));
3864 __ strb(r5, MemOperand(r3, r4, LSL, 0)); 3860 __ strb(r5, MemOperand(r3, key, LSR, 1));
3865 break; 3861 break;
3866 case JSObject::EXTERNAL_BYTE_ELEMENTS: 3862 case JSObject::EXTERNAL_BYTE_ELEMENTS:
3867 case JSObject::EXTERNAL_UNSIGNED_BYTE_ELEMENTS: 3863 case JSObject::EXTERNAL_UNSIGNED_BYTE_ELEMENTS:
3868 __ strb(r5, MemOperand(r3, r4, LSL, 0)); 3864 __ strb(r5, MemOperand(r3, key, LSR, 1));
3869 break; 3865 break;
3870 case JSObject::EXTERNAL_SHORT_ELEMENTS: 3866 case JSObject::EXTERNAL_SHORT_ELEMENTS:
3871 case JSObject::EXTERNAL_UNSIGNED_SHORT_ELEMENTS: 3867 case JSObject::EXTERNAL_UNSIGNED_SHORT_ELEMENTS:
3872 __ strh(r5, MemOperand(r3, r4, LSL, 1)); 3868 __ strh(r5, MemOperand(r3, key, LSL, 0));
3873 break; 3869 break;
3874 case JSObject::EXTERNAL_INT_ELEMENTS: 3870 case JSObject::EXTERNAL_INT_ELEMENTS:
3875 case JSObject::EXTERNAL_UNSIGNED_INT_ELEMENTS: 3871 case JSObject::EXTERNAL_UNSIGNED_INT_ELEMENTS:
3876 __ str(r5, MemOperand(r3, r4, LSL, 2)); 3872 __ str(r5, MemOperand(r3, key, LSL, 1));
3877 break; 3873 break;
3878 case JSObject::EXTERNAL_FLOAT_ELEMENTS: 3874 case JSObject::EXTERNAL_FLOAT_ELEMENTS:
3879 // Perform int-to-float conversion and store to memory. 3875 // Perform int-to-float conversion and store to memory.
3876 __ SmiUntag(r4, key);
3880 StoreIntAsFloat(masm, r3, r4, r5, r6, r7, r9); 3877 StoreIntAsFloat(masm, r3, r4, r5, r6, r7, r9);
3881 break; 3878 break;
3882 case JSObject::EXTERNAL_DOUBLE_ELEMENTS: 3879 case JSObject::EXTERNAL_DOUBLE_ELEMENTS:
3883 __ add(r3, r3, Operand(r4, LSL, 3)); 3880 __ add(r3, r3, Operand(key, LSL, 2));
3884 // r3: effective address of the double element 3881 // r3: effective address of the double element
3885 FloatingPointHelper::Destination destination; 3882 FloatingPointHelper::Destination destination;
3886 if (CpuFeatures::IsSupported(VFP3)) { 3883 if (CpuFeatures::IsSupported(VFP3)) {
3887 destination = FloatingPointHelper::kVFPRegisters; 3884 destination = FloatingPointHelper::kVFPRegisters;
3888 } else { 3885 } else {
3889 destination = FloatingPointHelper::kCoreRegisters; 3886 destination = FloatingPointHelper::kCoreRegisters;
3890 } 3887 }
3891 FloatingPointHelper::ConvertIntToDouble( 3888 FloatingPointHelper::ConvertIntToDouble(
3892 masm, r5, destination, 3889 masm, r5, destination,
3893 d0, r6, r7, // These are: double_dst, dst1, dst2. 3890 d0, r6, r7, // These are: double_dst, dst1, dst2.
(...skipping 12 matching lines...) Expand all
3906 case JSObject::NON_STRICT_ARGUMENTS_ELEMENTS: 3903 case JSObject::NON_STRICT_ARGUMENTS_ELEMENTS:
3907 UNREACHABLE(); 3904 UNREACHABLE();
3908 break; 3905 break;
3909 } 3906 }
3910 3907
3911 // Entry registers are intact, r0 holds the value which is the return value. 3908 // Entry registers are intact, r0 holds the value which is the return value.
3912 __ Ret(); 3909 __ Ret();
3913 3910
3914 if (elements_kind != JSObject::EXTERNAL_PIXEL_ELEMENTS) { 3911 if (elements_kind != JSObject::EXTERNAL_PIXEL_ELEMENTS) {
3915 // r3: external array. 3912 // r3: external array.
3916 // r4: index (integer).
3917 __ bind(&check_heap_number); 3913 __ bind(&check_heap_number);
3918 __ CompareObjectType(value, r5, r6, HEAP_NUMBER_TYPE); 3914 __ CompareObjectType(value, r5, r6, HEAP_NUMBER_TYPE);
3919 __ b(ne, &slow); 3915 __ b(ne, &slow);
3920 3916
3921 __ ldr(r3, FieldMemOperand(r3, ExternalArray::kExternalPointerOffset)); 3917 __ ldr(r3, FieldMemOperand(r3, ExternalArray::kExternalPointerOffset));
3922 3918
3923 // r3: base pointer of external storage. 3919 // r3: base pointer of external storage.
3924 // r4: key (integer).
3925 3920
3926 // The WebGL specification leaves the behavior of storing NaN and 3921 // The WebGL specification leaves the behavior of storing NaN and
3927 // +/-Infinity into integer arrays basically undefined. For more 3922 // +/-Infinity into integer arrays basically undefined. For more
3928 // reproducible behavior, convert these to zero. 3923 // reproducible behavior, convert these to zero.
3929 if (CpuFeatures::IsSupported(VFP3)) { 3924 if (CpuFeatures::IsSupported(VFP3)) {
3930 CpuFeatures::Scope scope(VFP3); 3925 CpuFeatures::Scope scope(VFP3);
3931 3926
3932 if (elements_kind == JSObject::EXTERNAL_FLOAT_ELEMENTS) { 3927 if (elements_kind == JSObject::EXTERNAL_FLOAT_ELEMENTS) {
3933 // vldr requires offset to be a multiple of 4 so we can not 3928 // vldr requires offset to be a multiple of 4 so we can not
3934 // include -kHeapObjectTag into it. 3929 // include -kHeapObjectTag into it.
3935 __ sub(r5, r0, Operand(kHeapObjectTag)); 3930 __ sub(r5, r0, Operand(kHeapObjectTag));
3936 __ vldr(d0, r5, HeapNumber::kValueOffset); 3931 __ vldr(d0, r5, HeapNumber::kValueOffset);
3937 __ add(r5, r3, Operand(r4, LSL, 2)); 3932 __ add(r5, r3, Operand(key, LSL, 1));
3938 __ vcvt_f32_f64(s0, d0); 3933 __ vcvt_f32_f64(s0, d0);
3939 __ vstr(s0, r5, 0); 3934 __ vstr(s0, r5, 0);
3940 } else if (elements_kind == JSObject::EXTERNAL_DOUBLE_ELEMENTS) { 3935 } else if (elements_kind == JSObject::EXTERNAL_DOUBLE_ELEMENTS) {
3941 __ sub(r5, r0, Operand(kHeapObjectTag)); 3936 __ sub(r5, r0, Operand(kHeapObjectTag));
3942 __ vldr(d0, r5, HeapNumber::kValueOffset); 3937 __ vldr(d0, r5, HeapNumber::kValueOffset);
3943 __ add(r5, r3, Operand(r4, LSL, 3)); 3938 __ add(r5, r3, Operand(key, LSL, 2));
3944 __ vstr(d0, r5, 0); 3939 __ vstr(d0, r5, 0);
3945 } else { 3940 } else {
3946 // Hoisted load. vldr requires offset to be a multiple of 4 so we can 3941 // Hoisted load. vldr requires offset to be a multiple of 4 so we can
3947 // not include -kHeapObjectTag into it. 3942 // not include -kHeapObjectTag into it.
3948 __ sub(r5, value, Operand(kHeapObjectTag)); 3943 __ sub(r5, value, Operand(kHeapObjectTag));
3949 __ vldr(d0, r5, HeapNumber::kValueOffset); 3944 __ vldr(d0, r5, HeapNumber::kValueOffset);
3950 __ EmitECMATruncate(r5, d0, s2, r6, r7, r9); 3945 __ EmitECMATruncate(r5, d0, s2, r6, r7, r9);
3951 3946
3952 switch (elements_kind) { 3947 switch (elements_kind) {
3953 case JSObject::EXTERNAL_BYTE_ELEMENTS: 3948 case JSObject::EXTERNAL_BYTE_ELEMENTS:
3954 case JSObject::EXTERNAL_UNSIGNED_BYTE_ELEMENTS: 3949 case JSObject::EXTERNAL_UNSIGNED_BYTE_ELEMENTS:
3955 __ strb(r5, MemOperand(r3, r4, LSL, 0)); 3950 __ strb(r5, MemOperand(r3, key, LSR, 1));
3956 break; 3951 break;
3957 case JSObject::EXTERNAL_SHORT_ELEMENTS: 3952 case JSObject::EXTERNAL_SHORT_ELEMENTS:
3958 case JSObject::EXTERNAL_UNSIGNED_SHORT_ELEMENTS: 3953 case JSObject::EXTERNAL_UNSIGNED_SHORT_ELEMENTS:
3959 __ strh(r5, MemOperand(r3, r4, LSL, 1)); 3954 __ strh(r5, MemOperand(r3, key, LSL, 0));
3960 break; 3955 break;
3961 case JSObject::EXTERNAL_INT_ELEMENTS: 3956 case JSObject::EXTERNAL_INT_ELEMENTS:
3962 case JSObject::EXTERNAL_UNSIGNED_INT_ELEMENTS: 3957 case JSObject::EXTERNAL_UNSIGNED_INT_ELEMENTS:
3963 __ str(r5, MemOperand(r3, r4, LSL, 2)); 3958 __ str(r5, MemOperand(r3, key, LSL, 1));
3964 break; 3959 break;
3965 case JSObject::EXTERNAL_PIXEL_ELEMENTS: 3960 case JSObject::EXTERNAL_PIXEL_ELEMENTS:
3966 case JSObject::EXTERNAL_FLOAT_ELEMENTS: 3961 case JSObject::EXTERNAL_FLOAT_ELEMENTS:
3967 case JSObject::EXTERNAL_DOUBLE_ELEMENTS: 3962 case JSObject::EXTERNAL_DOUBLE_ELEMENTS:
3968 case JSObject::FAST_ELEMENTS: 3963 case JSObject::FAST_ELEMENTS:
3969 case JSObject::FAST_DOUBLE_ELEMENTS: 3964 case JSObject::FAST_DOUBLE_ELEMENTS:
3970 case JSObject::DICTIONARY_ELEMENTS: 3965 case JSObject::DICTIONARY_ELEMENTS:
3971 case JSObject::NON_STRICT_ARGUMENTS_ELEMENTS: 3966 case JSObject::NON_STRICT_ARGUMENTS_ELEMENTS:
3972 UNREACHABLE(); 3967 UNREACHABLE();
3973 break; 3968 break;
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after
4015 __ and_(r5, r5, Operand(HeapNumber::kSignMask), LeaveCC, lt); 4010 __ and_(r5, r5, Operand(HeapNumber::kSignMask), LeaveCC, lt);
4016 __ b(lt, &done); 4011 __ b(lt, &done);
4017 4012
4018 __ and_(r7, r5, Operand(HeapNumber::kSignMask)); 4013 __ and_(r7, r5, Operand(HeapNumber::kSignMask));
4019 __ and_(r5, r5, Operand(HeapNumber::kMantissaMask)); 4014 __ and_(r5, r5, Operand(HeapNumber::kMantissaMask));
4020 __ orr(r7, r7, Operand(r5, LSL, kMantissaInHiWordShift)); 4015 __ orr(r7, r7, Operand(r5, LSL, kMantissaInHiWordShift));
4021 __ orr(r7, r7, Operand(r6, LSR, kMantissaInLoWordShift)); 4016 __ orr(r7, r7, Operand(r6, LSR, kMantissaInLoWordShift));
4022 __ orr(r5, r7, Operand(r9, LSL, kBinary32ExponentShift)); 4017 __ orr(r5, r7, Operand(r9, LSL, kBinary32ExponentShift));
4023 4018
4024 __ bind(&done); 4019 __ bind(&done);
4025 __ str(r5, MemOperand(r3, r4, LSL, 2)); 4020 __ str(r5, MemOperand(r3, key, LSL, 1));
4026 // Entry registers are intact, r0 holds the value which is the return 4021 // Entry registers are intact, r0 holds the value which is the return
4027 // value. 4022 // value.
4028 __ Ret(); 4023 __ Ret();
4029 4024
4030 __ bind(&nan_or_infinity_or_zero); 4025 __ bind(&nan_or_infinity_or_zero);
4031 __ and_(r7, r5, Operand(HeapNumber::kSignMask)); 4026 __ and_(r7, r5, Operand(HeapNumber::kSignMask));
4032 __ and_(r5, r5, Operand(HeapNumber::kMantissaMask)); 4027 __ and_(r5, r5, Operand(HeapNumber::kMantissaMask));
4033 __ orr(r9, r9, r7); 4028 __ orr(r9, r9, r7);
4034 __ orr(r9, r9, Operand(r5, LSL, kMantissaInHiWordShift)); 4029 __ orr(r9, r9, Operand(r5, LSL, kMantissaInHiWordShift));
4035 __ orr(r5, r9, Operand(r6, LSR, kMantissaInLoWordShift)); 4030 __ orr(r5, r9, Operand(r6, LSR, kMantissaInLoWordShift));
4036 __ b(&done); 4031 __ b(&done);
4037 } else if (elements_kind == JSObject::EXTERNAL_DOUBLE_ELEMENTS) { 4032 } else if (elements_kind == JSObject::EXTERNAL_DOUBLE_ELEMENTS) {
4038 __ add(r7, r3, Operand(r4, LSL, 3)); 4033 __ add(r7, r3, Operand(key, LSL, 2));
4039 // r7: effective address of destination element. 4034 // r7: effective address of destination element.
4040 __ str(r6, MemOperand(r7, 0)); 4035 __ str(r6, MemOperand(r7, 0));
4041 __ str(r5, MemOperand(r7, Register::kSizeInBytes)); 4036 __ str(r5, MemOperand(r7, Register::kSizeInBytes));
4042 __ Ret(); 4037 __ Ret();
4043 } else { 4038 } else {
4044 bool is_signed_type = IsElementTypeSigned(elements_kind); 4039 bool is_signed_type = IsElementTypeSigned(elements_kind);
4045 int meaningfull_bits = is_signed_type ? (kBitsPerInt - 1) : kBitsPerInt; 4040 int meaningfull_bits = is_signed_type ? (kBitsPerInt - 1) : kBitsPerInt;
4046 int32_t min_value = is_signed_type ? 0x80000000 : 0x00000000; 4041 int32_t min_value = is_signed_type ? 0x80000000 : 0x00000000;
4047 4042
4048 Label done, sign; 4043 Label done, sign;
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after
4084 __ orr(r5, r5, Operand(r6, LSR, r9)); 4079 __ orr(r5, r5, Operand(r6, LSR, r9));
4085 4080
4086 __ bind(&sign); 4081 __ bind(&sign);
4087 __ teq(r7, Operand(0, RelocInfo::NONE)); 4082 __ teq(r7, Operand(0, RelocInfo::NONE));
4088 __ rsb(r5, r5, Operand(0, RelocInfo::NONE), LeaveCC, ne); 4083 __ rsb(r5, r5, Operand(0, RelocInfo::NONE), LeaveCC, ne);
4089 4084
4090 __ bind(&done); 4085 __ bind(&done);
4091 switch (elements_kind) { 4086 switch (elements_kind) {
4092 case JSObject::EXTERNAL_BYTE_ELEMENTS: 4087 case JSObject::EXTERNAL_BYTE_ELEMENTS:
4093 case JSObject::EXTERNAL_UNSIGNED_BYTE_ELEMENTS: 4088 case JSObject::EXTERNAL_UNSIGNED_BYTE_ELEMENTS:
4094 __ strb(r5, MemOperand(r3, r4, LSL, 0)); 4089 __ strb(r5, MemOperand(r3, key, LSR, 1));
4095 break; 4090 break;
4096 case JSObject::EXTERNAL_SHORT_ELEMENTS: 4091 case JSObject::EXTERNAL_SHORT_ELEMENTS:
4097 case JSObject::EXTERNAL_UNSIGNED_SHORT_ELEMENTS: 4092 case JSObject::EXTERNAL_UNSIGNED_SHORT_ELEMENTS:
4098 __ strh(r5, MemOperand(r3, r4, LSL, 1)); 4093 __ strh(r5, MemOperand(r3, key, LSL, 0));
4099 break; 4094 break;
4100 case JSObject::EXTERNAL_INT_ELEMENTS: 4095 case JSObject::EXTERNAL_INT_ELEMENTS:
4101 case JSObject::EXTERNAL_UNSIGNED_INT_ELEMENTS: 4096 case JSObject::EXTERNAL_UNSIGNED_INT_ELEMENTS:
4102 __ str(r5, MemOperand(r3, r4, LSL, 2)); 4097 __ str(r5, MemOperand(r3, key, LSL, 1));
4103 break; 4098 break;
4104 case JSObject::EXTERNAL_PIXEL_ELEMENTS: 4099 case JSObject::EXTERNAL_PIXEL_ELEMENTS:
4105 case JSObject::EXTERNAL_FLOAT_ELEMENTS: 4100 case JSObject::EXTERNAL_FLOAT_ELEMENTS:
4106 case JSObject::EXTERNAL_DOUBLE_ELEMENTS: 4101 case JSObject::EXTERNAL_DOUBLE_ELEMENTS:
4107 case JSObject::FAST_ELEMENTS: 4102 case JSObject::FAST_ELEMENTS:
4108 case JSObject::FAST_DOUBLE_ELEMENTS: 4103 case JSObject::FAST_DOUBLE_ELEMENTS:
4109 case JSObject::DICTIONARY_ELEMENTS: 4104 case JSObject::DICTIONARY_ELEMENTS:
4110 case JSObject::NON_STRICT_ARGUMENTS_ELEMENTS: 4105 case JSObject::NON_STRICT_ARGUMENTS_ELEMENTS:
4111 UNREACHABLE(); 4106 UNREACHABLE();
4112 break; 4107 break;
(...skipping 336 matching lines...) Expand 10 before | Expand all | Expand 10 after
4449 masm->isolate()->builtins()->KeyedStoreIC_MissForceGeneric(); 4444 masm->isolate()->builtins()->KeyedStoreIC_MissForceGeneric();
4450 __ Jump(ic, RelocInfo::CODE_TARGET); 4445 __ Jump(ic, RelocInfo::CODE_TARGET);
4451 } 4446 }
4452 4447
4453 4448
4454 #undef __ 4449 #undef __
4455 4450
4456 } } // namespace v8::internal 4451 } } // namespace v8::internal
4457 4452
4458 #endif // V8_TARGET_ARCH_ARM 4453 #endif // V8_TARGET_ARCH_ARM
OLDNEW
« no previous file with comments | « src/arm/macro-assembler-arm.cc ('k') | src/ast.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698