diff options
author | raywu <raywu0301@gmail.com> | 2018-06-15 00:00:50 +0800 |
---|---|---|
committer | raywu <raywu0301@gmail.com> | 2018-06-15 00:00:50 +0800 |
commit | b7c51c9cf4864df6aabb99a1ae843becd577237c (patch) | |
tree | eebe9b0d0ca03062955223097e57da84dd618b9a /Core/CPU/x64/x64AsmLib/CPULib_CpuID.asm | |
download | zprj-b7c51c9cf4864df6aabb99a1ae843becd577237c.tar.xz |
Diffstat (limited to 'Core/CPU/x64/x64AsmLib/CPULib_CpuID.asm')
-rw-r--r-- | Core/CPU/x64/x64AsmLib/CPULib_CpuID.asm | 130 |
1 files changed, 130 insertions, 0 deletions
diff --git a/Core/CPU/x64/x64AsmLib/CPULib_CpuID.asm b/Core/CPU/x64/x64AsmLib/CPULib_CpuID.asm new file mode 100644 index 0000000..53719f2 --- /dev/null +++ b/Core/CPU/x64/x64AsmLib/CPULib_CpuID.asm @@ -0,0 +1,130 @@ +;************************************************************************* +;************************************************************************* +;** ** +;** (C)Copyright 1985-2009, American Megatrends, Inc. ** +;** ** +;** All Rights Reserved. ** +;** ** +;** 5555 Oakbrook Parkway, Suite 200, Norcross, GA 30093 ** +;** ** +;** Phone: (770)-246-8600 ** +;** ** +;************************************************************************* +;************************************************************************* + +;************************************************************************* +; $Header: /Alaska/SOURCE/Core/Modules/x64Core/x64AsmLib/CPULib_CpuID.asm 2 11/11/11 3:40p Artems $ +; +; $Revision: 2 $ +; +; $Date: 11/11/11 3:40p $ +;************************************************************************* +; Revision History +; ---------------- +; $Log: /Alaska/SOURCE/Core/Modules/x64Core/x64AsmLib/CPULib_CpuID.asm $ +; +; 2 11/11/11 3:40p Artems +; Bug fix: Verify pointer is not NULL, when return value +; +; 1 10/01/10 5:07p Felixp +; +; 1 8/24/06 12:57p Felixp +; +;************************************************************************* +;<AMI_FHDR_START> +; +; Name: +; +; Description: +; +;<AMI_FHDR_END> +;************************************************************************* +.code + +;************************************************************************* +;<AMI_PHDR_START> +; +; Name: CPULib_CpuID +; +; Description: +; VOID CPULib_CpuID(IN UINT32 CpuIDIndex, IN UINT32 *pRegEAX, +; IN UINT32 *pRegEBX, IN UINT32 *pRegECX, IN UINT32 *pRegEDX) issues the +; CPUID instruction with the index provided and returns the register values. +; +; Input: +; IN UINT32 CpuIDIndex +; 32-bit CPUID index. +; +; IN UINT32 *pRegEAX +; Value of EAX after CPUID instruction. +; +; IN UINT32 *pRegEBX +; Value of EBX after CPUID instruction. +; +; IN UINT32 *pRegECX +; Value of ECX after CPUID instruction. +; +; IN UINT32 *pRegEDX +; Value of EDX after CPUID instruction. +; +; Output: +; VOID. +; +; Modified: +; +; Referrals: +; +; Notes: +; +;<AMI_PHDR_END> +;************************************************************************* +CPULib_CpuID proc +;rcx = CpuIDIndex +;rdx = pRegEax +;r8 = pRegEBX +;r9 = pRegECX +;[rsp + 8] = pRegEDX:DWORD + + push rbx + mov r11, [rsp + 30h] ;pRegEDX + mov r10, r9 ;pRegECX + mov r9, r8 ;pRegEBX + mov r8, rdx ;pRegEAX + + mov eax, ecx + mov ecx, [r10] + cpuid + + or r8, r8 + jz skip1 + mov [r8], eax +skip1: + or r9, r9 + jz skip2 + mov [r9], ebx +skip2: + or r10, r10 + jz skip3 + mov [r10], ecx +skip3: + or r11, r11 + jz skip4 + mov [r11], edx +skip4: + pop rbx + ret +CPULib_CpuID endp + +END +;************************************************************************* +;************************************************************************* +;** ** +;** (C)Copyright 1985-2009, American Megatrends, Inc. ** +;** ** +;** All Rights Reserved. ** +;** ** +;** 5555 Oakbrook Parkway, Suite 200, Norcross, GA 30093 ** +;** ** +;** Phone: (770)-246-8600 ** +;** ** +;************************************************************************* |