1;------------------------------------------------------------------------------ 2; 3; Copyright (c) 2006 - 2008, Intel Corporation. All rights reserved.<BR> 4; SPDX-License-Identifier: BSD-2-Clause-Patent 5; 6; Module Name: 7; 8; CpuId.Asm 9; 10; Abstract: 11; 12; AsmCpuid function 13; 14; Notes: 15; 16;------------------------------------------------------------------------------ 17 18 DEFAULT REL 19 SECTION .text 20 21;------------------------------------------------------------------------------ 22; VOID 23; EFIAPI 24; AsmCpuid ( 25; IN UINT32 RegisterInEax, 26; OUT UINT32 *RegisterOutEax OPTIONAL, 27; OUT UINT32 *RegisterOutEbx OPTIONAL, 28; OUT UINT32 *RegisterOutEcx OPTIONAL, 29; OUT UINT32 *RegisterOutEdx OPTIONAL 30; ) 31;------------------------------------------------------------------------------ 32global ASM_PFX(AsmCpuid) 33ASM_PFX(AsmCpuid): 34 push rbx 35 mov eax, ecx 36 push rax ; save Index on stack 37 push rdx 38 cpuid 39 test r9, r9 40 jz .0 41 mov [r9], ecx 42.0: 43 pop rcx 44 jrcxz .1 45 mov [rcx], eax 46.1: 47 mov rcx, r8 48 jrcxz .2 49 mov [rcx], ebx 50.2: 51 mov rcx, [rsp + 0x38] 52 jrcxz .3 53 mov [rcx], edx 54.3: 55 pop rax ; restore Index to rax as return value 56 pop rbx 57 ret 58 59