зеркало из https://github.com/mozilla/gecko-dev.git
Bug 531915 - part 4 - rem pio2 fixups r=arai
Differential Revision: https://phabricator.services.mozilla.com/D119424
This commit is contained in:
Родитель
6ce4ce9c3b
Коммит
3fe5fa4059
|
@ -0,0 +1,111 @@
|
|||
diff --git a/modules/fdlibm/src/e_rem_pio2.cpp b/modules/fdlibm/src/e_rem_pio2.cpp
|
||||
--- a/modules/fdlibm/src/e_rem_pio2.cpp
|
||||
+++ b/modules/fdlibm/src/e_rem_pio2.cpp
|
||||
@@ -43,17 +43,17 @@ invpio2 = 6.36619772367581382433e-01, /
|
||||
pio2_1 = 1.57079632673412561417e+00, /* 0x3FF921FB, 0x54400000 */
|
||||
pio2_1t = 6.07710050650619224932e-11, /* 0x3DD0B461, 0x1A626331 */
|
||||
pio2_2 = 6.07710050630396597660e-11, /* 0x3DD0B461, 0x1A600000 */
|
||||
pio2_2t = 2.02226624879595063154e-21, /* 0x3BA3198A, 0x2E037073 */
|
||||
pio2_3 = 2.02226624871116645580e-21, /* 0x3BA3198A, 0x2E000000 */
|
||||
pio2_3t = 8.47842766036889956997e-32; /* 0x397B839A, 0x252049C1 */
|
||||
|
||||
#ifdef INLINE_REM_PIO2
|
||||
-static __inline __always_inline
|
||||
+static inline
|
||||
#endif
|
||||
int
|
||||
__ieee754_rem_pio2(double x, double *y)
|
||||
{
|
||||
double z,w,t,r,fn;
|
||||
double tx[3],ty[2];
|
||||
int32_t e0,i,j,nx,n,ix,hx;
|
||||
u_int32_t low;
|
||||
diff --git a/modules/fdlibm/src/s_cos.cpp b/modules/fdlibm/src/s_cos.cpp
|
||||
--- a/modules/fdlibm/src/s_cos.cpp
|
||||
+++ b/modules/fdlibm/src/s_cos.cpp
|
||||
@@ -43,17 +43,17 @@
|
||||
* Accuracy:
|
||||
* TRIG(x) returns trig(x) nearly rounded
|
||||
*/
|
||||
|
||||
#include <float.h>
|
||||
|
||||
#define INLINE_REM_PIO2
|
||||
#include "math_private.h"
|
||||
-#include "e_rem_pio2.c"
|
||||
+#include "e_rem_pio2.cpp"
|
||||
|
||||
double
|
||||
cos(double x)
|
||||
{
|
||||
double y[2],z=0.0;
|
||||
int32_t n, ix;
|
||||
|
||||
/* High word of x. */
|
||||
diff --git a/modules/fdlibm/src/s_sin.cpp b/modules/fdlibm/src/s_sin.cpp
|
||||
--- a/modules/fdlibm/src/s_sin.cpp
|
||||
+++ b/modules/fdlibm/src/s_sin.cpp
|
||||
@@ -43,17 +43,17 @@
|
||||
* Accuracy:
|
||||
* TRIG(x) returns trig(x) nearly rounded
|
||||
*/
|
||||
|
||||
#include <float.h>
|
||||
|
||||
#define INLINE_REM_PIO2
|
||||
#include "math_private.h"
|
||||
-#include "e_rem_pio2.c"
|
||||
+#include "e_rem_pio2.cpp"
|
||||
|
||||
double
|
||||
sin(double x)
|
||||
{
|
||||
double y[2],z=0.0;
|
||||
int32_t n, ix;
|
||||
|
||||
/* High word of x. */
|
||||
diff --git a/modules/fdlibm/src/s_tan.cpp b/modules/fdlibm/src/s_tan.cpp
|
||||
--- a/modules/fdlibm/src/s_tan.cpp
|
||||
+++ b/modules/fdlibm/src/s_tan.cpp
|
||||
@@ -42,17 +42,17 @@
|
||||
* Accuracy:
|
||||
* TRIG(x) returns trig(x) nearly rounded
|
||||
*/
|
||||
|
||||
#include <float.h>
|
||||
|
||||
#define INLINE_REM_PIO2
|
||||
#include "math_private.h"
|
||||
-#include "e_rem_pio2.c"
|
||||
+#include "e_rem_pio2.cpp"
|
||||
|
||||
double
|
||||
tan(double x)
|
||||
{
|
||||
double y[2],z=0.0;
|
||||
int32_t n, ix;
|
||||
|
||||
/* High word of x. */
|
||||
diff --git a/modules/fdlibm/src/k_rem_pio2.cpp b/modules/fdlibm/src/k_rem_pio2.cpp
|
||||
--- a/modules/fdlibm/src/k_rem_pio2.cpp
|
||||
+++ b/modules/fdlibm/src/k_rem_pio2.cpp
|
||||
@@ -305,17 +305,18 @@ __kernel_rem_pio2(double *x, double *y, int e0, int nx, int prec)
|
||||
q0 = e0-24*(jv+1);
|
||||
|
||||
/* set up f[0] to f[jx+jk] where f[jx+jk] = ipio2[jv+jk] */
|
||||
j = jv-jx; m = jx+jk;
|
||||
for(i=0;i<=m;i++,j++) f[i] = (j<0)? zero : (double) ipio2[j];
|
||||
|
||||
/* compute q[0],q[1],...q[jk] */
|
||||
for (i=0;i<=jk;i++) {
|
||||
- for(j=0,fw=0.0;j<=jx;j++) fw += x[j]*f[jx+i-j]; q[i] = fw;
|
||||
+ for(j=0,fw=0.0;j<=jx;j++) fw += x[j]*f[jx+i-j];
|
||||
+ q[i] = fw;
|
||||
}
|
||||
|
||||
jz = jk;
|
||||
recompute:
|
||||
/* distill q[] into iq[] reversingly */
|
||||
for(i=0,j=jz,z=q[jz];j>0;i++,j--) {
|
||||
fw = (double)((int32_t)(twon24* z));
|
||||
iq[i] = (int32_t)(z-two24*fw);
|
|
@ -48,7 +48,7 @@ pio2_3 = 2.02226624871116645580e-21, /* 0x3BA3198A, 0x2E000000 */
|
|||
pio2_3t = 8.47842766036889956997e-32; /* 0x397B839A, 0x252049C1 */
|
||||
|
||||
#ifdef INLINE_REM_PIO2
|
||||
static __inline __always_inline
|
||||
static inline
|
||||
#endif
|
||||
int
|
||||
__ieee754_rem_pio2(double x, double *y)
|
||||
|
|
|
@ -310,7 +310,8 @@ __kernel_rem_pio2(double *x, double *y, int e0, int nx, int prec)
|
|||
|
||||
/* compute q[0],q[1],...q[jk] */
|
||||
for (i=0;i<=jk;i++) {
|
||||
for(j=0,fw=0.0;j<=jx;j++) fw += x[j]*f[jx+i-j]; q[i] = fw;
|
||||
for(j=0,fw=0.0;j<=jx;j++) fw += x[j]*f[jx+i-j];
|
||||
q[i] = fw;
|
||||
}
|
||||
|
||||
jz = jk;
|
||||
|
|
|
@ -48,7 +48,7 @@
|
|||
|
||||
#define INLINE_REM_PIO2
|
||||
#include "math_private.h"
|
||||
#include "e_rem_pio2.c"
|
||||
#include "e_rem_pio2.cpp"
|
||||
|
||||
double
|
||||
cos(double x)
|
||||
|
|
|
@ -48,7 +48,7 @@
|
|||
|
||||
#define INLINE_REM_PIO2
|
||||
#include "math_private.h"
|
||||
#include "e_rem_pio2.c"
|
||||
#include "e_rem_pio2.cpp"
|
||||
|
||||
double
|
||||
sin(double x)
|
||||
|
|
|
@ -47,7 +47,7 @@
|
|||
|
||||
#define INLINE_REM_PIO2
|
||||
#include "math_private.h"
|
||||
#include "e_rem_pio2.c"
|
||||
#include "e_rem_pio2.cpp"
|
||||
|
||||
double
|
||||
tan(double x)
|
||||
|
|
Загрузка…
Ссылка в новой задаче