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#------------------------------------------------------------------------------ 36ASM_GLOBAL ASM_PFX(AsmCpuidEx) 37ASM_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) 47L1: 48 mov %r8, %rcx 49 jrcxz L2 50 movl %eax,(%rcx) 51L2: 52 mov %r9, %rcx 53 jrcxz L3 54 mov %ebx, (%rcx) 55L3: 56 mov 0x40(%rsp), %rcx 57 jrcxz L4 58 mov %edx, (%rcx) 59L4: 60 pop %rax # restore Index to rax as return value 61 pop %rbx 62 ret 63