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

Unified Diff: runtime/vm/assembler_x64_test.cc

Issue 10696183: Add some missing x64 instruction variations. (Closed) Base URL: http://dart.googlecode.com/svn/branches/bleeding_edge/dart/
Patch Set: Created 8 years, 5 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 | « runtime/vm/assembler_x64.cc ('k') | runtime/vm/intrinsifier_x64.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: runtime/vm/assembler_x64_test.cc
===================================================================
--- runtime/vm/assembler_x64_test.cc (revision 9573)
+++ runtime/vm/assembler_x64_test.cc (working copy)
@@ -351,7 +351,9 @@
__ imulq(RAX, RCX);
__ movq(R8, Immediate(2));
__ movq(R9, Immediate(4));
- __ imulq(R8, R9);
+ __ pushq(R9);
+ __ imulq(R8, Address(RSP, 0));
+ __ popq(R9);
__ addq(RAX, R8);
__ ret();
}
@@ -520,6 +522,38 @@
}
+ASSEMBLER_TEST_GENERATE(Bitwise64, assembler) {
+ Label error;
+ __ movq(RAX, Immediate(42));
+ __ pushq(RAX);
+ __ xorq(RAX, Address(RSP, 0));
+ __ popq(RCX);
+ __ cmpq(RAX, Immediate(0));
+ __ j(NOT_EQUAL, &error);
+ __ xorq(RCX, RCX);
+ __ orq(RCX, Immediate(256));
+ __ movq(RAX, Immediate(4));
+ __ orq(RCX, RAX);
+ __ movq(RAX, Immediate(0xfff0));
+ __ andq(RCX, RAX);
+ __ movq(RAX, Immediate(1));
+ __ pushq(RAX);
+ __ orq(RCX, Address(RSP, 0));
+ __ popq(RAX);
+ __ movq(RAX, RCX);
+ __ ret();
+ __ Bind(&error);
+ __ movq(RAX, Immediate(-1));
+ __ ret();
+}
+
+
+ASSEMBLER_TEST_RUN(Bitwise64, entry) {
+ typedef int (*Bitwise64)();
+ EXPECT_EQ(256 + 1, reinterpret_cast<Bitwise64>(entry)());
+}
+
+
ASSEMBLER_TEST_GENERATE(LogicalOps, assembler) {
Label donetest1;
__ movl(RAX, Immediate(4));
@@ -722,6 +756,210 @@
}
+ASSEMBLER_TEST_GENERATE(LogicalOps64, assembler) {
+ Label donetest1;
+ __ movq(RAX, Immediate(4));
+ __ andq(RAX, Immediate(2));
+ __ cmpq(RAX, Immediate(0));
+ __ j(EQUAL, &donetest1);
+ // Be sure to skip this crashing code.
+ __ movq(RAX, Immediate(0));
+ __ movq(Address(RAX, 0), RAX);
+ __ Bind(&donetest1);
+
+ Label donetest2;
+ __ movq(RCX, Immediate(4));
+ __ pushq(RCX);
+ __ andq(RCX, Address(RSP, 0));
+ __ popq(RAX);
+ __ cmpq(RCX, Immediate(0));
+ __ j(NOT_EQUAL, &donetest2);
+ // Be sure to skip this crashing code.
+ __ movq(RAX, Immediate(0));
+ __ movq(Address(RAX, 0), RAX);
+ __ Bind(&donetest2);
+
+ Label donetest3;
+ __ movq(RAX, Immediate(0));
+ __ orq(RAX, Immediate(0));
+ __ cmpq(RAX, Immediate(0));
+ __ j(EQUAL, &donetest3);
+ // Be sure to skip this crashing code.
+ __ movq(RAX, Immediate(0));
+ __ movq(Address(RAX, 0), RAX);
+ __ Bind(&donetest3);
+
+ Label donetest4;
+ __ movq(RAX, Immediate(4));
+ __ orq(RAX, Immediate(0));
+ __ cmpq(RAX, Immediate(0));
+ __ j(NOT_EQUAL, &donetest4);
+ // Be sure to skip this crashing code.
+ __ movq(RAX, Immediate(0));
+ __ movq(Address(RAX, 0), RAX);
+ __ Bind(&donetest4);
+
+ Label donetest5;
+ __ pushq(RAX);
+ __ movq(RAX, Immediate(0xff));
+ __ movq(Address(RSP, 0), RAX);
+ __ cmpq(Address(RSP, 0), Immediate(0xff));
+ __ j(EQUAL, &donetest5);
+ // Be sure to skip this crashing code.
+ __ movq(RAX, Immediate(0));
+ __ movq(Address(RAX, 0), RAX);
+ __ Bind(&donetest5);
+ __ popq(RAX);
+
+ Label donetest6;
+ __ movq(RAX, Immediate(1));
+ __ shlq(RAX, Immediate(3));
+ __ cmpq(RAX, Immediate(8));
+ __ j(EQUAL, &donetest6);
+ // Be sure to skip this crashing code.
+ __ movq(RAX, Immediate(0));
+ __ movq(Address(RAX, 0), RAX);
+ __ Bind(&donetest6);
+
+ Label donetest7;
+ __ movq(RAX, Immediate(2));
+ __ shrq(RAX, Immediate(1));
+ __ cmpq(RAX, Immediate(1));
+ __ j(EQUAL, &donetest7);
+ // Be sure to skip this crashing code.
+ __ movq(RAX, Immediate(0));
+ __ movq(Address(RAX, 0), RAX);
+ __ Bind(&donetest7);
+
+ Label donetest8;
+ __ movq(RAX, Immediate(8));
+ __ shrq(RAX, Immediate(3));
+ __ cmpq(RAX, Immediate(1));
+ __ j(EQUAL, &donetest8);
+ // Be sure to skip this crashing code.
+ __ movq(RAX, Immediate(0));
+ __ movq(Address(RAX, 0), RAX);
+ __ Bind(&donetest8);
+
+ Label donetest9;
+ __ movq(RAX, Immediate(1));
+ __ movq(RCX, Immediate(3));
+ __ shlq(RAX, RCX);
+ __ cmpq(RAX, Immediate(8));
+ __ j(EQUAL, &donetest9);
+ // Be sure to skip this crashing code.
+ __ movq(RAX, Immediate(0));
+ __ movq(Address(RAX, 0), RAX);
+ __ Bind(&donetest9);
+
+ Label donetest10;
+ __ movq(RAX, Immediate(8));
+ __ movq(RCX, Immediate(3));
+ __ shrq(RAX, RCX);
+ __ cmpq(RAX, Immediate(1));
+ __ j(EQUAL, &donetest10);
+ // Be sure to skip this crashing code.
+ __ movq(RAX, Immediate(0));
+ __ movq(Address(RAX, 0), RAX);
+ __ Bind(&donetest10);
+
+ Label donetest6a;
+ __ movq(RAX, Immediate(1));
+ __ shlq(RAX, Immediate(3));
+ __ cmpq(RAX, Immediate(8));
+ __ j(EQUAL, &donetest6a);
+ // Be sure to skip this crashing code.
+ __ movq(RAX, Immediate(0));
+ __ movq(Address(RAX, 0), RAX);
+ __ Bind(&donetest6a);
+
+ Label donetest7a;
+ __ movq(RAX, Immediate(2));
+ __ shrq(RAX, Immediate(1));
+ __ cmpq(RAX, Immediate(1));
+ __ j(EQUAL, &donetest7a);
+ // Be sure to skip this crashing code.
+ __ movq(RAX, Immediate(0));
+ __ movq(Address(RAX, 0), RAX);
+ __ Bind(&donetest7a);
+
+ Label donetest8a;
+ __ movq(RAX, Immediate(8));
+ __ shrq(RAX, Immediate(3));
+ __ cmpq(RAX, Immediate(1));
+ __ j(EQUAL, &donetest8a);
+ // Be sure to skip this crashing code.
+ __ movq(RAX, Immediate(0));
+ __ movq(Address(RAX, 0), RAX);
+ __ Bind(&donetest8a);
+
+ Label donetest9a;
+ __ movq(RAX, Immediate(1));
+ __ movq(RCX, Immediate(3));
+ __ shlq(RAX, RCX);
+ __ cmpq(RAX, Immediate(8));
+ __ j(EQUAL, &donetest9a);
+ // Be sure to skip this crashing code.
+ __ movq(RAX, Immediate(0));
+ __ movq(Address(RAX, 0), RAX);
+ __ Bind(&donetest9a);
+
+ Label donetest10a;
+ __ movq(RAX, Immediate(8));
+ __ movq(RCX, Immediate(3));
+ __ shrq(RAX, RCX);
+ __ cmpq(RAX, Immediate(1));
+ __ j(EQUAL, &donetest10a);
+ // Be sure to skip this crashing code.
+ __ movq(RAX, Immediate(0));
+ __ movq(Address(RAX, 0), RAX);
+ __ Bind(&donetest10a);
+
+ Label donetest11a;
+ __ movq(RAX, Immediate(1));
+ __ shlq(RAX, Immediate(31));
+ __ shrq(RAX, Immediate(3));
+ __ cmpq(RAX, Immediate(0x10000000));
+ __ j(EQUAL, &donetest11a);
+ // Be sure to skip this crashing code.
+ __ movq(RAX, Immediate(0));
+ __ movq(Address(RAX, 0), RAX);
+ __ Bind(&donetest11a);
+
+ Label donetest12a;
+ __ movq(RAX, Immediate(1));
+ __ shlq(RAX, Immediate(63));
+ __ sarq(RAX, Immediate(3));
+ __ cmpq(RAX, Immediate(0xf000000000000000));
+ __ j(EQUAL, &donetest12a);
+ // Be sure to skip this crashing code.
+ __ movq(RAX, Immediate(0));
+ __ movq(Address(RAX, 0), RAX);
+ __ Bind(&donetest12a);
+
+ Label donetest13a;
+ __ movq(RAX, Immediate(1));
+ __ movq(RCX, Immediate(3));
+ __ shlq(RAX, Immediate(63));
+ __ sarq(RAX, RCX);
+ __ cmpq(RAX, Immediate(0xf000000000000000));
+ __ j(EQUAL, &donetest13a);
+ // Be sure to skip this crashing code.
+ __ movq(RAX, Immediate(0));
+ __ movq(Address(RAX, 0), RAX);
+ __ Bind(&donetest13a);
+
+ __ movq(RAX, Immediate(0));
+ __ ret();
+}
+
+
+ASSEMBLER_TEST_RUN(LogicalOps64, entry) {
+ typedef int (*LogicalOpsCode)();
+ EXPECT_EQ(0, reinterpret_cast<LogicalOpsCode>(entry)());
+}
+
+
ASSEMBLER_TEST_GENERATE(LogicalTestL, assembler) {
Label donetest1;
__ movl(RAX, Immediate(4));
@@ -1250,7 +1488,10 @@
__ movq(RCX, Immediate(3));
__ addq(Address(RSP, 0), RCX);
// TOS: 10
- __ popq(RAX);
+ __ movq(RAX, Immediate(10));
+ __ addq(RAX, Address(RSP, 0));
+ // RAX: 20
+ __ popq(RCX);
__ ret();
}
@@ -1258,7 +1499,7 @@
ASSEMBLER_TEST_RUN(TestAdds, entry) {
typedef int (*TestAdds)();
int res = reinterpret_cast<TestAdds>(entry)();
- EXPECT_EQ(10, res);
+ EXPECT_EQ(20, res);
}
« no previous file with comments | « runtime/vm/assembler_x64.cc ('k') | runtime/vm/intrinsifier_x64.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698