OLD | NEW |
1 // Copyright 2010 the V8 project authors. All rights reserved. | 1 // Copyright 2010 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 47 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
58 InitializeVM(); | 58 InitializeVM(); |
59 v8::HandleScope scope; | 59 v8::HandleScope scope; |
60 | 60 |
61 Assembler assm(NULL, 0); | 61 Assembler assm(NULL, 0); |
62 | 62 |
63 __ add(r0, r0, Operand(r1)); | 63 __ add(r0, r0, Operand(r1)); |
64 __ mov(pc, Operand(lr)); | 64 __ mov(pc, Operand(lr)); |
65 | 65 |
66 CodeDesc desc; | 66 CodeDesc desc; |
67 assm.GetCode(&desc); | 67 assm.GetCode(&desc); |
68 Object* code = Heap::CreateCode( | 68 Object* code = HEAP->CreateCode( |
69 desc, | 69 desc, |
70 Code::ComputeFlags(Code::STUB), | 70 Code::ComputeFlags(Code::STUB), |
71 Handle<Object>(Heap::undefined_value()))->ToObjectChecked(); | 71 Handle<Object>(HEAP->undefined_value()))->ToObjectChecked(); |
72 CHECK(code->IsCode()); | 72 CHECK(code->IsCode()); |
73 #ifdef DEBUG | 73 #ifdef DEBUG |
74 Code::cast(code)->Print(); | 74 Code::cast(code)->Print(); |
75 #endif | 75 #endif |
76 F2 f = FUNCTION_CAST<F2>(Code::cast(code)->entry()); | 76 F2 f = FUNCTION_CAST<F2>(Code::cast(code)->entry()); |
77 int res = reinterpret_cast<int>(CALL_GENERATED_CODE(f, 3, 4, 0, 0, 0)); | 77 int res = reinterpret_cast<int>(CALL_GENERATED_CODE(f, 3, 4, 0, 0, 0)); |
78 ::printf("f() = %d\n", res); | 78 ::printf("f() = %d\n", res); |
79 CHECK_EQ(7, res); | 79 CHECK_EQ(7, res); |
80 } | 80 } |
81 | 81 |
(...skipping 13 matching lines...) Expand all Loading... |
95 __ add(r0, r0, Operand(r1)); | 95 __ add(r0, r0, Operand(r1)); |
96 __ sub(r1, r1, Operand(1)); | 96 __ sub(r1, r1, Operand(1)); |
97 | 97 |
98 __ bind(&C); | 98 __ bind(&C); |
99 __ teq(r1, Operand(0, RelocInfo::NONE)); | 99 __ teq(r1, Operand(0, RelocInfo::NONE)); |
100 __ b(ne, &L); | 100 __ b(ne, &L); |
101 __ mov(pc, Operand(lr)); | 101 __ mov(pc, Operand(lr)); |
102 | 102 |
103 CodeDesc desc; | 103 CodeDesc desc; |
104 assm.GetCode(&desc); | 104 assm.GetCode(&desc); |
105 Object* code = Heap::CreateCode( | 105 Object* code = HEAP->CreateCode( |
106 desc, | 106 desc, |
107 Code::ComputeFlags(Code::STUB), | 107 Code::ComputeFlags(Code::STUB), |
108 Handle<Object>(Heap::undefined_value()))->ToObjectChecked(); | 108 Handle<Object>(HEAP->undefined_value()))->ToObjectChecked(); |
109 CHECK(code->IsCode()); | 109 CHECK(code->IsCode()); |
110 #ifdef DEBUG | 110 #ifdef DEBUG |
111 Code::cast(code)->Print(); | 111 Code::cast(code)->Print(); |
112 #endif | 112 #endif |
113 F1 f = FUNCTION_CAST<F1>(Code::cast(code)->entry()); | 113 F1 f = FUNCTION_CAST<F1>(Code::cast(code)->entry()); |
114 int res = reinterpret_cast<int>(CALL_GENERATED_CODE(f, 100, 0, 0, 0, 0)); | 114 int res = reinterpret_cast<int>(CALL_GENERATED_CODE(f, 100, 0, 0, 0, 0)); |
115 ::printf("f() = %d\n", res); | 115 ::printf("f() = %d\n", res); |
116 CHECK_EQ(5050, res); | 116 CHECK_EQ(5050, res); |
117 } | 117 } |
118 | 118 |
(...skipping 13 matching lines...) Expand all Loading... |
132 __ mul(r0, r1, r0); | 132 __ mul(r0, r1, r0); |
133 __ sub(r1, r1, Operand(1)); | 133 __ sub(r1, r1, Operand(1)); |
134 | 134 |
135 __ bind(&C); | 135 __ bind(&C); |
136 __ teq(r1, Operand(0, RelocInfo::NONE)); | 136 __ teq(r1, Operand(0, RelocInfo::NONE)); |
137 __ b(ne, &L); | 137 __ b(ne, &L); |
138 __ mov(pc, Operand(lr)); | 138 __ mov(pc, Operand(lr)); |
139 | 139 |
140 // some relocated stuff here, not executed | 140 // some relocated stuff here, not executed |
141 __ RecordComment("dead code, just testing relocations"); | 141 __ RecordComment("dead code, just testing relocations"); |
142 __ mov(r0, Operand(Factory::true_value())); | 142 __ mov(r0, Operand(FACTORY->true_value())); |
143 __ RecordComment("dead code, just testing immediate operands"); | 143 __ RecordComment("dead code, just testing immediate operands"); |
144 __ mov(r0, Operand(-1)); | 144 __ mov(r0, Operand(-1)); |
145 __ mov(r0, Operand(0xFF000000)); | 145 __ mov(r0, Operand(0xFF000000)); |
146 __ mov(r0, Operand(0xF0F0F0F0)); | 146 __ mov(r0, Operand(0xF0F0F0F0)); |
147 __ mov(r0, Operand(0xFFF0FFFF)); | 147 __ mov(r0, Operand(0xFFF0FFFF)); |
148 | 148 |
149 CodeDesc desc; | 149 CodeDesc desc; |
150 assm.GetCode(&desc); | 150 assm.GetCode(&desc); |
151 Object* code = Heap::CreateCode( | 151 Object* code = HEAP->CreateCode( |
152 desc, | 152 desc, |
153 Code::ComputeFlags(Code::STUB), | 153 Code::ComputeFlags(Code::STUB), |
154 Handle<Object>(Heap::undefined_value()))->ToObjectChecked(); | 154 Handle<Object>(HEAP->undefined_value()))->ToObjectChecked(); |
155 CHECK(code->IsCode()); | 155 CHECK(code->IsCode()); |
156 #ifdef DEBUG | 156 #ifdef DEBUG |
157 Code::cast(code)->Print(); | 157 Code::cast(code)->Print(); |
158 #endif | 158 #endif |
159 F1 f = FUNCTION_CAST<F1>(Code::cast(code)->entry()); | 159 F1 f = FUNCTION_CAST<F1>(Code::cast(code)->entry()); |
160 int res = reinterpret_cast<int>(CALL_GENERATED_CODE(f, 10, 0, 0, 0, 0)); | 160 int res = reinterpret_cast<int>(CALL_GENERATED_CODE(f, 10, 0, 0, 0, 0)); |
161 ::printf("f() = %d\n", res); | 161 ::printf("f() = %d\n", res); |
162 CHECK_EQ(3628800, res); | 162 CHECK_EQ(3628800, res); |
163 } | 163 } |
164 | 164 |
(...skipping 24 matching lines...) Expand all Loading... |
189 __ mov(r2, Operand(r2, LSL, 2)); | 189 __ mov(r2, Operand(r2, LSL, 2)); |
190 __ strb(r2, MemOperand(r4, OFFSET_OF(T, c))); | 190 __ strb(r2, MemOperand(r4, OFFSET_OF(T, c))); |
191 __ ldrsh(r2, MemOperand(r4, OFFSET_OF(T, s))); | 191 __ ldrsh(r2, MemOperand(r4, OFFSET_OF(T, s))); |
192 __ add(r0, r2, Operand(r0)); | 192 __ add(r0, r2, Operand(r0)); |
193 __ mov(r2, Operand(r2, ASR, 3)); | 193 __ mov(r2, Operand(r2, ASR, 3)); |
194 __ strh(r2, MemOperand(r4, OFFSET_OF(T, s))); | 194 __ strh(r2, MemOperand(r4, OFFSET_OF(T, s))); |
195 __ ldm(ia_w, sp, r4.bit() | fp.bit() | pc.bit()); | 195 __ ldm(ia_w, sp, r4.bit() | fp.bit() | pc.bit()); |
196 | 196 |
197 CodeDesc desc; | 197 CodeDesc desc; |
198 assm.GetCode(&desc); | 198 assm.GetCode(&desc); |
199 Object* code = Heap::CreateCode( | 199 Object* code = HEAP->CreateCode( |
200 desc, | 200 desc, |
201 Code::ComputeFlags(Code::STUB), | 201 Code::ComputeFlags(Code::STUB), |
202 Handle<Object>(Heap::undefined_value()))->ToObjectChecked(); | 202 Handle<Object>(HEAP->undefined_value()))->ToObjectChecked(); |
203 CHECK(code->IsCode()); | 203 CHECK(code->IsCode()); |
204 #ifdef DEBUG | 204 #ifdef DEBUG |
205 Code::cast(code)->Print(); | 205 Code::cast(code)->Print(); |
206 #endif | 206 #endif |
207 F3 f = FUNCTION_CAST<F3>(Code::cast(code)->entry()); | 207 F3 f = FUNCTION_CAST<F3>(Code::cast(code)->entry()); |
208 t.i = 100000; | 208 t.i = 100000; |
209 t.c = 10; | 209 t.c = 10; |
210 t.s = 1000; | 210 t.s = 1000; |
211 int res = reinterpret_cast<int>(CALL_GENERATED_CODE(f, &t, 0, 0, 0, 0)); | 211 int res = reinterpret_cast<int>(CALL_GENERATED_CODE(f, &t, 0, 0, 0, 0)); |
212 ::printf("f() = %d\n", res); | 212 ::printf("f() = %d\n", res); |
(...skipping 25 matching lines...) Expand all Loading... |
238 float y; | 238 float y; |
239 } T; | 239 } T; |
240 T t; | 240 T t; |
241 | 241 |
242 // Create a function that accepts &t, and loads, manipulates, and stores | 242 // Create a function that accepts &t, and loads, manipulates, and stores |
243 // the doubles and floats. | 243 // the doubles and floats. |
244 Assembler assm(NULL, 0); | 244 Assembler assm(NULL, 0); |
245 Label L, C; | 245 Label L, C; |
246 | 246 |
247 | 247 |
248 if (CpuFeatures::IsSupported(VFP3)) { | 248 if (Isolate::Current()->cpu_features()->IsSupported(VFP3)) { |
249 CpuFeatures::Scope scope(VFP3); | 249 CpuFeatures::Scope scope(VFP3); |
250 | 250 |
251 __ mov(ip, Operand(sp)); | 251 __ mov(ip, Operand(sp)); |
252 __ stm(db_w, sp, r4.bit() | fp.bit() | lr.bit()); | 252 __ stm(db_w, sp, r4.bit() | fp.bit() | lr.bit()); |
253 __ sub(fp, ip, Operand(4)); | 253 __ sub(fp, ip, Operand(4)); |
254 | 254 |
255 __ mov(r4, Operand(r0)); | 255 __ mov(r4, Operand(r0)); |
256 __ vldr(d6, r4, OFFSET_OF(T, a)); | 256 __ vldr(d6, r4, OFFSET_OF(T, a)); |
257 __ vldr(d7, r4, OFFSET_OF(T, b)); | 257 __ vldr(d7, r4, OFFSET_OF(T, b)); |
258 __ vadd(d5, d6, d7); | 258 __ vadd(d5, d6, d7); |
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
304 __ vneg(d0, d1); | 304 __ vneg(d0, d1); |
305 __ vstr(d0, r4, OFFSET_OF(T, m)); | 305 __ vstr(d0, r4, OFFSET_OF(T, m)); |
306 __ vldr(d1, r4, OFFSET_OF(T, n)); | 306 __ vldr(d1, r4, OFFSET_OF(T, n)); |
307 __ vneg(d0, d1); | 307 __ vneg(d0, d1); |
308 __ vstr(d0, r4, OFFSET_OF(T, n)); | 308 __ vstr(d0, r4, OFFSET_OF(T, n)); |
309 | 309 |
310 __ ldm(ia_w, sp, r4.bit() | fp.bit() | pc.bit()); | 310 __ ldm(ia_w, sp, r4.bit() | fp.bit() | pc.bit()); |
311 | 311 |
312 CodeDesc desc; | 312 CodeDesc desc; |
313 assm.GetCode(&desc); | 313 assm.GetCode(&desc); |
314 Object* code = Heap::CreateCode( | 314 Object* code = HEAP->CreateCode( |
315 desc, | 315 desc, |
316 Code::ComputeFlags(Code::STUB), | 316 Code::ComputeFlags(Code::STUB), |
317 Handle<Object>(Heap::undefined_value()))->ToObjectChecked(); | 317 Handle<Object>(HEAP->undefined_value()))->ToObjectChecked(); |
318 CHECK(code->IsCode()); | 318 CHECK(code->IsCode()); |
319 #ifdef DEBUG | 319 #ifdef DEBUG |
320 Code::cast(code)->Print(); | 320 Code::cast(code)->Print(); |
321 #endif | 321 #endif |
322 F3 f = FUNCTION_CAST<F3>(Code::cast(code)->entry()); | 322 F3 f = FUNCTION_CAST<F3>(Code::cast(code)->entry()); |
323 t.a = 1.5; | 323 t.a = 1.5; |
324 t.b = 2.75; | 324 t.b = 2.75; |
325 t.c = 17.17; | 325 t.c = 17.17; |
326 t.d = 0.0; | 326 t.d = 0.0; |
327 t.e = 0.0; | 327 t.e = 0.0; |
(...skipping 24 matching lines...) Expand all Loading... |
352 } | 352 } |
353 | 353 |
354 | 354 |
355 TEST(5) { | 355 TEST(5) { |
356 // Test the ARMv7 bitfield instructions. | 356 // Test the ARMv7 bitfield instructions. |
357 InitializeVM(); | 357 InitializeVM(); |
358 v8::HandleScope scope; | 358 v8::HandleScope scope; |
359 | 359 |
360 Assembler assm(NULL, 0); | 360 Assembler assm(NULL, 0); |
361 | 361 |
362 if (CpuFeatures::IsSupported(ARMv7)) { | 362 if (Isolate::Current()->cpu_features()->IsSupported(ARMv7)) { |
363 CpuFeatures::Scope scope(ARMv7); | 363 CpuFeatures::Scope scope(ARMv7); |
364 // On entry, r0 = 0xAAAAAAAA = 0b10..10101010. | 364 // On entry, r0 = 0xAAAAAAAA = 0b10..10101010. |
365 __ ubfx(r0, r0, 1, 12); // 0b00..010101010101 = 0x555 | 365 __ ubfx(r0, r0, 1, 12); // 0b00..010101010101 = 0x555 |
366 __ sbfx(r0, r0, 0, 5); // 0b11..111111110101 = -11 | 366 __ sbfx(r0, r0, 0, 5); // 0b11..111111110101 = -11 |
367 __ bfc(r0, 1, 3); // 0b11..111111110001 = -15 | 367 __ bfc(r0, 1, 3); // 0b11..111111110001 = -15 |
368 __ mov(r1, Operand(7)); | 368 __ mov(r1, Operand(7)); |
369 __ bfi(r0, r1, 3, 3); // 0b11..111111111001 = -7 | 369 __ bfi(r0, r1, 3, 3); // 0b11..111111111001 = -7 |
370 __ mov(pc, Operand(lr)); | 370 __ mov(pc, Operand(lr)); |
371 | 371 |
372 CodeDesc desc; | 372 CodeDesc desc; |
373 assm.GetCode(&desc); | 373 assm.GetCode(&desc); |
374 Object* code = Heap::CreateCode( | 374 Object* code = HEAP->CreateCode( |
375 desc, | 375 desc, |
376 Code::ComputeFlags(Code::STUB), | 376 Code::ComputeFlags(Code::STUB), |
377 Handle<Object>(Heap::undefined_value()))->ToObjectChecked(); | 377 Handle<Object>(HEAP->undefined_value()))->ToObjectChecked(); |
378 CHECK(code->IsCode()); | 378 CHECK(code->IsCode()); |
379 #ifdef DEBUG | 379 #ifdef DEBUG |
380 Code::cast(code)->Print(); | 380 Code::cast(code)->Print(); |
381 #endif | 381 #endif |
382 F1 f = FUNCTION_CAST<F1>(Code::cast(code)->entry()); | 382 F1 f = FUNCTION_CAST<F1>(Code::cast(code)->entry()); |
383 int res = reinterpret_cast<int>( | 383 int res = reinterpret_cast<int>( |
384 CALL_GENERATED_CODE(f, 0xAAAAAAAA, 0, 0, 0, 0)); | 384 CALL_GENERATED_CODE(f, 0xAAAAAAAA, 0, 0, 0, 0)); |
385 ::printf("f() = %d\n", res); | 385 ::printf("f() = %d\n", res); |
386 CHECK_EQ(-7, res); | 386 CHECK_EQ(-7, res); |
387 } | 387 } |
388 } | 388 } |
389 | 389 |
390 | 390 |
391 TEST(6) { | 391 TEST(6) { |
392 // Test saturating instructions. | 392 // Test saturating instructions. |
393 InitializeVM(); | 393 InitializeVM(); |
394 v8::HandleScope scope; | 394 v8::HandleScope scope; |
395 | 395 |
396 Assembler assm(NULL, 0); | 396 Assembler assm(NULL, 0); |
397 | 397 |
398 if (CpuFeatures::IsSupported(ARMv7)) { | 398 if (Isolate::Current()->cpu_features()->IsSupported(ARMv7)) { |
399 CpuFeatures::Scope scope(ARMv7); | 399 CpuFeatures::Scope scope(ARMv7); |
400 __ usat(r1, 8, Operand(r0)); // Sat 0xFFFF to 0-255 = 0xFF. | 400 __ usat(r1, 8, Operand(r0)); // Sat 0xFFFF to 0-255 = 0xFF. |
401 __ usat(r2, 12, Operand(r0, ASR, 9)); // Sat (0xFFFF>>9) to 0-4095 = 0x7F. | 401 __ usat(r2, 12, Operand(r0, ASR, 9)); // Sat (0xFFFF>>9) to 0-4095 = 0x7F. |
402 __ usat(r3, 1, Operand(r0, LSL, 16)); // Sat (0xFFFF<<16) to 0-1 = 0x0. | 402 __ usat(r3, 1, Operand(r0, LSL, 16)); // Sat (0xFFFF<<16) to 0-1 = 0x0. |
403 __ add(r0, r1, Operand(r2)); | 403 __ add(r0, r1, Operand(r2)); |
404 __ add(r0, r0, Operand(r3)); | 404 __ add(r0, r0, Operand(r3)); |
405 __ mov(pc, Operand(lr)); | 405 __ mov(pc, Operand(lr)); |
406 | 406 |
407 CodeDesc desc; | 407 CodeDesc desc; |
408 assm.GetCode(&desc); | 408 assm.GetCode(&desc); |
409 Object* code = Heap::CreateCode( | 409 Object* code = HEAP->CreateCode( |
410 desc, | 410 desc, |
411 Code::ComputeFlags(Code::STUB), | 411 Code::ComputeFlags(Code::STUB), |
412 Handle<Object>(Heap::undefined_value()))->ToObjectChecked(); | 412 Handle<Object>(HEAP->undefined_value()))->ToObjectChecked(); |
413 CHECK(code->IsCode()); | 413 CHECK(code->IsCode()); |
414 #ifdef DEBUG | 414 #ifdef DEBUG |
415 Code::cast(code)->Print(); | 415 Code::cast(code)->Print(); |
416 #endif | 416 #endif |
417 F1 f = FUNCTION_CAST<F1>(Code::cast(code)->entry()); | 417 F1 f = FUNCTION_CAST<F1>(Code::cast(code)->entry()); |
418 int res = reinterpret_cast<int>( | 418 int res = reinterpret_cast<int>( |
419 CALL_GENERATED_CODE(f, 0xFFFF, 0, 0, 0, 0)); | 419 CALL_GENERATED_CODE(f, 0xFFFF, 0, 0, 0, 0)); |
420 ::printf("f() = %d\n", res); | 420 ::printf("f() = %d\n", res); |
421 CHECK_EQ(382, res); | 421 CHECK_EQ(382, res); |
422 } | 422 } |
423 } | 423 } |
424 | 424 |
425 | 425 |
426 enum VCVTTypes { | 426 enum VCVTTypes { |
427 s32_f64, | 427 s32_f64, |
428 u32_f64 | 428 u32_f64 |
429 }; | 429 }; |
430 | 430 |
431 static void TestRoundingMode(VCVTTypes types, | 431 static void TestRoundingMode(VCVTTypes types, |
432 VFPRoundingMode mode, | 432 VFPRoundingMode mode, |
433 double value, | 433 double value, |
434 int expected, | 434 int expected, |
435 bool expected_exception = false) { | 435 bool expected_exception = false) { |
436 InitializeVM(); | 436 InitializeVM(); |
437 v8::HandleScope scope; | 437 v8::HandleScope scope; |
438 | 438 |
439 Assembler assm(NULL, 0); | 439 Assembler assm(NULL, 0); |
440 | 440 |
441 if (CpuFeatures::IsSupported(VFP3)) { | 441 if (Isolate::Current()->cpu_features()->IsSupported(VFP3)) { |
442 CpuFeatures::Scope scope(VFP3); | 442 CpuFeatures::Scope scope(VFP3); |
443 | 443 |
444 Label wrong_exception; | 444 Label wrong_exception; |
445 | 445 |
446 __ vmrs(r1); | 446 __ vmrs(r1); |
447 // Set custom FPSCR. | 447 // Set custom FPSCR. |
448 __ bic(r2, r1, Operand(kVFPRoundingModeMask | kVFPExceptionMask)); | 448 __ bic(r2, r1, Operand(kVFPRoundingModeMask | kVFPExceptionMask)); |
449 __ orr(r2, r2, Operand(mode)); | 449 __ orr(r2, r2, Operand(mode)); |
450 __ vmsr(r2); | 450 __ vmsr(r2); |
451 | 451 |
(...skipping 23 matching lines...) Expand all Loading... |
475 __ mov(pc, Operand(lr)); | 475 __ mov(pc, Operand(lr)); |
476 | 476 |
477 // The exception behaviour is not what we expected. | 477 // The exception behaviour is not what we expected. |
478 // Load a special value and return. | 478 // Load a special value and return. |
479 __ bind(&wrong_exception); | 479 __ bind(&wrong_exception); |
480 __ mov(r0, Operand(11223344)); | 480 __ mov(r0, Operand(11223344)); |
481 __ mov(pc, Operand(lr)); | 481 __ mov(pc, Operand(lr)); |
482 | 482 |
483 CodeDesc desc; | 483 CodeDesc desc; |
484 assm.GetCode(&desc); | 484 assm.GetCode(&desc); |
485 Object* code = Heap::CreateCode( | 485 Object* code = HEAP->CreateCode( |
486 desc, | 486 desc, |
487 Code::ComputeFlags(Code::STUB), | 487 Code::ComputeFlags(Code::STUB), |
488 Handle<Object>(Heap::undefined_value()))->ToObjectChecked(); | 488 Handle<Object>(HEAP->undefined_value()))->ToObjectChecked(); |
489 CHECK(code->IsCode()); | 489 CHECK(code->IsCode()); |
490 #ifdef DEBUG | 490 #ifdef DEBUG |
491 Code::cast(code)->Print(); | 491 Code::cast(code)->Print(); |
492 #endif | 492 #endif |
493 F1 f = FUNCTION_CAST<F1>(Code::cast(code)->entry()); | 493 F1 f = FUNCTION_CAST<F1>(Code::cast(code)->entry()); |
494 int res = reinterpret_cast<int>( | 494 int res = reinterpret_cast<int>( |
495 CALL_GENERATED_CODE(f, 0, 0, 0, 0, 0)); | 495 CALL_GENERATED_CODE(f, 0, 0, 0, 0, 0)); |
496 ::printf("res = %d\n", res); | 496 ::printf("res = %d\n", res); |
497 CHECK_EQ(expected, res); | 497 CHECK_EQ(expected, res); |
498 } | 498 } |
(...skipping 103 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
602 TestRoundingMode(u32_f64, RN, static_cast<double>(kMaxInt), kMaxInt); | 602 TestRoundingMode(u32_f64, RN, static_cast<double>(kMaxInt), kMaxInt); |
603 TestRoundingMode(u32_f64, RN, (kMaxInt + 0.49), kMaxInt); | 603 TestRoundingMode(u32_f64, RN, (kMaxInt + 0.49), kMaxInt); |
604 TestRoundingMode(u32_f64, RN, (kMaxInt + 0.5), | 604 TestRoundingMode(u32_f64, RN, (kMaxInt + 0.5), |
605 static_cast<uint32_t>(kMaxInt) + 1); | 605 static_cast<uint32_t>(kMaxInt) + 1); |
606 TestRoundingMode(u32_f64, RN, (kMaxUInt + 0.49), kMaxUInt); | 606 TestRoundingMode(u32_f64, RN, (kMaxUInt + 0.49), kMaxUInt); |
607 TestRoundingMode(u32_f64, RN, (kMaxUInt + 0.5), kMaxUInt, true); | 607 TestRoundingMode(u32_f64, RN, (kMaxUInt + 0.5), kMaxUInt, true); |
608 TestRoundingMode(u32_f64, RN, (kMaxUInt + 1.0), kMaxUInt, true); | 608 TestRoundingMode(u32_f64, RN, (kMaxUInt + 1.0), kMaxUInt, true); |
609 } | 609 } |
610 | 610 |
611 #undef __ | 611 #undef __ |
OLD | NEW |