]>
Commit | Line | Data |
---|---|---|
d9dc34cd TMQMF |
1 | @node Platform, Contributors, Maintenance, Top |
2 | @c %MENU% Describe all platform-specific facilities provided | |
3 | @appendix Platform-specific facilities | |
4 | ||
5 | @Theglibc{} can provide machine-specific functionality. | |
6 | ||
7 | @menu | |
8 | * PowerPC:: Facilities Specific to the PowerPC Architecture | |
ba9e25a6 | 9 | * RISC-V:: Facilities Specific to the RISC-V Architecture |
96203980 | 10 | * X86:: Facilities Specific to the X86 Architecture |
d9dc34cd TMQMF |
11 | @end menu |
12 | ||
13 | @node PowerPC | |
14 | @appendixsec PowerPC-specific Facilities | |
15 | ||
16 | Facilities specific to PowerPC that are not specific to a particular | |
17 | operating system are declared in @file{sys/platform/ppc.h}. | |
18 | ||
19 | @deftypefun {uint64_t} __ppc_get_timebase (void) | |
e2dfb7f4 | 20 | @safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
d9dc34cd TMQMF |
21 | Read the current value of the Time Base Register. |
22 | ||
23 | The @dfn{Time Base Register} is a 64-bit register that stores a monotonically | |
24 | incremented value updated at a system-dependent frequency that may be | |
25 | different from the processor frequency. More information is available in | |
26 | @cite{Power ISA 2.06b - Book II - Section 5.2}. | |
27 | ||
28 | @code{__ppc_get_timebase} uses the processor's time base facility directly | |
29 | without requiring assistance from the operating system, so it is very | |
30 | efficient. | |
31 | @end deftypefun | |
8ad11b9a TMQMF |
32 | |
33 | @deftypefun {uint64_t} __ppc_get_timebase_freq (void) | |
e2dfb7f4 AO |
34 | @safety{@prelim{}@mtunsafe{@mtuinit{}}@asunsafe{@asucorrupt{:init}}@acunsafe{@acucorrupt{:init}}} |
35 | @c __ppc_get_timebase_freq=__get_timebase_freq @mtuinit @acsfd | |
36 | @c __get_clockfreq @mtuinit @asucorrupt:init @acucorrupt:init @acsfd | |
37 | @c the initialization of the static timebase_freq is not exactly | |
38 | @c safe, because hp_timing_t cannot be atomically set up. | |
39 | @c syscall:get_tbfreq ok | |
40 | @c open dup @acsfd | |
41 | @c read dup ok | |
42 | @c memcpy dup ok | |
43 | @c memmem dup ok | |
44 | @c close dup @acsfd | |
8ad11b9a TMQMF |
45 | Read the current frequency at which the Time Base Register is updated. |
46 | ||
47 | This frequency is not related to the processor clock or the bus clock. | |
48 | It is also possible that this frequency is not constant. More information is | |
49 | available in @cite{Power ISA 2.06b - Book II - Section 5.2}. | |
50 | @end deftypefun | |
9323d39b EM |
51 | |
52 | The following functions provide hints about the usage of resources that are | |
53 | shared with other processors. They can be used, for example, if a program | |
54 | waiting on a lock intends to divert the shared resources to be used by other | |
55 | processors. More information is available in @cite{Power ISA 2.06b - Book II - | |
56 | Section 3.2}. | |
57 | ||
58 | @deftypefun {void} __ppc_yield (void) | |
e2dfb7f4 | 59 | @safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
9323d39b EM |
60 | Provide a hint that performance will probably be improved if shared resources |
61 | dedicated to the executing processor are released for use by other processors. | |
62 | @end deftypefun | |
63 | ||
64 | @deftypefun {void} __ppc_mdoio (void) | |
e2dfb7f4 | 65 | @safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
9323d39b EM |
66 | Provide a hint that performance will probably be improved if shared resources |
67 | dedicated to the executing processor are released until all outstanding storage | |
68 | accesses to caching-inhibited storage have been completed. | |
69 | @end deftypefun | |
70 | ||
71 | @deftypefun {void} __ppc_mdoom (void) | |
e2dfb7f4 | 72 | @safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
9323d39b EM |
73 | Provide a hint that performance will probably be improved if shared resources |
74 | dedicated to the executing processor are released until all outstanding storage | |
75 | accesses to cacheable storage for which the data is not in the cache have been | |
76 | completed. | |
2b66ef5d | 77 | @end deftypefun |
d116b7c4 AZ |
78 | |
79 | @deftypefun {void} __ppc_set_ppr_med (void) | |
e2dfb7f4 | 80 | @safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
d116b7c4 AZ |
81 | Set the Program Priority Register to medium value (default). |
82 | ||
83 | The @dfn{Program Priority Register} (PPR) is a 64-bit register that controls | |
84 | the program's priority. By adjusting the PPR value the programmer may | |
85 | improve system throughput by causing the system resources to be used | |
86 | more efficiently, especially in contention situations. | |
87 | The three unprivileged states available are covered by the functions | |
88 | @code{__ppc_set_ppr_med} (medium -- default), @code{__ppc_set_ppc_low} (low) | |
89 | and @code{__ppc_set_ppc_med_low} (medium low). More information | |
90 | available in @cite{Power ISA 2.06b - Book II - Section 3.1}. | |
91 | @end deftypefun | |
92 | ||
93 | @deftypefun {void} __ppc_set_ppr_low (void) | |
e2dfb7f4 | 94 | @safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
d116b7c4 AZ |
95 | Set the Program Priority Register to low value. |
96 | @end deftypefun | |
97 | ||
98 | @deftypefun {void} __ppc_set_ppr_med_low (void) | |
e2dfb7f4 | 99 | @safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
d116b7c4 | 100 | Set the Program Priority Register to medium low value. |
9323d39b | 101 | @end deftypefun |
1747fcda GG |
102 | |
103 | Power ISA 2.07 extends the priorities that can be set to the Program Priority | |
104 | Register (PPR). The following functions implement the new priority levels: | |
105 | very low and medium high. | |
106 | ||
107 | @deftypefun {void} __ppc_set_ppr_very_low (void) | |
108 | @safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} | |
109 | Set the Program Priority Register to very low value. | |
110 | @end deftypefun | |
111 | ||
112 | @deftypefun {void} __ppc_set_ppr_med_high (void) | |
113 | @safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} | |
114 | Set the Program Priority Register to medium high value. The medium high | |
115 | priority is privileged and may only be set during certain time intervals by | |
116 | problem-state programs. If the program priority is medium high when the time | |
117 | interval expires or if an attempt is made to set the priority to medium high | |
118 | when it is not allowed, the priority is set to medium. | |
119 | @end deftypefun | |
ba9e25a6 PD |
120 | |
121 | @node RISC-V | |
122 | @appendixsec RISC-V-specific Facilities | |
123 | ||
124 | Cache management facilities specific to RISC-V systems that implement the Linux | |
125 | ABI are declared in @file{sys/cachectl.h}. | |
126 | ||
16efad51 | 127 | @deftypefun {void} __riscv_flush_icache (void *@var{start}, void *@var{end}, unsigned long int @var{flags}) |
ba9e25a6 PD |
128 | @safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
129 | Enforce ordering between stores and instruction cache fetches. The range of | |
130 | addresses over which ordering is enforced is specified by @var{start} and | |
131 | @var{end}. The @var{flags} argument controls the extent of this ordering, with | |
132 | the default behavior (a @var{flags} value of 0) being to enforce the fence on | |
133 | all threads in the current process. Setting the | |
134 | @code{SYS_RISCV_FLUSH_ICACHE_LOCAL} bit allows users to indicate that enforcing | |
135 | ordering on only the current thread is necessary. All other flag bits are | |
136 | reserved. | |
137 | @end deftypefun | |
96203980 L |
138 | |
139 | @node X86 | |
140 | @appendixsec X86-specific Facilities | |
141 | ||
142 | Facilities specific to X86 that are not specific to a particular | |
143 | operating system are declared in @file{sys/platform/x86.h}. | |
144 | ||
145 | @deftypefun {const struct cpu_features *} __x86_get_cpu_features (unsigned int @var{max}) | |
146 | @safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} | |
147 | Return a pointer to x86 CPU feature structure used by query macros for x86 | |
148 | CPU features. If @var{max} exceeds @code{COMMON_CPUID_INDEX_MAX} which | |
149 | is the limit of the CPUID leaves supported by @Theglibc{}, the function | |
150 | returns @code{NULL}, indicating that the queried processor feature is | |
151 | unsupported by @Theglibc{} run-time. | |
152 | @end deftypefun | |
153 | ||
154 | @deftypefn Macro int HAS_CPU_FEATURE (@var{name}) | |
155 | This macro returns a nonzero value (true) if the processor has the feature | |
156 | @var{name}. | |
157 | @end deftypefn | |
158 | ||
159 | @deftypefn Macro int CPU_FEATURE_USABLE (@var{name}) | |
160 | This macro returns a nonzero value (true) if the processor has the feature | |
161 | @var{name} and the feature is supported by the operating system. | |
162 | @end deftypefn | |
163 | ||
164 | The supported processor features are: | |
165 | ||
166 | @itemize @bullet | |
167 | ||
168 | @item | |
169 | @code{ACPI} -- Thermal Monitor and Software Controlled Clock Facilities. | |
170 | ||
171 | @item | |
172 | @code{ADX} -- ADX instruction extensions. | |
173 | ||
174 | @item | |
175 | @code{APIC} -- APIC On-Chip. | |
176 | ||
177 | @item | |
178 | @code{AES} -- The AES instruction extensions. | |
179 | ||
180 | @item | |
181 | @code{AMX_BF16} -- Tile computational operations on bfloat16 numbers. | |
182 | ||
183 | @item | |
184 | @code{AMX_INT8} -- Tile computational operations on 8-bit numbers. | |
185 | ||
186 | @item | |
187 | @code{AMX_TILE} -- Tile architecture. | |
188 | ||
189 | @item | |
190 | @code{ARCH_CAPABILITIES} -- IA32_ARCH_CAPABILITIES MSR. | |
191 | ||
192 | @item | |
193 | @code{AVX} -- The AVX instruction extensions. | |
194 | ||
195 | @item | |
196 | @code{AVX2} -- The AVX2 instruction extensions. | |
197 | ||
198 | @item | |
199 | @code{AVX512_4FMAPS} -- The AVX512_4FMAPS instruction extensions. | |
200 | ||
201 | @item | |
202 | @code{AVX512_4VNNIW} -- The AVX512_4VNNIW instruction extensions. | |
203 | ||
204 | @item | |
205 | @code{AVX512_BF16} -- The AVX512_BF16 instruction extensions. | |
206 | ||
207 | @item | |
208 | @code{AVX512_BITALG} -- The AVX512_BITALG instruction extensions. | |
209 | ||
210 | @item | |
211 | @code{AVX512_IFMA} -- The AVX512_IFMA instruction extensions. | |
212 | ||
213 | @item | |
214 | @code{AVX512_VBMI} -- The AVX512_VBMI instruction extensions. | |
215 | ||
216 | @item | |
217 | @code{AVX512_VBMI2} -- The AVX512_VBMI2 instruction extensions. | |
218 | ||
219 | @item | |
220 | @code{AVX512_VNNI} -- The AVX512_VNNI instruction extensions. | |
221 | ||
222 | @item | |
223 | @code{AVX512_VP2INTERSECT} -- The AVX512_VP2INTERSECT instruction | |
224 | extensions. | |
225 | ||
226 | @item | |
227 | @code{AVX512_VPOPCNTDQ} -- The AVX512_VPOPCNTDQ instruction extensions. | |
228 | ||
229 | @item | |
230 | @code{AVX512BW} -- The AVX512BW instruction extensions. | |
231 | ||
232 | @item | |
233 | @code{AVX512CD} -- The AVX512CD instruction extensions. | |
234 | ||
235 | @item | |
236 | @code{AVX512ER} -- The AVX512ER instruction extensions. | |
237 | ||
238 | @item | |
239 | @code{AVX512DQ} -- The AVX512DQ instruction extensions. | |
240 | ||
241 | @item | |
242 | @code{AVX512F} -- The AVX512F instruction extensions. | |
243 | ||
244 | @item | |
245 | @code{AVX512PF} -- The AVX512PF instruction extensions. | |
246 | ||
247 | @item | |
248 | @code{AVX512VL} -- The AVX512VL instruction extensions. | |
249 | ||
250 | @item | |
251 | @code{BMI1} -- BMI1 instructions. | |
252 | ||
253 | @item | |
254 | @code{BMI2} -- BMI2 instructions. | |
255 | ||
256 | @item | |
257 | @code{CLDEMOTE} -- CLDEMOTE instruction. | |
258 | ||
259 | @item | |
260 | @code{CLFLUSHOPT} -- CLFLUSHOPT instruction. | |
261 | ||
262 | @item | |
263 | @code{CLFSH} -- CLFLUSH instruction. | |
264 | ||
265 | @item | |
266 | @code{CLWB} -- CLWB instruction. | |
267 | ||
268 | @item | |
269 | @code{CMOV} -- Conditional Move instructions. | |
270 | ||
271 | @item | |
272 | @code{CMPXCHG16B} -- CMPXCHG16B instruction. | |
273 | ||
274 | @item | |
275 | @code{CNXT_ID} -- L1 Context ID. | |
276 | ||
277 | @item | |
278 | @code{CORE_CAPABILITIES} -- IA32_CORE_CAPABILITIES MSR. | |
279 | ||
280 | @item | |
281 | @code{CX8} -- CMPXCHG8B instruction. | |
282 | ||
283 | @item | |
284 | @code{DCA} -- Data prefetch from a memory mapped device. | |
285 | ||
286 | @item | |
287 | @code{DE} -- Debugging Extensions. | |
288 | ||
289 | @item | |
290 | @code{DEPR_FPU_CS_DS} -- Deprecates FPU CS and FPU DS values. | |
291 | ||
292 | @item | |
293 | @code{DS} -- Debug Store. | |
294 | ||
295 | @item | |
296 | @code{DS_CPL} -- CPL Qualified Debug Store. | |
297 | ||
298 | @item | |
299 | @code{DTES64} -- 64-bit DS Area. | |
300 | ||
301 | @item | |
302 | @code{EIST} -- Enhanced Intel SpeedStep technology. | |
303 | ||
304 | @item | |
305 | @code{ENQCMD} -- Enqueue Stores instructions. | |
306 | ||
307 | @item | |
308 | @code{ERMS} -- Enhanced REP MOVSB/STOSB. | |
309 | ||
310 | @item | |
311 | @code{F16C} -- 16-bit floating-point conversion instructions. | |
312 | ||
313 | @item | |
314 | @code{FMA} -- FMA extensions using YMM state. | |
315 | ||
316 | @item | |
317 | @code{FMA4} -- FMA4 instruction extensions. | |
318 | ||
319 | @item | |
320 | @code{FPU} -- X87 Floating Point Unit On-Chip. | |
321 | ||
322 | @item | |
323 | @code{FSGSBASE} -- RDFSBASE/RDGSBASE/WRFSBASE/WRGSBASE instructions. | |
324 | ||
325 | @item | |
326 | @code{FSRM} -- Fast Short REP MOV. | |
327 | ||
328 | @item | |
329 | @code{FXSR} -- FXSAVE and FXRSTOR instructions. | |
330 | ||
331 | @item | |
332 | @code{GFNI} -- GFNI instruction extensions. | |
333 | ||
334 | @item | |
335 | @code{HLE} -- HLE instruction extensions. | |
336 | ||
337 | @item | |
338 | @code{HTT} -- Max APIC IDs reserved field is Valid. | |
339 | ||
340 | @item | |
341 | @code{HYBRID} -- Hybrid processor. | |
342 | ||
343 | @item | |
344 | @code{IBRS_IBPB} -- Indirect branch restricted speculation (IBRS) and | |
345 | the indirect branch predictor barrier (IBPB). | |
346 | ||
347 | @item | |
348 | @code{IBT} -- Intel Indirect Branch Tracking instruction extensions. | |
349 | ||
350 | @item | |
351 | @code{INVARIANT_TSC} -- Invariant TSC. | |
352 | ||
353 | @item | |
354 | @code{INVPCID} -- INVPCID instruction. | |
355 | ||
356 | @item | |
357 | @code{L1D_FLUSH} -- IA32_FLUSH_CMD MSR. | |
358 | ||
359 | @item | |
360 | @code{LAHF64_SAHF64} -- LAHF/SAHF available in 64-bit mode. | |
361 | ||
362 | @item | |
363 | @code{LM} -- Long mode. | |
364 | ||
365 | @item | |
366 | @code{LWP} -- Lightweight profiling. | |
367 | ||
368 | @item | |
369 | @code{LZCNT} -- LZCNT instruction. | |
370 | ||
371 | @item | |
372 | @code{MCA} -- Machine Check Architecture. | |
373 | ||
374 | @item | |
375 | @code{MCE} -- Machine Check Exception. | |
376 | ||
377 | @item | |
378 | @code{MD_CLEAR} -- MD_CLEAR. | |
379 | ||
380 | @item | |
381 | @code{MMX} -- Intel MMX Technology. | |
382 | ||
383 | @item | |
384 | @code{MONITOR} -- MONITOR/MWAIT instructions. | |
385 | ||
386 | @item | |
387 | @code{MOVBE} -- MOVBE instruction. | |
388 | ||
389 | @item | |
390 | @code{MOVDIRI} -- MOVDIRI instruction. | |
391 | ||
392 | @item | |
393 | @code{MOVDIR64B} -- MOVDIR64B instruction. | |
394 | ||
395 | @item | |
396 | @code{MPX} -- Intel Memory Protection Extensions. | |
397 | ||
398 | @item | |
399 | @code{MSR} -- Model Specific Registers RDMSR and WRMSR instructions. | |
400 | ||
401 | @item | |
402 | @code{MTRR} -- Memory Type Range Registers. | |
403 | ||
404 | @item | |
405 | @code{NX} -- No-execute page protection. | |
406 | ||
407 | @item | |
408 | @code{OSPKE} -- OS has set CR4.PKE to enable protection keys. | |
409 | ||
410 | @item | |
411 | @code{OSXSAVE} -- The OS has set CR4.OSXSAVE[bit 18] to enable | |
412 | XSETBV/XGETBV instructions to access XCR0 and to support processor | |
413 | extended state management using XSAVE/XRSTOR. | |
414 | ||
415 | @item | |
416 | @code{PAE} -- Physical Address Extension. | |
417 | ||
418 | @item | |
419 | @code{PAGE1GB} -- 1-GByte page. | |
420 | ||
421 | @item | |
422 | @code{PAT} -- Page Attribute Table. | |
423 | ||
424 | @item | |
425 | @code{PBE} -- Pending Break Enable. | |
426 | ||
427 | @item | |
428 | @code{PCID} -- Process-context identifiers. | |
429 | ||
430 | @item | |
431 | @code{PCLMULQDQ} -- PCLMULQDQ instruction. | |
432 | ||
433 | @item | |
434 | @code{PCONFIG} -- PCONFIG instruction. | |
435 | ||
436 | @item | |
437 | @code{PDCM} -- Perfmon and Debug Capability. | |
438 | ||
439 | @item | |
440 | @code{PGE} -- Page Global Bit. | |
441 | ||
442 | @item | |
443 | @code{PKS} -- Protection keys for supervisor-mode pages. | |
444 | ||
445 | @item | |
446 | @code{PKU} -- Protection keys for user-mode pages. | |
447 | ||
448 | @item | |
449 | @code{POPCNT} -- POPCNT instruction. | |
450 | ||
451 | @item | |
452 | @code{PREFETCHW} -- PREFETCHW instruction. | |
453 | ||
454 | @item | |
455 | @code{PREFETCHWT1} -- PREFETCHWT1 instruction. | |
456 | ||
457 | @item | |
458 | @code{PSE} -- Page Size Extension. | |
459 | ||
460 | @item | |
461 | @code{PSE_36} -- 36-Bit Page Size Extension. | |
462 | ||
463 | @item | |
464 | @code{PSN} -- Processor Serial Number. | |
465 | ||
466 | @item | |
467 | @code{RDPID} -- RDPID instruction. | |
468 | ||
469 | @item | |
470 | @code{RDRAND} -- RDRAND instruction. | |
471 | ||
472 | @item | |
473 | @code{RDSEED} -- RDSEED instruction. | |
474 | ||
475 | @item | |
476 | @code{RDT_A} -- Intel Resource Director Technology (Intel RDT) Allocation | |
477 | capability. | |
478 | ||
479 | @item | |
480 | @code{RDT_M} -- Intel Resource Director Technology (Intel RDT) Monitoring | |
481 | capability. | |
482 | ||
483 | @item | |
484 | @code{RDTSCP} -- RDTSCP instruction. | |
485 | ||
486 | @item | |
487 | @code{RTM} -- RTM instruction extensions. | |
488 | ||
489 | @item | |
490 | @code{SDBG} -- IA32_DEBUG_INTERFACE MSR for silicon debug. | |
491 | ||
492 | @item | |
493 | @code{SEP} -- SYSENTER and SYSEXIT instructions. | |
494 | ||
495 | @item | |
496 | @code{SERIALIZE} -- SERIALIZE instruction. | |
497 | ||
498 | @item | |
499 | @code{SGX} -- Intel Software Guard Extensions. | |
500 | ||
501 | @item | |
502 | @code{SGX_LC} -- SGX Launch Configuration. | |
503 | ||
504 | @item | |
505 | @code{SHA} -- SHA instruction extensions. | |
506 | ||
507 | @item | |
508 | @code{SHSTK} -- Intel Shadow Stack instruction extensions. | |
509 | ||
510 | @item | |
511 | @code{SMAP} -- Supervisor-Mode Access Prevention. | |
512 | ||
513 | @item | |
514 | @code{SMEP} -- Supervisor-Mode Execution Prevention. | |
515 | ||
516 | @item | |
517 | @code{SMX} -- Safer Mode Extensions. | |
518 | ||
519 | @item | |
520 | @code{SS} -- Self Snoop. | |
521 | ||
522 | @item | |
523 | @code{SSBD} -- Speculative Store Bypass Disable (SSBD). | |
524 | ||
525 | @item | |
526 | @code{SSE} -- Streaming SIMD Extensions. | |
527 | ||
528 | @item | |
529 | @code{SSE2} -- Streaming SIMD Extensions 2. | |
530 | ||
531 | @item | |
532 | @code{SSE3} -- Streaming SIMD Extensions 3. | |
533 | ||
534 | @item | |
535 | @code{SSE4_1} -- Streaming SIMD Extensions 4.1. | |
536 | ||
537 | @item | |
538 | @code{SSE4_2} -- Streaming SIMD Extensions 4.2. | |
539 | ||
540 | @item | |
541 | @code{SSE4A} -- SSE4A instruction extensions. | |
542 | ||
543 | @item | |
544 | @code{SSSE3} -- Supplemental Streaming SIMD Extensions 3. | |
545 | ||
546 | @item | |
547 | @code{STIBP} -- Single thread indirect branch predictors (STIBP). | |
548 | ||
549 | @item | |
550 | @code{SVM} -- Secure Virtual Machine. | |
551 | ||
552 | @item | |
553 | @code{SYSCALL_SYSRET} -- SYSCALL/SYSRET instructions. | |
554 | ||
555 | @item | |
556 | @code{TBM} -- Trailing bit manipulation instructions. | |
557 | ||
558 | @item | |
559 | @code{TM} -- Thermal Monitor. | |
560 | ||
561 | @item | |
562 | @code{TM2} -- Thermal Monitor 2. | |
563 | ||
564 | @item | |
565 | @code{TRACE} -- Intel Processor Trace. | |
566 | ||
567 | @item | |
568 | @code{TSC} -- Time Stamp Counter. RDTSC instruction. | |
569 | ||
570 | @item | |
571 | @code{TSC_ADJUST} -- IA32_TSC_ADJUST MSR. | |
572 | ||
573 | @item | |
574 | @code{TSC_DEADLINE} -- Local APIC timer supports one-shot operation | |
575 | using a TSC deadline value. | |
576 | ||
577 | @item | |
578 | @code{TSXLDTRK} -- TSXLDTRK instructions. | |
579 | ||
580 | @item | |
581 | @code{UMIP} -- User-mode instruction prevention. | |
582 | ||
583 | @item | |
584 | @code{VAES} -- VAES instruction extensions. | |
585 | ||
586 | @item | |
587 | @code{VME} -- Virtual 8086 Mode Enhancements. | |
588 | ||
589 | @item | |
590 | @code{VMX} -- Virtual Machine Extensions. | |
591 | ||
592 | @item | |
593 | @code{VPCLMULQDQ} -- VPCLMULQDQ instruction. | |
594 | ||
595 | @item | |
596 | @code{WAITPKG} -- WAITPKG instruction extensions. | |
597 | ||
598 | @item | |
599 | @code{WBNOINVD} -- WBINVD/WBNOINVD instructions. | |
600 | ||
601 | @item | |
602 | @code{X2APIC} -- x2APIC. | |
603 | ||
604 | @item | |
605 | @code{XFD} -- Extended Feature Disable (XFD). | |
606 | ||
607 | @item | |
608 | @code{XGETBV_ECX_1} -- XGETBV with ECX = 1. | |
609 | ||
610 | @item | |
611 | @code{XOP} -- XOP instruction extensions. | |
612 | ||
613 | @item | |
614 | @code{XSAVE} -- The XSAVE/XRSTOR processor extended states feature, the | |
615 | XSETBV/XGETBV instructions, and XCR0. | |
616 | ||
617 | @item | |
618 | @code{XSAVEC} -- XSAVEC instruction. | |
619 | ||
620 | @item | |
621 | @code{XSAVEOPT} -- XSAVEOPT instruction. | |
622 | ||
623 | @item | |
624 | @code{XSAVES} -- XSAVES/XRSTORS instructions. | |
625 | ||
626 | @item | |
627 | @code{XTPRUPDCTRL} -- xTPR Update Control. | |
628 | ||
629 | @end itemize | |
630 | ||
631 | You could query if a processor supports @code{AVX} with: | |
632 | ||
633 | @smallexample | |
634 | #include <sys/platform/x86.h> | |
635 | ||
636 | int | |
637 | support_avx (void) | |
638 | @{ | |
639 | return HAS_CPU_FEATURE (AVX); | |
640 | @} | |
641 | @end smallexample | |
642 | ||
643 | and if @code{AVX} is usable with: | |
644 | ||
645 | @smallexample | |
646 | #include <sys/platform/x86.h> | |
647 | ||
648 | int | |
649 | usable_avx (void) | |
650 | @{ | |
651 | return CPU_FEATURE_USABLE (AVX); | |
652 | @} | |
653 | @end smallexample |