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