1*4bdc9457SAndroid Build Coastguard Worker // Copyright (c) Facebook, Inc. and its affiliates. 2*4bdc9457SAndroid Build Coastguard Worker // All rights reserved. 3*4bdc9457SAndroid Build Coastguard Worker // 4*4bdc9457SAndroid Build Coastguard Worker // Copyright 2019 Google LLC 5*4bdc9457SAndroid Build Coastguard Worker // 6*4bdc9457SAndroid Build Coastguard Worker // This source code is licensed under the BSD-style license found in the 7*4bdc9457SAndroid Build Coastguard Worker // LICENSE file in the root directory of this source tree. 8*4bdc9457SAndroid Build Coastguard Worker 9*4bdc9457SAndroid Build Coastguard Worker #pragma once 10*4bdc9457SAndroid Build Coastguard Worker 11*4bdc9457SAndroid Build Coastguard Worker #include <cpuinfo.h> 12*4bdc9457SAndroid Build Coastguard Worker 13*4bdc9457SAndroid Build Coastguard Worker #include <xnnpack/common.h> 14*4bdc9457SAndroid Build Coastguard Worker 15*4bdc9457SAndroid Build Coastguard Worker 16*4bdc9457SAndroid Build Coastguard Worker #define TEST_REQUIRES_X86_SSE \ 17*4bdc9457SAndroid Build Coastguard Worker do { \ 18*4bdc9457SAndroid Build Coastguard Worker if (!cpuinfo_initialize() || !cpuinfo_has_x86_sse()) { \ 19*4bdc9457SAndroid Build Coastguard Worker GTEST_SKIP(); \ 20*4bdc9457SAndroid Build Coastguard Worker } \ 21*4bdc9457SAndroid Build Coastguard Worker } while (0) 22*4bdc9457SAndroid Build Coastguard Worker 23*4bdc9457SAndroid Build Coastguard Worker #define TEST_REQUIRES_X86_SSE2 \ 24*4bdc9457SAndroid Build Coastguard Worker do { \ 25*4bdc9457SAndroid Build Coastguard Worker if (!cpuinfo_initialize() || !cpuinfo_has_x86_sse2()) { \ 26*4bdc9457SAndroid Build Coastguard Worker GTEST_SKIP(); \ 27*4bdc9457SAndroid Build Coastguard Worker } \ 28*4bdc9457SAndroid Build Coastguard Worker } while (0) 29*4bdc9457SAndroid Build Coastguard Worker 30*4bdc9457SAndroid Build Coastguard Worker #define TEST_REQUIRES_X86_SSSE3 \ 31*4bdc9457SAndroid Build Coastguard Worker do { \ 32*4bdc9457SAndroid Build Coastguard Worker if (!cpuinfo_initialize() || !cpuinfo_has_x86_ssse3()) { \ 33*4bdc9457SAndroid Build Coastguard Worker GTEST_SKIP(); \ 34*4bdc9457SAndroid Build Coastguard Worker } \ 35*4bdc9457SAndroid Build Coastguard Worker } while (0) 36*4bdc9457SAndroid Build Coastguard Worker 37*4bdc9457SAndroid Build Coastguard Worker #define TEST_REQUIRES_X86_SSE41 \ 38*4bdc9457SAndroid Build Coastguard Worker do { \ 39*4bdc9457SAndroid Build Coastguard Worker if (!cpuinfo_initialize() || !cpuinfo_has_x86_sse4_1()) { \ 40*4bdc9457SAndroid Build Coastguard Worker GTEST_SKIP(); \ 41*4bdc9457SAndroid Build Coastguard Worker } \ 42*4bdc9457SAndroid Build Coastguard Worker } while (0) 43*4bdc9457SAndroid Build Coastguard Worker 44*4bdc9457SAndroid Build Coastguard Worker #define TEST_REQUIRES_X86_AVX \ 45*4bdc9457SAndroid Build Coastguard Worker do { \ 46*4bdc9457SAndroid Build Coastguard Worker if (!cpuinfo_initialize() || !cpuinfo_has_x86_avx()) { \ 47*4bdc9457SAndroid Build Coastguard Worker GTEST_SKIP(); \ 48*4bdc9457SAndroid Build Coastguard Worker } \ 49*4bdc9457SAndroid Build Coastguard Worker } while (0) 50*4bdc9457SAndroid Build Coastguard Worker 51*4bdc9457SAndroid Build Coastguard Worker #define TEST_REQUIRES_X86_F16C \ 52*4bdc9457SAndroid Build Coastguard Worker do { \ 53*4bdc9457SAndroid Build Coastguard Worker if (!cpuinfo_initialize() || !cpuinfo_has_x86_f16c()) { \ 54*4bdc9457SAndroid Build Coastguard Worker GTEST_SKIP(); \ 55*4bdc9457SAndroid Build Coastguard Worker } \ 56*4bdc9457SAndroid Build Coastguard Worker } while (0) 57*4bdc9457SAndroid Build Coastguard Worker 58*4bdc9457SAndroid Build Coastguard Worker #define TEST_REQUIRES_X86_XOP \ 59*4bdc9457SAndroid Build Coastguard Worker do { \ 60*4bdc9457SAndroid Build Coastguard Worker if (!cpuinfo_initialize() || !cpuinfo_has_x86_xop()) { \ 61*4bdc9457SAndroid Build Coastguard Worker GTEST_SKIP(); \ 62*4bdc9457SAndroid Build Coastguard Worker } \ 63*4bdc9457SAndroid Build Coastguard Worker } while (0) 64*4bdc9457SAndroid Build Coastguard Worker 65*4bdc9457SAndroid Build Coastguard Worker #define TEST_REQUIRES_X86_FMA3 \ 66*4bdc9457SAndroid Build Coastguard Worker do { \ 67*4bdc9457SAndroid Build Coastguard Worker if (!cpuinfo_initialize() || !cpuinfo_has_x86_fma3()) { \ 68*4bdc9457SAndroid Build Coastguard Worker GTEST_SKIP(); \ 69*4bdc9457SAndroid Build Coastguard Worker } \ 70*4bdc9457SAndroid Build Coastguard Worker } while (0) 71*4bdc9457SAndroid Build Coastguard Worker 72*4bdc9457SAndroid Build Coastguard Worker #define TEST_REQUIRES_X86_AVX2 \ 73*4bdc9457SAndroid Build Coastguard Worker do { \ 74*4bdc9457SAndroid Build Coastguard Worker if (!cpuinfo_initialize() || !cpuinfo_has_x86_avx2()) { \ 75*4bdc9457SAndroid Build Coastguard Worker GTEST_SKIP(); \ 76*4bdc9457SAndroid Build Coastguard Worker } \ 77*4bdc9457SAndroid Build Coastguard Worker } while (0) 78*4bdc9457SAndroid Build Coastguard Worker 79*4bdc9457SAndroid Build Coastguard Worker #define TEST_REQUIRES_X86_AVX512F \ 80*4bdc9457SAndroid Build Coastguard Worker do { \ 81*4bdc9457SAndroid Build Coastguard Worker if (!cpuinfo_initialize() || !cpuinfo_has_x86_avx512f()) { \ 82*4bdc9457SAndroid Build Coastguard Worker GTEST_SKIP(); \ 83*4bdc9457SAndroid Build Coastguard Worker } \ 84*4bdc9457SAndroid Build Coastguard Worker } while (0) 85*4bdc9457SAndroid Build Coastguard Worker 86*4bdc9457SAndroid Build Coastguard Worker #define TEST_REQUIRES_X86_AVX512SKX \ 87*4bdc9457SAndroid Build Coastguard Worker do { \ 88*4bdc9457SAndroid Build Coastguard Worker if (!cpuinfo_initialize() || !cpuinfo_has_x86_avx512f() || !cpuinfo_has_x86_avx512cd() || !cpuinfo_has_x86_avx512dq() || !cpuinfo_has_x86_avx512bw() || !cpuinfo_has_x86_avx512vl()) { \ 89*4bdc9457SAndroid Build Coastguard Worker GTEST_SKIP(); \ 90*4bdc9457SAndroid Build Coastguard Worker } \ 91*4bdc9457SAndroid Build Coastguard Worker } while (0) 92*4bdc9457SAndroid Build Coastguard Worker 93*4bdc9457SAndroid Build Coastguard Worker #define TEST_REQUIRES_ARM_SIMD32 \ 94*4bdc9457SAndroid Build Coastguard Worker do { \ 95*4bdc9457SAndroid Build Coastguard Worker if (!cpuinfo_initialize() || !cpuinfo_has_arm_v6()) { \ 96*4bdc9457SAndroid Build Coastguard Worker GTEST_SKIP(); \ 97*4bdc9457SAndroid Build Coastguard Worker } \ 98*4bdc9457SAndroid Build Coastguard Worker } while (0) 99*4bdc9457SAndroid Build Coastguard Worker 100*4bdc9457SAndroid Build Coastguard Worker #define TEST_REQUIRES_ARM_NEON \ 101*4bdc9457SAndroid Build Coastguard Worker do { \ 102*4bdc9457SAndroid Build Coastguard Worker if (!cpuinfo_initialize() || !cpuinfo_has_arm_neon()) { \ 103*4bdc9457SAndroid Build Coastguard Worker GTEST_SKIP(); \ 104*4bdc9457SAndroid Build Coastguard Worker } \ 105*4bdc9457SAndroid Build Coastguard Worker } while (0) 106*4bdc9457SAndroid Build Coastguard Worker 107*4bdc9457SAndroid Build Coastguard Worker #define TEST_REQUIRES_ARM_NEON_FP16 \ 108*4bdc9457SAndroid Build Coastguard Worker do { \ 109*4bdc9457SAndroid Build Coastguard Worker if (!cpuinfo_initialize() || !cpuinfo_has_arm_neon_fp16()) { \ 110*4bdc9457SAndroid Build Coastguard Worker GTEST_SKIP(); \ 111*4bdc9457SAndroid Build Coastguard Worker } \ 112*4bdc9457SAndroid Build Coastguard Worker } while (0) 113*4bdc9457SAndroid Build Coastguard Worker 114*4bdc9457SAndroid Build Coastguard Worker #define TEST_REQUIRES_ARM_NEON_FMA \ 115*4bdc9457SAndroid Build Coastguard Worker do { \ 116*4bdc9457SAndroid Build Coastguard Worker if (!cpuinfo_initialize() || !cpuinfo_has_arm_neon_fma()) { \ 117*4bdc9457SAndroid Build Coastguard Worker GTEST_SKIP(); \ 118*4bdc9457SAndroid Build Coastguard Worker } \ 119*4bdc9457SAndroid Build Coastguard Worker } while (0) 120*4bdc9457SAndroid Build Coastguard Worker 121*4bdc9457SAndroid Build Coastguard Worker #define TEST_REQUIRES_ARM_NEON_V8 \ 122*4bdc9457SAndroid Build Coastguard Worker do { \ 123*4bdc9457SAndroid Build Coastguard Worker if (!cpuinfo_initialize() || !cpuinfo_has_arm_neon_v8()) { \ 124*4bdc9457SAndroid Build Coastguard Worker GTEST_SKIP(); \ 125*4bdc9457SAndroid Build Coastguard Worker } \ 126*4bdc9457SAndroid Build Coastguard Worker } while (0) 127*4bdc9457SAndroid Build Coastguard Worker 128*4bdc9457SAndroid Build Coastguard Worker #define TEST_REQUIRES_ARM_NEON_FP16_ARITH \ 129*4bdc9457SAndroid Build Coastguard Worker do { \ 130*4bdc9457SAndroid Build Coastguard Worker if (!cpuinfo_initialize() || !cpuinfo_has_arm_neon_fp16_arith()) { \ 131*4bdc9457SAndroid Build Coastguard Worker GTEST_SKIP(); \ 132*4bdc9457SAndroid Build Coastguard Worker } \ 133*4bdc9457SAndroid Build Coastguard Worker } while (0) 134*4bdc9457SAndroid Build Coastguard Worker 135*4bdc9457SAndroid Build Coastguard Worker #define TEST_REQUIRES_ARM_NEON_BF16 \ 136*4bdc9457SAndroid Build Coastguard Worker do { \ 137*4bdc9457SAndroid Build Coastguard Worker if (!cpuinfo_initialize() || !cpuinfo_has_arm_neon_bf16()) { \ 138*4bdc9457SAndroid Build Coastguard Worker GTEST_SKIP(); \ 139*4bdc9457SAndroid Build Coastguard Worker } \ 140*4bdc9457SAndroid Build Coastguard Worker } while (0) 141*4bdc9457SAndroid Build Coastguard Worker 142*4bdc9457SAndroid Build Coastguard Worker #define TEST_REQUIRES_ARM_NEON_DOT \ 143*4bdc9457SAndroid Build Coastguard Worker do { \ 144*4bdc9457SAndroid Build Coastguard Worker if (!cpuinfo_initialize() || !cpuinfo_has_arm_neon_dot()) { \ 145*4bdc9457SAndroid Build Coastguard Worker GTEST_SKIP(); \ 146*4bdc9457SAndroid Build Coastguard Worker } \ 147*4bdc9457SAndroid Build Coastguard Worker } while (0) 148