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 51 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
62 __ blr(); | 62 __ blr(); |
63 | 63 |
64 CodeDesc desc; | 64 CodeDesc desc; |
65 assm.GetCode(&desc); | 65 assm.GetCode(&desc); |
66 Handle<Code> code = isolate->factory()->NewCode( | 66 Handle<Code> code = isolate->factory()->NewCode( |
67 desc, Code::ComputeFlags(Code::STUB), Handle<Code>()); | 67 desc, Code::ComputeFlags(Code::STUB), Handle<Code>()); |
68 #ifdef DEBUG | 68 #ifdef DEBUG |
69 code->Print(); | 69 code->Print(); |
70 #endif | 70 #endif |
71 F2 f = FUNCTION_CAST<F2>(code->entry()); | 71 F2 f = FUNCTION_CAST<F2>(code->entry()); |
72 intptr_t res = | 72 intptr_t res = reinterpret_cast<intptr_t>( |
73 reinterpret_cast<intptr_t>(CALL_GENERATED_CODE(f, 3, 4, 0, 0, 0)); | 73 CALL_GENERATED_CODE(isolate, f, 3, 4, 0, 0, 0)); |
74 ::printf("f() = %" V8PRIdPTR "\n", res); | 74 ::printf("f() = %" V8PRIdPTR "\n", res); |
75 CHECK_EQ(7, static_cast<int>(res)); | 75 CHECK_EQ(7, static_cast<int>(res)); |
76 } | 76 } |
77 | 77 |
78 | 78 |
79 // Loop 100 times, adding loop counter to result | 79 // Loop 100 times, adding loop counter to result |
80 TEST(1) { | 80 TEST(1) { |
81 CcTest::InitializeVM(); | 81 CcTest::InitializeVM(); |
82 Isolate* isolate = Isolate::Current(); | 82 Isolate* isolate = Isolate::Current(); |
83 HandleScope scope(isolate); | 83 HandleScope scope(isolate); |
(...skipping 17 matching lines...) Expand all Loading... |
101 __ blr(); | 101 __ blr(); |
102 | 102 |
103 CodeDesc desc; | 103 CodeDesc desc; |
104 assm.GetCode(&desc); | 104 assm.GetCode(&desc); |
105 Handle<Code> code = isolate->factory()->NewCode( | 105 Handle<Code> code = isolate->factory()->NewCode( |
106 desc, Code::ComputeFlags(Code::STUB), Handle<Code>()); | 106 desc, Code::ComputeFlags(Code::STUB), Handle<Code>()); |
107 #ifdef DEBUG | 107 #ifdef DEBUG |
108 code->Print(); | 108 code->Print(); |
109 #endif | 109 #endif |
110 F1 f = FUNCTION_CAST<F1>(code->entry()); | 110 F1 f = FUNCTION_CAST<F1>(code->entry()); |
111 intptr_t res = | 111 intptr_t res = reinterpret_cast<intptr_t>( |
112 reinterpret_cast<intptr_t>(CALL_GENERATED_CODE(f, 100, 0, 0, 0, 0)); | 112 CALL_GENERATED_CODE(isolate, f, 100, 0, 0, 0, 0)); |
113 ::printf("f() = %" V8PRIdPTR "\n", res); | 113 ::printf("f() = %" V8PRIdPTR "\n", res); |
114 CHECK_EQ(5050, static_cast<int>(res)); | 114 CHECK_EQ(5050, static_cast<int>(res)); |
115 } | 115 } |
116 | 116 |
117 | 117 |
118 TEST(2) { | 118 TEST(2) { |
119 CcTest::InitializeVM(); | 119 CcTest::InitializeVM(); |
120 Isolate* isolate = Isolate::Current(); | 120 Isolate* isolate = Isolate::Current(); |
121 HandleScope scope(isolate); | 121 HandleScope scope(isolate); |
122 | 122 |
(...skipping 29 matching lines...) Expand all Loading... |
152 __ mov(r0, Operand(0xFFF0FFFF)); | 152 __ mov(r0, Operand(0xFFF0FFFF)); |
153 | 153 |
154 CodeDesc desc; | 154 CodeDesc desc; |
155 assm.GetCode(&desc); | 155 assm.GetCode(&desc); |
156 Handle<Code> code = isolate->factory()->NewCode( | 156 Handle<Code> code = isolate->factory()->NewCode( |
157 desc, Code::ComputeFlags(Code::STUB), Handle<Code>()); | 157 desc, Code::ComputeFlags(Code::STUB), Handle<Code>()); |
158 #ifdef DEBUG | 158 #ifdef DEBUG |
159 code->Print(); | 159 code->Print(); |
160 #endif | 160 #endif |
161 F1 f = FUNCTION_CAST<F1>(code->entry()); | 161 F1 f = FUNCTION_CAST<F1>(code->entry()); |
162 intptr_t res = | 162 intptr_t res = reinterpret_cast<intptr_t>( |
163 reinterpret_cast<intptr_t>(CALL_GENERATED_CODE(f, 10, 0, 0, 0, 0)); | 163 CALL_GENERATED_CODE(isolate, f, 10, 0, 0, 0, 0)); |
164 ::printf("f() = %" V8PRIdPTR "\n", res); | 164 ::printf("f() = %" V8PRIdPTR "\n", res); |
165 CHECK_EQ(3628800, static_cast<int>(res)); | 165 CHECK_EQ(3628800, static_cast<int>(res)); |
166 } | 166 } |
167 | 167 |
168 | 168 |
169 TEST(3) { | 169 TEST(3) { |
170 CcTest::InitializeVM(); | 170 CcTest::InitializeVM(); |
171 Isolate* isolate = Isolate::Current(); | 171 Isolate* isolate = Isolate::Current(); |
172 HandleScope scope(isolate); | 172 HandleScope scope(isolate); |
173 | 173 |
(...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
228 assm.GetCode(&desc); | 228 assm.GetCode(&desc); |
229 Handle<Code> code = isolate->factory()->NewCode( | 229 Handle<Code> code = isolate->factory()->NewCode( |
230 desc, Code::ComputeFlags(Code::STUB), Handle<Code>()); | 230 desc, Code::ComputeFlags(Code::STUB), Handle<Code>()); |
231 #ifdef DEBUG | 231 #ifdef DEBUG |
232 code->Print(); | 232 code->Print(); |
233 #endif | 233 #endif |
234 F3 f = FUNCTION_CAST<F3>(code->entry()); | 234 F3 f = FUNCTION_CAST<F3>(code->entry()); |
235 t.i = 100000; | 235 t.i = 100000; |
236 t.c = 10; | 236 t.c = 10; |
237 t.s = 1000; | 237 t.s = 1000; |
238 intptr_t res = | 238 intptr_t res = reinterpret_cast<intptr_t>( |
239 reinterpret_cast<intptr_t>(CALL_GENERATED_CODE(f, &t, 0, 0, 0, 0)); | 239 CALL_GENERATED_CODE(isolate, f, &t, 0, 0, 0, 0)); |
240 ::printf("f() = %" V8PRIdPTR "\n", res); | 240 ::printf("f() = %" V8PRIdPTR "\n", res); |
241 CHECK_EQ(101010, static_cast<int>(res)); | 241 CHECK_EQ(101010, static_cast<int>(res)); |
242 CHECK_EQ(100000 / 2, t.i); | 242 CHECK_EQ(100000 / 2, t.i); |
243 CHECK_EQ(10 * 4, t.c); | 243 CHECK_EQ(10 * 4, t.c); |
244 CHECK_EQ(1000 / 8, t.s); | 244 CHECK_EQ(1000 / 8, t.s); |
245 } | 245 } |
246 | 246 |
247 #if 0 | 247 #if 0 |
248 TEST(4) { | 248 TEST(4) { |
249 // Test the VFP floating point instructions. | 249 // Test the VFP floating point instructions. |
(...skipping 104 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
354 t.d = 0.0; | 354 t.d = 0.0; |
355 t.e = 0.0; | 355 t.e = 0.0; |
356 t.f = 0.0; | 356 t.f = 0.0; |
357 t.g = -2718.2818; | 357 t.g = -2718.2818; |
358 t.h = 31415926.5; | 358 t.h = 31415926.5; |
359 t.i = 0; | 359 t.i = 0; |
360 t.m = -2718.2818; | 360 t.m = -2718.2818; |
361 t.n = 123.456; | 361 t.n = 123.456; |
362 t.x = 4.5; | 362 t.x = 4.5; |
363 t.y = 9.0; | 363 t.y = 9.0; |
364 Object* dummy = CALL_GENERATED_CODE(f, &t, 0, 0, 0, 0); | 364 Object* dummy = CALL_GENERATED_CODE(isolate, f, &t, 0, 0, 0, 0); |
365 USE(dummy); | 365 USE(dummy); |
366 CHECK_EQ(4.5, t.y); | 366 CHECK_EQ(4.5, t.y); |
367 CHECK_EQ(9.0, t.x); | 367 CHECK_EQ(9.0, t.x); |
368 CHECK_EQ(-123.456, t.n); | 368 CHECK_EQ(-123.456, t.n); |
369 CHECK_EQ(2718.2818, t.m); | 369 CHECK_EQ(2718.2818, t.m); |
370 CHECK_EQ(2, t.i); | 370 CHECK_EQ(2, t.i); |
371 CHECK_EQ(2718.2818, t.g); | 371 CHECK_EQ(2718.2818, t.g); |
372 CHECK_EQ(31415926.5, t.h); | 372 CHECK_EQ(31415926.5, t.h); |
373 CHECK_EQ(42.0, t.f); | 373 CHECK_EQ(42.0, t.f); |
374 CHECK_EQ(1.0, t.e); | 374 CHECK_EQ(1.0, t.e); |
(...skipping 28 matching lines...) Expand all Loading... |
403 Object* code = isolate->heap()->CreateCode( | 403 Object* code = isolate->heap()->CreateCode( |
404 desc, | 404 desc, |
405 Code::ComputeFlags(Code::STUB), | 405 Code::ComputeFlags(Code::STUB), |
406 Handle<Code>())->ToObjectChecked(); | 406 Handle<Code>())->ToObjectChecked(); |
407 CHECK(code->IsCode()); | 407 CHECK(code->IsCode()); |
408 #ifdef DEBUG | 408 #ifdef DEBUG |
409 Code::cast(code)->Print(); | 409 Code::cast(code)->Print(); |
410 #endif | 410 #endif |
411 F1 f = FUNCTION_CAST<F1>(Code::cast(code)->entry()); | 411 F1 f = FUNCTION_CAST<F1>(Code::cast(code)->entry()); |
412 int res = reinterpret_cast<int>( | 412 int res = reinterpret_cast<int>( |
413 CALL_GENERATED_CODE(f, 0xAAAAAAAA, 0, 0, 0, 0)); | 413 CALL_GENERATED_CODE(isolate, f, 0xAAAAAAAA, 0, 0, 0, 0)); |
414 ::printf("f() = %d\n", res); | 414 ::printf("f() = %d\n", res); |
415 CHECK_EQ(-7, res); | 415 CHECK_EQ(-7, res); |
416 } | 416 } |
417 } | 417 } |
418 | 418 |
419 | 419 |
420 TEST(6) { | 420 TEST(6) { |
421 // Test saturating instructions. | 421 // Test saturating instructions. |
422 CcTest::InitializeVM(); | 422 CcTest::InitializeVM(); |
423 Isolate* isolate = Isolate::Current(); | 423 Isolate* isolate = Isolate::Current(); |
(...skipping 15 matching lines...) Expand all Loading... |
439 Object* code = isolate->heap()->CreateCode( | 439 Object* code = isolate->heap()->CreateCode( |
440 desc, | 440 desc, |
441 Code::ComputeFlags(Code::STUB), | 441 Code::ComputeFlags(Code::STUB), |
442 Handle<Code>())->ToObjectChecked(); | 442 Handle<Code>())->ToObjectChecked(); |
443 CHECK(code->IsCode()); | 443 CHECK(code->IsCode()); |
444 #ifdef DEBUG | 444 #ifdef DEBUG |
445 Code::cast(code)->Print(); | 445 Code::cast(code)->Print(); |
446 #endif | 446 #endif |
447 F1 f = FUNCTION_CAST<F1>(Code::cast(code)->entry()); | 447 F1 f = FUNCTION_CAST<F1>(Code::cast(code)->entry()); |
448 int res = reinterpret_cast<int>( | 448 int res = reinterpret_cast<int>( |
449 CALL_GENERATED_CODE(f, 0xFFFF, 0, 0, 0, 0)); | 449 CALL_GENERATED_CODE(isolate, f, 0xFFFF, 0, 0, 0, 0)); |
450 ::printf("f() = %d\n", res); | 450 ::printf("f() = %d\n", res); |
451 CHECK_EQ(382, res); | 451 CHECK_EQ(382, res); |
452 } | 452 } |
453 } | 453 } |
454 | 454 |
455 enum VCVTTypes { | 455 enum VCVTTypes { |
456 s32_f64, | 456 s32_f64, |
457 u32_f64 | 457 u32_f64 |
458 }; | 458 }; |
459 | 459 |
(...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
515 Object* code = isolate->heap()->CreateCode( | 515 Object* code = isolate->heap()->CreateCode( |
516 desc, | 516 desc, |
517 Code::ComputeFlags(Code::STUB), | 517 Code::ComputeFlags(Code::STUB), |
518 Handle<Code>())->ToObjectChecked(); | 518 Handle<Code>())->ToObjectChecked(); |
519 CHECK(code->IsCode()); | 519 CHECK(code->IsCode()); |
520 #ifdef DEBUG | 520 #ifdef DEBUG |
521 Code::cast(code)->Print(); | 521 Code::cast(code)->Print(); |
522 #endif | 522 #endif |
523 F1 f = FUNCTION_CAST<F1>(Code::cast(code)->entry()); | 523 F1 f = FUNCTION_CAST<F1>(Code::cast(code)->entry()); |
524 int res = reinterpret_cast<int>( | 524 int res = reinterpret_cast<int>( |
525 CALL_GENERATED_CODE(f, 0, 0, 0, 0, 0)); | 525 CALL_GENERATED_CODE(isolate, f, 0, 0, 0, 0, 0)); |
526 ::printf("res = %d\n", res); | 526 ::printf("res = %d\n", res); |
527 CHECK_EQ(expected, res); | 527 CHECK_EQ(expected, res); |
528 } | 528 } |
529 } | 529 } |
530 | 530 |
531 | 531 |
532 TEST(7) { | 532 TEST(7) { |
533 // Test vfp rounding modes. | 533 // Test vfp rounding modes. |
534 | 534 |
535 // s32_f64 (double to integer). | 535 // s32_f64 (double to integer). |
(...skipping 184 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
720 | 720 |
721 f.a = 1.0; | 721 f.a = 1.0; |
722 f.b = 2.0; | 722 f.b = 2.0; |
723 f.c = 3.0; | 723 f.c = 3.0; |
724 f.d = 4.0; | 724 f.d = 4.0; |
725 f.e = 5.0; | 725 f.e = 5.0; |
726 f.f = 6.0; | 726 f.f = 6.0; |
727 f.g = 7.0; | 727 f.g = 7.0; |
728 f.h = 8.0; | 728 f.h = 8.0; |
729 | 729 |
730 Object* dummy = CALL_GENERATED_CODE(fn, &d, &f, 0, 0, 0); | 730 Object* dummy = CALL_GENERATED_CODE(isolate, fn, &d, &f, 0, 0, 0); |
731 USE(dummy); | 731 USE(dummy); |
732 | 732 |
733 CHECK_EQ(7.7, d.a); | 733 CHECK_EQ(7.7, d.a); |
734 CHECK_EQ(8.8, d.b); | 734 CHECK_EQ(8.8, d.b); |
735 CHECK_EQ(1.1, d.c); | 735 CHECK_EQ(1.1, d.c); |
736 CHECK_EQ(2.2, d.d); | 736 CHECK_EQ(2.2, d.d); |
737 CHECK_EQ(3.3, d.e); | 737 CHECK_EQ(3.3, d.e); |
738 CHECK_EQ(4.4, d.f); | 738 CHECK_EQ(4.4, d.f); |
739 CHECK_EQ(5.5, d.g); | 739 CHECK_EQ(5.5, d.g); |
740 CHECK_EQ(6.6, d.h); | 740 CHECK_EQ(6.6, d.h); |
(...skipping 95 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
836 | 836 |
837 f.a = 1.0; | 837 f.a = 1.0; |
838 f.b = 2.0; | 838 f.b = 2.0; |
839 f.c = 3.0; | 839 f.c = 3.0; |
840 f.d = 4.0; | 840 f.d = 4.0; |
841 f.e = 5.0; | 841 f.e = 5.0; |
842 f.f = 6.0; | 842 f.f = 6.0; |
843 f.g = 7.0; | 843 f.g = 7.0; |
844 f.h = 8.0; | 844 f.h = 8.0; |
845 | 845 |
846 Object* dummy = CALL_GENERATED_CODE(fn, &d, &f, 0, 0, 0); | 846 Object* dummy = CALL_GENERATED_CODE(isolate, fn, &d, &f, 0, 0, 0); |
847 USE(dummy); | 847 USE(dummy); |
848 | 848 |
849 CHECK_EQ(7.7, d.a); | 849 CHECK_EQ(7.7, d.a); |
850 CHECK_EQ(8.8, d.b); | 850 CHECK_EQ(8.8, d.b); |
851 CHECK_EQ(1.1, d.c); | 851 CHECK_EQ(1.1, d.c); |
852 CHECK_EQ(2.2, d.d); | 852 CHECK_EQ(2.2, d.d); |
853 CHECK_EQ(3.3, d.e); | 853 CHECK_EQ(3.3, d.e); |
854 CHECK_EQ(4.4, d.f); | 854 CHECK_EQ(4.4, d.f); |
855 CHECK_EQ(5.5, d.g); | 855 CHECK_EQ(5.5, d.g); |
856 CHECK_EQ(6.6, d.h); | 856 CHECK_EQ(6.6, d.h); |
(...skipping 91 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
948 | 948 |
949 f.a = 1.0; | 949 f.a = 1.0; |
950 f.b = 2.0; | 950 f.b = 2.0; |
951 f.c = 3.0; | 951 f.c = 3.0; |
952 f.d = 4.0; | 952 f.d = 4.0; |
953 f.e = 5.0; | 953 f.e = 5.0; |
954 f.f = 6.0; | 954 f.f = 6.0; |
955 f.g = 7.0; | 955 f.g = 7.0; |
956 f.h = 8.0; | 956 f.h = 8.0; |
957 | 957 |
958 Object* dummy = CALL_GENERATED_CODE(fn, &d, &f, 0, 0, 0); | 958 Object* dummy = CALL_GENERATED_CODE(isolate, fn, &d, &f, 0, 0, 0); |
959 USE(dummy); | 959 USE(dummy); |
960 | 960 |
961 CHECK_EQ(7.7, d.a); | 961 CHECK_EQ(7.7, d.a); |
962 CHECK_EQ(8.8, d.b); | 962 CHECK_EQ(8.8, d.b); |
963 CHECK_EQ(1.1, d.c); | 963 CHECK_EQ(1.1, d.c); |
964 CHECK_EQ(2.2, d.d); | 964 CHECK_EQ(2.2, d.d); |
965 CHECK_EQ(3.3, d.e); | 965 CHECK_EQ(3.3, d.e); |
966 CHECK_EQ(4.4, d.f); | 966 CHECK_EQ(4.4, d.f); |
967 CHECK_EQ(5.5, d.g); | 967 CHECK_EQ(5.5, d.g); |
968 CHECK_EQ(6.6, d.h); | 968 CHECK_EQ(6.6, d.h); |
(...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1028 assm.GetCode(&desc); | 1028 assm.GetCode(&desc); |
1029 Object* code = isolate->heap()->CreateCode( | 1029 Object* code = isolate->heap()->CreateCode( |
1030 desc, | 1030 desc, |
1031 Code::ComputeFlags(Code::STUB), | 1031 Code::ComputeFlags(Code::STUB), |
1032 Handle<Code>())->ToObjectChecked(); | 1032 Handle<Code>())->ToObjectChecked(); |
1033 CHECK(code->IsCode()); | 1033 CHECK(code->IsCode()); |
1034 #ifdef DEBUG | 1034 #ifdef DEBUG |
1035 Code::cast(code)->Print(); | 1035 Code::cast(code)->Print(); |
1036 #endif | 1036 #endif |
1037 F3 f = FUNCTION_CAST<F3>(Code::cast(code)->entry()); | 1037 F3 f = FUNCTION_CAST<F3>(Code::cast(code)->entry()); |
1038 Object* dummy = CALL_GENERATED_CODE(f, &i, 0, 0, 0, 0); | 1038 Object* dummy = CALL_GENERATED_CODE(isolate, f, &i, 0, 0, 0, 0); |
1039 USE(dummy); | 1039 USE(dummy); |
1040 | 1040 |
1041 CHECK_EQ(0xabcd0001, i.a); | 1041 CHECK_EQ(0xabcd0001, i.a); |
1042 CHECK_EQ(static_cast<int32_t>(0xabcd0000) >> 1, i.b); | 1042 CHECK_EQ(static_cast<int32_t>(0xabcd0000) >> 1, i.b); |
1043 CHECK_EQ(0x00000000, i.c); | 1043 CHECK_EQ(0x00000000, i.c); |
1044 CHECK_EQ(0xffffffff, i.d); | 1044 CHECK_EQ(0xffffffff, i.d); |
1045 } | 1045 } |
1046 | 1046 |
1047 | 1047 |
1048 TEST(12) { | 1048 TEST(12) { |
1049 // Test chaining of label usages within instructions (issue 1644). | 1049 // Test chaining of label usages within instructions (issue 1644). |
1050 CcTest::InitializeVM(); | 1050 CcTest::InitializeVM(); |
1051 Isolate* isolate = Isolate::Current(); | 1051 Isolate* isolate = Isolate::Current(); |
1052 HandleScope scope(isolate); | 1052 HandleScope scope(isolate); |
1053 | 1053 |
1054 Assembler assm(isolate, NULL, 0); | 1054 Assembler assm(isolate, NULL, 0); |
1055 Label target; | 1055 Label target; |
1056 __ b(eq, &target); | 1056 __ b(eq, &target); |
1057 __ b(ne, &target); | 1057 __ b(ne, &target); |
1058 __ bind(&target); | 1058 __ bind(&target); |
1059 __ nop(); | 1059 __ nop(); |
1060 } | 1060 } |
1061 #endif | 1061 #endif |
1062 | 1062 |
1063 #undef __ | 1063 #undef __ |
OLD | NEW |