blob: f6a2aeb6fa213375c990b8b06df8b1f71674267c [file] [log] [blame]
typedef __INT8_TYPE__ int_hr_t;
typedef __UINT8_TYPE__ int_uhr_t;
typedef __INT16_TYPE__ int_hk_t;
typedef __UINT16_TYPE__ int_uhk_t;
typedef __INT16_TYPE__ int_r_t;
typedef __UINT16_TYPE__ int_ur_t;
typedef __INT32_TYPE__ int_k_t;
typedef __UINT32_TYPE__ int_uk_t;
typedef __INT32_TYPE__ int_lr_t;
typedef __UINT32_TYPE__ int_ulr_t;
typedef __INT64_TYPE__ int_lk_t;
typedef __UINT64_TYPE__ int_ulk_t;
typedef __INT64_TYPE__ int_llr_t;
typedef __UINT64_TYPE__ int_ullr_t;
typedef __INT64_TYPE__ int_llk_t;
typedef __UINT64_TYPE__ int_ullk_t;
typedef __INT16_TYPE__ xint_hr_t;
typedef __UINT16_TYPE__ xint_uhr_t;
typedef __INT32_TYPE__ xint_hk_t;
typedef __UINT32_TYPE__ xint_uhk_t;
typedef __INT32_TYPE__ xint_r_t;
typedef __UINT32_TYPE__ xint_ur_t;
typedef __INT64_TYPE__ xint_k_t;
typedef __UINT64_TYPE__ xint_uk_t;
typedef __INT64_TYPE__ xint_lr_t;
typedef __UINT64_TYPE__ xint_ulr_t;
#define INThr_MAX __INT8_MAX__
#define INThr_MIN (-__INT8_MAX__-1)
#define INTuhr_MAX __UINT8_MAX__
#define INTr_MAX __INT16_MAX__
#define INTr_MIN (-__INT16_MAX__-1)
#define INTur_MAX __UINT16_MAX__
#define INThk_MAX __INT16_MAX__
#define INThk_MIN (-__INT16_MAX__-1)
#define INTuhk_MAX __UINT16_MAX__
#define INTlr_MAX __INT32_MAX__
#define INTlr_MIN (-__INT32_MAX__-1)
#define INTulr_MAX __UINT32_MAX__
#define INTk_MAX __INT32_MAX__
#define INTk_MIN (-__INT32_MAX__-1)
#define INTuk_MAX __UINT32_MAX__
#define INTlk_MAX __INT64_MAX__
#define INTlk_MIN (-__INT64_MAX__-1)
#define INTulk_MAX __UINT64_MAX__
#define INTllk_MAX __INT64_MAX__
#define INTllk_MIN (-__INT64_MAX__-1)
#define INTullk_MAX __UINT64_MAX__
#define SS_FUN(NAME, OP, T, FX) \
T __attribute__((noinline,noclone)) \
NAME##_##FX (T fa, T fb) \
{ \
int_##FX##_t ia; \
int_##FX##_t ib; \
xint_##FX##_t ic; \
__builtin_memcpy (&ia, &fa, sizeof (ia)); \
__builtin_memcpy (&ib, &fb, sizeof (ib)); \
ic = (xint_##FX##_t) ia OP ib; \
if (ic > INT##FX##_MAX) \
ic = INT##FX##_MAX; \
else if (ic < INT##FX##_MIN) \
ic = INT##FX##_MIN; \
ia = (int_##FX##_t) ic; \
__builtin_memcpy (&fa, &ia, sizeof (ia)); \
return fa; \
}
#define US_FUN(NAME, OP, T, FX) \
T __attribute__((noinline,noclone)) \
NAME##_##FX (T fa, T fb) \
{ \
int_##FX##_t ia; \
int_##FX##_t ib; \
xint_##FX##_t ic; \
__builtin_memcpy (&ia, &fa, sizeof (ia)); \
__builtin_memcpy (&ib, &fb, sizeof (ib)); \
ic = (xint_##FX##_t) ia OP ib; \
if (ic > INT##FX##_MAX) \
ic = INT##FX##_MAX; \
else if (ic < 0) \
ic = 0; \
ia = (int_##FX##_t) ic; \
__builtin_memcpy (&fa, &ia, sizeof (ia)); \
return fa; \
}
#define SS_LFUN(NAME, OP, T, FX, CMP) \
T __attribute__((noinline,noclone)) \
NAME##_##FX (T fa, T fb) \
{ \
int_##FX##_t ia; \
int_##FX##_t ib; \
int_##FX##_t ic; \
__builtin_memcpy (&ia, &fa, sizeof (ia)); \
__builtin_memcpy (&ib, &fb, sizeof (ib)); \
ic = (int_##FX##_t) ia OP ib; \
if (ic < ia && ib CMP 0) \
ic = INT##FX##_MAX; \
else if (ic > ia && 0 CMP ib) \
ic = INT##FX##_MIN; \
__builtin_memcpy (&fa, &ic, sizeof (ic)); \
return fa; \
}
#define US_LFUN(NAME, OP, T, FX, CMP) \
T __attribute__((noinline,noclone)) \
NAME##_##FX (T fa, T fb) \
{ \
int_##FX##_t ia; \
int_##FX##_t ib; \
int_##FX##_t ic; \
__builtin_memcpy (&ia, &fa, sizeof (ia)); \
__builtin_memcpy (&ib, &fb, sizeof (ib)); \
ic = (int_##FX##_t) ia OP ib; \
if (ia CMP ic && 1 CMP 0) \
ic = INT##FX##_MAX; \
if (ia CMP ic && 0 CMP 1) \
ic = 0; \
__builtin_memcpy (&fa, &ic, sizeof (ic)); \
return fa; \
}