| Index: src/arm/ic-arm.cc
|
| diff --git a/src/arm/ic-arm.cc b/src/arm/ic-arm.cc
|
| index acccadc8dc32a8a123af3397829adba1e712f6c8..14c4794f4f0e61311cc0e36e4e86897634fccfc5 100644
|
| --- a/src/arm/ic-arm.cc
|
| +++ b/src/arm/ic-arm.cc
|
| @@ -290,10 +290,7 @@ static void GenerateFastArrayLoad(MacroAssembler* masm,
|
| __ b(hs, out_of_range);
|
| // Fast case: Do the load.
|
| __ add(scratch1, elements, Operand(FixedArray::kHeaderSize - kHeapObjectTag));
|
| - // The key is a smi.
|
| - STATIC_ASSERT(kSmiTag == 0 && kSmiTagSize < kPointerSizeLog2);
|
| - __ ldr(scratch2,
|
| - MemOperand(scratch1, key, LSL, kPointerSizeLog2 - kSmiTagSize));
|
| + __ ldr(scratch2, MemOperand::PointerAddressFromSmiKey(scratch1, key));
|
| __ LoadRoot(ip, Heap::kTheHoleValueRootIndex);
|
| __ cmp(scratch2, ip);
|
| // In case the loaded value is the_hole we have to consult GetProperty
|
| @@ -567,7 +564,7 @@ void KeyedCallIC::GenerateMegamorphic(MacroAssembler* masm, int argc) {
|
| __ LoadRoot(ip, Heap::kHashTableMapRootIndex);
|
| __ cmp(r3, ip);
|
| __ b(ne, &slow_load);
|
| - __ mov(r0, Operand(r2, ASR, kSmiTagSize));
|
| + __ SmiUntag(r0, r2);
|
| // r0: untagged index
|
| __ LoadFromNumberDictionary(&slow_load, r4, r2, r1, r0, r3, r5);
|
| __ IncrementCounter(counters->keyed_call_generic_smi_dict(), 1, r0, r3);
|
| @@ -960,7 +957,7 @@ void KeyedLoadIC::GenerateGeneric(MacroAssembler* masm) {
|
| __ LoadRoot(ip, Heap::kHashTableMapRootIndex);
|
| __ cmp(r3, ip);
|
| __ b(ne, &slow);
|
| - __ mov(r2, Operand(r0, ASR, kSmiTagSize));
|
| + __ SmiUntag(r2, r0);
|
| __ LoadFromNumberDictionary(&slow, r4, r0, r0, r2, r3, r5);
|
| __ Ret();
|
|
|
| @@ -1133,7 +1130,7 @@ void KeyedLoadIC::GenerateIndexedInterceptor(MacroAssembler* masm) {
|
| __ JumpIfSmi(r1, &slow);
|
|
|
| // Check that the key is an array index, that is Uint32.
|
| - __ tst(r0, Operand(kSmiTagMask | kSmiSignMask));
|
| + __ NonNegativeSmiTst(r0);
|
| __ b(ne, &slow);
|
|
|
| // Get the map of the receiver.
|
| @@ -1321,8 +1318,7 @@ static void KeyedStoreGenerateGenericHelper(
|
| }
|
| // It's irrelevant whether array is smi-only or not when writing a smi.
|
| __ add(address, elements, Operand(FixedArray::kHeaderSize - kHeapObjectTag));
|
| - __ add(address, address, Operand(key, LSL, kPointerSizeLog2 - kSmiTagSize));
|
| - __ str(value, MemOperand(address));
|
| + __ str(value, MemOperand::PointerAddressFromSmiKey(address, key));
|
| __ Ret();
|
|
|
| __ bind(&non_smi_value);
|
| @@ -1338,7 +1334,7 @@ static void KeyedStoreGenerateGenericHelper(
|
| __ str(scratch_value, FieldMemOperand(receiver, JSArray::kLengthOffset));
|
| }
|
| __ add(address, elements, Operand(FixedArray::kHeaderSize - kHeapObjectTag));
|
| - __ add(address, address, Operand(key, LSL, kPointerSizeLog2 - kSmiTagSize));
|
| + __ add(address, address, Operand::PointerOffsetFromSmiKey(key));
|
| __ str(value, MemOperand(address));
|
| // Update write barrier for the elements array address.
|
| __ mov(scratch_value, value); // Preserve the value which is returned.
|
|
|