1 /** @file
2   AsmMwait function
3 
4   Copyright (c) 2006 - 2008, Intel Corporation. All rights reserved.<BR>
5   This program and the accompanying materials
6   are licensed and made available under the terms and conditions of the BSD License
7   which accompanies this distribution.  The full text of the license may be found at
8   http://opensource.org/licenses/bsd-license.php.
9 
10   THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
11   WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
12 
13 **/
14 
15 /**
16   Executes an MWAIT instruction.
17 
18   Executes an MWAIT instruction with the register state specified by Eax and
19   Ecx. Returns Eax. This function is only available on IA-32 and x64.
20 
21   @param  RegisterEax The value to load into EAX or RAX before executing the MONITOR
22                       instruction.
23   @param  RegisterEcx The value to load into ECX or RCX before executing the MONITOR
24                       instruction.
25 
26   @return RegisterEax
27 
28 **/
29 UINTN
30 EFIAPI
AsmMwait(IN UINTN RegisterEax,IN UINTN RegisterEcx)31 AsmMwait (
32   IN      UINTN                     RegisterEax,
33   IN      UINTN                     RegisterEcx
34   )
35 {
36   _asm {
37     mov     eax, RegisterEax
38     mov     ecx, RegisterEcx
39     _emit   0x0f              // mwait
40     _emit   0x01
41     _emit   0xC9
42   }
43 }
44 
45