From 81bf821c614a1a271fc870a7f89ee022cb924085 Mon Sep 17 00:00:00 2001 From: Zhuo Zhang Date: Wed, 21 Feb 2024 21:14:45 +0800 Subject: [PATCH] feat: detect fma4 ISA for x86 --- README.md | 2 +- main.c | 1 + ruapu.h | 2 ++ 3 files changed, 4 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 1b4bfda..a8d51ce 100644 --- a/README.md +++ b/README.md @@ -217,7 +217,7 @@ _`fma4` on zen1, ISA in hypervisor, etc._ |CPU|ISA| |:---:|---| -|x86|`mmx` `sse` `sse2` `sse3` `ssse3` `sse41` `sse42` `sse4a` `xop` `avx` `f16c` `fma` `avx2` `avx512f` `avx512bw` `avx512cd` `avx512dq` `avx512vl` `avx512vnni` `avx512bf16` `avx512ifma` `avx512vbmi` `avx512vbmi2` `avx512fp16` `avxvnni` `avxvnniint8` `avxifma`| +|x86|`mmx` `sse` `sse2` `sse3` `ssse3` `sse41` `sse42` `sse4a` `xop` `avx` `f16c` `fma` `fma4` `avx2` `avx512f` `avx512bw` `avx512cd` `avx512dq` `avx512vl` `avx512vnni` `avx512bf16` `avx512ifma` `avx512vbmi` `avx512vbmi2` `avx512fp16` `avxvnni` `avxvnniint8` `avxifma`| |arm|`edsp` `neon` `vfpv4`| |aarch64|`neon` `vfpv4` `cpuid` `asimdhp` `asimddp` `asimdfhm` `bf16` `i8mm` `sve` `sve2` `svebf16` `svei8mm` `svef32mm`| |mips|| diff --git a/main.c b/main.c index 2482db0..7cfab7a 100644 --- a/main.c +++ b/main.c @@ -28,6 +28,7 @@ int main() PRINT_ISA_SUPPORT(avx) PRINT_ISA_SUPPORT(f16c) PRINT_ISA_SUPPORT(fma) + PRINT_ISA_SUPPORT(fma4) PRINT_ISA_SUPPORT(avx2) PRINT_ISA_SUPPORT(avx512f) PRINT_ISA_SUPPORT(avx512bw) diff --git a/ruapu.h b/ruapu.h index 2338609..913564e 100644 --- a/ruapu.h +++ b/ruapu.h @@ -144,6 +144,7 @@ RUAPU_INSTCODE(xop, 0x8f, 0xe8, 0x78, 0xb6, 0xc0, 0x00) // vpmadcswd %xmm0,%xmm RUAPU_INSTCODE(avx, 0xc5, 0xfc, 0x54, 0xc0) // vandps ymm0,ymm0,ymm0 RUAPU_INSTCODE(f16c, 0xc4, 0xe2, 0x7d, 0x13, 0xc0) // vcvtph2ps ymm0,xmm0 RUAPU_INSTCODE(fma, 0xc4, 0xe2, 0x7d, 0x98, 0xc0) // vfmadd132ps ymm0,ymm0,ymm0 +RUAPU_INSTCODE(fma4, 0xc4, 0xe3, 0xfd, 0x68, 0xc0, 0x00) // vfmaddps ymm0,ymm0,ymm0,ymm0 RUAPU_INSTCODE(avx2, 0xc5, 0xfd, 0xfe, 0xc0) // vpaddd ymm0,ymm0,ymm0 RUAPU_INSTCODE(avx512f, 0x62, 0xf1, 0x7c, 0x48, 0x58, 0xc0) // vaddps zmm0,zmm0,zmm0 RUAPU_INSTCODE(avx512bw, 0x62, 0xf1, 0x7d, 0x48, 0xfd, 0xc0) // vpaddw zmm0,zmm0,zmm0 @@ -201,6 +202,7 @@ RUAPU_ISAENTRY(xop) RUAPU_ISAENTRY(avx) RUAPU_ISAENTRY(f16c) RUAPU_ISAENTRY(fma) +RUAPU_ISAENTRY(fma4) RUAPU_ISAENTRY(avx2) RUAPU_ISAENTRY(avx512f) RUAPU_ISAENTRY(avx512bw)