| Index: runtime/vm/intrinsifier_arm.cc
|
| diff --git a/runtime/vm/intrinsifier_arm.cc b/runtime/vm/intrinsifier_arm.cc
|
| index 3be856404c594e4e6ec4d165d63dc5bb616bb32e..949cc7796af638d6be84dd2f1da2a055e57d17ab 100644
|
| --- a/runtime/vm/intrinsifier_arm.cc
|
| +++ b/runtime/vm/intrinsifier_arm.cc
|
| @@ -30,7 +30,9 @@ namespace dart {
|
| #define __ assembler->
|
|
|
|
|
| -intptr_t Intrinsifier::ParameterSlotFromSp() { return -1; }
|
| +intptr_t Intrinsifier::ParameterSlotFromSp() {
|
| + return -1;
|
| +}
|
|
|
|
|
| static bool IsABIPreservedRegister(Register reg) {
|
| @@ -79,7 +81,7 @@ void Intrinsifier::ObjectArraySetIndexed(Assembler* assembler) {
|
| // Note that R1 is Smi, i.e, times 2.
|
| ASSERT(kSmiTagShift == 1);
|
| __ ldr(R2, Address(SP, 0 * kWordSize)); // Value.
|
| - __ add(R1, R0, Operand(R1, LSL, 1)); // R1 is Smi.
|
| + __ 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();
|
| @@ -104,24 +106,18 @@ void Intrinsifier::GrowableArray_Allocate(Assembler* assembler) {
|
| __ ldr(R1, Address(SP, kArrayOffset)); // Data argument.
|
| // R0 is new, no barrier needed.
|
| __ StoreIntoObjectNoBarrier(
|
| - R0,
|
| - FieldAddress(R0, GrowableObjectArray::data_offset()),
|
| - R1);
|
| + R0, FieldAddress(R0, GrowableObjectArray::data_offset()), R1);
|
|
|
| // R0: new growable array object start as a tagged pointer.
|
| // Store the type argument field in the growable array object.
|
| __ ldr(R1, Address(SP, kTypeArgumentsOffset)); // Type argument.
|
| __ StoreIntoObjectNoBarrier(
|
| - R0,
|
| - FieldAddress(R0, GrowableObjectArray::type_arguments_offset()),
|
| - R1);
|
| + R0, FieldAddress(R0, GrowableObjectArray::type_arguments_offset()), R1);
|
|
|
| // Set the length field in the growable array object to 0.
|
| __ LoadImmediate(R1, 0);
|
| __ StoreIntoObjectNoBarrier(
|
| - R0,
|
| - FieldAddress(R0, GrowableObjectArray::length_offset()),
|
| - R1);
|
| + R0, FieldAddress(R0, GrowableObjectArray::length_offset()), R1);
|
| __ Ret(); // Returns the newly allocated object in R0.
|
|
|
| __ Bind(&fall_through);
|
| @@ -167,7 +163,7 @@ void Intrinsifier::GrowableArray_add(Assembler* assembler) {
|
| Label fall_through; \
|
| const intptr_t kArrayLengthStackOffset = 0 * kWordSize; \
|
| NOT_IN_PRODUCT(__ MaybeTraceAllocation(cid, R2, &fall_through)); \
|
| - __ ldr(R2, Address(SP, kArrayLengthStackOffset)); /* Array length. */ \
|
| + __ ldr(R2, Address(SP, kArrayLengthStackOffset)); /* Array length. */ \
|
| /* Check that length is a positive Smi. */ \
|
| /* R2: requested array length argument. */ \
|
| __ tst(R2, Operand(kSmiTagMask)); \
|
| @@ -189,7 +185,7 @@ void Intrinsifier::GrowableArray_add(Assembler* assembler) {
|
| \
|
| /* R2: allocation size. */ \
|
| __ adds(R1, R0, Operand(R2)); \
|
| - __ b(&fall_through, CS); /* Fail on unsigned overflow. */ \
|
| + __ b(&fall_through, CS); /* Fail on unsigned overflow. */ \
|
| \
|
| /* Check if the allocation fits into the remaining space. */ \
|
| /* R0: potential new object start. */ \
|
| @@ -212,24 +208,24 @@ void Intrinsifier::GrowableArray_add(Assembler* assembler) {
|
| /* R4: allocation stats address */ \
|
| { \
|
| __ CompareImmediate(R2, RawObject::SizeTag::kMaxSizeTag); \
|
| - __ mov(R3, Operand(R2, LSL, \
|
| - RawObject::kSizeTagPos - kObjectAlignmentLog2), LS); \
|
| + __ mov(R3, \
|
| + Operand(R2, LSL, RawObject::kSizeTagPos - kObjectAlignmentLog2), \
|
| + LS); \
|
| __ mov(R3, Operand(0), HI); \
|
| \
|
| /* Get the class index and insert it into the tags. */ \
|
| __ LoadImmediate(TMP, RawObject::ClassIdTag::encode(cid)); \
|
| __ orr(R3, R3, Operand(TMP)); \
|
| - __ str(R3, FieldAddress(R0, type_name::tags_offset())); /* Tags. */ \
|
| + __ str(R3, FieldAddress(R0, type_name::tags_offset())); /* Tags. */ \
|
| } \
|
| /* Set the length field. */ \
|
| /* R0: new object start as a tagged pointer. */ \
|
| /* R1: new object end address. */ \
|
| /* R2: allocation size. */ \
|
| /* R4: allocation stats address. */ \
|
| - __ ldr(R3, Address(SP, kArrayLengthStackOffset)); /* Array length. */ \
|
| - __ StoreIntoObjectNoBarrier(R0, \
|
| - FieldAddress(R0, type_name::length_offset()), \
|
| - R3); \
|
| + __ ldr(R3, Address(SP, kArrayLengthStackOffset)); /* Array length. */ \
|
| + __ StoreIntoObjectNoBarrier( \
|
| + R0, FieldAddress(R0, type_name::length_offset()), R3); \
|
| /* Initialize all array elements to 0. */ \
|
| /* R0: new object start as a tagged pointer. */ \
|
| /* R1: new object end address. */ \
|
| @@ -251,16 +247,21 @@ void Intrinsifier::GrowableArray_add(Assembler* assembler) {
|
| \
|
| NOT_IN_PRODUCT(__ IncrementAllocationStatsWithSize(R4, R2, space)); \
|
| __ Ret(); \
|
| - __ Bind(&fall_through); \
|
| + __ Bind(&fall_through);
|
|
|
|
|
| static int GetScaleFactor(intptr_t size) {
|
| switch (size) {
|
| - case 1: return 0;
|
| - case 2: return 1;
|
| - case 4: return 2;
|
| - case 8: return 3;
|
| - case 16: return 4;
|
| + case 1:
|
| + return 0;
|
| + case 2:
|
| + return 1;
|
| + case 4:
|
| + return 2;
|
| + case 8:
|
| + return 3;
|
| + case 16:
|
| + return 4;
|
| }
|
| UNREACHABLE();
|
| return -1;
|
| @@ -268,12 +269,12 @@ static int GetScaleFactor(intptr_t size) {
|
|
|
|
|
| #define TYPED_DATA_ALLOCATOR(clazz) \
|
| -void Intrinsifier::TypedData_##clazz##_factory(Assembler* assembler) { \
|
| - intptr_t size = TypedData::ElementSizeInBytes(kTypedData##clazz##Cid); \
|
| - intptr_t max_len = TypedData::MaxElements(kTypedData##clazz##Cid); \
|
| - int shift = GetScaleFactor(size); \
|
| - TYPED_ARRAY_ALLOCATION(TypedData, kTypedData##clazz##Cid, max_len, shift); \
|
| -}
|
| + void Intrinsifier::TypedData_##clazz##_factory(Assembler* assembler) { \
|
| + intptr_t size = TypedData::ElementSizeInBytes(kTypedData##clazz##Cid); \
|
| + intptr_t max_len = TypedData::MaxElements(kTypedData##clazz##Cid); \
|
| + int shift = GetScaleFactor(size); \
|
| + TYPED_ARRAY_ALLOCATION(TypedData, kTypedData##clazz##Cid, max_len, shift); \
|
| + }
|
| CLASS_LIST_TYPED_DATA(TYPED_DATA_ALLOCATOR)
|
| #undef TYPED_DATA_ALLOCATOR
|
|
|
| @@ -281,8 +282,8 @@ CLASS_LIST_TYPED_DATA(TYPED_DATA_ALLOCATOR)
|
| // Loads args from stack into R0 and R1
|
| // Tests if they are smis, jumps to label not_smi if not.
|
| static void TestBothArgumentsSmis(Assembler* assembler, Label* not_smi) {
|
| - __ ldr(R0, Address(SP, + 0 * kWordSize));
|
| - __ ldr(R1, Address(SP, + 1 * kWordSize));
|
| + __ ldr(R0, Address(SP, +0 * kWordSize));
|
| + __ ldr(R1, Address(SP, +1 * kWordSize));
|
| __ orr(TMP, R0, Operand(R1));
|
| __ tst(TMP, Operand(kSmiTagMask));
|
| __ b(not_smi, NE);
|
| @@ -293,8 +294,8 @@ static void TestBothArgumentsSmis(Assembler* assembler, Label* not_smi) {
|
| void Intrinsifier::Integer_addFromInteger(Assembler* assembler) {
|
| Label fall_through;
|
| TestBothArgumentsSmis(assembler, &fall_through); // Checks two smis.
|
| - __ adds(R0, R0, Operand(R1)); // Adds.
|
| - __ bx(LR, VC); // Return if no overflow.
|
| + __ adds(R0, R0, Operand(R1)); // Adds.
|
| + __ bx(LR, VC); // Return if no overflow.
|
| // Otherwise fall through.
|
| __ Bind(&fall_through);
|
| }
|
| @@ -309,7 +310,7 @@ void Intrinsifier::Integer_subFromInteger(Assembler* assembler) {
|
| Label fall_through;
|
| TestBothArgumentsSmis(assembler, &fall_through);
|
| __ subs(R0, R0, Operand(R1)); // Subtract.
|
| - __ bx(LR, VC); // Return if no overflow.
|
| + __ bx(LR, VC); // Return if no overflow.
|
| // Otherwise fall through.
|
| __ Bind(&fall_through);
|
| }
|
| @@ -319,7 +320,7 @@ void Intrinsifier::Integer_sub(Assembler* assembler) {
|
| Label fall_through;
|
| TestBothArgumentsSmis(assembler, &fall_through);
|
| __ subs(R0, R1, Operand(R0)); // Subtract.
|
| - __ bx(LR, VC); // Return if no overflow.
|
| + __ bx(LR, VC); // Return if no overflow.
|
| // Otherwise fall through.
|
| __ Bind(&fall_through);
|
| }
|
| @@ -328,7 +329,7 @@ void Intrinsifier::Integer_sub(Assembler* assembler) {
|
| void Intrinsifier::Integer_mulFromInteger(Assembler* assembler) {
|
| Label fall_through;
|
| TestBothArgumentsSmis(assembler, &fall_through); // checks two smis
|
| - __ SmiUntag(R0); // Untags R0. We only want result shifted by one.
|
| + __ SmiUntag(R0); // Untags R0. We only want result shifted by one.
|
| __ smull(R0, IP, R0, R1); // IP:R0 <- R0 * R1.
|
| __ cmp(IP, Operand(R0, ASR, 31));
|
| __ bx(LR, EQ);
|
| @@ -404,8 +405,8 @@ void Intrinsifier::Integer_moduloFromInteger(Assembler* assembler) {
|
| }
|
| // Check to see if we have integer division
|
| Label fall_through;
|
| - __ ldr(R1, Address(SP, + 0 * kWordSize));
|
| - __ ldr(R0, Address(SP, + 1 * kWordSize));
|
| + __ ldr(R1, Address(SP, +0 * kWordSize));
|
| + __ ldr(R0, Address(SP, +1 * kWordSize));
|
| __ orr(TMP, R0, Operand(R1));
|
| __ tst(TMP, Operand(kSmiTagMask));
|
| __ b(&fall_through, NE);
|
| @@ -452,15 +453,15 @@ void Intrinsifier::Integer_truncDivide(Assembler* assembler) {
|
| // cannot tag the result.
|
| __ CompareImmediate(R0, 0x40000000);
|
| __ SmiTag(R0, NE); // Not equal. Okay to tag and return.
|
| - __ bx(LR, NE); // Return.
|
| + __ bx(LR, NE); // Return.
|
| __ Bind(&fall_through);
|
| }
|
|
|
|
|
| void Intrinsifier::Integer_negate(Assembler* assembler) {
|
| Label fall_through;
|
| - __ ldr(R0, Address(SP, + 0 * kWordSize)); // Grab first argument.
|
| - __ tst(R0, Operand(kSmiTagMask)); // Test for Smi.
|
| + __ ldr(R0, Address(SP, +0 * kWordSize)); // Grab first argument.
|
| + __ tst(R0, Operand(kSmiTagMask)); // Test for Smi.
|
| __ b(&fall_through, NE);
|
| __ rsbs(R0, R0, Operand(0)); // R0 is a Smi. R0 <- 0 - R0.
|
| __ bx(LR, VC); // Return if there wasn't overflow, fall through otherwise.
|
| @@ -547,16 +548,16 @@ void Intrinsifier::Integer_shl(Assembler* assembler) {
|
| // lo bits = R1 << R0
|
| __ LoadImmediate(NOTFP, 1);
|
| __ mov(NOTFP, Operand(NOTFP, LSL, R0)); // NOTFP <- 1 << R0
|
| - __ sub(NOTFP, NOTFP, Operand(1)); // NOTFP <- NOTFP - 1
|
| - __ rsb(R3, R0, Operand(32)); // R3 <- 32 - R0
|
| + __ sub(NOTFP, NOTFP, Operand(1)); // NOTFP <- NOTFP - 1
|
| + __ rsb(R3, R0, Operand(32)); // R3 <- 32 - R0
|
| __ mov(NOTFP, Operand(NOTFP, LSL, R3)); // NOTFP <- NOTFP << R3
|
| - __ and_(NOTFP, R1, Operand(NOTFP)); // NOTFP <- NOTFP & R1
|
| + __ and_(NOTFP, R1, Operand(NOTFP)); // NOTFP <- NOTFP & R1
|
| __ mov(NOTFP, Operand(NOTFP, LSR, R3)); // NOTFP <- NOTFP >> R3
|
| // Now NOTFP has the bits that fall off of R1 on a left shift.
|
| __ mov(R1, Operand(R1, LSL, R0)); // R1 gets the low bits.
|
|
|
| - const Class& mint_class = Class::Handle(
|
| - Isolate::Current()->object_store()->mint_class());
|
| + const Class& mint_class =
|
| + Class::Handle(Isolate::Current()->object_store()->mint_class());
|
| __ TryAllocate(mint_class, &fall_through, R0, R2);
|
|
|
|
|
| @@ -902,7 +903,7 @@ void Intrinsifier::Bigint_absAdd(Assembler* assembler) {
|
|
|
| Label last_carry;
|
| __ teq(R1, Operand(R6)); // Does not affect carry flag.
|
| - __ b(&last_carry, EQ); // If used - a_used == 0.
|
| + __ b(&last_carry, EQ); // If used - a_used == 0.
|
|
|
| Label carry_loop;
|
| __ Bind(&carry_loop);
|
| @@ -962,7 +963,7 @@ void Intrinsifier::Bigint_absSub(Assembler* assembler) {
|
|
|
| Label done;
|
| __ teq(R1, Operand(R6)); // Does not affect carry flag.
|
| - __ b(&done, EQ); // If used - a_used == 0.
|
| + __ b(&done, EQ); // If used - a_used == 0.
|
|
|
| Label carry_loop;
|
| __ Bind(&carry_loop);
|
| @@ -1121,7 +1122,7 @@ void Intrinsifier::Bigint_sqrAdd(Assembler* assembler) {
|
|
|
| // NOTFP = ajp = &a_digits[i]
|
| __ ldr(R1, Address(SP, 1 * kWordSize)); // a_digits
|
| - __ add(R1, R1, Operand(R2, LSL, 2)); // j == 2*i, i is Smi.
|
| + __ add(R1, R1, Operand(R2, LSL, 2)); // j == 2*i, i is Smi.
|
| __ add(NOTFP, R1, Operand(TypedData::data_offset() - kHeapObjectTag));
|
|
|
| // R8:R0 = t = x*x + *ajp
|
| @@ -1164,7 +1165,7 @@ void Intrinsifier::Bigint_sqrAdd(Assembler* assembler) {
|
| __ adc(R2, R2, Operand(0)); // R2:R1:R0 = 2*x*xi.
|
| __ adds(R0, R0, Operand(R8));
|
| __ adcs(R1, R1, Operand(R9));
|
| - __ adc(R2, R2, Operand(0)); // R2:R1:R0 = 2*x*xi + c.
|
| + __ adc(R2, R2, Operand(0)); // R2:R1:R0 = 2*x*xi + c.
|
| __ ldr(R8, Address(NOTFP, 0)); // R8 = aj = *ajp.
|
| __ adds(R0, R0, Operand(R8));
|
| __ adcs(R8, R1, Operand(0));
|
| @@ -1214,8 +1215,8 @@ void Intrinsifier::Montgomery_mulMod(Assembler* assembler) {
|
| __ ldr(R4, Address(SP, 2 * kWordSize)); // args
|
|
|
| // R3 = rho = args[2]
|
| - __ ldr(R3, FieldAddress(R4,
|
| - TypedData::data_offset() + 2*Bigint::kBytesPerDigit));
|
| + __ ldr(R3, FieldAddress(
|
| + R4, TypedData::data_offset() + 2 * Bigint::kBytesPerDigit));
|
|
|
| // R2 = digits[i >> 1]
|
| __ ldrd(R0, R1, SP, 0 * kWordSize); // R0 = i as Smi, R1 = digits
|
| @@ -1226,8 +1227,8 @@ void Intrinsifier::Montgomery_mulMod(Assembler* assembler) {
|
| __ umull(R0, R1, R2, R3);
|
|
|
| // args[4] = t mod DIGIT_BASE = low32(t)
|
| - __ str(R0,
|
| - FieldAddress(R4, TypedData::data_offset() + 4*Bigint::kBytesPerDigit));
|
| + __ str(R0, FieldAddress(
|
| + R4, TypedData::data_offset() + 4 * Bigint::kBytesPerDigit));
|
|
|
| __ mov(R0, Operand(Smi::RawValue(1))); // One digit processed.
|
| __ Ret();
|
| @@ -1321,14 +1322,23 @@ static void DoubleArithmeticOperations(Assembler* assembler, Token::Kind kind) {
|
| __ ldr(R0, Address(SP, 1 * kWordSize)); // Left argument.
|
| __ LoadDFromOffset(D0, R0, Double::value_offset() - kHeapObjectTag);
|
| switch (kind) {
|
| - case Token::kADD: __ vaddd(D0, D0, D1); break;
|
| - case Token::kSUB: __ vsubd(D0, D0, D1); break;
|
| - case Token::kMUL: __ vmuld(D0, D0, D1); break;
|
| - case Token::kDIV: __ vdivd(D0, D0, D1); break;
|
| - default: UNREACHABLE();
|
| + case Token::kADD:
|
| + __ vaddd(D0, D0, D1);
|
| + break;
|
| + case Token::kSUB:
|
| + __ vsubd(D0, D0, D1);
|
| + break;
|
| + case Token::kMUL:
|
| + __ vmuld(D0, D0, D1);
|
| + break;
|
| + case Token::kDIV:
|
| + __ vdivd(D0, D0, D1);
|
| + break;
|
| + default:
|
| + UNREACHABLE();
|
| }
|
| - const Class& double_class = Class::Handle(
|
| - Isolate::Current()->object_store()->double_class());
|
| + const Class& double_class =
|
| + Class::Handle(Isolate::Current()->object_store()->double_class());
|
| __ TryAllocate(double_class, &fall_through, R0, R1); // Result register.
|
| __ StoreDToOffset(D0, R0, Double::value_offset() - kHeapObjectTag);
|
| __ Ret();
|
| @@ -1377,8 +1387,8 @@ void Intrinsifier::Double_mulFromInteger(Assembler* assembler) {
|
| __ ldr(R0, Address(SP, 1 * kWordSize));
|
| __ LoadDFromOffset(D0, R0, Double::value_offset() - kHeapObjectTag);
|
| __ vmuld(D0, D0, D1);
|
| - const Class& double_class = Class::Handle(
|
| - Isolate::Current()->object_store()->double_class());
|
| + const Class& double_class =
|
| + Class::Handle(Isolate::Current()->object_store()->double_class());
|
| __ TryAllocate(double_class, &fall_through, R0, R1); // Result register.
|
| __ StoreDToOffset(D0, R0, Double::value_offset() - kHeapObjectTag);
|
| __ Ret();
|
| @@ -1398,8 +1408,8 @@ void Intrinsifier::DoubleFromInteger(Assembler* assembler) {
|
| __ SmiUntag(R0);
|
| __ vmovsr(S0, R0);
|
| __ vcvtdi(D0, S0);
|
| - const Class& double_class = Class::Handle(
|
| - Isolate::Current()->object_store()->double_class());
|
| + const Class& double_class =
|
| + Class::Handle(Isolate::Current()->object_store()->double_class());
|
| __ TryAllocate(double_class, &fall_through, R0, R1); // Result register.
|
| __ StoreDToOffset(D0, R0, Double::value_offset() - kHeapObjectTag);
|
| __ Ret();
|
| @@ -1455,7 +1465,7 @@ void Intrinsifier::Double_getIsNegative(Assembler* assembler) {
|
| __ vcmpdz(D0);
|
| __ vmstat();
|
| __ b(&is_false, VS); // NaN -> false.
|
| - __ b(&is_zero, EQ); // Check for negative zero.
|
| + __ b(&is_zero, EQ); // Check for negative zero.
|
| __ b(&is_false, CS); // >= 0 -> false.
|
|
|
| __ Bind(&is_true);
|
| @@ -1510,8 +1520,8 @@ void Intrinsifier::MathSqrt(Assembler* assembler) {
|
| __ LoadDFromOffset(D1, R0, Double::value_offset() - kHeapObjectTag);
|
| __ Bind(&double_op);
|
| __ vsqrtd(D0, D1);
|
| - const Class& double_class = Class::Handle(
|
| - Isolate::Current()->object_store()->double_class());
|
| + const Class& double_class =
|
| + Class::Handle(Isolate::Current()->object_store()->double_class());
|
| __ TryAllocate(double_class, &fall_through, R0, R1); // Result register.
|
| __ StoreDToOffset(D0, R0, Double::value_offset() - kHeapObjectTag);
|
| __ Ret();
|
| @@ -1531,8 +1541,8 @@ void Intrinsifier::MathSqrt(Assembler* assembler) {
|
| void Intrinsifier::Random_nextState(Assembler* assembler) {
|
| const Library& math_lib = Library::Handle(Library::MathLibrary());
|
| ASSERT(!math_lib.IsNull());
|
| - const Class& random_class = Class::Handle(
|
| - math_lib.LookupClassAllowPrivate(Symbols::_Random()));
|
| + const Class& random_class =
|
| + Class::Handle(math_lib.LookupClassAllowPrivate(Symbols::_Random()));
|
| ASSERT(!random_class.IsNull());
|
| const Field& state_field = Field::ZoneHandle(
|
| random_class.LookupInstanceFieldAllowPrivate(Symbols::_state()));
|
| @@ -1554,8 +1564,8 @@ void Intrinsifier::Random_nextState(Assembler* assembler) {
|
| // Addresses of _state[0] and _state[1].
|
|
|
| const int64_t disp_0 = Instance::DataOffsetFor(kTypedDataUint32ArrayCid);
|
| - const int64_t disp_1 = disp_0 +
|
| - Instance::ElementSizeFor(kTypedDataUint32ArrayCid);
|
| + const int64_t disp_1 =
|
| + disp_0 + Instance::ElementSizeFor(kTypedDataUint32ArrayCid);
|
|
|
| __ LoadImmediate(R0, a_int32_value);
|
| __ LoadFromOffset(kWord, R2, R1, disp_0 - kHeapObjectTag);
|
| @@ -1613,16 +1623,11 @@ static void JumpIfNotInteger(Assembler* assembler,
|
|
|
|
|
| static void JumpIfString(Assembler* assembler,
|
| - Register cid,
|
| - Register tmp,
|
| - Label* target) {
|
| - RangeCheck(assembler,
|
| - cid,
|
| - tmp,
|
| - kOneByteStringCid,
|
| - kExternalTwoByteStringCid,
|
| - kIfInRange,
|
| - target);
|
| + Register cid,
|
| + Register tmp,
|
| + Label* target) {
|
| + RangeCheck(assembler, cid, tmp, kOneByteStringCid, kExternalTwoByteStringCid,
|
| + kIfInRange, target);
|
| }
|
|
|
|
|
| @@ -1630,13 +1635,8 @@ static void JumpIfNotString(Assembler* assembler,
|
| Register cid,
|
| Register tmp,
|
| Label* target) {
|
| - RangeCheck(assembler,
|
| - cid,
|
| - tmp,
|
| - kOneByteStringCid,
|
| - kExternalTwoByteStringCid,
|
| - kIfNotInRange,
|
| - target);
|
| + RangeCheck(assembler, cid, tmp, kOneByteStringCid, kExternalTwoByteStringCid,
|
| + kIfNotInRange, target);
|
| }
|
|
|
|
|
| @@ -1800,9 +1800,9 @@ void GenerateSubstringMatchesSpecialization(Assembler* assembler,
|
| __ Bind(&loop);
|
|
|
| if (receiver_cid == kOneByteStringCid) {
|
| - __ ldrb(R4, Address(R0, 0)); // this.codeUnitAt(i + start)
|
| + __ ldrb(R4, Address(R0, 0)); // this.codeUnitAt(i + start)
|
| } else {
|
| - __ ldrh(R4, Address(R0, 0)); // this.codeUnitAt(i + start)
|
| + __ ldrh(R4, Address(R0, 0)); // this.codeUnitAt(i + start)
|
| }
|
| if (other_cid == kOneByteStringCid) {
|
| __ ldrb(NOTFP, Address(R2, 0)); // other.codeUnitAt(i)
|
| @@ -1831,7 +1831,7 @@ void Intrinsifier::StringBaseSubstringMatches(Assembler* assembler) {
|
| __ ldr(R0, Address(SP, 2 * kWordSize)); // this
|
| __ ldr(R1, Address(SP, 1 * kWordSize)); // start
|
| __ ldr(R2, Address(SP, 0 * kWordSize)); // other
|
| - __ Push(R4); // Make ARGS_DESC_REG available.
|
| + __ Push(R4); // Make ARGS_DESC_REG available.
|
|
|
| __ tst(R1, Operand(kSmiTagMask));
|
| __ b(&fall_through, NE); // 'start' is not a Smi.
|
| @@ -1842,20 +1842,16 @@ void Intrinsifier::StringBaseSubstringMatches(Assembler* assembler) {
|
| __ CompareClassId(R0, kOneByteStringCid, R3);
|
| __ b(&try_two_byte, NE);
|
|
|
| - GenerateSubstringMatchesSpecialization(assembler,
|
| - kOneByteStringCid,
|
| - kOneByteStringCid,
|
| - &return_true,
|
| + GenerateSubstringMatchesSpecialization(assembler, kOneByteStringCid,
|
| + kOneByteStringCid, &return_true,
|
| &return_false);
|
|
|
| __ Bind(&try_two_byte);
|
| __ CompareClassId(R0, kTwoByteStringCid, R3);
|
| __ b(&fall_through, NE);
|
|
|
| - GenerateSubstringMatchesSpecialization(assembler,
|
| - kTwoByteStringCid,
|
| - kOneByteStringCid,
|
| - &return_true,
|
| + GenerateSubstringMatchesSpecialization(assembler, kTwoByteStringCid,
|
| + kOneByteStringCid, &return_true,
|
| &return_false);
|
|
|
| __ Bind(&return_true);
|
| @@ -2044,14 +2040,11 @@ static void TryAllocateOnebyteString(Assembler* assembler,
|
| }
|
|
|
| // Set the length field using the saved length (R8).
|
| - __ StoreIntoObjectNoBarrier(R0,
|
| - FieldAddress(R0, String::length_offset()),
|
| + __ StoreIntoObjectNoBarrier(R0, FieldAddress(R0, String::length_offset()),
|
| R8);
|
| // Clear hash.
|
| __ LoadImmediate(TMP, 0);
|
| - __ StoreIntoObjectNoBarrier(R0,
|
| - FieldAddress(R0, String::hash_offset()),
|
| - TMP);
|
| + __ StoreIntoObjectNoBarrier(R0, FieldAddress(R0, String::hash_offset()), TMP);
|
|
|
| NOT_IN_PRODUCT(__ IncrementAllocationStatsWithSize(R4, R2, space));
|
| __ b(ok);
|
| @@ -2073,7 +2066,7 @@ void Intrinsifier::OneByteString_substringUnchecked(Assembler* assembler) {
|
|
|
| __ ldr(R2, Address(SP, kEndIndexOffset));
|
| __ ldr(TMP, Address(SP, kStartIndexOffset));
|
| - __ orr(R3, R2, Operand(TMP));
|
| + __ orr(R3, R2, Operand(TMP));
|
| __ tst(R3, Operand(kSmiTagMask));
|
| __ b(&fall_through, NE); // 'start', 'end' not Smi.
|
|
|
| @@ -2171,8 +2164,9 @@ static void StringEquality(Assembler* assembler, intptr_t string_cid) {
|
| // TODO(zra): try out other sequences.
|
| ASSERT((string_cid == kOneByteStringCid) ||
|
| (string_cid == kTwoByteStringCid));
|
| - const intptr_t offset = (string_cid == kOneByteStringCid) ?
|
| - OneByteString::data_offset() : TwoByteString::data_offset();
|
| + const intptr_t offset = (string_cid == kOneByteStringCid)
|
| + ? OneByteString::data_offset()
|
| + : TwoByteString::data_offset();
|
| __ AddImmediate(R0, offset - kHeapObjectTag);
|
| __ AddImmediate(R1, offset - kHeapObjectTag);
|
| __ SmiUntag(R2);
|
| @@ -2258,7 +2252,7 @@ void Intrinsifier::UserTag_makeCurrent(Assembler* assembler) {
|
| // R0: Current user tag.
|
| __ ldr(R0, Address(R1, Isolate::current_tag_offset()));
|
| // R2: UserTag.
|
| - __ ldr(R2, Address(SP, + 0 * kWordSize));
|
| + __ ldr(R2, Address(SP, +0 * kWordSize));
|
| // Set Isolate::current_tag_.
|
| __ str(R2, Address(R1, Isolate::current_tag_offset()));
|
| // R2: UserTag's tag.
|
|
|