Index: runtime/vm/intrinsifier_arm64.cc |
diff --git a/runtime/vm/intrinsifier_arm64.cc b/runtime/vm/intrinsifier_arm64.cc |
index 8531f7fd85f38ee218d87ca74c3831939221025e..18eb6752003efee6b9edf82b8e17579d3c2e829c 100644 |
--- a/runtime/vm/intrinsifier_arm64.cc |
+++ b/runtime/vm/intrinsifier_arm64.cc |
@@ -58,28 +58,28 @@ void Intrinsifier::ObjectArraySetIndexed(Assembler* assembler) { |
__ ldr(R2, Address(SP, 0 * kWordSize)); // Value. |
// Null value is valid for any type. |
- __ CompareObject(R2, Object::null_object(), PP); |
+ __ CompareObject(R2, Object::null_object()); |
__ b(&checked_ok, EQ); |
__ ldr(R1, Address(SP, 2 * kWordSize)); // Array. |
__ ldr(R1, FieldAddress(R1, type_args_field_offset)); |
// R1: Type arguments of array. |
- __ CompareObject(R1, Object::null_object(), PP); |
+ __ CompareObject(R1, Object::null_object()); |
__ b(&checked_ok, EQ); |
// Check if it's dynamic. |
// Get type at index 0. |
__ ldr(R0, FieldAddress(R1, TypeArguments::type_at_offset(0))); |
- __ CompareObject(R0, Type::ZoneHandle(Type::DynamicType()), PP); |
+ __ CompareObject(R0, Type::ZoneHandle(Type::DynamicType())); |
__ b(&checked_ok, EQ); |
// Check for int and num. |
__ tsti(R2, Immediate(Immediate(kSmiTagMask))); // Value is Smi? |
__ b(&fall_through, NE); // Non-smi value. |
- __ CompareObject(R0, Type::ZoneHandle(Type::IntType()), PP); |
+ __ CompareObject(R0, Type::ZoneHandle(Type::IntType())); |
__ b(&checked_ok, EQ); |
- __ CompareObject(R0, Type::ZoneHandle(Type::Number()), PP); |
+ __ CompareObject(R0, Type::ZoneHandle(Type::Number())); |
__ b(&fall_through, NE); |
__ Bind(&checked_ok); |
} |
@@ -119,7 +119,7 @@ void Intrinsifier::GrowableArray_Allocate(Assembler* assembler) { |
// Try allocating in new space. |
const Class& cls = Class::Handle( |
Isolate::Current()->object_store()->growable_object_array_class()); |
- __ TryAllocate(cls, &fall_through, R0, R1, kNoPP); |
+ __ TryAllocate(cls, &fall_through, R0, R1); |
// Store backing array object in growable array object. |
__ ldr(R1, Address(SP, kArrayOffset)); // Data argument. |
@@ -138,7 +138,7 @@ void Intrinsifier::GrowableArray_Allocate(Assembler* assembler) { |
R1); |
// Set the length field in the growable array object to 0. |
- __ LoadImmediate(R1, 0, kNoPP); |
+ __ LoadImmediate(R1, 0); |
__ str(R1, FieldAddress(R0, GrowableObjectArray::length_offset())); |
__ ret(); // Returns the newly allocated object in R0. |
@@ -176,7 +176,7 @@ void Intrinsifier::GrowableArray_add(Assembler* assembler) { |
__ StoreIntoObject(R2, |
FieldAddress(R1, Array::data_offset()), |
R0); |
- __ LoadObject(R0, Object::null_object(), PP); |
+ __ LoadObject(R0, Object::null_object()); |
__ ret(); |
__ Bind(&fall_through); |
} |
@@ -198,7 +198,7 @@ static int GetScaleFactor(intptr_t size) { |
#define TYPED_ARRAY_ALLOCATION(type_name, cid, max_len, scale_shift) \ |
Label fall_through; \ |
const intptr_t kArrayLengthStackOffset = 0 * kWordSize; \ |
- __ MaybeTraceAllocation(cid, R2, kNoPP, &fall_through); \ |
+ __ MaybeTraceAllocation(cid, R2, &fall_through); \ |
__ ldr(R2, Address(SP, kArrayLengthStackOffset)); /* Array length. */ \ |
/* Check that length is a positive Smi. */ \ |
/* R2: requested array length argument. */ \ |
@@ -209,15 +209,15 @@ static int GetScaleFactor(intptr_t size) { |
__ SmiUntag(R2); \ |
/* Check for maximum allowed length. */ \ |
/* R2: untagged array length. */ \ |
- __ CompareImmediate(R2, max_len, kNoPP); \ |
+ __ CompareImmediate(R2, max_len); \ |
__ b(&fall_through, GT); \ |
__ LslImmediate(R2, R2, scale_shift); \ |
const intptr_t fixed_size = sizeof(Raw##type_name) + kObjectAlignment - 1; \ |
- __ AddImmediate(R2, R2, fixed_size, kNoPP); \ |
+ __ AddImmediate(R2, R2, fixed_size); \ |
__ andi(R2, R2, Immediate(~(kObjectAlignment - 1))); \ |
Heap* heap = Isolate::Current()->heap(); \ |
Heap::Space space = heap->SpaceForAllocation(cid); \ |
- __ LoadImmediate(R0, heap->TopAddress(space), kNoPP); \ |
+ __ LoadImmediate(R0, heap->TopAddress(space)); \ |
__ ldr(R0, Address(R0, 0)); \ |
\ |
/* R2: allocation size. */ \ |
@@ -228,28 +228,28 @@ static int GetScaleFactor(intptr_t size) { |
/* R0: potential new object start. */ \ |
/* R1: potential next object start. */ \ |
/* R2: allocation size. */ \ |
- __ LoadImmediate(R3, heap->EndAddress(space), kNoPP); \ |
+ __ LoadImmediate(R3, heap->EndAddress(space)); \ |
__ ldr(R3, Address(R3, 0)); \ |
__ cmp(R1, Operand(R3)); \ |
__ b(&fall_through, CS); \ |
\ |
/* Successfully allocated the object(s), now update top to point to */ \ |
/* next object start and initialize the object. */ \ |
- __ LoadImmediate(R3, heap->TopAddress(space), kNoPP); \ |
+ __ LoadImmediate(R3, heap->TopAddress(space)); \ |
__ str(R1, Address(R3, 0)); \ |
- __ AddImmediate(R0, R0, kHeapObjectTag, kNoPP); \ |
- __ UpdateAllocationStatsWithSize(cid, R2, kNoPP, space); \ |
+ __ AddImmediate(R0, R0, kHeapObjectTag); \ |
+ __ UpdateAllocationStatsWithSize(cid, R2, space); \ |
/* Initialize the tags. */ \ |
/* R0: new object start as a tagged pointer. */ \ |
/* R1: new object end address. */ \ |
/* R2: allocation size. */ \ |
{ \ |
- __ CompareImmediate(R2, RawObject::SizeTag::kMaxSizeTag, kNoPP); \ |
+ __ CompareImmediate(R2, RawObject::SizeTag::kMaxSizeTag); \ |
__ LslImmediate(R2, R2, RawObject::kSizeTagPos - kObjectAlignmentLog2); \ |
__ csel(R2, ZR, R2, HI); \ |
\ |
/* Get the class index and insert it into the tags. */ \ |
- __ LoadImmediate(TMP, RawObject::ClassIdTag::encode(cid), kNoPP); \ |
+ __ LoadImmediate(TMP, RawObject::ClassIdTag::encode(cid)); \ |
__ orr(R2, R2, Operand(TMP)); \ |
__ str(R2, FieldAddress(R0, type_name::tags_offset())); /* Tags. */ \ |
} \ |
@@ -267,7 +267,7 @@ static int GetScaleFactor(intptr_t size) { |
/* R3: scratch register. */ \ |
/* data area to be initialized. */ \ |
__ mov(R3, ZR); \ |
- __ AddImmediate(R2, R0, sizeof(Raw##type_name) - 1, kNoPP); \ |
+ __ AddImmediate(R2, R0, sizeof(Raw##type_name) - 1); \ |
Label init_loop, done; \ |
__ Bind(&init_loop); \ |
__ cmp(R2, Operand(R1)); \ |
@@ -473,7 +473,7 @@ void Intrinsifier::Integer_truncDivide(Assembler* assembler) { |
// Check the corner case of dividing the 'MIN_SMI' with -1, in which case we |
// cannot tag the result. |
- __ CompareImmediate(R0, 0x4000000000000000, kNoPP); |
+ __ CompareImmediate(R0, 0x4000000000000000); |
__ b(&fall_through, EQ); |
__ SmiTag(R0); // Not equal. Okay to tag and return. |
__ ret(); // Return. |
@@ -547,7 +547,7 @@ void Intrinsifier::Integer_shl(Assembler* assembler) { |
TestBothArgumentsSmis(assembler, &fall_through); |
__ CompareImmediate( |
- right, reinterpret_cast<int64_t>(Smi::New(Smi::kBits)), PP); |
+ right, reinterpret_cast<int64_t>(Smi::New(Smi::kBits))); |
__ b(&fall_through, CS); |
// Left is not a constant. |
@@ -570,8 +570,8 @@ static void CompareIntegers(Assembler* assembler, Condition true_condition) { |
TestBothArgumentsSmis(assembler, &fall_through); |
// R0 contains the right argument, R1 the left. |
__ CompareRegisters(R1, R0); |
- __ LoadObject(R0, Bool::False(), PP); |
- __ LoadObject(TMP, Bool::True(), PP); |
+ __ LoadObject(R0, Bool::False()); |
+ __ LoadObject(TMP, Bool::True()); |
__ csel(R0, TMP, R0, true_condition); |
__ ret(); |
__ Bind(&fall_through); |
@@ -618,10 +618,10 @@ void Intrinsifier::Integer_equalToInteger(Assembler* assembler) { |
__ b(&check_for_mint, NE); // If R0 or R1 is not a smi do Mint checks. |
// Both arguments are smi, '===' is good enough. |
- __ LoadObject(R0, Bool::False(), PP); |
+ __ LoadObject(R0, Bool::False()); |
__ ret(); |
__ Bind(&true_label); |
- __ LoadObject(R0, Bool::True(), PP); |
+ __ LoadObject(R0, Bool::True()); |
__ ret(); |
// At least one of the arguments was not Smi. |
@@ -635,20 +635,20 @@ void Intrinsifier::Integer_equalToInteger(Assembler* assembler) { |
// Note that an instance of Mint or Bigint never contains a value that can be |
// represented by Smi. |
- __ CompareClassId(R0, kDoubleCid, kNoPP); |
+ __ CompareClassId(R0, kDoubleCid); |
__ b(&fall_through, EQ); |
- __ LoadObject(R0, Bool::False(), PP); // Smi == Mint -> false. |
+ __ LoadObject(R0, Bool::False()); // Smi == Mint -> false. |
__ ret(); |
__ Bind(&receiver_not_smi); |
// R1: receiver. |
- __ CompareClassId(R1, kMintCid, kNoPP); |
+ __ CompareClassId(R1, kMintCid); |
__ b(&fall_through, NE); |
// Receiver is Mint, return false if right is Smi. |
__ tsti(R0, Immediate(kSmiTagMask)); |
__ b(&fall_through, NE); |
- __ LoadObject(R0, Bool::False(), PP); |
+ __ LoadObject(R0, Bool::False()); |
__ ret(); |
// TODO(srdjan): Implement Mint == Mint comparison. |
@@ -673,7 +673,7 @@ void Intrinsifier::Integer_sar(Assembler* assembler) { |
__ b(&fall_through, LT); |
// If shift amount is bigger than 63, set to 63. |
- __ LoadImmediate(TMP, 0x3F, kNoPP); |
+ __ LoadImmediate(TMP, 0x3F); |
__ CompareRegisters(R0, TMP); |
__ csel(R0, TMP, R0, GT); |
__ SmiUntag(R1); |
@@ -698,7 +698,7 @@ void Intrinsifier::Smi_bitLength(Assembler* assembler) { |
// XOR with sign bit to complement bits if value is negative. |
__ eor(R0, R0, Operand(R0, ASR, 63)); |
__ clz(R0, R0); |
- __ LoadImmediate(R1, 64, kNoPP); |
+ __ LoadImmediate(R1, 64); |
__ sub(R0, R1, Operand(R0)); |
__ SmiTag(R0); |
__ ret(); |
@@ -729,9 +729,9 @@ void Intrinsifier::Bigint_lsh(Assembler* assembler) { |
__ add(R0, R0, Operand(R2)); |
__ add(R8, R8, Operand(R0, LSL, 3)); |
// R3 = n % (2 * _DIGIT_BITS) |
- __ AndImmediate(R3, R5, 63, kNoPP); |
+ __ AndImmediate(R3, R5, 63); |
// R2 = 64 - R3 |
- __ LoadImmediate(R2, 64, kNoPP); |
+ __ LoadImmediate(R2, 64); |
__ sub(R2, R2, Operand(R3)); |
__ mov(R1, ZR); |
Label loop; |
@@ -772,9 +772,9 @@ void Intrinsifier::Bigint_rsh(Assembler* assembler) { |
__ sub(R0, R2, Operand(R0)); |
__ add(R6, R8, Operand(R0, LSL, 3)); |
// R3 = n % (2*_DIGIT_BITS) |
- __ AndImmediate(R3, R5, 63, kNoPP); |
+ __ AndImmediate(R3, R5, 63); |
// R2 = 64 - R3 |
- __ LoadImmediate(R2, 64, kNoPP); |
+ __ LoadImmediate(R2, 64); |
__ sub(R2, R2, Operand(R3)); |
// R1 = x_digits[n ~/ (2*_DIGIT_BITS)] >> (n % (2*_DIGIT_BITS)) |
__ ldr(R1, Address(R7, 2 * Bigint::kBytesPerDigit, Address::PostIndex)); |
@@ -854,7 +854,7 @@ void Intrinsifier::Bigint_absAdd(Assembler* assembler) { |
__ Bind(&last_carry); |
Label done; |
__ b(&done, CC); |
- __ LoadImmediate(R0, 1, kNoPP); |
+ __ LoadImmediate(R0, 1); |
__ str(R0, Address(R6, 0)); |
__ Bind(&done); |
@@ -1029,7 +1029,7 @@ void Intrinsifier::Bigint_mulAdd(Assembler* assembler) { |
__ b(&propagate_carry_loop, CS); |
__ Bind(&done); |
- __ LoadImmediate(R0, Smi::RawValue(2), kNoPP); // Two digits processed. |
+ __ LoadImmediate(R0, Smi::RawValue(2)); // Two digits processed. |
__ ret(); |
} |
@@ -1144,7 +1144,7 @@ void Intrinsifier::Bigint_sqrAdd(Assembler* assembler) { |
__ stp(R6, R7, Address(R5, 0, Address::PairOffset)); |
__ Bind(&x_zero); |
- __ LoadImmediate(R0, Smi::RawValue(2), kNoPP); // Two digits processed. |
+ __ LoadImmediate(R0, Smi::RawValue(2)); // Two digits processed. |
__ ret(); |
} |
@@ -1318,7 +1318,7 @@ void Intrinsifier::Bigint_estQuotientDigit(Assembler* assembler) { |
__ str(R0, |
FieldAddress(R4, TypedData::data_offset() + 2*Bigint::kBytesPerDigit)); |
- __ LoadImmediate(R0, Smi::RawValue(2), kNoPP); // Two digits processed. |
+ __ LoadImmediate(R0, Smi::RawValue(2)); // Two digits processed. |
__ ret(); |
} |
@@ -1353,7 +1353,7 @@ void Intrinsifier::Montgomery_mulMod(Assembler* assembler) { |
__ str(R0, |
FieldAddress(R4, TypedData::data_offset() + 4*Bigint::kBytesPerDigit)); |
- __ LoadImmediate(R0, Smi::RawValue(2), kNoPP); // Two digits processed. |
+ __ LoadImmediate(R0, Smi::RawValue(2)); // Two digits processed. |
__ ret(); |
} |
@@ -1367,7 +1367,7 @@ static void TestLastArgumentIsDouble(Assembler* assembler, |
__ ldr(R0, Address(SP, 0 * kWordSize)); |
__ tsti(R0, Immediate(kSmiTagMask)); |
__ b(is_smi, EQ); |
- __ CompareClassId(R0, kDoubleCid, kNoPP); |
+ __ CompareClassId(R0, kDoubleCid); |
__ b(not_double_smi, NE); |
// Fall through with Double in R0. |
} |
@@ -1383,18 +1383,18 @@ static void CompareDoubles(Assembler* assembler, Condition true_condition) { |
TestLastArgumentIsDouble(assembler, &is_smi, &fall_through); |
// Both arguments are double, right operand is in R0. |
- __ LoadDFieldFromOffset(V1, R0, Double::value_offset(), kNoPP); |
+ __ LoadDFieldFromOffset(V1, R0, Double::value_offset()); |
__ Bind(&double_op); |
__ ldr(R0, Address(SP, 1 * kWordSize)); // Left argument. |
- __ LoadDFieldFromOffset(V0, R0, Double::value_offset(), kNoPP); |
+ __ LoadDFieldFromOffset(V0, R0, Double::value_offset()); |
__ fcmpd(V0, V1); |
- __ LoadObject(R0, Bool::False(), PP); |
+ __ LoadObject(R0, Bool::False()); |
// Return false if D0 or D1 was NaN before checking true condition. |
__ b(¬_nan, VC); |
__ ret(); |
__ Bind(¬_nan); |
- __ LoadObject(TMP, Bool::True(), PP); |
+ __ LoadObject(TMP, Bool::True()); |
__ csel(R0, TMP, R0, true_condition); |
__ ret(); |
@@ -1438,9 +1438,9 @@ static void DoubleArithmeticOperations(Assembler* assembler, Token::Kind kind) { |
TestLastArgumentIsDouble(assembler, &fall_through, &fall_through); |
// Both arguments are double, right operand is in R0. |
- __ LoadDFieldFromOffset(V1, R0, Double::value_offset(), kNoPP); |
+ __ LoadDFieldFromOffset(V1, R0, Double::value_offset()); |
__ ldr(R0, Address(SP, 1 * kWordSize)); // Left argument. |
- __ LoadDFieldFromOffset(V0, R0, Double::value_offset(), kNoPP); |
+ __ LoadDFieldFromOffset(V0, R0, Double::value_offset()); |
switch (kind) { |
case Token::kADD: __ faddd(V0, V0, V1); break; |
case Token::kSUB: __ fsubd(V0, V0, V1); break; |
@@ -1450,8 +1450,8 @@ static void DoubleArithmeticOperations(Assembler* assembler, Token::Kind kind) { |
} |
const Class& double_class = Class::Handle( |
Isolate::Current()->object_store()->double_class()); |
- __ TryAllocate(double_class, &fall_through, R0, R1, kNoPP); |
- __ StoreDFieldToOffset(V0, R0, Double::value_offset(), kNoPP); |
+ __ TryAllocate(double_class, &fall_through, R0, R1); |
+ __ StoreDFieldToOffset(V0, R0, Double::value_offset()); |
__ ret(); |
__ Bind(&fall_through); |
} |
@@ -1488,12 +1488,12 @@ void Intrinsifier::Double_mulFromInteger(Assembler* assembler) { |
__ SmiUntag(R0); |
__ scvtfdx(V1, R0); |
__ ldr(R0, Address(SP, 1 * kWordSize)); |
- __ LoadDFieldFromOffset(V0, R0, Double::value_offset(), kNoPP); |
+ __ LoadDFieldFromOffset(V0, R0, Double::value_offset()); |
__ fmuld(V0, V0, V1); |
const Class& double_class = Class::Handle( |
Isolate::Current()->object_store()->double_class()); |
- __ TryAllocate(double_class, &fall_through, R0, R1, kNoPP); |
- __ StoreDFieldToOffset(V0, R0, Double::value_offset(), kNoPP); |
+ __ TryAllocate(double_class, &fall_through, R0, R1); |
+ __ StoreDFieldToOffset(V0, R0, Double::value_offset()); |
__ ret(); |
__ Bind(&fall_through); |
} |
@@ -1510,8 +1510,8 @@ void Intrinsifier::DoubleFromInteger(Assembler* assembler) { |
__ scvtfdx(V0, R0); |
const Class& double_class = Class::Handle( |
Isolate::Current()->object_store()->double_class()); |
- __ TryAllocate(double_class, &fall_through, R0, R1, kNoPP); |
- __ StoreDFieldToOffset(V0, R0, Double::value_offset(), kNoPP); |
+ __ TryAllocate(double_class, &fall_through, R0, R1); |
+ __ StoreDFieldToOffset(V0, R0, Double::value_offset()); |
__ ret(); |
__ Bind(&fall_through); |
} |
@@ -1520,10 +1520,10 @@ void Intrinsifier::DoubleFromInteger(Assembler* assembler) { |
void Intrinsifier::Double_getIsNaN(Assembler* assembler) { |
Label is_true; |
__ ldr(R0, Address(SP, 0 * kWordSize)); |
- __ LoadDFieldFromOffset(V0, R0, Double::value_offset(), kNoPP); |
+ __ LoadDFieldFromOffset(V0, R0, Double::value_offset()); |
__ fcmpd(V0, V0); |
- __ LoadObject(TMP, Bool::False(), PP); |
- __ LoadObject(R0, Bool::True(), PP); |
+ __ LoadObject(TMP, Bool::False()); |
+ __ LoadObject(R0, Bool::True()); |
__ csel(R0, TMP, R0, VC); |
__ ret(); |
} |
@@ -1535,10 +1535,10 @@ void Intrinsifier::Double_getIsNegative(Assembler* assembler) { |
Label is_false, is_true, is_zero; |
__ ldr(R0, Address(SP, 0 * kWordSize)); |
- __ LoadDFieldFromOffset(V0, R0, Double::value_offset(), kNoPP); |
+ __ LoadDFieldFromOffset(V0, R0, Double::value_offset()); |
__ fcmpdz(V0); |
- __ LoadObject(true_reg, Bool::True(), PP); |
- __ LoadObject(false_reg, Bool::False(), PP); |
+ __ LoadObject(true_reg, Bool::True()); |
+ __ LoadObject(false_reg, Bool::False()); |
__ b(&is_false, VS); // NaN -> false. |
__ b(&is_zero, EQ); // Check for negative zero. |
__ b(&is_false, CS); // >= 0 -> false. |
@@ -1563,7 +1563,7 @@ void Intrinsifier::DoubleToInteger(Assembler* assembler) { |
Label fall_through; |
__ ldr(R0, Address(SP, 0 * kWordSize)); |
- __ LoadDFieldFromOffset(V0, R0, Double::value_offset(), kNoPP); |
+ __ LoadDFieldFromOffset(V0, R0, Double::value_offset()); |
// Explicit NaN check, since ARM gives an FPU exception if you try to |
// convert NaN to an int. |
@@ -1573,7 +1573,7 @@ void Intrinsifier::DoubleToInteger(Assembler* assembler) { |
__ fcvtzds(R0, V0); |
// Overflow is signaled with minint. |
// Check for overflow and that it fits into Smi. |
- __ CompareImmediate(R0, 0xC000000000000000, kNoPP); |
+ __ CompareImmediate(R0, 0xC000000000000000); |
__ b(&fall_through, MI); |
__ SmiTag(R0); |
__ ret(); |
@@ -1585,13 +1585,13 @@ void Intrinsifier::MathSqrt(Assembler* assembler) { |
Label fall_through, is_smi, double_op; |
TestLastArgumentIsDouble(assembler, &is_smi, &fall_through); |
// Argument is double and is in R0. |
- __ LoadDFieldFromOffset(V1, R0, Double::value_offset(), kNoPP); |
+ __ LoadDFieldFromOffset(V1, R0, Double::value_offset()); |
__ Bind(&double_op); |
__ fsqrtd(V0, V1); |
const Class& double_class = Class::Handle( |
Isolate::Current()->object_store()->double_class()); |
- __ TryAllocate(double_class, &fall_through, R0, R1, kNoPP); |
- __ StoreDFieldToOffset(V0, R0, Double::value_offset(), kNoPP); |
+ __ TryAllocate(double_class, &fall_through, R0, R1); |
+ __ StoreDFieldToOffset(V0, R0, Double::value_offset()); |
__ ret(); |
__ Bind(&is_smi); |
__ SmiUntag(R0); |
@@ -1627,13 +1627,13 @@ void Intrinsifier::Random_nextState(Assembler* assembler) { |
const int64_t disp = |
Instance::DataOffsetFor(kTypedDataUint32ArrayCid) - kHeapObjectTag; |
- __ LoadImmediate(R0, a_int_value, kNoPP); |
- __ LoadFromOffset(R2, R1, disp, kNoPP); |
+ __ LoadImmediate(R0, a_int_value); |
+ __ LoadFromOffset(R2, R1, disp); |
__ LsrImmediate(R3, R2, 32); |
__ andi(R2, R2, Immediate(0xffffffff)); |
__ mul(R2, R0, R2); |
__ add(R2, R2, Operand(R3)); |
- __ StoreToOffset(R2, R1, disp, kNoPP); |
+ __ StoreToOffset(R2, R1, disp); |
__ ret(); |
} |
@@ -1642,8 +1642,8 @@ void Intrinsifier::ObjectEquals(Assembler* assembler) { |
__ ldr(R0, Address(SP, 0 * kWordSize)); |
__ ldr(R1, Address(SP, 1 * kWordSize)); |
__ cmp(R0, Operand(R1)); |
- __ LoadObject(R0, Bool::False(), PP); |
- __ LoadObject(TMP, Bool::True(), PP); |
+ __ LoadObject(R0, Bool::False()); |
+ __ LoadObject(TMP, Bool::True()); |
__ csel(R0, TMP, R0, EQ); |
__ ret(); |
} |
@@ -1654,18 +1654,18 @@ void Intrinsifier::ObjectRuntimeType(Assembler* assembler) { |
Label fall_through; |
__ ldr(R0, Address(SP, 0 * kWordSize)); |
__ LoadClassIdMayBeSmi(R1, R0); |
- __ LoadClassById(R2, R1, PP); |
+ __ LoadClassById(R2, R1); |
// R2: class of instance (R0). |
__ ldr(R3, FieldAddress(R2, Class::signature_function_offset())); |
- __ CompareObject(R3, Object::null_object(), PP); |
+ __ CompareObject(R3, Object::null_object()); |
__ b(&fall_through, NE); |
__ ldr(R3, FieldAddress(R2, Class::num_type_arguments_offset()), kHalfword); |
- __ CompareImmediate(R3, 0, kNoPP); |
+ __ CompareImmediate(R3, 0); |
__ b(&fall_through, NE); |
__ ldr(R0, FieldAddress(R2, Class::canonical_types_offset())); |
- __ CompareObject(R0, Object::null_object(), PP); |
+ __ CompareObject(R0, Object::null_object()); |
__ b(&fall_through, EQ); |
__ ret(); |
@@ -1696,19 +1696,19 @@ void Intrinsifier::StringBaseCodeUnitAt(Assembler* assembler) { |
__ ldr(R2, FieldAddress(R0, String::length_offset())); |
__ cmp(R1, Operand(R2)); |
__ b(&fall_through, CS); // Runtime throws exception. |
- __ CompareClassId(R0, kOneByteStringCid, kNoPP); |
+ __ CompareClassId(R0, kOneByteStringCid); |
__ b(&try_two_byte_string, NE); |
__ SmiUntag(R1); |
- __ AddImmediate(R0, R0, OneByteString::data_offset() - kHeapObjectTag, kNoPP); |
+ __ AddImmediate(R0, R0, OneByteString::data_offset() - kHeapObjectTag); |
__ ldr(R0, Address(R0, R1), kUnsignedByte); |
__ SmiTag(R0); |
__ ret(); |
__ Bind(&try_two_byte_string); |
- __ CompareClassId(R0, kTwoByteStringCid, kNoPP); |
+ __ CompareClassId(R0, kTwoByteStringCid); |
__ b(&fall_through, NE); |
ASSERT(kSmiTagShift == 1); |
- __ AddImmediate(R0, R0, TwoByteString::data_offset() - kHeapObjectTag, kNoPP); |
+ __ AddImmediate(R0, R0, TwoByteString::data_offset() - kHeapObjectTag); |
__ ldr(R0, Address(R0, R1), kUnsignedHalfword); |
__ SmiTag(R0); |
__ ret(); |
@@ -1729,42 +1729,38 @@ void Intrinsifier::StringBaseCharAt(Assembler* assembler) { |
__ cmp(R1, Operand(R2)); |
__ b(&fall_through, CS); // Runtime throws exception. |
- __ CompareClassId(R0, kOneByteStringCid, kNoPP); |
+ __ CompareClassId(R0, kOneByteStringCid); |
__ b(&try_two_byte_string, NE); |
__ SmiUntag(R1); |
- __ AddImmediate(R0, R0, OneByteString::data_offset() - kHeapObjectTag, kNoPP); |
+ __ AddImmediate(R0, R0, OneByteString::data_offset() - kHeapObjectTag); |
__ ldr(R1, Address(R0, R1), kUnsignedByte); |
- __ CompareImmediate(R1, Symbols::kNumberOfOneCharCodeSymbols, kNoPP); |
+ __ CompareImmediate(R1, Symbols::kNumberOfOneCharCodeSymbols); |
__ b(&fall_through, GE); |
const ExternalLabel symbols_label( |
reinterpret_cast<uword>(Symbols::PredefinedAddress())); |
__ TagAndPushPP(); |
- __ LoadPoolPointer(PP); |
- assembler->set_constant_pool_allowed(true); |
- __ LoadExternalLabel(R0, &symbols_label, kNotPatchable, PP); |
- assembler->set_constant_pool_allowed(false); |
+ __ LoadPoolPointer(); |
+ __ LoadExternalLabel(R0, &symbols_label); |
__ PopAndUntagPP(); |
__ AddImmediate( |
- R0, R0, Symbols::kNullCharCodeSymbolOffset * kWordSize, kNoPP); |
+ R0, R0, Symbols::kNullCharCodeSymbolOffset * kWordSize); |
__ ldr(R0, Address(R0, R1, UXTX, Address::Scaled)); |
__ ret(); |
__ Bind(&try_two_byte_string); |
- __ CompareClassId(R0, kTwoByteStringCid, kNoPP); |
+ __ CompareClassId(R0, kTwoByteStringCid); |
__ b(&fall_through, NE); |
ASSERT(kSmiTagShift == 1); |
- __ AddImmediate(R0, R0, TwoByteString::data_offset() - kHeapObjectTag, kNoPP); |
+ __ AddImmediate(R0, R0, TwoByteString::data_offset() - kHeapObjectTag); |
__ ldr(R1, Address(R0, R1), kUnsignedHalfword); |
- __ CompareImmediate(R1, Symbols::kNumberOfOneCharCodeSymbols, kNoPP); |
+ __ CompareImmediate(R1, Symbols::kNumberOfOneCharCodeSymbols); |
__ b(&fall_through, GE); |
__ TagAndPushPP(); |
- __ LoadPoolPointer(PP); |
- assembler->set_constant_pool_allowed(true); |
- __ LoadExternalLabel(R0, &symbols_label, kNotPatchable, PP); |
- assembler->set_constant_pool_allowed(false); |
+ __ LoadPoolPointer(); |
+ __ LoadExternalLabel(R0, &symbols_label); |
__ PopAndUntagPP(); |
__ AddImmediate( |
- R0, R0, Symbols::kNullCharCodeSymbolOffset * kWordSize, kNoPP); |
+ R0, R0, Symbols::kNullCharCodeSymbolOffset * kWordSize); |
__ ldr(R0, Address(R0, R1, UXTX, Address::Scaled)); |
__ ret(); |
@@ -1776,8 +1772,8 @@ void Intrinsifier::StringBaseIsEmpty(Assembler* assembler) { |
__ ldr(R0, Address(SP, 0 * kWordSize)); |
__ ldr(R0, FieldAddress(R0, String::length_offset())); |
__ cmp(R0, Operand(Smi::RawValue(0))); |
- __ LoadObject(R0, Bool::True(), PP); |
- __ LoadObject(TMP, Bool::False(), PP); |
+ __ LoadObject(R0, Bool::True()); |
+ __ LoadObject(TMP, Bool::False()); |
__ csel(R0, TMP, R0, NE); |
__ ret(); |
} |
@@ -1801,7 +1797,7 @@ void Intrinsifier::OneByteString_getHashCode(Assembler* assembler) { |
__ b(&done, EQ); |
__ mov(R3, ZR); |
- __ AddImmediate(R6, R1, OneByteString::data_offset() - kHeapObjectTag, kNoPP); |
+ __ AddImmediate(R6, R1, OneByteString::data_offset() - kHeapObjectTag); |
// R1: Instance of OneByteString. |
// R2: String length, untagged integer. |
// R3: Loop counter, untagged integer. |
@@ -1833,7 +1829,7 @@ void Intrinsifier::OneByteString_getHashCode(Assembler* assembler) { |
__ addw(R0, R0, Operand(R0, LSL, 15)); |
// hash_ = hash_ & ((static_cast<intptr_t>(1) << bits) - 1); |
__ AndImmediate( |
- R0, R0, (static_cast<intptr_t>(1) << String::kHashBits) - 1, kNoPP); |
+ R0, R0, (static_cast<intptr_t>(1) << String::kHashBits) - 1); |
__ CompareRegisters(R0, ZR); |
// return hash_ == 0 ? 1 : hash_; |
__ Bind(&done); |
@@ -1853,19 +1849,19 @@ static void TryAllocateOnebyteString(Assembler* assembler, |
Label* failure) { |
const Register length_reg = R2; |
Label fail; |
- __ MaybeTraceAllocation(kOneByteStringCid, R0, kNoPP, failure); |
+ __ MaybeTraceAllocation(kOneByteStringCid, R0, failure); |
__ mov(R6, length_reg); // Save the length register. |
// TODO(koda): Protect against negative length and overflow here. |
__ SmiUntag(length_reg); |
const intptr_t fixed_size = sizeof(RawString) + kObjectAlignment - 1; |
- __ AddImmediate(length_reg, length_reg, fixed_size, kNoPP); |
+ __ AddImmediate(length_reg, length_reg, fixed_size); |
__ andi(length_reg, length_reg, Immediate(~(kObjectAlignment - 1))); |
Isolate* isolate = Isolate::Current(); |
Heap* heap = isolate->heap(); |
const intptr_t cid = kOneByteStringCid; |
Heap::Space space = heap->SpaceForAllocation(cid); |
- __ LoadImmediate(R3, heap->TopAddress(space), kNoPP); |
+ __ LoadImmediate(R3, heap->TopAddress(space)); |
__ ldr(R0, Address(R3)); |
// length_reg: allocation size. |
@@ -1877,7 +1873,7 @@ static void TryAllocateOnebyteString(Assembler* assembler, |
// R1: potential next object start. |
// R2: allocation size. |
// R3: heap->TopAddress(space). |
- __ LoadImmediate(R7, heap->EndAddress(space), kNoPP); |
+ __ LoadImmediate(R7, heap->EndAddress(space)); |
__ ldr(R7, Address(R7)); |
__ cmp(R1, Operand(R7)); |
__ b(&fail, CS); |
@@ -1885,8 +1881,8 @@ static void TryAllocateOnebyteString(Assembler* assembler, |
// Successfully allocated the object(s), now update top to point to |
// next object start and initialize the object. |
__ str(R1, Address(R3)); |
- __ AddImmediate(R0, R0, kHeapObjectTag, kNoPP); |
- __ UpdateAllocationStatsWithSize(cid, R2, kNoPP, space); |
+ __ AddImmediate(R0, R0, kHeapObjectTag); |
+ __ UpdateAllocationStatsWithSize(cid, R2, space); |
// Initialize the tags. |
// R0: new object start as a tagged pointer. |
@@ -1895,13 +1891,13 @@ static void TryAllocateOnebyteString(Assembler* assembler, |
{ |
const intptr_t shift = RawObject::kSizeTagPos - kObjectAlignmentLog2; |
- __ CompareImmediate(R2, RawObject::SizeTag::kMaxSizeTag, kNoPP); |
+ __ CompareImmediate(R2, RawObject::SizeTag::kMaxSizeTag); |
__ LslImmediate(R2, R2, shift); |
__ csel(R2, R2, ZR, LS); |
// Get the class index and insert it into the tags. |
// R2: size and bit tags. |
- __ LoadImmediate(TMP, RawObject::ClassIdTag::encode(cid), kNoPP); |
+ __ LoadImmediate(TMP, RawObject::ClassIdTag::encode(cid)); |
__ orr(R2, R2, Operand(TMP)); |
__ str(R2, FieldAddress(R0, String::tags_offset())); // Store tags. |
} |
@@ -1946,7 +1942,7 @@ void Intrinsifier::OneByteString_substringUnchecked(Assembler* assembler) { |
__ SmiUntag(R1); |
__ add(R3, R3, Operand(R1)); |
// Calculate start address and untag (- 1). |
- __ AddImmediate(R3, R3, OneByteString::data_offset() - 1, kNoPP); |
+ __ AddImmediate(R3, R3, OneByteString::data_offset() - 1); |
// R3: Start address to copy from (untagged). |
// R1: Untagged start index. |
@@ -1967,11 +1963,11 @@ void Intrinsifier::OneByteString_substringUnchecked(Assembler* assembler) { |
__ mov(R7, R0); |
__ Bind(&loop); |
__ ldr(R1, Address(R6), kUnsignedByte); |
- __ AddImmediate(R6, R6, 1, kNoPP); |
+ __ AddImmediate(R6, R6, 1); |
__ sub(R2, R2, Operand(1)); |
__ cmp(R2, Operand(0)); |
__ str(R1, FieldAddress(R7, OneByteString::data_offset()), kUnsignedByte); |
- __ AddImmediate(R7, R7, 1, kNoPP); |
+ __ AddImmediate(R7, R7, 1); |
__ b(&loop, GT); |
__ Bind(&done); |
@@ -1986,7 +1982,7 @@ void Intrinsifier::OneByteStringSetAt(Assembler* assembler) { |
__ ldr(R0, Address(SP, 2 * kWordSize)); // OneByteString. |
__ SmiUntag(R1); |
__ SmiUntag(R2); |
- __ AddImmediate(R3, R0, OneByteString::data_offset() - kHeapObjectTag, kNoPP); |
+ __ AddImmediate(R3, R0, OneByteString::data_offset() - kHeapObjectTag); |
__ str(R2, Address(R3, R1), kUnsignedByte); |
__ ret(); |
} |
@@ -2018,7 +2014,7 @@ static void StringEquality(Assembler* assembler, intptr_t string_cid) { |
// Is other OneByteString? |
__ tsti(R1, Immediate(kSmiTagMask)); |
__ b(&fall_through, EQ); |
- __ CompareClassId(R1, string_cid, kNoPP); |
+ __ CompareClassId(R1, string_cid); |
__ b(&fall_through, NE); |
// Have same length? |
@@ -2033,23 +2029,23 @@ static void StringEquality(Assembler* assembler, intptr_t string_cid) { |
(string_cid == kTwoByteStringCid)); |
const intptr_t offset = (string_cid == kOneByteStringCid) ? |
OneByteString::data_offset() : TwoByteString::data_offset(); |
- __ AddImmediate(R0, R0, offset - kHeapObjectTag, kNoPP); |
- __ AddImmediate(R1, R1, offset - kHeapObjectTag, kNoPP); |
+ __ AddImmediate(R0, R0, offset - kHeapObjectTag); |
+ __ AddImmediate(R1, R1, offset - kHeapObjectTag); |
__ SmiUntag(R2); |
__ Bind(&loop); |
- __ AddImmediate(R2, R2, -1, kNoPP); |
+ __ AddImmediate(R2, R2, -1); |
__ CompareRegisters(R2, ZR); |
__ b(&is_true, LT); |
if (string_cid == kOneByteStringCid) { |
__ ldr(R3, Address(R0), kUnsignedByte); |
__ ldr(R4, Address(R1), kUnsignedByte); |
- __ AddImmediate(R0, R0, 1, kNoPP); |
- __ AddImmediate(R1, R1, 1, kNoPP); |
+ __ AddImmediate(R0, R0, 1); |
+ __ AddImmediate(R1, R1, 1); |
} else if (string_cid == kTwoByteStringCid) { |
__ ldr(R3, Address(R0), kUnsignedHalfword); |
__ ldr(R4, Address(R1), kUnsignedHalfword); |
- __ AddImmediate(R0, R0, 2, kNoPP); |
- __ AddImmediate(R1, R1, 2, kNoPP); |
+ __ AddImmediate(R0, R0, 2); |
+ __ AddImmediate(R1, R1, 2); |
} else { |
UNIMPLEMENTED(); |
} |
@@ -2058,11 +2054,11 @@ static void StringEquality(Assembler* assembler, intptr_t string_cid) { |
__ b(&loop); |
__ Bind(&is_true); |
- __ LoadObject(R0, Bool::True(), PP); |
+ __ LoadObject(R0, Bool::True()); |
__ ret(); |
__ Bind(&is_false); |
- __ LoadObject(R0, Bool::False(), PP); |
+ __ LoadObject(R0, Bool::False()); |
__ ret(); |
__ Bind(&fall_through); |
@@ -2095,20 +2091,20 @@ void Intrinsifier::JSRegExp_ExecuteMatch(Assembler* assembler) { |
// string CIDs as well as stored function pointers are in sequence. |
__ ldr(R2, Address(SP, kRegExpParamOffset)); |
__ ldr(R1, Address(SP, kStringParamOffset)); |
- __ LoadClassId(R1, R1, kNoPP); |
- __ AddImmediate(R1, R1, -kOneByteStringCid, kNoPP); |
+ __ LoadClassId(R1, R1); |
+ __ AddImmediate(R1, R1, -kOneByteStringCid); |
__ add(R1, R2, Operand(R1, LSL, kWordSizeLog2)); |
__ ldr(R0, FieldAddress(R1, JSRegExp::function_offset(kOneByteStringCid))); |
// Registers are now set up for the lazy compile stub. It expects the function |
// in R0, the argument descriptor in R4, and IC-Data in R5. |
static const intptr_t arg_count = RegExpMacroAssembler::kParamCount; |
- __ LoadObject(R4, Array::Handle(ArgumentsDescriptor::New(arg_count)), kNoPP); |
+ __ LoadObject(R4, Array::Handle(ArgumentsDescriptor::New(arg_count))); |
__ eor(R5, R5, Operand(R5)); |
// Tail-call the function. |
__ ldr(R1, FieldAddress(R0, Function::instructions_offset())); |
- __ AddImmediate(R1, R1, Instructions::HeaderSize() - kHeapObjectTag, kNoPP); |
+ __ AddImmediate(R1, R1, Instructions::HeaderSize() - kHeapObjectTag); |
__ br(R1); |
} |