Lines Matching refs:pu

60 round(pu)
61 unpacked *pu;
68 sr = pu->sticky|pu->rounded;
75 increment = pu->rounded;
81 increment = (pu->sign == 0) & (sr != 0);
84 increment = (pu->sign != 0) & (sr != 0);
88 pu->significand[3]++;
89 if (pu->significand[3] == 0) {
90 pu->significand[2]++;
91 if (pu->significand[2] == 0) {
92 pu->significand[1]++;
93 if (pu->significand[1] == 0) {
94 pu->significand[0]++; /* rounding carried out */
95 if( pu->significand[0] == 0x20000) {
96 pu->exponent++;
97 pu->significand[0] = 0x10000;
104 (pu->sticky == 0) && increment!=0) { /* ambiguous case */
105 pu->significand[3] &= 0xfffffffe; /* force round to even */
110 packinteger(pu, px)
111 unpacked *pu; /* unpacked result */
114 switch (pu->fpclass) {
119 if (pu->exponent >= 32)
121 fpu_rightshift(pu, 112 - pu->exponent);
122 round(pu);
123 if (pu->significand[3] >= 0x80000000)
124 if ((pu->sign == 0)||(pu->significand[3] > 0x80000000))
126 *px = pu->significand[3];
127 if (pu->sign)
134 if (pu->sign)
145 packsingle(pu, px)
146 unpacked *pu; /* unpacked result */
149 px->sign = pu->sign;
150 switch (pu->fpclass) {
162 fpu_rightshift(pu, 113-24);
164 px->significand = 0x400000|(0x3fffff&pu->significand[3]);
167 fpu_rightshift(pu, 113-24);
168 pu->exponent += SINGLE_BIAS;
169 if (pu->exponent <= 0) {
171 fpu_rightshift(pu, 1 - pu->exponent);
172 round(pu);
173 if (pu->significand[3] == 0x800000) { /* rounded
182 px->significand = 0x7fffff & pu->significand[3];
185 round(pu);
186 if (pu->significand[3] == 0x1000000) { /* rounding overflow */
187 pu->significand[3] = 0x800000;
188 pu->exponent += 1;
190 if (pu->exponent >= 0xff) {
193 if (overflow_to_infinity(pu->sign))
199 px->exponent = pu->exponent;
200 px->significand = 0x7fffff & pu->significand[3];
205 packdouble(pu, px, py)
206 unpacked *pu; /* unpacked result */
210 px->sign = pu->sign;
211 switch (pu->fpclass) {
225 fpu_rightshift(pu, 113-53);
227 px->significand = 0x80000 | (0x7ffff & pu->significand[2]);
228 *py = pu->significand[3];
231 fpu_rightshift(pu, 113-53);
232 pu->exponent += DOUBLE_BIAS;
233 if (pu->exponent <= 0) { /* underflow */
235 fpu_rightshift(pu, 1 - pu->exponent);
236 round(pu);
237 if (pu->significand[2] == 0x100000) { /* rounded
248 px->significand = 0xfffff & pu->significand[2];
249 *py = pu->significand[3];
252 round(pu);
253 if (pu->significand[2] == 0x200000) { /* rounding overflow */
254 pu->significand[2] = 0x100000;
255 pu->exponent += 1;
257 if (pu->exponent >= 0x7ff) { /* overflow */
260 if (overflow_to_infinity(pu->sign))
267 px->exponent = pu->exponent;
268 px->significand = 0xfffff & pu->significand[2];
269 *py = pu->significand[3];
275 packextended(pu, px, py, pz, pw)
276 unpacked *pu; /* unpacked result */
280 px->sign = pu->sign;
281 switch (pu->fpclass) {
300 px->significand = 0x8000 | pu->significand[0]; /* Insure quiet
302 *py = pu->significand[1];
303 *pz = pu->significand[2];
304 *pw = pu->significand[3];
307 pu->exponent += EXTENDED_BIAS;
308 if (pu->exponent <= 0) { /* underflow */
309 fpu_rightshift(pu, 1-pu->exponent);
310 round(pu);
311 if (pu->significand[0] < 0x00010000) { /* not rounded
319 px->significand = pu->significand[0];
320 *py = pu->significand[1];
321 *pz = pu->significand[2];
322 *pw = pu->significand[3];
325 round(pu); /* rounding overflow handled in round() */
326 if (pu->exponent >= 0x7fff) { /* overflow */
329 if (overflow_to_infinity(pu->sign))
338 px->exponent = pu->exponent;
339 px->significand = pu->significand[0];
340 *py = pu->significand[1];
341 *pz = pu->significand[2];
342 *pw = pu->significand[3];
348 _fp_pack(pu, n, type)
349 unpacked *pu; /* unpacked operand */
357 packinteger(pu, n);
363 packsingle(pu, &x);
373 packdouble(pu, &x,&n[i1]);
388 packsingle(pu, &tx);
389 pu = &u;
390 unpacksingle(pu, tx);
397 packdouble(pu, &tx, &ty);
398 pu = &u;
399 unpackdouble(pu, tx, ty);
404 k = pu->exponent+ EXTENDED_BIAS;
407 fpu_rightshift(pu,113-64);
408 round(pu);
409 pu->sticky=pu->rounded=0;
410 pu->exponent += k;
411 fpu_normalize(pu);
420 packextended(pu, &x, &n[i1], &n[i2], &n[i3]);