6#if defined(TARGET_ARCH_ARM64)
8#define SHOULD_NOT_INCLUDE_RUNTIME
31static void TestBothArgumentsSmis(Assembler* assembler, Label* not_smi) {
35 __ BranchIfNotSmi(
TMP, not_smi);
38void AsmIntrinsifier::Integer_shl(Assembler* assembler, Label* normal_ir_body) {
46 TestBothArgumentsSmis(assembler, normal_ir_body);
49 __ b(normal_ir_body,
CS);
53 __ SmiUntag(
TMP, right);
58 __ b(normal_ir_body,
NE);
66 Label* normal_ir_body,
69 TestBothArgumentsSmis(assembler, normal_ir_body);
71 __ CompareObjectRegisters(
R1,
R0);
79void AsmIntrinsifier::Integer_lessThan(Assembler* assembler,
80 Label* normal_ir_body) {
84void AsmIntrinsifier::Integer_greaterThan(Assembler* assembler,
85 Label* normal_ir_body) {
89void AsmIntrinsifier::Integer_lessEqualThan(Assembler* assembler,
90 Label* normal_ir_body) {
94void AsmIntrinsifier::Integer_greaterEqualThan(Assembler* assembler,
95 Label* normal_ir_body) {
101void AsmIntrinsifier::Integer_equalToInteger(Assembler* assembler,
102 Label* normal_ir_body) {
103 Label true_label, check_for_mint;
107 __ CompareObjectRegisters(
R0,
R1);
108 __ b(&true_label, EQ);
111 __ BranchIfNotSmi(
R2, &check_for_mint);
122 Label receiver_not_smi;
125 __ BranchIfNotSmi(
R1, &receiver_not_smi);
131 __ CompareClassId(
R0, kDoubleCid);
132 __ b(normal_ir_body, EQ);
137 __ Bind(&receiver_not_smi);
140 __ CompareClassId(
R1, kMintCid);
141 __ b(normal_ir_body,
NE);
143 __ BranchIfNotSmi(
R0, normal_ir_body);
151void AsmIntrinsifier::Integer_equal(Assembler* assembler,
152 Label* normal_ir_body) {
153 Integer_equalToInteger(assembler, normal_ir_body);
156void AsmIntrinsifier::Smi_bitLength(Assembler* assembler,
157 Label* normal_ir_body) {
161#if !defined(DART_COMPRESSED_POINTERS)
164 __ LoadImmediate(
R1, 64);
168 __ LoadImmediate(
R1, 32);
175void AsmIntrinsifier::Bigint_lsh(Assembler* assembler, Label* normal_ir_body) {
181#if defined(DART_COMPRESSED_POINTERS)
184 __ add(
R2,
R2, Operand(2));
185 __ AsrImmediate(
R2,
R2, 2);
188#if defined(DART_COMPRESSED_POINTERS)
193 __ AsrImmediate(
R0,
R5, 6);
206 __ AndImmediate(
R3,
R5, 63);
208 __ LoadImmediate(
R2, 64);
225void AsmIntrinsifier::Bigint_rsh(Assembler* assembler, Label* normal_ir_body) {
231#if defined(DART_COMPRESSED_POINTERS)
234 __ add(
R2,
R2, Operand(2));
235 __ AsrImmediate(
R2,
R2, 2);
238#if defined(DART_COMPRESSED_POINTERS)
243 __ AsrImmediate(
R0,
R5, 6);
250 __ add(
R0,
R0, Operand(1));
254 __ AndImmediate(
R3,
R5, 63);
256 __ LoadImmediate(
R2, 64);
273 __ str(
R1, Address(
R8, 0));
278void AsmIntrinsifier::Bigint_absAdd(Assembler* assembler,
279 Label* normal_ir_body) {
286#if defined(DART_COMPRESSED_POINTERS)
289 __ add(
R2,
R2, Operand(2));
296#if defined(DART_COMPRESSED_POINTERS)
299 __ add(
R4,
R4, Operand(2));
315 __ adds(
R0,
R0, Operand(0));
324 __ cbnz(&add_loop,
R9);
328 __ cbz(&last_carry,
R9);
337 __ cbnz(&carry_loop,
R9);
342 __ LoadImmediate(
R0, 1);
343 __ str(
R0, Address(
R6, 0));
350void AsmIntrinsifier::Bigint_absSub(Assembler* assembler,
351 Label* normal_ir_body) {
358#if defined(DART_COMPRESSED_POINTERS)
361 __ add(
R2,
R2, Operand(2));
368#if defined(DART_COMPRESSED_POINTERS)
371 __ add(
R4,
R4, Operand(2));
387 __ subs(
R0,
R0, Operand(0));
396 __ cbnz(&sub_loop,
R9);
409 __ cbnz(&carry_loop,
R9);
416void AsmIntrinsifier::Bigint_mulAdd(Assembler* assembler,
417 Label* normal_ir_body) {
450#if defined(DART_COMPRESSED_POINTERS)
460#if defined(DART_COMPRESSED_POINTERS)
463 __ add(
R6,
R6, Operand(2));
470#if defined(DART_COMPRESSED_POINTERS)
479#if defined(DART_COMPRESSED_POINTERS)
501 __ ldr(
R0, Address(
R5, 0));
515 __ subs(
R6,
R6, Operand(1));
516 __ b(&muladd_loop,
NE);
522 __ ldr(
R0, Address(
R5, 0));
527 Label propagate_carry_loop;
528 __ Bind(&propagate_carry_loop);
529 __ ldr(
R0, Address(
R5, 0));
530 __ adds(
R0,
R0, Operand(1));
532 __ b(&propagate_carry_loop,
CS);
539void AsmIntrinsifier::Bigint_sqrAdd(Assembler* assembler,
540 Label* normal_ir_body) {
570#if defined(DART_COMPRESSED_POINTERS)
588 __ ldr(
R0, Address(
R5, 0));
600#if defined(DART_COMPRESSED_POINTERS)
604 __ add(
R8,
R8, Operand(2));
605 __ movn(
R0, Immediate(1), 0);
631 __ ldr(
R7, Address(
R5, 0));
640 __ subs(
R8,
R8, Operand(1));
645 __ ldr(
R0, Address(
R5, 0));
660void AsmIntrinsifier::Bigint_estimateQuotientDigit(Assembler* assembler,
661 Label* normal_ir_body) {
715#if defined(DART_COMPRESSED_POINTERS)
723 __ movn(
R0, Immediate(0), 0);
728 __ b(&return_qd, EQ);
752 Label qh_adj_loop, qh_adj, qh_ok;
770 __ sub(
R6,
R6, Operand(1));
807 Label ql_adj_loop, ql_adj, ql_ok;
825 __ sub(
R6,
R6, Operand(1));
843void AsmIntrinsifier::Montgomery_mulMod(Assembler* assembler,
844 Label* normal_ir_body) {
864#if defined(DART_COMPRESSED_POINTERS)
884static void TestLastArgumentIsDouble(Assembler* assembler,
886 Label* not_double_smi) {
888 __ BranchIfSmi(
R0, is_smi);
889 __ CompareClassId(
R0, kDoubleCid);
890 __ b(not_double_smi,
NE);
898static void CompareDoubles(Assembler* assembler,
899 Label* normal_ir_body,
901 Label is_smi, double_op, not_nan;
903 TestLastArgumentIsDouble(assembler, &is_smi, normal_ir_body);
928void AsmIntrinsifier::Double_greaterThan(Assembler* assembler,
929 Label* normal_ir_body) {
930 CompareDoubles(assembler, normal_ir_body,
HI);
933void AsmIntrinsifier::Double_greaterEqualThan(Assembler* assembler,
934 Label* normal_ir_body) {
935 CompareDoubles(assembler, normal_ir_body,
CS);
938void AsmIntrinsifier::Double_lessThan(Assembler* assembler,
939 Label* normal_ir_body) {
940 CompareDoubles(assembler, normal_ir_body,
CC);
943void AsmIntrinsifier::Double_equal(Assembler* assembler,
944 Label* normal_ir_body) {
945 CompareDoubles(assembler, normal_ir_body, EQ);
948void AsmIntrinsifier::Double_lessEqualThan(Assembler* assembler,
949 Label* normal_ir_body) {
950 CompareDoubles(assembler, normal_ir_body,
LS);
955static void DoubleArithmeticOperations(Assembler* assembler,
956 Label* normal_ir_body,
958 Label is_smi, double_op;
960 TestLastArgumentIsDouble(assembler, &is_smi, normal_ir_body);
995void AsmIntrinsifier::Double_add(Assembler* assembler, Label* normal_ir_body) {
996 DoubleArithmeticOperations(assembler, normal_ir_body, Token::kADD);
999void AsmIntrinsifier::Double_mul(Assembler* assembler, Label* normal_ir_body) {
1000 DoubleArithmeticOperations(assembler, normal_ir_body, Token::kMUL);
1003void AsmIntrinsifier::Double_sub(Assembler* assembler, Label* normal_ir_body) {
1004 DoubleArithmeticOperations(assembler, normal_ir_body, Token::kSUB);
1007void AsmIntrinsifier::Double_div(Assembler* assembler, Label* normal_ir_body) {
1008 DoubleArithmeticOperations(assembler, normal_ir_body, Token::kDIV);
1012void AsmIntrinsifier::Double_mulFromInteger(Assembler* assembler,
1013 Label* normal_ir_body) {
1016 __ BranchIfNotSmi(
R0, normal_ir_body);
1030void AsmIntrinsifier::DoubleFromInteger(Assembler* assembler,
1031 Label* normal_ir_body) {
1033 __ BranchIfNotSmi(
R0, normal_ir_body);
1036#if !defined(DART_COMPRESSED_POINTERS)
1048void AsmIntrinsifier::Double_getIsNaN(Assembler* assembler,
1049 Label* normal_ir_body) {
1059void AsmIntrinsifier::Double_getIsInfinite(Assembler* assembler,
1060 Label* normal_ir_body) {
1064 __ AndImmediate(
R0,
R0, 0x7FFFFFFFFFFFFFFFLL);
1066 __ CompareImmediate(
R0, 0x7FF0000000000000LL);
1073void AsmIntrinsifier::Double_getIsNegative(Assembler* assembler,
1074 Label* normal_ir_body) {
1077 Label is_false, is_true, is_zero;
1082 __ LoadObject(true_reg, CastHandle<Object>(
TrueObject()));
1083 __ LoadObject(false_reg, CastHandle<Object>(
FalseObject()));
1084 __ b(&is_false,
VS);
1086 __ b(&is_false,
CS);
1089 __ mov(
R0, true_reg);
1097 __ LsrImmediate(
R1,
R1, 63);
1098 __ tsti(
R1, Immediate(1));
1099 __ csel(
R0, true_reg, false_reg,
NE);
1103void AsmIntrinsifier::ObjectEquals(Assembler* assembler,
1104 Label* normal_ir_body) {
1107 __ CompareObjectRegisters(
R0,
R1);
1114static void JumpIfInteger(Assembler* assembler,
1122static void JumpIfNotInteger(Assembler* assembler,
1130static void JumpIfString(Assembler* assembler,
1134 assembler->RangeCheck(
cid, tmp, kOneByteStringCid, kTwoByteStringCid,
1138static void JumpIfNotString(Assembler* assembler,
1142 assembler->RangeCheck(
cid, tmp, kOneByteStringCid, kTwoByteStringCid,
1146static void JumpIfNotList(Assembler* assembler,
1150 assembler->RangeCheck(
cid, tmp, kArrayCid, kGrowableObjectArrayCid,
1154static void JumpIfType(Assembler* assembler,
1159 (kRecordTypeCid == kTypeCid + 2));
1160 assembler->RangeCheck(
cid, tmp, kTypeCid, kRecordTypeCid,
1164static void JumpIfNotType(Assembler* assembler,
1169 (kRecordTypeCid == kTypeCid + 2));
1170 assembler->RangeCheck(
cid, tmp, kTypeCid, kRecordTypeCid,
1175void AsmIntrinsifier::ObjectRuntimeType(Assembler* assembler,
1176 Label* normal_ir_body) {
1177 Label use_declaration_type, not_double, not_integer, not_string;
1179 __ LoadClassIdMayBeSmi(
R1,
R0);
1181 __ CompareImmediate(
R1, kClosureCid);
1182 __ b(normal_ir_body, EQ);
1184 __ CompareImmediate(
R1, kRecordCid);
1185 __ b(normal_ir_body, EQ);
1188 __ b(&use_declaration_type,
HI);
1190 __ LoadIsolateGroup(
R2);
1193 __ CompareImmediate(
R1, kDoubleCid);
1194 __ b(¬_double,
NE);
1199 JumpIfNotInteger(assembler,
R1,
R0, ¬_integer);
1204 JumpIfNotString(assembler,
R1,
R0, ¬_string);
1209 JumpIfNotType(assembler,
R1,
R0, &use_declaration_type);
1213 __ Bind(&use_declaration_type);
1214 __ LoadClassById(
R2,
R1);
1217 __ cbnz(normal_ir_body,
R3);
1219 __ LoadCompressed(
R0,
1222 __ b(normal_ir_body, EQ);
1232static void EquivalentClassIds(Assembler* assembler,
1233 Label* normal_ir_body,
1234 Label* equal_may_be_generic,
1235 Label* equal_not_generic,
1240 bool testing_instance_cids) {
1241 Label not_integer, not_integer_or_string, not_integer_or_string_or_list;
1244 __ CompareImmediate(cid1, kClosureCid);
1245 __ b(normal_ir_body, EQ);
1248 __ CompareImmediate(cid1, kRecordCid);
1249 __ b(normal_ir_body, EQ);
1254 __ cmp(cid1, Operand(cid2));
1255 __ b(equal_may_be_generic, EQ);
1261 __ b(not_equal,
HI);
1264 JumpIfNotInteger(assembler, cid1, scratch, ¬_integer);
1267 JumpIfInteger(assembler, cid2, scratch, equal_not_generic);
1273 JumpIfNotString(assembler, cid1, scratch,
1274 testing_instance_cids ? ¬_integer_or_string : not_equal);
1277 JumpIfString(assembler, cid2, scratch, equal_not_generic);
1281 if (testing_instance_cids) {
1282 __ Bind(¬_integer_or_string);
1284 JumpIfNotList(assembler, cid1, scratch, ¬_integer_or_string_or_list);
1287 JumpIfNotList(assembler, cid2, scratch, not_equal);
1290 __ b(equal_may_be_generic);
1292 __ Bind(¬_integer_or_string_or_list);
1296 JumpIfNotType(assembler, cid1, scratch, not_equal);
1299 JumpIfType(assembler, cid2, scratch, equal_not_generic);
1305void AsmIntrinsifier::ObjectHaveSameRuntimeType(Assembler* assembler,
1306 Label* normal_ir_body) {
1308 __ LoadClassIdMayBeSmi(
R2,
R1);
1309 __ LoadClassIdMayBeSmi(
R1,
R0);
1311 Label equal_may_be_generic,
equal, not_equal;
1312 EquivalentClassIds(assembler, normal_ir_body, &equal_may_be_generic, &
equal,
1316 __ Bind(&equal_may_be_generic);
1320 __ LoadClassById(
R0,
R1);
1335 __ CompareObjectRegisters(
R1,
R2);
1336 __ b(normal_ir_body,
NE);
1350void AsmIntrinsifier::String_getHashCode(Assembler* assembler,
1351 Label* normal_ir_body) {
1356 __ b(normal_ir_body, EQ);
1362void AsmIntrinsifier::Type_equality(Assembler* assembler,
1363 Label* normal_ir_body) {
1364 Label
equal, not_equal, equiv_cids_may_be_generic, equiv_cids;
1367 __ CompareObjectRegisters(
R1,
R2);
1372 __ LoadClassIdMayBeSmi(
R0,
R1);
1373 __ CompareImmediate(
R0, kTypeCid);
1374 __ b(normal_ir_body,
NE);
1377 __ LoadTypeClassId(
R3,
R1);
1378 __ LoadTypeClassId(
R4,
R2);
1380 EquivalentClassIds(assembler, normal_ir_body, &equiv_cids_may_be_generic,
1381 &equiv_cids, ¬_equal,
R3,
R4,
R0,
1384 __ Bind(&equiv_cids_may_be_generic);
1388 __ CompareObjectRegisters(
R3,
R4);
1389 __ b(normal_ir_body,
NE);
1394 __ LoadAbstractTypeNullability(
R1,
R1);
1395 __ LoadAbstractTypeNullability(
R2,
R2);
1397 __ b(¬_equal,
NE);
1411void AsmIntrinsifier::AbstractType_getHashCode(Assembler* assembler,
1412 Label* normal_ir_body) {
1414 __ LoadCompressedSmi(
R0,
1422void AsmIntrinsifier::AbstractType_equality(Assembler* assembler,
1423 Label* normal_ir_body) {
1425 __ CompareObjectRegisters(
R1,
R2);
1426 __ b(normal_ir_body,
NE);
1438void AsmIntrinsifier::Object_getHash(Assembler* assembler,
1439 Label* normal_ir_body) {
1440 Label not_yet_computed;
1447 __ cbz(¬_yet_computed,
R0);
1451 __ Bind(¬_yet_computed);
1453 __ AndImmediate(
R2,
R1, 0xffffffff);
1454 __ LsrImmediate(
R3,
R1, 32);
1455 __ LoadImmediate(
R1, 0xffffda61);
1459 __ AndImmediate(
R1,
R1, 0x3fffffff);
1460 __ cbz(¬_yet_computed,
R1);
1466 Label retry, already_set_in_r4;
1470 __ cbnz(&already_set_in_r4,
R4);
1473 __ cbnz(&retry,
R4);
1477 __ Bind(&already_set_in_r4);
1483void GenerateSubstringMatchesSpecialization(Assembler* assembler,
1484 intptr_t receiver_cid,
1487 Label* return_false) {
1489 __ LoadCompressedSmi(
1492 __ LoadCompressedSmi(
1497 __ cmp(
R9, Operand(0));
1498 __ b(return_true, EQ);
1501 __ cmp(
R1, Operand(0));
1502 __ b(return_false, LT);
1507 __ b(return_false, GT);
1509 if (receiver_cid == kOneByteStringCid) {
1513 ASSERT(receiver_cid == kTwoByteStringCid);
1518 if (other_cid == kOneByteStringCid) {
1521 ASSERT(other_cid == kTwoByteStringCid);
1526 __ LoadImmediate(
R3, 0);
1539 __ b(return_false,
NE);
1542 __ add(
R3,
R3, Operand(1));
1543 __ add(
R0,
R0, Operand(receiver_cid == kOneByteStringCid ? 1 : 2));
1544 __ add(
R2,
R2, Operand(other_cid == kOneByteStringCid ? 1 : 2));
1554void AsmIntrinsifier::StringBaseSubstringMatches(Assembler* assembler,
1555 Label* normal_ir_body) {
1556 Label return_true, return_false, try_two_byte;
1561 __ BranchIfNotSmi(
R1, normal_ir_body);
1563 __ CompareClassId(
R2, kOneByteStringCid);
1564 __ b(normal_ir_body,
NE);
1566 __ CompareClassId(
R0, kOneByteStringCid);
1567 __ b(normal_ir_body,
NE);
1569 GenerateSubstringMatchesSpecialization(assembler, kOneByteStringCid,
1570 kOneByteStringCid, &return_true,
1574 __ CompareClassId(
R0, kTwoByteStringCid);
1575 __ b(normal_ir_body,
NE);
1577 GenerateSubstringMatchesSpecialization(assembler, kTwoByteStringCid,
1578 kOneByteStringCid, &return_true,
1592void AsmIntrinsifier::StringBaseCharAt(Assembler* assembler,
1593 Label* normal_ir_body) {
1594 Label try_two_byte_string;
1598 __ BranchIfNotSmi(
R1, normal_ir_body);
1602 __ b(normal_ir_body,
CS);
1604 __ CompareClassId(
R0, kOneByteStringCid);
1605 __ b(&try_two_byte_string,
NE);
1610 __ b(normal_ir_body,
GE);
1617 __ Bind(&try_two_byte_string);
1618 __ CompareClassId(
R0, kTwoByteStringCid);
1619 __ b(normal_ir_body,
NE);
1622#if !defined(DART_COMPRESSED_POINTERS)
1629 __ b(normal_ir_body,
GE);
1639void AsmIntrinsifier::StringBaseIsEmpty(Assembler* assembler,
1640 Label* normal_ir_body) {
1650void AsmIntrinsifier::OneByteString_getHashCode(Assembler* assembler,
1651 Label* normal_ir_body) {
1657 __ b(&compute_hash, EQ);
1681 __ add(
R3,
R3, Operand(1));
1698 __ cbnz(&retry,
R4);
1708static void TryAllocateString(Assembler* assembler,
1710 intptr_t max_elements,
1713 ASSERT(
cid == kOneByteStringCid ||
cid == kTwoByteStringCid);
1716 __ BranchIfNotSmi(length_reg, failure);
1723 __ mov(
R6, length_reg);
1724 if (
cid == kOneByteStringCid) {
1726 __ SmiUntag(length_reg, length_reg);
1731 const intptr_t fixed_size_plus_alignment_padding =
1734 __ AddImmediate(length_reg, fixed_size_plus_alignment_padding);
1735 __ andi(length_reg, length_reg,
1741 __ adds(
R1,
R0, Operand(length_reg));
1751 __ CheckAllocationCanary(
R0);
1771 __ LslImmediate(
R2,
R2, shift);
1779 __ LoadImmediate(
TMP, tags);
1784#if DART_COMPRESSED_POINTERS
1789 __ StoreCompressedIntoObjectNoBarrier(
1798void AsmIntrinsifier::OneByteString_substringUnchecked(Assembler* assembler,
1799 Label* normal_ir_body) {
1805 __ ldr(
R2, Address(
SP, kEndIndexOffset));
1806 __ ldr(
TMP, Address(
SP, kStartIndexOffset));
1808 __ BranchIfNotSmi(
R3, normal_ir_body);
1811 TryAllocateString(assembler, kOneByteStringCid,
1817 __ ldr(
R3, Address(
SP, kStringOffset));
1818 __ ldr(
R1, Address(
SP, kStartIndexOffset));
1826 __ ldr(
R2, Address(
SP, kEndIndexOffset));
1837 __ cmp(
R2, Operand(0));
1843 __ AddImmediate(
R6, 1);
1844 __ sub(
R2,
R2, Operand(1));
1845 __ cmp(
R2, Operand(0));
1848 __ AddImmediate(
R7, 1);
1856void AsmIntrinsifier::WriteIntoOneByteString(Assembler* assembler,
1857 Label* normal_ir_body) {
1869void AsmIntrinsifier::WriteIntoTwoByteString(Assembler* assembler,
1870 Label* normal_ir_body) {
1878#if !defined(DART_COMPRESSED_POINTERS)
1887void AsmIntrinsifier::AllocateOneByteString(Assembler* assembler,
1888 Label* normal_ir_body) {
1892#if defined(DART_COMPRESSED_POINTERS)
1895 TryAllocateString(assembler, kOneByteStringCid,
1905void AsmIntrinsifier::AllocateTwoByteString(Assembler* assembler,
1906 Label* normal_ir_body) {
1910#if defined(DART_COMPRESSED_POINTERS)
1913 TryAllocateString(assembler, kTwoByteStringCid,
1923void AsmIntrinsifier::OneByteString_equality(Assembler* assembler,
1924 Label* normal_ir_body) {
1928 StringEquality(assembler,
R0,
R1,
R2,
R3,
R0, normal_ir_body,
1932void AsmIntrinsifier::TwoByteString_equality(Assembler* assembler,
1933 Label* normal_ir_body) {
1937 StringEquality(assembler,
R0,
R1,
R2,
R3,
R0, normal_ir_body,
1941void AsmIntrinsifier::IntrinsifyRegExpExecuteMatch(Assembler* assembler,
1942 Label* normal_ir_body,
1944 if (FLAG_interpret_irregexp)
return;
1957 __ ldr(
R2, Address(
SP, kRegExpParamOffset));
1958 __ ldr(
R1, Address(
SP, kStringParamOffset));
1960 __ AddImmediate(
R1, -kOneByteStringCid);
1961#if !defined(DART_COMPRESSED_POINTERS)
1968 kOneByteStringCid, sticky)));
1982void AsmIntrinsifier::UserTag_defaultTag(Assembler* assembler,
1983 Label* normal_ir_body) {
1989void AsmIntrinsifier::Profiler_getCurrentTag(Assembler* assembler,
1990 Label* normal_ir_body) {
1996void AsmIntrinsifier::Timeline_isDartStreamEnabled(Assembler* assembler,
1997 Label* normal_ir_body) {
1998#if !defined(SUPPORT_TIMELINE)
2006 __ cmp(
R0, Operand(0));
2014void AsmIntrinsifier::Timeline_getNextTaskId(Assembler* assembler,
2015 Label* normal_ir_body) {
2016#if !defined(SUPPORT_TIMELINE)
2021 __ add(
R1,
R0, Operand(1));
static void done(const char *config, const char *src, const char *srcOptions, const char *name)
static bool equal(const SkBitmap &a, const SkBitmap &b)
static bool ok(int result)
static word hash_offset()
static word type_arguments_offset()
static word declaration_type_offset()
static word host_type_arguments_field_offset_in_words_offset()
static const word kNoTypeArguments
static word num_type_arguments_offset()
static word value_offset()
static word code_offset()
static word entry_point_offset(CodeEntryKind kind=CodeEntryKind::kNormal)
static word type_arguments_offset()
static word object_store_offset()
static word current_tag_offset()
static word default_tag_offset()
static word double_type_offset()
static word type_type_offset()
static word int_type_offset()
static word string_type_offset()
static word tags_offset()
static word data_offset()
static const word kMaxNewSpaceElements
static word function_offset(classid_t cid, bool sticky)
static const word kHashBits
static word hash_offset()
static word InstanceSize()
static word length_offset()
static const word kNullCharCodeSymbolOffset
static const word kNumberOfOneCharCodeSymbols
static word random_offset()
static word dart_stream_offset()
static word predefined_symbols_address_offset()
static word next_task_id_offset()
static word enabled_offset()
static const word kMaxNewSpaceElements
static word data_offset()
static word arguments_offset()
static word payload_offset()
static const word kHashTagPos
static const word kSizeTagMaxSizeTag
static const word kTagBitsSizeTagPos
uword MakeTagWordForNewSpaceObject(classid_t cid, uword instance_size)
word ToRawSmi(const dart::Object &a)
static constexpr intptr_t kWordSize
constexpr intptr_t kSmiBits
const Bool & TrueObject()
const Bool & FalseObject()
const Object & NullObject()
const Class & DoubleClass()
static bool CompareIntegers(Token::Kind kind, const Integer &left, const Integer &right)
uint32_t CombineHashes(uint32_t hash, uint32_t other_hash)
constexpr intptr_t kBitsPerByte
constexpr intptr_t kWordSizeLog2
const Register FUNCTION_REG
const intptr_t kBytesPerBigIntDigit
NOT_IN_PRODUCT(LibraryPtr ReloadTestScript(const char *script))
COMPILE_ASSERT(kUnreachableReference==WeakTable::kNoValue)
static bool Bind(PassBindingsCacheMTL &pass, ShaderStage stage, size_t bind_index, const BufferView &view)
static constexpr intptr_t kObjectAlignmentLog2
static constexpr intptr_t kObjectAlignment