Revision f230a1cf deps/v8/test/cctest/test-macro-assembler-x64.cc
deps/v8/test/cctest/test-macro-assembler-x64.cc | ||
---|---|---|
47 | 47 |
using v8::internal::OS; |
48 | 48 |
using v8::internal::Operand; |
49 | 49 |
using v8::internal::RelocInfo; |
50 |
using v8::internal::Representation; |
|
50 | 51 |
using v8::internal::Smi; |
51 | 52 |
using v8::internal::SmiIndex; |
52 | 53 |
using v8::internal::byte; |
... | ... | |
141 | 142 |
|
142 | 143 |
static void TestMoveSmi(MacroAssembler* masm, Label* exit, int id, Smi* value) { |
143 | 144 |
__ movl(rax, Immediate(id)); |
144 |
__ Move(rcx, Smi::FromInt(0));
|
|
145 |
__ Set(rdx, reinterpret_cast<intptr_t>(Smi::FromInt(0)));
|
|
145 |
__ Move(rcx, value);
|
|
146 |
__ Set(rdx, reinterpret_cast<intptr_t>(value));
|
|
146 | 147 |
__ cmpq(rcx, rdx); |
147 | 148 |
__ j(not_equal, exit); |
148 | 149 |
} |
... | ... | |
157 | 158 |
&actual_size, |
158 | 159 |
true)); |
159 | 160 |
CHECK(buffer); |
160 |
Isolate* isolate = Isolate::Current();
|
|
161 |
Isolate* isolate = CcTest::i_isolate();
|
|
161 | 162 |
HandleScope handles(isolate); |
162 | 163 |
MacroAssembler assembler(isolate, buffer, static_cast<int>(actual_size)); |
163 | 164 |
MacroAssembler* masm = &assembler; // Create a pointer for the __ macro. |
... | ... | |
246 | 247 |
&actual_size, |
247 | 248 |
true)); |
248 | 249 |
CHECK(buffer); |
249 |
Isolate* isolate = Isolate::Current();
|
|
250 |
Isolate* isolate = CcTest::i_isolate();
|
|
250 | 251 |
HandleScope handles(isolate); |
251 | 252 |
MacroAssembler assembler(isolate, buffer, static_cast<int>(actual_size)); |
252 | 253 |
|
... | ... | |
297 | 298 |
&actual_size, |
298 | 299 |
true)); |
299 | 300 |
CHECK(buffer); |
300 |
Isolate* isolate = Isolate::Current();
|
|
301 |
Isolate* isolate = CcTest::i_isolate();
|
|
301 | 302 |
HandleScope handles(isolate); |
302 | 303 |
MacroAssembler assembler(isolate, buffer, static_cast<int>(actual_size)); |
303 | 304 |
|
... | ... | |
426 | 427 |
&actual_size, |
427 | 428 |
true)); |
428 | 429 |
CHECK(buffer); |
429 |
Isolate* isolate = Isolate::Current();
|
|
430 |
Isolate* isolate = CcTest::i_isolate();
|
|
430 | 431 |
HandleScope handles(isolate); |
431 | 432 |
MacroAssembler assembler(isolate, buffer, static_cast<int>(actual_size)); |
432 | 433 |
|
... | ... | |
471 | 472 |
&actual_size, |
472 | 473 |
true)); |
473 | 474 |
CHECK(buffer); |
474 |
Isolate* isolate = Isolate::Current();
|
|
475 |
Isolate* isolate = CcTest::i_isolate();
|
|
475 | 476 |
HandleScope handles(isolate); |
476 | 477 |
MacroAssembler assembler(isolate, buffer, static_cast<int>(actual_size)); |
477 | 478 |
|
... | ... | |
720 | 721 |
&actual_size, |
721 | 722 |
true)); |
722 | 723 |
CHECK(buffer); |
723 |
Isolate* isolate = Isolate::Current();
|
|
724 |
Isolate* isolate = CcTest::i_isolate();
|
|
724 | 725 |
HandleScope handles(isolate); |
725 | 726 |
MacroAssembler assembler(isolate, buffer, static_cast<int>(actual_size)); |
726 | 727 |
|
... | ... | |
751 | 752 |
} |
752 | 753 |
|
753 | 754 |
|
754 |
|
|
755 |
|
|
756 | 755 |
static void SmiAddTest(MacroAssembler* masm, |
757 | 756 |
Label* exit, |
758 | 757 |
int id, |
... | ... | |
802 | 801 |
} |
803 | 802 |
|
804 | 803 |
|
804 |
static void SmiAddOverflowTest(MacroAssembler* masm, |
|
805 |
Label* exit, |
|
806 |
int id, |
|
807 |
int x) { |
|
808 |
// Adds a Smi to x so that the addition overflows. |
|
809 |
ASSERT(x != 0); // Can't overflow by adding a Smi. |
|
810 |
int y_max = (x > 0) ? (Smi::kMaxValue + 0) : (Smi::kMinValue - x - 1); |
|
811 |
int y_min = (x > 0) ? (Smi::kMaxValue - x + 1) : (Smi::kMinValue + 0); |
|
812 |
|
|
813 |
__ movl(rax, Immediate(id)); |
|
814 |
__ Move(rcx, Smi::FromInt(x)); |
|
815 |
__ movq(r11, rcx); // Store original Smi value of x in r11. |
|
816 |
__ Move(rdx, Smi::FromInt(y_min)); |
|
817 |
{ |
|
818 |
Label overflow_ok; |
|
819 |
__ SmiAdd(r9, rcx, rdx, &overflow_ok); |
|
820 |
__ jmp(exit); |
|
821 |
__ bind(&overflow_ok); |
|
822 |
__ incq(rax); |
|
823 |
__ cmpq(rcx, r11); |
|
824 |
__ j(not_equal, exit); |
|
825 |
} |
|
826 |
|
|
827 |
{ |
|
828 |
Label overflow_ok; |
|
829 |
__ incq(rax); |
|
830 |
__ SmiAdd(rcx, rcx, rdx, &overflow_ok); |
|
831 |
__ jmp(exit); |
|
832 |
__ bind(&overflow_ok); |
|
833 |
__ incq(rax); |
|
834 |
__ cmpq(rcx, r11); |
|
835 |
__ j(not_equal, exit); |
|
836 |
} |
|
837 |
|
|
838 |
__ movq(rcx, r11); |
|
839 |
{ |
|
840 |
Label overflow_ok; |
|
841 |
__ incq(rax); |
|
842 |
__ SmiAddConstant(r9, rcx, Smi::FromInt(y_min), &overflow_ok); |
|
843 |
__ jmp(exit); |
|
844 |
__ bind(&overflow_ok); |
|
845 |
__ incq(rax); |
|
846 |
__ cmpq(rcx, r11); |
|
847 |
__ j(not_equal, exit); |
|
848 |
} |
|
849 |
|
|
850 |
{ |
|
851 |
Label overflow_ok; |
|
852 |
__ incq(rax); |
|
853 |
__ SmiAddConstant(rcx, rcx, Smi::FromInt(y_min), &overflow_ok); |
|
854 |
__ jmp(exit); |
|
855 |
__ bind(&overflow_ok); |
|
856 |
__ incq(rax); |
|
857 |
__ cmpq(rcx, r11); |
|
858 |
__ j(not_equal, exit); |
|
859 |
} |
|
860 |
|
|
861 |
__ Move(rdx, Smi::FromInt(y_max)); |
|
862 |
|
|
863 |
{ |
|
864 |
Label overflow_ok; |
|
865 |
__ incq(rax); |
|
866 |
__ SmiAdd(r9, rcx, rdx, &overflow_ok); |
|
867 |
__ jmp(exit); |
|
868 |
__ bind(&overflow_ok); |
|
869 |
__ incq(rax); |
|
870 |
__ cmpq(rcx, r11); |
|
871 |
__ j(not_equal, exit); |
|
872 |
} |
|
873 |
|
|
874 |
{ |
|
875 |
Label overflow_ok; |
|
876 |
__ incq(rax); |
|
877 |
__ SmiAdd(rcx, rcx, rdx, &overflow_ok); |
|
878 |
__ jmp(exit); |
|
879 |
__ bind(&overflow_ok); |
|
880 |
__ incq(rax); |
|
881 |
__ cmpq(rcx, r11); |
|
882 |
__ j(not_equal, exit); |
|
883 |
} |
|
884 |
|
|
885 |
__ movq(rcx, r11); |
|
886 |
{ |
|
887 |
Label overflow_ok; |
|
888 |
__ incq(rax); |
|
889 |
__ SmiAddConstant(r9, rcx, Smi::FromInt(y_max), &overflow_ok); |
|
890 |
__ jmp(exit); |
|
891 |
__ bind(&overflow_ok); |
|
892 |
__ incq(rax); |
|
893 |
__ cmpq(rcx, r11); |
|
894 |
__ j(not_equal, exit); |
|
895 |
} |
|
896 |
|
|
897 |
{ |
|
898 |
Label overflow_ok; |
|
899 |
__ incq(rax); |
|
900 |
__ SmiAddConstant(rcx, rcx, Smi::FromInt(y_max), &overflow_ok); |
|
901 |
__ jmp(exit); |
|
902 |
__ bind(&overflow_ok); |
|
903 |
__ incq(rax); |
|
904 |
__ cmpq(rcx, r11); |
|
905 |
__ j(not_equal, exit); |
|
906 |
} |
|
907 |
} |
|
908 |
|
|
909 |
|
|
805 | 910 |
TEST(SmiAdd) { |
806 | 911 |
v8::internal::V8::Initialize(NULL); |
807 | 912 |
// Allocate an executable page of memory. |
808 | 913 |
size_t actual_size; |
809 |
byte* buffer = static_cast<byte*>(OS::Allocate(Assembler::kMinimalBufferSize, |
|
810 |
&actual_size, |
|
811 |
true)); |
|
914 |
byte* buffer = |
|
915 |
static_cast<byte*>(OS::Allocate(Assembler::kMinimalBufferSize * 2, |
|
916 |
&actual_size, |
|
917 |
true)); |
|
812 | 918 |
CHECK(buffer); |
813 |
Isolate* isolate = Isolate::Current();
|
|
919 |
Isolate* isolate = CcTest::i_isolate();
|
|
814 | 920 |
HandleScope handles(isolate); |
815 | 921 |
MacroAssembler assembler(isolate, buffer, static_cast<int>(actual_size)); |
816 | 922 |
|
... | ... | |
829 | 935 |
SmiAddTest(masm, &exit, 0x70, Smi::kMaxValue, -5); |
830 | 936 |
SmiAddTest(masm, &exit, 0x80, Smi::kMaxValue, Smi::kMinValue); |
831 | 937 |
|
938 |
SmiAddOverflowTest(masm, &exit, 0x90, -1); |
|
939 |
SmiAddOverflowTest(masm, &exit, 0xA0, 1); |
|
940 |
SmiAddOverflowTest(masm, &exit, 0xB0, 1024); |
|
941 |
SmiAddOverflowTest(masm, &exit, 0xC0, Smi::kMaxValue); |
|
942 |
SmiAddOverflowTest(masm, &exit, 0xD0, -2); |
|
943 |
SmiAddOverflowTest(masm, &exit, 0xE0, -42000); |
|
944 |
SmiAddOverflowTest(masm, &exit, 0xF0, Smi::kMinValue); |
|
945 |
|
|
832 | 946 |
__ xor_(rax, rax); // Success. |
833 | 947 |
__ bind(&exit); |
834 | 948 |
ExitCode(masm); |
... | ... | |
886 | 1000 |
__ j(not_equal, exit); |
887 | 1001 |
} |
888 | 1002 |
|
1003 |
|
|
889 | 1004 |
static void SmiSubOverflowTest(MacroAssembler* masm, |
890 | 1005 |
Label* exit, |
891 | 1006 |
int id, |
... | ... | |
1001 | 1116 |
&actual_size, |
1002 | 1117 |
true)); |
1003 | 1118 |
CHECK(buffer); |
1004 |
Isolate* isolate = Isolate::Current();
|
|
1119 |
Isolate* isolate = CcTest::i_isolate();
|
|
1005 | 1120 |
HandleScope handles(isolate); |
1006 | 1121 |
MacroAssembler assembler(isolate, buffer, static_cast<int>(actual_size)); |
1007 | 1122 |
|
... | ... | |
1092 | 1207 |
&actual_size, |
1093 | 1208 |
true)); |
1094 | 1209 |
CHECK(buffer); |
1095 |
Isolate* isolate = Isolate::Current();
|
|
1210 |
Isolate* isolate = CcTest::i_isolate();
|
|
1096 | 1211 |
HandleScope handles(isolate); |
1097 | 1212 |
MacroAssembler assembler(isolate, buffer, static_cast<int>(actual_size)); |
1098 | 1213 |
|
... | ... | |
1199 | 1314 |
&actual_size, |
1200 | 1315 |
true)); |
1201 | 1316 |
CHECK(buffer); |
1202 |
Isolate* isolate = Isolate::Current();
|
|
1317 |
Isolate* isolate = CcTest::i_isolate();
|
|
1203 | 1318 |
HandleScope handles(isolate); |
1204 | 1319 |
MacroAssembler assembler(isolate, buffer, static_cast<int>(actual_size)); |
1205 | 1320 |
|
... | ... | |
1310 | 1425 |
&actual_size, |
1311 | 1426 |
true)); |
1312 | 1427 |
CHECK(buffer); |
1313 |
Isolate* isolate = Isolate::Current();
|
|
1428 |
Isolate* isolate = CcTest::i_isolate();
|
|
1314 | 1429 |
HandleScope handles(isolate); |
1315 | 1430 |
MacroAssembler assembler(isolate, buffer, static_cast<int>(actual_size)); |
1316 | 1431 |
|
... | ... | |
1408 | 1523 |
&actual_size, |
1409 | 1524 |
true)); |
1410 | 1525 |
CHECK(buffer); |
1411 |
Isolate* isolate = Isolate::Current();
|
|
1526 |
Isolate* isolate = CcTest::i_isolate();
|
|
1412 | 1527 |
HandleScope handles(isolate); |
1413 | 1528 |
MacroAssembler assembler(isolate, buffer, static_cast<int>(actual_size)); |
1414 | 1529 |
|
... | ... | |
1478 | 1593 |
&actual_size, |
1479 | 1594 |
true)); |
1480 | 1595 |
CHECK(buffer); |
1481 |
Isolate* isolate = Isolate::Current();
|
|
1596 |
Isolate* isolate = CcTest::i_isolate();
|
|
1482 | 1597 |
HandleScope handles(isolate); |
1483 | 1598 |
MacroAssembler assembler(isolate, buffer, static_cast<int>(actual_size)); |
1484 | 1599 |
|
... | ... | |
1558 | 1673 |
&actual_size, |
1559 | 1674 |
true)); |
1560 | 1675 |
CHECK(buffer); |
1561 |
Isolate* isolate = Isolate::Current();
|
|
1676 |
Isolate* isolate = CcTest::i_isolate();
|
|
1562 | 1677 |
HandleScope handles(isolate); |
1563 | 1678 |
MacroAssembler assembler(isolate, buffer, static_cast<int>(actual_size)); |
1564 | 1679 |
|
... | ... | |
1640 | 1755 |
&actual_size, |
1641 | 1756 |
true)); |
1642 | 1757 |
CHECK(buffer); |
1643 |
Isolate* isolate = Isolate::Current();
|
|
1758 |
Isolate* isolate = CcTest::i_isolate();
|
|
1644 | 1759 |
HandleScope handles(isolate); |
1645 | 1760 |
MacroAssembler assembler(isolate, buffer, static_cast<int>(actual_size)); |
1646 | 1761 |
|
... | ... | |
1724 | 1839 |
&actual_size, |
1725 | 1840 |
true)); |
1726 | 1841 |
CHECK(buffer); |
1727 |
Isolate* isolate = Isolate::Current();
|
|
1842 |
Isolate* isolate = CcTest::i_isolate();
|
|
1728 | 1843 |
HandleScope handles(isolate); |
1729 | 1844 |
MacroAssembler assembler(isolate, buffer, static_cast<int>(actual_size)); |
1730 | 1845 |
|
... | ... | |
1792 | 1907 |
&actual_size, |
1793 | 1908 |
true)); |
1794 | 1909 |
CHECK(buffer); |
1795 |
Isolate* isolate = Isolate::Current();
|
|
1910 |
Isolate* isolate = CcTest::i_isolate();
|
|
1796 | 1911 |
HandleScope handles(isolate); |
1797 | 1912 |
MacroAssembler assembler(isolate, buffer, static_cast<int>(actual_size)); |
1798 | 1913 |
|
... | ... | |
1889 | 2004 |
&actual_size, |
1890 | 2005 |
true)); |
1891 | 2006 |
CHECK(buffer); |
1892 |
Isolate* isolate = Isolate::Current();
|
|
2007 |
Isolate* isolate = CcTest::i_isolate();
|
|
1893 | 2008 |
HandleScope handles(isolate); |
1894 | 2009 |
MacroAssembler assembler(isolate, buffer, static_cast<int>(actual_size)); |
1895 | 2010 |
|
... | ... | |
1996 | 2111 |
&actual_size, |
1997 | 2112 |
true)); |
1998 | 2113 |
CHECK(buffer); |
1999 |
Isolate* isolate = Isolate::Current();
|
|
2114 |
Isolate* isolate = CcTest::i_isolate();
|
|
2000 | 2115 |
HandleScope handles(isolate); |
2001 | 2116 |
MacroAssembler assembler(isolate, buffer, static_cast<int>(actual_size)); |
2002 | 2117 |
|
... | ... | |
2066 | 2181 |
&actual_size, |
2067 | 2182 |
true)); |
2068 | 2183 |
CHECK(buffer); |
2069 |
Isolate* isolate = Isolate::Current();
|
|
2184 |
Isolate* isolate = CcTest::i_isolate();
|
|
2070 | 2185 |
HandleScope handles(isolate); |
2071 | 2186 |
MacroAssembler assembler(isolate, buffer, static_cast<int>(actual_size)); |
2072 | 2187 |
|
... | ... | |
2131 | 2246 |
&actual_size, |
2132 | 2247 |
true)); |
2133 | 2248 |
CHECK(buffer); |
2134 |
Isolate* isolate = Isolate::Current();
|
|
2249 |
Isolate* isolate = CcTest::i_isolate();
|
|
2135 | 2250 |
HandleScope handles(isolate); |
2136 | 2251 |
MacroAssembler assembler(isolate, buffer, static_cast<int>(actual_size)); |
2137 | 2252 |
|
... | ... | |
2175 | 2290 |
&actual_size, |
2176 | 2291 |
true)); |
2177 | 2292 |
CHECK(buffer); |
2178 |
Isolate* isolate = Isolate::Current();
|
|
2293 |
Isolate* isolate = CcTest::i_isolate();
|
|
2179 | 2294 |
HandleScope handles(isolate); |
2180 | 2295 |
MacroAssembler assembler(isolate, buffer, static_cast<int>(actual_size)); |
2181 | 2296 |
|
... | ... | |
2520 | 2635 |
} |
2521 | 2636 |
|
2522 | 2637 |
|
2638 |
TEST(LoadAndStoreWithRepresentation) { |
|
2639 |
v8::internal::V8::Initialize(NULL); |
|
2640 |
|
|
2641 |
// Allocate an executable page of memory. |
|
2642 |
size_t actual_size; |
|
2643 |
byte* buffer = static_cast<byte*>(OS::Allocate(Assembler::kMinimalBufferSize, |
|
2644 |
&actual_size, |
|
2645 |
true)); |
|
2646 |
CHECK(buffer); |
|
2647 |
Isolate* isolate = CcTest::i_isolate(); |
|
2648 |
HandleScope handles(isolate); |
|
2649 |
MacroAssembler assembler(isolate, buffer, static_cast<int>(actual_size)); |
|
2650 |
MacroAssembler* masm = &assembler; // Create a pointer for the __ macro. |
|
2651 |
masm->set_allow_stub_calls(false); |
|
2652 |
EntryCode(masm); |
|
2653 |
__ subq(rsp, Immediate(1 * kPointerSize)); |
|
2654 |
Label exit; |
|
2655 |
|
|
2656 |
// Test 1. |
|
2657 |
__ movq(rax, Immediate(1)); // Test number. |
|
2658 |
__ movq(Operand(rsp, 0 * kPointerSize), Immediate(0)); |
|
2659 |
__ movq(rcx, Immediate(-1)); |
|
2660 |
__ Store(Operand(rsp, 0 * kPointerSize), rcx, Representation::Byte()); |
|
2661 |
__ movq(rcx, Operand(rsp, 0 * kPointerSize)); |
|
2662 |
__ movl(rdx, Immediate(255)); |
|
2663 |
__ cmpq(rcx, rdx); |
|
2664 |
__ j(not_equal, &exit); |
|
2665 |
__ Load(rdx, Operand(rsp, 0 * kPointerSize), Representation::Byte()); |
|
2666 |
__ cmpq(rcx, rdx); |
|
2667 |
__ j(not_equal, &exit); |
|
2668 |
|
|
2669 |
// Test 2. |
|
2670 |
__ movq(rax, Immediate(2)); // Test number. |
|
2671 |
__ movq(Operand(rsp, 0 * kPointerSize), Immediate(0)); |
|
2672 |
__ Set(rcx, V8_2PART_UINT64_C(0xdeadbeaf, 12345678)); |
|
2673 |
__ Store(Operand(rsp, 0 * kPointerSize), rcx, Representation::Smi()); |
|
2674 |
__ movq(rcx, Operand(rsp, 0 * kPointerSize)); |
|
2675 |
__ Set(rdx, V8_2PART_UINT64_C(0xdeadbeaf, 12345678)); |
|
2676 |
__ cmpq(rcx, rdx); |
|
2677 |
__ j(not_equal, &exit); |
|
2678 |
__ Load(rdx, Operand(rsp, 0 * kPointerSize), Representation::Smi()); |
|
2679 |
__ cmpq(rcx, rdx); |
|
2680 |
__ j(not_equal, &exit); |
|
2681 |
|
|
2682 |
// Test 3. |
|
2683 |
__ movq(rax, Immediate(3)); // Test number. |
|
2684 |
__ movq(Operand(rsp, 0 * kPointerSize), Immediate(0)); |
|
2685 |
__ movq(rcx, Immediate(-1)); |
|
2686 |
__ Store(Operand(rsp, 0 * kPointerSize), rcx, Representation::Integer32()); |
|
2687 |
__ movq(rcx, Operand(rsp, 0 * kPointerSize)); |
|
2688 |
__ movl(rdx, Immediate(-1)); |
|
2689 |
__ cmpq(rcx, rdx); |
|
2690 |
__ j(not_equal, &exit); |
|
2691 |
__ Load(rdx, Operand(rsp, 0 * kPointerSize), Representation::Integer32()); |
|
2692 |
__ cmpq(rcx, rdx); |
|
2693 |
__ j(not_equal, &exit); |
|
2694 |
|
|
2695 |
// Test 4. |
|
2696 |
__ movq(rax, Immediate(4)); // Test number. |
|
2697 |
__ movq(Operand(rsp, 0 * kPointerSize), Immediate(0)); |
|
2698 |
__ movl(rcx, Immediate(0x44332211)); |
|
2699 |
__ Store(Operand(rsp, 0 * kPointerSize), rcx, Representation::HeapObject()); |
|
2700 |
__ movq(rcx, Operand(rsp, 0 * kPointerSize)); |
|
2701 |
__ movl(rdx, Immediate(0x44332211)); |
|
2702 |
__ cmpq(rcx, rdx); |
|
2703 |
__ j(not_equal, &exit); |
|
2704 |
__ Load(rdx, Operand(rsp, 0 * kPointerSize), Representation::HeapObject()); |
|
2705 |
__ cmpq(rcx, rdx); |
|
2706 |
__ j(not_equal, &exit); |
|
2707 |
|
|
2708 |
// Test 5. |
|
2709 |
__ movq(rax, Immediate(5)); // Test number. |
|
2710 |
__ movq(Operand(rsp, 0 * kPointerSize), Immediate(0)); |
|
2711 |
__ Set(rcx, V8_2PART_UINT64_C(0x12345678, deadbeaf)); |
|
2712 |
__ Store(Operand(rsp, 0 * kPointerSize), rcx, Representation::Tagged()); |
|
2713 |
__ movq(rcx, Operand(rsp, 0 * kPointerSize)); |
|
2714 |
__ Set(rdx, V8_2PART_UINT64_C(0x12345678, deadbeaf)); |
|
2715 |
__ cmpq(rcx, rdx); |
|
2716 |
__ j(not_equal, &exit); |
|
2717 |
__ Load(rdx, Operand(rsp, 0 * kPointerSize), Representation::Tagged()); |
|
2718 |
__ cmpq(rcx, rdx); |
|
2719 |
__ j(not_equal, &exit); |
|
2720 |
|
|
2721 |
// Test 6. |
|
2722 |
__ movq(rax, Immediate(6)); // Test number. |
|
2723 |
__ movq(Operand(rsp, 0 * kPointerSize), Immediate(0)); |
|
2724 |
__ Set(rcx, V8_2PART_UINT64_C(0x11223344, 55667788)); |
|
2725 |
__ Store(Operand(rsp, 0 * kPointerSize), rcx, Representation::External()); |
|
2726 |
__ movq(rcx, Operand(rsp, 0 * kPointerSize)); |
|
2727 |
__ Set(rdx, V8_2PART_UINT64_C(0x11223344, 55667788)); |
|
2728 |
__ cmpq(rcx, rdx); |
|
2729 |
__ j(not_equal, &exit); |
|
2730 |
__ Load(rdx, Operand(rsp, 0 * kPointerSize), Representation::External()); |
|
2731 |
__ cmpq(rcx, rdx); |
|
2732 |
__ j(not_equal, &exit); |
|
2733 |
|
|
2734 |
__ xor_(rax, rax); // Success. |
|
2735 |
__ bind(&exit); |
|
2736 |
__ addq(rsp, Immediate(1 * kPointerSize)); |
|
2737 |
ExitCode(masm); |
|
2738 |
__ ret(0); |
|
2739 |
|
|
2740 |
CodeDesc desc; |
|
2741 |
masm->GetCode(&desc); |
|
2742 |
// Call the function from C++. |
|
2743 |
int result = FUNCTION_CAST<F0>(buffer)(); |
|
2744 |
CHECK_EQ(0, result); |
|
2745 |
} |
|
2746 |
|
|
2523 | 2747 |
|
2524 | 2748 |
#undef __ |
Also available in: Unified diff