Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(91)

Side by Side Diff: test/cctest/test-assembler-arm.cc

Issue 13483017: Unify the way cctest initalizes the VM for each test case. (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: Fixed presubmit errors. Created 7 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « test/cctest/cctest.cc ('k') | test/cctest/test-assembler-ia32.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 25 matching lines...) Expand all
36 using namespace v8::internal; 36 using namespace v8::internal;
37 37
38 38
39 // Define these function prototypes to match JSEntryFunction in execution.cc. 39 // Define these function prototypes to match JSEntryFunction in execution.cc.
40 typedef Object* (*F1)(int x, int p1, int p2, int p3, int p4); 40 typedef Object* (*F1)(int x, int p1, int p2, int p3, int p4);
41 typedef Object* (*F2)(int x, int y, int p2, int p3, int p4); 41 typedef Object* (*F2)(int x, int y, int p2, int p3, int p4);
42 typedef Object* (*F3)(void* p0, int p1, int p2, int p3, int p4); 42 typedef Object* (*F3)(void* p0, int p1, int p2, int p3, int p4);
43 typedef Object* (*F4)(void* p0, void* p1, int p2, int p3, int p4); 43 typedef Object* (*F4)(void* p0, void* p1, int p2, int p3, int p4);
44 44
45 45
46 static v8::Persistent<v8::Context> env;
47
48
49 static void InitializeVM() {
50 if (env.IsEmpty()) {
51 env = v8::Context::New();
52 }
53 }
54
55
56 #define __ assm. 46 #define __ assm.
57 47
58 TEST(0) { 48 TEST(0) {
59 InitializeVM(); 49 CcTest::InitializeVM();
60 Isolate* isolate = Isolate::Current(); 50 Isolate* isolate = Isolate::Current();
61 HandleScope scope(isolate); 51 HandleScope scope(isolate);
62 52
63 Assembler assm(isolate, NULL, 0); 53 Assembler assm(isolate, NULL, 0);
64 54
65 __ add(r0, r0, Operand(r1)); 55 __ add(r0, r0, Operand(r1));
66 __ mov(pc, Operand(lr)); 56 __ mov(pc, Operand(lr));
67 57
68 CodeDesc desc; 58 CodeDesc desc;
69 assm.GetCode(&desc); 59 assm.GetCode(&desc);
70 Object* code = isolate->heap()->CreateCode( 60 Object* code = isolate->heap()->CreateCode(
71 desc, 61 desc,
72 Code::ComputeFlags(Code::STUB), 62 Code::ComputeFlags(Code::STUB),
73 Handle<Code>())->ToObjectChecked(); 63 Handle<Code>())->ToObjectChecked();
74 CHECK(code->IsCode()); 64 CHECK(code->IsCode());
75 #ifdef DEBUG 65 #ifdef DEBUG
76 Code::cast(code)->Print(); 66 Code::cast(code)->Print();
77 #endif 67 #endif
78 F2 f = FUNCTION_CAST<F2>(Code::cast(code)->entry()); 68 F2 f = FUNCTION_CAST<F2>(Code::cast(code)->entry());
79 int res = reinterpret_cast<int>(CALL_GENERATED_CODE(f, 3, 4, 0, 0, 0)); 69 int res = reinterpret_cast<int>(CALL_GENERATED_CODE(f, 3, 4, 0, 0, 0));
80 ::printf("f() = %d\n", res); 70 ::printf("f() = %d\n", res);
81 CHECK_EQ(7, res); 71 CHECK_EQ(7, res);
82 } 72 }
83 73
84 74
85 TEST(1) { 75 TEST(1) {
86 InitializeVM(); 76 CcTest::InitializeVM();
87 Isolate* isolate = Isolate::Current(); 77 Isolate* isolate = Isolate::Current();
88 HandleScope scope(isolate); 78 HandleScope scope(isolate);
89 79
90 Assembler assm(isolate, NULL, 0); 80 Assembler assm(isolate, NULL, 0);
91 Label L, C; 81 Label L, C;
92 82
93 __ mov(r1, Operand(r0)); 83 __ mov(r1, Operand(r0));
94 __ mov(r0, Operand::Zero()); 84 __ mov(r0, Operand::Zero());
95 __ b(&C); 85 __ b(&C);
96 86
(...skipping 17 matching lines...) Expand all
114 Code::cast(code)->Print(); 104 Code::cast(code)->Print();
115 #endif 105 #endif
116 F1 f = FUNCTION_CAST<F1>(Code::cast(code)->entry()); 106 F1 f = FUNCTION_CAST<F1>(Code::cast(code)->entry());
117 int res = reinterpret_cast<int>(CALL_GENERATED_CODE(f, 100, 0, 0, 0, 0)); 107 int res = reinterpret_cast<int>(CALL_GENERATED_CODE(f, 100, 0, 0, 0, 0));
118 ::printf("f() = %d\n", res); 108 ::printf("f() = %d\n", res);
119 CHECK_EQ(5050, res); 109 CHECK_EQ(5050, res);
120 } 110 }
121 111
122 112
123 TEST(2) { 113 TEST(2) {
124 InitializeVM(); 114 CcTest::InitializeVM();
125 Isolate* isolate = Isolate::Current(); 115 Isolate* isolate = Isolate::Current();
126 HandleScope scope(isolate); 116 HandleScope scope(isolate);
127 117
128 Assembler assm(isolate, NULL, 0); 118 Assembler assm(isolate, NULL, 0);
129 Label L, C; 119 Label L, C;
130 120
131 __ mov(r1, Operand(r0)); 121 __ mov(r1, Operand(r0));
132 __ mov(r0, Operand(1)); 122 __ mov(r0, Operand(1));
133 __ b(&C); 123 __ b(&C);
134 124
(...skipping 26 matching lines...) Expand all
161 Code::cast(code)->Print(); 151 Code::cast(code)->Print();
162 #endif 152 #endif
163 F1 f = FUNCTION_CAST<F1>(Code::cast(code)->entry()); 153 F1 f = FUNCTION_CAST<F1>(Code::cast(code)->entry());
164 int res = reinterpret_cast<int>(CALL_GENERATED_CODE(f, 10, 0, 0, 0, 0)); 154 int res = reinterpret_cast<int>(CALL_GENERATED_CODE(f, 10, 0, 0, 0, 0));
165 ::printf("f() = %d\n", res); 155 ::printf("f() = %d\n", res);
166 CHECK_EQ(3628800, res); 156 CHECK_EQ(3628800, res);
167 } 157 }
168 158
169 159
170 TEST(3) { 160 TEST(3) {
171 InitializeVM(); 161 CcTest::InitializeVM();
172 Isolate* isolate = Isolate::Current(); 162 Isolate* isolate = Isolate::Current();
173 HandleScope scope(isolate); 163 HandleScope scope(isolate);
174 164
175 typedef struct { 165 typedef struct {
176 int i; 166 int i;
177 char c; 167 char c;
178 int16_t s; 168 int16_t s;
179 } T; 169 } T;
180 T t; 170 T t;
181 171
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after
217 ::printf("f() = %d\n", res); 207 ::printf("f() = %d\n", res);
218 CHECK_EQ(101010, res); 208 CHECK_EQ(101010, res);
219 CHECK_EQ(100000/2, t.i); 209 CHECK_EQ(100000/2, t.i);
220 CHECK_EQ(10*4, t.c); 210 CHECK_EQ(10*4, t.c);
221 CHECK_EQ(1000/8, t.s); 211 CHECK_EQ(1000/8, t.s);
222 } 212 }
223 213
224 214
225 TEST(4) { 215 TEST(4) {
226 // Test the VFP floating point instructions. 216 // Test the VFP floating point instructions.
227 InitializeVM(); 217 CcTest::InitializeVM();
228 Isolate* isolate = Isolate::Current(); 218 Isolate* isolate = Isolate::Current();
229 HandleScope scope(isolate); 219 HandleScope scope(isolate);
230 220
231 typedef struct { 221 typedef struct {
232 double a; 222 double a;
233 double b; 223 double b;
234 double c; 224 double c;
235 double d; 225 double d;
236 double e; 226 double e;
237 double f; 227 double f;
(...skipping 118 matching lines...) Expand 10 before | Expand all | Expand 10 after
356 CHECK_EQ(1.000000059604644775390625, t.d); 346 CHECK_EQ(1.000000059604644775390625, t.d);
357 CHECK_EQ(4.25, t.c); 347 CHECK_EQ(4.25, t.c);
358 CHECK_EQ(-4.1875, t.b); 348 CHECK_EQ(-4.1875, t.b);
359 CHECK_EQ(1.5, t.a); 349 CHECK_EQ(1.5, t.a);
360 } 350 }
361 } 351 }
362 352
363 353
364 TEST(5) { 354 TEST(5) {
365 // Test the ARMv7 bitfield instructions. 355 // Test the ARMv7 bitfield instructions.
366 InitializeVM(); 356 CcTest::InitializeVM();
367 Isolate* isolate = Isolate::Current(); 357 Isolate* isolate = Isolate::Current();
368 HandleScope scope(isolate); 358 HandleScope scope(isolate);
369 359
370 Assembler assm(isolate, NULL, 0); 360 Assembler assm(isolate, NULL, 0);
371 361
372 if (CpuFeatures::IsSupported(ARMv7)) { 362 if (CpuFeatures::IsSupported(ARMv7)) {
373 CpuFeatureScope scope(&assm, ARMv7); 363 CpuFeatureScope scope(&assm, ARMv7);
374 // On entry, r0 = 0xAAAAAAAA = 0b10..10101010. 364 // On entry, r0 = 0xAAAAAAAA = 0b10..10101010.
375 __ ubfx(r0, r0, 1, 12); // 0b00..010101010101 = 0x555 365 __ ubfx(r0, r0, 1, 12); // 0b00..010101010101 = 0x555
376 __ sbfx(r0, r0, 0, 5); // 0b11..111111110101 = -11 366 __ sbfx(r0, r0, 0, 5); // 0b11..111111110101 = -11
(...skipping 16 matching lines...) Expand all
393 int res = reinterpret_cast<int>( 383 int res = reinterpret_cast<int>(
394 CALL_GENERATED_CODE(f, 0xAAAAAAAA, 0, 0, 0, 0)); 384 CALL_GENERATED_CODE(f, 0xAAAAAAAA, 0, 0, 0, 0));
395 ::printf("f() = %d\n", res); 385 ::printf("f() = %d\n", res);
396 CHECK_EQ(-7, res); 386 CHECK_EQ(-7, res);
397 } 387 }
398 } 388 }
399 389
400 390
401 TEST(6) { 391 TEST(6) {
402 // Test saturating instructions. 392 // Test saturating instructions.
403 InitializeVM(); 393 CcTest::InitializeVM();
404 Isolate* isolate = Isolate::Current(); 394 Isolate* isolate = Isolate::Current();
405 HandleScope scope(isolate); 395 HandleScope scope(isolate);
406 396
407 Assembler assm(isolate, NULL, 0); 397 Assembler assm(isolate, NULL, 0);
408 398
409 if (CpuFeatures::IsSupported(ARMv7)) { 399 if (CpuFeatures::IsSupported(ARMv7)) {
410 CpuFeatureScope scope(&assm, ARMv7); 400 CpuFeatureScope scope(&assm, ARMv7);
411 __ usat(r1, 8, Operand(r0)); // Sat 0xFFFF to 0-255 = 0xFF. 401 __ usat(r1, 8, Operand(r0)); // Sat 0xFFFF to 0-255 = 0xFF.
412 __ usat(r2, 12, Operand(r0, ASR, 9)); // Sat (0xFFFF>>9) to 0-4095 = 0x7F. 402 __ usat(r2, 12, Operand(r0, ASR, 9)); // Sat (0xFFFF>>9) to 0-4095 = 0x7F.
413 __ usat(r3, 1, Operand(r0, LSL, 16)); // Sat (0xFFFF<<16) to 0-1 = 0x0. 403 __ usat(r3, 1, Operand(r0, LSL, 16)); // Sat (0xFFFF<<16) to 0-1 = 0x0.
(...skipping 23 matching lines...) Expand all
437 enum VCVTTypes { 427 enum VCVTTypes {
438 s32_f64, 428 s32_f64,
439 u32_f64 429 u32_f64
440 }; 430 };
441 431
442 static void TestRoundingMode(VCVTTypes types, 432 static void TestRoundingMode(VCVTTypes types,
443 VFPRoundingMode mode, 433 VFPRoundingMode mode,
444 double value, 434 double value,
445 int expected, 435 int expected,
446 bool expected_exception = false) { 436 bool expected_exception = false) {
447 InitializeVM(); 437 CcTest::InitializeVM();
448 Isolate* isolate = Isolate::Current(); 438 Isolate* isolate = Isolate::Current();
449 HandleScope scope(isolate); 439 HandleScope scope(isolate);
450 440
451 Assembler assm(isolate, NULL, 0); 441 Assembler assm(isolate, NULL, 0);
452 442
453 if (CpuFeatures::IsSupported(VFP3)) { 443 if (CpuFeatures::IsSupported(VFP3)) {
454 CpuFeatureScope scope(&assm, VFP3); 444 CpuFeatureScope scope(&assm, VFP3);
455 445
456 Label wrong_exception; 446 Label wrong_exception;
457 447
(...skipping 157 matching lines...) Expand 10 before | Expand all | Expand 10 after
615 TestRoundingMode(u32_f64, RN, (kMaxInt + 0.49), kMaxInt); 605 TestRoundingMode(u32_f64, RN, (kMaxInt + 0.49), kMaxInt);
616 TestRoundingMode(u32_f64, RN, (kMaxInt + 0.5), 606 TestRoundingMode(u32_f64, RN, (kMaxInt + 0.5),
617 static_cast<uint32_t>(kMaxInt) + 1); 607 static_cast<uint32_t>(kMaxInt) + 1);
618 TestRoundingMode(u32_f64, RN, (kMaxUInt + 0.49), kMaxUInt); 608 TestRoundingMode(u32_f64, RN, (kMaxUInt + 0.49), kMaxUInt);
619 TestRoundingMode(u32_f64, RN, (kMaxUInt + 0.5), kMaxUInt, true); 609 TestRoundingMode(u32_f64, RN, (kMaxUInt + 0.5), kMaxUInt, true);
620 TestRoundingMode(u32_f64, RN, (kMaxUInt + 1.0), kMaxUInt, true); 610 TestRoundingMode(u32_f64, RN, (kMaxUInt + 1.0), kMaxUInt, true);
621 } 611 }
622 612
623 TEST(8) { 613 TEST(8) {
624 // Test VFP multi load/store with ia_w. 614 // Test VFP multi load/store with ia_w.
625 InitializeVM(); 615 CcTest::InitializeVM();
626 Isolate* isolate = Isolate::Current(); 616 Isolate* isolate = Isolate::Current();
627 HandleScope scope(isolate); 617 HandleScope scope(isolate);
628 618
629 typedef struct { 619 typedef struct {
630 double a; 620 double a;
631 double b; 621 double b;
632 double c; 622 double c;
633 double d; 623 double d;
634 double e; 624 double e;
635 double f; 625 double f;
(...skipping 87 matching lines...) Expand 10 before | Expand all | Expand 10 after
723 CHECK_EQ(2.0, f.d); 713 CHECK_EQ(2.0, f.d);
724 CHECK_EQ(3.0, f.e); 714 CHECK_EQ(3.0, f.e);
725 CHECK_EQ(4.0, f.f); 715 CHECK_EQ(4.0, f.f);
726 CHECK_EQ(5.0, f.g); 716 CHECK_EQ(5.0, f.g);
727 CHECK_EQ(6.0, f.h); 717 CHECK_EQ(6.0, f.h);
728 } 718 }
729 719
730 720
731 TEST(9) { 721 TEST(9) {
732 // Test VFP multi load/store with ia. 722 // Test VFP multi load/store with ia.
733 InitializeVM(); 723 CcTest::InitializeVM();
734 Isolate* isolate = Isolate::Current(); 724 Isolate* isolate = Isolate::Current();
735 HandleScope scope(isolate); 725 HandleScope scope(isolate);
736 726
737 typedef struct { 727 typedef struct {
738 double a; 728 double a;
739 double b; 729 double b;
740 double c; 730 double c;
741 double d; 731 double d;
742 double e; 732 double e;
743 double f; 733 double f;
(...skipping 91 matching lines...) Expand 10 before | Expand all | Expand 10 after
835 CHECK_EQ(2.0, f.d); 825 CHECK_EQ(2.0, f.d);
836 CHECK_EQ(3.0, f.e); 826 CHECK_EQ(3.0, f.e);
837 CHECK_EQ(4.0, f.f); 827 CHECK_EQ(4.0, f.f);
838 CHECK_EQ(5.0, f.g); 828 CHECK_EQ(5.0, f.g);
839 CHECK_EQ(6.0, f.h); 829 CHECK_EQ(6.0, f.h);
840 } 830 }
841 831
842 832
843 TEST(10) { 833 TEST(10) {
844 // Test VFP multi load/store with db_w. 834 // Test VFP multi load/store with db_w.
845 InitializeVM(); 835 CcTest::InitializeVM();
846 Isolate* isolate = Isolate::Current(); 836 Isolate* isolate = Isolate::Current();
847 HandleScope scope(isolate); 837 HandleScope scope(isolate);
848 838
849 typedef struct { 839 typedef struct {
850 double a; 840 double a;
851 double b; 841 double b;
852 double c; 842 double c;
853 double d; 843 double d;
854 double e; 844 double e;
855 double f; 845 double f;
(...skipping 87 matching lines...) Expand 10 before | Expand all | Expand 10 after
943 CHECK_EQ(2.0, f.d); 933 CHECK_EQ(2.0, f.d);
944 CHECK_EQ(3.0, f.e); 934 CHECK_EQ(3.0, f.e);
945 CHECK_EQ(4.0, f.f); 935 CHECK_EQ(4.0, f.f);
946 CHECK_EQ(5.0, f.g); 936 CHECK_EQ(5.0, f.g);
947 CHECK_EQ(6.0, f.h); 937 CHECK_EQ(6.0, f.h);
948 } 938 }
949 939
950 940
951 TEST(11) { 941 TEST(11) {
952 // Test instructions using the carry flag. 942 // Test instructions using the carry flag.
953 InitializeVM(); 943 CcTest::InitializeVM();
954 Isolate* isolate = Isolate::Current(); 944 Isolate* isolate = Isolate::Current();
955 HandleScope scope(isolate); 945 HandleScope scope(isolate);
956 946
957 typedef struct { 947 typedef struct {
958 int32_t a; 948 int32_t a;
959 int32_t b; 949 int32_t b;
960 int32_t c; 950 int32_t c;
961 int32_t d; 951 int32_t d;
962 } I; 952 } I;
963 I i; 953 I i;
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after
1009 999
1010 CHECK_EQ(0xabcd0001, i.a); 1000 CHECK_EQ(0xabcd0001, i.a);
1011 CHECK_EQ(static_cast<int32_t>(0xabcd0000) >> 1, i.b); 1001 CHECK_EQ(static_cast<int32_t>(0xabcd0000) >> 1, i.b);
1012 CHECK_EQ(0x00000000, i.c); 1002 CHECK_EQ(0x00000000, i.c);
1013 CHECK_EQ(0xffffffff, i.d); 1003 CHECK_EQ(0xffffffff, i.d);
1014 } 1004 }
1015 1005
1016 1006
1017 TEST(12) { 1007 TEST(12) {
1018 // Test chaining of label usages within instructions (issue 1644). 1008 // Test chaining of label usages within instructions (issue 1644).
1019 InitializeVM(); 1009 CcTest::InitializeVM();
1020 Isolate* isolate = Isolate::Current(); 1010 Isolate* isolate = Isolate::Current();
1021 HandleScope scope(isolate); 1011 HandleScope scope(isolate);
1022 1012
1023 Assembler assm(isolate, NULL, 0); 1013 Assembler assm(isolate, NULL, 0);
1024 Label target; 1014 Label target;
1025 __ b(eq, &target); 1015 __ b(eq, &target);
1026 __ b(ne, &target); 1016 __ b(ne, &target);
1027 __ bind(&target); 1017 __ bind(&target);
1028 __ nop(); 1018 __ nop();
1029 } 1019 }
1030 1020
1031 1021
1032 TEST(13) { 1022 TEST(13) {
1033 // Test VFP instructions using registers d16-d31. 1023 // Test VFP instructions using registers d16-d31.
1034 InitializeVM(); 1024 CcTest::InitializeVM();
1035 Isolate* isolate = Isolate::Current(); 1025 Isolate* isolate = Isolate::Current();
1036 HandleScope scope(isolate); 1026 HandleScope scope(isolate);
1037 1027
1038 if (!CpuFeatures::IsSupported(VFP32DREGS)) { 1028 if (!CpuFeatures::IsSupported(VFP32DREGS)) {
1039 return; 1029 return;
1040 } 1030 }
1041 1031
1042 typedef struct { 1032 typedef struct {
1043 double a; 1033 double a;
1044 double b; 1034 double b;
(...skipping 96 matching lines...) Expand 10 before | Expand all | Expand 10 after
1141 CHECK_EQ(2.75, t.x); 1131 CHECK_EQ(2.75, t.x);
1142 CHECK_EQ(1.5, t.y); 1132 CHECK_EQ(1.5, t.y);
1143 CHECK_EQ(17.0, t.z); 1133 CHECK_EQ(17.0, t.z);
1144 CHECK_EQ(14.7610017472335499, t.i); 1134 CHECK_EQ(14.7610017472335499, t.i);
1145 CHECK_EQ(16.0, t.j); 1135 CHECK_EQ(16.0, t.j);
1146 CHECK_EQ(73.8818412254460241, t.k); 1136 CHECK_EQ(73.8818412254460241, t.k);
1147 } 1137 }
1148 } 1138 }
1149 1139
1150 #undef __ 1140 #undef __
OLDNEW
« no previous file with comments | « test/cctest/cctest.cc ('k') | test/cctest/test-assembler-ia32.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698