OLD | NEW |
1 // Copyright 2011 the V8 project authors. All rights reserved. | 1 // Copyright 2011 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 295 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
306 } | 306 } |
307 | 307 |
308 | 308 |
309 typedef int (*F7)(double x, double y); | 309 typedef int (*F7)(double x, double y); |
310 | 310 |
311 TEST(AssemblerIa329) { | 311 TEST(AssemblerIa329) { |
312 CcTest::InitializeVM(); | 312 CcTest::InitializeVM(); |
313 Isolate* isolate = reinterpret_cast<Isolate*>(CcTest::isolate()); | 313 Isolate* isolate = reinterpret_cast<Isolate*>(CcTest::isolate()); |
314 HandleScope scope(isolate); | 314 HandleScope scope(isolate); |
315 v8::internal::byte buffer[256]; | 315 v8::internal::byte buffer[256]; |
316 MacroAssembler assm(isolate, buffer, sizeof buffer); | 316 MacroAssembler assm(isolate, buffer, sizeof(buffer), |
| 317 v8::internal::CodeObjectRequired::kYes); |
317 enum { kEqual = 0, kGreater = 1, kLess = 2, kNaN = 3, kUndefined = 4 }; | 318 enum { kEqual = 0, kGreater = 1, kLess = 2, kNaN = 3, kUndefined = 4 }; |
318 Label equal_l, less_l, greater_l, nan_l; | 319 Label equal_l, less_l, greater_l, nan_l; |
319 __ fld_d(Operand(esp, 3 * kPointerSize)); | 320 __ fld_d(Operand(esp, 3 * kPointerSize)); |
320 __ fld_d(Operand(esp, 1 * kPointerSize)); | 321 __ fld_d(Operand(esp, 1 * kPointerSize)); |
321 __ FCmp(); | 322 __ FCmp(); |
322 __ j(parity_even, &nan_l); | 323 __ j(parity_even, &nan_l); |
323 __ j(equal, &equal_l); | 324 __ j(equal, &equal_l); |
324 __ j(below, &less_l); | 325 __ j(below, &less_l); |
325 __ j(above, &greater_l); | 326 __ j(above, &greater_l); |
326 | 327 |
(...skipping 201 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
528 #endif // __GNUC__ | 529 #endif // __GNUC__ |
529 | 530 |
530 | 531 |
531 TEST(AssemblerIa32Extractps) { | 532 TEST(AssemblerIa32Extractps) { |
532 CcTest::InitializeVM(); | 533 CcTest::InitializeVM(); |
533 if (!CpuFeatures::IsSupported(SSE4_1)) return; | 534 if (!CpuFeatures::IsSupported(SSE4_1)) return; |
534 | 535 |
535 Isolate* isolate = reinterpret_cast<Isolate*>(CcTest::isolate()); | 536 Isolate* isolate = reinterpret_cast<Isolate*>(CcTest::isolate()); |
536 HandleScope scope(isolate); | 537 HandleScope scope(isolate); |
537 v8::internal::byte buffer[256]; | 538 v8::internal::byte buffer[256]; |
538 MacroAssembler assm(isolate, buffer, sizeof buffer); | 539 MacroAssembler assm(isolate, buffer, sizeof(buffer), |
| 540 v8::internal::CodeObjectRequired::kYes); |
539 { CpuFeatureScope fscope41(&assm, SSE4_1); | 541 { CpuFeatureScope fscope41(&assm, SSE4_1); |
540 __ movsd(xmm1, Operand(esp, 4)); | 542 __ movsd(xmm1, Operand(esp, 4)); |
541 __ extractps(eax, xmm1, 0x1); | 543 __ extractps(eax, xmm1, 0x1); |
542 __ ret(0); | 544 __ ret(0); |
543 } | 545 } |
544 | 546 |
545 CodeDesc desc; | 547 CodeDesc desc; |
546 assm.GetCode(&desc); | 548 assm.GetCode(&desc); |
547 Handle<Code> code = isolate->factory()->NewCode( | 549 Handle<Code> code = isolate->factory()->NewCode( |
548 desc, Code::ComputeFlags(Code::STUB), Handle<Code>()); | 550 desc, Code::ComputeFlags(Code::STUB), Handle<Code>()); |
(...skipping 10 matching lines...) Expand all Loading... |
559 } | 561 } |
560 | 562 |
561 | 563 |
562 typedef int (*F8)(float x, float y); | 564 typedef int (*F8)(float x, float y); |
563 TEST(AssemblerIa32SSE) { | 565 TEST(AssemblerIa32SSE) { |
564 CcTest::InitializeVM(); | 566 CcTest::InitializeVM(); |
565 | 567 |
566 Isolate* isolate = reinterpret_cast<Isolate*>(CcTest::isolate()); | 568 Isolate* isolate = reinterpret_cast<Isolate*>(CcTest::isolate()); |
567 HandleScope scope(isolate); | 569 HandleScope scope(isolate); |
568 v8::internal::byte buffer[256]; | 570 v8::internal::byte buffer[256]; |
569 MacroAssembler assm(isolate, buffer, sizeof buffer); | 571 MacroAssembler assm(isolate, buffer, sizeof(buffer), |
| 572 v8::internal::CodeObjectRequired::kYes); |
570 { | 573 { |
571 __ movss(xmm0, Operand(esp, kPointerSize)); | 574 __ movss(xmm0, Operand(esp, kPointerSize)); |
572 __ movss(xmm1, Operand(esp, 2 * kPointerSize)); | 575 __ movss(xmm1, Operand(esp, 2 * kPointerSize)); |
573 __ shufps(xmm0, xmm0, 0x0); | 576 __ shufps(xmm0, xmm0, 0x0); |
574 __ shufps(xmm1, xmm1, 0x0); | 577 __ shufps(xmm1, xmm1, 0x0); |
575 __ movaps(xmm2, xmm1); | 578 __ movaps(xmm2, xmm1); |
576 __ addps(xmm2, xmm0); | 579 __ addps(xmm2, xmm0); |
577 __ mulps(xmm2, xmm1); | 580 __ mulps(xmm2, xmm1); |
578 __ subps(xmm2, xmm0); | 581 __ subps(xmm2, xmm0); |
579 __ divps(xmm2, xmm1); | 582 __ divps(xmm2, xmm1); |
(...skipping 16 matching lines...) Expand all Loading... |
596 | 599 |
597 | 600 |
598 typedef int (*F9)(double x, double y, double z); | 601 typedef int (*F9)(double x, double y, double z); |
599 TEST(AssemblerX64FMA_sd) { | 602 TEST(AssemblerX64FMA_sd) { |
600 CcTest::InitializeVM(); | 603 CcTest::InitializeVM(); |
601 if (!CpuFeatures::IsSupported(FMA3)) return; | 604 if (!CpuFeatures::IsSupported(FMA3)) return; |
602 | 605 |
603 Isolate* isolate = reinterpret_cast<Isolate*>(CcTest::isolate()); | 606 Isolate* isolate = reinterpret_cast<Isolate*>(CcTest::isolate()); |
604 HandleScope scope(isolate); | 607 HandleScope scope(isolate); |
605 v8::internal::byte buffer[1024]; | 608 v8::internal::byte buffer[1024]; |
606 MacroAssembler assm(isolate, buffer, sizeof buffer); | 609 MacroAssembler assm(isolate, buffer, sizeof(buffer), |
| 610 v8::internal::CodeObjectRequired::kYes); |
607 { | 611 { |
608 CpuFeatureScope fscope(&assm, FMA3); | 612 CpuFeatureScope fscope(&assm, FMA3); |
609 Label exit; | 613 Label exit; |
610 __ movsd(xmm0, Operand(esp, 1 * kPointerSize)); | 614 __ movsd(xmm0, Operand(esp, 1 * kPointerSize)); |
611 __ movsd(xmm1, Operand(esp, 3 * kPointerSize)); | 615 __ movsd(xmm1, Operand(esp, 3 * kPointerSize)); |
612 __ movsd(xmm2, Operand(esp, 5 * kPointerSize)); | 616 __ movsd(xmm2, Operand(esp, 5 * kPointerSize)); |
613 // argument in xmm0, xmm1 and xmm2 | 617 // argument in xmm0, xmm1 and xmm2 |
614 // xmm0 * xmm1 + xmm2 | 618 // xmm0 * xmm1 + xmm2 |
615 __ movaps(xmm3, xmm0); | 619 __ movaps(xmm3, xmm0); |
616 __ mulsd(xmm3, xmm1); | 620 __ mulsd(xmm3, xmm1); |
(...skipping 207 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
824 | 828 |
825 | 829 |
826 typedef int (*F10)(float x, float y, float z); | 830 typedef int (*F10)(float x, float y, float z); |
827 TEST(AssemblerX64FMA_ss) { | 831 TEST(AssemblerX64FMA_ss) { |
828 CcTest::InitializeVM(); | 832 CcTest::InitializeVM(); |
829 if (!CpuFeatures::IsSupported(FMA3)) return; | 833 if (!CpuFeatures::IsSupported(FMA3)) return; |
830 | 834 |
831 Isolate* isolate = reinterpret_cast<Isolate*>(CcTest::isolate()); | 835 Isolate* isolate = reinterpret_cast<Isolate*>(CcTest::isolate()); |
832 HandleScope scope(isolate); | 836 HandleScope scope(isolate); |
833 v8::internal::byte buffer[1024]; | 837 v8::internal::byte buffer[1024]; |
834 MacroAssembler assm(isolate, buffer, sizeof buffer); | 838 MacroAssembler assm(isolate, buffer, sizeof(buffer), |
| 839 v8::internal::CodeObjectRequired::kYes); |
835 { | 840 { |
836 CpuFeatureScope fscope(&assm, FMA3); | 841 CpuFeatureScope fscope(&assm, FMA3); |
837 Label exit; | 842 Label exit; |
838 __ movss(xmm0, Operand(esp, 1 * kPointerSize)); | 843 __ movss(xmm0, Operand(esp, 1 * kPointerSize)); |
839 __ movss(xmm1, Operand(esp, 2 * kPointerSize)); | 844 __ movss(xmm1, Operand(esp, 2 * kPointerSize)); |
840 __ movss(xmm2, Operand(esp, 3 * kPointerSize)); | 845 __ movss(xmm2, Operand(esp, 3 * kPointerSize)); |
841 // arguments in xmm0, xmm1 and xmm2 | 846 // arguments in xmm0, xmm1 and xmm2 |
842 // xmm0 * xmm1 + xmm2 | 847 // xmm0 * xmm1 + xmm2 |
843 __ movaps(xmm3, xmm0); | 848 __ movaps(xmm3, xmm0); |
844 __ mulss(xmm3, xmm1); | 849 __ mulss(xmm3, xmm1); |
(...skipping 206 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1051 } | 1056 } |
1052 | 1057 |
1053 | 1058 |
1054 TEST(AssemblerIa32BMI1) { | 1059 TEST(AssemblerIa32BMI1) { |
1055 CcTest::InitializeVM(); | 1060 CcTest::InitializeVM(); |
1056 if (!CpuFeatures::IsSupported(BMI1)) return; | 1061 if (!CpuFeatures::IsSupported(BMI1)) return; |
1057 | 1062 |
1058 Isolate* isolate = reinterpret_cast<Isolate*>(CcTest::isolate()); | 1063 Isolate* isolate = reinterpret_cast<Isolate*>(CcTest::isolate()); |
1059 HandleScope scope(isolate); | 1064 HandleScope scope(isolate); |
1060 v8::internal::byte buffer[1024]; | 1065 v8::internal::byte buffer[1024]; |
1061 MacroAssembler assm(isolate, buffer, sizeof buffer); | 1066 MacroAssembler assm(isolate, buffer, sizeof(buffer), |
| 1067 v8::internal::CodeObjectRequired::kYes); |
1062 { | 1068 { |
1063 CpuFeatureScope fscope(&assm, BMI1); | 1069 CpuFeatureScope fscope(&assm, BMI1); |
1064 Label exit; | 1070 Label exit; |
1065 | 1071 |
1066 __ push(ebx); // save ebx | 1072 __ push(ebx); // save ebx |
1067 __ mov(ecx, Immediate(0x55667788u)); // source operand | 1073 __ mov(ecx, Immediate(0x55667788u)); // source operand |
1068 __ push(ecx); // For memory operand | 1074 __ push(ecx); // For memory operand |
1069 | 1075 |
1070 // andn | 1076 // andn |
1071 __ mov(edx, Immediate(0x20000000u)); | 1077 __ mov(edx, Immediate(0x20000000u)); |
(...skipping 86 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1158 } | 1164 } |
1159 | 1165 |
1160 | 1166 |
1161 TEST(AssemblerIa32LZCNT) { | 1167 TEST(AssemblerIa32LZCNT) { |
1162 CcTest::InitializeVM(); | 1168 CcTest::InitializeVM(); |
1163 if (!CpuFeatures::IsSupported(LZCNT)) return; | 1169 if (!CpuFeatures::IsSupported(LZCNT)) return; |
1164 | 1170 |
1165 Isolate* isolate = reinterpret_cast<Isolate*>(CcTest::isolate()); | 1171 Isolate* isolate = reinterpret_cast<Isolate*>(CcTest::isolate()); |
1166 HandleScope scope(isolate); | 1172 HandleScope scope(isolate); |
1167 v8::internal::byte buffer[256]; | 1173 v8::internal::byte buffer[256]; |
1168 MacroAssembler assm(isolate, buffer, sizeof buffer); | 1174 MacroAssembler assm(isolate, buffer, sizeof(buffer), |
| 1175 v8::internal::CodeObjectRequired::kYes); |
1169 { | 1176 { |
1170 CpuFeatureScope fscope(&assm, LZCNT); | 1177 CpuFeatureScope fscope(&assm, LZCNT); |
1171 Label exit; | 1178 Label exit; |
1172 | 1179 |
1173 __ push(ebx); // save ebx | 1180 __ push(ebx); // save ebx |
1174 __ mov(ecx, Immediate(0x55667788u)); // source operand | 1181 __ mov(ecx, Immediate(0x55667788u)); // source operand |
1175 __ push(ecx); // For memory operand | 1182 __ push(ecx); // For memory operand |
1176 | 1183 |
1177 __ mov(eax, Immediate(1)); // Test number | 1184 __ mov(eax, Immediate(1)); // Test number |
1178 __ lzcnt(ebx, ecx); | 1185 __ lzcnt(ebx, ecx); |
(...skipping 26 matching lines...) Expand all Loading... |
1205 } | 1212 } |
1206 | 1213 |
1207 | 1214 |
1208 TEST(AssemblerIa32POPCNT) { | 1215 TEST(AssemblerIa32POPCNT) { |
1209 CcTest::InitializeVM(); | 1216 CcTest::InitializeVM(); |
1210 if (!CpuFeatures::IsSupported(POPCNT)) return; | 1217 if (!CpuFeatures::IsSupported(POPCNT)) return; |
1211 | 1218 |
1212 Isolate* isolate = reinterpret_cast<Isolate*>(CcTest::isolate()); | 1219 Isolate* isolate = reinterpret_cast<Isolate*>(CcTest::isolate()); |
1213 HandleScope scope(isolate); | 1220 HandleScope scope(isolate); |
1214 v8::internal::byte buffer[256]; | 1221 v8::internal::byte buffer[256]; |
1215 MacroAssembler assm(isolate, buffer, sizeof buffer); | 1222 MacroAssembler assm(isolate, buffer, sizeof(buffer), |
| 1223 v8::internal::CodeObjectRequired::kYes); |
1216 { | 1224 { |
1217 CpuFeatureScope fscope(&assm, POPCNT); | 1225 CpuFeatureScope fscope(&assm, POPCNT); |
1218 Label exit; | 1226 Label exit; |
1219 | 1227 |
1220 __ push(ebx); // save ebx | 1228 __ push(ebx); // save ebx |
1221 __ mov(ecx, Immediate(0x11111100u)); // source operand | 1229 __ mov(ecx, Immediate(0x11111100u)); // source operand |
1222 __ push(ecx); // For memory operand | 1230 __ push(ecx); // For memory operand |
1223 | 1231 |
1224 __ mov(eax, Immediate(1)); // Test number | 1232 __ mov(eax, Immediate(1)); // Test number |
1225 __ popcnt(ebx, ecx); | 1233 __ popcnt(ebx, ecx); |
(...skipping 26 matching lines...) Expand all Loading... |
1252 } | 1260 } |
1253 | 1261 |
1254 | 1262 |
1255 TEST(AssemblerIa32BMI2) { | 1263 TEST(AssemblerIa32BMI2) { |
1256 CcTest::InitializeVM(); | 1264 CcTest::InitializeVM(); |
1257 if (!CpuFeatures::IsSupported(BMI2)) return; | 1265 if (!CpuFeatures::IsSupported(BMI2)) return; |
1258 | 1266 |
1259 Isolate* isolate = reinterpret_cast<Isolate*>(CcTest::isolate()); | 1267 Isolate* isolate = reinterpret_cast<Isolate*>(CcTest::isolate()); |
1260 HandleScope scope(isolate); | 1268 HandleScope scope(isolate); |
1261 v8::internal::byte buffer[2048]; | 1269 v8::internal::byte buffer[2048]; |
1262 MacroAssembler assm(isolate, buffer, sizeof buffer); | 1270 MacroAssembler assm(isolate, buffer, sizeof(buffer), |
| 1271 v8::internal::CodeObjectRequired::kYes); |
1263 { | 1272 { |
1264 CpuFeatureScope fscope(&assm, BMI2); | 1273 CpuFeatureScope fscope(&assm, BMI2); |
1265 Label exit; | 1274 Label exit; |
1266 | 1275 |
1267 __ push(ebx); // save ebx | 1276 __ push(ebx); // save ebx |
1268 __ push(esi); // save esi | 1277 __ push(esi); // save esi |
1269 __ mov(ecx, Immediate(0x55667788u)); // source operand | 1278 __ mov(ecx, Immediate(0x55667788u)); // source operand |
1270 __ push(ecx); // For memory operand | 1279 __ push(ecx); // For memory operand |
1271 | 1280 |
1272 // bzhi | 1281 // bzhi |
(...skipping 212 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1485 #endif | 1494 #endif |
1486 F1 f = FUNCTION_CAST<F1>(code->entry()); | 1495 F1 f = FUNCTION_CAST<F1>(code->entry()); |
1487 for (int i = 0; i < kNumCases; ++i) { | 1496 for (int i = 0; i < kNumCases; ++i) { |
1488 int res = f(i); | 1497 int res = f(i); |
1489 ::printf("f(%d) = %d\n", i, res); | 1498 ::printf("f(%d) = %d\n", i, res); |
1490 CHECK_EQ(values[i], res); | 1499 CHECK_EQ(values[i], res); |
1491 } | 1500 } |
1492 } | 1501 } |
1493 | 1502 |
1494 #undef __ | 1503 #undef __ |
OLD | NEW |