Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(297)

Unified Diff: test/cctest/test-assembler-arm64.cc

Issue 2922983002: [arm64] Fix assertion in IsImmLLiteral and enable literal pool tests. (Closed)
Patch Set: Address comments. Created 3 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « src/arm64/assembler-arm64.cc ('k') | test/cctest/test-disasm-arm64.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: test/cctest/test-assembler-arm64.cc
diff --git a/test/cctest/test-assembler-arm64.cc b/test/cctest/test-assembler-arm64.cc
index 145849e376dcbc4fb6915c95f34325a563614c41..c724487c141c37591a06a0a83482a751118f14b8 100644
--- a/test/cctest/test-assembler-arm64.cc
+++ b/test/cctest/test-assembler-arm64.cc
@@ -242,10 +242,10 @@ static void InitializeVM() {
CHECK(Equal128(expected_h, expected_l, &core, result))
#ifdef DEBUG
-#define CHECK_LITERAL_POOL_SIZE(expected) \
- CHECK((expected) == (__ LiteralPoolSize()))
+#define CHECK_CONSTANT_POOL_SIZE(expected) \
+ CHECK_EQ(expected, __ GetConstantPoolEntriesSizeForTesting())
#else
-#define CHECK_LITERAL_POOL_SIZE(expected) ((void)0)
+#define CHECK_CONSTANT_POOL_SIZE(expected) ((void)0)
#endif
@@ -6689,35 +6689,58 @@ TEST(ldur_stur) {
TEARDOWN();
}
+TEST(ldr_pcrel_large_offset) {
+ INIT_V8();
+ SETUP_SIZE(1 * MB);
+
+ START();
+
+ __ Ldr(x1, Immediate(0x1234567890abcdefUL));
+
+ {
+ v8::internal::PatchingAssembler::BlockPoolsScope scope(&masm);
+ int start = __ pc_offset();
+ while (__ pc_offset() - start < 600 * KB) {
+ __ Nop();
+ }
+ }
+
+ __ Ldr(x2, Immediate(0x1234567890abcdefUL));
+
+ END();
+
+ RUN();
+
+ CHECK_EQUAL_64(0x1234567890abcdefUL, x1);
+ CHECK_EQUAL_64(0x1234567890abcdefUL, x2);
+
+ TEARDOWN();
+}
-#if 0 // TODO(all) enable.
-// TODO(rodolph): Adapt w16 Literal tests for RelocInfo.
TEST(ldr_literal) {
INIT_V8();
SETUP();
START();
- __ Ldr(x2, 0x1234567890abcdefUL);
- __ Ldr(w3, 0xfedcba09);
+ __ Ldr(x2, Immediate(0x1234567890abcdefUL));
__ Ldr(d13, 1.234);
- __ Ldr(s25, 2.5);
END();
RUN();
CHECK_EQUAL_64(0x1234567890abcdefUL, x2);
- CHECK_EQUAL_64(0xfedcba09, x3);
CHECK_EQUAL_FP64(1.234, d13);
- CHECK_EQUAL_FP32(2.5, s25);
TEARDOWN();
}
+#ifdef DEBUG
+// These tests rely on functions available in debug mode.
+enum LiteralPoolEmitOption { NoJumpRequired, JumpRequired };
-static void LdrLiteralRangeHelper(ptrdiff_t range_,
- LiteralPoolEmitOption option,
+static void LdrLiteralRangeHelper(int range_, LiteralPoolEmitOption option,
bool expect_dump) {
- CHECK(range_ > 0);
+ CHECK_GT(range_, 0);
SETUP_SIZE(range_ + 1024);
Label label_1, label_2;
@@ -6728,125 +6751,101 @@ static void LdrLiteralRangeHelper(ptrdiff_t range_,
if (option == NoJumpRequired) {
// Space for an explicit branch.
- pool_guard_size = sizeof(Instr);
+ pool_guard_size = kInstructionSize;
} else {
pool_guard_size = 0;
}
START();
// Force a pool dump so the pool starts off empty.
- __ EmitLiteralPool(JumpRequired);
- CHECK_LITERAL_POOL_SIZE(0);
+ __ CheckConstPool(true, true);
+ CHECK_CONSTANT_POOL_SIZE(0);
- __ Ldr(x0, 0x1234567890abcdefUL);
- __ Ldr(w1, 0xfedcba09);
+ __ Ldr(x0, Immediate(0x1234567890abcdefUL));
__ Ldr(d0, 1.234);
- __ Ldr(s1, 2.5);
- CHECK_LITERAL_POOL_SIZE(4);
+ CHECK_CONSTANT_POOL_SIZE(16);
- code_size += 4 * sizeof(Instr);
+ code_size += 2 * kInstructionSize;
// Check that the requested range (allowing space for a branch over the pool)
// can be handled by this test.
- CHECK((code_size + pool_guard_size) <= range);
+ CHECK_LE(code_size + pool_guard_size, range);
// Emit NOPs up to 'range', leaving space for the pool guard.
- while ((code_size + pool_guard_size) < range) {
+ while ((code_size + pool_guard_size + kInstructionSize) < range) {
__ Nop();
- code_size += sizeof(Instr);
+ code_size += kInstructionSize;
}
// Emit the guard sequence before the literal pool.
if (option == NoJumpRequired) {
__ B(&label_1);
- code_size += sizeof(Instr);
+ code_size += kInstructionSize;
}
- CHECK(code_size == range);
- CHECK_LITERAL_POOL_SIZE(4);
+ // The next instruction will trigger pool emission when expect_dump is true.
+ CHECK_EQ(code_size, range - kInstructionSize);
+ CHECK_CONSTANT_POOL_SIZE(16);
// Possibly generate a literal pool.
- __ CheckLiteralPool(option);
+ __ Nop();
+
__ Bind(&label_1);
if (expect_dump) {
- CHECK_LITERAL_POOL_SIZE(0);
+ CHECK_CONSTANT_POOL_SIZE(0);
} else {
- CHECK_LITERAL_POOL_SIZE(4);
+ CHECK_CONSTANT_POOL_SIZE(16);
}
// Force a pool flush to check that a second pool functions correctly.
- __ EmitLiteralPool(JumpRequired);
- CHECK_LITERAL_POOL_SIZE(0);
+ __ CheckConstPool(true, true);
+ CHECK_CONSTANT_POOL_SIZE(0);
// These loads should be after the pool (and will require a new one).
- __ Ldr(x4, 0x34567890abcdef12UL);
- __ Ldr(w5, 0xdcba09fe);
+ __ Ldr(x4, Immediate(0x34567890abcdef12UL));
__ Ldr(d4, 123.4);
- __ Ldr(s5, 250.0);
- CHECK_LITERAL_POOL_SIZE(4);
+ CHECK_CONSTANT_POOL_SIZE(16);
END();
RUN();
// Check that the literals loaded correctly.
CHECK_EQUAL_64(0x1234567890abcdefUL, x0);
- CHECK_EQUAL_64(0xfedcba09, x1);
CHECK_EQUAL_FP64(1.234, d0);
- CHECK_EQUAL_FP32(2.5, s1);
CHECK_EQUAL_64(0x34567890abcdef12UL, x4);
- CHECK_EQUAL_64(0xdcba09fe, x5);
CHECK_EQUAL_FP64(123.4, d4);
- CHECK_EQUAL_FP32(250.0, s5);
TEARDOWN();
}
-
TEST(ldr_literal_range_1) {
INIT_V8();
- LdrLiteralRangeHelper(kRecommendedLiteralPoolRange,
- NoJumpRequired,
- true);
+ LdrLiteralRangeHelper(MacroAssembler::GetApproxMaxDistToConstPoolForTesting(),
+ NoJumpRequired, true);
}
TEST(ldr_literal_range_2) {
INIT_V8();
- LdrLiteralRangeHelper(kRecommendedLiteralPoolRange-sizeof(Instr),
- NoJumpRequired,
- false);
+ LdrLiteralRangeHelper(
+ MacroAssembler::GetApproxMaxDistToConstPoolForTesting() -
+ kInstructionSize,
+ NoJumpRequired, false);
}
TEST(ldr_literal_range_3) {
INIT_V8();
- LdrLiteralRangeHelper(2 * kRecommendedLiteralPoolRange,
- JumpRequired,
- true);
+ LdrLiteralRangeHelper(MacroAssembler::GetCheckConstPoolIntervalForTesting(),
+ JumpRequired, false);
}
TEST(ldr_literal_range_4) {
INIT_V8();
- LdrLiteralRangeHelper(2 * kRecommendedLiteralPoolRange-sizeof(Instr),
- JumpRequired,
- false);
-}
-
-
-TEST(ldr_literal_range_5) {
- INIT_V8();
- LdrLiteralRangeHelper(kLiteralPoolCheckInterval,
- JumpRequired,
- false);
-}
-
-
-TEST(ldr_literal_range_6) {
- INIT_V8();
- LdrLiteralRangeHelper(kLiteralPoolCheckInterval-sizeof(Instr),
- JumpRequired,
- false);
+ LdrLiteralRangeHelper(
+ MacroAssembler::GetCheckConstPoolIntervalForTesting() - kInstructionSize,
+ JumpRequired, false);
}
#endif
« no previous file with comments | « src/arm64/assembler-arm64.cc ('k') | test/cctest/test-disasm-arm64.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698