Lines Matching +full:3 +full:x

28 #define _FP_FRAC_DECL_4(X)	_FP_W_TYPE X##_f[4]  argument
31 D##_f[2] = S##_f[2], D##_f[3] = S##_f[3])
32 #define _FP_FRAC_SET_4(X,I) __FP_FRAC_SET_4(X, I) argument
33 #define _FP_FRAC_HIGH_4(X) (X##_f[3]) argument
34 #define _FP_FRAC_LOW_4(X) (X##_f[0]) argument
35 #define _FP_FRAC_WORD_4(X,w) (X##_f[w]) argument
37 #define _FP_FRAC_SLL_4(X,N) \ argument
44 for (_i = 3; _i >= _skip; --_i) \
45 X##_f[_i] = X##_f[_i-_skip]; \
48 for (_i = 3; _i > _skip; --_i) \
49 X##_f[_i] = X##_f[_i-_skip] << _up \
50 | X##_f[_i-_skip-1] >> _down; \
51 X##_f[_i--] = X##_f[0] << _up; \
54 X##_f[_i] = 0; \
58 #define _FP_FRAC_SRL_4(X,N) \ argument
65 for (_i = 0; _i <= 3-_skip; ++_i) \
66 X##_f[_i] = X##_f[_i+_skip]; \
69 for (_i = 0; _i < 3-_skip; ++_i) \
70 X##_f[_i] = X##_f[_i+_skip] >> _down \
71 | X##_f[_i+_skip+1] << _up; \
72 X##_f[_i++] = X##_f[3] >> _down; \
75 X##_f[_i] = 0; \
84 #define _FP_FRAC_SRS_4(X,N,size) \ argument
92 _s |= X##_f[_i]; \
93 _s |= X##_f[_i] << _up; \
96 for (_i = 0; _i <= 3-_skip; ++_i) \
97 X##_f[_i] = X##_f[_i+_skip]; \
100 for (_i = 0; _i < 3-_skip; ++_i) \
101 X##_f[_i] = X##_f[_i+_skip] >> _down \
102 | X##_f[_i+_skip+1] << _up; \
103 X##_f[_i++] = X##_f[3] >> _down; \
106 X##_f[_i] = 0; \
108 X##_f[0] |= (_s != 0); \
111 #define _FP_FRAC_ADD_4(R,X,Y) \ argument
112 __FP_FRAC_ADD_4(R##_f[3], R##_f[2], R##_f[1], R##_f[0], \
113 X##_f[3], X##_f[2], X##_f[1], X##_f[0], \
114 Y##_f[3], Y##_f[2], Y##_f[1], Y##_f[0])
116 #define _FP_FRAC_SUB_4(R,X,Y) \ argument
117 __FP_FRAC_SUB_4(R##_f[3], R##_f[2], R##_f[1], R##_f[0], \
118 X##_f[3], X##_f[2], X##_f[1], X##_f[0], \
119 Y##_f[3], Y##_f[2], Y##_f[1], Y##_f[0])
121 #define _FP_FRAC_DEC_4(X,Y) \ argument
122 __FP_FRAC_DEC_4(X##_f[3], X##_f[2], X##_f[1], X##_f[0], \
123 Y##_f[3], Y##_f[2], Y##_f[1], Y##_f[0])
125 #define _FP_FRAC_ADDI_4(X,I) \ argument
126 __FP_FRAC_ADDI_4(X##_f[3], X##_f[2], X##_f[1], X##_f[0], I)
132 #define _FP_FRAC_ZEROP_4(X) ((X##_f[0] | X##_f[1] | X##_f[2] | X##_f[3]) == 0) argument
133 #define _FP_FRAC_NEGP_4(X) ((_FP_WS_TYPE)X##_f[3] < 0) argument
134 #define _FP_FRAC_OVERP_4(fs,X) (_FP_FRAC_HIGH_##fs(X) & _FP_OVERFLOW_##fs) argument
135 #define _FP_FRAC_CLEAR_OVERP_4(fs,X) (_FP_FRAC_HIGH_##fs(X) &= ~_FP_OVERFLOW_##fs) argument
137 #define _FP_FRAC_EQ_4(X,Y) \ argument
138 (X##_f[0] == Y##_f[0] && X##_f[1] == Y##_f[1] \
139 && X##_f[2] == Y##_f[2] && X##_f[3] == Y##_f[3])
141 #define _FP_FRAC_GT_4(X,Y) \ argument
142 (X##_f[3] > Y##_f[3] || \
143 (X##_f[3] == Y##_f[3] && (X##_f[2] > Y##_f[2] || \
144 (X##_f[2] == Y##_f[2] && (X##_f[1] > Y##_f[1] || \
145 (X##_f[1] == Y##_f[1] && X##_f[0] > Y##_f[0]) \
150 #define _FP_FRAC_GE_4(X,Y) \ argument
151 (X##_f[3] > Y##_f[3] || \
152 (X##_f[3] == Y##_f[3] && (X##_f[2] > Y##_f[2] || \
153 (X##_f[2] == Y##_f[2] && (X##_f[1] > Y##_f[1] || \
154 (X##_f[1] == Y##_f[1] && X##_f[0] >= Y##_f[0]) \
160 #define _FP_FRAC_CLZ_4(R,X) \ argument
162 if (X##_f[3]) \
164 __FP_CLZ(R,X##_f[3]); \
166 else if (X##_f[2]) \
168 __FP_CLZ(R,X##_f[2]); \
171 else if (X##_f[1]) \
173 __FP_CLZ(R,X##_f[2]); \
178 __FP_CLZ(R,X##_f[0]); \
179 R += _FP_W_TYPE_SIZE*3; \
184 #define _FP_UNPACK_RAW_4(fs, X, val) \ argument
187 X##_f[0] = _flo.bits.frac0; \
188 X##_f[1] = _flo.bits.frac1; \
189 X##_f[2] = _flo.bits.frac2; \
190 X##_f[3] = _flo.bits.frac3; \
191 X##_e = _flo.bits.exp; \
192 X##_s = _flo.bits.sign; \
195 #define _FP_UNPACK_RAW_4_P(fs, X, val) \ argument
200 X##_f[0] = _flo->bits.frac0; \
201 X##_f[1] = _flo->bits.frac1; \
202 X##_f[2] = _flo->bits.frac2; \
203 X##_f[3] = _flo->bits.frac3; \
204 X##_e = _flo->bits.exp; \
205 X##_s = _flo->bits.sign; \
208 #define _FP_PACK_RAW_4(fs, val, X) \ argument
211 _flo.bits.frac0 = X##_f[0]; \
212 _flo.bits.frac1 = X##_f[1]; \
213 _flo.bits.frac2 = X##_f[2]; \
214 _flo.bits.frac3 = X##_f[3]; \
215 _flo.bits.exp = X##_e; \
216 _flo.bits.sign = X##_s; \
220 #define _FP_PACK_RAW_4_P(fs, val, X) \ argument
225 _flo->bits.frac0 = X##_f[0]; \
226 _flo->bits.frac1 = X##_f[1]; \
227 _flo->bits.frac2 = X##_f[2]; \
228 _flo->bits.frac3 = X##_f[3]; \
229 _flo->bits.exp = X##_e; \
230 _flo->bits.sign = X##_s; \
239 #define _FP_MUL_MEAT_4_wide(wfracbits, R, X, Y, doit) \ argument
244 doit(_FP_FRAC_WORD_8(_z,1), _FP_FRAC_WORD_8(_z,0), X##_f[0], Y##_f[0]); \
245 doit(_b_f1, _b_f0, X##_f[0], Y##_f[1]); \
246 doit(_c_f1, _c_f0, X##_f[1], Y##_f[0]); \
247 doit(_d_f1, _d_f0, X##_f[1], Y##_f[1]); \
248 doit(_e_f1, _e_f0, X##_f[0], Y##_f[2]); \
249 doit(_f_f1, _f_f0, X##_f[2], Y##_f[0]); \
250 __FP_FRAC_ADD_3(_FP_FRAC_WORD_8(_z,3),_FP_FRAC_WORD_8(_z,2), \
253 __FP_FRAC_ADD_3(_FP_FRAC_WORD_8(_z,3),_FP_FRAC_WORD_8(_z,2), \
255 _FP_FRAC_WORD_8(_z,3),_FP_FRAC_WORD_8(_z,2), \
257 __FP_FRAC_ADD_3(_FP_FRAC_WORD_8(_z,4),_FP_FRAC_WORD_8(_z,3), \
259 0,_FP_FRAC_WORD_8(_z,3),_FP_FRAC_WORD_8(_z,2)); \
260 __FP_FRAC_ADD_3(_FP_FRAC_WORD_8(_z,4),_FP_FRAC_WORD_8(_z,3), \
262 _FP_FRAC_WORD_8(_z,4),_FP_FRAC_WORD_8(_z,3), \
264 __FP_FRAC_ADD_3(_FP_FRAC_WORD_8(_z,4),_FP_FRAC_WORD_8(_z,3), \
266 _FP_FRAC_WORD_8(_z,4),_FP_FRAC_WORD_8(_z,3), \
268 doit(_b_f1, _b_f0, X##_f[0], Y##_f[3]); \
269 doit(_c_f1, _c_f0, X##_f[3], Y##_f[0]); \
270 doit(_d_f1, _d_f0, X##_f[1], Y##_f[2]); \
271 doit(_e_f1, _e_f0, X##_f[2], Y##_f[1]); \
273 _FP_FRAC_WORD_8(_z,3), 0,_b_f1,_b_f0, \
274 0,_FP_FRAC_WORD_8(_z,4),_FP_FRAC_WORD_8(_z,3)); \
276 _FP_FRAC_WORD_8(_z,3), 0,_c_f1,_c_f0, \
278 _FP_FRAC_WORD_8(_z,3)); \
280 _FP_FRAC_WORD_8(_z,3), 0,_d_f1,_d_f0, \
282 _FP_FRAC_WORD_8(_z,3)); \
284 _FP_FRAC_WORD_8(_z,3), 0,_e_f1,_e_f0, \
286 _FP_FRAC_WORD_8(_z,3)); \
287 doit(_b_f1, _b_f0, X##_f[2], Y##_f[2]); \
288 doit(_c_f1, _c_f0, X##_f[1], Y##_f[3]); \
289 doit(_d_f1, _d_f0, X##_f[3], Y##_f[1]); \
290 doit(_e_f1, _e_f0, X##_f[2], Y##_f[3]); \
291 doit(_f_f1, _f_f0, X##_f[3], Y##_f[2]); \
310 doit(_b_f1, _b_f0, X##_f[3], Y##_f[3]); \
319 __FP_FRAC_SET_4(R, _FP_FRAC_WORD_8(_z,3), _FP_FRAC_WORD_8(_z,2), \
323 #define _FP_MUL_MEAT_4_gmp(wfracbits, R, X, Y) \ argument
333 __FP_FRAC_SET_4(R, _FP_FRAC_WORD_8(_z,3), _FP_FRAC_WORD_8(_z,2), \
355 #define _FP_DIV_MEAT_4_udiv(fs, R, X, Y) \ argument
360 if (_FP_FRAC_GT_4(X, Y)) \
362 _n_f[3] = X##_f[0] << (_FP_W_TYPE_SIZE - 1); \
363 _FP_FRAC_SRL_4(X, 1); \
372 for (_i = 3; ; _i--) \
374 if (X##_f[3] == Y##_f[3]) \
377 (X##_f[3]/Y##_f[3] would not fit into UWtype). \
378 As X## is guaranteed to be < Y, R##_f[_i] can be either \
383 __FP_FRAC_SUB_4(X##_f[3], X##_f[2], X##_f[1], X##_f[0], \
385 X##_f[2], X##_f[1], X##_f[0], _n_f[_i]); \
386 _FP_FRAC_SUB_4(X, Y, X); \
387 if (X##_f[3] > Y##_f[3]) \
390 _FP_FRAC_ADD_4(X, Y, X); \
395 udiv_qrnnd(R##_f[_i], X##_f[3], X##_f[3], X##_f[2], Y##_f[3]); \
396 umul_ppppmnnn(_m_f[3], _m_f[2], _m_f[1], _m_f[0], \
398 X##_f[2] = X##_f[1]; \
399 X##_f[1] = X##_f[0]; \
400 X##_f[0] = _n_f[_i]; \
401 if (_FP_FRAC_GT_4(_m, X)) \
404 _FP_FRAC_ADD_4(X, Y, X); \
405 if (_FP_FRAC_GE_4(X, Y) && _FP_FRAC_GT_4(_m, X)) \
408 _FP_FRAC_ADD_4(X, Y, X); \
411 _FP_FRAC_DEC_4(X, _m); \
414 if (!_FP_FRAC_EQ_4(X, _m)) \
429 #define _FP_SQRT_MEAT_4(R, S, T, X, q) \ argument
433 T##_f[3] = S##_f[3] + q; \
434 if (T##_f[3] <= X##_f[3]) \
436 S##_f[3] = T##_f[3] + q; \
437 X##_f[3] -= T##_f[3]; \
438 R##_f[3] += q; \
440 _FP_FRAC_SLL_4(X, 1); \
447 T##_f[3] = S##_f[3]; \
448 if (T##_f[3] < X##_f[3] || \
449 (T##_f[3] == X##_f[3] && T##_f[2] <= X##_f[2])) \
452 S##_f[3] += (T##_f[2] > S##_f[2]); \
453 __FP_FRAC_DEC_2(X##_f[3], X##_f[2], \
454 T##_f[3], T##_f[2]); \
457 _FP_FRAC_SLL_4(X, 1); \
465 T##_f[3] = S##_f[3]; \
466 if (T##_f[3] < X##_f[3] || \
467 (T##_f[3] == X##_f[3] && (T##_f[2] < X##_f[2] || \
468 (T##_f[2] == X##_f[2] && T##_f[1] <= X##_f[1])))) \
472 S##_f[3] += (T##_f[2] > S##_f[2]); \
473 __FP_FRAC_DEC_3(X##_f[3], X##_f[2], X##_f[1], \
474 T##_f[3], T##_f[2], T##_f[1]); \
477 _FP_FRAC_SLL_4(X, 1); \
486 T##_f[3] = S##_f[3]; \
487 if (_FP_FRAC_GE_4(X,T)) \
492 S##_f[3] += (T##_f[2] > S##_f[2]); \
493 _FP_FRAC_DEC_4(X, T); \
496 _FP_FRAC_SLL_4(X, 1); \
499 if (!_FP_FRAC_ZEROP_4(X)) \
501 if (_FP_FRAC_GT_4(X,S)) \
512 #define __FP_FRAC_SET_4(X,I3,I2,I1,I0) \ argument
513 (X##_f[3] = I3, X##_f[2] = I2, X##_f[1] = I1, X##_f[0] = I0)
639 /* Put the FP value X into r, which is an integer of size rsize. */
640 #define _FP_FRAC_ASSEMBLE_4(r, X, rsize) \ argument
643 r = X##_f[0]; \
646 r = X##_f[1]; \
648 r += X##_f[0]; \
652 /* I'm feeling lazy so we deal with int == 3words (implausible)*/ \
654 r = X##_f[3]; \
656 r += X##_f[2]; \
658 r += X##_f[1]; \
660 r += X##_f[0]; \
665 /* move an integer of size rsize into X's fractional part. We rely on
669 #define _FP_FRAC_DISASSEMBLE_4(X, r, rsize) \ argument
671 X##_f[0] = r; \
672 X##_f[1] = (rsize <= _FP_W_TYPE_SIZE ? 0 : r >> _FP_W_TYPE_SIZE); \
673 X##_f[2] = (rsize <= 2*_FP_W_TYPE_SIZE ? 0 : r >> 2*_FP_W_TYPE_SIZE); \
674 X##_f[3] = (rsize <= 3*_FP_W_TYPE_SIZE ? 0 : r >> 3*_FP_W_TYPE_SIZE); \
680 D##_f[1] = D##_f[2] = D##_f[3] = 0; \
688 D##_f[2] = D##_f[3] = 0; \