-
Notifications
You must be signed in to change notification settings - Fork 15.4k
[clang] [doc] Added documentation to intrinsics in cpuid.h #170507
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Merged
romanova-ekaterina
merged 2 commits into
llvm:main
from
romanova-ekaterina:doxygen-comments-cpuid-header-intrinsics
Dec 6, 2025
Merged
Changes from 1 commit
Commits
File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
|
|
@@ -278,6 +278,23 @@ | |
| : "0"(__leaf), "2"(__count)) | ||
| #endif | ||
|
|
||
| /// Queries the processor to determine the highest supported \c CPUID leaf. | ||
| /// | ||
| /// \headerfile <cpuid.h> | ||
| /// | ||
| /// This intrinsic corresponds to the <c> CPUID </c> instruction. | ||
| /// | ||
| /// \param __leaf | ||
| /// \a __leaf can be either 0x0 or 0x8000000. If \a __leaf == 0x0, the | ||
| /// highest supported value for basic \c CPUID information is returned. | ||
| /// If \a __leaf == 0x8000000, the highest supported value for extended | ||
| /// \c CPUID information is returned. | ||
| /// \param __sig | ||
| /// If the \a __sig pointer is non-null, the first four bytes of the | ||
| /// signature (as found in the \c ebx register) are returned in the | ||
| /// location pointed to by \a __sig. | ||
| /// \returns Returns 0 if \c CPUID is supported; otherwise returns the value | ||
| /// that \c CPUID returns in the \c eax register. | ||
| static __inline unsigned int __get_cpuid_max (unsigned int __leaf, | ||
| unsigned int *__sig) | ||
| { | ||
|
|
@@ -311,6 +328,32 @@ static __inline unsigned int __get_cpuid_max (unsigned int __leaf, | |
| return __eax; | ||
| } | ||
|
|
||
| /// For the requested \c CPUID leaf, queries the processor for information | ||
| /// about the CPU type and CPU features (such as processor vendor, supported | ||
| /// instruction sets, CPU capabilities, cache sizes, CPU model and family, and | ||
| /// other hardware details). This intrinsic is only available on x86 and x64. | ||
| /// | ||
| /// \headerfile <cpuid.h> | ||
| /// | ||
| /// This intrinsic corresponds to the <c> CPUID </c> instruction. | ||
| /// | ||
| /// \param __leaf | ||
| /// An unsigned integer that identifies the level (also called "leaf") at | ||
| /// which the \c CPUID instruction will be executed. | ||
| /// \param __eax | ||
| /// A pointer to an integer that corresponds to the \c eax register where | ||
| /// \c CPUID stores output results. | ||
| /// \param __ebx | ||
| /// A pointer to an integer that corresponds to the \c ebx register where | ||
| /// \c CPUID stores output results. | ||
| /// \param __ecx | ||
| /// A pointer to an integer that corresponds to the \c ecx register where | ||
| /// \c CPUID stores output results. | ||
| /// \param __edx | ||
| /// A pointer to an integer that corresponds to the \c edx register where | ||
| /// \c CPUID stores output results. | ||
| /// \returns Returns 1 if the requested \c CPUID leaf is supported; otherwise | ||
| /// returns 0. | ||
| static __inline int __get_cpuid (unsigned int __leaf, unsigned int *__eax, | ||
| unsigned int *__ebx, unsigned int *__ecx, | ||
| unsigned int *__edx) | ||
|
|
@@ -324,6 +367,36 @@ static __inline int __get_cpuid (unsigned int __leaf, unsigned int *__eax, | |
| return 1; | ||
| } | ||
|
|
||
| /// For the requested \c CPUID leaf and subleaf, queries the processor for | ||
| /// information about the CPU type and CPU features (such as processor vendor, | ||
| /// supported instruction sets, CPU capabilities, cache sizes, CPU model and | ||
| /// family, and other hardware details). This intrinsic is only available on | ||
| /// x86 and x64. | ||
| /// | ||
| /// \headerfile <cpuid.h> | ||
| /// | ||
| /// This intrinsic corresponds to the <c> CPUID </c> instruction. | ||
| /// | ||
| /// \param __leaf | ||
| /// An unsigned integer that identifies the level (also called "leaf") at | ||
| /// which the \c CPUID instruction will be executed. | ||
| /// \param __subleaf | ||
| /// An unsigned integer that identifies the sublevel (also called | ||
| /// "subleaf") at which the \c CPUID instruction will be executed. | ||
| /// \param __eax | ||
| /// A pointer to an integer that corresponds to the \c eax register where | ||
| /// \c CPUID stores output results. | ||
| /// \param __ebx | ||
| /// A pointer to an integer that corresponds to the \c ebx register where | ||
| /// \c CPUID stores output results. | ||
| /// \param __ecx | ||
| /// A pointer to an integer that corresponds to the \c ecx register where | ||
| /// \c CPUID stores output results. | ||
| /// \param __edx | ||
| /// A pointer to an integer that corresponds to the \c edx register where | ||
| /// \c CPUID stores output results. | ||
| /// \returns Returns 1 if the requested \c CPUID leaf is supported; otherwise | ||
| /// returns 0. | ||
| static __inline int __get_cpuid_count (unsigned int __leaf, | ||
| unsigned int __subleaf, | ||
| unsigned int *__eax, unsigned int *__ebx, | ||
|
|
@@ -345,6 +418,27 @@ static __inline int __get_cpuid_count (unsigned int __leaf, | |
| // builtin. Given __has_builtin does not detect builtins on aux triples, we need | ||
| // to explicitly check for some offloading cases. | ||
| #if !defined(__NVPTX__) && !defined(__AMDGPU__) && !defined(__SPIRV__) | ||
| /// Executes the \c CPUID instruction with the specified leaf and subleaf | ||
| /// values, and returns the results from the CPU's registers. | ||
| /// | ||
| /// \headerfile <cpuid.h> | ||
| /// | ||
| /// This intrinsic corresponds to the <c> CPUID </c> instruction. | ||
| /// | ||
| /// \param __cpu_info | ||
| /// An output array of four integers: | ||
| /// <ul> | ||
| /// <li>\a __cpuInfo[0] receives the value of the \c eax register.</li> | ||
| /// <li>\a__cpuInfo[1] receives the value of the \c ebx register.</li> | ||
| /// <li>\a__cpuInfo[2] receives the value of the \c ecx register.</li> | ||
| /// <li>\a__cpuInfo[3] receives the value of the \c edx register.</li> | ||
|
||
| /// </ul> | ||
| /// \param __leaf | ||
| /// An unsigned integer that identifies the level (also called the "leaf") | ||
| /// at which the \c CPUID instruction will be executed. | ||
| /// \param __subleaf | ||
| /// An unsigned integer that identifies the sublevel (also called the | ||
| /// "subleaf") at which the \c CPUID instruction will be executed. | ||
| static __inline void __cpuidex(int __cpu_info[4], int __leaf, int __subleaf) { | ||
| __cpuid_count(__leaf, __subleaf, __cpu_info[0], __cpu_info[1], __cpu_info[2], | ||
| __cpu_info[3]); | ||
|
|
||
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
nit: would it better to use upper case
\c EAX. The same for below.There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Fixed in the follow up commit.