| Index: test/cctest/test-assembler-x64.cc
|
| diff --git a/test/cctest/test-assembler-x64.cc b/test/cctest/test-assembler-x64.cc
|
| index a6490f06cffea951835b236865eed0ac108846f0..f62b86db416de562e7e70f4d3725259a25b87e00 100644
|
| --- a/test/cctest/test-assembler-x64.cc
|
| +++ b/test/cctest/test-assembler-x64.cc
|
| @@ -1411,6 +1411,575 @@ TEST(AssemblerX64AVX_sd) {
|
| }
|
|
|
|
|
| +TEST(AssemblerX64BMI1) {
|
| + CcTest::InitializeVM();
|
| + if (!CpuFeatures::IsSupported(BMI1)) return;
|
| +
|
| + Isolate* isolate = reinterpret_cast<Isolate*>(CcTest::isolate());
|
| + HandleScope scope(isolate);
|
| + v8::internal::byte buffer[1024];
|
| + MacroAssembler assm(isolate, buffer, sizeof buffer);
|
| + {
|
| + CpuFeatureScope fscope(&assm, BMI1);
|
| + Label exit;
|
| +
|
| + __ movq(rcx, V8_UINT64_C(0x1122334455667788)); // source operand
|
| + __ pushq(rcx); // For memory operand
|
| +
|
| + // andn
|
| + __ movq(rdx, V8_UINT64_C(0x1000000020000000));
|
| +
|
| + __ movl(rax, Immediate(1)); // Test number
|
| + __ andnq(r8, rdx, rcx);
|
| + __ movq(r9, V8_UINT64_C(0x0122334455667788)); // expected result
|
| + __ cmpq(r8, r9);
|
| + __ j(not_equal, &exit);
|
| +
|
| + __ incq(rax);
|
| + __ andnq(r8, rdx, Operand(rsp, 0));
|
| + __ movq(r9, V8_UINT64_C(0x0122334455667788)); // expected result
|
| + __ cmpq(r8, r9);
|
| + __ j(not_equal, &exit);
|
| +
|
| + __ incq(rax);
|
| + __ andnl(r8, rdx, rcx);
|
| + __ movq(r9, V8_UINT64_C(0x0000000055667788)); // expected result
|
| + __ cmpq(r8, r9);
|
| + __ j(not_equal, &exit);
|
| +
|
| + __ incq(rax);
|
| + __ andnl(r8, rdx, Operand(rsp, 0));
|
| + __ movq(r9, V8_UINT64_C(0x0000000055667788)); // expected result
|
| + __ cmpq(r8, r9);
|
| + __ j(not_equal, &exit);
|
| +
|
| + // bextr
|
| + __ movq(rdx, V8_UINT64_C(0x0000000000002808));
|
| +
|
| + __ incq(rax);
|
| + __ bextrq(r8, rcx, rdx);
|
| + __ movq(r9, V8_UINT64_C(0x0000003344556677)); // expected result
|
| + __ cmpq(r8, r9);
|
| + __ j(not_equal, &exit);
|
| +
|
| + __ incq(rax);
|
| + __ bextrq(r8, Operand(rsp, 0), rdx);
|
| + __ movq(r9, V8_UINT64_C(0x0000003344556677)); // expected result
|
| + __ cmpq(r8, r9);
|
| + __ j(not_equal, &exit);
|
| +
|
| + __ incq(rax);
|
| + __ bextrl(r8, rcx, rdx);
|
| + __ movq(r9, V8_UINT64_C(0x0000000000556677)); // expected result
|
| + __ cmpq(r8, r9);
|
| + __ j(not_equal, &exit);
|
| +
|
| + __ incq(rax);
|
| + __ bextrl(r8, Operand(rsp, 0), rdx);
|
| + __ movq(r9, V8_UINT64_C(0x0000000000556677)); // expected result
|
| + __ cmpq(r8, r9);
|
| + __ j(not_equal, &exit);
|
| +
|
| + // blsi
|
| + __ incq(rax);
|
| + __ blsiq(r8, rcx);
|
| + __ movq(r9, V8_UINT64_C(0x0000000000000008)); // expected result
|
| + __ cmpq(r8, r9);
|
| + __ j(not_equal, &exit);
|
| +
|
| + __ incq(rax);
|
| + __ blsiq(r8, Operand(rsp, 0));
|
| + __ movq(r9, V8_UINT64_C(0x0000000000000008)); // expected result
|
| + __ cmpq(r8, r9);
|
| + __ j(not_equal, &exit);
|
| +
|
| + __ incq(rax);
|
| + __ blsil(r8, rcx);
|
| + __ movq(r9, V8_UINT64_C(0x0000000000000008)); // expected result
|
| + __ cmpq(r8, r9);
|
| + __ j(not_equal, &exit);
|
| +
|
| + __ incq(rax);
|
| + __ blsil(r8, Operand(rsp, 0));
|
| + __ movq(r9, V8_UINT64_C(0x0000000000000008)); // expected result
|
| + __ cmpq(r8, r9);
|
| + __ j(not_equal, &exit);
|
| +
|
| + // blsmsk
|
| + __ incq(rax);
|
| + __ blsmskq(r8, rcx);
|
| + __ movq(r9, V8_UINT64_C(0x000000000000000f)); // expected result
|
| + __ cmpq(r8, r9);
|
| + __ j(not_equal, &exit);
|
| +
|
| + __ incq(rax);
|
| + __ blsmskq(r8, Operand(rsp, 0));
|
| + __ movq(r9, V8_UINT64_C(0x000000000000000f)); // expected result
|
| + __ cmpq(r8, r9);
|
| + __ j(not_equal, &exit);
|
| +
|
| + __ incq(rax);
|
| + __ blsmskl(r8, rcx);
|
| + __ movq(r9, V8_UINT64_C(0x000000000000000f)); // expected result
|
| + __ cmpq(r8, r9);
|
| + __ j(not_equal, &exit);
|
| +
|
| + __ incq(rax);
|
| + __ blsmskl(r8, Operand(rsp, 0));
|
| + __ movq(r9, V8_UINT64_C(0x000000000000000f)); // expected result
|
| + __ cmpq(r8, r9);
|
| + __ j(not_equal, &exit);
|
| +
|
| + // blsr
|
| + __ incq(rax);
|
| + __ blsrq(r8, rcx);
|
| + __ movq(r9, V8_UINT64_C(0x1122334455667780)); // expected result
|
| + __ cmpq(r8, r9);
|
| + __ j(not_equal, &exit);
|
| +
|
| + __ incq(rax);
|
| + __ blsrq(r8, Operand(rsp, 0));
|
| + __ movq(r9, V8_UINT64_C(0x1122334455667780)); // expected result
|
| + __ cmpq(r8, r9);
|
| + __ j(not_equal, &exit);
|
| +
|
| + __ incq(rax);
|
| + __ blsrl(r8, rcx);
|
| + __ movq(r9, V8_UINT64_C(0x0000000055667780)); // expected result
|
| + __ cmpq(r8, r9);
|
| + __ j(not_equal, &exit);
|
| +
|
| + __ incq(rax);
|
| + __ blsrl(r8, Operand(rsp, 0));
|
| + __ movq(r9, V8_UINT64_C(0x0000000055667780)); // expected result
|
| + __ cmpq(r8, r9);
|
| + __ j(not_equal, &exit);
|
| +
|
| + // tzcnt
|
| + __ incq(rax);
|
| + __ tzcntq(r8, rcx);
|
| + __ movq(r9, V8_UINT64_C(0x0000000000000003)); // expected result
|
| + __ cmpq(r8, r9);
|
| + __ j(not_equal, &exit);
|
| +
|
| + __ incq(rax);
|
| + __ tzcntq(r8, Operand(rsp, 0));
|
| + __ movq(r9, V8_UINT64_C(0x0000000000000003)); // expected result
|
| + __ cmpq(r8, r9);
|
| + __ j(not_equal, &exit);
|
| +
|
| + __ incq(rax);
|
| + __ tzcntl(r8, rcx);
|
| + __ movq(r9, V8_UINT64_C(0x0000000000000003)); // expected result
|
| + __ cmpq(r8, r9);
|
| + __ j(not_equal, &exit);
|
| +
|
| + __ incq(rax);
|
| + __ tzcntl(r8, Operand(rsp, 0));
|
| + __ movq(r9, V8_UINT64_C(0x0000000000000003)); // expected result
|
| + __ cmpq(r8, r9);
|
| + __ j(not_equal, &exit);
|
| +
|
| + __ xorl(rax, rax);
|
| + __ bind(&exit);
|
| + __ popq(rcx);
|
| + __ ret(0);
|
| + }
|
| +
|
| + CodeDesc desc;
|
| + assm.GetCode(&desc);
|
| + Handle<Code> code = isolate->factory()->NewCode(
|
| + desc, Code::ComputeFlags(Code::STUB), Handle<Code>());
|
| +#ifdef OBJECT_PRINT
|
| + OFStream os(stdout);
|
| + code->Print(os);
|
| +#endif
|
| +
|
| + F0 f = FUNCTION_CAST<F0>(code->entry());
|
| + CHECK_EQ(0, f());
|
| +}
|
| +
|
| +
|
| +TEST(AssemblerX64LZCNT) {
|
| + CcTest::InitializeVM();
|
| + if (!CpuFeatures::IsSupported(LZCNT)) return;
|
| +
|
| + Isolate* isolate = reinterpret_cast<Isolate*>(CcTest::isolate());
|
| + HandleScope scope(isolate);
|
| + v8::internal::byte buffer[256];
|
| + MacroAssembler assm(isolate, buffer, sizeof buffer);
|
| + {
|
| + CpuFeatureScope fscope(&assm, LZCNT);
|
| + Label exit;
|
| +
|
| + __ movq(rcx, V8_UINT64_C(0x1122334455667788)); // source operand
|
| + __ pushq(rcx); // For memory operand
|
| +
|
| + __ movl(rax, Immediate(1)); // Test number
|
| + __ lzcntq(r8, rcx);
|
| + __ movq(r9, V8_UINT64_C(0x0000000000000003)); // expected result
|
| + __ cmpq(r8, r9);
|
| + __ j(not_equal, &exit);
|
| +
|
| + __ incq(rax);
|
| + __ lzcntq(r8, Operand(rsp, 0));
|
| + __ movq(r9, V8_UINT64_C(0x0000000000000003)); // expected result
|
| + __ cmpq(r8, r9);
|
| + __ j(not_equal, &exit);
|
| +
|
| + __ incq(rax);
|
| + __ lzcntl(r8, rcx);
|
| + __ movq(r9, V8_UINT64_C(0x0000000000000001)); // expected result
|
| + __ cmpq(r8, r9);
|
| + __ j(not_equal, &exit);
|
| +
|
| + __ incq(rax);
|
| + __ lzcntl(r8, Operand(rsp, 0));
|
| + __ movq(r9, V8_UINT64_C(0x0000000000000001)); // expected result
|
| + __ cmpq(r8, r9);
|
| + __ j(not_equal, &exit);
|
| +
|
| + __ xorl(rax, rax);
|
| + __ bind(&exit);
|
| + __ popq(rcx);
|
| + __ ret(0);
|
| + }
|
| +
|
| + CodeDesc desc;
|
| + assm.GetCode(&desc);
|
| + Handle<Code> code = isolate->factory()->NewCode(
|
| + desc, Code::ComputeFlags(Code::STUB), Handle<Code>());
|
| +#ifdef OBJECT_PRINT
|
| + OFStream os(stdout);
|
| + code->Print(os);
|
| +#endif
|
| +
|
| + F0 f = FUNCTION_CAST<F0>(code->entry());
|
| + CHECK_EQ(0, f());
|
| +}
|
| +
|
| +
|
| +TEST(AssemblerX64POPCNT) {
|
| + CcTest::InitializeVM();
|
| + if (!CpuFeatures::IsSupported(POPCNT)) return;
|
| +
|
| + Isolate* isolate = reinterpret_cast<Isolate*>(CcTest::isolate());
|
| + HandleScope scope(isolate);
|
| + v8::internal::byte buffer[256];
|
| + MacroAssembler assm(isolate, buffer, sizeof buffer);
|
| + {
|
| + CpuFeatureScope fscope(&assm, POPCNT);
|
| + Label exit;
|
| +
|
| + __ movq(rcx, V8_UINT64_C(0x1111111111111100)); // source operand
|
| + __ pushq(rcx); // For memory operand
|
| +
|
| + __ movl(rax, Immediate(1)); // Test number
|
| + __ popcntq(r8, rcx);
|
| + __ movq(r9, V8_UINT64_C(0x000000000000000e)); // expected result
|
| + __ cmpq(r8, r9);
|
| + __ j(not_equal, &exit);
|
| +
|
| + __ incq(rax);
|
| + __ popcntq(r8, Operand(rsp, 0));
|
| + __ movq(r9, V8_UINT64_C(0x000000000000000e)); // expected result
|
| + __ cmpq(r8, r9);
|
| + __ j(not_equal, &exit);
|
| +
|
| + __ incq(rax);
|
| + __ popcntl(r8, rcx);
|
| + __ movq(r9, V8_UINT64_C(0x0000000000000006)); // expected result
|
| + __ cmpq(r8, r9);
|
| + __ j(not_equal, &exit);
|
| +
|
| + __ incq(rax);
|
| + __ popcntl(r8, Operand(rsp, 0));
|
| + __ movq(r9, V8_UINT64_C(0x0000000000000006)); // expected result
|
| + __ cmpq(r8, r9);
|
| + __ j(not_equal, &exit);
|
| +
|
| + __ xorl(rax, rax);
|
| + __ bind(&exit);
|
| + __ popq(rcx);
|
| + __ ret(0);
|
| + }
|
| +
|
| + CodeDesc desc;
|
| + assm.GetCode(&desc);
|
| + Handle<Code> code = isolate->factory()->NewCode(
|
| + desc, Code::ComputeFlags(Code::STUB), Handle<Code>());
|
| +#ifdef OBJECT_PRINT
|
| + OFStream os(stdout);
|
| + code->Print(os);
|
| +#endif
|
| +
|
| + F0 f = FUNCTION_CAST<F0>(code->entry());
|
| + CHECK_EQ(0, f());
|
| +}
|
| +
|
| +
|
| +TEST(AssemblerX64BMI2) {
|
| + CcTest::InitializeVM();
|
| + if (!CpuFeatures::IsSupported(BMI2)) return;
|
| +
|
| + Isolate* isolate = reinterpret_cast<Isolate*>(CcTest::isolate());
|
| + HandleScope scope(isolate);
|
| + v8::internal::byte buffer[2048];
|
| + MacroAssembler assm(isolate, buffer, sizeof buffer);
|
| + {
|
| + CpuFeatureScope fscope(&assm, BMI2);
|
| + Label exit;
|
| + __ pushq(rbx); // save rbx
|
| + __ movq(rcx, V8_UINT64_C(0x1122334455667788)); // source operand
|
| + __ pushq(rcx); // For memory operand
|
| +
|
| + // bzhi
|
| + __ movq(rdx, V8_UINT64_C(0x0000000000000009));
|
| +
|
| + __ movl(rax, Immediate(1)); // Test number
|
| + __ bzhiq(r8, rcx, rdx);
|
| + __ movq(r9, V8_UINT64_C(0x0000000000000188)); // expected result
|
| + __ cmpq(r8, r9);
|
| + __ j(not_equal, &exit);
|
| +
|
| + __ incq(rax);
|
| + __ bzhiq(r8, Operand(rsp, 0), rdx);
|
| + __ movq(r9, V8_UINT64_C(0x0000000000000188)); // expected result
|
| + __ cmpq(r8, r9);
|
| + __ j(not_equal, &exit);
|
| +
|
| + __ incq(rax);
|
| + __ bzhil(r8, rcx, rdx);
|
| + __ movq(r9, V8_UINT64_C(0x0000000000000188)); // expected result
|
| + __ cmpq(r8, r9);
|
| + __ j(not_equal, &exit);
|
| +
|
| + __ incq(rax);
|
| + __ bzhil(r8, Operand(rsp, 0), rdx);
|
| + __ movq(r9, V8_UINT64_C(0x0000000000000188)); // expected result
|
| + __ cmpq(r8, r9);
|
| + __ j(not_equal, &exit);
|
| +
|
| + // mulx
|
| + __ movq(rdx, V8_UINT64_C(0x0000000000001000));
|
| +
|
| + __ incq(rax);
|
| + __ mulxq(r8, r9, rcx);
|
| + __ movq(rbx, V8_UINT64_C(0x0000000000000112)); // expected result
|
| + __ cmpq(r8, rbx);
|
| + __ j(not_equal, &exit);
|
| + __ movq(rbx, V8_UINT64_C(0x2334455667788000)); // expected result
|
| + __ cmpq(r9, rbx);
|
| + __ j(not_equal, &exit);
|
| +
|
| + __ incq(rax);
|
| + __ mulxq(r8, r9, Operand(rsp, 0));
|
| + __ movq(rbx, V8_UINT64_C(0x0000000000000112)); // expected result
|
| + __ cmpq(r8, rbx);
|
| + __ j(not_equal, &exit);
|
| + __ movq(rbx, V8_UINT64_C(0x2334455667788000)); // expected result
|
| + __ cmpq(r9, rbx);
|
| + __ j(not_equal, &exit);
|
| +
|
| + __ incq(rax);
|
| + __ mulxl(r8, r9, rcx);
|
| + __ movq(rbx, V8_UINT64_C(0x0000000000000556)); // expected result
|
| + __ cmpq(r8, rbx);
|
| + __ j(not_equal, &exit);
|
| + __ movq(rbx, V8_UINT64_C(0x0000000067788000)); // expected result
|
| + __ cmpq(r9, rbx);
|
| + __ j(not_equal, &exit);
|
| +
|
| + __ incq(rax);
|
| + __ mulxl(r8, r9, Operand(rsp, 0));
|
| + __ movq(rbx, V8_UINT64_C(0x0000000000000556)); // expected result
|
| + __ cmpq(r8, rbx);
|
| + __ j(not_equal, &exit);
|
| + __ movq(rbx, V8_UINT64_C(0x0000000067788000)); // expected result
|
| + __ cmpq(r9, rbx);
|
| + __ j(not_equal, &exit);
|
| +
|
| + // pdep
|
| + __ movq(rdx, V8_UINT64_C(0xfffffffffffffff0));
|
| +
|
| + __ incq(rax);
|
| + __ pdepq(r8, rdx, rcx);
|
| + __ movq(r9, V8_UINT64_C(0x1122334455667400)); // expected result
|
| + __ cmpq(r8, r9);
|
| + __ j(not_equal, &exit);
|
| +
|
| + __ incq(rax);
|
| + __ pdepq(r8, rdx, Operand(rsp, 0));
|
| + __ movq(r9, V8_UINT64_C(0x1122334455667400)); // expected result
|
| + __ cmpq(r8, r9);
|
| + __ j(not_equal, &exit);
|
| +
|
| + __ incq(rax);
|
| + __ pdepl(r8, rdx, rcx);
|
| + __ movq(r9, V8_UINT64_C(0x0000000055667400)); // expected result
|
| + __ cmpq(r8, r9);
|
| + __ j(not_equal, &exit);
|
| +
|
| + __ incq(rax);
|
| + __ pdepl(r8, rdx, Operand(rsp, 0));
|
| + __ movq(r9, V8_UINT64_C(0x0000000055667400)); // expected result
|
| + __ cmpq(r8, r9);
|
| + __ j(not_equal, &exit);
|
| +
|
| + // pext
|
| + __ movq(rdx, V8_UINT64_C(0xfffffffffffffff0));
|
| +
|
| + __ incq(rax);
|
| + __ pextq(r8, rdx, rcx);
|
| + __ movq(r9, V8_UINT64_C(0x0000000003fffffe)); // expected result
|
| + __ cmpq(r8, r9);
|
| + __ j(not_equal, &exit);
|
| +
|
| + __ incq(rax);
|
| + __ pextq(r8, rdx, Operand(rsp, 0));
|
| + __ movq(r9, V8_UINT64_C(0x0000000003fffffe)); // expected result
|
| + __ cmpq(r8, r9);
|
| + __ j(not_equal, &exit);
|
| +
|
| + __ incq(rax);
|
| + __ pextl(r8, rdx, rcx);
|
| + __ movq(r9, V8_UINT64_C(0x000000000000fffe)); // expected result
|
| + __ cmpq(r8, r9);
|
| + __ j(not_equal, &exit);
|
| +
|
| + __ incq(rax);
|
| + __ pextl(r8, rdx, Operand(rsp, 0));
|
| + __ movq(r9, V8_UINT64_C(0x000000000000fffe)); // expected result
|
| + __ cmpq(r8, r9);
|
| + __ j(not_equal, &exit);
|
| +
|
| + // sarx
|
| + __ movq(rdx, V8_UINT64_C(0x0000000000000004));
|
| +
|
| + __ incq(rax);
|
| + __ sarxq(r8, rcx, rdx);
|
| + __ movq(r9, V8_UINT64_C(0x0112233445566778)); // expected result
|
| + __ cmpq(r8, r9);
|
| + __ j(not_equal, &exit);
|
| +
|
| + __ incq(rax);
|
| + __ sarxq(r8, Operand(rsp, 0), rdx);
|
| + __ movq(r9, V8_UINT64_C(0x0112233445566778)); // expected result
|
| + __ cmpq(r8, r9);
|
| + __ j(not_equal, &exit);
|
| +
|
| + __ incq(rax);
|
| + __ sarxl(r8, rcx, rdx);
|
| + __ movq(r9, V8_UINT64_C(0x0000000005566778)); // expected result
|
| + __ cmpq(r8, r9);
|
| + __ j(not_equal, &exit);
|
| +
|
| + __ incq(rax);
|
| + __ sarxl(r8, Operand(rsp, 0), rdx);
|
| + __ movq(r9, V8_UINT64_C(0x0000000005566778)); // expected result
|
| + __ cmpq(r8, r9);
|
| + __ j(not_equal, &exit);
|
| +
|
| + // shlx
|
| + __ movq(rdx, V8_UINT64_C(0x0000000000000004));
|
| +
|
| + __ incq(rax);
|
| + __ shlxq(r8, rcx, rdx);
|
| + __ movq(r9, V8_UINT64_C(0x1223344556677880)); // expected result
|
| + __ cmpq(r8, r9);
|
| + __ j(not_equal, &exit);
|
| +
|
| + __ incq(rax);
|
| + __ shlxq(r8, Operand(rsp, 0), rdx);
|
| + __ movq(r9, V8_UINT64_C(0x1223344556677880)); // expected result
|
| + __ cmpq(r8, r9);
|
| + __ j(not_equal, &exit);
|
| +
|
| + __ incq(rax);
|
| + __ shlxl(r8, rcx, rdx);
|
| + __ movq(r9, V8_UINT64_C(0x0000000056677880)); // expected result
|
| + __ cmpq(r8, r9);
|
| + __ j(not_equal, &exit);
|
| +
|
| + __ incq(rax);
|
| + __ shlxl(r8, Operand(rsp, 0), rdx);
|
| + __ movq(r9, V8_UINT64_C(0x0000000056677880)); // expected result
|
| + __ cmpq(r8, r9);
|
| + __ j(not_equal, &exit);
|
| +
|
| + // shrx
|
| + __ movq(rdx, V8_UINT64_C(0x0000000000000004));
|
| +
|
| + __ incq(rax);
|
| + __ shrxq(r8, rcx, rdx);
|
| + __ movq(r9, V8_UINT64_C(0x0112233445566778)); // expected result
|
| + __ cmpq(r8, r9);
|
| + __ j(not_equal, &exit);
|
| +
|
| + __ incq(rax);
|
| + __ shrxq(r8, Operand(rsp, 0), rdx);
|
| + __ movq(r9, V8_UINT64_C(0x0112233445566778)); // expected result
|
| + __ cmpq(r8, r9);
|
| + __ j(not_equal, &exit);
|
| +
|
| + __ incq(rax);
|
| + __ shrxl(r8, rcx, rdx);
|
| + __ movq(r9, V8_UINT64_C(0x0000000005566778)); // expected result
|
| + __ cmpq(r8, r9);
|
| + __ j(not_equal, &exit);
|
| +
|
| + __ incq(rax);
|
| + __ shrxl(r8, Operand(rsp, 0), rdx);
|
| + __ movq(r9, V8_UINT64_C(0x0000000005566778)); // expected result
|
| + __ cmpq(r8, r9);
|
| + __ j(not_equal, &exit);
|
| +
|
| + // rorx
|
| + __ incq(rax);
|
| + __ rorxq(r8, rcx, 0x4);
|
| + __ movq(r9, V8_UINT64_C(0x8112233445566778)); // expected result
|
| + __ cmpq(r8, r9);
|
| + __ j(not_equal, &exit);
|
| +
|
| + __ incq(rax);
|
| + __ rorxq(r8, Operand(rsp, 0), 0x4);
|
| + __ movq(r9, V8_UINT64_C(0x8112233445566778)); // expected result
|
| + __ cmpq(r8, r9);
|
| + __ j(not_equal, &exit);
|
| +
|
| + __ incq(rax);
|
| + __ rorxl(r8, rcx, 0x4);
|
| + __ movq(r9, V8_UINT64_C(0x0000000085566778)); // expected result
|
| + __ cmpq(r8, r9);
|
| + __ j(not_equal, &exit);
|
| +
|
| + __ incq(rax);
|
| + __ rorxl(r8, Operand(rsp, 0), 0x4);
|
| + __ movq(r9, V8_UINT64_C(0x0000000085566778)); // expected result
|
| + __ cmpq(r8, r9);
|
| + __ j(not_equal, &exit);
|
| +
|
| + __ xorl(rax, rax);
|
| + __ bind(&exit);
|
| + __ popq(rcx);
|
| + __ popq(rbx);
|
| + __ ret(0);
|
| + }
|
| +
|
| + CodeDesc desc;
|
| + assm.GetCode(&desc);
|
| + Handle<Code> code = isolate->factory()->NewCode(
|
| + desc, Code::ComputeFlags(Code::STUB), Handle<Code>());
|
| +#ifdef OBJECT_PRINT
|
| + OFStream os(stdout);
|
| + code->Print(os);
|
| +#endif
|
| +
|
| + F0 f = FUNCTION_CAST<F0>(code->entry());
|
| + CHECK_EQ(0, f());
|
| +}
|
| +
|
| +
|
| TEST(AssemblerX64JumpTables1) {
|
| // Test jump tables with forward jumps.
|
| CcTest::InitializeVM();
|
|
|