/** @file AsmMonitor function Copyright (c) 2006 - 2008, Intel Corporation. All rights reserved.<BR> This program and the accompanying materials are licensed and made available under the terms and conditions of the BSD License which accompanies this distribution. The full text of the license may be found at http://opensource.org/licenses/bsd-license.php. THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. **/ /** Sets up a monitor buffer that is used by AsmMwait(). Executes a MONITOR instruction with the register state specified by Eax, Ecx and Edx. Returns Eax. This function is only available on IA-32 and x64. @param RegisterEax The value to load into EAX or RAX before executing the MONITOR instruction. @param RegisterEcx The value to load into ECX or RCX before executing the MONITOR instruction. @param RegisterEdx The value to load into EDX or RDX before executing the MONITOR instruction. @return RegisterEax **/ UINTN EFIAPI AsmMonitor ( IN UINTN RegisterEax, IN UINTN RegisterEcx, IN UINTN RegisterEdx ) { _asm { mov eax, RegisterEax mov ecx, RegisterEcx mov edx, RegisterEdx _emit 0x0f // monitor _emit 0x01 _emit 0xc8 } }