OLD | NEW |
1 // Copyright 2012 the V8 project authors. All rights reserved. | 1 // Copyright 2012 the V8 project authors. All rights reserved. |
2 // Redistribution and use in source and binary forms, with or without | 2 // Redistribution and use in source and binary forms, with or without |
3 // modification, are permitted provided that the following conditions are | 3 // modification, are permitted provided that the following conditions are |
4 // met: | 4 // met: |
5 // | 5 // |
6 // * Redistributions of source code must retain the above copyright | 6 // * Redistributions of source code must retain the above copyright |
7 // notice, this list of conditions and the following disclaimer. | 7 // notice, this list of conditions and the following disclaimer. |
8 // * Redistributions in binary form must reproduce the above | 8 // * Redistributions in binary form must reproduce the above |
9 // copyright notice, this list of conditions and the following | 9 // copyright notice, this list of conditions and the following |
10 // disclaimer in the documentation and/or other materials provided | 10 // disclaimer in the documentation and/or other materials provided |
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
53 // clang-format off | 53 // clang-format off |
54 | 54 |
55 | 55 |
56 #define __ assm. | 56 #define __ assm. |
57 | 57 |
58 TEST(MIPS0) { | 58 TEST(MIPS0) { |
59 CcTest::InitializeVM(); | 59 CcTest::InitializeVM(); |
60 Isolate* isolate = CcTest::i_isolate(); | 60 Isolate* isolate = CcTest::i_isolate(); |
61 HandleScope scope(isolate); | 61 HandleScope scope(isolate); |
62 | 62 |
63 MacroAssembler assm(isolate, NULL, 0); | 63 MacroAssembler assm(isolate, NULL, 0, v8::internal::CodeObjectRequired::kYes); |
64 | 64 |
65 // Addition. | 65 // Addition. |
66 __ addu(v0, a0, a1); | 66 __ addu(v0, a0, a1); |
67 __ jr(ra); | 67 __ jr(ra); |
68 __ nop(); | 68 __ nop(); |
69 | 69 |
70 CodeDesc desc; | 70 CodeDesc desc; |
71 assm.GetCode(&desc); | 71 assm.GetCode(&desc); |
72 Handle<Code> code = isolate->factory()->NewCode( | 72 Handle<Code> code = isolate->factory()->NewCode( |
73 desc, Code::ComputeFlags(Code::STUB), Handle<Code>()); | 73 desc, Code::ComputeFlags(Code::STUB), Handle<Code>()); |
74 F2 f = FUNCTION_CAST<F2>(code->entry()); | 74 F2 f = FUNCTION_CAST<F2>(code->entry()); |
75 int64_t res = reinterpret_cast<int64_t>( | 75 int64_t res = reinterpret_cast<int64_t>( |
76 CALL_GENERATED_CODE(isolate, f, 0xab0, 0xc, 0, 0, 0)); | 76 CALL_GENERATED_CODE(isolate, f, 0xab0, 0xc, 0, 0, 0)); |
77 CHECK_EQ(0xabcL, res); | 77 CHECK_EQ(0xabcL, res); |
78 } | 78 } |
79 | 79 |
80 | 80 |
81 TEST(MIPS1) { | 81 TEST(MIPS1) { |
82 CcTest::InitializeVM(); | 82 CcTest::InitializeVM(); |
83 Isolate* isolate = CcTest::i_isolate(); | 83 Isolate* isolate = CcTest::i_isolate(); |
84 HandleScope scope(isolate); | 84 HandleScope scope(isolate); |
85 | 85 |
86 MacroAssembler assm(isolate, NULL, 0); | 86 MacroAssembler assm(isolate, NULL, 0, v8::internal::CodeObjectRequired::kYes); |
87 Label L, C; | 87 Label L, C; |
88 | 88 |
89 __ mov(a1, a0); | 89 __ mov(a1, a0); |
90 __ li(v0, 0); | 90 __ li(v0, 0); |
91 __ b(&C); | 91 __ b(&C); |
92 __ nop(); | 92 __ nop(); |
93 | 93 |
94 __ bind(&L); | 94 __ bind(&L); |
95 __ addu(v0, v0, a1); | 95 __ addu(v0, v0, a1); |
96 __ addiu(a1, a1, -1); | 96 __ addiu(a1, a1, -1); |
(...skipping 15 matching lines...) Expand all Loading... |
112 CALL_GENERATED_CODE(isolate, f, 50, 0, 0, 0, 0)); | 112 CALL_GENERATED_CODE(isolate, f, 50, 0, 0, 0, 0)); |
113 CHECK_EQ(1275L, res); | 113 CHECK_EQ(1275L, res); |
114 } | 114 } |
115 | 115 |
116 | 116 |
117 TEST(MIPS2) { | 117 TEST(MIPS2) { |
118 CcTest::InitializeVM(); | 118 CcTest::InitializeVM(); |
119 Isolate* isolate = CcTest::i_isolate(); | 119 Isolate* isolate = CcTest::i_isolate(); |
120 HandleScope scope(isolate); | 120 HandleScope scope(isolate); |
121 | 121 |
122 MacroAssembler assm(isolate, NULL, 0); | 122 MacroAssembler assm(isolate, NULL, 0, v8::internal::CodeObjectRequired::kYes); |
123 | 123 |
124 Label exit, error; | 124 Label exit, error; |
125 | 125 |
126 // ----- Test all instructions. | 126 // ----- Test all instructions. |
127 | 127 |
128 // Test lui, ori, and addiu, used in the li pseudo-instruction. | 128 // Test lui, ori, and addiu, used in the li pseudo-instruction. |
129 // This way we can then safely load registers with chosen values. | 129 // This way we can then safely load registers with chosen values. |
130 | 130 |
131 __ ori(a4, zero_reg, 0); | 131 __ ori(a4, zero_reg, 0); |
132 __ lui(a4, 0x1234); | 132 __ lui(a4, 0x1234); |
(...skipping 149 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
282 float fc; | 282 float fc; |
283 float fd; | 283 float fd; |
284 float fe; | 284 float fe; |
285 float ff; | 285 float ff; |
286 float fg; | 286 float fg; |
287 } T; | 287 } T; |
288 T t; | 288 T t; |
289 | 289 |
290 // Create a function that accepts &t, and loads, manipulates, and stores | 290 // Create a function that accepts &t, and loads, manipulates, and stores |
291 // the doubles t.a ... t.f. | 291 // the doubles t.a ... t.f. |
292 MacroAssembler assm(isolate, NULL, 0); | 292 MacroAssembler assm(isolate, NULL, 0, v8::internal::CodeObjectRequired::kYes); |
293 Label L, C; | 293 Label L, C; |
294 | 294 |
295 // Double precision floating point instructions. | 295 // Double precision floating point instructions. |
296 __ ldc1(f4, MemOperand(a0, offsetof(T, a)) ); | 296 __ ldc1(f4, MemOperand(a0, offsetof(T, a)) ); |
297 __ ldc1(f6, MemOperand(a0, offsetof(T, b)) ); | 297 __ ldc1(f6, MemOperand(a0, offsetof(T, b)) ); |
298 __ add_d(f8, f4, f6); | 298 __ add_d(f8, f4, f6); |
299 __ sdc1(f8, MemOperand(a0, offsetof(T, c)) ); // c = a + b. | 299 __ sdc1(f8, MemOperand(a0, offsetof(T, c)) ); // c = a + b. |
300 | 300 |
301 __ mov_d(f10, f8); // c | 301 __ mov_d(f10, f8); // c |
302 __ neg_d(f12, f6); // -b | 302 __ neg_d(f12, f6); // -b |
(...skipping 318 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
621 double c; | 621 double c; |
622 double d; | 622 double d; |
623 double e; | 623 double e; |
624 double f; | 624 double f; |
625 int32_t result; | 625 int32_t result; |
626 } T; | 626 } T; |
627 T t; | 627 T t; |
628 | 628 |
629 // Create a function that accepts &t, and loads, manipulates, and stores | 629 // Create a function that accepts &t, and loads, manipulates, and stores |
630 // the doubles t.a ... t.f. | 630 // the doubles t.a ... t.f. |
631 MacroAssembler assm(isolate, NULL, 0); | 631 MacroAssembler assm(isolate, NULL, 0, v8::internal::CodeObjectRequired::kYes); |
632 Label neither_is_nan, less_than, outa_here; | 632 Label neither_is_nan, less_than, outa_here; |
633 | 633 |
634 __ ldc1(f4, MemOperand(a0, offsetof(T, a)) ); | 634 __ ldc1(f4, MemOperand(a0, offsetof(T, a)) ); |
635 __ ldc1(f6, MemOperand(a0, offsetof(T, b)) ); | 635 __ ldc1(f6, MemOperand(a0, offsetof(T, b)) ); |
636 if (kArchVariant != kMips64r6) { | 636 if (kArchVariant != kMips64r6) { |
637 __ c(UN, D, f4, f6); | 637 __ c(UN, D, f4, f6); |
638 __ bc1f(&neither_is_nan); | 638 __ bc1f(&neither_is_nan); |
639 } else { | 639 } else { |
640 __ cmp(UN, L, f2, f4, f6); | 640 __ cmp(UN, L, f2, f4, f6); |
641 __ bc1eqz(&neither_is_nan, f2); | 641 __ bc1eqz(&neither_is_nan, f2); |
(...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
709 int32_t result_rotrv_4; | 709 int32_t result_rotrv_4; |
710 int32_t result_rotrv_8; | 710 int32_t result_rotrv_8; |
711 int32_t result_rotrv_12; | 711 int32_t result_rotrv_12; |
712 int32_t result_rotrv_16; | 712 int32_t result_rotrv_16; |
713 int32_t result_rotrv_20; | 713 int32_t result_rotrv_20; |
714 int32_t result_rotrv_24; | 714 int32_t result_rotrv_24; |
715 int32_t result_rotrv_28; | 715 int32_t result_rotrv_28; |
716 } T; | 716 } T; |
717 T t; | 717 T t; |
718 | 718 |
719 MacroAssembler assm(isolate, NULL, 0); | 719 MacroAssembler assm(isolate, NULL, 0, |
| 720 v8::internal::CodeObjectRequired::kYes); |
720 | 721 |
721 // Basic word load. | 722 // Basic word load. |
722 __ lw(a4, MemOperand(a0, offsetof(T, input)) ); | 723 __ lw(a4, MemOperand(a0, offsetof(T, input)) ); |
723 | 724 |
724 // ROTR instruction (called through the Ror macro). | 725 // ROTR instruction (called through the Ror macro). |
725 __ Ror(a5, a4, 0x0004); | 726 __ Ror(a5, a4, 0x0004); |
726 __ Ror(a6, a4, 0x0008); | 727 __ Ror(a6, a4, 0x0008); |
727 __ Ror(a7, a4, 0x000c); | 728 __ Ror(a7, a4, 0x000c); |
728 __ Ror(t0, a4, 0x0010); | 729 __ Ror(t0, a4, 0x0010); |
729 __ Ror(t1, a4, 0x0014); | 730 __ Ror(t1, a4, 0x0014); |
(...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
793 } | 794 } |
794 } | 795 } |
795 | 796 |
796 | 797 |
797 TEST(MIPS9) { | 798 TEST(MIPS9) { |
798 // Test BRANCH improvements. | 799 // Test BRANCH improvements. |
799 CcTest::InitializeVM(); | 800 CcTest::InitializeVM(); |
800 Isolate* isolate = CcTest::i_isolate(); | 801 Isolate* isolate = CcTest::i_isolate(); |
801 HandleScope scope(isolate); | 802 HandleScope scope(isolate); |
802 | 803 |
803 MacroAssembler assm(isolate, NULL, 0); | 804 MacroAssembler assm(isolate, NULL, 0, v8::internal::CodeObjectRequired::kYes); |
804 Label exit, exit2, exit3; | 805 Label exit, exit2, exit3; |
805 | 806 |
806 __ Branch(&exit, ge, a0, Operand(zero_reg)); | 807 __ Branch(&exit, ge, a0, Operand(zero_reg)); |
807 __ Branch(&exit2, ge, a0, Operand(0x00001FFF)); | 808 __ Branch(&exit2, ge, a0, Operand(0x00001FFF)); |
808 __ Branch(&exit3, ge, a0, Operand(0x0001FFFF)); | 809 __ Branch(&exit3, ge, a0, Operand(0x0001FFFF)); |
809 | 810 |
810 __ bind(&exit); | 811 __ bind(&exit); |
811 __ bind(&exit2); | 812 __ bind(&exit2); |
812 __ bind(&exit3); | 813 __ bind(&exit3); |
813 __ jr(ra); | 814 __ jr(ra); |
(...skipping 276 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1090 typedef struct { | 1091 typedef struct { |
1091 int32_t x; | 1092 int32_t x; |
1092 int32_t y; | 1093 int32_t y; |
1093 int32_t y1; | 1094 int32_t y1; |
1094 int32_t y2; | 1095 int32_t y2; |
1095 int32_t y3; | 1096 int32_t y3; |
1096 int32_t y4; | 1097 int32_t y4; |
1097 } T; | 1098 } T; |
1098 T t; | 1099 T t; |
1099 | 1100 |
1100 MacroAssembler assm(isolate, NULL, 0); | 1101 MacroAssembler assm(isolate, NULL, 0, v8::internal::CodeObjectRequired::kYes); |
1101 | 1102 |
1102 __ mov(t2, fp); // Save frame pointer. | 1103 __ mov(t2, fp); // Save frame pointer. |
1103 __ mov(fp, a0); // Access struct T by fp. | 1104 __ mov(fp, a0); // Access struct T by fp. |
1104 __ lw(a4, MemOperand(a0, offsetof(T, y))); | 1105 __ lw(a4, MemOperand(a0, offsetof(T, y))); |
1105 __ lw(a7, MemOperand(a0, offsetof(T, y4))); | 1106 __ lw(a7, MemOperand(a0, offsetof(T, y4))); |
1106 | 1107 |
1107 __ addu(a5, a4, a7); | 1108 __ addu(a5, a4, a7); |
1108 __ subu(t0, a4, a7); | 1109 __ subu(t0, a4, a7); |
1109 __ nop(); | 1110 __ nop(); |
1110 __ push(a4); // These instructions disappear after opt. | 1111 __ push(a4); // These instructions disappear after opt. |
(...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1179 typedef struct { | 1180 typedef struct { |
1180 double cvt_big_out; | 1181 double cvt_big_out; |
1181 double cvt_small_out; | 1182 double cvt_small_out; |
1182 uint32_t trunc_big_out; | 1183 uint32_t trunc_big_out; |
1183 uint32_t trunc_small_out; | 1184 uint32_t trunc_small_out; |
1184 uint32_t cvt_big_in; | 1185 uint32_t cvt_big_in; |
1185 uint32_t cvt_small_in; | 1186 uint32_t cvt_small_in; |
1186 } T; | 1187 } T; |
1187 T t; | 1188 T t; |
1188 | 1189 |
1189 MacroAssembler assm(isolate, NULL, 0); | 1190 MacroAssembler assm(isolate, NULL, 0, v8::internal::CodeObjectRequired::kYes); |
1190 | 1191 |
1191 __ sw(a4, MemOperand(a0, offsetof(T, cvt_small_in))); | 1192 __ sw(a4, MemOperand(a0, offsetof(T, cvt_small_in))); |
1192 __ Cvt_d_uw(f10, a4); | 1193 __ Cvt_d_uw(f10, a4); |
1193 __ sdc1(f10, MemOperand(a0, offsetof(T, cvt_small_out))); | 1194 __ sdc1(f10, MemOperand(a0, offsetof(T, cvt_small_out))); |
1194 | 1195 |
1195 __ Trunc_uw_d(f10, f10, f4); | 1196 __ Trunc_uw_d(f10, f10, f4); |
1196 __ swc1(f10, MemOperand(a0, offsetof(T, trunc_small_out))); | 1197 __ swc1(f10, MemOperand(a0, offsetof(T, trunc_small_out))); |
1197 | 1198 |
1198 __ sw(a4, MemOperand(a0, offsetof(T, cvt_big_in))); | 1199 __ sw(a4, MemOperand(a0, offsetof(T, cvt_big_in))); |
1199 __ Cvt_d_uw(f8, a4); | 1200 __ Cvt_d_uw(f8, a4); |
(...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1256 ROUND_STRUCT_ELEMENT(round) | 1257 ROUND_STRUCT_ELEMENT(round) |
1257 ROUND_STRUCT_ELEMENT(floor) | 1258 ROUND_STRUCT_ELEMENT(floor) |
1258 ROUND_STRUCT_ELEMENT(ceil) | 1259 ROUND_STRUCT_ELEMENT(ceil) |
1259 ROUND_STRUCT_ELEMENT(trunc) | 1260 ROUND_STRUCT_ELEMENT(trunc) |
1260 ROUND_STRUCT_ELEMENT(cvt) | 1261 ROUND_STRUCT_ELEMENT(cvt) |
1261 } T; | 1262 } T; |
1262 T t; | 1263 T t; |
1263 | 1264 |
1264 #undef ROUND_STRUCT_ELEMENT | 1265 #undef ROUND_STRUCT_ELEMENT |
1265 | 1266 |
1266 MacroAssembler assm(isolate, NULL, 0); | 1267 MacroAssembler assm(isolate, NULL, 0, v8::internal::CodeObjectRequired::kYes); |
1267 | 1268 |
1268 // Save FCSR. | 1269 // Save FCSR. |
1269 __ cfc1(a1, FCSR); | 1270 __ cfc1(a1, FCSR); |
1270 // Disable FPU exceptions. | 1271 // Disable FPU exceptions. |
1271 __ ctc1(zero_reg, FCSR); | 1272 __ ctc1(zero_reg, FCSR); |
1272 #define RUN_ROUND_TEST(x) \ | 1273 #define RUN_ROUND_TEST(x) \ |
1273 __ ldc1(f0, MemOperand(a0, offsetof(T, round_up_in))); \ | 1274 __ ldc1(f0, MemOperand(a0, offsetof(T, round_up_in))); \ |
1274 __ x##_w_d(f0, f0); \ | 1275 __ x##_w_d(f0, f0); \ |
1275 __ swc1(f0, MemOperand(a0, offsetof(T, x##_up_out))); \ | 1276 __ swc1(f0, MemOperand(a0, offsetof(T, x##_up_out))); \ |
1276 \ | 1277 \ |
(...skipping 195 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1472 CHECK_EQ(static_cast<int64_t>(0x000000003333bbccL), t.r6); | 1473 CHECK_EQ(static_cast<int64_t>(0x000000003333bbccL), t.r6); |
1473 } | 1474 } |
1474 | 1475 |
1475 | 1476 |
1476 // ----------------------mips64r6 specific tests---------------------- | 1477 // ----------------------mips64r6 specific tests---------------------- |
1477 TEST(seleqz_selnez) { | 1478 TEST(seleqz_selnez) { |
1478 if (kArchVariant == kMips64r6) { | 1479 if (kArchVariant == kMips64r6) { |
1479 CcTest::InitializeVM(); | 1480 CcTest::InitializeVM(); |
1480 Isolate* isolate = CcTest::i_isolate(); | 1481 Isolate* isolate = CcTest::i_isolate(); |
1481 HandleScope scope(isolate); | 1482 HandleScope scope(isolate); |
1482 MacroAssembler assm(isolate, NULL, 0); | 1483 MacroAssembler assm(isolate, NULL, 0, |
| 1484 v8::internal::CodeObjectRequired::kYes); |
1483 | 1485 |
1484 typedef struct test { | 1486 typedef struct test { |
1485 int a; | 1487 int a; |
1486 int b; | 1488 int b; |
1487 int c; | 1489 int c; |
1488 int d; | 1490 int d; |
1489 double e; | 1491 double e; |
1490 double f; | 1492 double f; |
1491 double g; | 1493 double g; |
1492 double h; | 1494 double h; |
(...skipping 81 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1574 } | 1576 } |
1575 } | 1577 } |
1576 | 1578 |
1577 | 1579 |
1578 | 1580 |
1579 TEST(min_max) { | 1581 TEST(min_max) { |
1580 if (kArchVariant == kMips64r6) { | 1582 if (kArchVariant == kMips64r6) { |
1581 CcTest::InitializeVM(); | 1583 CcTest::InitializeVM(); |
1582 Isolate* isolate = CcTest::i_isolate(); | 1584 Isolate* isolate = CcTest::i_isolate(); |
1583 HandleScope scope(isolate); | 1585 HandleScope scope(isolate); |
1584 MacroAssembler assm(isolate, NULL, 0); | 1586 MacroAssembler assm(isolate, NULL, 0, |
| 1587 v8::internal::CodeObjectRequired::kYes); |
1585 | 1588 |
1586 typedef struct test_float { | 1589 typedef struct test_float { |
1587 double a; | 1590 double a; |
1588 double b; | 1591 double b; |
1589 double c; | 1592 double c; |
1590 double d; | 1593 double d; |
1591 float e; | 1594 float e; |
1592 float f; | 1595 float f; |
1593 float g; | 1596 float g; |
1594 float h; | 1597 float h; |
(...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1651 } | 1654 } |
1652 } | 1655 } |
1653 | 1656 |
1654 | 1657 |
1655 TEST(rint_d) { | 1658 TEST(rint_d) { |
1656 if (kArchVariant == kMips64r6) { | 1659 if (kArchVariant == kMips64r6) { |
1657 const int kTableLength = 30; | 1660 const int kTableLength = 30; |
1658 CcTest::InitializeVM(); | 1661 CcTest::InitializeVM(); |
1659 Isolate* isolate = CcTest::i_isolate(); | 1662 Isolate* isolate = CcTest::i_isolate(); |
1660 HandleScope scope(isolate); | 1663 HandleScope scope(isolate); |
1661 MacroAssembler assm(isolate, NULL, 0); | 1664 MacroAssembler assm(isolate, NULL, 0, |
| 1665 v8::internal::CodeObjectRequired::kYes); |
1662 | 1666 |
1663 typedef struct test_float { | 1667 typedef struct test_float { |
1664 double a; | 1668 double a; |
1665 double b; | 1669 double b; |
1666 int fcsr; | 1670 int fcsr; |
1667 }TestFloat; | 1671 }TestFloat; |
1668 | 1672 |
1669 TestFloat test; | 1673 TestFloat test; |
1670 double inputs[kTableLength] = {18446744073709551617.0, | 1674 double inputs[kTableLength] = {18446744073709551617.0, |
1671 4503599627370496.0, -4503599627370496.0, | 1675 4503599627370496.0, -4503599627370496.0, |
(...skipping 82 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1754 } | 1758 } |
1755 } | 1759 } |
1756 } | 1760 } |
1757 | 1761 |
1758 | 1762 |
1759 TEST(sel) { | 1763 TEST(sel) { |
1760 if (kArchVariant == kMips64r6) { | 1764 if (kArchVariant == kMips64r6) { |
1761 CcTest::InitializeVM(); | 1765 CcTest::InitializeVM(); |
1762 Isolate* isolate = CcTest::i_isolate(); | 1766 Isolate* isolate = CcTest::i_isolate(); |
1763 HandleScope scope(isolate); | 1767 HandleScope scope(isolate); |
1764 MacroAssembler assm(isolate, NULL, 0); | 1768 MacroAssembler assm(isolate, NULL, 0, |
| 1769 v8::internal::CodeObjectRequired::kYes); |
1765 | 1770 |
1766 typedef struct test { | 1771 typedef struct test { |
1767 double dd; | 1772 double dd; |
1768 double ds; | 1773 double ds; |
1769 double dt; | 1774 double dt; |
1770 float fd; | 1775 float fd; |
1771 float fs; | 1776 float fs; |
1772 float ft; | 1777 float ft; |
1773 } Test; | 1778 } Test; |
1774 | 1779 |
(...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1828 } | 1833 } |
1829 } | 1834 } |
1830 | 1835 |
1831 | 1836 |
1832 TEST(rint_s) { | 1837 TEST(rint_s) { |
1833 if (kArchVariant == kMips64r6) { | 1838 if (kArchVariant == kMips64r6) { |
1834 const int kTableLength = 30; | 1839 const int kTableLength = 30; |
1835 CcTest::InitializeVM(); | 1840 CcTest::InitializeVM(); |
1836 Isolate* isolate = CcTest::i_isolate(); | 1841 Isolate* isolate = CcTest::i_isolate(); |
1837 HandleScope scope(isolate); | 1842 HandleScope scope(isolate); |
1838 MacroAssembler assm(isolate, NULL, 0); | 1843 MacroAssembler assm(isolate, NULL, 0, |
| 1844 v8::internal::CodeObjectRequired::kYes); |
1839 | 1845 |
1840 typedef struct test_float { | 1846 typedef struct test_float { |
1841 float a; | 1847 float a; |
1842 float b; | 1848 float b; |
1843 int fcsr; | 1849 int fcsr; |
1844 }TestFloat; | 1850 }TestFloat; |
1845 | 1851 |
1846 TestFloat test; | 1852 TestFloat test; |
1847 float inputs[kTableLength] = {18446744073709551617.0, | 1853 float inputs[kTableLength] = {18446744073709551617.0, |
1848 4503599627370496.0, -4503599627370496.0, | 1854 4503599627370496.0, -4503599627370496.0, |
(...skipping 85 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1934 } | 1940 } |
1935 } | 1941 } |
1936 | 1942 |
1937 | 1943 |
1938 TEST(mina_maxa) { | 1944 TEST(mina_maxa) { |
1939 if (kArchVariant == kMips64r6) { | 1945 if (kArchVariant == kMips64r6) { |
1940 const int kTableLength = 15; | 1946 const int kTableLength = 15; |
1941 CcTest::InitializeVM(); | 1947 CcTest::InitializeVM(); |
1942 Isolate* isolate = CcTest::i_isolate(); | 1948 Isolate* isolate = CcTest::i_isolate(); |
1943 HandleScope scope(isolate); | 1949 HandleScope scope(isolate); |
1944 MacroAssembler assm(isolate, NULL, 0); | 1950 MacroAssembler assm(isolate, NULL, 0, |
| 1951 v8::internal::CodeObjectRequired::kYes); |
1945 const double double_nan = std::numeric_limits<double>::quiet_NaN(); | 1952 const double double_nan = std::numeric_limits<double>::quiet_NaN(); |
1946 const float float_nan = std::numeric_limits<float>::quiet_NaN(); | 1953 const float float_nan = std::numeric_limits<float>::quiet_NaN(); |
1947 | 1954 |
1948 typedef struct test_float { | 1955 typedef struct test_float { |
1949 double a; | 1956 double a; |
1950 double b; | 1957 double b; |
1951 double resd; | 1958 double resd; |
1952 double resd1; | 1959 double resd1; |
1953 float c; | 1960 float c; |
1954 float d; | 1961 float d; |
(...skipping 78 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2033 } | 2040 } |
2034 | 2041 |
2035 | 2042 |
2036 | 2043 |
2037 // ----------------------mips64r2 specific tests---------------------- | 2044 // ----------------------mips64r2 specific tests---------------------- |
2038 TEST(trunc_l) { | 2045 TEST(trunc_l) { |
2039 if (kArchVariant == kMips64r2) { | 2046 if (kArchVariant == kMips64r2) { |
2040 CcTest::InitializeVM(); | 2047 CcTest::InitializeVM(); |
2041 Isolate* isolate = CcTest::i_isolate(); | 2048 Isolate* isolate = CcTest::i_isolate(); |
2042 HandleScope scope(isolate); | 2049 HandleScope scope(isolate); |
2043 MacroAssembler assm(isolate, NULL, 0); | 2050 MacroAssembler assm(isolate, NULL, 0, |
| 2051 v8::internal::CodeObjectRequired::kYes); |
2044 const double dFPU64InvalidResult = static_cast<double>(kFPU64InvalidResult); | 2052 const double dFPU64InvalidResult = static_cast<double>(kFPU64InvalidResult); |
2045 typedef struct test_float { | 2053 typedef struct test_float { |
2046 double a; | 2054 double a; |
2047 float b; | 2055 float b; |
2048 int64_t c; // a trunc result | 2056 int64_t c; // a trunc result |
2049 int64_t d; // b trunc result | 2057 int64_t d; // b trunc result |
2050 }Test; | 2058 }Test; |
2051 const int kTableLength = 15; | 2059 const int kTableLength = 15; |
2052 double inputs_D[kTableLength] = { | 2060 double inputs_D[kTableLength] = { |
2053 2.1, 2.6, 2.5, 3.1, 3.6, 3.5, | 2061 2.1, 2.6, 2.5, 3.1, 3.6, 3.5, |
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2093 } | 2101 } |
2094 } | 2102 } |
2095 | 2103 |
2096 | 2104 |
2097 TEST(movz_movn) { | 2105 TEST(movz_movn) { |
2098 if (kArchVariant == kMips64r2) { | 2106 if (kArchVariant == kMips64r2) { |
2099 const int kTableLength = 4; | 2107 const int kTableLength = 4; |
2100 CcTest::InitializeVM(); | 2108 CcTest::InitializeVM(); |
2101 Isolate* isolate = CcTest::i_isolate(); | 2109 Isolate* isolate = CcTest::i_isolate(); |
2102 HandleScope scope(isolate); | 2110 HandleScope scope(isolate); |
2103 MacroAssembler assm(isolate, NULL, 0); | 2111 MacroAssembler assm(isolate, NULL, 0, |
| 2112 v8::internal::CodeObjectRequired::kYes); |
2104 | 2113 |
2105 typedef struct test_float { | 2114 typedef struct test_float { |
2106 int64_t rt; | 2115 int64_t rt; |
2107 double a; | 2116 double a; |
2108 double b; | 2117 double b; |
2109 double bold; | 2118 double bold; |
2110 double b1; | 2119 double b1; |
2111 double bold1; | 2120 double bold1; |
2112 float c; | 2121 float c; |
2113 float d; | 2122 float d; |
(...skipping 107 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2221 test.srcf = inputs_S[i]; | 2230 test.srcf = inputs_S[i]; |
2222 | 2231 |
2223 for (int j = 0; j< 8; j++) { | 2232 for (int j = 0; j< 8; j++) { |
2224 test.cc = condition_flags[j]; | 2233 test.cc = condition_flags[j]; |
2225 if (test.cc == 0) { | 2234 if (test.cc == 0) { |
2226 test.fcsr = 1 << 23; | 2235 test.fcsr = 1 << 23; |
2227 } else { | 2236 } else { |
2228 test.fcsr = 1 << (24+condition_flags[j]); | 2237 test.fcsr = 1 << (24+condition_flags[j]); |
2229 } | 2238 } |
2230 HandleScope scope(isolate); | 2239 HandleScope scope(isolate); |
2231 MacroAssembler assm(isolate, NULL, 0); | 2240 MacroAssembler assm(isolate, NULL, 0, |
| 2241 v8::internal::CodeObjectRequired::kYes); |
2232 __ ldc1(f2, MemOperand(a0, offsetof(TestFloat, srcd)) ); | 2242 __ ldc1(f2, MemOperand(a0, offsetof(TestFloat, srcd)) ); |
2233 __ lwc1(f4, MemOperand(a0, offsetof(TestFloat, srcf)) ); | 2243 __ lwc1(f4, MemOperand(a0, offsetof(TestFloat, srcf)) ); |
2234 __ lw(t1, MemOperand(a0, offsetof(TestFloat, fcsr)) ); | 2244 __ lw(t1, MemOperand(a0, offsetof(TestFloat, fcsr)) ); |
2235 __ cfc1(t0, FCSR); | 2245 __ cfc1(t0, FCSR); |
2236 __ ctc1(t1, FCSR); | 2246 __ ctc1(t1, FCSR); |
2237 __ li(t2, 0x0); | 2247 __ li(t2, 0x0); |
2238 __ mtc1(t2, f12); | 2248 __ mtc1(t2, f12); |
2239 __ mtc1(t2, f10); | 2249 __ mtc1(t2, f10); |
2240 __ sdc1(f10, MemOperand(a0, offsetof(TestFloat, dstdold)) ); | 2250 __ sdc1(f10, MemOperand(a0, offsetof(TestFloat, dstdold)) ); |
2241 __ swc1(f12, MemOperand(a0, offsetof(TestFloat, dstfold)) ); | 2251 __ swc1(f12, MemOperand(a0, offsetof(TestFloat, dstfold)) ); |
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2275 } | 2285 } |
2276 } | 2286 } |
2277 | 2287 |
2278 | 2288 |
2279 | 2289 |
2280 // ----------------------tests for all archs-------------------------- | 2290 // ----------------------tests for all archs-------------------------- |
2281 TEST(cvt_w_d) { | 2291 TEST(cvt_w_d) { |
2282 CcTest::InitializeVM(); | 2292 CcTest::InitializeVM(); |
2283 Isolate* isolate = CcTest::i_isolate(); | 2293 Isolate* isolate = CcTest::i_isolate(); |
2284 HandleScope scope(isolate); | 2294 HandleScope scope(isolate); |
2285 MacroAssembler assm(isolate, NULL, 0); | 2295 MacroAssembler assm(isolate, NULL, 0, v8::internal::CodeObjectRequired::kYes); |
2286 | 2296 |
2287 typedef struct test_float { | 2297 typedef struct test_float { |
2288 double a; | 2298 double a; |
2289 int32_t b; | 2299 int32_t b; |
2290 int fcsr; | 2300 int fcsr; |
2291 }Test; | 2301 }Test; |
2292 const int kTableLength = 24; | 2302 const int kTableLength = 24; |
2293 double inputs[kTableLength] = { | 2303 double inputs[kTableLength] = { |
2294 2.1, 2.6, 2.5, 3.1, 3.6, 3.5, | 2304 2.1, 2.6, 2.5, 3.1, 3.6, 3.5, |
2295 -2.1, -2.6, -2.5, -3.1, -3.6, -3.5, | 2305 -2.1, -2.6, -2.5, -3.1, -3.6, -3.5, |
(...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2352 CHECK_EQ(test.b, outputs[j][i]); | 2362 CHECK_EQ(test.b, outputs[j][i]); |
2353 } | 2363 } |
2354 } | 2364 } |
2355 } | 2365 } |
2356 | 2366 |
2357 | 2367 |
2358 TEST(trunc_w) { | 2368 TEST(trunc_w) { |
2359 CcTest::InitializeVM(); | 2369 CcTest::InitializeVM(); |
2360 Isolate* isolate = CcTest::i_isolate(); | 2370 Isolate* isolate = CcTest::i_isolate(); |
2361 HandleScope scope(isolate); | 2371 HandleScope scope(isolate); |
2362 MacroAssembler assm(isolate, NULL, 0); | 2372 MacroAssembler assm(isolate, NULL, 0, v8::internal::CodeObjectRequired::kYes); |
2363 | 2373 |
2364 typedef struct test_float { | 2374 typedef struct test_float { |
2365 double a; | 2375 double a; |
2366 float b; | 2376 float b; |
2367 int32_t c; // a trunc result | 2377 int32_t c; // a trunc result |
2368 int32_t d; // b trunc result | 2378 int32_t d; // b trunc result |
2369 }Test; | 2379 }Test; |
2370 const int kTableLength = 15; | 2380 const int kTableLength = 15; |
2371 double inputs_D[kTableLength] = { | 2381 double inputs_D[kTableLength] = { |
2372 2.1, 2.6, 2.5, 3.1, 3.6, 3.5, | 2382 2.1, 2.6, 2.5, 3.1, 3.6, 3.5, |
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2409 CHECK_EQ(test.c, outputs[i]); | 2419 CHECK_EQ(test.c, outputs[i]); |
2410 CHECK_EQ(test.d, test.c); | 2420 CHECK_EQ(test.d, test.c); |
2411 } | 2421 } |
2412 } | 2422 } |
2413 | 2423 |
2414 | 2424 |
2415 TEST(round_w) { | 2425 TEST(round_w) { |
2416 CcTest::InitializeVM(); | 2426 CcTest::InitializeVM(); |
2417 Isolate* isolate = CcTest::i_isolate(); | 2427 Isolate* isolate = CcTest::i_isolate(); |
2418 HandleScope scope(isolate); | 2428 HandleScope scope(isolate); |
2419 MacroAssembler assm(isolate, NULL, 0); | 2429 MacroAssembler assm(isolate, NULL, 0, v8::internal::CodeObjectRequired::kYes); |
2420 | 2430 |
2421 typedef struct test_float { | 2431 typedef struct test_float { |
2422 double a; | 2432 double a; |
2423 float b; | 2433 float b; |
2424 int32_t c; // a trunc result | 2434 int32_t c; // a trunc result |
2425 int32_t d; // b trunc result | 2435 int32_t d; // b trunc result |
2426 }Test; | 2436 }Test; |
2427 const int kTableLength = 15; | 2437 const int kTableLength = 15; |
2428 double inputs_D[kTableLength] = { | 2438 double inputs_D[kTableLength] = { |
2429 2.1, 2.6, 2.5, 3.1, 3.6, 3.5, | 2439 2.1, 2.6, 2.5, 3.1, 3.6, 3.5, |
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2466 CHECK_EQ(test.c, outputs[i]); | 2476 CHECK_EQ(test.c, outputs[i]); |
2467 CHECK_EQ(test.d, test.c); | 2477 CHECK_EQ(test.d, test.c); |
2468 } | 2478 } |
2469 } | 2479 } |
2470 | 2480 |
2471 | 2481 |
2472 TEST(round_l) { | 2482 TEST(round_l) { |
2473 CcTest::InitializeVM(); | 2483 CcTest::InitializeVM(); |
2474 Isolate* isolate = CcTest::i_isolate(); | 2484 Isolate* isolate = CcTest::i_isolate(); |
2475 HandleScope scope(isolate); | 2485 HandleScope scope(isolate); |
2476 MacroAssembler assm(isolate, NULL, 0); | 2486 MacroAssembler assm(isolate, NULL, 0, |
| 2487 v8::internal::CodeObjectRequired::kYes); |
2477 const double dFPU64InvalidResult = static_cast<double>(kFPU64InvalidResult); | 2488 const double dFPU64InvalidResult = static_cast<double>(kFPU64InvalidResult); |
2478 typedef struct test_float { | 2489 typedef struct test_float { |
2479 double a; | 2490 double a; |
2480 float b; | 2491 float b; |
2481 int64_t c; | 2492 int64_t c; |
2482 int64_t d; | 2493 int64_t d; |
2483 }Test; | 2494 }Test; |
2484 const int kTableLength = 15; | 2495 const int kTableLength = 15; |
2485 double inputs_D[kTableLength] = { | 2496 double inputs_D[kTableLength] = { |
2486 2.1, 2.6, 2.5, 3.1, 3.6, 3.5, | 2497 2.1, 2.6, 2.5, 3.1, 3.6, 3.5, |
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2525 CHECK_EQ(test.d, test.c); | 2536 CHECK_EQ(test.d, test.c); |
2526 } | 2537 } |
2527 } | 2538 } |
2528 | 2539 |
2529 | 2540 |
2530 TEST(sub) { | 2541 TEST(sub) { |
2531 const int kTableLength = 12; | 2542 const int kTableLength = 12; |
2532 CcTest::InitializeVM(); | 2543 CcTest::InitializeVM(); |
2533 Isolate* isolate = CcTest::i_isolate(); | 2544 Isolate* isolate = CcTest::i_isolate(); |
2534 HandleScope scope(isolate); | 2545 HandleScope scope(isolate); |
2535 MacroAssembler assm(isolate, NULL, 0); | 2546 MacroAssembler assm(isolate, NULL, 0, v8::internal::CodeObjectRequired::kYes); |
2536 | 2547 |
2537 typedef struct test_float { | 2548 typedef struct test_float { |
2538 float a; | 2549 float a; |
2539 float b; | 2550 float b; |
2540 float resultS; | 2551 float resultS; |
2541 double c; | 2552 double c; |
2542 double d; | 2553 double d; |
2543 double resultD; | 2554 double resultD; |
2544 }TestFloat; | 2555 }TestFloat; |
2545 | 2556 |
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2598 | 2609 |
2599 TEST(sqrt_rsqrt_recip) { | 2610 TEST(sqrt_rsqrt_recip) { |
2600 const int kTableLength = 4; | 2611 const int kTableLength = 4; |
2601 const double deltaDouble = 2E-15; | 2612 const double deltaDouble = 2E-15; |
2602 const float deltaFloat = 2E-7; | 2613 const float deltaFloat = 2E-7; |
2603 const float sqrt2_s = sqrt(2); | 2614 const float sqrt2_s = sqrt(2); |
2604 const double sqrt2_d = sqrt(2); | 2615 const double sqrt2_d = sqrt(2); |
2605 CcTest::InitializeVM(); | 2616 CcTest::InitializeVM(); |
2606 Isolate* isolate = CcTest::i_isolate(); | 2617 Isolate* isolate = CcTest::i_isolate(); |
2607 HandleScope scope(isolate); | 2618 HandleScope scope(isolate); |
2608 MacroAssembler assm(isolate, NULL, 0); | 2619 MacroAssembler assm(isolate, NULL, 0, v8::internal::CodeObjectRequired::kYes); |
2609 | 2620 |
2610 typedef struct test_float { | 2621 typedef struct test_float { |
2611 float a; | 2622 float a; |
2612 float resultS; | 2623 float resultS; |
2613 float resultS1; | 2624 float resultS1; |
2614 float resultS2; | 2625 float resultS2; |
2615 double c; | 2626 double c; |
2616 double resultD; | 2627 double resultD; |
2617 double resultD1; | 2628 double resultD1; |
2618 double resultD2; | 2629 double resultD2; |
(...skipping 71 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2690 } | 2701 } |
2691 } | 2702 } |
2692 } | 2703 } |
2693 | 2704 |
2694 | 2705 |
2695 TEST(neg) { | 2706 TEST(neg) { |
2696 const int kTableLength = 2; | 2707 const int kTableLength = 2; |
2697 CcTest::InitializeVM(); | 2708 CcTest::InitializeVM(); |
2698 Isolate* isolate = CcTest::i_isolate(); | 2709 Isolate* isolate = CcTest::i_isolate(); |
2699 HandleScope scope(isolate); | 2710 HandleScope scope(isolate); |
2700 MacroAssembler assm(isolate, NULL, 0); | 2711 MacroAssembler assm(isolate, NULL, 0, v8::internal::CodeObjectRequired::kYes); |
2701 | 2712 |
2702 typedef struct test_float { | 2713 typedef struct test_float { |
2703 float a; | 2714 float a; |
2704 float resultS; | 2715 float resultS; |
2705 double c; | 2716 double c; |
2706 double resultD; | 2717 double resultD; |
2707 }TestFloat; | 2718 }TestFloat; |
2708 | 2719 |
2709 TestFloat test; | 2720 TestFloat test; |
2710 double inputs_D[kTableLength] = { | 2721 double inputs_D[kTableLength] = { |
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2744 } | 2755 } |
2745 } | 2756 } |
2746 | 2757 |
2747 | 2758 |
2748 | 2759 |
2749 TEST(mul) { | 2760 TEST(mul) { |
2750 const int kTableLength = 4; | 2761 const int kTableLength = 4; |
2751 CcTest::InitializeVM(); | 2762 CcTest::InitializeVM(); |
2752 Isolate* isolate = CcTest::i_isolate(); | 2763 Isolate* isolate = CcTest::i_isolate(); |
2753 HandleScope scope(isolate); | 2764 HandleScope scope(isolate); |
2754 MacroAssembler assm(isolate, NULL, 0); | 2765 MacroAssembler assm(isolate, NULL, 0, v8::internal::CodeObjectRequired::kYes); |
2755 | 2766 |
2756 typedef struct test_float { | 2767 typedef struct test_float { |
2757 float a; | 2768 float a; |
2758 float b; | 2769 float b; |
2759 float resultS; | 2770 float resultS; |
2760 double c; | 2771 double c; |
2761 double d; | 2772 double d; |
2762 double resultD; | 2773 double resultD; |
2763 }TestFloat; | 2774 }TestFloat; |
2764 | 2775 |
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2803 CHECK_EQ(test.resultD, inputfs_D[i]*inputft_D[i]); | 2814 CHECK_EQ(test.resultD, inputfs_D[i]*inputft_D[i]); |
2804 } | 2815 } |
2805 } | 2816 } |
2806 | 2817 |
2807 | 2818 |
2808 TEST(mov) { | 2819 TEST(mov) { |
2809 const int kTableLength = 4; | 2820 const int kTableLength = 4; |
2810 CcTest::InitializeVM(); | 2821 CcTest::InitializeVM(); |
2811 Isolate* isolate = CcTest::i_isolate(); | 2822 Isolate* isolate = CcTest::i_isolate(); |
2812 HandleScope scope(isolate); | 2823 HandleScope scope(isolate); |
2813 MacroAssembler assm(isolate, NULL, 0); | 2824 MacroAssembler assm(isolate, NULL, 0, v8::internal::CodeObjectRequired::kYes); |
2814 | 2825 |
2815 typedef struct test_float { | 2826 typedef struct test_float { |
2816 double a; | 2827 double a; |
2817 double b; | 2828 double b; |
2818 float c; | 2829 float c; |
2819 float d; | 2830 float d; |
2820 }TestFloat; | 2831 }TestFloat; |
2821 | 2832 |
2822 TestFloat test; | 2833 TestFloat test; |
2823 double inputs_D[kTableLength] = { | 2834 double inputs_D[kTableLength] = { |
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2856 CHECK_EQ(test.b, outputs_D[i]); | 2867 CHECK_EQ(test.b, outputs_D[i]); |
2857 CHECK_EQ(test.d, outputs_S[i]); | 2868 CHECK_EQ(test.d, outputs_S[i]); |
2858 } | 2869 } |
2859 } | 2870 } |
2860 | 2871 |
2861 | 2872 |
2862 TEST(floor_w) { | 2873 TEST(floor_w) { |
2863 CcTest::InitializeVM(); | 2874 CcTest::InitializeVM(); |
2864 Isolate* isolate = CcTest::i_isolate(); | 2875 Isolate* isolate = CcTest::i_isolate(); |
2865 HandleScope scope(isolate); | 2876 HandleScope scope(isolate); |
2866 MacroAssembler assm(isolate, NULL, 0); | 2877 MacroAssembler assm(isolate, NULL, 0, v8::internal::CodeObjectRequired::kYes); |
2867 | 2878 |
2868 typedef struct test_float { | 2879 typedef struct test_float { |
2869 double a; | 2880 double a; |
2870 float b; | 2881 float b; |
2871 int32_t c; // a floor result | 2882 int32_t c; // a floor result |
2872 int32_t d; // b floor result | 2883 int32_t d; // b floor result |
2873 }Test; | 2884 }Test; |
2874 const int kTableLength = 15; | 2885 const int kTableLength = 15; |
2875 double inputs_D[kTableLength] = { | 2886 double inputs_D[kTableLength] = { |
2876 2.1, 2.6, 2.5, 3.1, 3.6, 3.5, | 2887 2.1, 2.6, 2.5, 3.1, 3.6, 3.5, |
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2913 CHECK_EQ(test.c, outputs[i]); | 2924 CHECK_EQ(test.c, outputs[i]); |
2914 CHECK_EQ(test.d, test.c); | 2925 CHECK_EQ(test.d, test.c); |
2915 } | 2926 } |
2916 } | 2927 } |
2917 | 2928 |
2918 | 2929 |
2919 TEST(floor_l) { | 2930 TEST(floor_l) { |
2920 CcTest::InitializeVM(); | 2931 CcTest::InitializeVM(); |
2921 Isolate* isolate = CcTest::i_isolate(); | 2932 Isolate* isolate = CcTest::i_isolate(); |
2922 HandleScope scope(isolate); | 2933 HandleScope scope(isolate); |
2923 MacroAssembler assm(isolate, NULL, 0); | 2934 MacroAssembler assm(isolate, NULL, 0, |
| 2935 v8::internal::CodeObjectRequired::kYes); |
2924 const double dFPU64InvalidResult = static_cast<double>(kFPU64InvalidResult); | 2936 const double dFPU64InvalidResult = static_cast<double>(kFPU64InvalidResult); |
2925 typedef struct test_float { | 2937 typedef struct test_float { |
2926 double a; | 2938 double a; |
2927 float b; | 2939 float b; |
2928 int64_t c; | 2940 int64_t c; |
2929 int64_t d; | 2941 int64_t d; |
2930 }Test; | 2942 }Test; |
2931 const int kTableLength = 15; | 2943 const int kTableLength = 15; |
2932 double inputs_D[kTableLength] = { | 2944 double inputs_D[kTableLength] = { |
2933 2.1, 2.6, 2.5, 3.1, 3.6, 3.5, | 2945 2.1, 2.6, 2.5, 3.1, 3.6, 3.5, |
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2970 CHECK_EQ(test.c, outputs[i]); | 2982 CHECK_EQ(test.c, outputs[i]); |
2971 CHECK_EQ(test.d, test.c); | 2983 CHECK_EQ(test.d, test.c); |
2972 } | 2984 } |
2973 } | 2985 } |
2974 | 2986 |
2975 | 2987 |
2976 TEST(ceil_w) { | 2988 TEST(ceil_w) { |
2977 CcTest::InitializeVM(); | 2989 CcTest::InitializeVM(); |
2978 Isolate* isolate = CcTest::i_isolate(); | 2990 Isolate* isolate = CcTest::i_isolate(); |
2979 HandleScope scope(isolate); | 2991 HandleScope scope(isolate); |
2980 MacroAssembler assm(isolate, NULL, 0); | 2992 MacroAssembler assm(isolate, NULL, 0, v8::internal::CodeObjectRequired::kYes); |
2981 | 2993 |
2982 typedef struct test_float { | 2994 typedef struct test_float { |
2983 double a; | 2995 double a; |
2984 float b; | 2996 float b; |
2985 int32_t c; // a floor result | 2997 int32_t c; // a floor result |
2986 int32_t d; // b floor result | 2998 int32_t d; // b floor result |
2987 }Test; | 2999 }Test; |
2988 const int kTableLength = 15; | 3000 const int kTableLength = 15; |
2989 double inputs_D[kTableLength] = { | 3001 double inputs_D[kTableLength] = { |
2990 2.1, 2.6, 2.5, 3.1, 3.6, 3.5, | 3002 2.1, 2.6, 2.5, 3.1, 3.6, 3.5, |
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3027 CHECK_EQ(test.c, outputs[i]); | 3039 CHECK_EQ(test.c, outputs[i]); |
3028 CHECK_EQ(test.d, test.c); | 3040 CHECK_EQ(test.d, test.c); |
3029 } | 3041 } |
3030 } | 3042 } |
3031 | 3043 |
3032 | 3044 |
3033 TEST(ceil_l) { | 3045 TEST(ceil_l) { |
3034 CcTest::InitializeVM(); | 3046 CcTest::InitializeVM(); |
3035 Isolate* isolate = CcTest::i_isolate(); | 3047 Isolate* isolate = CcTest::i_isolate(); |
3036 HandleScope scope(isolate); | 3048 HandleScope scope(isolate); |
3037 MacroAssembler assm(isolate, NULL, 0); | 3049 MacroAssembler assm(isolate, NULL, 0, |
| 3050 v8::internal::CodeObjectRequired::kYes); |
3038 const double dFPU64InvalidResult = static_cast<double>(kFPU64InvalidResult); | 3051 const double dFPU64InvalidResult = static_cast<double>(kFPU64InvalidResult); |
3039 typedef struct test_float { | 3052 typedef struct test_float { |
3040 double a; | 3053 double a; |
3041 float b; | 3054 float b; |
3042 int64_t c; | 3055 int64_t c; |
3043 int64_t d; | 3056 int64_t d; |
3044 }Test; | 3057 }Test; |
3045 const int kTableLength = 15; | 3058 const int kTableLength = 15; |
3046 double inputs_D[kTableLength] = { | 3059 double inputs_D[kTableLength] = { |
3047 2.1, 2.6, 2.5, 3.1, 3.6, 3.5, | 3060 2.1, 2.6, 2.5, 3.1, 3.6, 3.5, |
(...skipping 369 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3417 float fNegSubnorm; | 3430 float fNegSubnorm; |
3418 float fNegZero; | 3431 float fNegZero; |
3419 float fPosInf; | 3432 float fPosInf; |
3420 float fPosNorm; | 3433 float fPosNorm; |
3421 float fPosSubnorm; | 3434 float fPosSubnorm; |
3422 float fPosZero; } T; | 3435 float fPosZero; } T; |
3423 T t; | 3436 T t; |
3424 | 3437 |
3425 // Create a function that accepts &t, and loads, manipulates, and stores | 3438 // Create a function that accepts &t, and loads, manipulates, and stores |
3426 // the doubles t.a ... t.f. | 3439 // the doubles t.a ... t.f. |
3427 MacroAssembler assm(isolate, NULL, 0); | 3440 MacroAssembler assm(isolate, NULL, 0, |
| 3441 v8::internal::CodeObjectRequired::kYes); |
3428 | 3442 |
3429 __ ldc1(f4, MemOperand(a0, offsetof(T, dSignalingNan))); | 3443 __ ldc1(f4, MemOperand(a0, offsetof(T, dSignalingNan))); |
3430 __ class_d(f6, f4); | 3444 __ class_d(f6, f4); |
3431 __ sdc1(f6, MemOperand(a0, offsetof(T, dSignalingNan))); | 3445 __ sdc1(f6, MemOperand(a0, offsetof(T, dSignalingNan))); |
3432 | 3446 |
3433 __ ldc1(f4, MemOperand(a0, offsetof(T, dQuietNan))); | 3447 __ ldc1(f4, MemOperand(a0, offsetof(T, dQuietNan))); |
3434 __ class_d(f6, f4); | 3448 __ class_d(f6, f4); |
3435 __ sdc1(f6, MemOperand(a0, offsetof(T, dQuietNan))); | 3449 __ sdc1(f6, MemOperand(a0, offsetof(T, dQuietNan))); |
3436 | 3450 |
3437 __ ldc1(f4, MemOperand(a0, offsetof(T, dNegInf))); | 3451 __ ldc1(f4, MemOperand(a0, offsetof(T, dNegInf))); |
(...skipping 128 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3566 CHECK_EQ(bit_cast<int32_t>(t.fPosSubnorm), 0x100); | 3580 CHECK_EQ(bit_cast<int32_t>(t.fPosSubnorm), 0x100); |
3567 CHECK_EQ(bit_cast<int32_t>(t.fPosZero), 0x200); | 3581 CHECK_EQ(bit_cast<int32_t>(t.fPosZero), 0x200); |
3568 } | 3582 } |
3569 } | 3583 } |
3570 | 3584 |
3571 | 3585 |
3572 TEST(ABS) { | 3586 TEST(ABS) { |
3573 CcTest::InitializeVM(); | 3587 CcTest::InitializeVM(); |
3574 Isolate* isolate = CcTest::i_isolate(); | 3588 Isolate* isolate = CcTest::i_isolate(); |
3575 HandleScope scope(isolate); | 3589 HandleScope scope(isolate); |
3576 MacroAssembler assm(isolate, NULL, 0); | 3590 MacroAssembler assm(isolate, NULL, 0, v8::internal::CodeObjectRequired::kYes); |
3577 | 3591 |
3578 typedef struct test_float { | 3592 typedef struct test_float { |
3579 int64_t fir; | 3593 int64_t fir; |
3580 double a; | 3594 double a; |
3581 float b; | 3595 float b; |
3582 double fcsr; | 3596 double fcsr; |
3583 } TestFloat; | 3597 } TestFloat; |
3584 | 3598 |
3585 TestFloat test; | 3599 TestFloat test; |
3586 | 3600 |
(...skipping 77 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3664 (CALL_GENERATED_CODE(isolate, f, &test, 0, 0, 0, 0)); | 3678 (CALL_GENERATED_CODE(isolate, f, &test, 0, 0, 0, 0)); |
3665 CHECK_EQ(std::isnan(test.a), true); | 3679 CHECK_EQ(std::isnan(test.a), true); |
3666 CHECK_EQ(std::isnan(test.b), true); | 3680 CHECK_EQ(std::isnan(test.b), true); |
3667 } | 3681 } |
3668 | 3682 |
3669 | 3683 |
3670 TEST(ADD_FMT) { | 3684 TEST(ADD_FMT) { |
3671 CcTest::InitializeVM(); | 3685 CcTest::InitializeVM(); |
3672 Isolate* isolate = CcTest::i_isolate(); | 3686 Isolate* isolate = CcTest::i_isolate(); |
3673 HandleScope scope(isolate); | 3687 HandleScope scope(isolate); |
3674 MacroAssembler assm(isolate, NULL, 0); | 3688 MacroAssembler assm(isolate, NULL, 0, v8::internal::CodeObjectRequired::kYes); |
3675 | 3689 |
3676 typedef struct test_float { | 3690 typedef struct test_float { |
3677 double a; | 3691 double a; |
3678 double b; | 3692 double b; |
3679 double c; | 3693 double c; |
3680 float fa; | 3694 float fa; |
3681 float fb; | 3695 float fb; |
3682 float fc; | 3696 float fc; |
3683 } TestFloat; | 3697 } TestFloat; |
3684 | 3698 |
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3734 CHECK_EQ(std::isnan(test.c), true); | 3748 CHECK_EQ(std::isnan(test.c), true); |
3735 CHECK_EQ(std::isnan(test.fc), true); | 3749 CHECK_EQ(std::isnan(test.fc), true); |
3736 } | 3750 } |
3737 | 3751 |
3738 | 3752 |
3739 TEST(C_COND_FMT) { | 3753 TEST(C_COND_FMT) { |
3740 if (kArchVariant == kMips64r2) { | 3754 if (kArchVariant == kMips64r2) { |
3741 CcTest::InitializeVM(); | 3755 CcTest::InitializeVM(); |
3742 Isolate* isolate = CcTest::i_isolate(); | 3756 Isolate* isolate = CcTest::i_isolate(); |
3743 HandleScope scope(isolate); | 3757 HandleScope scope(isolate); |
3744 MacroAssembler assm(isolate, NULL, 0); | 3758 MacroAssembler assm(isolate, NULL, 0, |
| 3759 v8::internal::CodeObjectRequired::kYes); |
3745 | 3760 |
3746 typedef struct test_float { | 3761 typedef struct test_float { |
3747 double dOp1; | 3762 double dOp1; |
3748 double dOp2; | 3763 double dOp2; |
3749 uint32_t dF; | 3764 uint32_t dF; |
3750 uint32_t dUn; | 3765 uint32_t dUn; |
3751 uint32_t dEq; | 3766 uint32_t dEq; |
3752 uint32_t dUeq; | 3767 uint32_t dUeq; |
3753 uint32_t dOlt; | 3768 uint32_t dOlt; |
3754 uint32_t dUlt; | 3769 uint32_t dUlt; |
(...skipping 190 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3945 CHECK_EQ(test.fUle, 1U); | 3960 CHECK_EQ(test.fUle, 1U); |
3946 } | 3961 } |
3947 } | 3962 } |
3948 | 3963 |
3949 | 3964 |
3950 TEST(CMP_COND_FMT) { | 3965 TEST(CMP_COND_FMT) { |
3951 if (kArchVariant == kMips64r6) { | 3966 if (kArchVariant == kMips64r6) { |
3952 CcTest::InitializeVM(); | 3967 CcTest::InitializeVM(); |
3953 Isolate* isolate = CcTest::i_isolate(); | 3968 Isolate* isolate = CcTest::i_isolate(); |
3954 HandleScope scope(isolate); | 3969 HandleScope scope(isolate); |
3955 MacroAssembler assm(isolate, NULL, 0); | 3970 MacroAssembler assm(isolate, NULL, 0, |
| 3971 v8::internal::CodeObjectRequired::kYes); |
3956 | 3972 |
3957 typedef struct test_float { | 3973 typedef struct test_float { |
3958 double dOp1; | 3974 double dOp1; |
3959 double dOp2; | 3975 double dOp2; |
3960 double dF; | 3976 double dF; |
3961 double dUn; | 3977 double dUn; |
3962 double dEq; | 3978 double dEq; |
3963 double dUeq; | 3979 double dUeq; |
3964 double dOlt; | 3980 double dOlt; |
3965 double dUlt; | 3981 double dUlt; |
(...skipping 195 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4161 CHECK_EQ(bit_cast<uint32_t>(test.fOle), fFalse); | 4177 CHECK_EQ(bit_cast<uint32_t>(test.fOle), fFalse); |
4162 CHECK_EQ(bit_cast<uint32_t>(test.fUle), fTrue); | 4178 CHECK_EQ(bit_cast<uint32_t>(test.fUle), fTrue); |
4163 } | 4179 } |
4164 } | 4180 } |
4165 | 4181 |
4166 | 4182 |
4167 TEST(CVT) { | 4183 TEST(CVT) { |
4168 CcTest::InitializeVM(); | 4184 CcTest::InitializeVM(); |
4169 Isolate* isolate = CcTest::i_isolate(); | 4185 Isolate* isolate = CcTest::i_isolate(); |
4170 HandleScope scope(isolate); | 4186 HandleScope scope(isolate); |
4171 MacroAssembler assm(isolate, NULL, 0); | 4187 MacroAssembler assm(isolate, NULL, 0, v8::internal::CodeObjectRequired::kYes); |
4172 | 4188 |
4173 typedef struct test_float { | 4189 typedef struct test_float { |
4174 float cvt_d_s_in; | 4190 float cvt_d_s_in; |
4175 double cvt_d_s_out; | 4191 double cvt_d_s_out; |
4176 int32_t cvt_d_w_in; | 4192 int32_t cvt_d_w_in; |
4177 double cvt_d_w_out; | 4193 double cvt_d_w_out; |
4178 int64_t cvt_d_l_in; | 4194 int64_t cvt_d_l_in; |
4179 double cvt_d_l_out; | 4195 double cvt_d_l_out; |
4180 | 4196 |
4181 float cvt_l_s_in; | 4197 float cvt_l_s_in; |
(...skipping 177 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4359 CHECK_EQ(test.cvt_s_l_out, static_cast<float>(test.cvt_s_l_in)); | 4375 CHECK_EQ(test.cvt_s_l_out, static_cast<float>(test.cvt_s_l_in)); |
4360 CHECK_EQ(test.cvt_w_s_out, 0); | 4376 CHECK_EQ(test.cvt_w_s_out, 0); |
4361 CHECK_EQ(test.cvt_w_d_out, 0); | 4377 CHECK_EQ(test.cvt_w_d_out, 0); |
4362 } | 4378 } |
4363 | 4379 |
4364 | 4380 |
4365 TEST(DIV_FMT) { | 4381 TEST(DIV_FMT) { |
4366 CcTest::InitializeVM(); | 4382 CcTest::InitializeVM(); |
4367 Isolate* isolate = CcTest::i_isolate(); | 4383 Isolate* isolate = CcTest::i_isolate(); |
4368 HandleScope scope(isolate); | 4384 HandleScope scope(isolate); |
4369 MacroAssembler assm(isolate, NULL, 0); | 4385 MacroAssembler assm(isolate, NULL, 0, v8::internal::CodeObjectRequired::kYes); |
4370 | 4386 |
4371 typedef struct test { | 4387 typedef struct test { |
4372 double dOp1; | 4388 double dOp1; |
4373 double dOp2; | 4389 double dOp2; |
4374 double dRes; | 4390 double dRes; |
4375 float fOp1; | 4391 float fOp1; |
4376 float fOp2; | 4392 float fOp2; |
4377 float fRes; | 4393 float fRes; |
4378 } Test; | 4394 } Test; |
4379 | 4395 |
(...skipping 99 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4479 (CALL_GENERATED_CODE(isolate, f, &test, 0, 0, 0, 0)); | 4495 (CALL_GENERATED_CODE(isolate, f, &test, 0, 0, 0, 0)); |
4480 CHECK_EQ(true, std::isnan(test.dRes)); | 4496 CHECK_EQ(true, std::isnan(test.dRes)); |
4481 CHECK_EQ(true, std::isnan(test.fRes)); | 4497 CHECK_EQ(true, std::isnan(test.fRes)); |
4482 } | 4498 } |
4483 | 4499 |
4484 | 4500 |
4485 uint64_t run_align(uint64_t rs_value, uint64_t rt_value, uint8_t bp) { | 4501 uint64_t run_align(uint64_t rs_value, uint64_t rt_value, uint8_t bp) { |
4486 Isolate* isolate = CcTest::i_isolate(); | 4502 Isolate* isolate = CcTest::i_isolate(); |
4487 HandleScope scope(isolate); | 4503 HandleScope scope(isolate); |
4488 | 4504 |
4489 MacroAssembler assm(isolate, NULL, 0); | 4505 MacroAssembler assm(isolate, NULL, 0, v8::internal::CodeObjectRequired::kYes); |
4490 | 4506 |
4491 __ align(v0, a0, a1, bp); | 4507 __ align(v0, a0, a1, bp); |
4492 __ jr(ra); | 4508 __ jr(ra); |
4493 __ nop(); | 4509 __ nop(); |
4494 | 4510 |
4495 CodeDesc desc; | 4511 CodeDesc desc; |
4496 assm.GetCode(&desc); | 4512 assm.GetCode(&desc); |
4497 Handle<Code> code = isolate->factory()->NewCode( | 4513 Handle<Code> code = isolate->factory()->NewCode( |
4498 desc, Code::ComputeFlags(Code::STUB), Handle<Code>()); | 4514 desc, Code::ComputeFlags(Code::STUB), Handle<Code>()); |
4499 | 4515 |
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4532 tc[i].bp)); | 4548 tc[i].bp)); |
4533 } | 4549 } |
4534 } | 4550 } |
4535 } | 4551 } |
4536 | 4552 |
4537 | 4553 |
4538 uint64_t run_dalign(uint64_t rs_value, uint64_t rt_value, uint8_t bp) { | 4554 uint64_t run_dalign(uint64_t rs_value, uint64_t rt_value, uint8_t bp) { |
4539 Isolate* isolate = CcTest::i_isolate(); | 4555 Isolate* isolate = CcTest::i_isolate(); |
4540 HandleScope scope(isolate); | 4556 HandleScope scope(isolate); |
4541 | 4557 |
4542 MacroAssembler assm(isolate, NULL, 0); | 4558 MacroAssembler assm(isolate, NULL, 0, v8::internal::CodeObjectRequired::kYes); |
4543 | 4559 |
4544 __ dalign(v0, a0, a1, bp); | 4560 __ dalign(v0, a0, a1, bp); |
4545 __ jr(ra); | 4561 __ jr(ra); |
4546 __ nop(); | 4562 __ nop(); |
4547 | 4563 |
4548 CodeDesc desc; | 4564 CodeDesc desc; |
4549 assm.GetCode(&desc); | 4565 assm.GetCode(&desc); |
4550 Handle<Code> code = isolate->factory()->NewCode( | 4566 Handle<Code> code = isolate->factory()->NewCode( |
4551 desc, Code::ComputeFlags(Code::STUB), Handle<Code>()); | 4567 desc, Code::ComputeFlags(Code::STUB), Handle<Code>()); |
4552 | 4568 |
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4590 } | 4606 } |
4591 } | 4607 } |
4592 | 4608 |
4593 | 4609 |
4594 uint64_t PC; // The program counter. | 4610 uint64_t PC; // The program counter. |
4595 | 4611 |
4596 uint64_t run_aluipc(int16_t offset) { | 4612 uint64_t run_aluipc(int16_t offset) { |
4597 Isolate* isolate = CcTest::i_isolate(); | 4613 Isolate* isolate = CcTest::i_isolate(); |
4598 HandleScope scope(isolate); | 4614 HandleScope scope(isolate); |
4599 | 4615 |
4600 MacroAssembler assm(isolate, NULL, 0); | 4616 MacroAssembler assm(isolate, NULL, 0, v8::internal::CodeObjectRequired::kYes); |
4601 | 4617 |
4602 __ aluipc(v0, offset); | 4618 __ aluipc(v0, offset); |
4603 __ jr(ra); | 4619 __ jr(ra); |
4604 __ nop(); | 4620 __ nop(); |
4605 | 4621 |
4606 CodeDesc desc; | 4622 CodeDesc desc; |
4607 assm.GetCode(&desc); | 4623 assm.GetCode(&desc); |
4608 Handle<Code> code = isolate->factory()->NewCode( | 4624 Handle<Code> code = isolate->factory()->NewCode( |
4609 desc, Code::ComputeFlags(Code::STUB), Handle<Code>()); | 4625 desc, Code::ComputeFlags(Code::STUB), Handle<Code>()); |
4610 | 4626 |
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4644 CHECK_EQ(expected_res, res); | 4660 CHECK_EQ(expected_res, res); |
4645 } | 4661 } |
4646 } | 4662 } |
4647 } | 4663 } |
4648 | 4664 |
4649 | 4665 |
4650 uint64_t run_auipc(int16_t offset) { | 4666 uint64_t run_auipc(int16_t offset) { |
4651 Isolate* isolate = CcTest::i_isolate(); | 4667 Isolate* isolate = CcTest::i_isolate(); |
4652 HandleScope scope(isolate); | 4668 HandleScope scope(isolate); |
4653 | 4669 |
4654 MacroAssembler assm(isolate, NULL, 0); | 4670 MacroAssembler assm(isolate, NULL, 0, v8::internal::CodeObjectRequired::kYes); |
4655 | 4671 |
4656 __ auipc(v0, offset); | 4672 __ auipc(v0, offset); |
4657 __ jr(ra); | 4673 __ jr(ra); |
4658 __ nop(); | 4674 __ nop(); |
4659 | 4675 |
4660 CodeDesc desc; | 4676 CodeDesc desc; |
4661 assm.GetCode(&desc); | 4677 assm.GetCode(&desc); |
4662 Handle<Code> code = isolate->factory()->NewCode( | 4678 Handle<Code> code = isolate->factory()->NewCode( |
4663 desc, Code::ComputeFlags(Code::STUB), Handle<Code>()); | 4679 desc, Code::ComputeFlags(Code::STUB), Handle<Code>()); |
4664 | 4680 |
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4698 CHECK_EQ(expected_res, res); | 4714 CHECK_EQ(expected_res, res); |
4699 } | 4715 } |
4700 } | 4716 } |
4701 } | 4717 } |
4702 | 4718 |
4703 | 4719 |
4704 uint64_t run_lwpc(int offset) { | 4720 uint64_t run_lwpc(int offset) { |
4705 Isolate* isolate = CcTest::i_isolate(); | 4721 Isolate* isolate = CcTest::i_isolate(); |
4706 HandleScope scope(isolate); | 4722 HandleScope scope(isolate); |
4707 | 4723 |
4708 MacroAssembler assm(isolate, NULL, 0); | 4724 MacroAssembler assm(isolate, NULL, 0, v8::internal::CodeObjectRequired::kYes); |
4709 | 4725 |
4710 // 256k instructions; 2^8k | 4726 // 256k instructions; 2^8k |
4711 // addiu t3, a4, 0xffff; (0x250fffff) | 4727 // addiu t3, a4, 0xffff; (0x250fffff) |
4712 // ... | 4728 // ... |
4713 // addiu t0, a4, 0x0000; (0x250c0000) | 4729 // addiu t0, a4, 0x0000; (0x250c0000) |
4714 uint32_t addiu_start_1 = 0x25000000; | 4730 uint32_t addiu_start_1 = 0x25000000; |
4715 for (int32_t i = 0xfffff; i >= 0xc0000; --i) { | 4731 for (int32_t i = 0xfffff; i >= 0xc0000; --i) { |
4716 uint32_t addiu_new = addiu_start_1 + i; | 4732 uint32_t addiu_new = addiu_start_1 + i; |
4717 __ dd(addiu_new); | 4733 __ dd(addiu_new); |
4718 } | 4734 } |
(...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4774 CHECK_EQ(tc[i].expected_res, res); | 4790 CHECK_EQ(tc[i].expected_res, res); |
4775 } | 4791 } |
4776 } | 4792 } |
4777 } | 4793 } |
4778 | 4794 |
4779 | 4795 |
4780 uint64_t run_lwupc(int offset) { | 4796 uint64_t run_lwupc(int offset) { |
4781 Isolate* isolate = CcTest::i_isolate(); | 4797 Isolate* isolate = CcTest::i_isolate(); |
4782 HandleScope scope(isolate); | 4798 HandleScope scope(isolate); |
4783 | 4799 |
4784 MacroAssembler assm(isolate, NULL, 0); | 4800 MacroAssembler assm(isolate, NULL, 0, v8::internal::CodeObjectRequired::kYes); |
4785 | 4801 |
4786 // 256k instructions; 2^8k | 4802 // 256k instructions; 2^8k |
4787 // addiu t3, a4, 0xffff; (0x250fffff) | 4803 // addiu t3, a4, 0xffff; (0x250fffff) |
4788 // ... | 4804 // ... |
4789 // addiu t0, a4, 0x0000; (0x250c0000) | 4805 // addiu t0, a4, 0x0000; (0x250c0000) |
4790 uint32_t addiu_start_1 = 0x25000000; | 4806 uint32_t addiu_start_1 = 0x25000000; |
4791 for (int32_t i = 0xfffff; i >= 0xc0000; --i) { | 4807 for (int32_t i = 0xfffff; i >= 0xc0000; --i) { |
4792 uint32_t addiu_new = addiu_start_1 + i; | 4808 uint32_t addiu_new = addiu_start_1 + i; |
4793 __ dd(addiu_new); | 4809 __ dd(addiu_new); |
4794 } | 4810 } |
(...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4850 CHECK_EQ(tc[i].expected_res, res); | 4866 CHECK_EQ(tc[i].expected_res, res); |
4851 } | 4867 } |
4852 } | 4868 } |
4853 } | 4869 } |
4854 | 4870 |
4855 | 4871 |
4856 uint64_t run_jic(int16_t offset) { | 4872 uint64_t run_jic(int16_t offset) { |
4857 Isolate* isolate = CcTest::i_isolate(); | 4873 Isolate* isolate = CcTest::i_isolate(); |
4858 HandleScope scope(isolate); | 4874 HandleScope scope(isolate); |
4859 | 4875 |
4860 MacroAssembler assm(isolate, NULL, 0); | 4876 MacroAssembler assm(isolate, NULL, 0, v8::internal::CodeObjectRequired::kYes); |
4861 | 4877 |
4862 Label get_program_counter, stop_execution; | 4878 Label get_program_counter, stop_execution; |
4863 __ push(ra); | 4879 __ push(ra); |
4864 __ li(v0, 0); | 4880 __ li(v0, 0); |
4865 __ li(t1, 0x66); | 4881 __ li(t1, 0x66); |
4866 | 4882 |
4867 __ addiu(v0, v0, 0x1); // <-- offset = -32 | 4883 __ addiu(v0, v0, 0x1); // <-- offset = -32 |
4868 __ addiu(v0, v0, 0x2); | 4884 __ addiu(v0, v0, 0x2); |
4869 __ addiu(v0, v0, 0x10); | 4885 __ addiu(v0, v0, 0x10); |
4870 __ addiu(v0, v0, 0x20); | 4886 __ addiu(v0, v0, 0x20); |
(...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4931 CHECK_EQ(tc[i].expected_res, res); | 4947 CHECK_EQ(tc[i].expected_res, res); |
4932 } | 4948 } |
4933 } | 4949 } |
4934 } | 4950 } |
4935 | 4951 |
4936 | 4952 |
4937 uint64_t run_beqzc(int32_t value, int32_t offset) { | 4953 uint64_t run_beqzc(int32_t value, int32_t offset) { |
4938 Isolate* isolate = CcTest::i_isolate(); | 4954 Isolate* isolate = CcTest::i_isolate(); |
4939 HandleScope scope(isolate); | 4955 HandleScope scope(isolate); |
4940 | 4956 |
4941 MacroAssembler assm(isolate, NULL, 0); | 4957 MacroAssembler assm(isolate, NULL, 0, v8::internal::CodeObjectRequired::kYes); |
4942 | 4958 |
4943 Label stop_execution; | 4959 Label stop_execution; |
4944 __ li(v0, 0); | 4960 __ li(v0, 0); |
4945 __ li(t1, 0x66); | 4961 __ li(t1, 0x66); |
4946 | 4962 |
4947 __ addiu(v0, v0, 0x1); // <-- offset = -8 | 4963 __ addiu(v0, v0, 0x1); // <-- offset = -8 |
4948 __ addiu(v0, v0, 0x2); | 4964 __ addiu(v0, v0, 0x2); |
4949 __ addiu(v0, v0, 0x10); | 4965 __ addiu(v0, v0, 0x10); |
4950 __ addiu(v0, v0, 0x20); | 4966 __ addiu(v0, v0, 0x20); |
4951 __ beq(v0, t1, &stop_execution); | 4967 __ beq(v0, t1, &stop_execution); |
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
5004 CHECK_EQ(tc[i].expected_res, res); | 5020 CHECK_EQ(tc[i].expected_res, res); |
5005 } | 5021 } |
5006 } | 5022 } |
5007 } | 5023 } |
5008 | 5024 |
5009 | 5025 |
5010 uint64_t run_jialc(int16_t offset) { | 5026 uint64_t run_jialc(int16_t offset) { |
5011 Isolate* isolate = CcTest::i_isolate(); | 5027 Isolate* isolate = CcTest::i_isolate(); |
5012 HandleScope scope(isolate); | 5028 HandleScope scope(isolate); |
5013 | 5029 |
5014 MacroAssembler assm(isolate, NULL, 0); | 5030 MacroAssembler assm(isolate, NULL, 0, v8::internal::CodeObjectRequired::kYes); |
5015 | 5031 |
5016 Label main_block, get_program_counter; | 5032 Label main_block, get_program_counter; |
5017 __ push(ra); | 5033 __ push(ra); |
5018 __ li(v0, 0); | 5034 __ li(v0, 0); |
5019 __ beq(v0, v0, &main_block); | 5035 __ beq(v0, v0, &main_block); |
5020 __ nop(); | 5036 __ nop(); |
5021 | 5037 |
5022 // Block 1 | 5038 // Block 1 |
5023 __ addiu(v0, v0, 0x1); // <-- offset = -40 | 5039 __ addiu(v0, v0, 0x1); // <-- offset = -40 |
5024 __ addiu(v0, v0, 0x2); | 5040 __ addiu(v0, v0, 0x2); |
(...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
5098 CHECK_EQ(tc[i].expected_res, res); | 5114 CHECK_EQ(tc[i].expected_res, res); |
5099 } | 5115 } |
5100 } | 5116 } |
5101 } | 5117 } |
5102 | 5118 |
5103 | 5119 |
5104 uint64_t run_addiupc(int32_t imm19) { | 5120 uint64_t run_addiupc(int32_t imm19) { |
5105 Isolate* isolate = CcTest::i_isolate(); | 5121 Isolate* isolate = CcTest::i_isolate(); |
5106 HandleScope scope(isolate); | 5122 HandleScope scope(isolate); |
5107 | 5123 |
5108 MacroAssembler assm(isolate, NULL, 0); | 5124 MacroAssembler assm(isolate, NULL, 0, v8::internal::CodeObjectRequired::kYes); |
5109 | 5125 |
5110 __ addiupc(v0, imm19); | 5126 __ addiupc(v0, imm19); |
5111 __ jr(ra); | 5127 __ jr(ra); |
5112 __ nop(); | 5128 __ nop(); |
5113 | 5129 |
5114 CodeDesc desc; | 5130 CodeDesc desc; |
5115 assm.GetCode(&desc); | 5131 assm.GetCode(&desc); |
5116 Handle<Code> code = isolate->factory()->NewCode( | 5132 Handle<Code> code = isolate->factory()->NewCode( |
5117 desc, Code::ComputeFlags(Code::STUB), Handle<Code>()); | 5133 desc, Code::ComputeFlags(Code::STUB), Handle<Code>()); |
5118 | 5134 |
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
5152 CHECK_EQ(expected_res, res); | 5168 CHECK_EQ(expected_res, res); |
5153 } | 5169 } |
5154 } | 5170 } |
5155 } | 5171 } |
5156 | 5172 |
5157 | 5173 |
5158 uint64_t run_ldpc(int offset) { | 5174 uint64_t run_ldpc(int offset) { |
5159 Isolate* isolate = CcTest::i_isolate(); | 5175 Isolate* isolate = CcTest::i_isolate(); |
5160 HandleScope scope(isolate); | 5176 HandleScope scope(isolate); |
5161 | 5177 |
5162 MacroAssembler assm(isolate, NULL, 0); | 5178 MacroAssembler assm(isolate, NULL, 0, v8::internal::CodeObjectRequired::kYes); |
5163 | 5179 |
5164 // 256k instructions; 2 * 2^7k = 2^8k | 5180 // 256k instructions; 2 * 2^7k = 2^8k |
5165 // addiu t3, a4, 0xffff; (0x250fffff) | 5181 // addiu t3, a4, 0xffff; (0x250fffff) |
5166 // ... | 5182 // ... |
5167 // addiu t0, a4, 0x0000; (0x250c0000) | 5183 // addiu t0, a4, 0x0000; (0x250c0000) |
5168 uint32_t addiu_start_1 = 0x25000000; | 5184 uint32_t addiu_start_1 = 0x25000000; |
5169 for (int32_t i = 0xfffff; i >= 0xc0000; --i) { | 5185 for (int32_t i = 0xfffff; i >= 0xc0000; --i) { |
5170 uint32_t addiu_new = addiu_start_1 + i; | 5186 uint32_t addiu_new = addiu_start_1 + i; |
5171 __ dd(addiu_new); | 5187 __ dd(addiu_new); |
5172 } | 5188 } |
(...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
5227 CHECK_EQ(tc[i].expected_res, res); | 5243 CHECK_EQ(tc[i].expected_res, res); |
5228 } | 5244 } |
5229 } | 5245 } |
5230 } | 5246 } |
5231 | 5247 |
5232 | 5248 |
5233 int64_t run_bc(int32_t offset) { | 5249 int64_t run_bc(int32_t offset) { |
5234 Isolate* isolate = CcTest::i_isolate(); | 5250 Isolate* isolate = CcTest::i_isolate(); |
5235 HandleScope scope(isolate); | 5251 HandleScope scope(isolate); |
5236 | 5252 |
5237 MacroAssembler assm(isolate, NULL, 0); | 5253 MacroAssembler assm(isolate, NULL, 0, v8::internal::CodeObjectRequired::kYes); |
5238 | 5254 |
5239 Label continue_1, stop_execution; | 5255 Label continue_1, stop_execution; |
5240 __ push(ra); | 5256 __ push(ra); |
5241 __ li(v0, 0); | 5257 __ li(v0, 0); |
5242 __ li(t8, 0); | 5258 __ li(t8, 0); |
5243 __ li(t9, 2); // Condition for the stopping execution. | 5259 __ li(t9, 2); // Condition for the stopping execution. |
5244 | 5260 |
5245 uint32_t instruction_addiu = 0x24420001; // addiu v0, v0, 1 | 5261 uint32_t instruction_addiu = 0x24420001; // addiu v0, v0, 1 |
5246 for (int32_t i = -100; i <= -11; ++i) { | 5262 for (int32_t i = -100; i <= -11; ++i) { |
5247 __ dd(instruction_addiu); | 5263 __ dd(instruction_addiu); |
(...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
5308 CHECK_EQ(tc[i].expected_res, res); | 5324 CHECK_EQ(tc[i].expected_res, res); |
5309 } | 5325 } |
5310 } | 5326 } |
5311 } | 5327 } |
5312 | 5328 |
5313 | 5329 |
5314 int64_t run_balc(int32_t offset) { | 5330 int64_t run_balc(int32_t offset) { |
5315 Isolate* isolate = CcTest::i_isolate(); | 5331 Isolate* isolate = CcTest::i_isolate(); |
5316 HandleScope scope(isolate); | 5332 HandleScope scope(isolate); |
5317 | 5333 |
5318 MacroAssembler assm(isolate, NULL, 0); | 5334 MacroAssembler assm(isolate, NULL, 0, v8::internal::CodeObjectRequired::kYes); |
5319 | 5335 |
5320 Label continue_1, stop_execution; | 5336 Label continue_1, stop_execution; |
5321 __ push(ra); | 5337 __ push(ra); |
5322 __ li(v0, 0); | 5338 __ li(v0, 0); |
5323 __ li(t8, 0); | 5339 __ li(t8, 0); |
5324 __ li(t9, 2); // Condition for stopping execution. | 5340 __ li(t9, 2); // Condition for stopping execution. |
5325 | 5341 |
5326 __ beq(t8, t8, &continue_1); | 5342 __ beq(t8, t8, &continue_1); |
5327 __ nop(); | 5343 __ nop(); |
5328 | 5344 |
(...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
5389 CHECK_EQ(tc[i].expected_res, res); | 5405 CHECK_EQ(tc[i].expected_res, res); |
5390 } | 5406 } |
5391 } | 5407 } |
5392 } | 5408 } |
5393 | 5409 |
5394 | 5410 |
5395 uint64_t run_dsll(uint64_t rt_value, uint16_t sa_value) { | 5411 uint64_t run_dsll(uint64_t rt_value, uint16_t sa_value) { |
5396 Isolate* isolate = CcTest::i_isolate(); | 5412 Isolate* isolate = CcTest::i_isolate(); |
5397 HandleScope scope(isolate); | 5413 HandleScope scope(isolate); |
5398 | 5414 |
5399 MacroAssembler assm(isolate, NULL, 0); | 5415 MacroAssembler assm(isolate, NULL, 0, v8::internal::CodeObjectRequired::kYes); |
5400 | 5416 |
5401 __ dsll(v0, a0, sa_value); | 5417 __ dsll(v0, a0, sa_value); |
5402 __ jr(ra); | 5418 __ jr(ra); |
5403 __ nop(); | 5419 __ nop(); |
5404 | 5420 |
5405 CodeDesc desc; | 5421 CodeDesc desc; |
5406 assm.GetCode(&desc); | 5422 assm.GetCode(&desc); |
5407 Handle<Code> code = isolate->factory()->NewCode( | 5423 Handle<Code> code = isolate->factory()->NewCode( |
5408 desc, Code::ComputeFlags(Code::STUB), Handle<Code>()); | 5424 desc, Code::ComputeFlags(Code::STUB), Handle<Code>()); |
5409 | 5425 |
(...skipping 27 matching lines...) Expand all Loading... |
5437 CHECK_EQ(tc[i].expected_res, | 5453 CHECK_EQ(tc[i].expected_res, |
5438 run_dsll(tc[i].rt_value, tc[i].sa_value)); | 5454 run_dsll(tc[i].rt_value, tc[i].sa_value)); |
5439 } | 5455 } |
5440 } | 5456 } |
5441 | 5457 |
5442 | 5458 |
5443 uint64_t run_bal(int16_t offset) { | 5459 uint64_t run_bal(int16_t offset) { |
5444 Isolate* isolate = CcTest::i_isolate(); | 5460 Isolate* isolate = CcTest::i_isolate(); |
5445 HandleScope scope(isolate); | 5461 HandleScope scope(isolate); |
5446 | 5462 |
5447 MacroAssembler assm(isolate, NULL, 0); | 5463 MacroAssembler assm(isolate, NULL, 0, v8::internal::CodeObjectRequired::kYes); |
5448 | 5464 |
5449 __ mov(t0, ra); | 5465 __ mov(t0, ra); |
5450 __ bal(offset); // Equivalent for "BGEZAL zero_reg, offset". | 5466 __ bal(offset); // Equivalent for "BGEZAL zero_reg, offset". |
5451 __ nop(); | 5467 __ nop(); |
5452 | 5468 |
5453 __ mov(ra, t0); | 5469 __ mov(ra, t0); |
5454 __ jr(ra); | 5470 __ jr(ra); |
5455 __ nop(); | 5471 __ nop(); |
5456 | 5472 |
5457 __ li(v0, 1); | 5473 __ li(v0, 1); |
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
5493 | 5509 |
5494 | 5510 |
5495 TEST(Trampoline) { | 5511 TEST(Trampoline) { |
5496 // Private member of Assembler class. | 5512 // Private member of Assembler class. |
5497 static const int kMaxBranchOffset = (1 << (18 - 1)) - 1; | 5513 static const int kMaxBranchOffset = (1 << (18 - 1)) - 1; |
5498 | 5514 |
5499 CcTest::InitializeVM(); | 5515 CcTest::InitializeVM(); |
5500 Isolate* isolate = CcTest::i_isolate(); | 5516 Isolate* isolate = CcTest::i_isolate(); |
5501 HandleScope scope(isolate); | 5517 HandleScope scope(isolate); |
5502 | 5518 |
5503 MacroAssembler assm(isolate, nullptr, 0); | 5519 MacroAssembler assm(isolate, nullptr, 0, |
| 5520 v8::internal::CodeObjectRequired::kYes); |
5504 Label done; | 5521 Label done; |
5505 size_t nr_calls = kMaxBranchOffset / (2 * Instruction::kInstrSize) + 2; | 5522 size_t nr_calls = kMaxBranchOffset / (2 * Instruction::kInstrSize) + 2; |
5506 | 5523 |
5507 for (size_t i = 0; i < nr_calls; ++i) { | 5524 for (size_t i = 0; i < nr_calls; ++i) { |
5508 __ BranchShort(&done, eq, a0, Operand(a1)); | 5525 __ BranchShort(&done, eq, a0, Operand(a1)); |
5509 } | 5526 } |
5510 __ bind(&done); | 5527 __ bind(&done); |
5511 __ Ret(USE_DELAY_SLOT); | 5528 __ Ret(USE_DELAY_SLOT); |
5512 __ mov(v0, zero_reg); | 5529 __ mov(v0, zero_reg); |
5513 | 5530 |
5514 CodeDesc desc; | 5531 CodeDesc desc; |
5515 assm.GetCode(&desc); | 5532 assm.GetCode(&desc); |
5516 Handle<Code> code = isolate->factory()->NewCode( | 5533 Handle<Code> code = isolate->factory()->NewCode( |
5517 desc, Code::ComputeFlags(Code::STUB), Handle<Code>()); | 5534 desc, Code::ComputeFlags(Code::STUB), Handle<Code>()); |
5518 F2 f = FUNCTION_CAST<F2>(code->entry()); | 5535 F2 f = FUNCTION_CAST<F2>(code->entry()); |
5519 | 5536 |
5520 int64_t res = reinterpret_cast<int64_t>( | 5537 int64_t res = reinterpret_cast<int64_t>( |
5521 CALL_GENERATED_CODE(isolate, f, 42, 42, 0, 0, 0)); | 5538 CALL_GENERATED_CODE(isolate, f, 42, 42, 0, 0, 0)); |
5522 CHECK_EQ(res, 0); | 5539 CHECK_EQ(res, 0); |
5523 } | 5540 } |
5524 | 5541 |
5525 | 5542 |
5526 #undef __ | 5543 #undef __ |
OLD | NEW |