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 scalbnl(long double x,int n)4*c9945492SAndroid Build Coastguard Workerlong double scalbnl(long double x, int n) 5*c9945492SAndroid Build Coastguard Worker { 6*c9945492SAndroid Build Coastguard Worker return scalbn(x, n); 7*c9945492SAndroid Build Coastguard Worker } 8*c9945492SAndroid Build Coastguard Worker #elif (LDBL_MANT_DIG == 64 || LDBL_MANT_DIG == 113) && LDBL_MAX_EXP == 16384 scalbnl(long double x,int n)9*c9945492SAndroid Build Coastguard Workerlong double scalbnl(long double x, int n) 10*c9945492SAndroid Build Coastguard Worker { 11*c9945492SAndroid Build Coastguard Worker union ldshape u; 12*c9945492SAndroid Build Coastguard Worker 13*c9945492SAndroid Build Coastguard Worker if (n > 16383) { 14*c9945492SAndroid Build Coastguard Worker x *= 0x1p16383L; 15*c9945492SAndroid Build Coastguard Worker n -= 16383; 16*c9945492SAndroid Build Coastguard Worker if (n > 16383) { 17*c9945492SAndroid Build Coastguard Worker x *= 0x1p16383L; 18*c9945492SAndroid Build Coastguard Worker n -= 16383; 19*c9945492SAndroid Build Coastguard Worker if (n > 16383) 20*c9945492SAndroid Build Coastguard Worker n = 16383; 21*c9945492SAndroid Build Coastguard Worker } 22*c9945492SAndroid Build Coastguard Worker } else if (n < -16382) { 23*c9945492SAndroid Build Coastguard Worker x *= 0x1p-16382L * 0x1p113L; 24*c9945492SAndroid Build Coastguard Worker n += 16382 - 113; 25*c9945492SAndroid Build Coastguard Worker if (n < -16382) { 26*c9945492SAndroid Build Coastguard Worker x *= 0x1p-16382L * 0x1p113L; 27*c9945492SAndroid Build Coastguard Worker n += 16382 - 113; 28*c9945492SAndroid Build Coastguard Worker if (n < -16382) 29*c9945492SAndroid Build Coastguard Worker n = -16382; 30*c9945492SAndroid Build Coastguard Worker } 31*c9945492SAndroid Build Coastguard Worker } 32*c9945492SAndroid Build Coastguard Worker u.f = 1.0; 33*c9945492SAndroid Build Coastguard Worker u.i.se = 0x3fff + n; 34*c9945492SAndroid Build Coastguard Worker return x * u.f; 35*c9945492SAndroid Build Coastguard Worker } 36*c9945492SAndroid Build Coastguard Worker #endif 37