1a9de470cSBruce Richardson /* SPDX-License-Identifier: BSD-3-Clause 2a9de470cSBruce Richardson * Copyright(c) 2010-2014 Intel Corporation 3a9de470cSBruce Richardson */ 4a9de470cSBruce Richardson 5a9de470cSBruce Richardson #include <stdio.h> 6a9de470cSBruce Richardson 7a9de470cSBruce Richardson #include <errno.h> 8a9de470cSBruce Richardson #include <stdint.h> 9a9de470cSBruce Richardson #include <rte_cpuflags.h> 10a9de470cSBruce Richardson #include <rte_debug.h> 11a9de470cSBruce Richardson 12a9de470cSBruce Richardson #include "test.h" 13a9de470cSBruce Richardson 14a9de470cSBruce Richardson 15a9de470cSBruce Richardson /* convenience define */ 16a9de470cSBruce Richardson #define CHECK_FOR_FLAG(x) \ 17a9de470cSBruce Richardson result = rte_cpu_get_flag_enabled(x); \ 18a9de470cSBruce Richardson printf("%s\n", cpu_flag_result(result)); \ 19a9de470cSBruce Richardson if (result == -ENOENT) \ 20a9de470cSBruce Richardson return -1; 21a9de470cSBruce Richardson 22a9de470cSBruce Richardson /* 23a9de470cSBruce Richardson * Helper function to display result 24a9de470cSBruce Richardson */ 25a9de470cSBruce Richardson static inline const char * 26a9de470cSBruce Richardson cpu_flag_result(int result) 27a9de470cSBruce Richardson { 28a9de470cSBruce Richardson switch (result) { 29a9de470cSBruce Richardson case 0: 30a9de470cSBruce Richardson return "NOT PRESENT"; 31a9de470cSBruce Richardson case 1: 32a9de470cSBruce Richardson return "OK"; 33a9de470cSBruce Richardson default: 34a9de470cSBruce Richardson return "ERROR"; 35a9de470cSBruce Richardson } 36a9de470cSBruce Richardson } 37a9de470cSBruce Richardson 38a9de470cSBruce Richardson 39a9de470cSBruce Richardson 40a9de470cSBruce Richardson /* 41a9de470cSBruce Richardson * CPUID test 42a9de470cSBruce Richardson * =========== 43a9de470cSBruce Richardson * 44a9de470cSBruce Richardson * - Check flags from different registers with rte_cpu_get_flag_enabled() 45a9de470cSBruce Richardson */ 46a9de470cSBruce Richardson 47a9de470cSBruce Richardson static int 48a9de470cSBruce Richardson test_cpuflags(void) 49a9de470cSBruce Richardson { 50a9de470cSBruce Richardson int result; 51a9de470cSBruce Richardson printf("\nChecking for flags from different registers...\n"); 52a9de470cSBruce Richardson 53a9de470cSBruce Richardson #ifdef RTE_ARCH_PPC_64 54a9de470cSBruce Richardson printf("Check for PPC64:\t\t"); 55a9de470cSBruce Richardson CHECK_FOR_FLAG(RTE_CPUFLAG_PPC64); 56a9de470cSBruce Richardson 57a9de470cSBruce Richardson printf("Check for PPC32:\t\t"); 58a9de470cSBruce Richardson CHECK_FOR_FLAG(RTE_CPUFLAG_PPC32); 59a9de470cSBruce Richardson 60a9de470cSBruce Richardson printf("Check for VSX:\t\t"); 61a9de470cSBruce Richardson CHECK_FOR_FLAG(RTE_CPUFLAG_VSX); 62a9de470cSBruce Richardson 63a9de470cSBruce Richardson printf("Check for DFP:\t\t"); 64a9de470cSBruce Richardson CHECK_FOR_FLAG(RTE_CPUFLAG_DFP); 65a9de470cSBruce Richardson 66a9de470cSBruce Richardson printf("Check for FPU:\t\t"); 67a9de470cSBruce Richardson CHECK_FOR_FLAG(RTE_CPUFLAG_FPU); 68a9de470cSBruce Richardson 69a9de470cSBruce Richardson printf("Check for SMT:\t\t"); 70a9de470cSBruce Richardson CHECK_FOR_FLAG(RTE_CPUFLAG_SMT); 71a9de470cSBruce Richardson 72a9de470cSBruce Richardson printf("Check for MMU:\t\t"); 73a9de470cSBruce Richardson CHECK_FOR_FLAG(RTE_CPUFLAG_MMU); 74a9de470cSBruce Richardson 75a9de470cSBruce Richardson printf("Check for ALTIVEC:\t\t"); 76a9de470cSBruce Richardson CHECK_FOR_FLAG(RTE_CPUFLAG_ALTIVEC); 77a9de470cSBruce Richardson 78a9de470cSBruce Richardson printf("Check for ARCH_2_06:\t\t"); 79a9de470cSBruce Richardson CHECK_FOR_FLAG(RTE_CPUFLAG_ARCH_2_06); 80a9de470cSBruce Richardson 81a9de470cSBruce Richardson printf("Check for ARCH_2_07:\t\t"); 82a9de470cSBruce Richardson CHECK_FOR_FLAG(RTE_CPUFLAG_ARCH_2_07); 83a9de470cSBruce Richardson 84a9de470cSBruce Richardson printf("Check for ICACHE_SNOOP:\t\t"); 85a9de470cSBruce Richardson CHECK_FOR_FLAG(RTE_CPUFLAG_ICACHE_SNOOP); 86a9de470cSBruce Richardson #endif 87a9de470cSBruce Richardson 88e9b97392SRuifeng Wang #if defined(RTE_ARCH_ARM) && defined(RTE_ARCH_32) 89a9de470cSBruce Richardson printf("Check for NEON:\t\t"); 90a9de470cSBruce Richardson CHECK_FOR_FLAG(RTE_CPUFLAG_NEON); 91a9de470cSBruce Richardson #endif 92a9de470cSBruce Richardson 93a9de470cSBruce Richardson #if defined(RTE_ARCH_ARM64) 94a9de470cSBruce Richardson printf("Check for FP:\t\t"); 95a9de470cSBruce Richardson CHECK_FOR_FLAG(RTE_CPUFLAG_FP); 96a9de470cSBruce Richardson 97a9de470cSBruce Richardson printf("Check for ASIMD:\t"); 98a9de470cSBruce Richardson CHECK_FOR_FLAG(RTE_CPUFLAG_NEON); 99a9de470cSBruce Richardson 100a9de470cSBruce Richardson printf("Check for EVTSTRM:\t"); 101a9de470cSBruce Richardson CHECK_FOR_FLAG(RTE_CPUFLAG_EVTSTRM); 102a9de470cSBruce Richardson 103a9de470cSBruce Richardson printf("Check for AES:\t\t"); 104a9de470cSBruce Richardson CHECK_FOR_FLAG(RTE_CPUFLAG_AES); 105a9de470cSBruce Richardson 106a9de470cSBruce Richardson printf("Check for PMULL:\t"); 107a9de470cSBruce Richardson CHECK_FOR_FLAG(RTE_CPUFLAG_PMULL); 108a9de470cSBruce Richardson 109a9de470cSBruce Richardson printf("Check for SHA1:\t\t"); 110a9de470cSBruce Richardson CHECK_FOR_FLAG(RTE_CPUFLAG_SHA1); 111a9de470cSBruce Richardson 112a9de470cSBruce Richardson printf("Check for SHA2:\t\t"); 113a9de470cSBruce Richardson CHECK_FOR_FLAG(RTE_CPUFLAG_SHA2); 114a9de470cSBruce Richardson 115a9de470cSBruce Richardson printf("Check for CRC32:\t"); 116a9de470cSBruce Richardson CHECK_FOR_FLAG(RTE_CPUFLAG_CRC32); 117a9de470cSBruce Richardson 118a9de470cSBruce Richardson printf("Check for ATOMICS:\t"); 119a9de470cSBruce Richardson CHECK_FOR_FLAG(RTE_CPUFLAG_ATOMICS); 120d9739192SWei Hu (Xavier) 121d9739192SWei Hu (Xavier) printf("Check for SVE:\t\t"); 122d9739192SWei Hu (Xavier) CHECK_FOR_FLAG(RTE_CPUFLAG_SVE); 123d9739192SWei Hu (Xavier) 124d9739192SWei Hu (Xavier) printf("Check for SVE2:\t\t"); 125d9739192SWei Hu (Xavier) CHECK_FOR_FLAG(RTE_CPUFLAG_SVE2); 126d9739192SWei Hu (Xavier) 127d9739192SWei Hu (Xavier) printf("Check for SVEAES:\t"); 128d9739192SWei Hu (Xavier) CHECK_FOR_FLAG(RTE_CPUFLAG_SVEAES); 129d9739192SWei Hu (Xavier) 130d9739192SWei Hu (Xavier) printf("Check for SVEPMULL:\t"); 131d9739192SWei Hu (Xavier) CHECK_FOR_FLAG(RTE_CPUFLAG_SVEPMULL); 132d9739192SWei Hu (Xavier) 133d9739192SWei Hu (Xavier) printf("Check for SVEBITPERM:\t"); 134d9739192SWei Hu (Xavier) CHECK_FOR_FLAG(RTE_CPUFLAG_SVEBITPERM); 135d9739192SWei Hu (Xavier) 136d9739192SWei Hu (Xavier) printf("Check for SVESHA3:\t"); 137d9739192SWei Hu (Xavier) CHECK_FOR_FLAG(RTE_CPUFLAG_SVESHA3); 138d9739192SWei Hu (Xavier) 139d9739192SWei Hu (Xavier) printf("Check for SVESM4:\t"); 140d9739192SWei Hu (Xavier) CHECK_FOR_FLAG(RTE_CPUFLAG_SVESM4); 141d9739192SWei Hu (Xavier) 142d9739192SWei Hu (Xavier) printf("Check for FLAGM2:\t"); 143d9739192SWei Hu (Xavier) CHECK_FOR_FLAG(RTE_CPUFLAG_FLAGM2); 144d9739192SWei Hu (Xavier) 145d9739192SWei Hu (Xavier) printf("Check for FRINT:\t"); 146d9739192SWei Hu (Xavier) CHECK_FOR_FLAG(RTE_CPUFLAG_FRINT); 147d9739192SWei Hu (Xavier) 148d9739192SWei Hu (Xavier) printf("Check for SVEI8MM:\t"); 149d9739192SWei Hu (Xavier) CHECK_FOR_FLAG(RTE_CPUFLAG_SVEI8MM); 150d9739192SWei Hu (Xavier) 151d9739192SWei Hu (Xavier) printf("Check for SVEF32MM:\t"); 152d9739192SWei Hu (Xavier) CHECK_FOR_FLAG(RTE_CPUFLAG_SVEF32MM); 153d9739192SWei Hu (Xavier) 154d9739192SWei Hu (Xavier) printf("Check for SVEF64MM:\t"); 155d9739192SWei Hu (Xavier) CHECK_FOR_FLAG(RTE_CPUFLAG_SVEF64MM); 156d9739192SWei Hu (Xavier) 157d9739192SWei Hu (Xavier) printf("Check for SVEBF16:\t"); 158d9739192SWei Hu (Xavier) CHECK_FOR_FLAG(RTE_CPUFLAG_SVEBF16); 159*2f1a90f0SWathsala Vithanage 160*2f1a90f0SWathsala Vithanage printf("Check for WFXT:\t"); 161*2f1a90f0SWathsala Vithanage CHECK_FOR_FLAG(RTE_CPUFLAG_WFXT); 162a9de470cSBruce Richardson #endif 163a9de470cSBruce Richardson 164a9de470cSBruce Richardson #if defined(RTE_ARCH_X86_64) || defined(RTE_ARCH_I686) 165a9de470cSBruce Richardson printf("Check for SSE:\t\t"); 166a9de470cSBruce Richardson CHECK_FOR_FLAG(RTE_CPUFLAG_SSE); 167a9de470cSBruce Richardson 168a9de470cSBruce Richardson printf("Check for SSE2:\t\t"); 169a9de470cSBruce Richardson CHECK_FOR_FLAG(RTE_CPUFLAG_SSE2); 170a9de470cSBruce Richardson 171a9de470cSBruce Richardson printf("Check for SSE3:\t\t"); 172a9de470cSBruce Richardson CHECK_FOR_FLAG(RTE_CPUFLAG_SSE3); 173a9de470cSBruce Richardson 174a9de470cSBruce Richardson printf("Check for SSE4.1:\t"); 175a9de470cSBruce Richardson CHECK_FOR_FLAG(RTE_CPUFLAG_SSE4_1); 176a9de470cSBruce Richardson 177a9de470cSBruce Richardson printf("Check for SSE4.2:\t"); 178a9de470cSBruce Richardson CHECK_FOR_FLAG(RTE_CPUFLAG_SSE4_2); 179a9de470cSBruce Richardson 180a9de470cSBruce Richardson printf("Check for AVX:\t\t"); 181a9de470cSBruce Richardson CHECK_FOR_FLAG(RTE_CPUFLAG_AVX); 182a9de470cSBruce Richardson 183a9de470cSBruce Richardson printf("Check for AVX2:\t\t"); 184a9de470cSBruce Richardson CHECK_FOR_FLAG(RTE_CPUFLAG_AVX2); 185a9de470cSBruce Richardson 186a9de470cSBruce Richardson printf("Check for AVX512F:\t"); 187a9de470cSBruce Richardson CHECK_FOR_FLAG(RTE_CPUFLAG_AVX512F); 188a9de470cSBruce Richardson 189a9de470cSBruce Richardson printf("Check for TRBOBST:\t"); 190a9de470cSBruce Richardson CHECK_FOR_FLAG(RTE_CPUFLAG_TRBOBST); 191a9de470cSBruce Richardson 192a9de470cSBruce Richardson printf("Check for ENERGY_EFF:\t"); 193a9de470cSBruce Richardson CHECK_FOR_FLAG(RTE_CPUFLAG_ENERGY_EFF); 194a9de470cSBruce Richardson 195a9de470cSBruce Richardson printf("Check for LAHF_SAHF:\t"); 196a9de470cSBruce Richardson CHECK_FOR_FLAG(RTE_CPUFLAG_LAHF_SAHF); 197a9de470cSBruce Richardson 198a9de470cSBruce Richardson printf("Check for 1GB_PG:\t"); 199a9de470cSBruce Richardson CHECK_FOR_FLAG(RTE_CPUFLAG_1GB_PG); 200a9de470cSBruce Richardson 201a9de470cSBruce Richardson printf("Check for INVTSC:\t"); 202a9de470cSBruce Richardson CHECK_FOR_FLAG(RTE_CPUFLAG_INVTSC); 203a9de470cSBruce Richardson #endif 204a9de470cSBruce Richardson 2053dea1b26SMichal Mazurek #if defined(RTE_ARCH_RISCV) 2063dea1b26SMichal Mazurek 2073dea1b26SMichal Mazurek printf("Check for RISCV_ISA_A:\t"); 2083dea1b26SMichal Mazurek CHECK_FOR_FLAG(RTE_CPUFLAG_RISCV_ISA_A); 2093dea1b26SMichal Mazurek 2103dea1b26SMichal Mazurek printf("Check for RISCV_ISA_B:\t"); 2113dea1b26SMichal Mazurek CHECK_FOR_FLAG(RTE_CPUFLAG_RISCV_ISA_B); 2123dea1b26SMichal Mazurek 2133dea1b26SMichal Mazurek printf("Check for RISCV_ISA_C:\t"); 2143dea1b26SMichal Mazurek CHECK_FOR_FLAG(RTE_CPUFLAG_RISCV_ISA_C); 2153dea1b26SMichal Mazurek 2163dea1b26SMichal Mazurek printf("Check for RISCV_ISA_D:\t"); 2173dea1b26SMichal Mazurek CHECK_FOR_FLAG(RTE_CPUFLAG_RISCV_ISA_D); 2183dea1b26SMichal Mazurek 2193dea1b26SMichal Mazurek printf("Check for RISCV_ISA_E:\t"); 2203dea1b26SMichal Mazurek CHECK_FOR_FLAG(RTE_CPUFLAG_RISCV_ISA_E); 2213dea1b26SMichal Mazurek 2223dea1b26SMichal Mazurek printf("Check for RISCV_ISA_F:\t"); 2233dea1b26SMichal Mazurek CHECK_FOR_FLAG(RTE_CPUFLAG_RISCV_ISA_F); 2243dea1b26SMichal Mazurek 2253dea1b26SMichal Mazurek printf("Check for RISCV_ISA_G:\t"); 2263dea1b26SMichal Mazurek CHECK_FOR_FLAG(RTE_CPUFLAG_RISCV_ISA_G); 2273dea1b26SMichal Mazurek 2283dea1b26SMichal Mazurek printf("Check for RISCV_ISA_H:\t"); 2293dea1b26SMichal Mazurek CHECK_FOR_FLAG(RTE_CPUFLAG_RISCV_ISA_H); 2303dea1b26SMichal Mazurek 2313dea1b26SMichal Mazurek printf("Check for RISCV_ISA_I:\t"); 2323dea1b26SMichal Mazurek CHECK_FOR_FLAG(RTE_CPUFLAG_RISCV_ISA_I); 2333dea1b26SMichal Mazurek 2343dea1b26SMichal Mazurek printf("Check for RISCV_ISA_J:\t"); 2353dea1b26SMichal Mazurek CHECK_FOR_FLAG(RTE_CPUFLAG_RISCV_ISA_J); 2363dea1b26SMichal Mazurek 2373dea1b26SMichal Mazurek printf("Check for RISCV_ISA_K:\t"); 2383dea1b26SMichal Mazurek CHECK_FOR_FLAG(RTE_CPUFLAG_RISCV_ISA_K); 2393dea1b26SMichal Mazurek 2403dea1b26SMichal Mazurek printf("Check for RISCV_ISA_L:\t"); 2413dea1b26SMichal Mazurek CHECK_FOR_FLAG(RTE_CPUFLAG_RISCV_ISA_L); 2423dea1b26SMichal Mazurek 2433dea1b26SMichal Mazurek printf("Check for RISCV_ISA_M:\t"); 2443dea1b26SMichal Mazurek CHECK_FOR_FLAG(RTE_CPUFLAG_RISCV_ISA_M); 2453dea1b26SMichal Mazurek 2463dea1b26SMichal Mazurek printf("Check for RISCV_ISA_N:\t"); 2473dea1b26SMichal Mazurek CHECK_FOR_FLAG(RTE_CPUFLAG_RISCV_ISA_N); 2483dea1b26SMichal Mazurek 2493dea1b26SMichal Mazurek printf("Check for RISCV_ISA_O:\t"); 2503dea1b26SMichal Mazurek CHECK_FOR_FLAG(RTE_CPUFLAG_RISCV_ISA_O); 2513dea1b26SMichal Mazurek 2523dea1b26SMichal Mazurek printf("Check for RISCV_ISA_P:\t"); 2533dea1b26SMichal Mazurek CHECK_FOR_FLAG(RTE_CPUFLAG_RISCV_ISA_P); 2543dea1b26SMichal Mazurek 2553dea1b26SMichal Mazurek printf("Check for RISCV_ISA_Q:\t"); 2563dea1b26SMichal Mazurek CHECK_FOR_FLAG(RTE_CPUFLAG_RISCV_ISA_Q); 2573dea1b26SMichal Mazurek 2583dea1b26SMichal Mazurek printf("Check for RISCV_ISA_R:\t"); 2593dea1b26SMichal Mazurek CHECK_FOR_FLAG(RTE_CPUFLAG_RISCV_ISA_R); 2603dea1b26SMichal Mazurek 2613dea1b26SMichal Mazurek printf("Check for RISCV_ISA_S:\t"); 2623dea1b26SMichal Mazurek CHECK_FOR_FLAG(RTE_CPUFLAG_RISCV_ISA_S); 2633dea1b26SMichal Mazurek 2643dea1b26SMichal Mazurek printf("Check for RISCV_ISA_T:\t"); 2653dea1b26SMichal Mazurek CHECK_FOR_FLAG(RTE_CPUFLAG_RISCV_ISA_T); 2663dea1b26SMichal Mazurek 2673dea1b26SMichal Mazurek printf("Check for RISCV_ISA_U:\t"); 2683dea1b26SMichal Mazurek CHECK_FOR_FLAG(RTE_CPUFLAG_RISCV_ISA_U); 2693dea1b26SMichal Mazurek 2703dea1b26SMichal Mazurek printf("Check for RISCV_ISA_V:\t"); 2713dea1b26SMichal Mazurek CHECK_FOR_FLAG(RTE_CPUFLAG_RISCV_ISA_V); 2723dea1b26SMichal Mazurek 2733dea1b26SMichal Mazurek printf("Check for RISCV_ISA_W:\t"); 2743dea1b26SMichal Mazurek CHECK_FOR_FLAG(RTE_CPUFLAG_RISCV_ISA_W); 2753dea1b26SMichal Mazurek 2763dea1b26SMichal Mazurek printf("Check for RISCV_ISA_X:\t"); 2773dea1b26SMichal Mazurek CHECK_FOR_FLAG(RTE_CPUFLAG_RISCV_ISA_X); 2783dea1b26SMichal Mazurek 2793dea1b26SMichal Mazurek printf("Check for RISCV_ISA_Y:\t"); 2803dea1b26SMichal Mazurek CHECK_FOR_FLAG(RTE_CPUFLAG_RISCV_ISA_Y); 2813dea1b26SMichal Mazurek 2823dea1b26SMichal Mazurek printf("Check for RISCV_ISA_Z:\t"); 2833dea1b26SMichal Mazurek CHECK_FOR_FLAG(RTE_CPUFLAG_RISCV_ISA_Z); 2843dea1b26SMichal Mazurek #endif 2853dea1b26SMichal Mazurek 286a8fc1e39SMin Zhou #if defined(RTE_ARCH_LOONGARCH) 287a8fc1e39SMin Zhou printf("Check for CPUCFG:\t"); 288a8fc1e39SMin Zhou CHECK_FOR_FLAG(RTE_CPUFLAG_CPUCFG); 289a8fc1e39SMin Zhou 290a8fc1e39SMin Zhou printf("Check for LAM:\t\t"); 291a8fc1e39SMin Zhou CHECK_FOR_FLAG(RTE_CPUFLAG_LAM); 292a8fc1e39SMin Zhou 293a8fc1e39SMin Zhou printf("Check for UAL:\t\t"); 294a8fc1e39SMin Zhou CHECK_FOR_FLAG(RTE_CPUFLAG_UAL); 295a8fc1e39SMin Zhou 296a8fc1e39SMin Zhou printf("Check for FPU:\t\t"); 297a8fc1e39SMin Zhou CHECK_FOR_FLAG(RTE_CPUFLAG_FPU); 298a8fc1e39SMin Zhou 299a8fc1e39SMin Zhou printf("Check for LSX:\t\t"); 300a8fc1e39SMin Zhou CHECK_FOR_FLAG(RTE_CPUFLAG_LSX); 301a8fc1e39SMin Zhou 302a8fc1e39SMin Zhou printf("Check for LASX:\t\t"); 303a8fc1e39SMin Zhou CHECK_FOR_FLAG(RTE_CPUFLAG_LASX); 304a8fc1e39SMin Zhou 305a8fc1e39SMin Zhou printf("Check for CRC32:\t"); 306a8fc1e39SMin Zhou CHECK_FOR_FLAG(RTE_CPUFLAG_CRC32); 307a8fc1e39SMin Zhou 308a8fc1e39SMin Zhou printf("Check for COMPLEX:\t"); 309a8fc1e39SMin Zhou CHECK_FOR_FLAG(RTE_CPUFLAG_COMPLEX); 310a8fc1e39SMin Zhou 311a8fc1e39SMin Zhou printf("Check for CRYPTO:\t"); 312a8fc1e39SMin Zhou CHECK_FOR_FLAG(RTE_CPUFLAG_CRYPTO); 313a8fc1e39SMin Zhou 314a8fc1e39SMin Zhou printf("Check for LVZ:\t\t"); 315a8fc1e39SMin Zhou CHECK_FOR_FLAG(RTE_CPUFLAG_LVZ); 316a8fc1e39SMin Zhou 317a8fc1e39SMin Zhou printf("Check for LBT_X86:\t"); 318a8fc1e39SMin Zhou CHECK_FOR_FLAG(RTE_CPUFLAG_LBT_X86); 319a8fc1e39SMin Zhou 320a8fc1e39SMin Zhou printf("Check for LBT_ARM:\t"); 321a8fc1e39SMin Zhou CHECK_FOR_FLAG(RTE_CPUFLAG_LBT_ARM); 322a8fc1e39SMin Zhou 323a8fc1e39SMin Zhou printf("Check for LBT_MIPS:\t"); 324a8fc1e39SMin Zhou CHECK_FOR_FLAG(RTE_CPUFLAG_LBT_MIPS); 325a8fc1e39SMin Zhou #endif 326a8fc1e39SMin Zhou 327a9de470cSBruce Richardson return 0; 328a9de470cSBruce Richardson } 329a9de470cSBruce Richardson 330e0a8442cSBruce Richardson REGISTER_FAST_TEST(cpuflags_autotest, true, true, test_cpuflags); 331