| Index: build/toolchain.gypi
|
| diff --git a/build/toolchain.gypi b/build/toolchain.gypi
|
| index ee8efe13c4c0f8d960b8e39e354445bfd059c099..56b2e338eed352f3b2a95c408ad7fdfdb39653bf 100644
|
| --- a/build/toolchain.gypi
|
| +++ b/build/toolchain.gypi
|
| @@ -811,6 +811,45 @@
|
| }],
|
| ['(OS=="linux" or OS=="freebsd" or OS=="openbsd" or OS=="solaris" \
|
| or OS=="netbsd" or OS=="mac" or OS=="android" or OS=="qnx") and \
|
| + v8_target_arch=="ia32"', {
|
| + # All floating-point computations on x87 happens in 80-bit
|
| + # precision. Because the C and C++ language standards allow
|
| + # the compiler to keep the floating-point values in higher
|
| + # precision than what's specified in the source and doing so
|
| + # is more efficient than constantly rounding up to 64-bit or
|
| + # 32-bit precision as specified in the source, the compiler,
|
| + # especially in the optimized mode, tries very hard to keep
|
| + # values in x87 floating-point stack (in 80-bit precision)
|
| + # as long as possible. This has important side effects, that
|
| + # the real value used in computation may change depending on
|
| + # how the compiler did the optimization - that is, the value
|
| + # kept in 80-bit is different than the value rounded down to
|
| + # 64-bit or 32-bit. There are possible compiler options to
|
| + # make this behavior consistent (e.g. -ffloat-store would keep
|
| + # all floating-values in the memory, thus force them to be
|
| + # rounded to its original precision) but they have significant
|
| + # runtime performance penalty.
|
| + #
|
| + # -mfpmath=sse -msse2 makes the compiler use SSE instructions
|
| + # which keep floating-point values in SSE registers in its
|
| + # native precision (32-bit for single precision, and 64-bit
|
| + # for double precision values). This means the floating-point
|
| + # value used during computation does not change depending on
|
| + # how the compiler optimized the code, since the value is
|
| + # always kept in its specified precision.
|
| + #
|
| + # Refer to http://crbug.com/348761 for rationale behind SSE2
|
| + # being a minimum requirement for 32-bit Linux builds and
|
| + # http://crbug.com/313032 for an example where this has "bit"
|
| + # us in the past.
|
| + 'cflags': [
|
| + '-msse2',
|
| + '-mfpmath=sse',
|
| + '-mmmx', # Allows mmintrin.h for MMX intrinsics.
|
| + ],
|
| + }],
|
| + ['(OS=="linux" or OS=="freebsd" or OS=="openbsd" or OS=="solaris" \
|
| + or OS=="netbsd" or OS=="mac" or OS=="android" or OS=="qnx") and \
|
| (v8_target_arch=="arm" or v8_target_arch=="ia32" or \
|
| v8_target_arch=="x87" or v8_target_arch=="mips" or \
|
| v8_target_arch=="mipsel" or v8_target_arch=="ppc")', {
|
|
|