1 #------------------------------------------------------------------------------ 2 # 3 # Copyright (c) 2006 - 2008, Intel Corporation. All rights reserved.<BR> 4 # This program and the accompanying materials 5 # are licensed and made available under the terms and conditions of the BSD License 6 # which accompanies this distribution. The full text of the license may be found at 7 # http://opensource.org/licenses/bsd-license.php. 8 # 9 # THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, 10 # WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. 11 # 12 # Module Name: 13 # 14 # CpuIdEx.S 15 # 16 # Abstract: 17 # 18 # AsmCpuidEx function 19 # 20 # Notes: 21 # 22 #------------------------------------------------------------------------------ 23 24 #------------------------------------------------------------------------------ 25 # UINT32 26 # EFIAPI 27 # AsmCpuidEx ( 28 # IN UINT32 RegisterInEax, 29 # IN UINT32 RegisterInEcx, 30 # OUT UINT32 *RegisterOutEax OPTIONAL, 31 # OUT UINT32 *RegisterOutEbx OPTIONAL, 32 # OUT UINT32 *RegisterOutEcx OPTIONAL, 33 # OUT UINT32 *RegisterOutEdx OPTIONAL 34 # ) 35 #------------------------------------------------------------------------------ 36 ASM_GLOBAL ASM_PFX(AsmCpuidEx) 37 ASM_PFX(AsmCpuidEx): 38 push %rbx 39 movl %ecx,%eax 40 movl %edx,%ecx 41 push %rax # save Index on stack 42 cpuid 43 mov 0x38(%rsp), %r10 44 test %r10, %r10 45 jz L1 46 mov %ecx,(%r10) 47 L1: 48 mov %r8, %rcx 49 jrcxz L2 50 movl %eax,(%rcx) 51 L2: 52 mov %r9, %rcx 53 jrcxz L3 54 mov %ebx, (%rcx) 55 L3: 56 mov 0x40(%rsp), %rcx 57 jrcxz L4 58 mov %edx, (%rcx) 59 L4: 60 pop %rax # restore Index to rax as return value 61 pop %rbx 62 ret 63