Viewing file: m256-check.h (1.82 KB) -rw-r--r-- Select action/file-type: (+) | (+) | (+) | Code (+) | Session (+) | (+) | SDB (+) | (+) | (+) | (+) | (+) | (+) |
#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")
|