|
13 | 13 | const UINT_TYPE sign_bit = (UINT_TYPE)1 \
|
14 | 14 | << (sizeof(INT_TYPE_SCALAR) * 8 - 1); \
|
15 | 15 | const UINT_TYPE sign_bit_mask = sign_bit - (UINT_TYPE)1; \
|
16 |
| - INT_TYPE ix = CLC_AS_TYPE(INT_TYPE)(x); \ |
17 |
| - UINT_TYPE ax = CLC_AS_TYPE(UINT_TYPE)(ix) & sign_bit_mask; \ |
18 |
| - INT_TYPE mx = CLC_AS_TYPE(INT_TYPE)(sign_bit) - ix; \ |
19 |
| - mx = CLC_AS_TYPE(INT_TYPE)(ix) < (INT_TYPE)0 ? mx : ix; \ |
20 |
| - INT_TYPE iy = CLC_AS_TYPE(INT_TYPE)(y); \ |
21 |
| - UINT_TYPE ay = CLC_AS_TYPE(UINT_TYPE)(iy) & sign_bit_mask; \ |
22 |
| - INT_TYPE my = CLC_AS_TYPE(INT_TYPE)(sign_bit) - iy; \ |
23 |
| - my = iy < (INT_TYPE)0 ? my : iy; \ |
| 16 | + UINT_TYPE ix = CLC_AS_TYPE(UINT_TYPE)(x); \ |
| 17 | + UINT_TYPE ax = ix & sign_bit_mask; \ |
| 18 | + UINT_TYPE mxu = sign_bit - ix; \ |
| 19 | + INT_TYPE mx = CLC_AS_TYPE(INT_TYPE)(mxu); \ |
| 20 | + mx = CLC_AS_TYPE(INT_TYPE)(ix) < (INT_TYPE)0 ? mx \ |
| 21 | + : CLC_AS_TYPE(INT_TYPE)(ix); \ |
| 22 | + UINT_TYPE iy = CLC_AS_TYPE(UINT_TYPE)(y); \ |
| 23 | + UINT_TYPE ay = iy & sign_bit_mask; \ |
| 24 | + UINT_TYPE myu = sign_bit - iy; \ |
| 25 | + INT_TYPE my = CLC_AS_TYPE(INT_TYPE)(myu); \ |
| 26 | + my = CLC_AS_TYPE(INT_TYPE)(iy) < (INT_TYPE)0 ? my \ |
| 27 | + : CLC_AS_TYPE(INT_TYPE)(iy); \ |
24 | 28 | INT_TYPE t = mx + (mx < my ? (INT_TYPE)1 : (INT_TYPE)-1); \
|
25 |
| - INT_TYPE r = CLC_AS_TYPE(INT_TYPE)(sign_bit) - t; \ |
26 |
| - r = t < (INT_TYPE)0 ? r : t; \ |
| 29 | + UINT_TYPE r = sign_bit - CLC_AS_TYPE(UINT_TYPE)(t); \ |
| 30 | + r = (t < (INT_TYPE)0 || (t == (INT_TYPE)0 && mx < my)) \ |
| 31 | + ? r \ |
| 32 | + : CLC_AS_TYPE(UINT_TYPE)(t); \ |
27 | 33 | r = __clc_isnan(x) ? ix : r; \
|
28 |
| - r = __clc_isnan(y) ? CLC_AS_TYPE(INT_TYPE)(iy) : r; \ |
| 34 | + r = __clc_isnan(y) ? iy : r; \ |
29 | 35 | r = ((ax | ay) == (UINT_TYPE)0 || ix == iy) ? iy : r; \
|
30 | 36 | return CLC_AS_TYPE(FLOAT_TYPE)(r); \
|
31 | 37 | }
|
|
0 commit comments