Blame manual/platform.texi

Packit 6c4009
@node Platform, Contributors, Maintenance, Top
Packit 6c4009
@c %MENU% Describe all platform-specific facilities provided
Packit 6c4009
@appendix Platform-specific facilities
Packit 6c4009
Packit 6c4009
@Theglibc{} can provide machine-specific functionality.
Packit 6c4009
Packit 6c4009
@menu
Packit 6c4009
* PowerPC::           Facilities Specific to the PowerPC Architecture
Packit 6c4009
* RISC-V::            Facilities Specific to the RISC-V Architecture
Packit Service 0f5a9d
* X86::               Facilities Specific to the X86 Architecture
Packit 6c4009
@end menu
Packit 6c4009
Packit 6c4009
@node PowerPC
Packit 6c4009
@appendixsec PowerPC-specific Facilities
Packit 6c4009
Packit 6c4009
Facilities specific to PowerPC that are not specific to a particular
Packit 6c4009
operating system are declared in @file{sys/platform/ppc.h}.
Packit 6c4009
Packit 6c4009
@deftypefun {uint64_t} __ppc_get_timebase (void)
Packit 6c4009
@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
Packit 6c4009
Read the current value of the Time Base Register.
Packit 6c4009
Packit 6c4009
The @dfn{Time Base Register} is a 64-bit register that stores a monotonically
Packit 6c4009
incremented value updated at a system-dependent frequency that may be
Packit 6c4009
different from the processor frequency.  More information is available in
Packit 6c4009
@cite{Power ISA 2.06b - Book II - Section 5.2}.
Packit 6c4009
Packit 6c4009
@code{__ppc_get_timebase} uses the processor's time base facility directly
Packit 6c4009
without requiring assistance from the operating system, so it is very
Packit 6c4009
efficient.
Packit 6c4009
@end deftypefun
Packit 6c4009
Packit 6c4009
@deftypefun {uint64_t} __ppc_get_timebase_freq (void)
Packit 6c4009
@safety{@prelim{}@mtunsafe{@mtuinit{}}@asunsafe{@asucorrupt{:init}}@acunsafe{@acucorrupt{:init}}}
Packit 6c4009
@c __ppc_get_timebase_freq=__get_timebase_freq @mtuinit @acsfd
Packit 6c4009
@c  __get_clockfreq @mtuinit @asucorrupt:init @acucorrupt:init @acsfd
Packit 6c4009
@c    the initialization of the static timebase_freq is not exactly
Packit 6c4009
@c    safe, because hp_timing_t cannot be atomically set up.
Packit 6c4009
@c   syscall:get_tbfreq ok
Packit 6c4009
@c   open dup @acsfd
Packit 6c4009
@c   read dup ok
Packit 6c4009
@c   memcpy dup ok
Packit 6c4009
@c   memmem dup ok
Packit 6c4009
@c   close dup @acsfd
Packit 6c4009
Read the current frequency at which the Time Base Register is updated.
Packit 6c4009
Packit 6c4009
This frequency is not related to the processor clock or the bus clock.
Packit 6c4009
It is also possible that this frequency is not constant.  More information is
Packit 6c4009
available in @cite{Power ISA 2.06b - Book II - Section 5.2}.
Packit 6c4009
@end deftypefun
Packit 6c4009
Packit 6c4009
The following functions provide hints about the usage of resources that are
Packit 6c4009
shared with other processors.  They can be used, for example, if a program
Packit 6c4009
waiting on a lock intends to divert the shared resources to be used by other
Packit 6c4009
processors.  More information is available in @cite{Power ISA 2.06b - Book II -
Packit 6c4009
Section 3.2}.
Packit 6c4009
Packit 6c4009
@deftypefun {void} __ppc_yield (void)
Packit 6c4009
@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
Packit 6c4009
Provide a hint that performance will probably be improved if shared resources
Packit 6c4009
dedicated to the executing processor are released for use by other processors.
Packit 6c4009
@end deftypefun
Packit 6c4009
Packit 6c4009
@deftypefun {void} __ppc_mdoio (void)
Packit 6c4009
@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
Packit 6c4009
Provide a hint that performance will probably be improved if shared resources
Packit 6c4009
dedicated to the executing processor are released until all outstanding storage
Packit 6c4009
accesses to caching-inhibited storage have been completed.
Packit 6c4009
@end deftypefun
Packit 6c4009
Packit 6c4009
@deftypefun {void} __ppc_mdoom (void)
Packit 6c4009
@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
Packit 6c4009
Provide a hint that performance will probably be improved if shared resources
Packit 6c4009
dedicated to the executing processor are released until all outstanding storage
Packit 6c4009
accesses to cacheable storage for which the data is not in the cache have been
Packit 6c4009
completed.
Packit 6c4009
@end deftypefun
Packit 6c4009
Packit 6c4009
@deftypefun {void} __ppc_set_ppr_med (void)
Packit 6c4009
@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
Packit 6c4009
Set the Program Priority Register to medium value (default).
Packit 6c4009
Packit 6c4009
The @dfn{Program Priority Register} (PPR) is a 64-bit register that controls
Packit 6c4009
the program's priority.  By adjusting the PPR value the programmer may
Packit 6c4009
improve system throughput by causing the system resources to be used
Packit 6c4009
more efficiently, especially in contention situations.
Packit 6c4009
The three unprivileged states available are covered by the functions
Packit 6c4009
@code{__ppc_set_ppr_med} (medium -- default), @code{__ppc_set_ppc_low} (low)
Packit 6c4009
and @code{__ppc_set_ppc_med_low} (medium low).  More information
Packit 6c4009
available in @cite{Power ISA 2.06b - Book II - Section 3.1}.
Packit 6c4009
@end deftypefun
Packit 6c4009
Packit 6c4009
@deftypefun {void} __ppc_set_ppr_low (void)
Packit 6c4009
@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
Packit 6c4009
Set the Program Priority Register to low value.
Packit 6c4009
@end deftypefun
Packit 6c4009
Packit 6c4009
@deftypefun {void} __ppc_set_ppr_med_low (void)
Packit 6c4009
@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
Packit 6c4009
Set the Program Priority Register to medium low value.
Packit 6c4009
@end deftypefun
Packit 6c4009
Packit 6c4009
Power ISA 2.07 extends the priorities that can be set to the Program Priority
Packit 6c4009
Register (PPR).  The following functions implement the new priority levels:
Packit 6c4009
very low and medium high.
Packit 6c4009
Packit 6c4009
@deftypefun {void} __ppc_set_ppr_very_low (void)
Packit 6c4009
@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
Packit 6c4009
Set the Program Priority Register to very low value.
Packit 6c4009
@end deftypefun
Packit 6c4009
Packit 6c4009
@deftypefun {void} __ppc_set_ppr_med_high (void)
Packit 6c4009
@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
Packit 6c4009
Set the Program Priority Register to medium high value.  The medium high
Packit 6c4009
priority is privileged and may only be set during certain time intervals by
Packit 6c4009
problem-state programs.  If the program priority is medium high when the time
Packit 6c4009
interval expires or if an attempt is made to set the priority to medium high
Packit 6c4009
when it is not allowed, the priority is set to medium.
Packit 6c4009
@end deftypefun
Packit 6c4009
Packit 6c4009
@node RISC-V
Packit 6c4009
@appendixsec RISC-V-specific Facilities
Packit 6c4009
Packit 6c4009
Cache management facilities specific to RISC-V systems that implement the Linux
Packit 6c4009
ABI are declared in @file{sys/cachectl.h}.
Packit 6c4009
Packit 6c4009
@deftypefun {void} __riscv_flush_icache (void *@var{start}, void *@var{end}, unsigned long int @var{flags})
Packit 6c4009
@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
Packit 6c4009
Enforce ordering between stores and instruction cache fetches.  The range of
Packit 6c4009
addresses over which ordering is enforced is specified by @var{start} and
Packit 6c4009
@var{end}.  The @var{flags} argument controls the extent of this ordering, with
Packit 6c4009
the default behavior (a @var{flags} value of 0) being to enforce the fence on
Packit 6c4009
all threads in the current process.  Setting the
Packit 6c4009
@code{SYS_RISCV_FLUSH_ICACHE_LOCAL} bit allows users to indicate that enforcing
Packit 6c4009
ordering on only the current thread is necessary.  All other flag bits are
Packit 6c4009
reserved.
Packit 6c4009
@end deftypefun
Packit Service 0f5a9d
Packit Service 0f5a9d
@node X86
Packit Service 0f5a9d
@appendixsec X86-specific Facilities
Packit Service 0f5a9d
Packit Service 0f5a9d
Facilities specific to X86 that are not specific to a particular
Packit Service 0f5a9d
operating system are declared in @file{sys/platform/x86.h}.
Packit Service 0f5a9d
Packit Service 0f5a9d
@deftypefun {const struct cpu_features *} __x86_get_cpu_features (unsigned int @var{max})
Packit Service 0f5a9d
@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
Packit Service 0f5a9d
Return a pointer to x86 CPU feature structure used by query macros for x86
Packit Service 0f5a9d
CPU features.  If @var{max} exceeds @code{COMMON_CPUID_INDEX_MAX} which
Packit Service 0f5a9d
is the limit of the CPUID leaves supported by @Theglibc{}, the function
Packit Service 0f5a9d
returns @code{NULL}, indicating that the queried processor feature is
Packit Service 0f5a9d
unsupported by @Theglibc{} run-time.
Packit Service 0f5a9d
@end deftypefun
Packit Service 0f5a9d
Packit Service 0f5a9d
@deftypefn Macro int HAS_CPU_FEATURE (@var{name})
Packit Service 0f5a9d
This macro returns a nonzero value (true) if the processor has the feature
Packit Service 0f5a9d
@var{name}.
Packit Service 0f5a9d
@end deftypefn
Packit Service 0f5a9d
Packit Service 0f5a9d
@deftypefn Macro int CPU_FEATURE_USABLE (@var{name})
Packit Service 0f5a9d
This macro returns a nonzero value (true) if the processor has the feature
Packit Service 0f5a9d
@var{name} and the feature is supported by the operating system.
Packit Service 0f5a9d
@end deftypefn
Packit Service 0f5a9d
Packit Service 0f5a9d
The supported processor features are:
Packit Service 0f5a9d
Packit Service 0f5a9d
@itemize @bullet
Packit Service 0f5a9d
Packit Service 0f5a9d
@item
Packit Service 0f5a9d
@code{ACPI} -- Thermal Monitor and Software Controlled Clock Facilities.
Packit Service 0f5a9d
Packit Service 0f5a9d
@item
Packit Service 0f5a9d
@code{ADX} -- ADX instruction extensions.
Packit Service 0f5a9d
Packit Service 0f5a9d
@item
Packit Service 0f5a9d
@code{APIC} -- APIC On-Chip.
Packit Service 0f5a9d
Packit Service 0f5a9d
@item
Packit Service 0f5a9d
@code{AES} -- The AES instruction extensions.
Packit Service 0f5a9d
Packit Service 0f5a9d
@item
Packit Service 352e33
@code{AESKLE} -- AES Key Locker instructions are enabled by OS.
Packit Service 352e33
Packit Service 352e33
@item
Packit Service 0f5a9d
@code{AMX_BF16} -- Tile computational operations on bfloat16 numbers.
Packit Service 0f5a9d
Packit Service 0f5a9d
@item
Packit Service 0f5a9d
@code{AMX_INT8} -- Tile computational operations on 8-bit numbers.
Packit Service 0f5a9d
Packit Service 0f5a9d
@item
Packit Service 0f5a9d
@code{AMX_TILE} -- Tile architecture.
Packit Service 0f5a9d
Packit Service 0f5a9d
@item
Packit Service 0f5a9d
@code{ARCH_CAPABILITIES} -- IA32_ARCH_CAPABILITIES MSR.
Packit Service 0f5a9d
Packit Service 0f5a9d
@item
Packit Service 0f5a9d
@code{AVX} -- The AVX instruction extensions.
Packit Service 0f5a9d
Packit Service 0f5a9d
@item
Packit Service 0f5a9d
@code{AVX2} -- The AVX2 instruction extensions.
Packit Service 0f5a9d
Packit Service 0f5a9d
@item
Packit Service de8bc6
@code{AVX_VNNI} -- The AVX-VNNI instruction extensions.
Packit Service de8bc6
Packit Service de8bc6
@item
Packit Service 0f5a9d
@code{AVX512_4FMAPS} -- The AVX512_4FMAPS instruction extensions.
Packit Service 0f5a9d
Packit Service 0f5a9d
@item
Packit Service 0f5a9d
@code{AVX512_4VNNIW} -- The AVX512_4VNNIW instruction extensions.
Packit Service 0f5a9d
Packit Service 0f5a9d
@item
Packit Service 0f5a9d
@code{AVX512_BF16} -- The AVX512_BF16 instruction extensions.
Packit Service 0f5a9d
Packit Service 0f5a9d
@item
Packit Service 0f5a9d
@code{AVX512_BITALG} -- The AVX512_BITALG instruction extensions.
Packit Service 0f5a9d
Packit Service 0f5a9d
@item
Packit Service 1da5a0
@code{AVX512_FP16} -- The AVX512_FP16 instruction extensions.
Packit Service 1da5a0
Packit Service 1da5a0
@item
Packit Service 0f5a9d
@code{AVX512_IFMA} -- The AVX512_IFMA instruction extensions.
Packit Service 0f5a9d
Packit Service 0f5a9d
@item
Packit Service 0f5a9d
@code{AVX512_VBMI} -- The AVX512_VBMI instruction extensions.
Packit Service 0f5a9d
Packit Service 0f5a9d
@item
Packit Service 0f5a9d
@code{AVX512_VBMI2} -- The AVX512_VBMI2 instruction extensions.
Packit Service 0f5a9d
Packit Service 0f5a9d
@item
Packit Service 0f5a9d
@code{AVX512_VNNI} -- The AVX512_VNNI instruction extensions.
Packit Service 0f5a9d
Packit Service 0f5a9d
@item
Packit Service 0f5a9d
@code{AVX512_VP2INTERSECT} -- The AVX512_VP2INTERSECT instruction
Packit Service 0f5a9d
extensions.
Packit Service 0f5a9d
Packit Service 0f5a9d
@item
Packit Service 0f5a9d
@code{AVX512_VPOPCNTDQ} -- The AVX512_VPOPCNTDQ instruction extensions.
Packit Service 0f5a9d
Packit Service 0f5a9d
@item
Packit Service 0f5a9d
@code{AVX512BW} -- The AVX512BW instruction extensions.
Packit Service 0f5a9d
Packit Service 0f5a9d
@item
Packit Service 0f5a9d
@code{AVX512CD} -- The AVX512CD instruction extensions.
Packit Service 0f5a9d
Packit Service 0f5a9d
@item
Packit Service 0f5a9d
@code{AVX512ER} -- The AVX512ER instruction extensions.
Packit Service 0f5a9d
Packit Service 0f5a9d
@item
Packit Service 0f5a9d
@code{AVX512DQ} -- The AVX512DQ instruction extensions.
Packit Service 0f5a9d
Packit Service 0f5a9d
@item
Packit Service 0f5a9d
@code{AVX512F} -- The AVX512F instruction extensions.
Packit Service 0f5a9d
Packit Service 0f5a9d
@item
Packit Service 0f5a9d
@code{AVX512PF} -- The AVX512PF instruction extensions.
Packit Service 0f5a9d
Packit Service 0f5a9d
@item
Packit Service 0f5a9d
@code{AVX512VL} -- The AVX512VL instruction extensions.
Packit Service 0f5a9d
Packit Service 0f5a9d
@item
Packit Service 0f5a9d
@code{BMI1} -- BMI1 instructions.
Packit Service 0f5a9d
Packit Service 0f5a9d
@item
Packit Service 0f5a9d
@code{BMI2} -- BMI2 instructions.
Packit Service 0f5a9d
Packit Service 0f5a9d
@item
Packit Service 0f5a9d
@code{CLDEMOTE} -- CLDEMOTE instruction.
Packit Service 0f5a9d
Packit Service 0f5a9d
@item
Packit Service 0f5a9d
@code{CLFLUSHOPT} -- CLFLUSHOPT instruction.
Packit Service 0f5a9d
Packit Service 0f5a9d
@item
Packit Service 0f5a9d
@code{CLFSH} -- CLFLUSH instruction.
Packit Service 0f5a9d
Packit Service 0f5a9d
@item
Packit Service 0f5a9d
@code{CLWB} -- CLWB instruction.
Packit Service 0f5a9d
Packit Service 0f5a9d
@item
Packit Service 0f5a9d
@code{CMOV} -- Conditional Move instructions.
Packit Service 0f5a9d
Packit Service 0f5a9d
@item
Packit Service 0f5a9d
@code{CMPXCHG16B} -- CMPXCHG16B instruction.
Packit Service 0f5a9d
Packit Service 0f5a9d
@item
Packit Service 0f5a9d
@code{CNXT_ID} -- L1 Context ID.
Packit Service 0f5a9d
Packit Service 0f5a9d
@item
Packit Service 0f5a9d
@code{CORE_CAPABILITIES} -- IA32_CORE_CAPABILITIES MSR.
Packit Service 0f5a9d
Packit Service 0f5a9d
@item
Packit Service 0f5a9d
@code{CX8} -- CMPXCHG8B instruction.
Packit Service 0f5a9d
Packit Service 0f5a9d
@item
Packit Service 0f5a9d
@code{DCA} -- Data prefetch from a memory mapped device.
Packit Service 0f5a9d
Packit Service 0f5a9d
@item
Packit Service 0f5a9d
@code{DE} -- Debugging Extensions.
Packit Service 0f5a9d
Packit Service 0f5a9d
@item
Packit Service 0f5a9d
@code{DEPR_FPU_CS_DS} -- Deprecates FPU CS and FPU DS values.
Packit Service 0f5a9d
Packit Service 0f5a9d
@item
Packit Service 0f5a9d
@code{DS} -- Debug Store.
Packit Service 0f5a9d
Packit Service 0f5a9d
@item
Packit Service 0f5a9d
@code{DS_CPL} -- CPL Qualified Debug Store.
Packit Service 0f5a9d
Packit Service 0f5a9d
@item
Packit Service 0f5a9d
@code{DTES64} -- 64-bit DS Area.
Packit Service 0f5a9d
Packit Service 0f5a9d
@item
Packit Service 0f5a9d
@code{EIST} -- Enhanced Intel SpeedStep technology.
Packit Service 0f5a9d
Packit Service 0f5a9d
@item
Packit Service 0f5a9d
@code{ENQCMD} -- Enqueue Stores instructions.
Packit Service 0f5a9d
Packit Service 0f5a9d
@item
Packit Service 0f5a9d
@code{ERMS} -- Enhanced REP MOVSB/STOSB.
Packit Service 0f5a9d
Packit Service 0f5a9d
@item
Packit Service 0f5a9d
@code{F16C} -- 16-bit floating-point conversion instructions.
Packit Service 0f5a9d
Packit Service 0f5a9d
@item
Packit Service 0f5a9d
@code{FMA} -- FMA extensions using YMM state.
Packit Service 0f5a9d
Packit Service 0f5a9d
@item
Packit Service 0f5a9d
@code{FMA4} -- FMA4 instruction extensions.
Packit Service 0f5a9d
Packit Service 0f5a9d
@item
Packit Service 0f5a9d
@code{FPU} -- X87 Floating Point Unit On-Chip.
Packit Service 0f5a9d
Packit Service 0f5a9d
@item
Packit Service 0f5a9d
@code{FSGSBASE} -- RDFSBASE/RDGSBASE/WRFSBASE/WRGSBASE instructions.
Packit Service 0f5a9d
Packit Service 0f5a9d
@item
Packit Service 697f68
@code{FSRCS} -- Fast Short REP CMP and SCA.
Packit Service 697f68
Packit Service 697f68
@item
Packit Service 0f5a9d
@code{FSRM} -- Fast Short REP MOV.
Packit Service 0f5a9d
Packit Service 0f5a9d
@item
Packit Service 697f68
@code{FSRS} -- Fast Short REP STO.
Packit Service 697f68
Packit Service 697f68
@item
Packit Service 0f5a9d
@code{FXSR} -- FXSAVE and FXRSTOR instructions.
Packit Service 0f5a9d
Packit Service 0f5a9d
@item
Packit Service 697f68
@code{FZLRM} -- Fast Zero-Length REP MOV.
Packit Service 697f68
Packit Service 697f68
@item
Packit Service 0f5a9d
@code{GFNI} -- GFNI instruction extensions.
Packit Service 0f5a9d
Packit Service 0f5a9d
@item
Packit Service 0f5a9d
@code{HLE} -- HLE instruction extensions.
Packit Service 0f5a9d
Packit Service 0f5a9d
@item
Packit Service 0f5a9d
@code{HTT} -- Max APIC IDs reserved field is Valid.
Packit Service 0f5a9d
Packit Service 0f5a9d
@item
Packit Service ade910
@code{HRESET} -- History reset.
Packit Service ade910
Packit Service ade910
@item
Packit Service 0f5a9d
@code{HYBRID} -- Hybrid processor.
Packit Service 0f5a9d
Packit Service 0f5a9d
@item
Packit Service 0f5a9d
@code{IBRS_IBPB} -- Indirect branch restricted speculation (IBRS) and
Packit Service 0f5a9d
the indirect branch predictor barrier (IBPB).
Packit Service 0f5a9d
Packit Service 0f5a9d
@item
Packit Service 0f5a9d
@code{IBT} -- Intel Indirect Branch Tracking instruction extensions.
Packit Service 0f5a9d
Packit Service 0f5a9d
@item
Packit Service 0f5a9d
@code{INVARIANT_TSC} -- Invariant TSC.
Packit Service 0f5a9d
Packit Service 0f5a9d
@item
Packit Service 0f5a9d
@code{INVPCID} -- INVPCID instruction.
Packit Service 0f5a9d
Packit Service 0f5a9d
@item
Packit Service 352e33
@code{KL} -- AES Key Locker instructions.
Packit Service 352e33
Packit Service 352e33
@item
Packit Service 0f5a9d
@code{L1D_FLUSH} -- IA32_FLUSH_CMD MSR.
Packit Service 0f5a9d
Packit Service 0f5a9d
@item
Packit Service 0f5a9d
@code{LAHF64_SAHF64} -- LAHF/SAHF available in 64-bit mode.
Packit Service 0f5a9d
Packit Service 0f5a9d
@item
Packit Service 0f5a9d
@code{LM} -- Long mode.
Packit Service 0f5a9d
Packit Service 0f5a9d
@item
Packit Service 0f5a9d
@code{LWP} -- Lightweight profiling.
Packit Service 0f5a9d
Packit Service 0f5a9d
@item
Packit Service 0f5a9d
@code{LZCNT} -- LZCNT instruction.
Packit Service 0f5a9d
Packit Service 0f5a9d
@item
Packit Service 0f5a9d
@code{MCA} -- Machine Check Architecture.
Packit Service 0f5a9d
Packit Service 0f5a9d
@item
Packit Service 0f5a9d
@code{MCE} -- Machine Check Exception.
Packit Service 0f5a9d
Packit Service 0f5a9d
@item
Packit Service 0f5a9d
@code{MD_CLEAR} -- MD_CLEAR.
Packit Service 0f5a9d
Packit Service 0f5a9d
@item
Packit Service 0f5a9d
@code{MMX} -- Intel MMX Technology.
Packit Service 0f5a9d
Packit Service 0f5a9d
@item
Packit Service 0f5a9d
@code{MONITOR} --  MONITOR/MWAIT instructions.
Packit Service 0f5a9d
Packit Service 0f5a9d
@item
Packit Service 0f5a9d
@code{MOVBE} -- MOVBE instruction.
Packit Service 0f5a9d
Packit Service 0f5a9d
@item
Packit Service 0f5a9d
@code{MOVDIRI} -- MOVDIRI instruction.
Packit Service 0f5a9d
Packit Service 0f5a9d
@item
Packit Service 0f5a9d
@code{MOVDIR64B} -- MOVDIR64B instruction.
Packit Service 0f5a9d
Packit Service 0f5a9d
@item
Packit Service 0f5a9d
@code{MPX} -- Intel Memory Protection Extensions.
Packit Service 0f5a9d
Packit Service 0f5a9d
@item
Packit Service 0f5a9d
@code{MSR} -- Model Specific Registers RDMSR and WRMSR instructions.
Packit Service 0f5a9d
Packit Service 0f5a9d
@item
Packit Service 0f5a9d
@code{MTRR} -- Memory Type Range Registers.
Packit Service 0f5a9d
Packit Service 0f5a9d
@item
Packit Service 0f5a9d
@code{NX} -- No-execute page protection.
Packit Service 0f5a9d
Packit Service 0f5a9d
@item
Packit Service 0f5a9d
@code{OSPKE} -- OS has set CR4.PKE to enable protection keys.
Packit Service 0f5a9d
Packit Service 0f5a9d
@item
Packit Service 0f5a9d
@code{OSXSAVE} -- The OS has set CR4.OSXSAVE[bit 18] to enable
Packit Service 0f5a9d
XSETBV/XGETBV instructions to access XCR0 and to support processor
Packit Service 0f5a9d
extended state management using XSAVE/XRSTOR.
Packit Service 0f5a9d
Packit Service 0f5a9d
@item
Packit Service 0f5a9d
@code{PAE} -- Physical Address Extension.
Packit Service 0f5a9d
Packit Service 0f5a9d
@item
Packit Service 0f5a9d
@code{PAGE1GB} -- 1-GByte page.
Packit Service 0f5a9d
Packit Service 0f5a9d
@item
Packit Service 0f5a9d
@code{PAT} -- Page Attribute Table.
Packit Service 0f5a9d
Packit Service 0f5a9d
@item
Packit Service 0f5a9d
@code{PBE} -- Pending Break Enable.
Packit Service 0f5a9d
Packit Service 0f5a9d
@item
Packit Service 0f5a9d
@code{PCID} -- Process-context identifiers.
Packit Service 0f5a9d
Packit Service 0f5a9d
@item
Packit Service 0f5a9d
@code{PCLMULQDQ} -- PCLMULQDQ instruction.
Packit Service 0f5a9d
Packit Service 0f5a9d
@item
Packit Service 0f5a9d
@code{PCONFIG} -- PCONFIG instruction.
Packit Service 0f5a9d
Packit Service 0f5a9d
@item
Packit Service 0f5a9d
@code{PDCM} -- Perfmon and Debug Capability.
Packit Service 0f5a9d
Packit Service 0f5a9d
@item
Packit Service 0f5a9d
@code{PGE} -- Page Global Bit.
Packit Service 0f5a9d
Packit Service 0f5a9d
@item
Packit Service 0f5a9d
@code{PKS} -- Protection keys for supervisor-mode pages.
Packit Service 0f5a9d
Packit Service 0f5a9d
@item
Packit Service 0f5a9d
@code{PKU} -- Protection keys for user-mode pages.
Packit Service 0f5a9d
Packit Service 0f5a9d
@item
Packit Service 0f5a9d
@code{POPCNT} -- POPCNT instruction.
Packit Service 0f5a9d
Packit Service 0f5a9d
@item
Packit Service 0f5a9d
@code{PREFETCHW} -- PREFETCHW instruction.
Packit Service 0f5a9d
Packit Service 0f5a9d
@item
Packit Service 0f5a9d
@code{PREFETCHWT1} -- PREFETCHWT1 instruction.
Packit Service 0f5a9d
Packit Service 0f5a9d
@item
Packit Service 0f5a9d
@code{PSE} -- Page Size Extension.
Packit Service 0f5a9d
Packit Service 0f5a9d
@item
Packit Service 0f5a9d
@code{PSE_36} -- 36-Bit Page Size Extension.
Packit Service 0f5a9d
Packit Service 0f5a9d
@item
Packit Service 0f5a9d
@code{PSN} -- Processor Serial Number.
Packit Service 0f5a9d
Packit Service 0f5a9d
@item
Packit Service 0f5a9d
@code{RDPID} -- RDPID instruction.
Packit Service 0f5a9d
Packit Service 0f5a9d
@item
Packit Service 0f5a9d
@code{RDRAND} -- RDRAND instruction.
Packit Service 0f5a9d
Packit Service 0f5a9d
@item
Packit Service 0f5a9d
@code{RDSEED} -- RDSEED instruction.
Packit Service 0f5a9d
Packit Service 0f5a9d
@item
Packit Service 0f5a9d
@code{RDT_A} -- Intel Resource Director Technology (Intel RDT) Allocation
Packit Service 0f5a9d
capability.
Packit Service 0f5a9d
Packit Service 0f5a9d
@item
Packit Service 0f5a9d
@code{RDT_M} -- Intel Resource Director Technology (Intel RDT) Monitoring
Packit Service 0f5a9d
capability.
Packit Service 0f5a9d
Packit Service 0f5a9d
@item
Packit Service 0f5a9d
@code{RDTSCP} -- RDTSCP instruction.
Packit Service 0f5a9d
Packit Service 0f5a9d
@item
Packit Service 0f5a9d
@code{RTM} -- RTM instruction extensions.
Packit Service 0f5a9d
Packit Service 0f5a9d
@item
Packit Service 0f5a9d
@code{SDBG} -- IA32_DEBUG_INTERFACE MSR for silicon debug.
Packit Service 0f5a9d
Packit Service 0f5a9d
@item
Packit Service 0f5a9d
@code{SEP} -- SYSENTER and SYSEXIT instructions.
Packit Service 0f5a9d
Packit Service 0f5a9d
@item
Packit Service 0f5a9d
@code{SERIALIZE} -- SERIALIZE instruction.
Packit Service 0f5a9d
Packit Service 0f5a9d
@item
Packit Service 0f5a9d
@code{SGX} -- Intel Software Guard Extensions.
Packit Service 0f5a9d
Packit Service 0f5a9d
@item
Packit Service 0f5a9d
@code{SGX_LC} -- SGX Launch Configuration.
Packit Service 0f5a9d
Packit Service 0f5a9d
@item
Packit Service 0f5a9d
@code{SHA} -- SHA instruction extensions.
Packit Service 0f5a9d
Packit Service 0f5a9d
@item
Packit Service 0f5a9d
@code{SHSTK} -- Intel Shadow Stack instruction extensions.
Packit Service 0f5a9d
Packit Service 0f5a9d
@item
Packit Service 0f5a9d
@code{SMAP} -- Supervisor-Mode Access Prevention.
Packit Service 0f5a9d
Packit Service 0f5a9d
@item
Packit Service 0f5a9d
@code{SMEP} -- Supervisor-Mode Execution Prevention.
Packit Service 0f5a9d
Packit Service 0f5a9d
@item
Packit Service 0f5a9d
@code{SMX} -- Safer Mode Extensions.
Packit Service 0f5a9d
Packit Service 0f5a9d
@item
Packit Service 0f5a9d
@code{SS} -- Self Snoop.
Packit Service 0f5a9d
Packit Service 0f5a9d
@item
Packit Service 0f5a9d
@code{SSBD} -- Speculative Store Bypass Disable (SSBD).
Packit Service 0f5a9d
Packit Service 0f5a9d
@item
Packit Service 0f5a9d
@code{SSE} -- Streaming SIMD Extensions.
Packit Service 0f5a9d
Packit Service 0f5a9d
@item
Packit Service 0f5a9d
@code{SSE2} -- Streaming SIMD Extensions 2.
Packit Service 0f5a9d
Packit Service 0f5a9d
@item
Packit Service 0f5a9d
@code{SSE3} -- Streaming SIMD Extensions 3.
Packit Service 0f5a9d
Packit Service 0f5a9d
@item
Packit Service 0f5a9d
@code{SSE4_1} -- Streaming SIMD Extensions 4.1.
Packit Service 0f5a9d
Packit Service 0f5a9d
@item
Packit Service 0f5a9d
@code{SSE4_2} -- Streaming SIMD Extensions 4.2.
Packit Service 0f5a9d
Packit Service 0f5a9d
@item
Packit Service 0f5a9d
@code{SSE4A} -- SSE4A instruction extensions.
Packit Service 0f5a9d
Packit Service 0f5a9d
@item
Packit Service 0f5a9d
@code{SSSE3} -- Supplemental Streaming SIMD Extensions 3.
Packit Service 0f5a9d
Packit Service 0f5a9d
@item
Packit Service 0f5a9d
@code{STIBP} -- Single thread indirect branch predictors (STIBP).
Packit Service 0f5a9d
Packit Service 0f5a9d
@item
Packit Service 0f5a9d
@code{SVM} -- Secure Virtual Machine.
Packit Service 0f5a9d
Packit Service 0f5a9d
@item
Packit Service 0f5a9d
@code{SYSCALL_SYSRET} -- SYSCALL/SYSRET instructions.
Packit Service 0f5a9d
Packit Service 0f5a9d
@item
Packit Service 0f5a9d
@code{TBM} -- Trailing bit manipulation instructions.
Packit Service 0f5a9d
Packit Service 0f5a9d
@item
Packit Service 0f5a9d
@code{TM} -- Thermal Monitor.
Packit Service 0f5a9d
Packit Service 0f5a9d
@item
Packit Service 0f5a9d
@code{TM2} -- Thermal Monitor 2.
Packit Service 0f5a9d
Packit Service 0f5a9d
@item
Packit Service 0f5a9d
@code{TRACE} -- Intel Processor Trace.
Packit Service 0f5a9d
Packit Service 0f5a9d
@item
Packit Service 0f5a9d
@code{TSC} -- Time Stamp Counter.  RDTSC instruction.
Packit Service 0f5a9d
Packit Service 0f5a9d
@item
Packit Service 0f5a9d
@code{TSC_ADJUST} -- IA32_TSC_ADJUST MSR.
Packit Service 0f5a9d
Packit Service 0f5a9d
@item
Packit Service 0f5a9d
@code{TSC_DEADLINE} -- Local APIC timer supports one-shot operation
Packit Service 0f5a9d
using a TSC deadline value.
Packit Service 0f5a9d
Packit Service 0f5a9d
@item
Packit Service 0f5a9d
@code{TSXLDTRK} -- TSXLDTRK instructions.
Packit Service 0f5a9d
Packit Service 0f5a9d
@item
Packit Service 5fd474
@code{UINTR} -- User interrupts.
Packit Service 5fd474
Packit Service 5fd474
@item
Packit Service 0f5a9d
@code{UMIP} -- User-mode instruction prevention.
Packit Service 0f5a9d
Packit Service 0f5a9d
@item
Packit Service 0f5a9d
@code{VAES} -- VAES instruction extensions.
Packit Service 0f5a9d
Packit Service 0f5a9d
@item
Packit Service 0f5a9d
@code{VME} -- Virtual 8086 Mode Enhancements.
Packit Service 0f5a9d
Packit Service 0f5a9d
@item
Packit Service 0f5a9d
@code{VMX} -- Virtual Machine Extensions.
Packit Service 0f5a9d
Packit Service 0f5a9d
@item
Packit Service 0f5a9d
@code{VPCLMULQDQ} -- VPCLMULQDQ instruction.
Packit Service 0f5a9d
Packit Service 0f5a9d
@item
Packit Service 0f5a9d
@code{WAITPKG} -- WAITPKG instruction extensions.
Packit Service 0f5a9d
Packit Service 0f5a9d
@item
Packit Service 0f5a9d
@code{WBNOINVD} -- WBINVD/WBNOINVD instructions.
Packit Service 0f5a9d
Packit Service 0f5a9d
@item
Packit Service 352e33
@code{WIDE_KL} -- AES wide Key Locker instructions.
Packit Service 352e33
Packit Service 352e33
@item
Packit Service 0f5a9d
@code{X2APIC} -- x2APIC.
Packit Service 0f5a9d
Packit Service 0f5a9d
@item
Packit Service 0f5a9d
@code{XFD} -- Extended Feature Disable (XFD).
Packit Service 0f5a9d
Packit Service 0f5a9d
@item
Packit Service 0f5a9d
@code{XGETBV_ECX_1} -- XGETBV with ECX = 1.
Packit Service 0f5a9d
Packit Service 0f5a9d
@item
Packit Service 0f5a9d
@code{XOP} -- XOP instruction extensions.
Packit Service 0f5a9d
Packit Service 0f5a9d
@item
Packit Service 0f5a9d
@code{XSAVE} -- The XSAVE/XRSTOR processor extended states feature, the
Packit Service 0f5a9d
XSETBV/XGETBV instructions, and XCR0.
Packit Service 0f5a9d
Packit Service 0f5a9d
@item
Packit Service 0f5a9d
@code{XSAVEC} -- XSAVEC instruction.
Packit Service 0f5a9d
Packit Service 0f5a9d
@item
Packit Service 0f5a9d
@code{XSAVEOPT} -- XSAVEOPT instruction.
Packit Service 0f5a9d
Packit Service 0f5a9d
@item
Packit Service 0f5a9d
@code{XSAVES} -- XSAVES/XRSTORS instructions.
Packit Service 0f5a9d
Packit Service 0f5a9d
@item
Packit Service 0f5a9d
@code{XTPRUPDCTRL} -- xTPR Update Control.
Packit Service 0f5a9d
Packit Service 0f5a9d
@end itemize
Packit Service 0f5a9d
Packit Service 0f5a9d
You could query if a processor supports @code{AVX} with:
Packit Service 0f5a9d
Packit Service 0f5a9d
@smallexample
Packit Service 0f5a9d
#include <sys/platform/x86.h>
Packit Service 0f5a9d
Packit Service 0f5a9d
int
Packit Service 0f5a9d
support_avx (void)
Packit Service 0f5a9d
@{
Packit Service 0f5a9d
  return HAS_CPU_FEATURE (AVX);
Packit Service 0f5a9d
@}
Packit Service 0f5a9d
@end smallexample
Packit Service 0f5a9d
Packit Service 0f5a9d
and if @code{AVX} is usable with:
Packit Service 0f5a9d
Packit Service 0f5a9d
@smallexample
Packit Service 0f5a9d
#include <sys/platform/x86.h>
Packit Service 0f5a9d
Packit Service 0f5a9d
int
Packit Service 0f5a9d
usable_avx (void)
Packit Service 0f5a9d
@{
Packit Service 0f5a9d
  return CPU_FEATURE_USABLE (AVX);
Packit Service 0f5a9d
@}
Packit Service 0f5a9d
@end smallexample