Commit 7adb3e99 authored by Vincent Chen's avatar Vincent Chen Committed by Greentime Hu

math-emu/op-2.h: Use statement expressions to prevent negative constant shift

This modification is quoted from glibc 'commit <
sysdeps/unix/sysv/linux/sparc/sparc64/dl-procinfo.c: Moved to>
(fe0b1e854ad32a69b260)'
Signed-off-by: default avatarVincent Chen <vincentc@andestech.com>
Acked-by: default avatarGreentime Hu <greentime@andestech.com>
Signed-off-by: default avatarGreentime Hu <greentime@andestech.com>
parent 44e92e03
...@@ -31,61 +31,56 @@ ...@@ -31,61 +31,56 @@
#define _FP_FRAC_HIGH_2(X) (X##_f1) #define _FP_FRAC_HIGH_2(X) (X##_f1)
#define _FP_FRAC_LOW_2(X) (X##_f0) #define _FP_FRAC_LOW_2(X) (X##_f0)
#define _FP_FRAC_WORD_2(X,w) (X##_f##w) #define _FP_FRAC_WORD_2(X,w) (X##_f##w)
#define _FP_FRAC_SLL_2(X, N) ( \
#define _FP_FRAC_SLL_2(X,N) \ (void) (((N) < _FP_W_TYPE_SIZE) \
do { \ ? ({ \
if ((N) < _FP_W_TYPE_SIZE) \ if (__builtin_constant_p(N) && (N) == 1) { \
{ \ X##_f1 = X##_f1 + X##_f1 + \
if (__builtin_constant_p(N) && (N) == 1) \ (((_FP_WS_TYPE) (X##_f0)) < 0); \
{ \
X##_f1 = X##_f1 + X##_f1 + (((_FP_WS_TYPE)(X##_f0)) < 0); \
X##_f0 += X##_f0; \ X##_f0 += X##_f0; \
} \ } else { \
else \ X##_f1 = X##_f1 << (N) | X##_f0 >> \
{ \ (_FP_W_TYPE_SIZE - (N)); \
X##_f1 = X##_f1 << (N) | X##_f0 >> (_FP_W_TYPE_SIZE - (N)); \
X##_f0 <<= (N); \ X##_f0 <<= (N); \
} \ } \
} \ 0; \
else \ }) \
{ \ : ({ \
X##_f1 = X##_f0 << ((N) - _FP_W_TYPE_SIZE); \ X##_f1 = X##_f0 << ((N) - _FP_W_TYPE_SIZE); \
X##_f0 = 0; \ X##_f0 = 0; \
} \ })))
} while (0)
#define _FP_FRAC_SRL_2(X,N) \
do { \ #define _FP_FRAC_SRL_2(X, N) ( \
if ((N) < _FP_W_TYPE_SIZE) \ (void) (((N) < _FP_W_TYPE_SIZE) \
{ \ ? ({ \
X##_f0 = X##_f0 >> (N) | X##_f1 << (_FP_W_TYPE_SIZE - (N)); \ X##_f0 = X##_f0 >> (N) | X##_f1 << (_FP_W_TYPE_SIZE - (N)); \
X##_f1 >>= (N); \ X##_f1 >>= (N); \
} \ }) \
else \ : ({ \
{ \
X##_f0 = X##_f1 >> ((N) - _FP_W_TYPE_SIZE); \ X##_f0 = X##_f1 >> ((N) - _FP_W_TYPE_SIZE); \
X##_f1 = 0; \ X##_f1 = 0; \
} \ })))
} while (0)
/* Right shift with sticky-lsb. */ /* Right shift with sticky-lsb. */
#define _FP_FRAC_SRS_2(X,N,sz) \ #define _FP_FRAC_SRS_2(X, N, sz) ( \
do { \ (void) (((N) < _FP_W_TYPE_SIZE) \
if ((N) < _FP_W_TYPE_SIZE) \ ? ({ \
{ \ X##_f0 = (X##_f1 << (_FP_W_TYPE_SIZE - (N)) | X##_f0 >> (N) \
X##_f0 = (X##_f1 << (_FP_W_TYPE_SIZE - (N)) | X##_f0 >> (N) | \ | (__builtin_constant_p(N) && (N) == 1 \
(__builtin_constant_p(N) && (N) == 1 \
? X##_f0 & 1 \ ? X##_f0 & 1 \
: (X##_f0 << (_FP_W_TYPE_SIZE - (N))) != 0)); \ : (X##_f0 << (_FP_W_TYPE_SIZE - (N))) != 0)); \
X##_f1 >>= (N); \ X##_f1 >>= (N); \
} \ }) \
else \ : ({ \
{ \ X##_f0 = (X##_f1 >> ((N) - _FP_W_TYPE_SIZE) \
X##_f0 = (X##_f1 >> ((N) - _FP_W_TYPE_SIZE) | \ | ((((N) == _FP_W_TYPE_SIZE \
(((X##_f1 << (2*_FP_W_TYPE_SIZE - (N))) | X##_f0) != 0)); \ ? 0 \
: (X##_f1 << (2*_FP_W_TYPE_SIZE - (N)))) \
| X##_f0) != 0)); \
X##_f1 = 0; \ X##_f1 = 0; \
} \ })))
} while (0)
#define _FP_FRAC_ADDI_2(X,I) \ #define _FP_FRAC_ADDI_2(X,I) \
__FP_FRAC_ADDI_2(X##_f1, X##_f0, I) __FP_FRAC_ADDI_2(X##_f1, X##_f0, I)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment