]> git.ipfire.org Git - thirdparty/glibc.git/blame - manual/platform.texi
Fix handling of collating symbols in fnmatch (bug 26620)
[thirdparty/glibc.git] / manual / platform.texi
CommitLineData
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
16Facilities specific to PowerPC that are not specific to a particular
17operating 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
21Read the current value of the Time Base Register.
22
23The @dfn{Time Base Register} is a 64-bit register that stores a monotonically
24incremented value updated at a system-dependent frequency that may be
25different 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
29without requiring assistance from the operating system, so it is very
30efficient.
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
45Read the current frequency at which the Time Base Register is updated.
46
47This frequency is not related to the processor clock or the bus clock.
48It is also possible that this frequency is not constant. More information is
49available in @cite{Power ISA 2.06b - Book II - Section 5.2}.
50@end deftypefun
9323d39b
EM
51
52The following functions provide hints about the usage of resources that are
53shared with other processors. They can be used, for example, if a program
54waiting on a lock intends to divert the shared resources to be used by other
55processors. More information is available in @cite{Power ISA 2.06b - Book II -
56Section 3.2}.
57
58@deftypefun {void} __ppc_yield (void)
e2dfb7f4 59@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
9323d39b
EM
60Provide a hint that performance will probably be improved if shared resources
61dedicated 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
66Provide a hint that performance will probably be improved if shared resources
67dedicated to the executing processor are released until all outstanding storage
68accesses 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
73Provide a hint that performance will probably be improved if shared resources
74dedicated to the executing processor are released until all outstanding storage
75accesses to cacheable storage for which the data is not in the cache have been
76completed.
2b66ef5d 77@end deftypefun
d116b7c4
AZ
78
79@deftypefun {void} __ppc_set_ppr_med (void)
e2dfb7f4 80@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
d116b7c4
AZ
81Set the Program Priority Register to medium value (default).
82
83The @dfn{Program Priority Register} (PPR) is a 64-bit register that controls
84the program's priority. By adjusting the PPR value the programmer may
85improve system throughput by causing the system resources to be used
86more efficiently, especially in contention situations.
87The three unprivileged states available are covered by the functions
88@code{__ppc_set_ppr_med} (medium -- default), @code{__ppc_set_ppc_low} (low)
89and @code{__ppc_set_ppc_med_low} (medium low). More information
90available 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
95Set 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 100Set the Program Priority Register to medium low value.
9323d39b 101@end deftypefun
1747fcda
GG
102
103Power ISA 2.07 extends the priorities that can be set to the Program Priority
104Register (PPR). The following functions implement the new priority levels:
105very low and medium high.
106
107@deftypefun {void} __ppc_set_ppr_very_low (void)
108@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
109Set 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{}}
114Set the Program Priority Register to medium high value. The medium high
115priority is privileged and may only be set during certain time intervals by
116problem-state programs. If the program priority is medium high when the time
117interval expires or if an attempt is made to set the priority to medium high
118when 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
124Cache management facilities specific to RISC-V systems that implement the Linux
125ABI 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{}}
129Enforce ordering between stores and instruction cache fetches. The range of
130addresses 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
132the default behavior (a @var{flags} value of 0) being to enforce the fence on
133all threads in the current process. Setting the
134@code{SYS_RISCV_FLUSH_ICACHE_LOCAL} bit allows users to indicate that enforcing
135ordering on only the current thread is necessary. All other flag bits are
136reserved.
137@end deftypefun
96203980
L
138
139@node X86
140@appendixsec X86-specific Facilities
141
142Facilities specific to X86 that are not specific to a particular
143operating 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{}}
147Return a pointer to x86 CPU feature structure used by query macros for x86
148CPU features. If @var{max} exceeds @code{COMMON_CPUID_INDEX_MAX} which
149is the limit of the CPUID leaves supported by @Theglibc{}, the function
150returns @code{NULL}, indicating that the queried processor feature is
151unsupported by @Theglibc{} run-time.
152@end deftypefun
153
154@deftypefn Macro int HAS_CPU_FEATURE (@var{name})
155This 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})
160This 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
164The 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
224extensions.
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
345the 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
412XSETBV/XGETBV instructions to access XCR0 and to support processor
413extended 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
477capability.
478
479@item
480@code{RDT_M} -- Intel Resource Director Technology (Intel RDT) Monitoring
481capability.
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
575using 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
615XSETBV/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
631You could query if a processor supports @code{AVX} with:
632
633@smallexample
634#include <sys/platform/x86.h>
635
636int
637support_avx (void)
638@{
639 return HAS_CPU_FEATURE (AVX);
640@}
641@end smallexample
642
643and if @code{AVX} is usable with:
644
645@smallexample
646#include <sys/platform/x86.h>
647
648int
649usable_avx (void)
650@{
651 return CPU_FEATURE_USABLE (AVX);
652@}
653@end smallexample