]> git.proxmox.com Git - mirror_edk2.git/blobdiff - EdkCompatibilityPkg/Foundation/Library/EdkIIGlueLib/Library/BaseLib/X64/CpuId.asm
Add in the 1st version of ECP.
[mirror_edk2.git] / EdkCompatibilityPkg / Foundation / Library / EdkIIGlueLib / Library / BaseLib / X64 / CpuId.asm
diff --git a/EdkCompatibilityPkg/Foundation/Library/EdkIIGlueLib/Library/BaseLib/X64/CpuId.asm b/EdkCompatibilityPkg/Foundation/Library/EdkIIGlueLib/Library/BaseLib/X64/CpuId.asm
new file mode 100644 (file)
index 0000000..5680014
--- /dev/null
@@ -0,0 +1,60 @@
+; Copyright (c) 2004, Intel Corporation                                                         \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
+; Module Name:\r
+;\r
+;   CpuId.Asm\r
+;\r
+; Abstract:\r
+;\r
+;   AsmCpuid function\r
+;\r
+; Notes:\r
+;\r
+;------------------------------------------------------------------------------\r
+\r
+    .code\r
+\r
+;------------------------------------------------------------------------------\r
+;  VOID\r
+;  EFIAPI\r
+;  AsmCpuid (\r
+;    IN   UINT32  RegisterInEax,\r
+;    OUT  UINT32  *RegisterOutEax  OPTIONAL,\r
+;    OUT  UINT32  *RegisterOutEbx  OPTIONAL,\r
+;    OUT  UINT32  *RegisterOutEcx  OPTIONAL,\r
+;    OUT  UINT32  *RegisterOutEdx  OPTIONAL\r
+;    )\r
+;------------------------------------------------------------------------------\r
+AsmCpuid    PROC    USES    rbx\r
+    mov     eax, ecx\r
+    push    rax                         ; save Index on stack\r
+    push    rdx\r
+    cpuid\r
+    test    r9, r9\r
+    jz      @F\r
+    mov     [r9], ecx\r
+@@:\r
+    pop     rcx\r
+    jrcxz   @F\r
+    mov     [rcx], eax\r
+@@:\r
+    mov     rcx, r8\r
+    jrcxz   @F\r
+    mov     [rcx], ebx\r
+@@:\r
+    mov     rcx, [rsp + 38h]\r
+    jrcxz   @F\r
+    mov     [rcx], edx\r
+@@:\r
+    pop     rax                         ; restore Index to rax as return value\r
+    ret\r
+AsmCpuid    ENDP\r
+\r
+    END\r