1 typedef __INT8_TYPE__ int_hr_t; 2 typedef __UINT8_TYPE__ int_uhr_t; 3 4 typedef __INT16_TYPE__ int_hk_t; 5 typedef __UINT16_TYPE__ int_uhk_t; 6 typedef __INT16_TYPE__ int_r_t; 7 typedef __UINT16_TYPE__ int_ur_t; 8 9 typedef __INT32_TYPE__ int_k_t; 10 typedef __UINT32_TYPE__ int_uk_t; 11 typedef __INT32_TYPE__ int_lr_t; 12 typedef __UINT32_TYPE__ int_ulr_t; 13 14 typedef __INT64_TYPE__ int_lk_t; 15 typedef __UINT64_TYPE__ int_ulk_t; 16 typedef __INT64_TYPE__ int_llr_t; 17 typedef __UINT64_TYPE__ int_ullr_t; 18 typedef __INT64_TYPE__ int_llk_t; 19 typedef __UINT64_TYPE__ int_ullk_t; 20 21 typedef __INT16_TYPE__ xint_hr_t; 22 typedef __UINT16_TYPE__ xint_uhr_t; 23 24 typedef __INT32_TYPE__ xint_hk_t; 25 typedef __UINT32_TYPE__ xint_uhk_t; 26 typedef __INT32_TYPE__ xint_r_t; 27 typedef __UINT32_TYPE__ xint_ur_t; 28 29 typedef __INT64_TYPE__ xint_k_t; 30 typedef __UINT64_TYPE__ xint_uk_t; 31 typedef __INT64_TYPE__ xint_lr_t; 32 typedef __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