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

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

Issue 12367002: ARM backend support for pld (preload data) instruction Base URL: http://v8.googlecode.com/svn/branches/bleeding_edge/
Patch Set: Created 7 years, 10 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
Index: test/cctest/test-assembler-arm.cc
===================================================================
--- test/cctest/test-assembler-arm.cc (revision 13713)
+++ test/cctest/test-assembler-arm.cc (working copy)
@@ -1144,4 +1144,69 @@
}
}
+
+TEST(14) {
+ // Test the pld instruction
+ InitializeVM();
+ v8::HandleScope scope;
+
+ typedef struct {
+ int32_t a;
+ int32_t b[32];
+ int32_t c;
+ int32_t d[32];
+ int32_t e;
+ int32_t f;
+ } I;
+ I i;
+
+ i.a = 4;
+ i.c = 16;
+ i.e = 32;
+
+ Assembler assm(Isolate::Current(), NULL, 0);
+
+ // Test data preload
+ // Prefetch data into cache for known future loads
+ __ pld(MemOperand(r0, OFFSET_OF(I, c)));
+ __ ldr(r1, MemOperand(r0, OFFSET_OF(I, a)));
+ __ mov(r1, Operand(r1, ASR, 1));
+ __ add(r1, r1, Operand(r1));
+ __ str(r1, MemOperand(r0, OFFSET_OF(I, a)));
+
+ __ pld(MemOperand(r0, OFFSET_OF(I, e)));
+ __ ldr(r2, MemOperand(r0, OFFSET_OF(I, c)));
+ __ mov(r2, Operand(r2, ASR, 1));
+ __ add(r2, r2, Operand(r2));
+ __ str(r2, MemOperand(r0, OFFSET_OF(I, a)));
+
+ __ ldr(r3, MemOperand(r0, OFFSET_OF(I, e)));
+ __ mov(r2, Operand(r3, ASR, 1));
+ __ add(r3, r3, Operand(r2));
+ __ str(r3, MemOperand(r0, OFFSET_OF(I, c)));
+
+ __ add(r3, r1, Operand(r2));
+ __ str(r3, MemOperand(r0, OFFSET_OF(I, f)));
+ __ mov(pc, Operand(lr));
+
+ CodeDesc desc;
+ assm.GetCode(&desc);
+ Object* code = HEAP->CreateCode(
+ desc,
+ Code::ComputeFlags(Code::STUB),
+ Handle<Object>(HEAP->undefined_value()))->ToObjectChecked();
+ CHECK(code->IsCode());
+#ifdef DEBUG
+ Code::cast(code)->Print();
+#endif
+ F3 f = FUNCTION_CAST<F3>(Code::cast(code)->entry());
+ Object* dummy = CALL_GENERATED_CODE(f, &i, 0, 0, 0, 0);
+ USE(dummy);
+
+ CHECK_EQ(16, i.a);
+ CHECK_EQ(48, i.c);
+ CHECK_EQ(32, i.e);
+ CHECK_EQ(20, i.f);
+}
+
#undef __

Powered by Google App Engine
This is Rietveld 408576698