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; \ }