Lines Matching refs:xm
56 static unsigned int ieee754sp_get_rounding(int sn, unsigned int xm)
60 if (xm & (SP_MBIT(3) - 1)) {
65 xm += 0x3 + ((xm >> 3) & 1);
66 /* xm += (xm&0x8)?0x4:0x3 */
70 xm += 0x8;
74 xm += 0x8;
78 return xm;
85 * xm is 3bit extended precision value.
87 union ieee754sp ieee754sp_format(int sn, int xe, unsigned int xm)
89 assert(xm); /* we don't gen exact zeros (probably should) */
91 assert((xm >> (SP_FBITS + 1 + 3)) == 0); /* no excess */
92 assert(xm & (SP_HIDDEN_BIT << 3));
120 ieee754sp_get_rounding(sn, xm) >> (SP_FBITS + 1 + 3))
124 xm = ieee754sp_get_rounding(sn, xm);
125 xm >>= 1;
127 xm &= ~(SP_MBIT(3) - 1);
132 xm = XSPSRS(xm, es);
134 assert((xm & (SP_HIDDEN_BIT << 3)) == 0);
138 if (xm & (SP_MBIT(3) - 1)) {
140 if ((xm & (SP_HIDDEN_BIT << 3)) == 0) {
146 xm = ieee754sp_get_rounding(sn, xm);
149 if (xm >> (SP_FBITS + 1 + 3)) {
151 xm >>= 1;
156 xm >>= 3;
158 assert((xm >> (SP_FBITS + 1)) == 0); /* no excess */
184 if ((xm & SP_HIDDEN_BIT) == 0) {
189 return buildsp(sn, SP_EMIN - 1 + SP_EBIAS, xm);
191 assert((xm >> (SP_FBITS + 1)) == 0); /* no excess */
192 assert(xm & SP_HIDDEN_BIT);
194 return buildsp(sn, xe + SP_EBIAS, xm & ~SP_HIDDEN_BIT);