Chromium Code Reviews| Index: runtime/vm/assembler_x64_test.cc |
| =================================================================== |
| --- runtime/vm/assembler_x64_test.cc (revision 41040) |
| +++ runtime/vm/assembler_x64_test.cc (working copy) |
| @@ -386,6 +386,21 @@ |
| } |
| +ASSEMBLER_TEST_GENERATE(UnsignedMultiply, assembler) { |
| + __ movl(RAX, Immediate(-1)); |
| + __ movl(RCX, Immediate(16)); |
| + __ mull(RCX); |
|
zra
2014/10/10 16:23:43
A comment about what is going on here might be goo
regis
2014/10/10 19:15:47
Done.
|
| + __ movq(RAX, RDX); |
| + __ ret(); |
| +} |
| + |
| + |
| +ASSEMBLER_TEST_RUN(UnsignedMultiply, test) { |
| + typedef int (*UnsignedMultiply)(); |
| + EXPECT_EQ(15, reinterpret_cast<UnsignedMultiply>(test->entry())()); |
| +} |
| + |
| + |
| ASSEMBLER_TEST_GENERATE(SignedMultiply64, assembler) { |
| __ pushq(R15); // Callee saved. |
| __ movq(RAX, Immediate(2)); |
| @@ -508,6 +523,21 @@ |
| } |
| +ASSEMBLER_TEST_GENERATE(UnsignedDivide, assembler) { |
| + __ movl(RAX, Immediate(0x0)); |
| + __ movl(RDX, Immediate(0xfffffffff0000000)); |
|
zra
2014/10/10 16:23:43
movq? Can you really give such a big immediate to
regis
2014/10/10 19:15:47
If you do not specify the high bits, the value is
|
| + __ movl(RCX, Immediate(-1)); |
| + __ divl(RCX); |
|
zra
2014/10/10 16:23:43
A comment here too.
regis
2014/10/10 19:15:47
ditto
|
| + __ ret(); |
| +} |
| + |
| + |
| +ASSEMBLER_TEST_RUN(UnsignedDivide, test) { |
| + typedef uint32_t (*UnsignedDivide)(); |
| + EXPECT_EQ(0xF0000000, reinterpret_cast<UnsignedDivide>(test->entry())()); |
| +} |
| + |
| + |
| ASSEMBLER_TEST_GENERATE(SignedDivideLong, assembler) { |
| __ movq(RAX, Immediate(kLargeConstant)); |
| __ movq(RDX, Immediate(123)); |
| @@ -905,6 +935,17 @@ |
| __ movl(Address(RAX, 0), RAX); |
| __ Bind(&donetest13a); |
| + Label donetest15a; |
| + __ movl(RDX, Immediate(0xffffffffff000000)); |
|
zra
2014/10/10 16:23:43
Same question in the sequence with l vs. q version
regis
2014/10/10 19:15:47
ditto
|
| + __ movl(RAX, Immediate(-1)); |
| + __ movl(RCX, Immediate(2)); |
| + __ shll(RDX, RCX); |
| + __ shldl(RDX, RAX, Immediate(2)); |
|
zra
2014/10/10 16:23:43
A comment here.
regis
2014/10/10 19:15:47
Done.
|
| + __ cmpl(RDX, Immediate(0xfffffffff0000003)); |
| + __ j(EQUAL, &donetest15a); |
| + __ int3(); |
| + __ Bind(&donetest15a); |
| + |
| __ movl(RAX, Immediate(0)); |
| __ ret(); |
| } |