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 24ASM_GLOBAL ASM_PFX(AsmCpuid) 25 26#------------------------------------------------------------------------------ 27# VOID 28# EFIAPI 29# AsmCpuid ( 30# IN UINT32 RegisterInEax, 31# OUT UINT32 *RegisterOutEax OPTIONAL, 32# OUT UINT32 *RegisterOutEbx OPTIONAL, 33# OUT UINT32 *RegisterOutEcx OPTIONAL, 34# OUT UINT32 *RegisterOutEdx OPTIONAL 35# ) 36#------------------------------------------------------------------------------ 37ASM_PFX(AsmCpuid): 38 push %ebx 39 push %ebp 40 movl %esp, %ebp 41 movl 12(%ebp), %eax 42 cpuid 43 push %ecx 44 movl 16(%ebp), %ecx 45 jecxz L1 46 movl %eax, (%ecx) 47L1: 48 movl 20(%ebp), %ecx 49 jecxz L2 50 movl %ebx, (%ecx) 51L2: 52 movl 24(%ebp), %ecx 53 jecxz L3 54 popl (%ecx) 55L3: 56 movl 28(%ebp), %ecx 57 jecxz L4 58 movl %edx, (%ecx) 59L4: 60 movl 12(%ebp), %eax 61 leave 62 pop %ebx 63 ret 64