double cosine_kernel(double x, double y) { double a, hz, z, r, qx; int ix; ix = __JHI(x) & 0x7fffffff; /* ix = |x|'s high word*/ if (ix < 0x3e400000) { /* if x < 2**27 */ if (jvm_d2i(x) == 0 ) { return one_c; /* generate inexact */ } } z = jvm_dmul(x, x); r = jvm_dmul(z, jvm_dadd(C1, jvm_dmul(z, jvm_dadd(C2, jvm_dmul(z, jvm_dadd(C3, jvm_dmul(z, jvm_dadd(C4, jvm_dmul(z, jvm_dadd(C5, jvm_dmul(z,C6))))))))))); if (ix < 0x3FD33333) { /* if |x| < 0.3 */ return jvm_dsub(one_c, jvm_dsub(jvm_dmul(0.5,z), jvm_dsub(jvm_dmul(z,r), jvm_dmul(x,y)))); } else { if(ix > 0x3fe90000) { /* x > 0.78125 */ qx = 0.28125; } else { qx = jdouble_from_msw_lsw(ix - 0x00200000 /* x/4 */, 0); } hz = jvm_dsub(jvm_dmul(0.5, z), qx); a = jvm_dsub(one_c, qx); return jvm_dsub(a, jvm_dsub(hz, jvm_dsub(jvm_dmul(z, r), jvm_dmul(x, y)))); } }
JVM_SOFTFP_LINKAGE jdouble jvm_double_from_msw_lsw(jint msw, jint lsw) { return jdouble_from_msw_lsw(msw, lsw); }