1*c9945492SAndroid Build Coastguard Worker #include "libm.h" 2*c9945492SAndroid Build Coastguard Worker 3*c9945492SAndroid Build Coastguard Worker #if LDBL_MANT_DIG == 53 && LDBL_MAX_EXP == 1024 truncl(long double x)4*c9945492SAndroid Build Coastguard Workerlong double truncl(long double x) 5*c9945492SAndroid Build Coastguard Worker { 6*c9945492SAndroid Build Coastguard Worker return trunc(x); 7*c9945492SAndroid Build Coastguard Worker } 8*c9945492SAndroid Build Coastguard Worker #elif (LDBL_MANT_DIG == 64 || LDBL_MANT_DIG == 113) && LDBL_MAX_EXP == 16384 9*c9945492SAndroid Build Coastguard Worker 10*c9945492SAndroid Build Coastguard Worker static const long double toint = 1/LDBL_EPSILON; 11*c9945492SAndroid Build Coastguard Worker truncl(long double x)12*c9945492SAndroid Build Coastguard Workerlong double truncl(long double x) 13*c9945492SAndroid Build Coastguard Worker { 14*c9945492SAndroid Build Coastguard Worker union ldshape u = {x}; 15*c9945492SAndroid Build Coastguard Worker int e = u.i.se & 0x7fff; 16*c9945492SAndroid Build Coastguard Worker int s = u.i.se >> 15; 17*c9945492SAndroid Build Coastguard Worker long double y; 18*c9945492SAndroid Build Coastguard Worker 19*c9945492SAndroid Build Coastguard Worker if (e >= 0x3fff+LDBL_MANT_DIG-1) 20*c9945492SAndroid Build Coastguard Worker return x; 21*c9945492SAndroid Build Coastguard Worker if (e <= 0x3fff-1) { 22*c9945492SAndroid Build Coastguard Worker FORCE_EVAL(x + 0x1p120f); 23*c9945492SAndroid Build Coastguard Worker return x*0; 24*c9945492SAndroid Build Coastguard Worker } 25*c9945492SAndroid Build Coastguard Worker /* y = int(|x|) - |x|, where int(|x|) is an integer neighbor of |x| */ 26*c9945492SAndroid Build Coastguard Worker if (s) 27*c9945492SAndroid Build Coastguard Worker x = -x; 28*c9945492SAndroid Build Coastguard Worker y = x + toint - toint - x; 29*c9945492SAndroid Build Coastguard Worker if (y > 0) 30*c9945492SAndroid Build Coastguard Worker y -= 1; 31*c9945492SAndroid Build Coastguard Worker x += y; 32*c9945492SAndroid Build Coastguard Worker return s ? -x : x; 33*c9945492SAndroid Build Coastguard Worker } 34*c9945492SAndroid Build Coastguard Worker #endif 35