1typedef __INT8_TYPE__ int_hr_t; 2typedef __UINT8_TYPE__ int_uhr_t; 3 4typedef __INT16_TYPE__ int_hk_t; 5typedef __UINT16_TYPE__ int_uhk_t; 6typedef __INT16_TYPE__ int_r_t; 7typedef __UINT16_TYPE__ int_ur_t; 8 9typedef __INT32_TYPE__ int_k_t; 10typedef __UINT32_TYPE__ int_uk_t; 11typedef __INT32_TYPE__ int_lr_t; 12typedef __UINT32_TYPE__ int_ulr_t; 13 14typedef __INT64_TYPE__ int_lk_t; 15typedef __UINT64_TYPE__ int_ulk_t; 16typedef __INT64_TYPE__ int_llr_t; 17typedef __UINT64_TYPE__ int_ullr_t; 18typedef __INT64_TYPE__ int_llk_t; 19typedef __UINT64_TYPE__ int_ullk_t; 20 21typedef __INT16_TYPE__ xint_hr_t; 22typedef __UINT16_TYPE__ xint_uhr_t; 23 24typedef __INT32_TYPE__ xint_hk_t; 25typedef __UINT32_TYPE__ xint_uhk_t; 26typedef __INT32_TYPE__ xint_r_t; 27typedef __UINT32_TYPE__ xint_ur_t; 28 29typedef __INT64_TYPE__ xint_k_t; 30typedef __UINT64_TYPE__ xint_uk_t; 31typedef __INT64_TYPE__ xint_lr_t; 32typedef __UINT64_TYPE__ xint_ulr_t; 33 34#define INThr_MAX __INT8_MAX__ 35#define INThr_MIN (-__INT8_MAX__-1) 36#define INTuhr_MAX __UINT8_MAX__ 37 38#define INTr_MAX __INT16_MAX__ 39#define INTr_MIN (-__INT16_MAX__-1) 40#define INTur_MAX __UINT16_MAX__ 41 42#define INThk_MAX __INT16_MAX__ 43#define INThk_MIN (-__INT16_MAX__-1) 44#define INTuhk_MAX __UINT16_MAX__ 45 46#define INTlr_MAX __INT32_MAX__ 47#define INTlr_MIN (-__INT32_MAX__-1) 48#define INTulr_MAX __UINT32_MAX__ 49 50#define INTk_MAX __INT32_MAX__ 51#define INTk_MIN (-__INT32_MAX__-1) 52#define INTuk_MAX __UINT32_MAX__ 53 54#define INTlk_MAX __INT64_MAX__ 55#define INTlk_MIN (-__INT64_MAX__-1) 56#define INTulk_MAX __UINT64_MAX__ 57 58#define INTllk_MAX __INT64_MAX__ 59#define INTllk_MIN (-__INT64_MAX__-1) 60#define INTullk_MAX __UINT64_MAX__ 61 62#define SS_FUN(NAME, OP, T, FX) \ 63 T __attribute__((noinline,noclone)) \ 64 NAME##_##FX (T fa, T fb) \ 65 { \ 66 int_##FX##_t ia; \ 67 int_##FX##_t ib; \ 68 xint_##FX##_t ic; \ 69 __builtin_memcpy (&ia, &fa, sizeof (ia)); \ 70 __builtin_memcpy (&ib, &fb, sizeof (ib)); \ 71 ic = (xint_##FX##_t) ia OP ib; \ 72 if (ic > INT##FX##_MAX) \ 73 ic = INT##FX##_MAX; \ 74 else if (ic < INT##FX##_MIN) \ 75 ic = INT##FX##_MIN; \ 76 ia = (int_##FX##_t) ic; \ 77 __builtin_memcpy (&fa, &ia, sizeof (ia)); \ 78 return fa; \ 79 } 80 81#define US_FUN(NAME, OP, T, FX) \ 82 T __attribute__((noinline,noclone)) \ 83 NAME##_##FX (T fa, T fb) \ 84 { \ 85 int_##FX##_t ia; \ 86 int_##FX##_t ib; \ 87 xint_##FX##_t ic; \ 88 __builtin_memcpy (&ia, &fa, sizeof (ia)); \ 89 __builtin_memcpy (&ib, &fb, sizeof (ib)); \ 90 ic = (xint_##FX##_t) ia OP ib; \ 91 if (ic > INT##FX##_MAX) \ 92 ic = INT##FX##_MAX; \ 93 else if (ic < 0) \ 94 ic = 0; \ 95 ia = (int_##FX##_t) ic; \ 96 __builtin_memcpy (&fa, &ia, sizeof (ia)); \ 97 return fa; \ 98 } 99 100#define SS_LFUN(NAME, OP, T, FX, CMP) \ 101 T __attribute__((noinline,noclone)) \ 102 NAME##_##FX (T fa, T fb) \ 103 { \ 104 int_##FX##_t ia; \ 105 int_##FX##_t ib; \ 106 int_##FX##_t ic; \ 107 __builtin_memcpy (&ia, &fa, sizeof (ia)); \ 108 __builtin_memcpy (&ib, &fb, sizeof (ib)); \ 109 ic = (int_##FX##_t) ia OP ib; \ 110 if (ic < ia && ib CMP 0) \ 111 ic = INT##FX##_MAX; \ 112 else if (ic > ia && 0 CMP ib) \ 113 ic = INT##FX##_MIN; \ 114 __builtin_memcpy (&fa, &ic, sizeof (ic)); \ 115 return fa; \ 116 } 117 118#define US_LFUN(NAME, OP, T, FX, CMP) \ 119 T __attribute__((noinline,noclone)) \ 120 NAME##_##FX (T fa, T fb) \ 121 { \ 122 int_##FX##_t ia; \ 123 int_##FX##_t ib; \ 124 int_##FX##_t ic; \ 125 __builtin_memcpy (&ia, &fa, sizeof (ia)); \ 126 __builtin_memcpy (&ib, &fb, sizeof (ib)); \ 127 ic = (int_##FX##_t) ia OP ib; \ 128 if (ia CMP ic && 1 CMP 0) \ 129 ic = INT##FX##_MAX; \ 130 if (ia CMP ic && 0 CMP 1) \ 131 ic = 0; \ 132 __builtin_memcpy (&fa, &ic, sizeof (ic)); \ 133 return fa; \ 134 } 135