Index: runtime/vm/intrinsifier_arm.cc |
=================================================================== |
--- runtime/vm/intrinsifier_arm.cc (revision 36715) |
+++ runtime/vm/intrinsifier_arm.cc (working copy) |
@@ -40,16 +40,16 @@ |
__ ldr(R0, Address(SP, + 0 * kWordSize)); // Index |
__ ldr(R1, Address(SP, + 1 * kWordSize)); // Array |
- __ tst(R0, ShifterOperand(kSmiTagMask)); |
+ __ tst(R0, Operand(kSmiTagMask)); |
__ b(&fall_through, NE); // Index is not an smi, fall through |
// range check |
__ ldr(R6, FieldAddress(R1, Array::length_offset())); |
- __ cmp(R0, ShifterOperand(R6)); |
+ __ cmp(R0, Operand(R6)); |
ASSERT(kSmiTagShift == 1); |
// array element at R1 + R0*2 + Array::data_offset - 1 |
- __ add(R6, R1, ShifterOperand(R0, LSL, 1), CC); |
+ __ add(R6, R1, Operand(R0, LSL, 1), CC); |
__ ldr(R0, FieldAddress(R6, Array::data_offset()), CC); |
__ bx(LR, CC); |
__ Bind(&fall_through); |
@@ -104,7 +104,7 @@ |
__ b(&checked_ok, EQ); |
// Check for int and num. |
- __ tst(R2, ShifterOperand(kSmiTagMask)); // Value is Smi? |
+ __ tst(R2, Operand(kSmiTagMask)); // Value is Smi? |
__ b(&fall_through, NE); // Non-smi value. |
__ CompareObject(R0, Type::ZoneHandle(Type::IntType())); |
__ b(&checked_ok, EQ); |
@@ -113,24 +113,22 @@ |
__ Bind(&checked_ok); |
} |
__ ldr(R1, Address(SP, 1 * kWordSize)); // Index. |
- __ tst(R1, ShifterOperand(kSmiTagMask)); |
+ __ tst(R1, Operand(kSmiTagMask)); |
// Index not Smi. |
__ b(&fall_through, NE); |
__ ldr(R0, Address(SP, 2 * kWordSize)); // Array. |
// Range check. |
__ ldr(R3, FieldAddress(R0, Array::length_offset())); // Array length. |
- __ cmp(R1, ShifterOperand(R3)); |
+ __ cmp(R1, Operand(R3)); |
// Runtime throws exception. |
__ b(&fall_through, CS); |
// Note that R1 is Smi, i.e, times 2. |
ASSERT(kSmiTagShift == 1); |
__ ldr(R2, Address(SP, 0 * kWordSize)); // Value. |
- __ add(R1, R0, ShifterOperand(R1, LSL, 1)); // R1 is Smi. |
- __ StoreIntoObject(R0, |
- FieldAddress(R1, Array::data_offset()), |
- R2); |
+ __ add(R1, R0, Operand(R1, LSL, 1)); // R1 is Smi. |
+ __ StoreIntoObject(R0, FieldAddress(R1, Array::data_offset()), R2); |
// Caller is responsible for preserving the value if necessary. |
__ Ret(); |
__ Bind(&fall_through); |
@@ -162,7 +160,7 @@ |
// R1: potential next object start. |
__ LoadImmediate(R3, heap->EndAddress()); |
__ ldr(R3, Address(R3, 0)); |
- __ cmp(R1, ShifterOperand(R3)); |
+ __ cmp(R1, Operand(R3)); |
__ b(&fall_through, CS); |
// Successfully allocated the object(s), now update top to point to |
@@ -227,17 +225,17 @@ |
__ ldr(R0, Address(SP, + 0 * kWordSize)); // Index |
__ ldr(R1, Address(SP, + 1 * kWordSize)); // Array |
- __ tst(R0, ShifterOperand(kSmiTagMask)); |
+ __ tst(R0, Operand(kSmiTagMask)); |
__ b(&fall_through, NE); // Index is not an smi, fall through |
// range check |
__ ldr(R6, FieldAddress(R1, GrowableObjectArray::length_offset())); |
- __ cmp(R0, ShifterOperand(R6)); |
+ __ cmp(R0, Operand(R6)); |
ASSERT(kSmiTagShift == 1); |
// array element at R6 + R0 * 2 + Array::data_offset - 1 |
__ ldr(R6, FieldAddress(R1, GrowableObjectArray::data_offset()), CC); // data |
- __ add(R6, R6, ShifterOperand(R0, LSL, 1), CC); |
+ __ add(R6, R6, Operand(R0, LSL, 1), CC); |
__ ldr(R0, FieldAddress(R6, Array::data_offset()), CC); |
__ bx(LR, CC); |
__ Bind(&fall_through); |
@@ -253,21 +251,19 @@ |
Label fall_through; |
__ ldr(R1, Address(SP, 1 * kWordSize)); // Index. |
__ ldr(R0, Address(SP, 2 * kWordSize)); // GrowableArray. |
- __ tst(R1, ShifterOperand(kSmiTagMask)); |
+ __ tst(R1, Operand(kSmiTagMask)); |
__ b(&fall_through, NE); // Non-smi index. |
// Range check using _length field. |
__ ldr(R2, FieldAddress(R0, GrowableObjectArray::length_offset())); |
- __ cmp(R1, ShifterOperand(R2)); |
+ __ cmp(R1, Operand(R2)); |
// Runtime throws exception. |
__ b(&fall_through, CS); |
__ ldr(R0, FieldAddress(R0, GrowableObjectArray::data_offset())); // data. |
__ ldr(R2, Address(SP, 0 * kWordSize)); // Value. |
// Note that R1 is Smi, i.e, times 2. |
ASSERT(kSmiTagShift == 1); |
- __ add(R1, R0, ShifterOperand(R1, LSL, 1)); |
- __ StoreIntoObject(R0, |
- FieldAddress(R1, Array::data_offset()), |
- R2); |
+ __ add(R1, R0, Operand(R1, LSL, 1)); |
+ __ StoreIntoObject(R0, FieldAddress(R1, Array::data_offset()), R2); |
__ Ret(); |
__ Bind(&fall_through); |
} |
@@ -279,7 +275,7 @@ |
void Intrinsifier::GrowableList_setLength(Assembler* assembler) { |
__ ldr(R0, Address(SP, 1 * kWordSize)); // Growable array. |
__ ldr(R1, Address(SP, 0 * kWordSize)); // Length value. |
- __ tst(R1, ShifterOperand(kSmiTagMask)); // Check for Smi. |
+ __ tst(R1, Operand(kSmiTagMask)); // Check for Smi. |
__ str(R1, FieldAddress(R0, GrowableObjectArray::length_offset()), EQ); |
__ bx(LR, EQ); |
// Fall through on non-Smi. |
@@ -295,7 +291,7 @@ |
Label fall_through; |
__ ldr(R1, Address(SP, 0 * kWordSize)); // Data. |
// Check that data is an ObjectArray. |
- __ tst(R1, ShifterOperand(kSmiTagMask)); |
+ __ tst(R1, Operand(kSmiTagMask)); |
__ b(&fall_through, EQ); // Data is Smi. |
__ CompareClassId(R1, kArrayCid, R0); |
__ b(&fall_through, NE); |
@@ -326,18 +322,16 @@ |
// R3: capacity. |
__ ldr(R3, FieldAddress(R2, Array::length_offset())); |
// Compare length with capacity. |
- __ cmp(R1, ShifterOperand(R3)); |
+ __ cmp(R1, Operand(R3)); |
__ b(&fall_through, EQ); // Must grow data. |
const int32_t value_one = reinterpret_cast<int32_t>(Smi::New(1)); |
// len = len + 1; |
- __ add(R3, R1, ShifterOperand(value_one)); |
+ __ add(R3, R1, Operand(value_one)); |
__ str(R3, FieldAddress(R0, GrowableObjectArray::length_offset())); |
__ ldr(R0, Address(SP, 0 * kWordSize)); // Value. |
ASSERT(kSmiTagShift == 1); |
- __ add(R1, R2, ShifterOperand(R1, LSL, 1)); |
- __ StoreIntoObject(R2, |
- FieldAddress(R1, Array::data_offset()), |
- R0); |
+ __ add(R1, R2, Operand(R1, LSL, 1)); |
+ __ StoreIntoObject(R2, FieldAddress(R1, Array::data_offset()), R0); |
const int32_t raw_null = reinterpret_cast<int32_t>(Object::null()); |
__ LoadImmediate(R0, raw_null); |
__ Ret(); |
@@ -351,7 +345,7 @@ |
__ ldr(R2, Address(SP, kArrayLengthStackOffset)); /* Array length. */ \ |
/* Check that length is a positive Smi. */ \ |
/* R2: requested array length argument. */ \ |
- __ tst(R2, ShifterOperand(kSmiTagMask)); \ |
+ __ tst(R2, Operand(kSmiTagMask)); \ |
__ b(&fall_through, NE); \ |
__ CompareImmediate(R2, 0); \ |
__ b(&fall_through, LT); \ |
@@ -360,17 +354,17 @@ |
/* R2: untagged array length. */ \ |
__ CompareImmediate(R2, max_len); \ |
__ b(&fall_through, GT); \ |
- __ mov(R2, ShifterOperand(R2, LSL, scale_shift)); \ |
+ __ mov(R2, Operand(R2, LSL, scale_shift)); \ |
const intptr_t fixed_size = sizeof(Raw##type_name) + kObjectAlignment - 1; \ |
__ AddImmediate(R2, fixed_size); \ |
- __ bic(R2, R2, ShifterOperand(kObjectAlignment - 1)); \ |
+ __ bic(R2, R2, Operand(kObjectAlignment - 1)); \ |
Heap* heap = Isolate::Current()->heap(); \ |
\ |
__ LoadImmediate(R0, heap->TopAddress()); \ |
__ ldr(R0, Address(R0, 0)); \ |
\ |
/* R2: allocation size. */ \ |
- __ add(R1, R0, ShifterOperand(R2)); \ |
+ __ add(R1, R0, Operand(R2)); \ |
__ b(&fall_through, VS); \ |
\ |
/* Check if the allocation fits into the remaining space. */ \ |
@@ -379,7 +373,7 @@ |
/* R2: allocation size. */ \ |
__ LoadImmediate(R3, heap->EndAddress()); \ |
__ ldr(R3, Address(R3, 0)); \ |
- __ cmp(R1, ShifterOperand(R3)); \ |
+ __ cmp(R1, Operand(R3)); \ |
__ b(&fall_through, CS); \ |
\ |
/* Successfully allocated the object(s), now update top to point to */ \ |
@@ -394,13 +388,13 @@ |
/* R2: allocation size. */ \ |
{ \ |
__ CompareImmediate(R2, RawObject::SizeTag::kMaxSizeTag); \ |
- __ mov(R2, ShifterOperand(R2, LSL, \ |
+ __ mov(R2, Operand(R2, LSL, \ |
RawObject::kSizeTagPos - kObjectAlignmentLog2), LS); \ |
- __ mov(R2, ShifterOperand(0), HI); \ |
+ __ mov(R2, Operand(0), HI); \ |
\ |
/* Get the class index and insert it into the tags. */ \ |
__ LoadImmediate(TMP, RawObject::ClassIdTag::encode(cid)); \ |
- __ orr(R2, R2, ShifterOperand(TMP)); \ |
+ __ orr(R2, R2, Operand(TMP)); \ |
__ str(R2, FieldAddress(R0, type_name::tags_offset())); /* Tags. */ \ |
} \ |
/* Set the length field. */ \ |
@@ -420,9 +414,9 @@ |
__ AddImmediate(R2, R0, sizeof(Raw##type_name) - 1); \ |
Label init_loop; \ |
__ Bind(&init_loop); \ |
- __ cmp(R2, ShifterOperand(R1)); \ |
+ __ cmp(R2, Operand(R1)); \ |
__ str(R3, Address(R2, 0), CC); \ |
- __ add(R2, R2, ShifterOperand(kWordSize), CC); \ |
+ __ add(R2, R2, Operand(kWordSize), CC); \ |
__ b(&init_loop, CC); \ |
\ |
__ Ret(); \ |
@@ -472,8 +466,8 @@ |
static void TestBothArgumentsSmis(Assembler* assembler, Label* not_smi) { |
__ ldr(R0, Address(SP, + 0 * kWordSize)); |
__ ldr(R1, Address(SP, + 1 * kWordSize)); |
- __ orr(TMP, R0, ShifterOperand(R1)); |
- __ tst(TMP, ShifterOperand(kSmiTagMask)); |
+ __ orr(TMP, R0, Operand(R1)); |
+ __ tst(TMP, Operand(kSmiTagMask)); |
__ b(not_smi, NE); |
return; |
} |
@@ -482,7 +476,7 @@ |
void Intrinsifier::Integer_addFromInteger(Assembler* assembler) { |
Label fall_through; |
TestBothArgumentsSmis(assembler, &fall_through); // Checks two smis. |
- __ adds(R0, R0, ShifterOperand(R1)); // Adds. |
+ __ adds(R0, R0, Operand(R1)); // Adds. |
__ bx(LR, VC); // Return if no overflow. |
// Otherwise fall through. |
__ Bind(&fall_through); |
@@ -497,7 +491,7 @@ |
void Intrinsifier::Integer_subFromInteger(Assembler* assembler) { |
Label fall_through; |
TestBothArgumentsSmis(assembler, &fall_through); |
- __ subs(R0, R0, ShifterOperand(R1)); // Subtract. |
+ __ subs(R0, R0, Operand(R1)); // Subtract. |
__ bx(LR, VC); // Return if no overflow. |
// Otherwise fall through. |
__ Bind(&fall_through); |
@@ -507,7 +501,7 @@ |
void Intrinsifier::Integer_sub(Assembler* assembler) { |
Label fall_through; |
TestBothArgumentsSmis(assembler, &fall_through); |
- __ subs(R0, R1, ShifterOperand(R0)); // Subtract. |
+ __ subs(R0, R1, Operand(R0)); // Subtract. |
__ bx(LR, VC); // Return if no overflow. |
// Otherwise fall through. |
__ Bind(&fall_through); |
@@ -522,7 +516,7 @@ |
if (TargetCPUFeatures::arm_version() == ARMv7) { |
__ smull(R0, IP, R0, R1); // IP:R0 <- R0 * R1. |
- __ cmp(IP, ShifterOperand(R0, ASR, 31)); |
+ __ cmp(IP, Operand(R0, ASR, 31)); |
__ bx(LR, EQ); |
} else { |
__ CheckMultSignedOverflow(R0, R1, IP, D0, D1, &fall_through); |
@@ -558,20 +552,20 @@ |
ASSERT(left == result); |
// Check for quick zero results. |
- __ cmp(left, ShifterOperand(0)); |
- __ mov(R0, ShifterOperand(0), EQ); |
+ __ cmp(left, Operand(0)); |
+ __ mov(R0, Operand(0), EQ); |
__ bx(LR, EQ); // left is 0? Return 0. |
- __ cmp(left, ShifterOperand(right)); |
- __ mov(R0, ShifterOperand(0), EQ); |
+ __ cmp(left, Operand(right)); |
+ __ mov(R0, Operand(0), EQ); |
__ bx(LR, EQ); // left == right? Return 0. |
// Check if result should be left. |
- __ cmp(left, ShifterOperand(0)); |
+ __ cmp(left, Operand(0)); |
__ b(&modulo, LT); |
// left is positive. |
- __ cmp(left, ShifterOperand(right)); |
+ __ cmp(left, Operand(right)); |
// left is less than right, result is left. |
- __ mov(R0, ShifterOperand(left), LT); |
+ __ mov(R0, Operand(left), LT); |
__ bx(LR, LT); |
__ Bind(&modulo); |
@@ -600,25 +594,25 @@ |
Label fall_through; |
__ ldr(R1, Address(SP, + 0 * kWordSize)); |
__ ldr(R0, Address(SP, + 1 * kWordSize)); |
- __ orr(TMP, R0, ShifterOperand(R1)); |
- __ tst(TMP, ShifterOperand(kSmiTagMask)); |
+ __ orr(TMP, R0, Operand(R1)); |
+ __ tst(TMP, Operand(kSmiTagMask)); |
__ b(&fall_through, NE); |
// R1: Tagged left (dividend). |
// R0: Tagged right (divisor). |
// Check if modulo by zero -> exception thrown in main function. |
- __ cmp(R0, ShifterOperand(0)); |
+ __ cmp(R0, Operand(0)); |
__ b(&fall_through, EQ); |
EmitRemainderOperation(assembler); |
// Untagged right in R0. Untagged remainder result in R1. |
- __ cmp(R1, ShifterOperand(0)); |
- __ mov(R0, ShifterOperand(R1, LSL, 1), GE); // Tag and move result to R0. |
+ __ cmp(R1, Operand(0)); |
+ __ mov(R0, Operand(R1, LSL, 1), GE); // Tag and move result to R0. |
__ bx(LR, GE); |
// Result is negative, adjust it. |
- __ cmp(R0, ShifterOperand(0)); |
- __ sub(R0, R1, ShifterOperand(R0), LT); |
- __ add(R0, R1, ShifterOperand(R0), GE); |
+ __ cmp(R0, Operand(0)); |
+ __ sub(R0, R1, Operand(R0), LT); |
+ __ add(R0, R1, Operand(R0), GE); |
__ SmiTag(R0); |
__ Ret(); |
@@ -631,7 +625,7 @@ |
Label fall_through; |
TestBothArgumentsSmis(assembler, &fall_through); |
- __ cmp(R0, ShifterOperand(0)); |
+ __ cmp(R0, Operand(0)); |
__ b(&fall_through, EQ); // If b is 0, fall through. |
__ SmiUntag(R0); |
@@ -651,9 +645,9 @@ |
void Intrinsifier::Integer_negate(Assembler* assembler) { |
Label fall_through; |
__ ldr(R0, Address(SP, + 0 * kWordSize)); // Grab first argument. |
- __ tst(R0, ShifterOperand(kSmiTagMask)); // Test for Smi. |
+ __ tst(R0, Operand(kSmiTagMask)); // Test for Smi. |
__ b(&fall_through, NE); |
- __ rsbs(R0, R0, ShifterOperand(0)); // R0 is a Smi. R0 <- 0 - R0. |
+ __ rsbs(R0, R0, Operand(0)); // R0 is a Smi. R0 <- 0 - R0. |
__ bx(LR, VC); // Return if there wasn't overflow, fall through otherwise. |
// R0 is not a Smi. Fall through. |
__ Bind(&fall_through); |
@@ -664,7 +658,7 @@ |
Label fall_through; |
TestBothArgumentsSmis(assembler, &fall_through); // checks two smis |
- __ and_(R0, R0, ShifterOperand(R1)); |
+ __ and_(R0, R0, Operand(R1)); |
__ Ret(); |
__ Bind(&fall_through); |
@@ -680,7 +674,7 @@ |
Label fall_through; |
TestBothArgumentsSmis(assembler, &fall_through); // checks two smis |
- __ orr(R0, R0, ShifterOperand(R1)); |
+ __ orr(R0, R0, Operand(R1)); |
__ Ret(); |
__ Bind(&fall_through); |
@@ -696,7 +690,7 @@ |
Label fall_through; |
TestBothArgumentsSmis(assembler, &fall_through); // checks two smis |
- __ eor(R0, R0, ShifterOperand(R1)); |
+ __ eor(R0, R0, Operand(R1)); |
__ Ret(); |
__ Bind(&fall_through); |
@@ -721,11 +715,11 @@ |
// Check for overflow by shifting left and shifting back arithmetically. |
// If the result is different from the original, there was overflow. |
- __ mov(IP, ShifterOperand(R1, LSL, R0)); |
- __ cmp(R1, ShifterOperand(IP, ASR, R0)); |
+ __ mov(IP, Operand(R1, LSL, R0)); |
+ __ cmp(R1, Operand(IP, ASR, R0)); |
// No overflow, result in R0. |
- __ mov(R0, ShifterOperand(R1, LSL, R0), EQ); |
+ __ mov(R0, Operand(R1, LSL, R0), EQ); |
__ bx(LR, EQ); |
// Arguments are Smi but the shift produced an overflow to Mint. |
@@ -738,14 +732,14 @@ |
// high bits = (((1 << R0) - 1) << (32 - R0)) & R1) >> (32 - R0) |
// lo bits = R1 << R0 |
__ LoadImmediate(R7, 1); |
- __ mov(R7, ShifterOperand(R7, LSL, R0)); // R7 <- 1 << R0 |
- __ sub(R7, R7, ShifterOperand(1)); // R7 <- R7 - 1 |
- __ rsb(R8, R0, ShifterOperand(32)); // R8 <- 32 - R0 |
- __ mov(R7, ShifterOperand(R7, LSL, R8)); // R7 <- R7 << R8 |
- __ and_(R7, R1, ShifterOperand(R7)); // R7 <- R7 & R1 |
- __ mov(R7, ShifterOperand(R7, LSR, R8)); // R7 <- R7 >> R8 |
+ __ mov(R7, Operand(R7, LSL, R0)); // R7 <- 1 << R0 |
+ __ sub(R7, R7, Operand(1)); // R7 <- R7 - 1 |
+ __ rsb(R8, R0, Operand(32)); // R8 <- 32 - R0 |
+ __ mov(R7, Operand(R7, LSL, R8)); // R7 <- R7 << R8 |
+ __ and_(R7, R1, Operand(R7)); // R7 <- R7 & R1 |
+ __ mov(R7, Operand(R7, LSR, R8)); // R7 <- R7 >> R8 |
// Now R7 has the bits that fall off of R1 on a left shift. |
- __ mov(R1, ShifterOperand(R1, LSL, R0)); // R1 gets the low bits. |
+ __ mov(R1, Operand(R1, LSL, R0)); // R1 gets the low bits. |
const Class& mint_class = Class::Handle( |
Isolate::Current()->object_store()->mint_class()); |
@@ -765,13 +759,13 @@ |
Register reg, |
Label* not_smi_or_mint) { |
Label not_smi, done; |
- __ tst(reg, ShifterOperand(kSmiTagMask)); |
+ __ tst(reg, Operand(kSmiTagMask)); |
__ b(¬_smi, NE); |
__ SmiUntag(reg); |
// Sign extend to 64 bit |
- __ mov(res_lo, ShifterOperand(reg)); |
- __ mov(res_hi, ShifterOperand(res_lo, ASR, 31)); |
+ __ mov(res_lo, Operand(reg)); |
+ __ mov(res_hi, Operand(res_lo, ASR, 31)); |
__ b(&done); |
__ Bind(¬_smi); |
@@ -791,7 +785,7 @@ |
TestBothArgumentsSmis(assembler, &try_mint_smi); |
// R0 contains the right argument. R1 contains left argument |
- __ cmp(R1, ShifterOperand(R0)); |
+ __ cmp(R1, Operand(R0)); |
__ b(&is_true, true_condition); |
__ Bind(&is_false); |
__ LoadObject(R0, Bool::False()); |
@@ -830,10 +824,10 @@ |
// R7: right high. |
// R6: right low. |
- __ cmp(R3, ShifterOperand(R7)); // Compare left hi, right high. |
+ __ cmp(R3, Operand(R7)); // Compare left hi, right high. |
__ b(&is_false, hi_false_cond); |
__ b(&is_true, hi_true_cond); |
- __ cmp(R2, ShifterOperand(R6)); // Compare left lo, right lo. |
+ __ cmp(R2, Operand(R6)); // Compare left lo, right lo. |
__ b(&is_false, lo_false_cond); |
// Else is true. |
__ b(&is_true); |
@@ -874,11 +868,11 @@ |
// For integer receiver '===' check first. |
__ ldr(R0, Address(SP, 0 * kWordSize)); |
__ ldr(R1, Address(SP, 1 * kWordSize)); |
- __ cmp(R0, ShifterOperand(R1)); |
+ __ cmp(R0, Operand(R1)); |
__ b(&true_label, EQ); |
- __ orr(R2, R0, ShifterOperand(R1)); |
- __ tst(R2, ShifterOperand(kSmiTagMask)); |
+ __ orr(R2, R0, Operand(R1)); |
+ __ tst(R2, Operand(kSmiTagMask)); |
__ b(&check_for_mint, NE); // If R0 or R1 is not a smi do Mint checks. |
// Both arguments are smi, '===' is good enough. |
@@ -892,7 +886,7 @@ |
Label receiver_not_smi; |
__ Bind(&check_for_mint); |
- __ tst(R1, ShifterOperand(kSmiTagMask)); // Check receiver. |
+ __ tst(R1, Operand(kSmiTagMask)); // Check receiver. |
__ b(&receiver_not_smi, NE); |
// Left (receiver) is Smi, return false if right is not Double. |
@@ -910,7 +904,7 @@ |
__ CompareClassId(R1, kMintCid, R2); |
__ b(&fall_through, NE); |
// Receiver is Mint, return false if right is Smi. |
- __ tst(R0, ShifterOperand(kSmiTagMask)); |
+ __ tst(R0, Operand(kSmiTagMask)); |
__ b(&fall_through, NE); |
__ LoadObject(R0, Bool::False()); |
__ Ret(); |
@@ -940,7 +934,7 @@ |
__ CompareImmediate(R0, 0x1F); |
__ LoadImmediate(R0, 0x1F, GT); |
__ SmiUntag(R1); |
- __ mov(R0, ShifterOperand(R1, ASR, R0)); |
+ __ mov(R0, Operand(R1, ASR, R0)); |
__ SmiTag(R0); |
__ Ret(); |
__ Bind(&fall_through); |
@@ -949,8 +943,8 @@ |
void Intrinsifier::Smi_bitNegate(Assembler* assembler) { |
__ ldr(R0, Address(SP, 0 * kWordSize)); |
- __ mvn(R0, ShifterOperand(R0)); |
- __ bic(R0, R0, ShifterOperand(kSmiTagMask)); // Remove inverted smi-tag. |
+ __ mvn(R0, Operand(R0)); |
+ __ bic(R0, R0, Operand(kSmiTagMask)); // Remove inverted smi-tag. |
__ Ret(); |
} |
@@ -967,7 +961,7 @@ |
Label* is_smi, |
Label* not_double_smi) { |
__ ldr(R0, Address(SP, 0 * kWordSize)); |
- __ tst(R0, ShifterOperand(kSmiTagMask)); |
+ __ tst(R0, Operand(kSmiTagMask)); |
__ b(is_smi, EQ); |
__ CompareClassId(R0, kDoubleCid, R1); |
__ b(not_double_smi, NE); |
@@ -1088,7 +1082,7 @@ |
Label fall_through; |
// Only smis allowed. |
__ ldr(R0, Address(SP, 0 * kWordSize)); |
- __ tst(R0, ShifterOperand(kSmiTagMask)); |
+ __ tst(R0, Operand(kSmiTagMask)); |
__ b(&fall_through, NE); |
// Is Smi. |
__ SmiUntag(R0); |
@@ -1112,7 +1106,7 @@ |
Label fall_through; |
__ ldr(R0, Address(SP, 0 * kWordSize)); |
- __ tst(R0, ShifterOperand(kSmiTagMask)); |
+ __ tst(R0, Operand(kSmiTagMask)); |
__ b(&fall_through, NE); |
// Is Smi. |
__ SmiUntag(R0); |
@@ -1164,8 +1158,8 @@ |
__ Bind(&is_zero); |
// Check for negative zero by looking at the sign bit. |
__ vmovrrd(R0, R1, D0); // R1:R0 <- D0, so sign bit is in bit 31 of R1. |
- __ mov(R1, ShifterOperand(R1, LSR, 31)); |
- __ tst(R1, ShifterOperand(1)); |
+ __ mov(R1, Operand(R1, LSR, 31)); |
+ __ tst(R1, Operand(1)); |
__ b(&is_true, NE); // Sign bit set. |
__ b(&is_false); |
} |
@@ -1256,7 +1250,7 @@ |
__ LoadImmediate(R0, a_int32_value); |
__ LoadFromOffset(kWord, R2, R1, disp_0 - kHeapObjectTag); |
__ LoadFromOffset(kWord, R3, R1, disp_1 - kHeapObjectTag); |
- __ mov(R6, ShifterOperand(0)); // Zero extend unsigned _state[kSTATE_HI]. |
+ __ mov(R6, Operand(0)); // Zero extend unsigned _state[kSTATE_HI]. |
// Unsigned 32-bit multiply and 64-bit accumulate into R6:R3. |
__ umlal(R3, R6, R0, R2); // R6:R3 <- R6:R3 + R0 * R2. |
__ StoreToOffset(kWord, R3, R1, disp_0 - kHeapObjectTag); |
@@ -1269,7 +1263,7 @@ |
void Intrinsifier::Object_equal(Assembler* assembler) { |
__ ldr(R0, Address(SP, 0 * kWordSize)); |
__ ldr(R1, Address(SP, 1 * kWordSize)); |
- __ cmp(R0, ShifterOperand(R1)); |
+ __ cmp(R0, Operand(R1)); |
__ LoadObject(R0, Bool::False(), NE); |
__ LoadObject(R0, Bool::True(), EQ); |
__ Ret(); |
@@ -1279,7 +1273,7 @@ |
void Intrinsifier::String_getHashCode(Assembler* assembler) { |
__ ldr(R0, Address(SP, 0 * kWordSize)); |
__ ldr(R0, FieldAddress(R0, String::hash_offset())); |
- __ cmp(R0, ShifterOperand(0)); |
+ __ cmp(R0, Operand(0)); |
__ bx(LR, NE); // Hash not yet computed. |
} |
@@ -1296,11 +1290,11 @@ |
__ ldr(R1, Address(SP, 0 * kWordSize)); // Index. |
__ ldr(R0, Address(SP, 1 * kWordSize)); // String. |
- __ tst(R1, ShifterOperand(kSmiTagMask)); |
+ __ tst(R1, Operand(kSmiTagMask)); |
__ b(&fall_through, NE); // Index is not a Smi. |
// Range check. |
__ ldr(R2, FieldAddress(R0, String::length_offset())); |
- __ cmp(R1, ShifterOperand(R2)); |
+ __ cmp(R1, Operand(R2)); |
__ b(&fall_through, CS); // Runtime throws exception. |
__ CompareClassId(R0, kOneByteStringCid, R3); |
__ b(&try_two_byte_string, NE); |
@@ -1326,7 +1320,7 @@ |
void Intrinsifier::String_getIsEmpty(Assembler* assembler) { |
__ ldr(R0, Address(SP, 0 * kWordSize)); |
__ ldr(R0, FieldAddress(R0, String::length_offset())); |
- __ cmp(R0, ShifterOperand(Smi::RawValue(0))); |
+ __ cmp(R0, Operand(Smi::RawValue(0))); |
__ LoadObject(R0, Bool::True(), EQ); |
__ LoadObject(R0, Bool::False(), NE); |
__ Ret(); |
@@ -1336,18 +1330,18 @@ |
void Intrinsifier::OneByteString_getHashCode(Assembler* assembler) { |
__ ldr(R1, Address(SP, 0 * kWordSize)); |
__ ldr(R0, FieldAddress(R1, String::hash_offset())); |
- __ cmp(R0, ShifterOperand(0)); |
+ __ cmp(R0, Operand(0)); |
__ bx(LR, NE); // Return if already computed. |
__ ldr(R2, FieldAddress(R1, String::length_offset())); |
Label done; |
// If the string is empty, set the hash to 1, and return. |
- __ cmp(R2, ShifterOperand(Smi::RawValue(0))); |
+ __ cmp(R2, Operand(Smi::RawValue(0))); |
__ b(&done, EQ); |
__ SmiUntag(R2); |
- __ mov(R3, ShifterOperand(0)); |
+ __ mov(R3, Operand(0)); |
__ AddImmediate(R6, R1, OneByteString::data_offset() - kHeapObjectTag); |
// R1: Instance of OneByteString. |
// R2: String length, untagged integer. |
@@ -1364,28 +1358,28 @@ |
__ Bind(&loop); |
__ ldrb(R7, Address(R6, 0)); |
// R7: ch. |
- __ add(R3, R3, ShifterOperand(1)); |
- __ add(R6, R6, ShifterOperand(1)); |
- __ add(R0, R0, ShifterOperand(R7)); |
- __ add(R0, R0, ShifterOperand(R0, LSL, 10)); |
- __ eor(R0, R0, ShifterOperand(R0, LSR, 6)); |
- __ cmp(R3, ShifterOperand(R2)); |
+ __ add(R3, R3, Operand(1)); |
+ __ add(R6, R6, Operand(1)); |
+ __ add(R0, R0, Operand(R7)); |
+ __ add(R0, R0, Operand(R0, LSL, 10)); |
+ __ eor(R0, R0, Operand(R0, LSR, 6)); |
+ __ cmp(R3, Operand(R2)); |
__ b(&loop, NE); |
// Finalize. |
// hash_ += hash_ << 3; |
// hash_ ^= hash_ >> 11; |
// hash_ += hash_ << 15; |
- __ add(R0, R0, ShifterOperand(R0, LSL, 3)); |
- __ eor(R0, R0, ShifterOperand(R0, LSR, 11)); |
- __ add(R0, R0, ShifterOperand(R0, LSL, 15)); |
+ __ add(R0, R0, Operand(R0, LSL, 3)); |
+ __ eor(R0, R0, Operand(R0, LSR, 11)); |
+ __ add(R0, R0, Operand(R0, LSL, 15)); |
// hash_ = hash_ & ((static_cast<intptr_t>(1) << bits) - 1); |
__ LoadImmediate(R2, (static_cast<intptr_t>(1) << String::kHashBits) - 1); |
- __ and_(R0, R0, ShifterOperand(R2)); |
- __ cmp(R0, ShifterOperand(0)); |
+ __ and_(R0, R0, Operand(R2)); |
+ __ cmp(R0, Operand(0)); |
// return hash_ == 0 ? 1 : hash_; |
__ Bind(&done); |
- __ mov(R0, ShifterOperand(1), EQ); |
+ __ mov(R0, Operand(1), EQ); |
__ SmiTag(R0); |
__ str(R0, FieldAddress(R1, String::hash_offset())); |
__ Ret(); |
@@ -1402,11 +1396,11 @@ |
const Register length_reg = R2; |
Label fail; |
- __ mov(R6, ShifterOperand(length_reg)); // Save the length register. |
+ __ mov(R6, Operand(length_reg)); // Save the length register. |
__ SmiUntag(length_reg); |
const intptr_t fixed_size = sizeof(RawString) + kObjectAlignment - 1; |
__ AddImmediate(length_reg, fixed_size); |
- __ bic(length_reg, length_reg, ShifterOperand(kObjectAlignment - 1)); |
+ __ bic(length_reg, length_reg, Operand(kObjectAlignment - 1)); |
Isolate* isolate = Isolate::Current(); |
Heap* heap = isolate->heap(); |
@@ -1415,7 +1409,7 @@ |
__ ldr(R0, Address(R3, 0)); |
// length_reg: allocation size. |
- __ adds(R1, R0, ShifterOperand(length_reg)); |
+ __ adds(R1, R0, Operand(length_reg)); |
__ b(&fail, VS); // Fail on overflow. |
// Check if the allocation fits into the remaining space. |
@@ -1425,7 +1419,7 @@ |
// R3: heap->Top->Address(). |
__ LoadImmediate(R7, heap->EndAddress()); |
__ ldr(R7, Address(R7, 0)); |
- __ cmp(R1, ShifterOperand(R7)); |
+ __ cmp(R1, Operand(R7)); |
__ b(&fail, CS); |
// Successfully allocated the object(s), now update top to point to |
@@ -1444,13 +1438,13 @@ |
Class::Handle(isolate->object_store()->one_byte_string_class()); |
__ CompareImmediate(R2, RawObject::SizeTag::kMaxSizeTag); |
- __ mov(R2, ShifterOperand(R2, LSL, shift), LS); |
- __ mov(R2, ShifterOperand(0), HI); |
+ __ mov(R2, Operand(R2, LSL, shift), LS); |
+ __ mov(R2, Operand(0), HI); |
// Get the class index and insert it into the tags. |
// R2: size and bit tags. |
__ LoadImmediate(TMP, RawObject::ClassIdTag::encode(cls.id())); |
- __ orr(R2, R2, ShifterOperand(TMP)); |
+ __ orr(R2, R2, Operand(TMP)); |
__ str(R2, FieldAddress(R0, String::tags_offset())); // Store tags. |
} |
@@ -1480,11 +1474,11 @@ |
__ ldr(R2, Address(SP, kEndIndexOffset)); |
__ ldr(TMP, Address(SP, kStartIndexOffset)); |
- __ orr(R3, R2, ShifterOperand(TMP)); |
- __ tst(R3, ShifterOperand(kSmiTagMask)); |
+ __ orr(R3, R2, Operand(TMP)); |
+ __ tst(R3, Operand(kSmiTagMask)); |
__ b(&fall_through, NE); // 'start', 'end' not Smi. |
- __ sub(R2, R2, ShifterOperand(TMP)); |
+ __ sub(R2, R2, Operand(TMP)); |
TryAllocateOnebyteString(assembler, &ok, &fall_through); |
__ Bind(&ok); |
// R0: new string as tagged pointer. |
@@ -1492,7 +1486,7 @@ |
__ ldr(R3, Address(SP, kStringOffset)); |
__ ldr(R1, Address(SP, kStartIndexOffset)); |
__ SmiUntag(R1); |
- __ add(R3, R3, ShifterOperand(R1)); |
+ __ add(R3, R3, Operand(R1)); |
// Calculate start address and untag (- 1). |
__ AddImmediate(R3, OneByteString::data_offset() - 1); |
@@ -1500,7 +1494,7 @@ |
// R1: Untagged start index. |
__ ldr(R2, Address(SP, kEndIndexOffset)); |
__ SmiUntag(R2); |
- __ sub(R2, R2, ShifterOperand(R1)); |
+ __ sub(R2, R2, Operand(R1)); |
// R3: Start address to copy from (untagged). |
// R2: Untagged number of bytes to copy. |
@@ -1509,15 +1503,15 @@ |
// R7: Pointer into R0. |
// R1: Scratch register. |
Label loop, done; |
- __ cmp(R2, ShifterOperand(0)); |
+ __ cmp(R2, Operand(0)); |
__ b(&done, LE); |
- __ mov(R6, ShifterOperand(R3)); |
- __ mov(R7, ShifterOperand(R0)); |
+ __ mov(R6, Operand(R3)); |
+ __ mov(R7, Operand(R0)); |
__ Bind(&loop); |
__ ldrb(R1, Address(R6, 0)); |
__ AddImmediate(R6, 1); |
- __ sub(R2, R2, ShifterOperand(1)); |
- __ cmp(R2, ShifterOperand(0)); |
+ __ sub(R2, R2, Operand(1)); |
+ __ cmp(R2, Operand(0)); |
__ strb(R1, FieldAddress(R7, OneByteString::data_offset())); |
__ AddImmediate(R7, 1); |
__ b(&loop, GT); |
@@ -1559,11 +1553,11 @@ |
__ ldr(R1, Address(SP, 0 * kWordSize)); // Other. |
// Are identical? |
- __ cmp(R0, ShifterOperand(R1)); |
+ __ cmp(R0, Operand(R1)); |
__ b(&is_true, EQ); |
// Is other OneByteString? |
- __ tst(R1, ShifterOperand(kSmiTagMask)); |
+ __ tst(R1, Operand(kSmiTagMask)); |
__ b(&fall_through, EQ); |
__ CompareClassId(R1, string_cid, R2); |
__ b(&fall_through, NE); |
@@ -1571,7 +1565,7 @@ |
// Have same length? |
__ ldr(R2, FieldAddress(R0, String::length_offset())); |
__ ldr(R3, FieldAddress(R1, String::length_offset())); |
- __ cmp(R2, ShifterOperand(R3)); |
+ __ cmp(R2, Operand(R3)); |
__ b(&is_false, NE); |
// Check contents, no fall-through possible. |
@@ -1585,7 +1579,7 @@ |
__ SmiUntag(R2); |
__ Bind(&loop); |
__ AddImmediate(R2, -1); |
- __ cmp(R2, ShifterOperand(0)); |
+ __ cmp(R2, Operand(0)); |
__ b(&is_true, LT); |
if (string_cid == kOneByteStringCid) { |
__ ldrb(R3, Address(R0)); |
@@ -1600,7 +1594,7 @@ |
} else { |
UNIMPLEMENTED(); |
} |
- __ cmp(R3, ShifterOperand(R4)); |
+ __ cmp(R3, Operand(R4)); |
__ b(&is_false, NE); |
__ b(&loop); |