summaryrefslogtreecommitdiff
path: root/Core/MdeModulePkg/Universal/EbcDxe/Ia32/EbcLowLevel.S
diff options
context:
space:
mode:
Diffstat (limited to 'Core/MdeModulePkg/Universal/EbcDxe/Ia32/EbcLowLevel.S')
-rw-r--r--Core/MdeModulePkg/Universal/EbcDxe/Ia32/EbcLowLevel.S83
1 files changed, 83 insertions, 0 deletions
diff --git a/Core/MdeModulePkg/Universal/EbcDxe/Ia32/EbcLowLevel.S b/Core/MdeModulePkg/Universal/EbcDxe/Ia32/EbcLowLevel.S
new file mode 100644
index 0000000000..caf8d40ffb
--- /dev/null
+++ b/Core/MdeModulePkg/Universal/EbcDxe/Ia32/EbcLowLevel.S
@@ -0,0 +1,83 @@
+#/** @file
+#
+# Low level IA32 specific EBC support routines.
+#
+# Copyright (c) 2007 - 2011, 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.
+#
+#**/
+
+ASM_GLOBAL ASM_PFX(CopyMem)
+ASM_GLOBAL ASM_PFX(EbcInterpret)
+ASM_GLOBAL ASM_PFX(ExecuteEbcImageEntryPoint)
+
+ASM_GLOBAL ASM_PFX(EbcLLCALLEXNative)
+ASM_PFX(EbcLLCALLEXNative):
+ push %ebp
+ push %ebx
+ mov %esp,%ebp
+ mov 0xc(%esp),%ecx
+ mov 0x14(%esp),%eax
+ mov 0x10(%esp),%edx
+ sub %edx,%eax
+ sub %eax,%esp
+ mov %esp,%ebx
+ push %ecx
+ push %eax
+ push %edx
+ push %ebx
+ call ASM_PFX(CopyMem)
+ pop %eax
+ pop %eax
+ pop %eax
+ pop %ecx
+ call *%ecx
+ mov %ebp,%esp
+ mov %ebp,%esp
+ pop %ebx
+ pop %ebp
+ ret
+
+ASM_GLOBAL ASM_PFX(EbcLLEbcInterpret)
+ASM_PFX(EbcLLEbcInterpret):
+ # Construct new stack
+ push %ebp
+ mov %esp, %ebp
+ push %esi
+ push %edi
+ sub $0x40, %esp
+ push %eax
+ mov %ebp, %esi
+ add $0x8, %esi
+ mov %esp, %edi
+ add $0x4, %edi
+ mov $0x10, %ecx
+ rep movsd
+
+ # call C-code
+ call ASM_PFX(EbcInterpret)
+ add $0x44, %esp
+ pop %edi
+ pop %esi
+ pop %ebp
+ ret
+
+ASM_GLOBAL ASM_PFX(EbcLLExecuteEbcImageEntryPoint)
+ASM_PFX(EbcLLExecuteEbcImageEntryPoint):
+ # Construct new stack
+ mov %eax, -0xC(%esp)
+ mov 0x4(%esp), %eax
+ mov %eax, -0x8(%esp)
+ mov 0x8(%esp), %eax
+ mov %eax, -0x4(%esp)
+ # call C-code
+ sub $0xC, %esp
+ call ASM_PFX(ExecuteEbcImageEntryPoint)
+ add $0xC, %esp
+ ret