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 45 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
56 | 56 |
57 __ mov(eax, Operand(esp, 4)); | 57 __ mov(eax, Operand(esp, 4)); |
58 __ add(eax, Operand(esp, 8)); | 58 __ add(eax, Operand(esp, 8)); |
59 __ ret(0); | 59 __ ret(0); |
60 | 60 |
61 CodeDesc desc; | 61 CodeDesc desc; |
62 assm.GetCode(&desc); | 62 assm.GetCode(&desc); |
63 Handle<Code> code = isolate->factory()->NewCode( | 63 Handle<Code> code = isolate->factory()->NewCode( |
64 desc, Code::ComputeFlags(Code::STUB), Handle<Code>()); | 64 desc, Code::ComputeFlags(Code::STUB), Handle<Code>()); |
65 #ifdef OBJECT_PRINT | 65 #ifdef OBJECT_PRINT |
66 code->Print(); | 66 OFStream os(stdout); |
| 67 code->Print(os); |
67 #endif | 68 #endif |
68 F2 f = FUNCTION_CAST<F2>(code->entry()); | 69 F2 f = FUNCTION_CAST<F2>(code->entry()); |
69 int res = f(3, 4); | 70 int res = f(3, 4); |
70 ::printf("f() = %d\n", res); | 71 ::printf("f() = %d\n", res); |
71 CHECK_EQ(7, res); | 72 CHECK_EQ(7, res); |
72 } | 73 } |
73 | 74 |
74 | 75 |
75 TEST(AssemblerIa321) { | 76 TEST(AssemblerIa321) { |
76 CcTest::InitializeVM(); | 77 CcTest::InitializeVM(); |
(...skipping 15 matching lines...) Expand all Loading... |
92 __ bind(&C); | 93 __ bind(&C); |
93 __ test(edx, edx); | 94 __ test(edx, edx); |
94 __ j(not_zero, &L); | 95 __ j(not_zero, &L); |
95 __ ret(0); | 96 __ ret(0); |
96 | 97 |
97 CodeDesc desc; | 98 CodeDesc desc; |
98 assm.GetCode(&desc); | 99 assm.GetCode(&desc); |
99 Handle<Code> code = isolate->factory()->NewCode( | 100 Handle<Code> code = isolate->factory()->NewCode( |
100 desc, Code::ComputeFlags(Code::STUB), Handle<Code>()); | 101 desc, Code::ComputeFlags(Code::STUB), Handle<Code>()); |
101 #ifdef OBJECT_PRINT | 102 #ifdef OBJECT_PRINT |
102 code->Print(); | 103 OFStream os(stdout); |
| 104 code->Print(os); |
103 #endif | 105 #endif |
104 F1 f = FUNCTION_CAST<F1>(code->entry()); | 106 F1 f = FUNCTION_CAST<F1>(code->entry()); |
105 int res = f(100); | 107 int res = f(100); |
106 ::printf("f() = %d\n", res); | 108 ::printf("f() = %d\n", res); |
107 CHECK_EQ(5050, res); | 109 CHECK_EQ(5050, res); |
108 } | 110 } |
109 | 111 |
110 | 112 |
111 TEST(AssemblerIa322) { | 113 TEST(AssemblerIa322) { |
112 CcTest::InitializeVM(); | 114 CcTest::InitializeVM(); |
(...skipping 19 matching lines...) Expand all Loading... |
132 | 134 |
133 // some relocated stuff here, not executed | 135 // some relocated stuff here, not executed |
134 __ mov(eax, isolate->factory()->true_value()); | 136 __ mov(eax, isolate->factory()->true_value()); |
135 __ jmp(NULL, RelocInfo::RUNTIME_ENTRY); | 137 __ jmp(NULL, RelocInfo::RUNTIME_ENTRY); |
136 | 138 |
137 CodeDesc desc; | 139 CodeDesc desc; |
138 assm.GetCode(&desc); | 140 assm.GetCode(&desc); |
139 Handle<Code> code = isolate->factory()->NewCode( | 141 Handle<Code> code = isolate->factory()->NewCode( |
140 desc, Code::ComputeFlags(Code::STUB), Handle<Code>()); | 142 desc, Code::ComputeFlags(Code::STUB), Handle<Code>()); |
141 #ifdef OBJECT_PRINT | 143 #ifdef OBJECT_PRINT |
142 code->Print(); | 144 OFStream os(stdout); |
| 145 code->Print(os); |
143 #endif | 146 #endif |
144 F1 f = FUNCTION_CAST<F1>(code->entry()); | 147 F1 f = FUNCTION_CAST<F1>(code->entry()); |
145 int res = f(10); | 148 int res = f(10); |
146 ::printf("f() = %d\n", res); | 149 ::printf("f() = %d\n", res); |
147 CHECK_EQ(3628800, res); | 150 CHECK_EQ(3628800, res); |
148 } | 151 } |
149 | 152 |
150 | 153 |
151 typedef int (*F3)(float x); | 154 typedef int (*F3)(float x); |
152 | 155 |
(...skipping 134 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
287 __ sub(esp, Immediate(8)); | 290 __ sub(esp, Immediate(8)); |
288 __ movsd(Operand(esp, 0), xmm0); | 291 __ movsd(Operand(esp, 0), xmm0); |
289 __ fld_d(Operand(esp, 0)); | 292 __ fld_d(Operand(esp, 0)); |
290 __ add(esp, Immediate(8)); | 293 __ add(esp, Immediate(8)); |
291 __ ret(0); | 294 __ ret(0); |
292 CodeDesc desc; | 295 CodeDesc desc; |
293 assm.GetCode(&desc); | 296 assm.GetCode(&desc); |
294 Handle<Code> code = isolate->factory()->NewCode( | 297 Handle<Code> code = isolate->factory()->NewCode( |
295 desc, Code::ComputeFlags(Code::STUB), Handle<Code>()); | 298 desc, Code::ComputeFlags(Code::STUB), Handle<Code>()); |
296 #ifdef OBJECT_PRINT | 299 #ifdef OBJECT_PRINT |
297 code->Print(); | 300 OFStream os(stdout); |
| 301 code->Print(os); |
298 #endif | 302 #endif |
299 F6 f = FUNCTION_CAST<F6>(code->entry()); | 303 F6 f = FUNCTION_CAST<F6>(code->entry()); |
300 double res = f(12); | 304 double res = f(12); |
301 | 305 |
302 ::printf("f() = %f\n", res); | 306 ::printf("f() = %f\n", res); |
303 CHECK(11.99 < res && res < 12.001); | 307 CHECK(11.99 < res && res < 12.001); |
304 } | 308 } |
305 | 309 |
306 | 310 |
307 typedef int (*F7)(double x, double y); | 311 typedef int (*F7)(double x, double y); |
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
340 __ bind(&nan_l); | 344 __ bind(&nan_l); |
341 __ mov(eax, kNaN); | 345 __ mov(eax, kNaN); |
342 __ ret(0); | 346 __ ret(0); |
343 | 347 |
344 | 348 |
345 CodeDesc desc; | 349 CodeDesc desc; |
346 assm.GetCode(&desc); | 350 assm.GetCode(&desc); |
347 Handle<Code> code = isolate->factory()->NewCode( | 351 Handle<Code> code = isolate->factory()->NewCode( |
348 desc, Code::ComputeFlags(Code::STUB), Handle<Code>()); | 352 desc, Code::ComputeFlags(Code::STUB), Handle<Code>()); |
349 #ifdef OBJECT_PRINT | 353 #ifdef OBJECT_PRINT |
350 code->Print(); | 354 OFStream os(stdout); |
| 355 code->Print(os); |
351 #endif | 356 #endif |
352 | 357 |
353 F7 f = FUNCTION_CAST<F7>(code->entry()); | 358 F7 f = FUNCTION_CAST<F7>(code->entry()); |
354 CHECK_EQ(kLess, f(1.1, 2.2)); | 359 CHECK_EQ(kLess, f(1.1, 2.2)); |
355 CHECK_EQ(kEqual, f(2.2, 2.2)); | 360 CHECK_EQ(kEqual, f(2.2, 2.2)); |
356 CHECK_EQ(kGreater, f(3.3, 2.2)); | 361 CHECK_EQ(kGreater, f(3.3, 2.2)); |
357 CHECK_EQ(kNaN, f(v8::base::OS::nan_value(), 1.1)); | 362 CHECK_EQ(kNaN, f(v8::base::OS::nan_value(), 1.1)); |
358 } | 363 } |
359 | 364 |
360 | 365 |
(...skipping 173 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
534 __ movsd(xmm1, Operand(esp, 4)); | 539 __ movsd(xmm1, Operand(esp, 4)); |
535 __ extractps(eax, xmm1, 0x1); | 540 __ extractps(eax, xmm1, 0x1); |
536 __ ret(0); | 541 __ ret(0); |
537 } | 542 } |
538 | 543 |
539 CodeDesc desc; | 544 CodeDesc desc; |
540 assm.GetCode(&desc); | 545 assm.GetCode(&desc); |
541 Handle<Code> code = isolate->factory()->NewCode( | 546 Handle<Code> code = isolate->factory()->NewCode( |
542 desc, Code::ComputeFlags(Code::STUB), Handle<Code>()); | 547 desc, Code::ComputeFlags(Code::STUB), Handle<Code>()); |
543 #ifdef OBJECT_PRINT | 548 #ifdef OBJECT_PRINT |
544 code->Print(); | 549 OFStream os(stdout); |
| 550 code->Print(os); |
545 #endif | 551 #endif |
546 | 552 |
547 F4 f = FUNCTION_CAST<F4>(code->entry()); | 553 F4 f = FUNCTION_CAST<F4>(code->entry()); |
548 uint64_t value1 = V8_2PART_UINT64_C(0x12345678, 87654321); | 554 uint64_t value1 = V8_2PART_UINT64_C(0x12345678, 87654321); |
549 CHECK_EQ(0x12345678, f(uint64_to_double(value1))); | 555 CHECK_EQ(0x12345678, f(uint64_to_double(value1))); |
550 uint64_t value2 = V8_2PART_UINT64_C(0x87654321, 12345678); | 556 uint64_t value2 = V8_2PART_UINT64_C(0x87654321, 12345678); |
551 CHECK_EQ(0x87654321, f(uint64_to_double(value2))); | 557 CHECK_EQ(0x87654321, f(uint64_to_double(value2))); |
552 } | 558 } |
553 | 559 |
554 | 560 |
(...skipping 17 matching lines...) Expand all Loading... |
572 __ divps(xmm2, xmm1); | 578 __ divps(xmm2, xmm1); |
573 __ cvttss2si(eax, xmm2); | 579 __ cvttss2si(eax, xmm2); |
574 __ ret(0); | 580 __ ret(0); |
575 } | 581 } |
576 | 582 |
577 CodeDesc desc; | 583 CodeDesc desc; |
578 assm.GetCode(&desc); | 584 assm.GetCode(&desc); |
579 Handle<Code> code = isolate->factory()->NewCode( | 585 Handle<Code> code = isolate->factory()->NewCode( |
580 desc, Code::ComputeFlags(Code::STUB), Handle<Code>()); | 586 desc, Code::ComputeFlags(Code::STUB), Handle<Code>()); |
581 #ifdef OBJECT_PRINT | 587 #ifdef OBJECT_PRINT |
582 code->Print(); | 588 OFStream os(stdout); |
| 589 code->Print(os); |
583 #endif | 590 #endif |
584 | 591 |
585 F8 f = FUNCTION_CAST<F8>(code->entry()); | 592 F8 f = FUNCTION_CAST<F8>(code->entry()); |
586 CHECK_EQ(2, f(1.0, 2.0)); | 593 CHECK_EQ(2, f(1.0, 2.0)); |
587 } | 594 } |
588 | 595 |
589 | 596 |
590 #undef __ | 597 #undef __ |
OLD | NEW |