diff options
| author | Tue Ly <lntue@google.com> | 2023-02-01 14:25:25 -0500 |
|---|---|---|
| committer | Tue Ly <lntue@google.com> | 2023-02-01 15:53:38 -0500 |
| commit | 135cea495bc1f13a3f6538ccbd8db723e35cbb9d (patch) | |
| tree | 62bdd32cb245bc9e79a95d2bd0019082200b26b7 /libc/src/math/generic/tanf.cpp | |
| parent | 05e62db29337fe17cf7983ceb999761bcb52148a (diff) | |
[libc][math] Fix setting exceptional value for tanf to work with gcc.
See https://github.com/llvm/llvm-project/issues/59866
Reviewed By: sivachandra
Differential Revision: https://reviews.llvm.org/D143098
Diffstat (limited to 'libc/src/math/generic/tanf.cpp')
| -rw-r--r-- | libc/src/math/generic/tanf.cpp | 7 |
1 files changed, 6 insertions, 1 deletions
diff --git a/libc/src/math/generic/tanf.cpp b/libc/src/math/generic/tanf.cpp index 8b720c48e5de..0f3961ee5422 100644 --- a/libc/src/math/generic/tanf.cpp +++ b/libc/src/math/generic/tanf.cpp @@ -97,7 +97,12 @@ LLVM_LIBC_FUNCTION(float, tanf, (float x)) { // |x| = 0x1.143ec4p0 float sign = x_sign ? -1.0f : 1.0f; - return fputil::multiply_add(sign, 0x1.ddf9f4p0f, sign * 0x1.1p-24f); + // volatile is used to prevent compiler (gcc) from optimizing the + // computation, making the results incorrect in different rounding modes. + volatile float tmp = 0x1.ddf9f4p0f; + tmp = fputil::multiply_add(sign, tmp, sign * 0x1.1p-24f); + + return tmp; } // |x| > 0x1.ada6a8p+27f |
