/** @file\r
Contains code that implements the virtual machine.\r
\r
-Copyright (c) 2006 - 2008, Intel Corporation\r
+Copyright (c) 2006 - 2008, Intel Corporation. <BR>\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
@return The decoded offset.\r
\r
**/\r
-STATIC\r
INT16\r
VmReadIndex16 (\r
IN VM_CONTEXT *VmPtr,\r
@return Converted index per EBC VM specification.\r
\r
**/\r
-STATIC\r
INT32\r
VmReadIndex32 (\r
IN VM_CONTEXT *VmPtr,\r
@return Converted index per EBC VM specification\r
\r
**/\r
-STATIC\r
INT64\r
VmReadIndex64 (\r
IN VM_CONTEXT *VmPtr,\r
@return The 8-bit value from the memory adress.\r
\r
**/\r
-STATIC\r
UINT8\r
VmReadMem8 (\r
IN VM_CONTEXT *VmPtr,\r
@return The 16-bit value from the memory adress.\r
\r
**/\r
-STATIC\r
UINT16\r
VmReadMem16 (\r
IN VM_CONTEXT *VmPtr,\r
@return The 32-bit value from the memory adress.\r
\r
**/\r
-STATIC\r
UINT32\r
VmReadMem32 (\r
IN VM_CONTEXT *VmPtr,\r
@return The 64-bit value from the memory adress.\r
\r
**/\r
-STATIC\r
UINT64\r
VmReadMem64 (\r
IN VM_CONTEXT *VmPtr,\r
@return The natural value at address Addr.\r
\r
**/\r
-STATIC\r
UINTN\r
VmReadMemN (\r
IN VM_CONTEXT *VmPtr,\r
@retval Other Some error occurs when writing data to the address.\r
\r
**/\r
-STATIC\r
EFI_STATUS\r
VmWriteMem8 (\r
IN VM_CONTEXT *VmPtr,\r
@retval Other Some error occurs when writing data to the address.\r
\r
**/\r
-STATIC\r
EFI_STATUS\r
VmWriteMem16 (\r
IN VM_CONTEXT *VmPtr,\r
@retval Other Some error occurs when writing data to the address.\r
\r
**/\r
-STATIC\r
EFI_STATUS\r
VmWriteMem32 (\r
IN VM_CONTEXT *VmPtr,\r
@return The raw unsigned 16-bit value from the code stream.\r
\r
**/\r
-STATIC\r
UINT16\r
VmReadCode16 (\r
IN VM_CONTEXT *VmPtr,\r
@return The raw unsigned 32-bit value from the code stream.\r
\r
**/\r
-STATIC\r
UINT32\r
VmReadCode32 (\r
IN VM_CONTEXT *VmPtr,\r
@return The raw unsigned 64-bit value from the code stream.\r
\r
**/\r
-STATIC\r
UINT64\r
VmReadCode64 (\r
IN VM_CONTEXT *VmPtr,\r
@return Signed data of the requested size from the specified address.\r
\r
**/\r
-STATIC\r
INT8\r
VmReadImmed8 (\r
IN VM_CONTEXT *VmPtr,\r
@return Signed data of the requested size from the specified address.\r
\r
**/\r
-STATIC\r
INT16\r
VmReadImmed16 (\r
IN VM_CONTEXT *VmPtr,\r
@return Signed data of the requested size from the specified address.\r
\r
**/\r
-STATIC\r
INT32\r
VmReadImmed32 (\r
IN VM_CONTEXT *VmPtr,\r
@return Signed data of the requested size from the specified address.\r
\r
**/\r
-STATIC\r
INT64\r
VmReadImmed64 (\r
IN VM_CONTEXT *VmPtr,\r
adjust for the stack gap and return the modified address.\r
\r
**/\r
-STATIC\r
UINTN\r
ConvertStackAddr (\r
IN VM_CONTEXT *VmPtr,\r
@retval EFI_SUCCESS The instruction is executed successfully.\r
\r
**/\r
-STATIC\r
EFI_STATUS\r
ExecuteDataManip (\r
IN VM_CONTEXT *VmPtr,\r
@retval EFI_SUCCESS The instruction is executed successfully.\r
\r
**/\r
-STATIC\r
EFI_STATUS\r
ExecuteBREAK (\r
IN VM_CONTEXT *VmPtr\r
@retval EFI_SUCCESS The instruction is executed successfully.\r
\r
**/\r
-STATIC\r
EFI_STATUS\r
ExecuteJMP (\r
IN VM_CONTEXT *VmPtr\r
@retval EFI_SUCCESS The instruction is executed successfully.\r
\r
**/\r
-STATIC\r
EFI_STATUS\r
ExecuteJMP8 (\r
IN VM_CONTEXT *VmPtr\r
@retval EFI_SUCCESS The instruction is executed successfully.\r
\r
**/\r
-STATIC\r
EFI_STATUS\r
ExecuteCALL (\r
IN VM_CONTEXT *VmPtr\r
@retval EFI_SUCCESS The instruction is executed successfully.\r
\r
**/\r
-STATIC\r
EFI_STATUS\r
ExecuteRET (\r
IN VM_CONTEXT *VmPtr\r
@retval EFI_SUCCESS The instruction is executed successfully.\r
\r
**/\r
-STATIC\r
EFI_STATUS\r
ExecuteCMP (\r
IN VM_CONTEXT *VmPtr\r
@retval EFI_SUCCESS The instruction is executed successfully.\r
\r
**/\r
-STATIC\r
EFI_STATUS\r
ExecuteCMPI (\r
IN VM_CONTEXT *VmPtr\r
@retval EFI_SUCCESS The instruction is executed successfully.\r
\r
**/\r
-STATIC\r
EFI_STATUS\r
ExecuteMOVxx (\r
IN VM_CONTEXT *VmPtr\r
@retval EFI_SUCCESS The instruction is executed successfully.\r
\r
**/\r
-STATIC\r
EFI_STATUS\r
ExecuteMOVI (\r
IN VM_CONTEXT *VmPtr\r
@retval EFI_SUCCESS The instruction is executed successfully.\r
\r
**/\r
-STATIC\r
EFI_STATUS\r
ExecuteMOVIn (\r
IN VM_CONTEXT *VmPtr\r
@retval EFI_SUCCESS The instruction is executed successfully.\r
\r
**/\r
-STATIC\r
EFI_STATUS\r
ExecuteMOVREL (\r
IN VM_CONTEXT *VmPtr\r
@retval EFI_SUCCESS The instruction is executed successfully.\r
\r
**/\r
-STATIC\r
EFI_STATUS\r
ExecutePUSHn (\r
IN VM_CONTEXT *VmPtr\r
@retval EFI_SUCCESS The instruction is executed successfully.\r
\r
**/\r
-STATIC\r
EFI_STATUS\r
ExecutePUSH (\r
IN VM_CONTEXT *VmPtr\r
@retval EFI_SUCCESS The instruction is executed successfully.\r
\r
**/\r
-STATIC\r
EFI_STATUS\r
ExecutePOPn (\r
IN VM_CONTEXT *VmPtr\r
@retval EFI_SUCCESS The instruction is executed successfully.\r
\r
**/\r
-STATIC\r
EFI_STATUS\r
ExecutePOP (\r
IN VM_CONTEXT *VmPtr\r
@retval EFI_SUCCESS The instruction is executed successfully.\r
\r
**/\r
-STATIC\r
EFI_STATUS\r
ExecuteSignedDataManip (\r
IN VM_CONTEXT *VmPtr\r
@retval EFI_SUCCESS The instruction is executed successfully.\r
\r
**/\r
-STATIC\r
EFI_STATUS\r
ExecuteUnsignedDataManip (\r
IN VM_CONTEXT *VmPtr\r
@retval EFI_SUCCESS The instruction is executed successfully.\r
\r
**/\r
-STATIC\r
EFI_STATUS\r
ExecuteLOADSP (\r
IN VM_CONTEXT *VmPtr\r
@retval EFI_SUCCESS The instruction is executed successfully.\r
\r
**/\r
-STATIC\r
EFI_STATUS\r
ExecuteSTORESP (\r
IN VM_CONTEXT *VmPtr\r
@retval EFI_SUCCESS The instruction is executed successfully.\r
\r
**/\r
-STATIC\r
EFI_STATUS\r
ExecuteMOVsnd (\r
IN VM_CONTEXT *VmPtr\r
@retval EFI_SUCCESS The instruction is executed successfully.\r
\r
**/\r
-STATIC\r
EFI_STATUS\r
ExecuteMOVsnw (\r
IN VM_CONTEXT *VmPtr\r
@return ~Op2\r
\r
**/\r
-STATIC\r
UINT64\r
ExecuteNOT (\r
IN VM_CONTEXT *VmPtr,\r
@return Op2 * -1\r
\r
**/\r
-STATIC\r
UINT64\r
ExecuteNEG (\r
IN VM_CONTEXT *VmPtr,\r
@return Op1 + Op2\r
\r
**/\r
-STATIC\r
UINT64\r
ExecuteADD (\r
IN VM_CONTEXT *VmPtr,\r
@return Op1 - Op2\r
\r
**/\r
-STATIC\r
UINT64\r
ExecuteSUB (\r
IN VM_CONTEXT *VmPtr,\r
@return Op1 * Op2\r
\r
**/\r
-STATIC\r
UINT64\r
ExecuteMUL (\r
IN VM_CONTEXT *VmPtr,\r
@return (unsigned)Op1 * (unsigned)Op2\r
\r
**/\r
-STATIC\r
UINT64\r
ExecuteMULU (\r
IN VM_CONTEXT *VmPtr,\r
@return Op1 / Op2\r
\r
**/\r
-STATIC\r
UINT64\r
ExecuteDIV (\r
IN VM_CONTEXT *VmPtr,\r
@return (unsigned)Op1 / (unsigned)Op2\r
\r
**/\r
-STATIC\r
UINT64\r
ExecuteDIVU (\r
IN VM_CONTEXT *VmPtr,\r
@return Op1 MODULUS Op2\r
\r
**/\r
-STATIC\r
UINT64\r
ExecuteMOD (\r
IN VM_CONTEXT *VmPtr,\r
@return Op1 UNSIGNED_MODULUS Op2\r
\r
**/\r
-STATIC\r
UINT64\r
ExecuteMODU (\r
IN VM_CONTEXT *VmPtr,\r
@return Op1 AND Op2\r
\r
**/\r
-STATIC\r
UINT64\r
ExecuteAND (\r
IN VM_CONTEXT *VmPtr,\r
@return Op1 OR Op2\r
\r
**/\r
-STATIC\r
UINT64\r
ExecuteOR (\r
IN VM_CONTEXT *VmPtr,\r
@return Op1 XOR Op2\r
\r
**/\r
-STATIC\r
UINT64\r
ExecuteXOR (\r
IN VM_CONTEXT *VmPtr,\r
@return Op1 << Op2\r
\r
**/\r
-STATIC\r
UINT64\r
ExecuteSHL (\r
IN VM_CONTEXT *VmPtr,\r
@return Op1 >> Op2 (unsigned operands)\r
\r
**/\r
-STATIC\r
UINT64\r
ExecuteSHR (\r
IN VM_CONTEXT *VmPtr,\r
@return Op1 >> Op2 (signed)\r
\r
**/\r
-STATIC\r
UINT64\r
ExecuteASHR (\r
IN VM_CONTEXT *VmPtr,\r
@return (INT64)(INT8)Op2\r
\r
**/\r
-STATIC\r
UINT64\r
ExecuteEXTNDB (\r
IN VM_CONTEXT *VmPtr,\r
@return (INT64)(INT16)Op2\r
\r
**/\r
-STATIC\r
UINT64\r
ExecuteEXTNDW (\r
IN VM_CONTEXT *VmPtr,\r
@return (INT64)(INT32)Op2\r
\r
**/\r
-STATIC\r
UINT64\r
ExecuteEXTNDD (\r
IN VM_CONTEXT *VmPtr,\r
@retval EFI_SUCCESS The instruction is executed successfully.\r
\r
**/\r
-STATIC\r
EFI_STATUS\r
ExecuteMOVxx (\r
IN VM_CONTEXT *VmPtr\r
@retval EFI_SUCCESS The instruction is executed successfully.\r
\r
**/\r
-STATIC\r
EFI_STATUS\r
ExecuteBREAK (\r
IN VM_CONTEXT *VmPtr\r
@retval EFI_SUCCESS The instruction is executed successfully.\r
\r
**/\r
-STATIC\r
EFI_STATUS\r
ExecuteJMP (\r
IN VM_CONTEXT *VmPtr\r
@retval EFI_SUCCESS The instruction is executed successfully.\r
\r
**/\r
-STATIC\r
EFI_STATUS\r
ExecuteJMP8 (\r
IN VM_CONTEXT *VmPtr\r
@retval EFI_SUCCESS The instruction is executed successfully.\r
\r
**/\r
-STATIC\r
EFI_STATUS\r
ExecuteMOVI (\r
IN VM_CONTEXT *VmPtr\r
@retval EFI_SUCCESS The instruction is executed successfully.\r
\r
**/\r
-STATIC\r
EFI_STATUS\r
ExecuteMOVIn (\r
IN VM_CONTEXT *VmPtr\r
@retval EFI_SUCCESS The instruction is executed successfully.\r
\r
**/\r
-STATIC\r
EFI_STATUS\r
ExecuteMOVREL (\r
IN VM_CONTEXT *VmPtr\r
@retval EFI_SUCCESS The instruction is executed successfully.\r
\r
**/\r
-STATIC\r
EFI_STATUS\r
ExecuteMOVsnw (\r
IN VM_CONTEXT *VmPtr\r
@retval EFI_SUCCESS The instruction is executed successfully.\r
\r
**/\r
-STATIC\r
EFI_STATUS\r
ExecuteMOVsnd (\r
IN VM_CONTEXT *VmPtr\r
@retval EFI_SUCCESS The instruction is executed successfully.\r
\r
**/\r
-STATIC\r
EFI_STATUS\r
ExecutePUSHn (\r
IN VM_CONTEXT *VmPtr\r
@retval EFI_SUCCESS The instruction is executed successfully.\r
\r
**/\r
-STATIC\r
EFI_STATUS\r
ExecutePUSH (\r
IN VM_CONTEXT *VmPtr\r
@retval EFI_SUCCESS The instruction is executed successfully.\r
\r
**/\r
-STATIC\r
EFI_STATUS\r
ExecutePOPn (\r
IN VM_CONTEXT *VmPtr\r
@retval EFI_SUCCESS The instruction is executed successfully.\r
\r
**/\r
-STATIC\r
EFI_STATUS\r
ExecutePOP (\r
IN VM_CONTEXT *VmPtr\r
@retval EFI_SUCCESS The instruction is executed successfully.\r
\r
**/\r
-STATIC\r
EFI_STATUS\r
ExecuteCALL (\r
IN VM_CONTEXT *VmPtr\r
@retval EFI_SUCCESS The instruction is executed successfully.\r
\r
**/\r
-STATIC\r
EFI_STATUS\r
ExecuteRET (\r
IN VM_CONTEXT *VmPtr\r
@retval EFI_SUCCESS The instruction is executed successfully.\r
\r
**/\r
-STATIC\r
EFI_STATUS\r
ExecuteCMP (\r
IN VM_CONTEXT *VmPtr\r
@retval EFI_SUCCESS The instruction is executed successfully.\r
\r
**/\r
-STATIC\r
EFI_STATUS\r
ExecuteCMPI (\r
IN VM_CONTEXT *VmPtr\r
@return ~Op2\r
\r
**/\r
-STATIC\r
UINT64\r
ExecuteNOT (\r
IN VM_CONTEXT *VmPtr,\r
@return Op2 * -1\r
\r
**/\r
-STATIC\r
UINT64\r
ExecuteNEG (\r
IN VM_CONTEXT *VmPtr,\r
@return Op1 + Op2\r
\r
**/\r
-STATIC\r
UINT64\r
ExecuteADD (\r
IN VM_CONTEXT *VmPtr,\r
@return Op1 - Op2\r
\r
**/\r
-STATIC\r
UINT64\r
ExecuteSUB (\r
IN VM_CONTEXT *VmPtr,\r
@return Op1 * Op2\r
\r
**/\r
-STATIC\r
UINT64\r
ExecuteMUL (\r
IN VM_CONTEXT *VmPtr,\r
@return (unsigned)Op1 * (unsigned)Op2\r
\r
**/\r
-STATIC\r
UINT64\r
ExecuteMULU (\r
IN VM_CONTEXT *VmPtr,\r
@return Op1 / Op2\r
\r
**/\r
-STATIC\r
UINT64\r
ExecuteDIV (\r
IN VM_CONTEXT *VmPtr,\r
@return (unsigned)Op1 / (unsigned)Op2\r
\r
**/\r
-STATIC\r
UINT64\r
ExecuteDIVU (\r
IN VM_CONTEXT *VmPtr,\r
@return Op1 MODULUS Op2\r
\r
**/\r
-STATIC\r
UINT64\r
ExecuteMOD (\r
IN VM_CONTEXT *VmPtr,\r
@return Op1 UNSIGNED_MODULUS Op2\r
\r
**/\r
-STATIC\r
UINT64\r
ExecuteMODU (\r
IN VM_CONTEXT *VmPtr,\r
@return Op1 AND Op2\r
\r
**/\r
-STATIC\r
UINT64\r
ExecuteAND (\r
IN VM_CONTEXT *VmPtr,\r
@return Op1 OR Op2\r
\r
**/\r
-STATIC\r
UINT64\r
ExecuteOR (\r
IN VM_CONTEXT *VmPtr,\r
@return Op1 XOR Op2\r
\r
**/\r
-STATIC\r
UINT64\r
ExecuteXOR (\r
IN VM_CONTEXT *VmPtr,\r
@return Op1 << Op2\r
\r
**/\r
-STATIC\r
UINT64\r
ExecuteSHL (\r
IN VM_CONTEXT *VmPtr,\r
@return Op1 >> Op2 (unsigned operands)\r
\r
**/\r
-STATIC\r
UINT64\r
ExecuteSHR (\r
IN VM_CONTEXT *VmPtr,\r
@return Op1 >> Op2 (signed)\r
\r
**/\r
-STATIC\r
UINT64\r
ExecuteASHR (\r
IN VM_CONTEXT *VmPtr,\r
@return (INT64)(INT8)Op2\r
\r
**/\r
-STATIC\r
UINT64\r
ExecuteEXTNDB (\r
IN VM_CONTEXT *VmPtr,\r
@return (INT64)(INT16)Op2\r
\r
**/\r
-STATIC\r
UINT64\r
ExecuteEXTNDW (\r
IN VM_CONTEXT *VmPtr,\r
@return (INT64)(INT32)Op2\r
\r
**/\r
-STATIC\r
UINT64\r
ExecuteEXTNDD (\r
IN VM_CONTEXT *VmPtr,\r
@retval EFI_SUCCESS The instruction is executed successfully.\r
\r
**/\r
-STATIC\r
EFI_STATUS\r
ExecuteSignedDataManip (\r
IN VM_CONTEXT *VmPtr\r
@retval EFI_SUCCESS The instruction is executed successfully.\r
\r
**/\r
-STATIC\r
EFI_STATUS\r
ExecuteUnsignedDataManip (\r
IN VM_CONTEXT *VmPtr\r
@retval EFI_SUCCESS The instruction is executed successfully.\r
\r
**/\r
-STATIC\r
EFI_STATUS\r
ExecuteDataManip (\r
IN VM_CONTEXT *VmPtr,\r
@retval EFI_SUCCESS The instruction is executed successfully.\r
\r
**/\r
-STATIC\r
EFI_STATUS\r
ExecuteLOADSP (\r
IN VM_CONTEXT *VmPtr\r
@retval EFI_SUCCESS The instruction is executed successfully.\r
\r
**/\r
-STATIC\r
EFI_STATUS\r
ExecuteSTORESP (\r
IN VM_CONTEXT *VmPtr\r
@return The decoded offset.\r
\r
**/\r
-STATIC\r
INT16\r
VmReadIndex16 (\r
IN VM_CONTEXT *VmPtr,\r
@return Converted index per EBC VM specification.\r
\r
**/\r
-STATIC\r
INT32\r
VmReadIndex32 (\r
IN VM_CONTEXT *VmPtr,\r
@return Converted index per EBC VM specification\r
\r
**/\r
-STATIC\r
INT64\r
VmReadIndex64 (\r
IN VM_CONTEXT *VmPtr,\r
@retval Other Some error occurs when writing data to the address.\r
\r
**/\r
-STATIC\r
EFI_STATUS\r
VmWriteMem8 (\r
IN VM_CONTEXT *VmPtr,\r
@retval Other Some error occurs when writing data to the address.\r
\r
**/\r
-STATIC\r
EFI_STATUS\r
VmWriteMem16 (\r
IN VM_CONTEXT *VmPtr,\r
@retval Other Some error occurs when writing data to the address.\r
\r
**/\r
-STATIC\r
EFI_STATUS\r
VmWriteMem32 (\r
IN VM_CONTEXT *VmPtr,\r
@return Signed data of the requested size from the specified address.\r
\r
**/\r
-STATIC\r
INT8\r
VmReadImmed8 (\r
IN VM_CONTEXT *VmPtr,\r
@return Signed data of the requested size from the specified address.\r
\r
**/\r
-STATIC\r
INT16\r
VmReadImmed16 (\r
IN VM_CONTEXT *VmPtr,\r
@return Signed data of the requested size from the specified address.\r
\r
**/\r
-STATIC\r
INT32\r
VmReadImmed32 (\r
IN VM_CONTEXT *VmPtr,\r
@return Signed data of the requested size from the specified address.\r
\r
**/\r
-STATIC\r
INT64\r
VmReadImmed64 (\r
IN VM_CONTEXT *VmPtr,\r
@return The raw unsigned 16-bit value from the code stream.\r
\r
**/\r
-STATIC\r
UINT16\r
VmReadCode16 (\r
IN VM_CONTEXT *VmPtr,\r
@return The raw unsigned 32-bit value from the code stream.\r
\r
**/\r
-STATIC\r
UINT32\r
VmReadCode32 (\r
IN VM_CONTEXT *VmPtr,\r
@return The raw unsigned 64-bit value from the code stream.\r
\r
**/\r
-STATIC\r
UINT64\r
VmReadCode64 (\r
IN VM_CONTEXT *VmPtr,\r
@return The 8-bit value from the memory adress.\r
\r
**/\r
-STATIC\r
UINT8\r
VmReadMem8 (\r
IN VM_CONTEXT *VmPtr,\r
@return The 16-bit value from the memory adress.\r
\r
**/\r
-STATIC\r
UINT16\r
VmReadMem16 (\r
IN VM_CONTEXT *VmPtr,\r
@return The 32-bit value from the memory adress.\r
\r
**/\r
-STATIC\r
UINT32\r
VmReadMem32 (\r
IN VM_CONTEXT *VmPtr,\r
@return The 64-bit value from the memory adress.\r
\r
**/\r
-STATIC\r
UINT64\r
VmReadMem64 (\r
IN VM_CONTEXT *VmPtr,\r
adjust for the stack gap and return the modified address.\r
\r
**/\r
-STATIC\r
UINTN\r
ConvertStackAddr (\r
IN VM_CONTEXT *VmPtr,\r
@return The natural value at address Addr.\r
\r
**/\r
-STATIC\r
UINTN\r
VmReadMemN (\r
IN VM_CONTEXT *VmPtr,\r