typedef signed long long sll; typedef unsigned long long ull; typedef signed int si; typedef unsigned int ui; typedef signed short sh; typedef unsigned short uh; typedef signed char sc; typedef unsigned char uc; #ifndef ALIGN #define ALIGN 32 #endif #define ALIGN_ATTR __attribute__((__aligned__(ALIGN))) #define N 128 #define DEF_ARR(TYPE) \ TYPE TYPE##_a[N] ALIGN_ATTR; \ TYPE TYPE##_b[N] ALIGN_ATTR; \ TYPE TYPE##_c[N] ALIGN_ATTR; #define TEST1(NTYPE, WTYPE) \ __attribute__((noipa)) void test1_##NTYPE##_##WTYPE() { \ for (int i = 0; i < N; i++) \ WTYPE##_c[i] = NTYPE##_a[i] + NTYPE##_b[i]; \ } #define CHECK1(NTYPE, WTYPE) \ __attribute__((noipa, optimize(0))) void check1_##NTYPE##_##WTYPE() { \ for (int i = 0; i < N; i++) { \ NTYPE##_a[i] = 2 * i * sizeof(NTYPE) + 10; \ NTYPE##_b[i] = 7 * i * sizeof(NTYPE) / 5 - 10; \ } \ test1_##NTYPE##_##WTYPE(); \ for (int i = 0; i < N; i++) { \ WTYPE exp = NTYPE##_a[i] + NTYPE##_b[i]; \ if (WTYPE##_c[i] != exp) \ __builtin_abort(); \ } \ }