| #include <immintrin.h> |
| #include "m128-check.h" |
| |
| #ifndef max |
| #define max(a, b) (((a) > (b)) ? (a):(b)) |
| #endif |
| #ifndef min |
| #define min(a, b) (((a) < (b)) ? (a):(b)) |
| #endif |
| |
| typedef union |
| { |
| __m256i x; |
| char a[32]; |
| } union256i_b; |
| |
| typedef union |
| { |
| __m256i x; |
| short a[16]; |
| } union256i_w; |
| |
| typedef union |
| { |
| __m256i x; |
| int a[8]; |
| } union256i_d; |
| |
| typedef union |
| { |
| __m256i x; |
| long long a[4]; |
| } union256i_q; |
| |
| typedef union |
| { |
| __m256 x; |
| float a[8]; |
| } union256; |
| |
| typedef union |
| { |
| __m256d x; |
| double a[4]; |
| } union256d; |
| |
| typedef union |
| { |
| __m256i x; |
| unsigned char a[32]; |
| } union256i_ub; |
| |
| typedef union |
| { |
| __m256i x; |
| unsigned short a[16]; |
| } union256i_uw; |
| |
| typedef union |
| { |
| __m256i x; |
| unsigned int a[8]; |
| } union256i_ud; |
| |
| typedef union |
| { |
| __m256i x; |
| unsigned long long a[4]; |
| } union256i_uq; |
| |
| CHECK_EXP (union256i_b, char, "%d") |
| CHECK_EXP (union256i_w, short, "%d") |
| CHECK_EXP (union256i_d, int, "0x%x") |
| CHECK_EXP (union256i_q, long long, "0x%llx") |
| CHECK_EXP (union256, float, "%f") |
| CHECK_EXP (union256d, double, "%f") |
| CHECK_EXP (union256i_ub, unsigned char, "%d") |
| CHECK_EXP (union256i_uw, unsigned short, "%d") |
| CHECK_EXP (union256i_ud, unsigned int, "0x%x") |
| CHECK_EXP (union256i_uq, unsigned long long, "0x%llx") |
| |
| #define CHECK_FP_EXP(UNION_TYPE, VALUE_TYPE, ESP, FMT) \ |
| static int \ |
| __attribute__((noinline, unused)) \ |
| check_fp_##UNION_TYPE (UNION_TYPE u, const VALUE_TYPE *v) \ |
| { \ |
| int i; \ |
| int err = 0; \ |
| \ |
| for (i = 0; i < ARRAY_SIZE (u.a); i++) \ |
| if (u.a[i] > (v[i] + (ESP)) || u.a[i] < (v[i] - (ESP))) \ |
| { \ |
| err++; \ |
| PRINTF ("%i: " FMT " != " FMT "\n", \ |
| i, v[i], u.a[i]); \ |
| } \ |
| return err; \ |
| } |
| |
| CHECK_FP_EXP (union256, float, ESP_FLOAT, "%f") |
| CHECK_FP_EXP (union256d, double, ESP_DOUBLE, "%f") |