--- /dev/null
+/** @file\r
+ AsmCpuid function.\r
+\r
+ Copyright (c) 2006 - 2007, Intel Corporation<BR>\r
+ All rights reserved. This program and the accompanying materials\r
+ are licensed and made available under the terms and conditions of the BSD License\r
+ which accompanies this distribution. The full text of the license may be found at\r
+ http://opensource.org/licenses/bsd-license.php\r
+\r
+ THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
+ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
+\r
+**/\r
+\r
+UINT32\r
+EFIAPI\r
+AsmCpuid (\r
+ IN UINT32 Index,\r
+ OUT UINT32 *RegisterEax, OPTIONAL\r
+ OUT UINT32 *RegisterEbx, OPTIONAL\r
+ OUT UINT32 *RegisterEcx, OPTIONAL\r
+ OUT UINT32 *RegisterEdx OPTIONAL\r
+ )\r
+{\r
+ _asm {\r
+ mov eax, Index\r
+ cpuid\r
+ push ecx\r
+ mov ecx, RegisterEax\r
+ jecxz SkipEax\r
+ mov [ecx], eax\r
+SkipEax:\r
+ mov ecx, RegisterEbx\r
+ jecxz SkipEbx\r
+ mov [ecx], ebx\r
+SkipEbx:\r
+ pop eax\r
+ mov ecx, RegisterEcx\r
+ jecxz SkipEcx\r
+ mov [ecx], eax\r
+SkipEcx:\r
+ mov ecx, RegisterEdx\r
+ jecxz SkipEdx\r
+ mov [ecx], edx\r
+SkipEdx:\r
+ mov eax, Index\r
+ }\r
+}\r
+\r