Index: runtime/vm/intrinsifier_arm.cc |
diff --git a/runtime/vm/intrinsifier_arm.cc b/runtime/vm/intrinsifier_arm.cc |
index 905dfcacb5c2088883eaa1c839c8bb60e992b0a6..b053d0f4ae5cf36330d2c8ca8906f4c7a878ab09 100644 |
--- a/runtime/vm/intrinsifier_arm.cc |
+++ b/runtime/vm/intrinsifier_arm.cc |
@@ -29,17 +29,14 @@ namespace dart { |
#define __ assembler-> |
- |
intptr_t Intrinsifier::ParameterSlotFromSp() { |
return -1; |
} |
- |
static bool IsABIPreservedRegister(Register reg) { |
return ((1 << reg) & kAbiPreservedCpuRegs) != 0; |
} |
- |
void Intrinsifier::IntrinsicCallPrologue(Assembler* assembler) { |
ASSERT(IsABIPreservedRegister(CODE_REG)); |
ASSERT(IsABIPreservedRegister(ARGS_DESC_REG)); |
@@ -50,14 +47,12 @@ void Intrinsifier::IntrinsicCallPrologue(Assembler* assembler) { |
assembler->mov(CALLEE_SAVED_TEMP, Operand(LR)); |
} |
- |
void Intrinsifier::IntrinsicCallEpilogue(Assembler* assembler) { |
// Restore LR. |
assembler->Comment("IntrinsicCallEpilogue"); |
assembler->mov(LR, Operand(CALLEE_SAVED_TEMP)); |
} |
- |
// Intrinsify only for Smi value and index. Non-smi values need a store buffer |
// update. Array length is always a Smi. |
void Intrinsifier::ObjectArraySetIndexed(Assembler* assembler) { |
@@ -88,7 +83,6 @@ void Intrinsifier::ObjectArraySetIndexed(Assembler* assembler) { |
__ Bind(&fall_through); |
} |
- |
// Allocate a GrowableObjectArray using the backing array specified. |
// On stack: type argument (+1), data (+0). |
void Intrinsifier::GrowableArray_Allocate(Assembler* assembler) { |
@@ -123,7 +117,6 @@ void Intrinsifier::GrowableArray_Allocate(Assembler* assembler) { |
__ Bind(&fall_through); |
} |
- |
// Add an element to growable array if it doesn't need to grow, otherwise |
// call into regular code. |
// On stack: growable array (+1), value (+0). |
@@ -158,7 +151,6 @@ void Intrinsifier::GrowableArray_add(Assembler* assembler) { |
__ Bind(&fall_through); |
} |
- |
#define TYPED_ARRAY_ALLOCATION(type_name, cid, max_len, scale_shift) \ |
Label fall_through; \ |
const intptr_t kArrayLengthStackOffset = 0 * kWordSize; \ |
@@ -250,7 +242,6 @@ void Intrinsifier::GrowableArray_add(Assembler* assembler) { |
__ Ret(); \ |
__ Bind(&fall_through); |
- |
static int GetScaleFactor(intptr_t size) { |
switch (size) { |
case 1: |
@@ -268,7 +259,6 @@ static int GetScaleFactor(intptr_t size) { |
return -1; |
} |
- |
#define TYPED_DATA_ALLOCATOR(clazz) \ |
void Intrinsifier::TypedData_##clazz##_factory(Assembler* assembler) { \ |
intptr_t size = TypedData::ElementSizeInBytes(kTypedData##clazz##Cid); \ |
@@ -279,7 +269,6 @@ static int GetScaleFactor(intptr_t size) { |
CLASS_LIST_TYPED_DATA(TYPED_DATA_ALLOCATOR) |
#undef 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) { |
@@ -291,7 +280,6 @@ static void TestBothArgumentsSmis(Assembler* assembler, Label* not_smi) { |
return; |
} |
- |
void Intrinsifier::Integer_addFromInteger(Assembler* assembler) { |
Label fall_through; |
TestBothArgumentsSmis(assembler, &fall_through); // Checks two smis. |
@@ -301,12 +289,10 @@ void Intrinsifier::Integer_addFromInteger(Assembler* assembler) { |
__ Bind(&fall_through); |
} |
- |
void Intrinsifier::Integer_add(Assembler* assembler) { |
Integer_addFromInteger(assembler); |
} |
- |
void Intrinsifier::Integer_subFromInteger(Assembler* assembler) { |
Label fall_through; |
TestBothArgumentsSmis(assembler, &fall_through); |
@@ -316,7 +302,6 @@ void Intrinsifier::Integer_subFromInteger(Assembler* assembler) { |
__ Bind(&fall_through); |
} |
- |
void Intrinsifier::Integer_sub(Assembler* assembler) { |
Label fall_through; |
TestBothArgumentsSmis(assembler, &fall_through); |
@@ -326,7 +311,6 @@ void Intrinsifier::Integer_sub(Assembler* assembler) { |
__ Bind(&fall_through); |
} |
- |
void Intrinsifier::Integer_mulFromInteger(Assembler* assembler) { |
Label fall_through; |
TestBothArgumentsSmis(assembler, &fall_through); // checks two smis |
@@ -337,12 +321,10 @@ void Intrinsifier::Integer_mulFromInteger(Assembler* assembler) { |
__ Bind(&fall_through); // Fall through on overflow. |
} |
- |
void Intrinsifier::Integer_mul(Assembler* assembler) { |
Integer_mulFromInteger(assembler); |
} |
- |
// Optimizations: |
// - result is 0 if: |
// - left is 0 |
@@ -390,7 +372,6 @@ static void EmitRemainderOperation(Assembler* assembler) { |
return; |
} |
- |
// Implementation: |
// res = left % right; |
// if (res < 0) { |
@@ -433,7 +414,6 @@ void Intrinsifier::Integer_moduloFromInteger(Assembler* assembler) { |
__ Bind(&fall_through); |
} |
- |
void Intrinsifier::Integer_truncDivide(Assembler* assembler) { |
if (!TargetCPUFeatures::can_divide()) { |
return; |
@@ -458,7 +438,6 @@ void Intrinsifier::Integer_truncDivide(Assembler* assembler) { |
__ Bind(&fall_through); |
} |
- |
void Intrinsifier::Integer_negate(Assembler* assembler) { |
Label fall_through; |
__ ldr(R0, Address(SP, +0 * kWordSize)); // Grab first argument. |
@@ -470,7 +449,6 @@ void Intrinsifier::Integer_negate(Assembler* assembler) { |
__ Bind(&fall_through); |
} |
- |
void Intrinsifier::Integer_bitAndFromInteger(Assembler* assembler) { |
Label fall_through; |
@@ -481,12 +459,10 @@ void Intrinsifier::Integer_bitAndFromInteger(Assembler* assembler) { |
__ Bind(&fall_through); |
} |
- |
void Intrinsifier::Integer_bitAnd(Assembler* assembler) { |
Integer_bitAndFromInteger(assembler); |
} |
- |
void Intrinsifier::Integer_bitOrFromInteger(Assembler* assembler) { |
Label fall_through; |
@@ -497,12 +473,10 @@ void Intrinsifier::Integer_bitOrFromInteger(Assembler* assembler) { |
__ Bind(&fall_through); |
} |
- |
void Intrinsifier::Integer_bitOr(Assembler* assembler) { |
Integer_bitOrFromInteger(assembler); |
} |
- |
void Intrinsifier::Integer_bitXorFromInteger(Assembler* assembler) { |
Label fall_through; |
@@ -513,12 +487,10 @@ void Intrinsifier::Integer_bitXorFromInteger(Assembler* assembler) { |
__ Bind(&fall_through); |
} |
- |
void Intrinsifier::Integer_bitXor(Assembler* assembler) { |
Integer_bitXorFromInteger(assembler); |
} |
- |
void Intrinsifier::Integer_shl(Assembler* assembler) { |
ASSERT(kSmiTagShift == 1); |
ASSERT(kSmiTag == 0); |
@@ -561,14 +533,12 @@ void Intrinsifier::Integer_shl(Assembler* assembler) { |
Class::Handle(Isolate::Current()->object_store()->mint_class()); |
__ TryAllocate(mint_class, &fall_through, R0, R2); |
- |
__ str(R1, FieldAddress(R0, Mint::value_offset())); |
__ str(NOTFP, FieldAddress(R0, Mint::value_offset() + kWordSize)); |
__ Ret(); |
__ Bind(&fall_through); |
} |
- |
static void Get64SmiOrMint(Assembler* assembler, |
Register res_hi, |
Register res_lo, |
@@ -595,7 +565,6 @@ static void Get64SmiOrMint(Assembler* assembler, |
return; |
} |
- |
static void CompareIntegers(Assembler* assembler, Condition true_condition) { |
Label try_mint_smi, is_true, is_false, drop_two_fall_through, fall_through; |
TestBothArgumentsSmis(assembler, &try_mint_smi); |
@@ -651,32 +620,26 @@ static void CompareIntegers(Assembler* assembler, Condition true_condition) { |
__ Bind(&fall_through); |
} |
- |
void Intrinsifier::Integer_greaterThanFromInt(Assembler* assembler) { |
CompareIntegers(assembler, LT); |
} |
- |
void Intrinsifier::Integer_lessThan(Assembler* assembler) { |
Integer_greaterThanFromInt(assembler); |
} |
- |
void Intrinsifier::Integer_greaterThan(Assembler* assembler) { |
CompareIntegers(assembler, GT); |
} |
- |
void Intrinsifier::Integer_lessEqualThan(Assembler* assembler) { |
CompareIntegers(assembler, LE); |
} |
- |
void Intrinsifier::Integer_greaterEqualThan(Assembler* assembler) { |
CompareIntegers(assembler, GE); |
} |
- |
// This is called for Smi, Mint and Bigint receivers. The right argument |
// can be Smi, Mint, Bigint or double. |
void Intrinsifier::Integer_equalToInteger(Assembler* assembler) { |
@@ -728,12 +691,10 @@ void Intrinsifier::Integer_equalToInteger(Assembler* assembler) { |
__ Bind(&fall_through); |
} |
- |
void Intrinsifier::Integer_equal(Assembler* assembler) { |
Integer_equalToInteger(assembler); |
} |
- |
void Intrinsifier::Integer_sar(Assembler* assembler) { |
Label fall_through; |
@@ -755,7 +716,6 @@ void Intrinsifier::Integer_sar(Assembler* assembler) { |
__ Bind(&fall_through); |
} |
- |
void Intrinsifier::Smi_bitNegate(Assembler* assembler) { |
__ ldr(R0, Address(SP, 0 * kWordSize)); |
__ mvn(R0, Operand(R0)); |
@@ -763,7 +723,6 @@ void Intrinsifier::Smi_bitNegate(Assembler* assembler) { |
__ Ret(); |
} |
- |
void Intrinsifier::Smi_bitLength(Assembler* assembler) { |
__ ldr(R0, Address(SP, 0 * kWordSize)); |
__ SmiUntag(R0); |
@@ -775,12 +734,10 @@ void Intrinsifier::Smi_bitLength(Assembler* assembler) { |
__ Ret(); |
} |
- |
void Intrinsifier::Smi_bitAndFromSmi(Assembler* assembler) { |
Integer_bitAndFromInteger(assembler); |
} |
- |
void Intrinsifier::Bigint_lsh(Assembler* assembler) { |
// static void _lsh(Uint32List x_digits, int x_used, int n, |
// Uint32List r_digits) |
@@ -797,8 +754,9 @@ void Intrinsifier::Bigint_lsh(Assembler* assembler) { |
// NOTFP = &x_digits[x_used] |
__ add(NOTFP, R8, Operand(R0, LSL, 1)); |
// R6 = &r_digits[1] |
- __ add(R6, R2, Operand(TypedData::data_offset() - kHeapObjectTag + |
- Bigint::kBytesPerDigit)); |
+ __ add(R6, R2, |
+ Operand(TypedData::data_offset() - kHeapObjectTag + |
+ Bigint::kBytesPerDigit)); |
// R6 = &r_digits[x_used + n ~/ _DIGIT_BITS + 1] |
__ add(R4, R4, Operand(R0, ASR, 1)); |
__ add(R6, R6, Operand(R4, LSL, 2)); |
@@ -820,7 +778,6 @@ void Intrinsifier::Bigint_lsh(Assembler* assembler) { |
__ Ret(); |
} |
- |
void Intrinsifier::Bigint_rsh(Assembler* assembler) { |
// static void _lsh(Uint32List x_digits, int x_used, int n, |
// Uint32List r_digits) |
@@ -864,7 +821,6 @@ void Intrinsifier::Bigint_rsh(Assembler* assembler) { |
__ Ret(); |
} |
- |
void Intrinsifier::Bigint_absAdd(Assembler* assembler) { |
// static void _absAdd(Uint32List digits, int used, |
// Uint32List a_digits, int a_used, |
@@ -924,7 +880,6 @@ void Intrinsifier::Bigint_absAdd(Assembler* assembler) { |
__ Ret(); |
} |
- |
void Intrinsifier::Bigint_absSub(Assembler* assembler) { |
// static void _absSub(Uint32List digits, int used, |
// Uint32List a_digits, int a_used, |
@@ -980,7 +935,6 @@ void Intrinsifier::Bigint_absSub(Assembler* assembler) { |
__ Ret(); |
} |
- |
void Intrinsifier::Bigint_mulAdd(Assembler* assembler) { |
// Pseudo code: |
// static int _mulAdd(Uint32List x_digits, int xi, |
@@ -1082,7 +1036,6 @@ void Intrinsifier::Bigint_mulAdd(Assembler* assembler) { |
__ Ret(); |
} |
- |
void Intrinsifier::Bigint_sqrAdd(Assembler* assembler) { |
// Pseudo code: |
// static int _sqrAdd(Uint32List x_digits, int i, |
@@ -1196,12 +1149,10 @@ void Intrinsifier::Bigint_sqrAdd(Assembler* assembler) { |
__ Ret(); |
} |
- |
void Intrinsifier::Bigint_estQuotientDigit(Assembler* assembler) { |
// No unsigned 64-bit / 32-bit divide instruction. |
} |
- |
void Intrinsifier::Montgomery_mulMod(Assembler* assembler) { |
// Pseudo code: |
// static int _mulMod(Uint32List args, Uint32List digits, int i) { |
@@ -1235,7 +1186,6 @@ void Intrinsifier::Montgomery_mulMod(Assembler* assembler) { |
__ Ret(); |
} |
- |
// Check if the last argument is a double, jump to label 'is_smi' if smi |
// (easy to convert to double), otherwise jump to label 'not_double_smi', |
// Returns the last argument in R0. |
@@ -1250,7 +1200,6 @@ static void TestLastArgumentIsDouble(Assembler* assembler, |
// Fall through with Double in R0. |
} |
- |
// Both arguments on stack, arg0 (left) is a double, arg1 (right) is of unknown |
// type. Return true or false object in the register R0. Any NaN argument |
// returns false. Any non-double arg1 causes control flow to fall through to the |
@@ -1284,32 +1233,26 @@ static void CompareDoubles(Assembler* assembler, Condition true_condition) { |
} |
} |
- |
void Intrinsifier::Double_greaterThan(Assembler* assembler) { |
CompareDoubles(assembler, HI); |
} |
- |
void Intrinsifier::Double_greaterEqualThan(Assembler* assembler) { |
CompareDoubles(assembler, CS); |
} |
- |
void Intrinsifier::Double_lessThan(Assembler* assembler) { |
CompareDoubles(assembler, CC); |
} |
- |
void Intrinsifier::Double_equal(Assembler* assembler) { |
CompareDoubles(assembler, EQ); |
} |
- |
void Intrinsifier::Double_lessEqualThan(Assembler* assembler) { |
CompareDoubles(assembler, LS); |
} |
- |
// Expects left argument to be double (receiver). Right argument is unknown. |
// Both arguments are on stack. |
static void DoubleArithmeticOperations(Assembler* assembler, Token::Kind kind) { |
@@ -1352,27 +1295,22 @@ static void DoubleArithmeticOperations(Assembler* assembler, Token::Kind kind) { |
} |
} |
- |
void Intrinsifier::Double_add(Assembler* assembler) { |
DoubleArithmeticOperations(assembler, Token::kADD); |
} |
- |
void Intrinsifier::Double_mul(Assembler* assembler) { |
DoubleArithmeticOperations(assembler, Token::kMUL); |
} |
- |
void Intrinsifier::Double_sub(Assembler* assembler) { |
DoubleArithmeticOperations(assembler, Token::kSUB); |
} |
- |
void Intrinsifier::Double_div(Assembler* assembler) { |
DoubleArithmeticOperations(assembler, Token::kDIV); |
} |
- |
// Left is double right is integer (Bigint, Mint or Smi) |
void Intrinsifier::Double_mulFromInteger(Assembler* assembler) { |
if (TargetCPUFeatures::vfp_supported()) { |
@@ -1397,7 +1335,6 @@ void Intrinsifier::Double_mulFromInteger(Assembler* assembler) { |
} |
} |
- |
void Intrinsifier::DoubleFromInteger(Assembler* assembler) { |
if (TargetCPUFeatures::vfp_supported()) { |
Label fall_through; |
@@ -1418,7 +1355,6 @@ void Intrinsifier::DoubleFromInteger(Assembler* assembler) { |
} |
} |
- |
void Intrinsifier::Double_getIsNaN(Assembler* assembler) { |
if (TargetCPUFeatures::vfp_supported()) { |
Label is_true; |
@@ -1432,7 +1368,6 @@ void Intrinsifier::Double_getIsNaN(Assembler* assembler) { |
} |
} |
- |
void Intrinsifier::Double_getIsInfinite(Assembler* assembler) { |
if (TargetCPUFeatures::vfp_supported()) { |
__ ldr(R0, Address(SP, 0 * kWordSize)); |
@@ -1457,7 +1392,6 @@ void Intrinsifier::Double_getIsInfinite(Assembler* assembler) { |
} |
} |
- |
void Intrinsifier::Double_getIsNegative(Assembler* assembler) { |
if (TargetCPUFeatures::vfp_supported()) { |
Label is_false, is_true, is_zero; |
@@ -1487,7 +1421,6 @@ void Intrinsifier::Double_getIsNegative(Assembler* assembler) { |
} |
} |
- |
void Intrinsifier::DoubleToInteger(Assembler* assembler) { |
if (TargetCPUFeatures::vfp_supported()) { |
Label fall_through; |
@@ -1512,7 +1445,6 @@ void Intrinsifier::DoubleToInteger(Assembler* assembler) { |
} |
} |
- |
void Intrinsifier::MathSqrt(Assembler* assembler) { |
if (TargetCPUFeatures::vfp_supported()) { |
Label fall_through, is_smi, double_op; |
@@ -1535,7 +1467,6 @@ void Intrinsifier::MathSqrt(Assembler* assembler) { |
} |
} |
- |
// var state = ((_A * (_state[kSTATE_LO])) + _state[kSTATE_HI]) & _MASK_64; |
// _state[kSTATE_LO] = state & _MASK_32; |
// _state[kSTATE_HI] = state >> 32; |
@@ -1584,7 +1515,6 @@ void Intrinsifier::Random_nextState(Assembler* assembler) { |
__ Ret(); |
} |
- |
void Intrinsifier::ObjectEquals(Assembler* assembler) { |
__ ldr(R0, Address(SP, 0 * kWordSize)); |
__ ldr(R1, Address(SP, 1 * kWordSize)); |
@@ -1594,7 +1524,6 @@ void Intrinsifier::ObjectEquals(Assembler* assembler) { |
__ Ret(); |
} |
- |
static void RangeCheck(Assembler* assembler, |
Register val, |
Register tmp, |
@@ -1607,11 +1536,9 @@ static void RangeCheck(Assembler* assembler, |
__ b(target, cc); |
} |
- |
const Condition kIfNotInRange = HI; |
const Condition kIfInRange = LS; |
- |
static void JumpIfInteger(Assembler* assembler, |
Register cid, |
Register tmp, |
@@ -1619,7 +1546,6 @@ static void JumpIfInteger(Assembler* assembler, |
RangeCheck(assembler, cid, tmp, kSmiCid, kBigintCid, kIfInRange, target); |
} |
- |
static void JumpIfNotInteger(Assembler* assembler, |
Register cid, |
Register tmp, |
@@ -1627,7 +1553,6 @@ static void JumpIfNotInteger(Assembler* assembler, |
RangeCheck(assembler, cid, tmp, kSmiCid, kBigintCid, kIfNotInRange, target); |
} |
- |
static void JumpIfString(Assembler* assembler, |
Register cid, |
Register tmp, |
@@ -1636,7 +1561,6 @@ static void JumpIfString(Assembler* assembler, |
kIfInRange, target); |
} |
- |
static void JumpIfNotString(Assembler* assembler, |
Register cid, |
Register tmp, |
@@ -1645,7 +1569,6 @@ static void JumpIfNotString(Assembler* assembler, |
kIfNotInRange, target); |
} |
- |
// Return type quickly for simple types (not parameterized and not signature). |
void Intrinsifier::ObjectRuntimeType(Assembler* assembler) { |
Label fall_through, use_canonical_type, not_double, not_integer; |
@@ -1694,7 +1617,6 @@ void Intrinsifier::ObjectRuntimeType(Assembler* assembler) { |
__ Bind(&fall_through); |
} |
- |
void Intrinsifier::ObjectHaveSameRuntimeType(Assembler* assembler) { |
Label fall_through, different_cids, equal, not_equal, not_integer; |
__ ldr(R0, Address(SP, 0 * kWordSize)); |
@@ -1749,7 +1671,6 @@ void Intrinsifier::ObjectHaveSameRuntimeType(Assembler* assembler) { |
__ Bind(&fall_through); |
} |
- |
void Intrinsifier::String_getHashCode(Assembler* assembler) { |
__ ldr(R0, Address(SP, 0 * kWordSize)); |
__ ldr(R0, FieldAddress(R0, String::hash_offset())); |
@@ -1757,7 +1678,6 @@ void Intrinsifier::String_getHashCode(Assembler* assembler) { |
__ bx(LR, NE); // Hash not yet computed. |
} |
- |
void GenerateSubstringMatchesSpecialization(Assembler* assembler, |
intptr_t receiver_cid, |
intptr_t other_cid, |
@@ -1828,7 +1748,6 @@ void GenerateSubstringMatchesSpecialization(Assembler* assembler, |
__ b(return_true); |
} |
- |
// bool _substringMatches(int start, String other) |
// This intrinsic handles a OneByteString or TwoByteString receiver with a |
// OneByteString other. |
@@ -1874,17 +1793,14 @@ void Intrinsifier::StringBaseSubstringMatches(Assembler* assembler) { |
__ Pop(R4); |
} |
- |
void Intrinsifier::Object_getHash(Assembler* assembler) { |
UNREACHABLE(); |
} |
- |
void Intrinsifier::Object_setHash(Assembler* assembler) { |
UNREACHABLE(); |
} |
- |
void Intrinsifier::StringBaseCharAt(Assembler* assembler) { |
Label fall_through, try_two_byte_string; |
@@ -1925,7 +1841,6 @@ void Intrinsifier::StringBaseCharAt(Assembler* assembler) { |
__ Bind(&fall_through); |
} |
- |
void Intrinsifier::StringBaseIsEmpty(Assembler* assembler) { |
__ ldr(R0, Address(SP, 0 * kWordSize)); |
__ ldr(R0, FieldAddress(R0, String::length_offset())); |
@@ -1935,7 +1850,6 @@ void Intrinsifier::StringBaseIsEmpty(Assembler* assembler) { |
__ Ret(); |
} |
- |
void Intrinsifier::OneByteString_getHashCode(Assembler* assembler) { |
__ ldr(R1, Address(SP, 0 * kWordSize)); |
__ ldr(R0, FieldAddress(R1, String::hash_offset())); |
@@ -1994,7 +1908,6 @@ void Intrinsifier::OneByteString_getHashCode(Assembler* assembler) { |
__ Ret(); |
} |
- |
// Allocates one-byte string of length 'end - start'. The content is not |
// initialized. |
// 'length-reg' (R2) contains tagged length. |
@@ -2070,7 +1983,6 @@ static void TryAllocateOnebyteString(Assembler* assembler, |
__ b(failure); |
} |
- |
// Arg0: OneByteString (receiver). |
// Arg1: Start index as Smi. |
// Arg2: End index as Smi. |
@@ -2130,7 +2042,6 @@ void Intrinsifier::OneByteString_substringUnchecked(Assembler* assembler) { |
__ Bind(&fall_through); |
} |
- |
void Intrinsifier::OneByteStringSetAt(Assembler* assembler) { |
__ ldr(R2, Address(SP, 0 * kWordSize)); // Value. |
__ ldr(R1, Address(SP, 1 * kWordSize)); // Index. |
@@ -2142,7 +2053,6 @@ void Intrinsifier::OneByteStringSetAt(Assembler* assembler) { |
__ Ret(); |
} |
- |
void Intrinsifier::OneByteString_allocate(Assembler* assembler) { |
__ ldr(R2, Address(SP, 0 * kWordSize)); // Length. |
Label fall_through, ok; |
@@ -2154,7 +2064,6 @@ void Intrinsifier::OneByteString_allocate(Assembler* assembler) { |
__ Bind(&fall_through); |
} |
- |
// TODO(srdjan): Add combinations (one-byte/two-byte/external strings). |
static void StringEquality(Assembler* assembler, intptr_t string_cid) { |
Label fall_through, is_true, is_false, loop; |
@@ -2219,17 +2128,14 @@ static void StringEquality(Assembler* assembler, intptr_t string_cid) { |
__ Bind(&fall_through); |
} |
- |
void Intrinsifier::OneByteString_equality(Assembler* assembler) { |
StringEquality(assembler, kOneByteStringCid); |
} |
- |
void Intrinsifier::TwoByteString_equality(Assembler* assembler) { |
StringEquality(assembler, kTwoByteStringCid); |
} |
- |
void Intrinsifier::IntrinsifyRegExpExecuteMatch(Assembler* assembler, |
bool sticky) { |
if (FLAG_interpret_irregexp) return; |
@@ -2263,7 +2169,6 @@ void Intrinsifier::IntrinsifyRegExpExecuteMatch(Assembler* assembler, |
__ bx(R1); |
} |
- |
// On stack: user tag (+0). |
void Intrinsifier::UserTag_makeCurrent(Assembler* assembler) { |
// R1: Isolate. |
@@ -2281,21 +2186,18 @@ void Intrinsifier::UserTag_makeCurrent(Assembler* assembler) { |
__ Ret(); |
} |
- |
void Intrinsifier::UserTag_defaultTag(Assembler* assembler) { |
__ LoadIsolate(R0); |
__ ldr(R0, Address(R0, Isolate::default_tag_offset())); |
__ Ret(); |
} |
- |
void Intrinsifier::Profiler_getCurrentTag(Assembler* assembler) { |
__ LoadIsolate(R0); |
__ ldr(R0, Address(R0, Isolate::current_tag_offset())); |
__ Ret(); |
} |
- |
void Intrinsifier::Timeline_isDartStreamEnabled(Assembler* assembler) { |
if (!FLAG_support_timeline) { |
__ LoadObject(R0, Bool::False()); |
@@ -2312,14 +2214,12 @@ void Intrinsifier::Timeline_isDartStreamEnabled(Assembler* assembler) { |
__ Ret(); |
} |
- |
void Intrinsifier::ClearAsyncThreadStackTrace(Assembler* assembler) { |
__ LoadObject(R0, Object::null_object()); |
__ str(R0, Address(THR, Thread::async_stack_trace_offset())); |
__ Ret(); |
} |
- |
void Intrinsifier::SetAsyncThreadStackTrace(Assembler* assembler) { |
__ ldr(R0, Address(THR, Thread::async_stack_trace_offset())); |
__ LoadObject(R0, Object::null_object()); |