3 #pragma GCC target "+nosve"
7 #define DEF_FUNC(TYPE, B1, B2, C1, C2) \
8 void __attribute__ ((noipa)) \
9 f_##TYPE (TYPE *restrict a, TYPE *restrict b, TYPE *restrict c) \
11 for (int i = 0; i < N; ++i) \
12 a[i] = ((__int128) b[i] + c[i] + BIAS) >> 1; \
15 #define TEST_FUNC(TYPE, B1, B2, C1, C2) \
17 TYPE a[N], b[N], c[N]; \
18 for (TYPE i = 0; i < N; ++i) \
24 for (TYPE i = 0; i < N; ++i) \
25 if (a[i] != ((B1 + C1 + BIAS + (__int128) i * (B2 + C2)) >> 1)) \
29 #define FOR_EACH_SIGNED_TYPE(T) \
30 T (int8_t, -124, 2, -40, 1) \
31 T (int16_t, -32000, 510, -10000, 257) \
32 T (int32_t, -2000000000, 131072, -3277000, 65537) \
33 T (int64_t, -44, 100, -10000, 99)
35 #define FOR_EACH_UNSIGNED_TYPE(T) \
36 T (uint8_t, 4, 2, 40, 1) \
37 T (uint16_t, 12, 510, 10000, 257) \
38 T (uint32_t, 20, 131072, 3277000, 65537) \
39 T (uint64_t, 90, 100, 10000, 99)