aboutsummaryrefslogtreecommitdiff
path: root/tools/isa-info.c
diff options
context:
space:
mode:
authorMarat Dukhan <marat@fb.com>2017-09-26 18:35:52 -0700
committerMarat Dukhan <marat@fb.com>2017-09-26 18:35:52 -0700
commit3040197bc3eb13796351e74a2e7a6f2bcc081752 (patch)
tree2387e26e11be3307d931e4741d2f3ae559e0bb09 /tools/isa-info.c
parent2b24889379602c17d2448c891e25c76d2b039ffc (diff)
downloadcpuinfo-3040197bc3eb13796351e74a2e7a6f2bcc081752.tar.gz
Major API refactoring
Diffstat (limited to 'tools/isa-info.c')
-rw-r--r--tools/isa-info.c219
1 files changed, 100 insertions, 119 deletions
diff --git a/tools/isa-info.c b/tools/isa-info.c
index a35fdf8..97d1e6d 100644
--- a/tools/isa-info.c
+++ b/tools/isa-info.c
@@ -9,164 +9,145 @@ int main(int argc, char** argv) {
printf("Scalar instructions:\n");
#if CPUINFO_ARCH_X86
- printf("\tx87 FPU: %s\n", cpuinfo_isa.fpu ? "yes" : "no");
- printf("\tCMOV: %s\n", cpuinfo_isa.cmov ? "yes" : "no");
+ printf("\tx87 FPU: %s\n", cpuinfo_has_x86_fpu() ? "yes" : "no");
+ printf("\tCMOV: %s\n", cpuinfo_has_x86_cmov() ? "yes" : "no");
#endif
-#if CPUINFO_ARCH_X86_64
- printf("\tLAHF/SAHF: %s\n", cpuinfo_isa.lahf_sahf ? "yes" : "no");
-#endif
- printf("\tLZCNT: %s\n", cpuinfo_isa.lzcnt ? "yes" : "no");
- printf("\tPOPCNT: %s\n", cpuinfo_isa.popcnt ? "yes" : "no");
- printf("\tTBM: %s\n", cpuinfo_isa.tbm ? "yes" : "no");
- printf("\tBMI: %s\n", cpuinfo_isa.bmi ? "yes" : "no");
- printf("\tBMI2: %s\n", cpuinfo_isa.bmi2 ? "yes" : "no");
- printf("\tADCX/ADOX: %s\n", cpuinfo_isa.adx ? "yes" : "no");
+ printf("\tLAHF/SAHF: %s\n", cpuinfo_has_x86_lahf_sahf() ? "yes" : "no");
+ printf("\tLZCNT: %s\n", cpuinfo_has_x86_lzcnt() ? "yes" : "no");
+ printf("\tPOPCNT: %s\n", cpuinfo_has_x86_popcnt() ? "yes" : "no");
+ printf("\tTBM: %s\n", cpuinfo_has_x86_tbm() ? "yes" : "no");
+ printf("\tBMI: %s\n", cpuinfo_has_x86_bmi() ? "yes" : "no");
+ printf("\tBMI2: %s\n", cpuinfo_has_x86_bmi2() ? "yes" : "no");
+ printf("\tADCX/ADOX: %s\n", cpuinfo_has_x86_adx() ? "yes" : "no");
printf("Memory instructions:\n");
- printf("\tMOVBE: %s\n", cpuinfo_isa.movbe ? "yes" : "no");
- printf("\tPREFETCH: %s\n", cpuinfo_isa.prefetch ? "yes" : "no");
- printf("\tPREFETCHW: %s\n", cpuinfo_isa.prefetchw ? "yes" : "no");
- printf("\tPREFETCHWT1: %s\n", cpuinfo_isa.prefetchwt1 ? "yes" : "no");
- printf("\tCLZERO: %s\n", cpuinfo_isa.clzero ? "yes" : "no");
+ printf("\tMOVBE: %s\n", cpuinfo_has_x86_movbe() ? "yes" : "no");
+ printf("\tPREFETCH: %s\n", cpuinfo_has_x86_prefetch() ? "yes" : "no");
+ printf("\tPREFETCHW: %s\n", cpuinfo_has_x86_prefetchw() ? "yes" : "no");
+ printf("\tPREFETCHWT1: %s\n", cpuinfo_has_x86_prefetchwt1() ? "yes" : "no");
+ printf("\tCLZERO: %s\n", cpuinfo_has_x86_clzero() ? "yes" : "no");
printf("SIMD extensions:\n");
-#if CPUINFO_ARCH_X86
- printf("\tMMX: %s\n", cpuinfo_isa.mmx ? "yes" : "no");
- printf("\tMMX+: %s\n", cpuinfo_isa.mmx_plus ? "yes" : "no");
- printf("\tEMMX: %s\n", cpuinfo_isa.emmx ? "yes" : "no");
-#endif
- printf("\t3dnow!: %s\n", cpuinfo_isa.three_d_now ? "yes" : "no");
- printf("\t3dnow!+: %s\n", cpuinfo_isa.three_d_now_plus ? "yes" : "no");
-#if CPUINFO_ARCH_X86
- printf("\t3dnow! Geode: %s\n", cpuinfo_isa.three_d_now_geode ? "yes" : "no");
- printf("\tDAZ: %s\n", cpuinfo_isa.daz ? "yes" : "no");
- printf("\tSSE: %s\n", cpuinfo_isa.sse ? "yes" : "no");
- printf("\tSSE2: %s\n", cpuinfo_isa.sse2 ? "yes" : "no");
-#endif
- printf("\tSSE3: %s\n", cpuinfo_isa.sse3 ? "yes" : "no");
- printf("\tSSSE3: %s\n", cpuinfo_isa.ssse3 ? "yes" : "no");
- printf("\tSSE4.1: %s\n", cpuinfo_isa.sse4_1 ? "yes" : "no");
- printf("\tSSE4.2: %s\n", cpuinfo_isa.sse4_2 ? "yes" : "no");
- printf("\tSSE4a: %s\n", cpuinfo_isa.sse4a ? "yes" : "no");
- printf("\tMisaligned SSE: %s\n", cpuinfo_isa.misaligned_sse ? "yes" : "no");
- printf("\tAVX: %s\n", cpuinfo_isa.avx ? "yes" : "no");
- printf("\tFMA3: %s\n", cpuinfo_isa.fma3 ? "yes" : "no");
- printf("\tFMA4: %s\n", cpuinfo_isa.fma4 ? "yes" : "no");
- printf("\tXOP: %s\n", cpuinfo_isa.xop ? "yes" : "no");
- printf("\tF16C: %s\n", cpuinfo_isa.f16c ? "yes" : "no");
- printf("\tAVX2: %s\n", cpuinfo_isa.avx2 ? "yes" : "no");
- printf("\tAVX512F: %s\n", cpuinfo_isa.avx512f ? "yes" : "no");
- printf("\tAVX512PF: %s\n", cpuinfo_isa.avx512pf ? "yes" : "no");
- printf("\tAVX512ER: %s\n", cpuinfo_isa.avx512er ? "yes" : "no");
- printf("\tAVX512CD: %s\n", cpuinfo_isa.avx512cd ? "yes" : "no");
- printf("\tAVX512DQ: %s\n", cpuinfo_isa.avx512dq ? "yes" : "no");
- printf("\tAVX512BW: %s\n", cpuinfo_isa.avx512bw ? "yes" : "no");
- printf("\tAVX512VL: %s\n", cpuinfo_isa.avx512vl ? "yes" : "no");
- printf("\tAVX512IFMA: %s\n", cpuinfo_isa.avx512ifma ? "yes" : "no");
- printf("\tAVX512VBMI: %s\n", cpuinfo_isa.avx512vbmi ? "yes" : "no");
- printf("\tAVX512VPOPCNTDQ: %s\n", cpuinfo_isa.avx512vpopcntdq ? "yes" : "no");
- printf("\tAVX512_4VNNIW: %s\n", cpuinfo_isa.avx512_4vnniw ? "yes" : "no");
- printf("\tAVX512_4FMAPS: %s\n", cpuinfo_isa.avx512_4fmaps ? "yes" : "no");
+ printf("\tMMX: %s\n", cpuinfo_has_x86_mmx() ? "yes" : "no");
+ printf("\tMMX+: %s\n", cpuinfo_has_x86_mmx_plus() ? "yes" : "no");
+ printf("\t3dnow!: %s\n", cpuinfo_has_x86_3dnow() ? "yes" : "no");
+ printf("\t3dnow!+: %s\n", cpuinfo_has_x86_3dnow_plus() ? "yes" : "no");
+ printf("\t3dnow! Geode: %s\n", cpuinfo_has_x86_3dnow_geode() ? "yes" : "no");
+ printf("\tDAZ: %s\n", cpuinfo_has_x86_daz() ? "yes" : "no");
+ printf("\tSSE: %s\n", cpuinfo_has_x86_sse() ? "yes" : "no");
+ printf("\tSSE2: %s\n", cpuinfo_has_x86_sse2() ? "yes" : "no");
+ printf("\tSSE3: %s\n", cpuinfo_has_x86_sse3() ? "yes" : "no");
+ printf("\tSSSE3: %s\n", cpuinfo_has_x86_ssse3() ? "yes" : "no");
+ printf("\tSSE4.1: %s\n", cpuinfo_has_x86_sse4_1() ? "yes" : "no");
+ printf("\tSSE4.2: %s\n", cpuinfo_has_x86_sse4_2() ? "yes" : "no");
+ printf("\tSSE4a: %s\n", cpuinfo_has_x86_sse4a() ? "yes" : "no");
+ printf("\tMisaligned SSE: %s\n", cpuinfo_has_x86_misaligned_sse() ? "yes" : "no");
+ printf("\tAVX: %s\n", cpuinfo_has_x86_avx() ? "yes" : "no");
+ printf("\tFMA3: %s\n", cpuinfo_has_x86_fma3() ? "yes" : "no");
+ printf("\tFMA4: %s\n", cpuinfo_has_x86_fma4() ? "yes" : "no");
+ printf("\tXOP: %s\n", cpuinfo_has_x86_xop() ? "yes" : "no");
+ printf("\tF16C: %s\n", cpuinfo_has_x86_f16c() ? "yes" : "no");
+ printf("\tAVX2: %s\n", cpuinfo_has_x86_avx2() ? "yes" : "no");
+ printf("\tAVX512F: %s\n", cpuinfo_has_x86_avx512f() ? "yes" : "no");
+ printf("\tAVX512PF: %s\n", cpuinfo_has_x86_avx512pf() ? "yes" : "no");
+ printf("\tAVX512ER: %s\n", cpuinfo_has_x86_avx512er() ? "yes" : "no");
+ printf("\tAVX512CD: %s\n", cpuinfo_has_x86_avx512cd() ? "yes" : "no");
+ printf("\tAVX512DQ: %s\n", cpuinfo_has_x86_avx512dq() ? "yes" : "no");
+ printf("\tAVX512BW: %s\n", cpuinfo_has_x86_avx512bw() ? "yes" : "no");
+ printf("\tAVX512VL: %s\n", cpuinfo_has_x86_avx512vl() ? "yes" : "no");
+ printf("\tAVX512IFMA: %s\n", cpuinfo_has_x86_avx512ifma() ? "yes" : "no");
+ printf("\tAVX512VBMI: %s\n", cpuinfo_has_x86_avx512vbmi() ? "yes" : "no");
+ printf("\tAVX512VPOPCNTDQ: %s\n", cpuinfo_has_x86_avx512vpopcntdq() ? "yes" : "no");
+ printf("\tAVX512_4VNNIW: %s\n", cpuinfo_has_x86_avx512_4vnniw() ? "yes" : "no");
+ printf("\tAVX512_4FMAPS: %s\n", cpuinfo_has_x86_avx512_4fmaps() ? "yes" : "no");
printf("Multi-threading extensions:\n");
- printf("\tMONITOR/MWAIT: %s\n", cpuinfo_isa.mwait ? "yes" : "no");
- printf("\tMONITORX/MWAITX: %s\n", cpuinfo_isa.mwaitx ? "yes" : "no");
+ printf("\tMONITOR/MWAIT: %s\n", cpuinfo_has_x86_mwait() ? "yes" : "no");
+ printf("\tMONITORX/MWAITX: %s\n", cpuinfo_has_x86_mwaitx() ? "yes" : "no");
#if CPUINFO_ARCH_X86
- printf("\tCMPXCHG8B: %s\n", cpuinfo_isa.cmpxchg8b ? "yes" : "no");
+ printf("\tCMPXCHG8B: %s\n", cpuinfo_has_x86_cmpxchg8b() ? "yes" : "no");
#endif
- printf("\tCMPXCHG16B: %s\n", cpuinfo_isa.cmpxchg16b ? "yes" : "no");
- printf("\tHLE: %s\n", cpuinfo_isa.hle ? "yes" : "no");
- printf("\tRTM: %s\n", cpuinfo_isa.rtm ? "yes" : "no");
- printf("\tXTEST: %s\n", cpuinfo_isa.xtest ? "yes" : "no");
- printf("\tRDPID: %s\n", cpuinfo_isa.rdpid ? "yes" : "no");
+ printf("\tCMPXCHG16B: %s\n", cpuinfo_has_x86_cmpxchg16b() ? "yes" : "no");
+ printf("\tHLE: %s\n", cpuinfo_has_x86_hle() ? "yes" : "no");
+ printf("\tRTM: %s\n", cpuinfo_has_x86_rtm() ? "yes" : "no");
+ printf("\tXTEST: %s\n", cpuinfo_has_x86_xtest() ? "yes" : "no");
+ printf("\tRDPID: %s\n", cpuinfo_has_x86_rdpid() ? "yes" : "no");
printf("Cryptography extensions:\n");
- printf("\tAES: %s\n", cpuinfo_isa.aes ? "yes" : "no");
- printf("\tPCLMULQDQ: %s\n", cpuinfo_isa.pclmulqdq ? "yes" : "no");
- printf("\tRDRAND: %s\n", cpuinfo_isa.rdrand ? "yes" : "no");
- printf("\tRDSEED: %s\n", cpuinfo_isa.rdseed ? "yes" : "no");
- printf("\tSHA: %s\n", cpuinfo_isa.sha ? "yes" : "no");
- printf("\tPadlock RNG: %s\n", cpuinfo_isa.rng ? "yes" : "no");
- printf("\tPadlock ACE: %s\n", cpuinfo_isa.ace ? "yes" : "no");
- printf("\tPadlock ACE 2: %s\n", cpuinfo_isa.ace2 ? "yes" : "no");
- printf("\tPadlock PHE: %s\n", cpuinfo_isa.phe ? "yes" : "no");
- printf("\tPadlock PMM: %s\n", cpuinfo_isa.pmm ? "yes" : "no");
+ printf("\tAES: %s\n", cpuinfo_has_x86_aes() ? "yes" : "no");
+ printf("\tPCLMULQDQ: %s\n", cpuinfo_has_x86_pclmulqdq() ? "yes" : "no");
+ printf("\tRDRAND: %s\n", cpuinfo_has_x86_rdrand() ? "yes" : "no");
+ printf("\tRDSEED: %s\n", cpuinfo_has_x86_rdseed() ? "yes" : "no");
+ printf("\tSHA: %s\n", cpuinfo_has_x86_sha() ? "yes" : "no");
printf("Profiling instructions:\n");
#if CPUINFO_ARCH_X86
- printf("\tRDTSC: %s\n", cpuinfo_isa.rdtsc ? "yes" : "no");
+ printf("\tRDTSC: %s\n", cpuinfo_has_x86_rdtsc() ? "yes" : "no");
#endif
- printf("\tRDTSCP: %s\n", cpuinfo_isa.rdtscp ? "yes" : "no");
- printf("\tLWP: %s\n", cpuinfo_isa.lwp ? "yes" : "no");
- printf("\tMPX: %s\n", cpuinfo_isa.mpx ? "yes" : "no");
+ printf("\tRDTSCP: %s\n", cpuinfo_has_x86_rdtscp() ? "yes" : "no");
+ printf("\tMPX: %s\n", cpuinfo_has_x86_mpx() ? "yes" : "no");
printf("System instructions:\n");
- printf("\tSYSENTER/SYSEXIT: %s\n", cpuinfo_isa.sysenter ? "yes" : "no");
-#if CPUINFO_ARCH_X86
- printf("\tSYSCALL/SYSRET: %s\n", cpuinfo_isa.syscall ? "yes" : "no");
-#endif
- printf("\tRDMSR/WRMSR: %s\n", cpuinfo_isa.msr ? "yes" : "no");
- printf("\tCLFLUSH: %s\n", cpuinfo_isa.clflush ? "yes" : "no");
- printf("\tCLFLUSHOPT: %s\n", cpuinfo_isa.clflushopt ? "yes" : "no");
- printf("\tCLWB: %s\n", cpuinfo_isa.clwb ? "yes" : "no");
- printf("\tFXSAVE/FXSTOR: %s\n", cpuinfo_isa.fxsave ? "yes" : "no");
- printf("\tXSAVE/XSTOR: %s\n", cpuinfo_isa.xsave ? "yes" : "no");
- printf("\tFS/GS Base: %s\n", cpuinfo_isa.fs_gs_base ? "yes" : "no");
+ printf("\tCLWB: %s\n", cpuinfo_has_x86_clwb() ? "yes" : "no");
+ printf("\tFXSAVE/FXSTOR: %s\n", cpuinfo_has_x86_fxsave() ? "yes" : "no");
+ printf("\tXSAVE/XSTOR: %s\n", cpuinfo_has_x86_xsave() ? "yes" : "no");
#endif /* CPUINFO_ARCH_X86 || CPUINFO_ARCH_X86_64 */
#if CPUINFO_ARCH_ARM
printf("Instruction sets:\n");
- printf("\tThumb: %s\n", cpuinfo_isa.thumb ? "yes" : "no");
- printf("\tThumb 2: %s\n", cpuinfo_isa.thumb2 ? "yes" : "no");
- printf("\tThumb EE: %s\n", cpuinfo_isa.thumbee ? "yes" : "no");
- printf("\tJazelle: %s\n", cpuinfo_isa.jazelle ? "yes" : "no");
- printf("\tARMv5E: %s\n", cpuinfo_isa.armv5e ? "yes" : "no");
- printf("\tARMv6: %s\n", cpuinfo_isa.armv6 ? "yes" : "no");
- printf("\tARMv6-K: %s\n", cpuinfo_isa.armv6k ? "yes" : "no");
- printf("\tARMv7: %s\n", cpuinfo_isa.armv7 ? "yes" : "no");
- printf("\tARMv7 MP: %s\n", cpuinfo_isa.armv7mp ? "yes" : "no");
- printf("\tIDIV: %s\n", cpuinfo_isa.idiv ? "yes" : "no");
+ printf("\tThumb: %s\n", cpuinfo_has_arm_thumb() ? "yes" : "no");
+ printf("\tThumb 2: %s\n", cpuinfo_has_arm_thumb2() ? "yes" : "no");
+ printf("\tARMv5E: %s\n", cpuinfo_has_arm_v5e() ? "yes" : "no");
+ printf("\tARMv6: %s\n", cpuinfo_has_arm_v6() ? "yes" : "no");
+ printf("\tARMv6-K: %s\n", cpuinfo_has_arm_v6k() ? "yes" : "no");
+ printf("\tARMv7: %s\n", cpuinfo_has_arm_v7() ? "yes" : "no");
+ printf("\tARMv7 MP: %s\n", cpuinfo_has_arm_v7mp() ? "yes" : "no");
+ printf("\tIDIV: %s\n", cpuinfo_has_arm_idiv() ? "yes" : "no");
printf("Floating-Point support:\n");
- printf("\tVFPv2: %s\n", cpuinfo_isa.vfpv2 ? "yes" : "no");
- printf("\tVFPv3: %s\n", cpuinfo_isa.vfpv3 ? "yes" : "no");
- printf("\tD32: %s\n", cpuinfo_isa.d32 ? "yes" : "no");
- printf("\tFP16: %s\n", cpuinfo_isa.fp16 ? "yes" : "no");
- printf("\tFMA: %s\n", cpuinfo_isa.fma ? "yes" : "no");
+ printf("\tVFPv2: %s\n", cpuinfo_has_arm_vfpv2() ? "yes" : "no");
+ printf("\tVFPv3: %s\n", cpuinfo_has_arm_vfpv3() ? "yes" : "no");
+ printf("\tVFPv3+D32: %s\n", cpuinfo_has_arm_vfpv3_d32() ? "yes" : "no");
+ printf("\tVFPv3+FP16: %s\n", cpuinfo_has_arm_vfpv3_fp16() ? "yes" : "no");
+ printf("\tVFPv3+FP16+D32: %s\n", cpuinfo_has_arm_vfpv3_fp16_d32() ? "yes" : "no");
+ printf("\tVFPv4: %s\n", cpuinfo_has_arm_vfpv4() ? "yes" : "no");
+ printf("\tVFPv4+D32: %s\n", cpuinfo_has_arm_vfpv4_d32() ? "yes" : "no");
printf("SIMD extensions:\n");
- printf("\tWMMX: %s\n", cpuinfo_isa.wmmx ? "yes" : "no");
- printf("\tWMMX 2: %s\n", cpuinfo_isa.wmmx2 ? "yes" : "no");
- printf("\tNEON: %s\n", cpuinfo_isa.neon ? "yes" : "no");
+ printf("\tWMMX: %s\n", cpuinfo_has_arm_wmmx() ? "yes" : "no");
+ printf("\tWMMX 2: %s\n", cpuinfo_has_arm_wmmx2() ? "yes" : "no");
+ printf("\tNEON: %s\n", cpuinfo_has_arm_neon() ? "yes" : "no");
+ printf("\tNEON-FP16: %s\n", cpuinfo_has_arm_neon_fp16() ? "yes" : "no");
+ printf("\tNEON-FMA: %s\n", cpuinfo_has_arm_neon_fma() ? "yes" : "no");
printf("Cryptography extensions:\n");
- printf("\tAES: %s\n", cpuinfo_isa.aes ? "yes" : "no");
- printf("\tSHA1: %s\n", cpuinfo_isa.sha1 ? "yes" : "no");
- printf("\tSHA2: %s\n", cpuinfo_isa.sha2 ? "yes" : "no");
- printf("\tPMULL: %s\n", cpuinfo_isa.pmull ? "yes" : "no");
- printf("\tCRC32: %s\n", cpuinfo_isa.crc32 ? "yes" : "no");
+ printf("\tAES: %s\n", cpuinfo_has_arm_aes() ? "yes" : "no");
+ printf("\tSHA1: %s\n", cpuinfo_has_arm_sha1() ? "yes" : "no");
+ printf("\tSHA2: %s\n", cpuinfo_has_arm_sha2() ? "yes" : "no");
+ printf("\tPMULL: %s\n", cpuinfo_has_arm_pmull() ? "yes" : "no");
+ printf("\tCRC32: %s\n", cpuinfo_has_arm_crc32() ? "yes" : "no");
#endif /* CPUINFO_ARCH_ARM */
#if CPUINFO_ARCH_ARM64
printf("Instruction sets:\n");
- printf("\tARM v8.1 atomics: %s\n", cpuinfo_isa.atomics ? "yes" : "no");
- printf("\tARM v8.1 SQRDMLxH: %s\n", cpuinfo_isa.rdm ? "yes" : "no");
- printf("\tARM v8.2 FP16 arithmetics: %s\n", cpuinfo_isa.fp16arith ? "yes" : "no");
- printf("\tARM v8.3 JS conversion: %s\n", cpuinfo_isa.jscvt ? "yes" : "no");
- printf("\tARM v8.3 complex FMA: %s\n", cpuinfo_isa.fcma ? "yes" : "no");
+ printf("\tARM v8.1 atomics: %s\n", cpuinfo_has_arm_atomics() ? "yes" : "no");
+ printf("\tARM v8.1 SQRDMLxH: %s\n", cpuinfo_has_arm_neon_rdm() ? "yes" : "no");
+ printf("\tARM v8.2 FP16 arithmetics: %s\n", cpuinfo_has_arm_fp16_arith() ? "yes" : "no");
+ printf("\tARM v8.3 JS conversion: %s\n", cpuinfo_has_arm_jscvt() ? "yes" : "no");
+ printf("\tARM v8.3 complex FMA: %s\n", cpuinfo_has_arm_fcma() ? "yes" : "no");
printf("Cryptography extensions:\n");
- printf("\tAES: %s\n", cpuinfo_isa.aes ? "yes" : "no");
- printf("\tSHA1: %s\n", cpuinfo_isa.sha1 ? "yes" : "no");
- printf("\tSHA2: %s\n", cpuinfo_isa.sha2 ? "yes" : "no");
- printf("\tPMULL: %s\n", cpuinfo_isa.pmull ? "yes" : "no");
- printf("\tCRC32: %s\n", cpuinfo_isa.crc32 ? "yes" : "no");
+ printf("\tAES: %s\n", cpuinfo_has_arm_aes() ? "yes" : "no");
+ printf("\tSHA1: %s\n", cpuinfo_has_arm_sha1() ? "yes" : "no");
+ printf("\tSHA2: %s\n", cpuinfo_has_arm_sha2() ? "yes" : "no");
+ printf("\tPMULL: %s\n", cpuinfo_has_arm_pmull() ? "yes" : "no");
+ printf("\tCRC32: %s\n", cpuinfo_has_arm_crc32() ? "yes" : "no");
#endif
}