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# CpuId.S 15# 16# Abstract: 17# 18# AsmCpuid function 19# 20# Notes: 21# 22#------------------------------------------------------------------------------ 23 24#------------------------------------------------------------------------------ 25# VOID 26# EFIAPI 27# AsmCpuid ( 28# IN UINT32 RegisterInEax, 29# OUT UINT32 *RegisterOutEax OPTIONAL, 30# OUT UINT32 *RegisterOutEbx OPTIONAL, 31# OUT UINT32 *RegisterOutEcx OPTIONAL, 32# OUT UINT32 *RegisterOutEdx OPTIONAL 33# ) 34#------------------------------------------------------------------------------ 35ASM_GLOBAL ASM_PFX(AsmCpuid) 36ASM_PFX(AsmCpuid): 37 push %rbx 38 mov %ecx, %eax 39 push %rax # save Index on stack 40 push %rdx 41 cpuid 42 test %r9, %r9 43 jz L1 44 mov %ecx, (%r9) 45L1: 46 pop %rcx 47 jrcxz L2 48 mov %eax, (%rcx) 49L2: 50 mov %r8, %rcx 51 jrcxz L3 52 mov %ebx, (%rcx) 53L3: 54 mov 0x38(%rsp), %rcx 55 jrcxz L4 56 mov %edx, (%rcx) 57L4: 58 pop %rax # restore Index to rax as return value 59 pop %rbx 60 ret 61