dp_fint.c (820B)
1// SPDX-License-Identifier: GPL-2.0-only 2/* IEEE754 floating point arithmetic 3 * double precision: common utilities 4 */ 5/* 6 * MIPS floating point support 7 * Copyright (C) 1994-2000 Algorithmics Ltd. 8 */ 9 10#include "ieee754dp.h" 11 12union ieee754dp ieee754dp_fint(int x) 13{ 14 u64 xm; 15 int xe; 16 int xs; 17 18 ieee754_clearcx(); 19 20 if (x == 0) 21 return ieee754dp_zero(0); 22 if (x == 1 || x == -1) 23 return ieee754dp_one(x < 0); 24 if (x == 10 || x == -10) 25 return ieee754dp_ten(x < 0); 26 27 xs = (x < 0); 28 if (xs) { 29 if (x == (1 << 31)) 30 xm = ((unsigned) 1 << 31); /* max neg can't be safely negated */ 31 else 32 xm = -x; 33 } else { 34 xm = x; 35 } 36 37 /* normalize - result can never be inexact or overflow */ 38 xe = DP_FBITS; 39 while ((xm >> DP_FBITS) == 0) { 40 xm <<= 1; 41 xe--; 42 } 43 return builddp(xs, xe + DP_EBIAS, xm & ~DP_HIDDEN_BIT); 44}