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 269 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
280 double i; | 280 double i; |
281 } T; | 281 } T; |
282 T t; | 282 T t; |
283 | 283 |
284 // Create a function that accepts &t, and loads, manipulates, and stores | 284 // Create a function that accepts &t, and loads, manipulates, and stores |
285 // the doubles t.a ... t.f. | 285 // the doubles t.a ... t.f. |
286 MacroAssembler assm(Isolate::Current(), NULL, 0); | 286 MacroAssembler assm(Isolate::Current(), NULL, 0); |
287 Label L, C; | 287 Label L, C; |
288 | 288 |
289 if (CpuFeatures::IsSupported(FPU)) { | 289 if (CpuFeatures::IsSupported(FPU)) { |
290 CpuFeatures::Scope scope(FPU); | 290 CpuFeatureScope scope(&assm, FPU); |
291 | 291 |
292 __ ldc1(f4, MemOperand(a0, OFFSET_OF(T, a)) ); | 292 __ ldc1(f4, MemOperand(a0, OFFSET_OF(T, a)) ); |
293 __ ldc1(f6, MemOperand(a0, OFFSET_OF(T, b)) ); | 293 __ ldc1(f6, MemOperand(a0, OFFSET_OF(T, b)) ); |
294 __ add_d(f8, f4, f6); | 294 __ add_d(f8, f4, f6); |
295 __ sdc1(f8, MemOperand(a0, OFFSET_OF(T, c)) ); // c = a + b. | 295 __ sdc1(f8, MemOperand(a0, OFFSET_OF(T, c)) ); // c = a + b. |
296 | 296 |
297 __ mov_d(f10, f8); // c | 297 __ mov_d(f10, f8); // c |
298 __ neg_d(f12, f6); // -b | 298 __ neg_d(f12, f6); // -b |
299 __ sub_d(f10, f10, f12); | 299 __ sub_d(f10, f10, f12); |
300 __ sdc1(f10, MemOperand(a0, OFFSET_OF(T, d)) ); // d = c - (-b). | 300 __ sdc1(f10, MemOperand(a0, OFFSET_OF(T, d)) ); // d = c - (-b). |
(...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
363 double a; | 363 double a; |
364 double b; | 364 double b; |
365 double c; | 365 double c; |
366 } T; | 366 } T; |
367 T t; | 367 T t; |
368 | 368 |
369 Assembler assm(Isolate::Current(), NULL, 0); | 369 Assembler assm(Isolate::Current(), NULL, 0); |
370 Label L, C; | 370 Label L, C; |
371 | 371 |
372 if (CpuFeatures::IsSupported(FPU)) { | 372 if (CpuFeatures::IsSupported(FPU)) { |
373 CpuFeatures::Scope scope(FPU); | 373 CpuFeatureScope scope(&assm, FPU); |
374 | 374 |
375 __ ldc1(f4, MemOperand(a0, OFFSET_OF(T, a)) ); | 375 __ ldc1(f4, MemOperand(a0, OFFSET_OF(T, a)) ); |
376 __ ldc1(f6, MemOperand(a0, OFFSET_OF(T, b)) ); | 376 __ ldc1(f6, MemOperand(a0, OFFSET_OF(T, b)) ); |
377 | 377 |
378 // Swap f4 and f6, by using four integer registers, t0-t3. | 378 // Swap f4 and f6, by using four integer registers, t0-t3. |
379 __ mfc1(t0, f4); | 379 __ mfc1(t0, f4); |
380 __ mfc1(t1, f5); | 380 __ mfc1(t1, f5); |
381 __ mfc1(t2, f6); | 381 __ mfc1(t2, f6); |
382 __ mfc1(t3, f7); | 382 __ mfc1(t3, f7); |
383 | 383 |
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
424 double b; | 424 double b; |
425 int i; | 425 int i; |
426 int j; | 426 int j; |
427 } T; | 427 } T; |
428 T t; | 428 T t; |
429 | 429 |
430 Assembler assm(Isolate::Current(), NULL, 0); | 430 Assembler assm(Isolate::Current(), NULL, 0); |
431 Label L, C; | 431 Label L, C; |
432 | 432 |
433 if (CpuFeatures::IsSupported(FPU)) { | 433 if (CpuFeatures::IsSupported(FPU)) { |
434 CpuFeatures::Scope scope(FPU); | 434 CpuFeatureScope scope(&assm, FPU); |
435 | 435 |
436 // Load all structure elements to registers. | 436 // Load all structure elements to registers. |
437 __ ldc1(f4, MemOperand(a0, OFFSET_OF(T, a)) ); | 437 __ ldc1(f4, MemOperand(a0, OFFSET_OF(T, a)) ); |
438 __ ldc1(f6, MemOperand(a0, OFFSET_OF(T, b)) ); | 438 __ ldc1(f6, MemOperand(a0, OFFSET_OF(T, b)) ); |
439 __ lw(t0, MemOperand(a0, OFFSET_OF(T, i)) ); | 439 __ lw(t0, MemOperand(a0, OFFSET_OF(T, i)) ); |
440 __ lw(t1, MemOperand(a0, OFFSET_OF(T, j)) ); | 440 __ lw(t1, MemOperand(a0, OFFSET_OF(T, j)) ); |
441 | 441 |
442 // Convert double in f4 to int in element i. | 442 // Convert double in f4 to int in element i. |
443 __ cvt_w_d(f8, f4); | 443 __ cvt_w_d(f8, f4); |
444 __ mfc1(t2, f8); | 444 __ mfc1(t2, f8); |
(...skipping 127 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
572 int32_t result; | 572 int32_t result; |
573 } T; | 573 } T; |
574 T t; | 574 T t; |
575 | 575 |
576 // Create a function that accepts &t, and loads, manipulates, and stores | 576 // Create a function that accepts &t, and loads, manipulates, and stores |
577 // the doubles t.a ... t.f. | 577 // the doubles t.a ... t.f. |
578 MacroAssembler assm(Isolate::Current(), NULL, 0); | 578 MacroAssembler assm(Isolate::Current(), NULL, 0); |
579 Label neither_is_nan, less_than, outa_here; | 579 Label neither_is_nan, less_than, outa_here; |
580 | 580 |
581 if (CpuFeatures::IsSupported(FPU)) { | 581 if (CpuFeatures::IsSupported(FPU)) { |
582 CpuFeatures::Scope scope(FPU); | 582 CpuFeatureScope scope(&assm, FPU); |
583 | 583 |
584 __ ldc1(f4, MemOperand(a0, OFFSET_OF(T, a)) ); | 584 __ ldc1(f4, MemOperand(a0, OFFSET_OF(T, a)) ); |
585 __ ldc1(f6, MemOperand(a0, OFFSET_OF(T, b)) ); | 585 __ ldc1(f6, MemOperand(a0, OFFSET_OF(T, b)) ); |
586 __ c(UN, D, f4, f6); | 586 __ c(UN, D, f4, f6); |
587 __ bc1f(&neither_is_nan); | 587 __ bc1f(&neither_is_nan); |
588 __ nop(); | 588 __ nop(); |
589 __ sw(zero_reg, MemOperand(a0, OFFSET_OF(T, result)) ); | 589 __ sw(zero_reg, MemOperand(a0, OFFSET_OF(T, result)) ); |
590 __ Branch(&outa_here); | 590 __ Branch(&outa_here); |
591 | 591 |
592 __ bind(&neither_is_nan); | 592 __ bind(&neither_is_nan); |
(...skipping 192 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
785 int32_t long_lo; | 785 int32_t long_lo; |
786 int32_t b_long_hi; | 786 int32_t b_long_hi; |
787 int32_t b_long_lo; | 787 int32_t b_long_lo; |
788 } T; | 788 } T; |
789 T t; | 789 T t; |
790 | 790 |
791 Assembler assm(Isolate::Current(), NULL, 0); | 791 Assembler assm(Isolate::Current(), NULL, 0); |
792 Label L, C; | 792 Label L, C; |
793 | 793 |
794 if (CpuFeatures::IsSupported(FPU) && kArchVariant == kMips32r2) { | 794 if (CpuFeatures::IsSupported(FPU) && kArchVariant == kMips32r2) { |
795 CpuFeatures::Scope scope(FPU); | 795 CpuFeatureScope scope(&assm, FPU); |
796 | 796 |
797 // Load all structure elements to registers. | 797 // Load all structure elements to registers. |
798 __ ldc1(f0, MemOperand(a0, OFFSET_OF(T, a))); | 798 __ ldc1(f0, MemOperand(a0, OFFSET_OF(T, a))); |
799 | 799 |
800 // Save the raw bits of the double. | 800 // Save the raw bits of the double. |
801 __ mfc1(t0, f0); | 801 __ mfc1(t0, f0); |
802 __ mfc1(t1, f1); | 802 __ mfc1(t1, f1); |
803 __ sw(t0, MemOperand(a0, OFFSET_OF(T, dbl_mant))); | 803 __ sw(t0, MemOperand(a0, OFFSET_OF(T, dbl_mant))); |
804 __ sw(t1, MemOperand(a0, OFFSET_OF(T, dbl_exp))); | 804 __ sw(t1, MemOperand(a0, OFFSET_OF(T, dbl_exp))); |
805 | 805 |
(...skipping 284 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1090 uint32_t trunc_big_out; | 1090 uint32_t trunc_big_out; |
1091 uint32_t trunc_small_out; | 1091 uint32_t trunc_small_out; |
1092 uint32_t cvt_big_in; | 1092 uint32_t cvt_big_in; |
1093 uint32_t cvt_small_in; | 1093 uint32_t cvt_small_in; |
1094 } T; | 1094 } T; |
1095 T t; | 1095 T t; |
1096 | 1096 |
1097 MacroAssembler assm(Isolate::Current(), NULL, 0); | 1097 MacroAssembler assm(Isolate::Current(), NULL, 0); |
1098 | 1098 |
1099 if (CpuFeatures::IsSupported(FPU)) { | 1099 if (CpuFeatures::IsSupported(FPU)) { |
1100 CpuFeatures::Scope scope(FPU); | 1100 CpuFeatureScope scope(&assm, FPU); |
1101 | 1101 |
1102 __ sw(t0, MemOperand(a0, OFFSET_OF(T, cvt_small_in))); | 1102 __ sw(t0, MemOperand(a0, OFFSET_OF(T, cvt_small_in))); |
1103 __ Cvt_d_uw(f10, t0, f22); | 1103 __ Cvt_d_uw(f10, t0, f22); |
1104 __ sdc1(f10, MemOperand(a0, OFFSET_OF(T, cvt_small_out))); | 1104 __ sdc1(f10, MemOperand(a0, OFFSET_OF(T, cvt_small_out))); |
1105 | 1105 |
1106 __ Trunc_uw_d(f10, f10, f22); | 1106 __ Trunc_uw_d(f10, f10, f22); |
1107 __ swc1(f10, MemOperand(a0, OFFSET_OF(T, trunc_small_out))); | 1107 __ swc1(f10, MemOperand(a0, OFFSET_OF(T, trunc_small_out))); |
1108 | 1108 |
1109 __ sw(t0, MemOperand(a0, OFFSET_OF(T, cvt_big_in))); | 1109 __ sw(t0, MemOperand(a0, OFFSET_OF(T, cvt_big_in))); |
1110 __ Cvt_d_uw(f8, t0, f22); | 1110 __ Cvt_d_uw(f8, t0, f22); |
(...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1173 ROUND_STRUCT_ELEMENT(trunc) | 1173 ROUND_STRUCT_ELEMENT(trunc) |
1174 ROUND_STRUCT_ELEMENT(cvt) | 1174 ROUND_STRUCT_ELEMENT(cvt) |
1175 } T; | 1175 } T; |
1176 T t; | 1176 T t; |
1177 | 1177 |
1178 #undef ROUND_STRUCT_ELEMENT | 1178 #undef ROUND_STRUCT_ELEMENT |
1179 | 1179 |
1180 MacroAssembler assm(Isolate::Current(), NULL, 0); | 1180 MacroAssembler assm(Isolate::Current(), NULL, 0); |
1181 | 1181 |
1182 if (CpuFeatures::IsSupported(FPU)) { | 1182 if (CpuFeatures::IsSupported(FPU)) { |
1183 CpuFeatures::Scope scope(FPU); | 1183 CpuFeatureScope scope(&assm, FPU); |
1184 | 1184 |
1185 // Save FCSR. | 1185 // Save FCSR. |
1186 __ cfc1(a1, FCSR); | 1186 __ cfc1(a1, FCSR); |
1187 // Disable FPU exceptions. | 1187 // Disable FPU exceptions. |
1188 __ ctc1(zero_reg, FCSR); | 1188 __ ctc1(zero_reg, FCSR); |
1189 #define RUN_ROUND_TEST(x) \ | 1189 #define RUN_ROUND_TEST(x) \ |
1190 __ ldc1(f0, MemOperand(a0, OFFSET_OF(T, round_up_in))); \ | 1190 __ ldc1(f0, MemOperand(a0, OFFSET_OF(T, round_up_in))); \ |
1191 __ x##_w_d(f0, f0); \ | 1191 __ x##_w_d(f0, f0); \ |
1192 __ swc1(f0, MemOperand(a0, OFFSET_OF(T, x##_up_out))); \ | 1192 __ swc1(f0, MemOperand(a0, OFFSET_OF(T, x##_up_out))); \ |
1193 \ | 1193 \ |
(...skipping 92 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1286 Label target; | 1286 Label target; |
1287 __ beq(v0, v1, &target); | 1287 __ beq(v0, v1, &target); |
1288 __ nop(); | 1288 __ nop(); |
1289 __ bne(v0, v1, &target); | 1289 __ bne(v0, v1, &target); |
1290 __ nop(); | 1290 __ nop(); |
1291 __ bind(&target); | 1291 __ bind(&target); |
1292 __ nop(); | 1292 __ nop(); |
1293 } | 1293 } |
1294 | 1294 |
1295 #undef __ | 1295 #undef __ |
OLD | NEW |