Skip to content

Commit

Permalink
src: disable fast math on arm
Browse files Browse the repository at this point in the history
The "fast" implementation of Math.exp() and Math.tanh() emits ARMv7
movt/movw instructions on ARMv6 (notably, the original Raspberry Pi.)

Disable fast math for now.  The adventurous can enable it again with
the --fast_math switch.

PR-URL: nodejs#1398
Refs: nodejs#1376
Reviewed-By: Roman Reiss <[email protected]>
V8-Bug: https://code.google.com/p/v8/issues/detail?id=4019
  • Loading branch information
bnoordhuis committed Apr 11, 2015
1 parent cd38a4a commit e306c78
Show file tree
Hide file tree
Showing 2 changed files with 38 additions and 0 deletions.
8 changes: 8 additions & 0 deletions src/node.cc
Original file line number Diff line number Diff line change
Expand Up @@ -3541,6 +3541,14 @@ void Init(int* argc,
DispatchDebugMessagesAsyncCallback);
uv_unref(reinterpret_cast<uv_handle_t*>(&dispatch_debug_messages_async));

#if defined(__arm__)
// See https://github.com/iojs/io.js/issues/1376
// and https://code.google.com/p/v8/issues/detail?id=4019
// TODO(bnoordhuis): Remove test/parallel/test-arm-math-exp-regress-1376.js
// and this workaround when v8:4019 has been fixed and the patch back-ported.
V8::SetFlagsFromString("--nofast_math", sizeof("--nofast_math") - 1);
#endif

#if defined(NODE_V8_OPTIONS)
// Should come before the call to V8::SetFlagsFromCommandLine()
// so the user can disable a flag --foo at run-time by passing
Expand Down
30 changes: 30 additions & 0 deletions test/parallel/test-arm-math-exp-regress-1376.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
// See https://github.com/iojs/io.js/issues/1376
// and https://code.google.com/p/v8/issues/detail?id=4019

Math.abs(-0.5);
Math.acos(-0.5);
Math.acosh(-0.5);
Math.asin(-0.5);
Math.asinh(-0.5);
Math.atan(-0.5);
Math.atanh(-0.5);
Math.cbrt(-0.5);
Math.ceil(-0.5);
Math.cos(-0.5);
Math.cosh(-0.5);
Math.exp(-0.5);
Math.expm1(-0.5);
Math.floor(-0.5);
Math.fround(-0.5);
Math.log(-0.5);
Math.log10(-0.5);
Math.log1p(-0.5);
Math.log2(-0.5);
Math.round(-0.5);
Math.sign(-0.5);
Math.sin(-0.5);
Math.sinh(-0.5);
Math.sqrt(-0.5);
Math.tan(-0.5);
Math.tanh(-0.5);
Math.trunc(-0.5);

0 comments on commit e306c78

Please sign in to comment.