1#ifndef SSE2NEONCOMMON_H
2#define SSE2NEONCOMMON_H
4#if (defined(__aarch64__) || defined(_M_ARM64)) || defined(__arm__)
6#elif defined(__x86_64__) || defined(__i386__)
16#if !(defined(_WIN32) || defined(_WIN64) || defined(__int64))
17#if (defined(__x86_64__) || defined(__i386__))
18#define __int64 long long
20#define __int64 int64_t
24#if defined(__GNUC__) || defined(__clang__)
25#pragma push_macro("ALIGN_STRUCT")
26#define ALIGN_STRUCT(x) __attribute__((aligned(x)))
28#define ALIGN_STRUCT(x) __declspec(align(x))
43#if defined(__GNUC__) || defined(__clang__)
44#pragma pop_macro("ALIGN_STRUCT")
49#ifndef SSE2NEON_PRECISE_MINMAX
50#define SSE2NEON_PRECISE_MINMAX (0)
54#define ASSERT_RETURN(x) \
67#define ALL_BIT_1_32 (*(float *) &NaN)
68#define ALL_BIT_1_64 (*(double *) &NaN64)
73 const int32_t *t1 = (
const int32_t *) &a;
74 const int32_t *t2 = (
const int32_t *) &b;
192#define VALIDATE_INT8_M128(A, B) \
193 validateInt8(A, B[0], B[1], B[2], B[3], B[4], B[5], B[6], B[7], B[8], \
194 B[9], B[10], B[11], B[12], B[13], B[14], B[15])
195#define VALIDATE_UINT8_M128(A, B) \
196 validateUInt8(A, B[0], B[1], B[2], B[3], B[4], B[5], B[6], B[7], B[8], \
197 B[9], B[10], B[11], B[12], B[13], B[14], B[15])
198#define VALIDATE_INT16_M128(A, B) \
199 validateInt16(A, B[0], B[1], B[2], B[3], B[4], B[5], B[6], B[7])
200#define VALIDATE_UINT16_M128(A, B) \
201 validateUInt16(A, B[0], B[1], B[2], B[3], B[4], B[5], B[6], B[7])
202#define VALIDATE_INT32_M128(A, B) validateInt32(A, B[0], B[1], B[2], B[3])
203#define VALIDATE_UINT32_M128(A, B) validateUInt32(A, B[0], B[1], B[2], B[3])
205#define VALIDATE_INT8_M64(A, B) \
206 validateInt8(A, B[0], B[1], B[2], B[3], B[4], B[5], B[6], B[7])
207#define VALIDATE_UINT8_M64(A, B) \
208 validateUInt8(A, B[0], B[1], B[2], B[3], B[4], B[5], B[6], B[7])
209#define VALIDATE_INT16_M64(A, B) validateInt16(A, B[0], B[1], B[2], B[3])
210#define VALIDATE_UINT16_M64(A, B) validateUInt16(A, B[0], B[1], B[2], B[3])
211#define VALIDATE_INT32_M64(A, B) validateInt32(A, B[0], B[1])
212#define VALIDATE_UINT32_M64(A, B) validateUInt32(A, B[0], B[1])
213#define CHECK_RESULT(EXP) \
214 if (EXP != TEST_SUCCESS) { \
292#define IMM_128_ITER \
358#define IMM_256_ITER \
#define ASSERT_RETURN(x)
Definition common.h:54
int32_t NaN
Definition common.cpp:7
result_t
Definition common.h:60
@ TEST_UNIMPL
Definition common.h:63
@ TEST_SUCCESS
Definition common.h:61
@ TEST_FAIL
Definition common.h:62
result_t validateUInt64(__m128i a, uint64_t u0, uint64_t u1)
Definition common.cpp:25
result_t validateSingleFloatPair(float a, float b)
Definition common.cpp:272
result_t validateDouble(__m128d a, double d0, double d1)
Definition common.cpp:387
result_t validateSingleDoublePair(double a, double b)
Definition common.cpp:282
result_t validateInt16(__m128i a, int16_t i0, int16_t i1, int16_t i2, int16_t i3, int16_t i4, int16_t i5, int16_t i6, int16_t i7)
Definition common.cpp:76
result_t validateUInt32(__m128i a, uint32_t u0, uint32_t u1, uint32_t u2, uint32_t u3)
Definition common.cpp:54
result_t validateFloat(__m128 a, float f0, float f1, float f2, float f3)
Definition common.cpp:297
result_t validateInt64(__m128i a, int64_t i0, int64_t i1)
Definition common.cpp:10
result_t validateUInt8(__m128i a, uint8_t u0, uint8_t u1, uint8_t u2, uint8_t u3, uint8_t u4, uint8_t u5, uint8_t u6, uint8_t u7, uint8_t u8, uint8_t u9, uint8_t u10, uint8_t u11, uint8_t u12, uint8_t u13, uint8_t u14, uint8_t u15)
Definition common.cpp:212
int64_t NaN64
Definition common.cpp:8
result_t validateInt8(__m128i a, int8_t i0, int8_t i1, int8_t i2, int8_t i3, int8_t i4, int8_t i5, int8_t i6, int8_t i7, int8_t i8, int8_t i9, int8_t i10, int8_t i11, int8_t i12, int8_t i13, int8_t i14, int8_t i15)
Definition common.cpp:152
result_t validateInt32(__m128i a, int32_t i0, int32_t i1, int32_t i2, int32_t i3)
Definition common.cpp:40
result_t validateFloatError(__m128 a, float f0, float f1, float f2, float f3, float err)
Definition common.cpp:347
result_t validate128(T a, T b)
Definition common.h:71
result_t validateUInt16(__m128i a, uint16_t u0, uint16_t u1, uint16_t u2, uint16_t u3, uint16_t u4, uint16_t u5, uint16_t u6, uint16_t u7)
Definition common.cpp:108
result_t validateFloatEpsilon(__m128 a, float f0, float f1, float f2, float f3, float epsilon)
Definition common.cpp:307
float32x4_t __m128
Definition sse2neon.h:366
float32x4_t __m128d
Definition sse2neon.h:373
union ALIGN_STRUCT(16) SIMDVec
Definition sse2neon.h:522
int64x1_t __m64
Definition sse2neon.h:365
int64x2_t __m128i
Definition sse2neon.h:375
SIMDVec
Definition sse2neon.h:532