+;/** @file\r
+; \r
+; This code provides low level routines that support the Virtual Machine\r
+; for option ROMs.\r
+; \r
+; Copyright (c) 2006 - 2008, Intel Corporation. All rights reserved.<BR>\r
+; This program and the accompanying materials\r
+; are licensed and made available under the terms and conditions of the BSD License\r
+; which accompanies this distribution. The full text of the license may be found at\r
+; http://opensource.org/licenses/bsd-license.php\r
+; \r
+; THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
+; WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
+; \r
+;**/\r
+\r
page ,132\r
title VM ASSEMBLY LANGUAGE ROUTINES\r
-;****************************************************************************\r
-;* \r
-;* Copyright (c) 2006 - 2007, Intel Corporation \r
-;* All rights reserved. This program and the accompanying materials \r
-;* are licensed and made available under the terms and conditions of the BSD License \r
-;* which accompanies this distribution. The full text of the license may be found at \r
-;* http://opensource.org/licenses/bsd-license.php \r
-;* \r
-;* THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, \r
-;* WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. \r
-;* \r
-;****************************************************************************\r
-;****************************************************************************\r
-; REV 1.0\r
-;****************************************************************************\r
-;\r
-; Rev Date Description\r
-; --- -------- ------------------------------------------------------------\r
-; 1.0 03/14/01 Initial creation of file.\r
-;\r
-;****************************************************************************\r
- \r
-;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *\r
-; This code provides low level routines that support the Virtual Machine\r
-; for option ROMs. \r
-;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *\r
\r
;---------------------------------------------------------------------------\r
; Equate files needed.\r
;---------------------------------------------------------------------------\r
\r
.686p\r
-.model flat \r
-.code \r
+.model flat\r
+.code\r
;---------------------------------------------------------------------------\r
;;GenericPostSegment SEGMENT USE16\r
;---------------------------------------------------------------------------\r
; EbcLLCALLEXNative\r
;\r
; This function is called to execute an EBC CALLEX instruction\r
-; to native code. \r
+; to native code.\r
; This instruction requires that we thunk out to external native\r
-; code. For IA32, we simply switch stacks and jump to the \r
+; code. For IA32, we simply switch stacks and jump to the\r
; specified function. On return, we restore the stack pointer\r
; to its original location.\r
;\r
push ebp\r
push ebx\r
mov ebp, esp ; standard function prolog\r
- \r
+\r
; Get function address in a register\r
; mov ecx, FuncAddr => mov ecx, dword ptr [FuncAddr]\r
mov ecx, dword ptr [esp]+0Ch\r
- \r
+\r
; Set stack pointer to new value\r
; mov eax, NewStackPointer => mov eax, dword ptr [NewSp]\r
mov eax, dword ptr [esp] + 14h\r
mov edx, dword ptr [esp] + 10h\r
sub eax, edx\r
- sub esp, eax \r
+ sub esp, eax\r
mov ebx, esp\r
push ecx\r
push eax\r
\r
; Now call the external routine\r
call ecx\r
- \r
+\r
; ebp is preserved by the callee. In this function it\r
; equals the original esp, so set them equal\r
mov esp, ebp\r
; Routine Description:\r
; The VM thunk code stuffs an EBC entry point into a processor\r
; register. Since we can't use inline assembly to get it from\r
-; the interpreter C code, stuff it into the return value \r
+; the interpreter C code, stuff it into the return value\r
; register and return.\r
;\r
; Arguments:\r
;/*++\r
;\r
;Routine Description:\r
-; \r
+;\r
; Return the caller's value of the stack pointer.\r
;\r
;Arguments:\r
;\r
;--*/\r
\r
-; UINTN EbcLLGetStackPointer() \r
+; UINTN EbcLLGetStackPointer()\r
_EbcLLGetStackPointer PROC NEAR PUBLIC\r
mov eax, esp ; get current stack pointer\r
add eax, 4 ; stack adjusted by this much when we were called\r