| 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 int res = reinterpret_cast<int>( | 75 int res = reinterpret_cast<int>( |
| 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(static_cast<int32_t>(0xabc), res); | 77 CHECK_EQ(static_cast<int32_t>(0xabc), 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(1275, res); | 113 CHECK_EQ(1275, 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(t0, zero_reg, 0); | 131 __ ori(t0, zero_reg, 0); |
| 132 __ lui(t0, 0x1234); | 132 __ lui(t0, 0x1234); |
| (...skipping 140 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 273 float fc; | 273 float fc; |
| 274 float fd; | 274 float fd; |
| 275 float fe; | 275 float fe; |
| 276 float ff; | 276 float ff; |
| 277 float fg; | 277 float fg; |
| 278 } T; | 278 } T; |
| 279 T t; | 279 T t; |
| 280 | 280 |
| 281 // Create a function that accepts &t, and loads, manipulates, and stores | 281 // Create a function that accepts &t, and loads, manipulates, and stores |
| 282 // the doubles t.a ... t.f. | 282 // the doubles t.a ... t.f. |
| 283 MacroAssembler assm(isolate, NULL, 0); | 283 MacroAssembler assm(isolate, NULL, 0, v8::internal::CodeObjectRequired::kYes); |
| 284 Label L, C; | 284 Label L, C; |
| 285 | 285 |
| 286 // Double precision floating point instructions. | 286 // Double precision floating point instructions. |
| 287 __ ldc1(f4, MemOperand(a0, offsetof(T, a)) ); | 287 __ ldc1(f4, MemOperand(a0, offsetof(T, a)) ); |
| 288 __ ldc1(f6, MemOperand(a0, offsetof(T, b)) ); | 288 __ ldc1(f6, MemOperand(a0, offsetof(T, b)) ); |
| 289 __ add_d(f8, f4, f6); | 289 __ add_d(f8, f4, f6); |
| 290 __ sdc1(f8, MemOperand(a0, offsetof(T, c)) ); // c = a + b. | 290 __ sdc1(f8, MemOperand(a0, offsetof(T, c)) ); // c = a + b. |
| 291 | 291 |
| 292 __ mov_d(f10, f8); // c | 292 __ mov_d(f10, f8); // c |
| 293 __ neg_d(f12, f6); // -b | 293 __ neg_d(f12, f6); // -b |
| (...skipping 317 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 611 double c; | 611 double c; |
| 612 double d; | 612 double d; |
| 613 double e; | 613 double e; |
| 614 double f; | 614 double f; |
| 615 int32_t result; | 615 int32_t result; |
| 616 } T; | 616 } T; |
| 617 T t; | 617 T t; |
| 618 | 618 |
| 619 // Create a function that accepts &t, and loads, manipulates, and stores | 619 // Create a function that accepts &t, and loads, manipulates, and stores |
| 620 // the doubles t.a ... t.f. | 620 // the doubles t.a ... t.f. |
| 621 MacroAssembler assm(isolate, NULL, 0); | 621 MacroAssembler assm(isolate, NULL, 0, v8::internal::CodeObjectRequired::kYes); |
| 622 Label neither_is_nan, less_than, outa_here; | 622 Label neither_is_nan, less_than, outa_here; |
| 623 | 623 |
| 624 __ ldc1(f4, MemOperand(a0, offsetof(T, a)) ); | 624 __ ldc1(f4, MemOperand(a0, offsetof(T, a)) ); |
| 625 __ ldc1(f6, MemOperand(a0, offsetof(T, b)) ); | 625 __ ldc1(f6, MemOperand(a0, offsetof(T, b)) ); |
| 626 if (!IsMipsArchVariant(kMips32r6)) { | 626 if (!IsMipsArchVariant(kMips32r6)) { |
| 627 __ c(UN, D, f4, f6); | 627 __ c(UN, D, f4, f6); |
| 628 __ bc1f(&neither_is_nan); | 628 __ bc1f(&neither_is_nan); |
| 629 } else { | 629 } else { |
| 630 __ cmp(UN, L, f2, f4, f6); | 630 __ cmp(UN, L, f2, f4, f6); |
| 631 __ bc1eqz(&neither_is_nan, f2); | 631 __ bc1eqz(&neither_is_nan, f2); |
| (...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 702 int32_t result_rotrv_4; | 702 int32_t result_rotrv_4; |
| 703 int32_t result_rotrv_8; | 703 int32_t result_rotrv_8; |
| 704 int32_t result_rotrv_12; | 704 int32_t result_rotrv_12; |
| 705 int32_t result_rotrv_16; | 705 int32_t result_rotrv_16; |
| 706 int32_t result_rotrv_20; | 706 int32_t result_rotrv_20; |
| 707 int32_t result_rotrv_24; | 707 int32_t result_rotrv_24; |
| 708 int32_t result_rotrv_28; | 708 int32_t result_rotrv_28; |
| 709 } T; | 709 } T; |
| 710 T t; | 710 T t; |
| 711 | 711 |
| 712 MacroAssembler assm(isolate, NULL, 0); | 712 MacroAssembler assm(isolate, NULL, 0, |
| 713 v8::internal::CodeObjectRequired::kYes); |
| 713 | 714 |
| 714 // Basic word load. | 715 // Basic word load. |
| 715 __ lw(t0, MemOperand(a0, offsetof(T, input)) ); | 716 __ lw(t0, MemOperand(a0, offsetof(T, input)) ); |
| 716 | 717 |
| 717 // ROTR instruction (called through the Ror macro). | 718 // ROTR instruction (called through the Ror macro). |
| 718 __ Ror(t1, t0, 0x0004); | 719 __ Ror(t1, t0, 0x0004); |
| 719 __ Ror(t2, t0, 0x0008); | 720 __ Ror(t2, t0, 0x0008); |
| 720 __ Ror(t3, t0, 0x000c); | 721 __ Ror(t3, t0, 0x000c); |
| 721 __ Ror(t4, t0, 0x0010); | 722 __ Ror(t4, t0, 0x0010); |
| 722 __ Ror(t5, t0, 0x0014); | 723 __ Ror(t5, t0, 0x0014); |
| (...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 786 } | 787 } |
| 787 } | 788 } |
| 788 | 789 |
| 789 | 790 |
| 790 TEST(MIPS9) { | 791 TEST(MIPS9) { |
| 791 // Test BRANCH improvements. | 792 // Test BRANCH improvements. |
| 792 CcTest::InitializeVM(); | 793 CcTest::InitializeVM(); |
| 793 Isolate* isolate = CcTest::i_isolate(); | 794 Isolate* isolate = CcTest::i_isolate(); |
| 794 HandleScope scope(isolate); | 795 HandleScope scope(isolate); |
| 795 | 796 |
| 796 MacroAssembler assm(isolate, NULL, 0); | 797 MacroAssembler assm(isolate, NULL, 0, v8::internal::CodeObjectRequired::kYes); |
| 797 Label exit, exit2, exit3; | 798 Label exit, exit2, exit3; |
| 798 | 799 |
| 799 __ Branch(&exit, ge, a0, Operand(zero_reg)); | 800 __ Branch(&exit, ge, a0, Operand(zero_reg)); |
| 800 __ Branch(&exit2, ge, a0, Operand(0x00001FFF)); | 801 __ Branch(&exit2, ge, a0, Operand(0x00001FFF)); |
| 801 __ Branch(&exit3, ge, a0, Operand(0x0001FFFF)); | 802 __ Branch(&exit3, ge, a0, Operand(0x0001FFFF)); |
| 802 | 803 |
| 803 __ bind(&exit); | 804 __ bind(&exit); |
| 804 __ bind(&exit2); | 805 __ bind(&exit2); |
| 805 __ bind(&exit3); | 806 __ bind(&exit3); |
| 806 __ jr(ra); | 807 __ jr(ra); |
| (...skipping 253 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1060 typedef struct { | 1061 typedef struct { |
| 1061 int32_t x; | 1062 int32_t x; |
| 1062 int32_t y; | 1063 int32_t y; |
| 1063 int32_t y1; | 1064 int32_t y1; |
| 1064 int32_t y2; | 1065 int32_t y2; |
| 1065 int32_t y3; | 1066 int32_t y3; |
| 1066 int32_t y4; | 1067 int32_t y4; |
| 1067 } T; | 1068 } T; |
| 1068 T t; | 1069 T t; |
| 1069 | 1070 |
| 1070 MacroAssembler assm(isolate, NULL, 0); | 1071 MacroAssembler assm(isolate, NULL, 0, v8::internal::CodeObjectRequired::kYes); |
| 1071 | 1072 |
| 1072 __ mov(t6, fp); // Save frame pointer. | 1073 __ mov(t6, fp); // Save frame pointer. |
| 1073 __ mov(fp, a0); // Access struct T by fp. | 1074 __ mov(fp, a0); // Access struct T by fp. |
| 1074 __ lw(t0, MemOperand(a0, offsetof(T, y)) ); | 1075 __ lw(t0, MemOperand(a0, offsetof(T, y)) ); |
| 1075 __ lw(t3, MemOperand(a0, offsetof(T, y4)) ); | 1076 __ lw(t3, MemOperand(a0, offsetof(T, y4)) ); |
| 1076 | 1077 |
| 1077 __ addu(t1, t0, t3); | 1078 __ addu(t1, t0, t3); |
| 1078 __ subu(t4, t0, t3); | 1079 __ subu(t4, t0, t3); |
| 1079 __ nop(); | 1080 __ nop(); |
| 1080 __ push(t0); // These instructions disappear after opt. | 1081 __ push(t0); // These instructions disappear after opt. |
| (...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1149 typedef struct { | 1150 typedef struct { |
| 1150 double cvt_big_out; | 1151 double cvt_big_out; |
| 1151 double cvt_small_out; | 1152 double cvt_small_out; |
| 1152 uint32_t trunc_big_out; | 1153 uint32_t trunc_big_out; |
| 1153 uint32_t trunc_small_out; | 1154 uint32_t trunc_small_out; |
| 1154 uint32_t cvt_big_in; | 1155 uint32_t cvt_big_in; |
| 1155 uint32_t cvt_small_in; | 1156 uint32_t cvt_small_in; |
| 1156 } T; | 1157 } T; |
| 1157 T t; | 1158 T t; |
| 1158 | 1159 |
| 1159 MacroAssembler assm(isolate, NULL, 0); | 1160 MacroAssembler assm(isolate, NULL, 0, v8::internal::CodeObjectRequired::kYes); |
| 1160 | 1161 |
| 1161 __ sw(t0, MemOperand(a0, offsetof(T, cvt_small_in))); | 1162 __ sw(t0, MemOperand(a0, offsetof(T, cvt_small_in))); |
| 1162 __ Cvt_d_uw(f10, t0, f4); | 1163 __ Cvt_d_uw(f10, t0, f4); |
| 1163 __ sdc1(f10, MemOperand(a0, offsetof(T, cvt_small_out))); | 1164 __ sdc1(f10, MemOperand(a0, offsetof(T, cvt_small_out))); |
| 1164 | 1165 |
| 1165 __ Trunc_uw_d(f10, f10, f4); | 1166 __ Trunc_uw_d(f10, f10, f4); |
| 1166 __ swc1(f10, MemOperand(a0, offsetof(T, trunc_small_out))); | 1167 __ swc1(f10, MemOperand(a0, offsetof(T, trunc_small_out))); |
| 1167 | 1168 |
| 1168 __ sw(t0, MemOperand(a0, offsetof(T, cvt_big_in))); | 1169 __ sw(t0, MemOperand(a0, offsetof(T, cvt_big_in))); |
| 1169 __ Cvt_d_uw(f8, t0, f4); | 1170 __ Cvt_d_uw(f8, t0, f4); |
| (...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1226 ROUND_STRUCT_ELEMENT(round) | 1227 ROUND_STRUCT_ELEMENT(round) |
| 1227 ROUND_STRUCT_ELEMENT(floor) | 1228 ROUND_STRUCT_ELEMENT(floor) |
| 1228 ROUND_STRUCT_ELEMENT(ceil) | 1229 ROUND_STRUCT_ELEMENT(ceil) |
| 1229 ROUND_STRUCT_ELEMENT(trunc) | 1230 ROUND_STRUCT_ELEMENT(trunc) |
| 1230 ROUND_STRUCT_ELEMENT(cvt) | 1231 ROUND_STRUCT_ELEMENT(cvt) |
| 1231 } T; | 1232 } T; |
| 1232 T t; | 1233 T t; |
| 1233 | 1234 |
| 1234 #undef ROUND_STRUCT_ELEMENT | 1235 #undef ROUND_STRUCT_ELEMENT |
| 1235 | 1236 |
| 1236 MacroAssembler assm(isolate, NULL, 0); | 1237 MacroAssembler assm(isolate, NULL, 0, v8::internal::CodeObjectRequired::kYes); |
| 1237 | 1238 |
| 1238 // Save FCSR. | 1239 // Save FCSR. |
| 1239 __ cfc1(a1, FCSR); | 1240 __ cfc1(a1, FCSR); |
| 1240 // Disable FPU exceptions. | 1241 // Disable FPU exceptions. |
| 1241 __ ctc1(zero_reg, FCSR); | 1242 __ ctc1(zero_reg, FCSR); |
| 1242 #define RUN_ROUND_TEST(x) \ | 1243 #define RUN_ROUND_TEST(x) \ |
| 1243 __ ldc1(f0, MemOperand(a0, offsetof(T, round_up_in))); \ | 1244 __ ldc1(f0, MemOperand(a0, offsetof(T, round_up_in))); \ |
| 1244 __ x##_w_d(f0, f0); \ | 1245 __ x##_w_d(f0, f0); \ |
| 1245 __ swc1(f0, MemOperand(a0, offsetof(T, x##_up_out))); \ | 1246 __ swc1(f0, MemOperand(a0, offsetof(T, x##_up_out))); \ |
| 1246 \ | 1247 \ |
| (...skipping 95 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1342 __ nop(); | 1343 __ nop(); |
| 1343 } | 1344 } |
| 1344 | 1345 |
| 1345 | 1346 |
| 1346 // ----------------------mips32r6 specific tests---------------------- | 1347 // ----------------------mips32r6 specific tests---------------------- |
| 1347 TEST(seleqz_selnez) { | 1348 TEST(seleqz_selnez) { |
| 1348 if (IsMipsArchVariant(kMips32r6)) { | 1349 if (IsMipsArchVariant(kMips32r6)) { |
| 1349 CcTest::InitializeVM(); | 1350 CcTest::InitializeVM(); |
| 1350 Isolate* isolate = CcTest::i_isolate(); | 1351 Isolate* isolate = CcTest::i_isolate(); |
| 1351 HandleScope scope(isolate); | 1352 HandleScope scope(isolate); |
| 1352 MacroAssembler assm(isolate, NULL, 0); | 1353 MacroAssembler assm(isolate, NULL, 0, |
| 1354 v8::internal::CodeObjectRequired::kYes); |
| 1353 | 1355 |
| 1354 typedef struct test { | 1356 typedef struct test { |
| 1355 int a; | 1357 int a; |
| 1356 int b; | 1358 int b; |
| 1357 int c; | 1359 int c; |
| 1358 int d; | 1360 int d; |
| 1359 double e; | 1361 double e; |
| 1360 double f; | 1362 double f; |
| 1361 double g; | 1363 double g; |
| 1362 double h; | 1364 double h; |
| (...skipping 80 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1443 } | 1445 } |
| 1444 } | 1446 } |
| 1445 } | 1447 } |
| 1446 | 1448 |
| 1447 | 1449 |
| 1448 TEST(min_max) { | 1450 TEST(min_max) { |
| 1449 if (IsMipsArchVariant(kMips32r6)) { | 1451 if (IsMipsArchVariant(kMips32r6)) { |
| 1450 CcTest::InitializeVM(); | 1452 CcTest::InitializeVM(); |
| 1451 Isolate* isolate = CcTest::i_isolate(); | 1453 Isolate* isolate = CcTest::i_isolate(); |
| 1452 HandleScope scope(isolate); | 1454 HandleScope scope(isolate); |
| 1453 MacroAssembler assm(isolate, NULL, 0); | 1455 MacroAssembler assm(isolate, NULL, 0, |
| 1456 v8::internal::CodeObjectRequired::kYes); |
| 1454 | 1457 |
| 1455 typedef struct test_float { | 1458 typedef struct test_float { |
| 1456 double a; | 1459 double a; |
| 1457 double b; | 1460 double b; |
| 1458 double c; | 1461 double c; |
| 1459 double d; | 1462 double d; |
| 1460 float e; | 1463 float e; |
| 1461 float f; | 1464 float f; |
| 1462 float g; | 1465 float g; |
| 1463 float h; | 1466 float h; |
| (...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1520 } | 1523 } |
| 1521 } | 1524 } |
| 1522 | 1525 |
| 1523 | 1526 |
| 1524 TEST(rint_d) { | 1527 TEST(rint_d) { |
| 1525 if (IsMipsArchVariant(kMips32r6)) { | 1528 if (IsMipsArchVariant(kMips32r6)) { |
| 1526 const int kTableLength = 30; | 1529 const int kTableLength = 30; |
| 1527 CcTest::InitializeVM(); | 1530 CcTest::InitializeVM(); |
| 1528 Isolate* isolate = CcTest::i_isolate(); | 1531 Isolate* isolate = CcTest::i_isolate(); |
| 1529 HandleScope scope(isolate); | 1532 HandleScope scope(isolate); |
| 1530 MacroAssembler assm(isolate, NULL, 0); | 1533 MacroAssembler assm(isolate, NULL, 0, |
| 1534 v8::internal::CodeObjectRequired::kYes); |
| 1531 | 1535 |
| 1532 typedef struct test_float { | 1536 typedef struct test_float { |
| 1533 double a; | 1537 double a; |
| 1534 double b; | 1538 double b; |
| 1535 int fcsr; | 1539 int fcsr; |
| 1536 }TestFloat; | 1540 }TestFloat; |
| 1537 | 1541 |
| 1538 TestFloat test; | 1542 TestFloat test; |
| 1539 double inputs[kTableLength] = {18446744073709551617.0, | 1543 double inputs[kTableLength] = {18446744073709551617.0, |
| 1540 4503599627370496.0, -4503599627370496.0, | 1544 4503599627370496.0, -4503599627370496.0, |
| (...skipping 84 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1625 } | 1629 } |
| 1626 } | 1630 } |
| 1627 } | 1631 } |
| 1628 | 1632 |
| 1629 | 1633 |
| 1630 TEST(sel) { | 1634 TEST(sel) { |
| 1631 if (IsMipsArchVariant(kMips32r6)) { | 1635 if (IsMipsArchVariant(kMips32r6)) { |
| 1632 CcTest::InitializeVM(); | 1636 CcTest::InitializeVM(); |
| 1633 Isolate* isolate = CcTest::i_isolate(); | 1637 Isolate* isolate = CcTest::i_isolate(); |
| 1634 HandleScope scope(isolate); | 1638 HandleScope scope(isolate); |
| 1635 MacroAssembler assm(isolate, NULL, 0); | 1639 MacroAssembler assm(isolate, NULL, 0, |
| 1640 v8::internal::CodeObjectRequired::kYes); |
| 1636 | 1641 |
| 1637 typedef struct test { | 1642 typedef struct test { |
| 1638 double dd; | 1643 double dd; |
| 1639 double ds; | 1644 double ds; |
| 1640 double dt; | 1645 double dt; |
| 1641 float fd; | 1646 float fd; |
| 1642 float fs; | 1647 float fs; |
| 1643 float ft; | 1648 float ft; |
| 1644 } Test; | 1649 } Test; |
| 1645 | 1650 |
| (...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1699 } | 1704 } |
| 1700 } | 1705 } |
| 1701 | 1706 |
| 1702 | 1707 |
| 1703 TEST(rint_s) { | 1708 TEST(rint_s) { |
| 1704 if (IsMipsArchVariant(kMips32r6)) { | 1709 if (IsMipsArchVariant(kMips32r6)) { |
| 1705 const int kTableLength = 30; | 1710 const int kTableLength = 30; |
| 1706 CcTest::InitializeVM(); | 1711 CcTest::InitializeVM(); |
| 1707 Isolate* isolate = CcTest::i_isolate(); | 1712 Isolate* isolate = CcTest::i_isolate(); |
| 1708 HandleScope scope(isolate); | 1713 HandleScope scope(isolate); |
| 1709 MacroAssembler assm(isolate, NULL, 0); | 1714 MacroAssembler assm(isolate, NULL, 0, |
| 1715 v8::internal::CodeObjectRequired::kYes); |
| 1710 | 1716 |
| 1711 typedef struct test_float { | 1717 typedef struct test_float { |
| 1712 float a; | 1718 float a; |
| 1713 float b; | 1719 float b; |
| 1714 int fcsr; | 1720 int fcsr; |
| 1715 }TestFloat; | 1721 }TestFloat; |
| 1716 | 1722 |
| 1717 TestFloat test; | 1723 TestFloat test; |
| 1718 float inputs[kTableLength] = {18446744073709551617.0, | 1724 float inputs[kTableLength] = {18446744073709551617.0, |
| 1719 4503599627370496.0, -4503599627370496.0, | 1725 4503599627370496.0, -4503599627370496.0, |
| (...skipping 85 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1805 } | 1811 } |
| 1806 } | 1812 } |
| 1807 | 1813 |
| 1808 | 1814 |
| 1809 TEST(mina_maxa) { | 1815 TEST(mina_maxa) { |
| 1810 if (IsMipsArchVariant(kMips32r6)) { | 1816 if (IsMipsArchVariant(kMips32r6)) { |
| 1811 const int kTableLength = 15; | 1817 const int kTableLength = 15; |
| 1812 CcTest::InitializeVM(); | 1818 CcTest::InitializeVM(); |
| 1813 Isolate* isolate = CcTest::i_isolate(); | 1819 Isolate* isolate = CcTest::i_isolate(); |
| 1814 HandleScope scope(isolate); | 1820 HandleScope scope(isolate); |
| 1815 MacroAssembler assm(isolate, NULL, 0); | 1821 MacroAssembler assm(isolate, NULL, 0, |
| 1822 v8::internal::CodeObjectRequired::kYes); |
| 1816 const double double_nan = std::numeric_limits<double>::quiet_NaN(); | 1823 const double double_nan = std::numeric_limits<double>::quiet_NaN(); |
| 1817 const float float_nan = std::numeric_limits<float>::quiet_NaN(); | 1824 const float float_nan = std::numeric_limits<float>::quiet_NaN(); |
| 1818 | 1825 |
| 1819 typedef struct test_float { | 1826 typedef struct test_float { |
| 1820 double a; | 1827 double a; |
| 1821 double b; | 1828 double b; |
| 1822 double resd; | 1829 double resd; |
| 1823 double resd1; | 1830 double resd1; |
| 1824 float c; | 1831 float c; |
| 1825 float d; | 1832 float d; |
| (...skipping 76 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1902 } | 1909 } |
| 1903 } | 1910 } |
| 1904 | 1911 |
| 1905 | 1912 |
| 1906 // ----------------------mips32r2 specific tests---------------------- | 1913 // ----------------------mips32r2 specific tests---------------------- |
| 1907 TEST(trunc_l) { | 1914 TEST(trunc_l) { |
| 1908 if (IsMipsArchVariant(kMips32r2) && IsFp64Mode()) { | 1915 if (IsMipsArchVariant(kMips32r2) && IsFp64Mode()) { |
| 1909 CcTest::InitializeVM(); | 1916 CcTest::InitializeVM(); |
| 1910 Isolate* isolate = CcTest::i_isolate(); | 1917 Isolate* isolate = CcTest::i_isolate(); |
| 1911 HandleScope scope(isolate); | 1918 HandleScope scope(isolate); |
| 1912 MacroAssembler assm(isolate, NULL, 0); | 1919 MacroAssembler assm(isolate, NULL, 0, |
| 1920 v8::internal::CodeObjectRequired::kYes); |
| 1913 const double dFPU64InvalidResult = static_cast<double>(kFPU64InvalidResult); | 1921 const double dFPU64InvalidResult = static_cast<double>(kFPU64InvalidResult); |
| 1914 typedef struct test_float { | 1922 typedef struct test_float { |
| 1915 double a; | 1923 double a; |
| 1916 float b; | 1924 float b; |
| 1917 int64_t c; // a trunc result | 1925 int64_t c; // a trunc result |
| 1918 int64_t d; // b trunc result | 1926 int64_t d; // b trunc result |
| 1919 }Test; | 1927 }Test; |
| 1920 const int kTableLength = 15; | 1928 const int kTableLength = 15; |
| 1921 double inputs_D[kTableLength] = { | 1929 double inputs_D[kTableLength] = { |
| 1922 2.1, 2.6, 2.5, 3.1, 3.6, 3.5, | 1930 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... |
| 1962 } | 1970 } |
| 1963 } | 1971 } |
| 1964 | 1972 |
| 1965 | 1973 |
| 1966 TEST(movz_movn) { | 1974 TEST(movz_movn) { |
| 1967 if (IsMipsArchVariant(kMips32r2)) { | 1975 if (IsMipsArchVariant(kMips32r2)) { |
| 1968 const int kTableLength = 4; | 1976 const int kTableLength = 4; |
| 1969 CcTest::InitializeVM(); | 1977 CcTest::InitializeVM(); |
| 1970 Isolate* isolate = CcTest::i_isolate(); | 1978 Isolate* isolate = CcTest::i_isolate(); |
| 1971 HandleScope scope(isolate); | 1979 HandleScope scope(isolate); |
| 1972 MacroAssembler assm(isolate, NULL, 0); | 1980 MacroAssembler assm(isolate, NULL, 0, |
| 1981 v8::internal::CodeObjectRequired::kYes); |
| 1973 | 1982 |
| 1974 typedef struct test_float { | 1983 typedef struct test_float { |
| 1975 int64_t rt; | 1984 int64_t rt; |
| 1976 double a; | 1985 double a; |
| 1977 double b; | 1986 double b; |
| 1978 double bold; | 1987 double bold; |
| 1979 double b1; | 1988 double b1; |
| 1980 double bold1; | 1989 double bold1; |
| 1981 float c; | 1990 float c; |
| 1982 float d; | 1991 float d; |
| (...skipping 108 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2091 test.srcf = inputs_S[i]; | 2100 test.srcf = inputs_S[i]; |
| 2092 | 2101 |
| 2093 for (int j = 0; j< 8; j++) { | 2102 for (int j = 0; j< 8; j++) { |
| 2094 test.cc = condition_flags[j]; | 2103 test.cc = condition_flags[j]; |
| 2095 if (test.cc == 0) { | 2104 if (test.cc == 0) { |
| 2096 test.fcsr = 1 << 23; | 2105 test.fcsr = 1 << 23; |
| 2097 } else { | 2106 } else { |
| 2098 test.fcsr = 1 << (24+condition_flags[j]); | 2107 test.fcsr = 1 << (24+condition_flags[j]); |
| 2099 } | 2108 } |
| 2100 HandleScope scope(isolate); | 2109 HandleScope scope(isolate); |
| 2101 MacroAssembler assm(isolate, NULL, 0); | 2110 MacroAssembler assm(isolate, NULL, 0, |
| 2111 v8::internal::CodeObjectRequired::kYes); |
| 2102 __ ldc1(f2, MemOperand(a0, offsetof(TestFloat, srcd)) ); | 2112 __ ldc1(f2, MemOperand(a0, offsetof(TestFloat, srcd)) ); |
| 2103 __ lwc1(f4, MemOperand(a0, offsetof(TestFloat, srcf)) ); | 2113 __ lwc1(f4, MemOperand(a0, offsetof(TestFloat, srcf)) ); |
| 2104 __ lw(t1, MemOperand(a0, offsetof(TestFloat, fcsr)) ); | 2114 __ lw(t1, MemOperand(a0, offsetof(TestFloat, fcsr)) ); |
| 2105 __ cfc1(t0, FCSR); | 2115 __ cfc1(t0, FCSR); |
| 2106 __ ctc1(t1, FCSR); | 2116 __ ctc1(t1, FCSR); |
| 2107 __ li(t2, 0x0); | 2117 __ li(t2, 0x0); |
| 2108 __ mtc1(t2, f12); | 2118 __ mtc1(t2, f12); |
| 2109 __ mtc1(t2, f10); | 2119 __ mtc1(t2, f10); |
| 2110 __ sdc1(f10, MemOperand(a0, offsetof(TestFloat, dstdold)) ); | 2120 __ sdc1(f10, MemOperand(a0, offsetof(TestFloat, dstdold)) ); |
| 2111 __ swc1(f12, MemOperand(a0, offsetof(TestFloat, dstfold)) ); | 2121 __ swc1(f12, MemOperand(a0, offsetof(TestFloat, dstfold)) ); |
| (...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2144 } | 2154 } |
| 2145 } | 2155 } |
| 2146 } | 2156 } |
| 2147 | 2157 |
| 2148 | 2158 |
| 2149 // ----------------------tests for all archs-------------------------- | 2159 // ----------------------tests for all archs-------------------------- |
| 2150 TEST(cvt_w_d) { | 2160 TEST(cvt_w_d) { |
| 2151 CcTest::InitializeVM(); | 2161 CcTest::InitializeVM(); |
| 2152 Isolate* isolate = CcTest::i_isolate(); | 2162 Isolate* isolate = CcTest::i_isolate(); |
| 2153 HandleScope scope(isolate); | 2163 HandleScope scope(isolate); |
| 2154 MacroAssembler assm(isolate, NULL, 0); | 2164 MacroAssembler assm(isolate, NULL, 0, v8::internal::CodeObjectRequired::kYes); |
| 2155 | 2165 |
| 2156 typedef struct test_float { | 2166 typedef struct test_float { |
| 2157 double a; | 2167 double a; |
| 2158 int32_t b; | 2168 int32_t b; |
| 2159 int32_t fcsr; | 2169 int32_t fcsr; |
| 2160 }Test; | 2170 }Test; |
| 2161 const int kTableLength = 24; | 2171 const int kTableLength = 24; |
| 2162 double inputs[kTableLength] = { | 2172 double inputs[kTableLength] = { |
| 2163 2.1, 2.6, 2.5, 3.1, 3.6, 3.5, | 2173 2.1, 2.6, 2.5, 3.1, 3.6, 3.5, |
| 2164 -2.1, -2.6, -2.5, -3.1, -3.6, -3.5, | 2174 -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... |
| 2221 CHECK_EQ(test.b, outputs[j][i]); | 2231 CHECK_EQ(test.b, outputs[j][i]); |
| 2222 } | 2232 } |
| 2223 } | 2233 } |
| 2224 } | 2234 } |
| 2225 | 2235 |
| 2226 | 2236 |
| 2227 TEST(trunc_w) { | 2237 TEST(trunc_w) { |
| 2228 CcTest::InitializeVM(); | 2238 CcTest::InitializeVM(); |
| 2229 Isolate* isolate = CcTest::i_isolate(); | 2239 Isolate* isolate = CcTest::i_isolate(); |
| 2230 HandleScope scope(isolate); | 2240 HandleScope scope(isolate); |
| 2231 MacroAssembler assm(isolate, NULL, 0); | 2241 MacroAssembler assm(isolate, NULL, 0, v8::internal::CodeObjectRequired::kYes); |
| 2232 | 2242 |
| 2233 typedef struct test_float { | 2243 typedef struct test_float { |
| 2234 double a; | 2244 double a; |
| 2235 float b; | 2245 float b; |
| 2236 int32_t c; // a trunc result | 2246 int32_t c; // a trunc result |
| 2237 int32_t d; // b trunc result | 2247 int32_t d; // b trunc result |
| 2238 }Test; | 2248 }Test; |
| 2239 const int kTableLength = 15; | 2249 const int kTableLength = 15; |
| 2240 double inputs_D[kTableLength] = { | 2250 double inputs_D[kTableLength] = { |
| 2241 2.1, 2.6, 2.5, 3.1, 3.6, 3.5, | 2251 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... |
| 2278 CHECK_EQ(test.c, outputs[i]); | 2288 CHECK_EQ(test.c, outputs[i]); |
| 2279 CHECK_EQ(test.d, test.c); | 2289 CHECK_EQ(test.d, test.c); |
| 2280 } | 2290 } |
| 2281 } | 2291 } |
| 2282 | 2292 |
| 2283 | 2293 |
| 2284 TEST(round_w) { | 2294 TEST(round_w) { |
| 2285 CcTest::InitializeVM(); | 2295 CcTest::InitializeVM(); |
| 2286 Isolate* isolate = CcTest::i_isolate(); | 2296 Isolate* isolate = CcTest::i_isolate(); |
| 2287 HandleScope scope(isolate); | 2297 HandleScope scope(isolate); |
| 2288 MacroAssembler assm(isolate, NULL, 0); | 2298 MacroAssembler assm(isolate, NULL, 0, v8::internal::CodeObjectRequired::kYes); |
| 2289 | 2299 |
| 2290 typedef struct test_float { | 2300 typedef struct test_float { |
| 2291 double a; | 2301 double a; |
| 2292 float b; | 2302 float b; |
| 2293 int32_t c; // a trunc result | 2303 int32_t c; // a trunc result |
| 2294 int32_t d; // b trunc result | 2304 int32_t d; // b trunc result |
| 2295 }Test; | 2305 }Test; |
| 2296 const int kTableLength = 15; | 2306 const int kTableLength = 15; |
| 2297 double inputs_D[kTableLength] = { | 2307 double inputs_D[kTableLength] = { |
| 2298 2.1, 2.6, 2.5, 3.1, 3.6, 3.5, | 2308 2.1, 2.6, 2.5, 3.1, 3.6, 3.5, |
| (...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2336 CHECK_EQ(test.d, test.c); | 2346 CHECK_EQ(test.d, test.c); |
| 2337 } | 2347 } |
| 2338 } | 2348 } |
| 2339 | 2349 |
| 2340 | 2350 |
| 2341 TEST(round_l) { | 2351 TEST(round_l) { |
| 2342 if (IsFp64Mode()) { | 2352 if (IsFp64Mode()) { |
| 2343 CcTest::InitializeVM(); | 2353 CcTest::InitializeVM(); |
| 2344 Isolate* isolate = CcTest::i_isolate(); | 2354 Isolate* isolate = CcTest::i_isolate(); |
| 2345 HandleScope scope(isolate); | 2355 HandleScope scope(isolate); |
| 2346 MacroAssembler assm(isolate, NULL, 0); | 2356 MacroAssembler assm(isolate, NULL, 0, |
| 2357 v8::internal::CodeObjectRequired::kYes); |
| 2347 const double dFPU64InvalidResult = static_cast<double>(kFPU64InvalidResult); | 2358 const double dFPU64InvalidResult = static_cast<double>(kFPU64InvalidResult); |
| 2348 typedef struct test_float { | 2359 typedef struct test_float { |
| 2349 double a; | 2360 double a; |
| 2350 float b; | 2361 float b; |
| 2351 int64_t c; | 2362 int64_t c; |
| 2352 int64_t d; | 2363 int64_t d; |
| 2353 }Test; | 2364 }Test; |
| 2354 const int kTableLength = 15; | 2365 const int kTableLength = 15; |
| 2355 double inputs_D[kTableLength] = { | 2366 double inputs_D[kTableLength] = { |
| 2356 2.1, 2.6, 2.5, 3.1, 3.6, 3.5, | 2367 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... |
| 2395 } | 2406 } |
| 2396 } | 2407 } |
| 2397 } | 2408 } |
| 2398 | 2409 |
| 2399 | 2410 |
| 2400 TEST(sub) { | 2411 TEST(sub) { |
| 2401 const int kTableLength = 12; | 2412 const int kTableLength = 12; |
| 2402 CcTest::InitializeVM(); | 2413 CcTest::InitializeVM(); |
| 2403 Isolate* isolate = CcTest::i_isolate(); | 2414 Isolate* isolate = CcTest::i_isolate(); |
| 2404 HandleScope scope(isolate); | 2415 HandleScope scope(isolate); |
| 2405 MacroAssembler assm(isolate, NULL, 0); | 2416 MacroAssembler assm(isolate, NULL, 0, v8::internal::CodeObjectRequired::kYes); |
| 2406 | 2417 |
| 2407 typedef struct test_float { | 2418 typedef struct test_float { |
| 2408 float a; | 2419 float a; |
| 2409 float b; | 2420 float b; |
| 2410 float resultS; | 2421 float resultS; |
| 2411 double c; | 2422 double c; |
| 2412 double d; | 2423 double d; |
| 2413 double resultD; | 2424 double resultD; |
| 2414 }TestFloat; | 2425 }TestFloat; |
| 2415 | 2426 |
| (...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2468 | 2479 |
| 2469 TEST(sqrt_rsqrt_recip) { | 2480 TEST(sqrt_rsqrt_recip) { |
| 2470 const int kTableLength = 4; | 2481 const int kTableLength = 4; |
| 2471 const double deltaDouble = 2E-15; | 2482 const double deltaDouble = 2E-15; |
| 2472 const float deltaFloat = 2E-7; | 2483 const float deltaFloat = 2E-7; |
| 2473 const float sqrt2_s = sqrt(2); | 2484 const float sqrt2_s = sqrt(2); |
| 2474 const double sqrt2_d = sqrt(2); | 2485 const double sqrt2_d = sqrt(2); |
| 2475 CcTest::InitializeVM(); | 2486 CcTest::InitializeVM(); |
| 2476 Isolate* isolate = CcTest::i_isolate(); | 2487 Isolate* isolate = CcTest::i_isolate(); |
| 2477 HandleScope scope(isolate); | 2488 HandleScope scope(isolate); |
| 2478 MacroAssembler assm(isolate, NULL, 0); | 2489 MacroAssembler assm(isolate, NULL, 0, v8::internal::CodeObjectRequired::kYes); |
| 2479 | 2490 |
| 2480 typedef struct test_float { | 2491 typedef struct test_float { |
| 2481 float a; | 2492 float a; |
| 2482 float resultS; | 2493 float resultS; |
| 2483 float resultS1; | 2494 float resultS1; |
| 2484 float resultS2; | 2495 float resultS2; |
| 2485 double c; | 2496 double c; |
| 2486 double resultD; | 2497 double resultD; |
| 2487 double resultD1; | 2498 double resultD1; |
| 2488 double resultD2; | 2499 double resultD2; |
| (...skipping 79 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2568 } | 2579 } |
| 2569 } | 2580 } |
| 2570 } | 2581 } |
| 2571 | 2582 |
| 2572 | 2583 |
| 2573 TEST(neg) { | 2584 TEST(neg) { |
| 2574 const int kTableLength = 3; | 2585 const int kTableLength = 3; |
| 2575 CcTest::InitializeVM(); | 2586 CcTest::InitializeVM(); |
| 2576 Isolate* isolate = CcTest::i_isolate(); | 2587 Isolate* isolate = CcTest::i_isolate(); |
| 2577 HandleScope scope(isolate); | 2588 HandleScope scope(isolate); |
| 2578 MacroAssembler assm(isolate, NULL, 0); | 2589 MacroAssembler assm(isolate, NULL, 0, v8::internal::CodeObjectRequired::kYes); |
| 2579 | 2590 |
| 2580 typedef struct test_float { | 2591 typedef struct test_float { |
| 2581 float a; | 2592 float a; |
| 2582 float resultS; | 2593 float resultS; |
| 2583 double c; | 2594 double c; |
| 2584 double resultD; | 2595 double resultD; |
| 2585 }TestFloat; | 2596 }TestFloat; |
| 2586 | 2597 |
| 2587 TestFloat test; | 2598 TestFloat test; |
| 2588 double inputs_D[kTableLength] = { | 2599 double inputs_D[kTableLength] = { |
| (...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2621 CHECK_EQ(test.resultD, outputs_D[i]); | 2632 CHECK_EQ(test.resultD, outputs_D[i]); |
| 2622 } | 2633 } |
| 2623 } | 2634 } |
| 2624 | 2635 |
| 2625 | 2636 |
| 2626 TEST(mul) { | 2637 TEST(mul) { |
| 2627 const int kTableLength = 4; | 2638 const int kTableLength = 4; |
| 2628 CcTest::InitializeVM(); | 2639 CcTest::InitializeVM(); |
| 2629 Isolate* isolate = CcTest::i_isolate(); | 2640 Isolate* isolate = CcTest::i_isolate(); |
| 2630 HandleScope scope(isolate); | 2641 HandleScope scope(isolate); |
| 2631 MacroAssembler assm(isolate, NULL, 0); | 2642 MacroAssembler assm(isolate, NULL, 0, v8::internal::CodeObjectRequired::kYes); |
| 2632 | 2643 |
| 2633 typedef struct test_float { | 2644 typedef struct test_float { |
| 2634 float a; | 2645 float a; |
| 2635 float b; | 2646 float b; |
| 2636 float resultS; | 2647 float resultS; |
| 2637 double c; | 2648 double c; |
| 2638 double d; | 2649 double d; |
| 2639 double resultD; | 2650 double resultD; |
| 2640 }TestFloat; | 2651 }TestFloat; |
| 2641 | 2652 |
| (...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2680 CHECK_EQ(test.resultD, inputfs_D[i]*inputft_D[i]); | 2691 CHECK_EQ(test.resultD, inputfs_D[i]*inputft_D[i]); |
| 2681 } | 2692 } |
| 2682 } | 2693 } |
| 2683 | 2694 |
| 2684 | 2695 |
| 2685 TEST(mov) { | 2696 TEST(mov) { |
| 2686 const int kTableLength = 4; | 2697 const int kTableLength = 4; |
| 2687 CcTest::InitializeVM(); | 2698 CcTest::InitializeVM(); |
| 2688 Isolate* isolate = CcTest::i_isolate(); | 2699 Isolate* isolate = CcTest::i_isolate(); |
| 2689 HandleScope scope(isolate); | 2700 HandleScope scope(isolate); |
| 2690 MacroAssembler assm(isolate, NULL, 0); | 2701 MacroAssembler assm(isolate, NULL, 0, v8::internal::CodeObjectRequired::kYes); |
| 2691 | 2702 |
| 2692 typedef struct test_float { | 2703 typedef struct test_float { |
| 2693 double a; | 2704 double a; |
| 2694 double b; | 2705 double b; |
| 2695 float c; | 2706 float c; |
| 2696 float d; | 2707 float d; |
| 2697 }TestFloat; | 2708 }TestFloat; |
| 2698 | 2709 |
| 2699 TestFloat test; | 2710 TestFloat test; |
| 2700 double inputs_D[kTableLength] = { | 2711 double inputs_D[kTableLength] = { |
| (...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2734 CHECK_EQ(test.b, outputs_D[i]); | 2745 CHECK_EQ(test.b, outputs_D[i]); |
| 2735 CHECK_EQ(test.d, outputs_S[i]); | 2746 CHECK_EQ(test.d, outputs_S[i]); |
| 2736 } | 2747 } |
| 2737 } | 2748 } |
| 2738 | 2749 |
| 2739 | 2750 |
| 2740 TEST(floor_w) { | 2751 TEST(floor_w) { |
| 2741 CcTest::InitializeVM(); | 2752 CcTest::InitializeVM(); |
| 2742 Isolate* isolate = CcTest::i_isolate(); | 2753 Isolate* isolate = CcTest::i_isolate(); |
| 2743 HandleScope scope(isolate); | 2754 HandleScope scope(isolate); |
| 2744 MacroAssembler assm(isolate, NULL, 0); | 2755 MacroAssembler assm(isolate, NULL, 0, v8::internal::CodeObjectRequired::kYes); |
| 2745 | 2756 |
| 2746 typedef struct test_float { | 2757 typedef struct test_float { |
| 2747 double a; | 2758 double a; |
| 2748 float b; | 2759 float b; |
| 2749 int32_t c; // a floor result | 2760 int32_t c; // a floor result |
| 2750 int32_t d; // b floor result | 2761 int32_t d; // b floor result |
| 2751 }Test; | 2762 }Test; |
| 2752 const int kTableLength = 15; | 2763 const int kTableLength = 15; |
| 2753 double inputs_D[kTableLength] = { | 2764 double inputs_D[kTableLength] = { |
| 2754 2.1, 2.6, 2.5, 3.1, 3.6, 3.5, | 2765 2.1, 2.6, 2.5, 3.1, 3.6, 3.5, |
| (...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2792 CHECK_EQ(test.d, test.c); | 2803 CHECK_EQ(test.d, test.c); |
| 2793 } | 2804 } |
| 2794 } | 2805 } |
| 2795 | 2806 |
| 2796 | 2807 |
| 2797 TEST(floor_l) { | 2808 TEST(floor_l) { |
| 2798 if (IsFp64Mode()) { | 2809 if (IsFp64Mode()) { |
| 2799 CcTest::InitializeVM(); | 2810 CcTest::InitializeVM(); |
| 2800 Isolate* isolate = CcTest::i_isolate(); | 2811 Isolate* isolate = CcTest::i_isolate(); |
| 2801 HandleScope scope(isolate); | 2812 HandleScope scope(isolate); |
| 2802 MacroAssembler assm(isolate, NULL, 0); | 2813 MacroAssembler assm(isolate, NULL, 0, |
| 2814 v8::internal::CodeObjectRequired::kYes); |
| 2803 const double dFPU64InvalidResult = static_cast<double>(kFPU64InvalidResult); | 2815 const double dFPU64InvalidResult = static_cast<double>(kFPU64InvalidResult); |
| 2804 typedef struct test_float { | 2816 typedef struct test_float { |
| 2805 double a; | 2817 double a; |
| 2806 float b; | 2818 float b; |
| 2807 int64_t c; | 2819 int64_t c; |
| 2808 int64_t d; | 2820 int64_t d; |
| 2809 }Test; | 2821 }Test; |
| 2810 const int kTableLength = 15; | 2822 const int kTableLength = 15; |
| 2811 double inputs_D[kTableLength] = { | 2823 double inputs_D[kTableLength] = { |
| 2812 2.1, 2.6, 2.5, 3.1, 3.6, 3.5, | 2824 2.1, 2.6, 2.5, 3.1, 3.6, 3.5, |
| (...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2850 CHECK_EQ(test.d, test.c); | 2862 CHECK_EQ(test.d, test.c); |
| 2851 } | 2863 } |
| 2852 } | 2864 } |
| 2853 } | 2865 } |
| 2854 | 2866 |
| 2855 | 2867 |
| 2856 TEST(ceil_w) { | 2868 TEST(ceil_w) { |
| 2857 CcTest::InitializeVM(); | 2869 CcTest::InitializeVM(); |
| 2858 Isolate* isolate = CcTest::i_isolate(); | 2870 Isolate* isolate = CcTest::i_isolate(); |
| 2859 HandleScope scope(isolate); | 2871 HandleScope scope(isolate); |
| 2860 MacroAssembler assm(isolate, NULL, 0); | 2872 MacroAssembler assm(isolate, NULL, 0, v8::internal::CodeObjectRequired::kYes); |
| 2861 | 2873 |
| 2862 typedef struct test_float { | 2874 typedef struct test_float { |
| 2863 double a; | 2875 double a; |
| 2864 float b; | 2876 float b; |
| 2865 int32_t c; // a floor result | 2877 int32_t c; // a floor result |
| 2866 int32_t d; // b floor result | 2878 int32_t d; // b floor result |
| 2867 }Test; | 2879 }Test; |
| 2868 const int kTableLength = 15; | 2880 const int kTableLength = 15; |
| 2869 double inputs_D[kTableLength] = { | 2881 double inputs_D[kTableLength] = { |
| 2870 2.1, 2.6, 2.5, 3.1, 3.6, 3.5, | 2882 2.1, 2.6, 2.5, 3.1, 3.6, 3.5, |
| (...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2908 CHECK_EQ(test.d, test.c); | 2920 CHECK_EQ(test.d, test.c); |
| 2909 } | 2921 } |
| 2910 } | 2922 } |
| 2911 | 2923 |
| 2912 | 2924 |
| 2913 TEST(ceil_l) { | 2925 TEST(ceil_l) { |
| 2914 if (IsFp64Mode()) { | 2926 if (IsFp64Mode()) { |
| 2915 CcTest::InitializeVM(); | 2927 CcTest::InitializeVM(); |
| 2916 Isolate* isolate = CcTest::i_isolate(); | 2928 Isolate* isolate = CcTest::i_isolate(); |
| 2917 HandleScope scope(isolate); | 2929 HandleScope scope(isolate); |
| 2918 MacroAssembler assm(isolate, NULL, 0); | 2930 MacroAssembler assm(isolate, NULL, 0, |
| 2931 v8::internal::CodeObjectRequired::kYes); |
| 2919 const double dFPU64InvalidResult = static_cast<double>(kFPU64InvalidResult); | 2932 const double dFPU64InvalidResult = static_cast<double>(kFPU64InvalidResult); |
| 2920 typedef struct test_float { | 2933 typedef struct test_float { |
| 2921 double a; | 2934 double a; |
| 2922 float b; | 2935 float b; |
| 2923 int64_t c; | 2936 int64_t c; |
| 2924 int64_t d; | 2937 int64_t d; |
| 2925 }Test; | 2938 }Test; |
| 2926 const int kTableLength = 15; | 2939 const int kTableLength = 15; |
| 2927 double inputs_D[kTableLength] = { | 2940 double inputs_D[kTableLength] = { |
| 2928 2.1, 2.6, 2.5, 3.1, 3.6, 3.5, | 2941 2.1, 2.6, 2.5, 3.1, 3.6, 3.5, |
| (...skipping 328 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3257 float fNegSubnorm; | 3270 float fNegSubnorm; |
| 3258 float fNegZero; | 3271 float fNegZero; |
| 3259 float fPosInf; | 3272 float fPosInf; |
| 3260 float fPosNorm; | 3273 float fPosNorm; |
| 3261 float fPosSubnorm; | 3274 float fPosSubnorm; |
| 3262 float fPosZero; } T; | 3275 float fPosZero; } T; |
| 3263 T t; | 3276 T t; |
| 3264 | 3277 |
| 3265 // Create a function that accepts &t, and loads, manipulates, and stores | 3278 // Create a function that accepts &t, and loads, manipulates, and stores |
| 3266 // the doubles t.a ... t.f. | 3279 // the doubles t.a ... t.f. |
| 3267 MacroAssembler assm(isolate, NULL, 0); | 3280 MacroAssembler assm(isolate, NULL, 0, |
| 3281 v8::internal::CodeObjectRequired::kYes); |
| 3268 | 3282 |
| 3269 __ ldc1(f4, MemOperand(a0, offsetof(T, dSignalingNan))); | 3283 __ ldc1(f4, MemOperand(a0, offsetof(T, dSignalingNan))); |
| 3270 __ class_d(f6, f4); | 3284 __ class_d(f6, f4); |
| 3271 __ sdc1(f6, MemOperand(a0, offsetof(T, dSignalingNan))); | 3285 __ sdc1(f6, MemOperand(a0, offsetof(T, dSignalingNan))); |
| 3272 | 3286 |
| 3273 __ ldc1(f4, MemOperand(a0, offsetof(T, dQuietNan))); | 3287 __ ldc1(f4, MemOperand(a0, offsetof(T, dQuietNan))); |
| 3274 __ class_d(f6, f4); | 3288 __ class_d(f6, f4); |
| 3275 __ sdc1(f6, MemOperand(a0, offsetof(T, dQuietNan))); | 3289 __ sdc1(f6, MemOperand(a0, offsetof(T, dQuietNan))); |
| 3276 | 3290 |
| 3277 __ ldc1(f4, MemOperand(a0, offsetof(T, dNegInf))); | 3291 __ ldc1(f4, MemOperand(a0, offsetof(T, dNegInf))); |
| (...skipping 127 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3405 CHECK_EQ(bit_cast<int32_t>(t.fPosSubnorm), 0x100); | 3419 CHECK_EQ(bit_cast<int32_t>(t.fPosSubnorm), 0x100); |
| 3406 CHECK_EQ(bit_cast<int32_t>(t.fPosZero), 0x200); | 3420 CHECK_EQ(bit_cast<int32_t>(t.fPosZero), 0x200); |
| 3407 } | 3421 } |
| 3408 } | 3422 } |
| 3409 | 3423 |
| 3410 | 3424 |
| 3411 TEST(ABS) { | 3425 TEST(ABS) { |
| 3412 CcTest::InitializeVM(); | 3426 CcTest::InitializeVM(); |
| 3413 Isolate* isolate = CcTest::i_isolate(); | 3427 Isolate* isolate = CcTest::i_isolate(); |
| 3414 HandleScope scope(isolate); | 3428 HandleScope scope(isolate); |
| 3415 MacroAssembler assm(isolate, NULL, 0); | 3429 MacroAssembler assm(isolate, NULL, 0, v8::internal::CodeObjectRequired::kYes); |
| 3416 | 3430 |
| 3417 typedef struct test_float { | 3431 typedef struct test_float { |
| 3418 int64_t fir; | 3432 int64_t fir; |
| 3419 double a; | 3433 double a; |
| 3420 float b; | 3434 float b; |
| 3421 double fcsr; | 3435 double fcsr; |
| 3422 } TestFloat; | 3436 } TestFloat; |
| 3423 | 3437 |
| 3424 TestFloat test; | 3438 TestFloat test; |
| 3425 | 3439 |
| (...skipping 76 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3502 (CALL_GENERATED_CODE(isolate, f, &test, 0, 0, 0, 0)); | 3516 (CALL_GENERATED_CODE(isolate, f, &test, 0, 0, 0, 0)); |
| 3503 CHECK_EQ(std::isnan(test.a), true); | 3517 CHECK_EQ(std::isnan(test.a), true); |
| 3504 CHECK_EQ(std::isnan(test.b), true); | 3518 CHECK_EQ(std::isnan(test.b), true); |
| 3505 } | 3519 } |
| 3506 | 3520 |
| 3507 | 3521 |
| 3508 TEST(ADD_FMT) { | 3522 TEST(ADD_FMT) { |
| 3509 CcTest::InitializeVM(); | 3523 CcTest::InitializeVM(); |
| 3510 Isolate* isolate = CcTest::i_isolate(); | 3524 Isolate* isolate = CcTest::i_isolate(); |
| 3511 HandleScope scope(isolate); | 3525 HandleScope scope(isolate); |
| 3512 MacroAssembler assm(isolate, NULL, 0); | 3526 MacroAssembler assm(isolate, NULL, 0, v8::internal::CodeObjectRequired::kYes); |
| 3513 | 3527 |
| 3514 typedef struct test_float { | 3528 typedef struct test_float { |
| 3515 double a; | 3529 double a; |
| 3516 double b; | 3530 double b; |
| 3517 double c; | 3531 double c; |
| 3518 float fa; | 3532 float fa; |
| 3519 float fb; | 3533 float fb; |
| 3520 float fc; | 3534 float fc; |
| 3521 } TestFloat; | 3535 } TestFloat; |
| 3522 | 3536 |
| (...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3572 CHECK_EQ(std::isnan(test.c), true); | 3586 CHECK_EQ(std::isnan(test.c), true); |
| 3573 CHECK_EQ(std::isnan(test.fc), true); | 3587 CHECK_EQ(std::isnan(test.fc), true); |
| 3574 } | 3588 } |
| 3575 | 3589 |
| 3576 | 3590 |
| 3577 TEST(C_COND_FMT) { | 3591 TEST(C_COND_FMT) { |
| 3578 if ((IsMipsArchVariant(kMips32r1)) || (IsMipsArchVariant(kMips32r2))) { | 3592 if ((IsMipsArchVariant(kMips32r1)) || (IsMipsArchVariant(kMips32r2))) { |
| 3579 CcTest::InitializeVM(); | 3593 CcTest::InitializeVM(); |
| 3580 Isolate* isolate = CcTest::i_isolate(); | 3594 Isolate* isolate = CcTest::i_isolate(); |
| 3581 HandleScope scope(isolate); | 3595 HandleScope scope(isolate); |
| 3582 MacroAssembler assm(isolate, NULL, 0); | 3596 MacroAssembler assm(isolate, NULL, 0, |
| 3597 v8::internal::CodeObjectRequired::kYes); |
| 3583 | 3598 |
| 3584 typedef struct test_float { | 3599 typedef struct test_float { |
| 3585 double dOp1; | 3600 double dOp1; |
| 3586 double dOp2; | 3601 double dOp2; |
| 3587 uint32_t dF; | 3602 uint32_t dF; |
| 3588 uint32_t dUn; | 3603 uint32_t dUn; |
| 3589 uint32_t dEq; | 3604 uint32_t dEq; |
| 3590 uint32_t dUeq; | 3605 uint32_t dUeq; |
| 3591 uint32_t dOlt; | 3606 uint32_t dOlt; |
| 3592 uint32_t dUlt; | 3607 uint32_t dUlt; |
| (...skipping 190 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3783 CHECK_EQ(test.fUle, 1U); | 3798 CHECK_EQ(test.fUle, 1U); |
| 3784 } | 3799 } |
| 3785 } | 3800 } |
| 3786 | 3801 |
| 3787 | 3802 |
| 3788 TEST(CMP_COND_FMT) { | 3803 TEST(CMP_COND_FMT) { |
| 3789 if (IsMipsArchVariant(kMips32r6)) { | 3804 if (IsMipsArchVariant(kMips32r6)) { |
| 3790 CcTest::InitializeVM(); | 3805 CcTest::InitializeVM(); |
| 3791 Isolate* isolate = CcTest::i_isolate(); | 3806 Isolate* isolate = CcTest::i_isolate(); |
| 3792 HandleScope scope(isolate); | 3807 HandleScope scope(isolate); |
| 3793 MacroAssembler assm(isolate, NULL, 0); | 3808 MacroAssembler assm(isolate, NULL, 0, |
| 3809 v8::internal::CodeObjectRequired::kYes); |
| 3794 | 3810 |
| 3795 typedef struct test_float { | 3811 typedef struct test_float { |
| 3796 double dOp1; | 3812 double dOp1; |
| 3797 double dOp2; | 3813 double dOp2; |
| 3798 double dF; | 3814 double dF; |
| 3799 double dUn; | 3815 double dUn; |
| 3800 double dEq; | 3816 double dEq; |
| 3801 double dUeq; | 3817 double dUeq; |
| 3802 double dOlt; | 3818 double dOlt; |
| 3803 double dUlt; | 3819 double dUlt; |
| (...skipping 195 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3999 CHECK_EQ(bit_cast<uint32_t>(test.fOle), fFalse); | 4015 CHECK_EQ(bit_cast<uint32_t>(test.fOle), fFalse); |
| 4000 CHECK_EQ(bit_cast<uint32_t>(test.fUle), fTrue); | 4016 CHECK_EQ(bit_cast<uint32_t>(test.fUle), fTrue); |
| 4001 } | 4017 } |
| 4002 } | 4018 } |
| 4003 | 4019 |
| 4004 | 4020 |
| 4005 TEST(CVT) { | 4021 TEST(CVT) { |
| 4006 CcTest::InitializeVM(); | 4022 CcTest::InitializeVM(); |
| 4007 Isolate* isolate = CcTest::i_isolate(); | 4023 Isolate* isolate = CcTest::i_isolate(); |
| 4008 HandleScope scope(isolate); | 4024 HandleScope scope(isolate); |
| 4009 MacroAssembler assm(isolate, NULL, 0); | 4025 MacroAssembler assm(isolate, NULL, 0, v8::internal::CodeObjectRequired::kYes); |
| 4010 | 4026 |
| 4011 typedef struct test_float { | 4027 typedef struct test_float { |
| 4012 float cvt_d_s_in; | 4028 float cvt_d_s_in; |
| 4013 double cvt_d_s_out; | 4029 double cvt_d_s_out; |
| 4014 int32_t cvt_d_w_in; | 4030 int32_t cvt_d_w_in; |
| 4015 double cvt_d_w_out; | 4031 double cvt_d_w_out; |
| 4016 int64_t cvt_d_l_in; | 4032 int64_t cvt_d_l_in; |
| 4017 double cvt_d_l_out; | 4033 double cvt_d_l_out; |
| 4018 | 4034 |
| 4019 float cvt_l_s_in; | 4035 float cvt_l_s_in; |
| (...skipping 225 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 4245 } | 4261 } |
| 4246 CHECK_EQ(test.cvt_w_s_out, 0); | 4262 CHECK_EQ(test.cvt_w_s_out, 0); |
| 4247 CHECK_EQ(test.cvt_w_d_out, 0); | 4263 CHECK_EQ(test.cvt_w_d_out, 0); |
| 4248 } | 4264 } |
| 4249 | 4265 |
| 4250 | 4266 |
| 4251 TEST(DIV_FMT) { | 4267 TEST(DIV_FMT) { |
| 4252 CcTest::InitializeVM(); | 4268 CcTest::InitializeVM(); |
| 4253 Isolate* isolate = CcTest::i_isolate(); | 4269 Isolate* isolate = CcTest::i_isolate(); |
| 4254 HandleScope scope(isolate); | 4270 HandleScope scope(isolate); |
| 4255 MacroAssembler assm(isolate, NULL, 0); | 4271 MacroAssembler assm(isolate, NULL, 0, v8::internal::CodeObjectRequired::kYes); |
| 4256 | 4272 |
| 4257 typedef struct test { | 4273 typedef struct test { |
| 4258 double dOp1; | 4274 double dOp1; |
| 4259 double dOp2; | 4275 double dOp2; |
| 4260 double dRes; | 4276 double dRes; |
| 4261 float fOp1; | 4277 float fOp1; |
| 4262 float fOp2; | 4278 float fOp2; |
| 4263 float fRes; | 4279 float fRes; |
| 4264 } Test; | 4280 } Test; |
| 4265 | 4281 |
| (...skipping 101 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 4367 (CALL_GENERATED_CODE(isolate, f, &test, 0, 0, 0, 0)); | 4383 (CALL_GENERATED_CODE(isolate, f, &test, 0, 0, 0, 0)); |
| 4368 CHECK_EQ(true, std::isnan(test.dRes)); | 4384 CHECK_EQ(true, std::isnan(test.dRes)); |
| 4369 CHECK_EQ(true, std::isnan(test.fRes)); | 4385 CHECK_EQ(true, std::isnan(test.fRes)); |
| 4370 } | 4386 } |
| 4371 | 4387 |
| 4372 | 4388 |
| 4373 uint32_t run_align(uint32_t rs_value, uint32_t rt_value, uint8_t bp) { | 4389 uint32_t run_align(uint32_t rs_value, uint32_t rt_value, uint8_t bp) { |
| 4374 Isolate* isolate = CcTest::i_isolate(); | 4390 Isolate* isolate = CcTest::i_isolate(); |
| 4375 HandleScope scope(isolate); | 4391 HandleScope scope(isolate); |
| 4376 | 4392 |
| 4377 MacroAssembler assm(isolate, NULL, 0); | 4393 MacroAssembler assm(isolate, NULL, 0, v8::internal::CodeObjectRequired::kYes); |
| 4378 | 4394 |
| 4379 __ align(v0, a0, a1, bp); | 4395 __ align(v0, a0, a1, bp); |
| 4380 __ jr(ra); | 4396 __ jr(ra); |
| 4381 __ nop(); | 4397 __ nop(); |
| 4382 | 4398 |
| 4383 CodeDesc desc; | 4399 CodeDesc desc; |
| 4384 assm.GetCode(&desc); | 4400 assm.GetCode(&desc); |
| 4385 Handle<Code> code = isolate->factory()->NewCode( | 4401 Handle<Code> code = isolate->factory()->NewCode( |
| 4386 desc, Code::ComputeFlags(Code::STUB), Handle<Code>()); | 4402 desc, Code::ComputeFlags(Code::STUB), Handle<Code>()); |
| 4387 | 4403 |
| (...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 4420 } | 4436 } |
| 4421 } | 4437 } |
| 4422 } | 4438 } |
| 4423 | 4439 |
| 4424 uint32_t PC; // The program counter. | 4440 uint32_t PC; // The program counter. |
| 4425 | 4441 |
| 4426 uint32_t run_aluipc(int16_t offset) { | 4442 uint32_t run_aluipc(int16_t offset) { |
| 4427 Isolate* isolate = CcTest::i_isolate(); | 4443 Isolate* isolate = CcTest::i_isolate(); |
| 4428 HandleScope scope(isolate); | 4444 HandleScope scope(isolate); |
| 4429 | 4445 |
| 4430 MacroAssembler assm(isolate, NULL, 0); | 4446 MacroAssembler assm(isolate, NULL, 0, v8::internal::CodeObjectRequired::kYes); |
| 4431 | 4447 |
| 4432 __ aluipc(v0, offset); | 4448 __ aluipc(v0, offset); |
| 4433 __ jr(ra); | 4449 __ jr(ra); |
| 4434 __ nop(); | 4450 __ nop(); |
| 4435 | 4451 |
| 4436 CodeDesc desc; | 4452 CodeDesc desc; |
| 4437 assm.GetCode(&desc); | 4453 assm.GetCode(&desc); |
| 4438 Handle<Code> code = isolate->factory()->NewCode( | 4454 Handle<Code> code = isolate->factory()->NewCode( |
| 4439 desc, Code::ComputeFlags(Code::STUB), Handle<Code>()); | 4455 desc, Code::ComputeFlags(Code::STUB), Handle<Code>()); |
| 4440 | 4456 |
| (...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 4474 CHECK_EQ(expected_res, res); | 4490 CHECK_EQ(expected_res, res); |
| 4475 } | 4491 } |
| 4476 } | 4492 } |
| 4477 } | 4493 } |
| 4478 | 4494 |
| 4479 | 4495 |
| 4480 uint32_t run_auipc(int16_t offset) { | 4496 uint32_t run_auipc(int16_t offset) { |
| 4481 Isolate* isolate = CcTest::i_isolate(); | 4497 Isolate* isolate = CcTest::i_isolate(); |
| 4482 HandleScope scope(isolate); | 4498 HandleScope scope(isolate); |
| 4483 | 4499 |
| 4484 MacroAssembler assm(isolate, NULL, 0); | 4500 MacroAssembler assm(isolate, NULL, 0, v8::internal::CodeObjectRequired::kYes); |
| 4485 | 4501 |
| 4486 __ auipc(v0, offset); | 4502 __ auipc(v0, offset); |
| 4487 __ jr(ra); | 4503 __ jr(ra); |
| 4488 __ nop(); | 4504 __ nop(); |
| 4489 | 4505 |
| 4490 CodeDesc desc; | 4506 CodeDesc desc; |
| 4491 assm.GetCode(&desc); | 4507 assm.GetCode(&desc); |
| 4492 Handle<Code> code = isolate->factory()->NewCode( | 4508 Handle<Code> code = isolate->factory()->NewCode( |
| 4493 desc, Code::ComputeFlags(Code::STUB), Handle<Code>()); | 4509 desc, Code::ComputeFlags(Code::STUB), Handle<Code>()); |
| 4494 | 4510 |
| (...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 4528 CHECK_EQ(expected_res, res); | 4544 CHECK_EQ(expected_res, res); |
| 4529 } | 4545 } |
| 4530 } | 4546 } |
| 4531 } | 4547 } |
| 4532 | 4548 |
| 4533 | 4549 |
| 4534 uint32_t run_lwpc(int offset) { | 4550 uint32_t run_lwpc(int offset) { |
| 4535 Isolate* isolate = CcTest::i_isolate(); | 4551 Isolate* isolate = CcTest::i_isolate(); |
| 4536 HandleScope scope(isolate); | 4552 HandleScope scope(isolate); |
| 4537 | 4553 |
| 4538 MacroAssembler assm(isolate, NULL, 0); | 4554 MacroAssembler assm(isolate, NULL, 0, v8::internal::CodeObjectRequired::kYes); |
| 4539 | 4555 |
| 4540 // 256k instructions; 2^8k | 4556 // 256k instructions; 2^8k |
| 4541 // addiu t7, t0, 0xffff; (0x250fffff) | 4557 // addiu t7, t0, 0xffff; (0x250fffff) |
| 4542 // ... | 4558 // ... |
| 4543 // addiu t4, t0, 0x0000; (0x250c0000) | 4559 // addiu t4, t0, 0x0000; (0x250c0000) |
| 4544 uint32_t addiu_start_1 = 0x25000000; | 4560 uint32_t addiu_start_1 = 0x25000000; |
| 4545 for (int32_t i = 0xfffff; i >= 0xc0000; --i) { | 4561 for (int32_t i = 0xfffff; i >= 0xc0000; --i) { |
| 4546 uint32_t addiu_new = addiu_start_1 + i; | 4562 uint32_t addiu_new = addiu_start_1 + i; |
| 4547 __ dd(addiu_new); | 4563 __ dd(addiu_new); |
| 4548 } | 4564 } |
| (...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 4604 CHECK_EQ(tc[i].expected_res, res); | 4620 CHECK_EQ(tc[i].expected_res, res); |
| 4605 } | 4621 } |
| 4606 } | 4622 } |
| 4607 } | 4623 } |
| 4608 | 4624 |
| 4609 | 4625 |
| 4610 uint32_t run_jic(int16_t offset) { | 4626 uint32_t run_jic(int16_t offset) { |
| 4611 Isolate* isolate = CcTest::i_isolate(); | 4627 Isolate* isolate = CcTest::i_isolate(); |
| 4612 HandleScope scope(isolate); | 4628 HandleScope scope(isolate); |
| 4613 | 4629 |
| 4614 MacroAssembler assm(isolate, NULL, 0); | 4630 MacroAssembler assm(isolate, NULL, 0, v8::internal::CodeObjectRequired::kYes); |
| 4615 | 4631 |
| 4616 Label get_program_counter, stop_execution; | 4632 Label get_program_counter, stop_execution; |
| 4617 __ push(ra); | 4633 __ push(ra); |
| 4618 __ li(v0, 0); | 4634 __ li(v0, 0); |
| 4619 __ li(t1, 0x66); | 4635 __ li(t1, 0x66); |
| 4620 | 4636 |
| 4621 __ addiu(v0, v0, 0x1); // <-- offset = -32 | 4637 __ addiu(v0, v0, 0x1); // <-- offset = -32 |
| 4622 __ addiu(v0, v0, 0x2); | 4638 __ addiu(v0, v0, 0x2); |
| 4623 __ addiu(v0, v0, 0x10); | 4639 __ addiu(v0, v0, 0x10); |
| 4624 __ addiu(v0, v0, 0x20); | 4640 __ addiu(v0, v0, 0x20); |
| (...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 4685 CHECK_EQ(tc[i].expected_res, res); | 4701 CHECK_EQ(tc[i].expected_res, res); |
| 4686 } | 4702 } |
| 4687 } | 4703 } |
| 4688 } | 4704 } |
| 4689 | 4705 |
| 4690 | 4706 |
| 4691 uint64_t run_beqzc(int32_t value, int32_t offset) { | 4707 uint64_t run_beqzc(int32_t value, int32_t offset) { |
| 4692 Isolate* isolate = CcTest::i_isolate(); | 4708 Isolate* isolate = CcTest::i_isolate(); |
| 4693 HandleScope scope(isolate); | 4709 HandleScope scope(isolate); |
| 4694 | 4710 |
| 4695 MacroAssembler assm(isolate, NULL, 0); | 4711 MacroAssembler assm(isolate, NULL, 0, v8::internal::CodeObjectRequired::kYes); |
| 4696 | 4712 |
| 4697 Label stop_execution; | 4713 Label stop_execution; |
| 4698 __ li(v0, 0); | 4714 __ li(v0, 0); |
| 4699 __ li(t1, 0x66); | 4715 __ li(t1, 0x66); |
| 4700 | 4716 |
| 4701 __ addiu(v0, v0, 0x1); // <-- offset = -32 | 4717 __ addiu(v0, v0, 0x1); // <-- offset = -32 |
| 4702 __ addiu(v0, v0, 0x2); | 4718 __ addiu(v0, v0, 0x2); |
| 4703 __ addiu(v0, v0, 0x10); | 4719 __ addiu(v0, v0, 0x10); |
| 4704 __ addiu(v0, v0, 0x20); | 4720 __ addiu(v0, v0, 0x20); |
| 4705 __ beq(v0, t1, &stop_execution); | 4721 __ beq(v0, t1, &stop_execution); |
| (...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 4758 CHECK_EQ(tc[i].expected_res, res); | 4774 CHECK_EQ(tc[i].expected_res, res); |
| 4759 } | 4775 } |
| 4760 } | 4776 } |
| 4761 } | 4777 } |
| 4762 | 4778 |
| 4763 | 4779 |
| 4764 uint32_t run_jialc(int16_t offset) { | 4780 uint32_t run_jialc(int16_t offset) { |
| 4765 Isolate* isolate = CcTest::i_isolate(); | 4781 Isolate* isolate = CcTest::i_isolate(); |
| 4766 HandleScope scope(isolate); | 4782 HandleScope scope(isolate); |
| 4767 | 4783 |
| 4768 MacroAssembler assm(isolate, NULL, 0); | 4784 MacroAssembler assm(isolate, NULL, 0, v8::internal::CodeObjectRequired::kYes); |
| 4769 | 4785 |
| 4770 Label main_block, get_program_counter; | 4786 Label main_block, get_program_counter; |
| 4771 __ push(ra); | 4787 __ push(ra); |
| 4772 __ li(v0, 0); | 4788 __ li(v0, 0); |
| 4773 __ beq(v0, v0, &main_block); | 4789 __ beq(v0, v0, &main_block); |
| 4774 __ nop(); | 4790 __ nop(); |
| 4775 | 4791 |
| 4776 // Block 1 | 4792 // Block 1 |
| 4777 __ addiu(v0, v0, 0x1); // <-- offset = -40 | 4793 __ addiu(v0, v0, 0x1); // <-- offset = -40 |
| 4778 __ addiu(v0, v0, 0x2); | 4794 __ addiu(v0, v0, 0x2); |
| (...skipping 71 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_addiupc(int32_t imm19) { | 4872 uint64_t run_addiupc(int32_t imm19) { |
| 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 __ addiupc(v0, imm19); | 4878 __ addiupc(v0, imm19); |
| 4863 __ jr(ra); | 4879 __ jr(ra); |
| 4864 __ nop(); | 4880 __ nop(); |
| 4865 | 4881 |
| 4866 CodeDesc desc; | 4882 CodeDesc desc; |
| 4867 assm.GetCode(&desc); | 4883 assm.GetCode(&desc); |
| 4868 Handle<Code> code = isolate->factory()->NewCode( | 4884 Handle<Code> code = isolate->factory()->NewCode( |
| 4869 desc, Code::ComputeFlags(Code::STUB), Handle<Code>()); | 4885 desc, Code::ComputeFlags(Code::STUB), Handle<Code>()); |
| 4870 | 4886 |
| (...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 4904 CHECK_EQ(expected_res, res); | 4920 CHECK_EQ(expected_res, res); |
| 4905 } | 4921 } |
| 4906 } | 4922 } |
| 4907 } | 4923 } |
| 4908 | 4924 |
| 4909 | 4925 |
| 4910 int32_t run_bc(int32_t offset) { | 4926 int32_t run_bc(int32_t offset) { |
| 4911 Isolate* isolate = CcTest::i_isolate(); | 4927 Isolate* isolate = CcTest::i_isolate(); |
| 4912 HandleScope scope(isolate); | 4928 HandleScope scope(isolate); |
| 4913 | 4929 |
| 4914 MacroAssembler assm(isolate, NULL, 0); | 4930 MacroAssembler assm(isolate, NULL, 0, v8::internal::CodeObjectRequired::kYes); |
| 4915 | 4931 |
| 4916 Label continue_1, stop_execution; | 4932 Label continue_1, stop_execution; |
| 4917 __ push(ra); | 4933 __ push(ra); |
| 4918 __ li(v0, 0); | 4934 __ li(v0, 0); |
| 4919 __ li(t8, 0); | 4935 __ li(t8, 0); |
| 4920 __ li(t9, 2); // A condition for stopping execution. | 4936 __ li(t9, 2); // A condition for stopping execution. |
| 4921 | 4937 |
| 4922 uint32_t instruction_addiu = 0x24420001; // addiu v0, v0, 1 | 4938 uint32_t instruction_addiu = 0x24420001; // addiu v0, v0, 1 |
| 4923 for (int32_t i = -100; i <= -11; ++i) { | 4939 for (int32_t i = -100; i <= -11; ++i) { |
| 4924 __ dd(instruction_addiu); | 4940 __ dd(instruction_addiu); |
| (...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 4985 CHECK_EQ(tc[i].expected_res, res); | 5001 CHECK_EQ(tc[i].expected_res, res); |
| 4986 } | 5002 } |
| 4987 } | 5003 } |
| 4988 } | 5004 } |
| 4989 | 5005 |
| 4990 | 5006 |
| 4991 int32_t run_balc(int32_t offset) { | 5007 int32_t run_balc(int32_t offset) { |
| 4992 Isolate* isolate = CcTest::i_isolate(); | 5008 Isolate* isolate = CcTest::i_isolate(); |
| 4993 HandleScope scope(isolate); | 5009 HandleScope scope(isolate); |
| 4994 | 5010 |
| 4995 MacroAssembler assm(isolate, NULL, 0); | 5011 MacroAssembler assm(isolate, NULL, 0, v8::internal::CodeObjectRequired::kYes); |
| 4996 | 5012 |
| 4997 Label continue_1, stop_execution; | 5013 Label continue_1, stop_execution; |
| 4998 __ push(ra); | 5014 __ push(ra); |
| 4999 __ li(v0, 0); | 5015 __ li(v0, 0); |
| 5000 __ li(t8, 0); | 5016 __ li(t8, 0); |
| 5001 __ li(t9, 2); // A condition for stopping execution. | 5017 __ li(t9, 2); // A condition for stopping execution. |
| 5002 | 5018 |
| 5003 __ beq(t8, t8, &continue_1); | 5019 __ beq(t8, t8, &continue_1); |
| 5004 __ nop(); | 5020 __ nop(); |
| 5005 | 5021 |
| (...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 5066 CHECK_EQ(tc[i].expected_res, res); | 5082 CHECK_EQ(tc[i].expected_res, res); |
| 5067 } | 5083 } |
| 5068 } | 5084 } |
| 5069 } | 5085 } |
| 5070 | 5086 |
| 5071 | 5087 |
| 5072 uint32_t run_bal(int16_t offset) { | 5088 uint32_t run_bal(int16_t offset) { |
| 5073 Isolate* isolate = CcTest::i_isolate(); | 5089 Isolate* isolate = CcTest::i_isolate(); |
| 5074 HandleScope scope(isolate); | 5090 HandleScope scope(isolate); |
| 5075 | 5091 |
| 5076 MacroAssembler assm(isolate, NULL, 0); | 5092 MacroAssembler assm(isolate, NULL, 0, v8::internal::CodeObjectRequired::kYes); |
| 5077 | 5093 |
| 5078 __ mov(t0, ra); | 5094 __ mov(t0, ra); |
| 5079 __ bal(offset); // Equivalent for "BGEZAL zero_reg, offset". | 5095 __ bal(offset); // Equivalent for "BGEZAL zero_reg, offset". |
| 5080 __ nop(); | 5096 __ nop(); |
| 5081 | 5097 |
| 5082 __ mov(ra, t0); | 5098 __ mov(ra, t0); |
| 5083 __ jr(ra); | 5099 __ jr(ra); |
| 5084 __ nop(); | 5100 __ nop(); |
| 5085 | 5101 |
| 5086 __ li(v0, 1); | 5102 __ li(v0, 1); |
| (...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 5122 | 5138 |
| 5123 | 5139 |
| 5124 TEST(Trampoline) { | 5140 TEST(Trampoline) { |
| 5125 // Private member of Assembler class. | 5141 // Private member of Assembler class. |
| 5126 static const int kMaxBranchOffset = (1 << (18 - 1)) - 1; | 5142 static const int kMaxBranchOffset = (1 << (18 - 1)) - 1; |
| 5127 | 5143 |
| 5128 CcTest::InitializeVM(); | 5144 CcTest::InitializeVM(); |
| 5129 Isolate* isolate = CcTest::i_isolate(); | 5145 Isolate* isolate = CcTest::i_isolate(); |
| 5130 HandleScope scope(isolate); | 5146 HandleScope scope(isolate); |
| 5131 | 5147 |
| 5132 MacroAssembler assm(isolate, nullptr, 0); | 5148 MacroAssembler assm(isolate, nullptr, 0, |
| 5149 v8::internal::CodeObjectRequired::kYes); |
| 5133 Label done; | 5150 Label done; |
| 5134 size_t nr_calls = kMaxBranchOffset / (2 * Instruction::kInstrSize) + 2; | 5151 size_t nr_calls = kMaxBranchOffset / (2 * Instruction::kInstrSize) + 2; |
| 5135 | 5152 |
| 5136 for (size_t i = 0; i < nr_calls; ++i) { | 5153 for (size_t i = 0; i < nr_calls; ++i) { |
| 5137 __ BranchShort(&done, eq, a0, Operand(a1)); | 5154 __ BranchShort(&done, eq, a0, Operand(a1)); |
| 5138 } | 5155 } |
| 5139 __ bind(&done); | 5156 __ bind(&done); |
| 5140 __ Ret(USE_DELAY_SLOT); | 5157 __ Ret(USE_DELAY_SLOT); |
| 5141 __ mov(v0, zero_reg); | 5158 __ mov(v0, zero_reg); |
| 5142 | 5159 |
| 5143 CodeDesc desc; | 5160 CodeDesc desc; |
| 5144 assm.GetCode(&desc); | 5161 assm.GetCode(&desc); |
| 5145 Handle<Code> code = isolate->factory()->NewCode( | 5162 Handle<Code> code = isolate->factory()->NewCode( |
| 5146 desc, Code::ComputeFlags(Code::STUB), Handle<Code>()); | 5163 desc, Code::ComputeFlags(Code::STUB), Handle<Code>()); |
| 5147 F2 f = FUNCTION_CAST<F2>(code->entry()); | 5164 F2 f = FUNCTION_CAST<F2>(code->entry()); |
| 5148 | 5165 |
| 5149 int32_t res = reinterpret_cast<int32_t>( | 5166 int32_t res = reinterpret_cast<int32_t>( |
| 5150 CALL_GENERATED_CODE(isolate, f, 42, 42, 0, 0, 0)); | 5167 CALL_GENERATED_CODE(isolate, f, 42, 42, 0, 0, 0)); |
| 5151 CHECK_EQ(res, 0); | 5168 CHECK_EQ(res, 0); |
| 5152 } | 5169 } |
| 5153 | 5170 |
| 5154 | 5171 |
| 5155 #undef __ | 5172 #undef __ |
| OLD | NEW |