blob: ab25a5d84d869349b7b9b6cbb1d4250dac84604f [file] [log] [blame]
#include <stdint.h>
#pragma GCC target "+nosve"
#define N 100
#define DEF_FUNC(TYPE, B1, B2, C1, C2) \
void __attribute__ ((noipa)) \
f_##TYPE (TYPE *restrict a, TYPE *restrict b, TYPE *restrict c) \
{ \
for (int i = 0; i < N; ++i) \
a[i] = ((__int128) b[i] + c[i] + BIAS) >> 1; \
}
#define TEST_FUNC(TYPE, B1, B2, C1, C2) \
{ \
TYPE a[N], b[N], c[N]; \
for (TYPE i = 0; i < N; ++i) \
{ \
b[i] = B1 + i * B2; \
c[i] = C1 + i * C2; \
} \
f_##TYPE (a, b, c); \
for (TYPE i = 0; i < N; ++i) \
if (a[i] != ((B1 + C1 + BIAS + (__int128) i * (B2 + C2)) >> 1)) \
__builtin_abort (); \
}
#define FOR_EACH_SIGNED_TYPE(T) \
T (int8_t, -124, 2, -40, 1) \
T (int16_t, -32000, 510, -10000, 257) \
T (int32_t, -2000000000, 131072, -3277000, 65537) \
T (int64_t, -44, 100, -10000, 99)
#define FOR_EACH_UNSIGNED_TYPE(T) \
T (uint8_t, 4, 2, 40, 1) \
T (uint16_t, 12, 510, 10000, 257) \
T (uint32_t, 20, 131072, 3277000, 65537) \
T (uint64_t, 90, 100, 10000, 99)