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

Side by Side Diff: src/arm/simulator-arm.cc

Issue 703893002: Don't use C++11's std::trunc and std::round, use the traditional C functions. (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: Created 6 years, 1 month 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 | « no previous file | no next file » | 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 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include <stdarg.h> 5 #include <stdarg.h>
6 #include <stdlib.h> 6 #include <stdlib.h>
7 #include <cmath> 7 #include <cmath>
8 8
9 #include "src/v8.h" 9 #include "src/v8.h"
10 10
(...skipping 2942 matching lines...) Expand 10 before | Expand all | Expand 10 after
2953 } else if (instr->Opc3Value() == 0x0) { 2953 } else if (instr->Opc3Value() == 0x0) {
2954 // vmov immediate. 2954 // vmov immediate.
2955 if (instr->SzValue() == 0x1) { 2955 if (instr->SzValue() == 0x1) {
2956 set_d_register_from_double(vd, instr->DoubleImmedVmov()); 2956 set_d_register_from_double(vd, instr->DoubleImmedVmov());
2957 } else { 2957 } else {
2958 UNREACHABLE(); // Not used by v8. 2958 UNREACHABLE(); // Not used by v8.
2959 } 2959 }
2960 } else if (((instr->Opc2Value() == 0x6)) && (instr->Opc3Value() == 0x3)) { 2960 } else if (((instr->Opc2Value() == 0x6)) && (instr->Opc3Value() == 0x3)) {
2961 // vrintz - truncate 2961 // vrintz - truncate
2962 double dm_value = get_double_from_d_register(vm); 2962 double dm_value = get_double_from_d_register(vm);
2963 double dd_value = std::trunc(dm_value); 2963 double dd_value = trunc(dm_value);
2964 dd_value = canonicalizeNaN(dd_value); 2964 dd_value = canonicalizeNaN(dd_value);
2965 set_d_register_from_double(vd, dd_value); 2965 set_d_register_from_double(vd, dd_value);
2966 } else { 2966 } else {
2967 UNREACHABLE(); // Not used by V8. 2967 UNREACHABLE(); // Not used by V8.
2968 } 2968 }
2969 } else if (instr->Opc1Value() == 0x3) { 2969 } else if (instr->Opc1Value() == 0x3) {
2970 if (instr->SzValue() != 0x1) { 2970 if (instr->SzValue() != 0x1) {
2971 UNREACHABLE(); // Not used by V8. 2971 UNREACHABLE(); // Not used by V8.
2972 } 2972 }
2973 2973
(...skipping 643 matching lines...) Expand 10 before | Expand all | Expand 10 after
3617 if (instr->Opc1Value() == 0x7 && instr->Opc3Value() == 0x1 && 3617 if (instr->Opc1Value() == 0x7 && instr->Opc3Value() == 0x1 &&
3618 instr->Bits(11, 9) == 0x5 && instr->Bits(19, 18) == 0x2 && 3618 instr->Bits(11, 9) == 0x5 && instr->Bits(19, 18) == 0x2 &&
3619 instr->Bit(8) == 0x1) { 3619 instr->Bit(8) == 0x1) {
3620 int vm = instr->VFPMRegValue(kDoublePrecision); 3620 int vm = instr->VFPMRegValue(kDoublePrecision);
3621 int vd = instr->VFPDRegValue(kDoublePrecision); 3621 int vd = instr->VFPDRegValue(kDoublePrecision);
3622 double dm_value = get_double_from_d_register(vm); 3622 double dm_value = get_double_from_d_register(vm);
3623 double dd_value = 0.0; 3623 double dd_value = 0.0;
3624 int rounding_mode = instr->Bits(17, 16); 3624 int rounding_mode = instr->Bits(17, 16);
3625 switch (rounding_mode) { 3625 switch (rounding_mode) {
3626 case 0x0: // vrinta - round with ties to away from zero 3626 case 0x0: // vrinta - round with ties to away from zero
3627 dd_value = std::round(dm_value); 3627 dd_value = round(dm_value);
3628 break; 3628 break;
3629 case 0x1: { // vrintn - round with ties to even 3629 case 0x1: { // vrintn - round with ties to even
3630 dd_value = std::floor(dm_value); 3630 dd_value = std::floor(dm_value);
3631 double error = dm_value - dd_value; 3631 double error = dm_value - dd_value;
3632 // Take care of correctly handling the range [-0.5, -0.0], which 3632 // Take care of correctly handling the range [-0.5, -0.0], which
3633 // must yield -0.0. 3633 // must yield -0.0.
3634 if ((-0.5 <= dm_value) && (dm_value < 0.0)) { 3634 if ((-0.5 <= dm_value) && (dm_value < 0.0)) {
3635 dd_value = -0.0; 3635 dd_value = -0.0;
3636 // If the error is greater than 0.5, or is equal to 0.5 and the 3636 // If the error is greater than 0.5, or is equal to 0.5 and the
3637 // integer result is odd, round up. 3637 // integer result is odd, round up.
(...skipping 262 matching lines...) Expand 10 before | Expand all | Expand 10 after
3900 uintptr_t address = *stack_slot; 3900 uintptr_t address = *stack_slot;
3901 set_register(sp, current_sp + sizeof(uintptr_t)); 3901 set_register(sp, current_sp + sizeof(uintptr_t));
3902 return address; 3902 return address;
3903 } 3903 }
3904 3904
3905 } } // namespace v8::internal 3905 } } // namespace v8::internal
3906 3906
3907 #endif // USE_SIMULATOR 3907 #endif // USE_SIMULATOR
3908 3908
3909 #endif // V8_TARGET_ARCH_ARM 3909 #endif // V8_TARGET_ARCH_ARM
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698