Update README.md

This commit is contained in:
nihui 2024-02-21 14:44:44 +08:00 committed by GitHub
parent cba1639003
commit 1ba59632e1
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

View File

@ -2,7 +2,7 @@
Detect cpu ISA features with single-file
<table>
<tr><td>CPU</td><td> &#9989; x86, x86-64<br/>&#9989; arm, aarch64</td><td rowspan=3>
<tr><td>CPU</td><td>&#9989; x86, x86-64<br/>&#9989; arm, aarch64</td><td rowspan=3>
```c
#define RUAPU_IMPLEMENTATION
@ -67,14 +67,23 @@ xop = 0
</td></tr>
</table>
## Features
* Detect **CPU ISA with single-file**&emsp;&emsp;&emsp;
_x86-sse, x86-avx, x86-avx512f, x86-avxvnni, arm-neon, etc._
* Detect **vendor extended ISA**&emsp;&emsp;&emsp;&emsp;
_apple `amx`, risc-v vendor ISA, etc._
* Detect **richer ISA on Windows ARM**&emsp;&emsp;
_`IsProcessorFeaturePresent()` returns little ISA information_
* Detect **`x86-avx512` on macOS correctly**&emsp;
_macOS hides it in `cpuid`_
* Detect **new CPU's ISA on old systems**&emsp;
_they are usually not exposed in `auxv` or `MISA`_
* Detect **CPU hidden ISA**&emsp;&emsp;&emsp;&emsp;&emsp;&emsp;&emsp;
_`x86-fma4` on zen1, ISA in hypervisor, etc._
## Techniques inside ruapu
ruapu is implemented in C language to ensure the widest possible portability.
ruapu determines whether the CPU supports certain instruction sets by trying to execute instructions and detecting whether an `Illegal Instruction` exception occurs. ruapu does not rely on the cpuid instructions and registers related to the CPU architecture, nor does it rely on the `MISA` information and system calls of the operating system. This can help us get more detailed CPU ISA information.
- Detect vendor extended ISA, apple `amx`, risc-v vendor ISA, etc.
- Checking for richer isa on Windows ARM, `IsProcessorFeaturePresent()` can only get little ISA information
- Correctly detect `x86-avx512` for macOS, macOS hides it in `cpuid`
- Detect new cpu's ISA on older systems, they are usually not exposed in `auxv` or `MISA`
- Detect CPU hidden ISA, `x86-fma4` on zen1, ISA in hypervisor, etc.