1f45af90b0195eb9712609d3af91d523edc371115qhuang#/** @file 2f45af90b0195eb9712609d3af91d523edc371115qhuang# 3f45af90b0195eb9712609d3af91d523edc371115qhuang# Low level IA32 specific EBC support routines. 4f45af90b0195eb9712609d3af91d523edc371115qhuang# 5fa97cbf4ef6f4fd2dc0312c09b6b5003780facb8jyao# Copyright (c) 2007 - 2011, Intel Corporation. All rights reserved.<BR> 6e5eed7d3641d71d7ea539e5379ea9c6a5cd97004hhtian# This program and the accompanying materials 7f45af90b0195eb9712609d3af91d523edc371115qhuang# are licensed and made available under the terms and conditions of the BSD License 8f45af90b0195eb9712609d3af91d523edc371115qhuang# which accompanies this distribution. The full text of the license may be found at 9f45af90b0195eb9712609d3af91d523edc371115qhuang# http://opensource.org/licenses/bsd-license.php 10f45af90b0195eb9712609d3af91d523edc371115qhuang# 11f45af90b0195eb9712609d3af91d523edc371115qhuang# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, 12f45af90b0195eb9712609d3af91d523edc371115qhuang# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. 13f45af90b0195eb9712609d3af91d523edc371115qhuang# 147b414b4ed6ccdefce8e167ecc7d67ad64118eb94vanjeff#**/ 157b414b4ed6ccdefce8e167ecc7d67ad64118eb94vanjeff 16132f41f0a92082775d931067089a63ca50367225xliASM_GLOBAL ASM_PFX(CopyMem) 177102b199613eaef6d28e89f72783e35f15cf6b8cjyaoASM_GLOBAL ASM_PFX(EbcInterpret) 187102b199613eaef6d28e89f72783e35f15cf6b8cjyaoASM_GLOBAL ASM_PFX(ExecuteEbcImageEntryPoint) 1953c71d097b13311e2bd8dda6ae54b5766a1c7d6dqhuang 20132f41f0a92082775d931067089a63ca50367225xliASM_GLOBAL ASM_PFX(EbcLLCALLEXNative) 2153c71d097b13311e2bd8dda6ae54b5766a1c7d6dqhuangASM_PFX(EbcLLCALLEXNative): 2253c71d097b13311e2bd8dda6ae54b5766a1c7d6dqhuang push %ebp 2353c71d097b13311e2bd8dda6ae54b5766a1c7d6dqhuang push %ebx 2453c71d097b13311e2bd8dda6ae54b5766a1c7d6dqhuang mov %esp,%ebp 2553c71d097b13311e2bd8dda6ae54b5766a1c7d6dqhuang mov 0xc(%esp),%ecx 2653c71d097b13311e2bd8dda6ae54b5766a1c7d6dqhuang mov 0x14(%esp),%eax 2753c71d097b13311e2bd8dda6ae54b5766a1c7d6dqhuang mov 0x10(%esp),%edx 2853c71d097b13311e2bd8dda6ae54b5766a1c7d6dqhuang sub %edx,%eax 2953c71d097b13311e2bd8dda6ae54b5766a1c7d6dqhuang sub %eax,%esp 3053c71d097b13311e2bd8dda6ae54b5766a1c7d6dqhuang mov %esp,%ebx 3153c71d097b13311e2bd8dda6ae54b5766a1c7d6dqhuang push %ecx 3253c71d097b13311e2bd8dda6ae54b5766a1c7d6dqhuang push %eax 3353c71d097b13311e2bd8dda6ae54b5766a1c7d6dqhuang push %edx 3453c71d097b13311e2bd8dda6ae54b5766a1c7d6dqhuang push %ebx 3553c71d097b13311e2bd8dda6ae54b5766a1c7d6dqhuang call ASM_PFX(CopyMem) 3653c71d097b13311e2bd8dda6ae54b5766a1c7d6dqhuang pop %eax 3753c71d097b13311e2bd8dda6ae54b5766a1c7d6dqhuang pop %eax 3853c71d097b13311e2bd8dda6ae54b5766a1c7d6dqhuang pop %eax 3953c71d097b13311e2bd8dda6ae54b5766a1c7d6dqhuang pop %ecx 4053c71d097b13311e2bd8dda6ae54b5766a1c7d6dqhuang call *%ecx 4153c71d097b13311e2bd8dda6ae54b5766a1c7d6dqhuang mov %ebp,%esp 4253c71d097b13311e2bd8dda6ae54b5766a1c7d6dqhuang mov %ebp,%esp 4353c71d097b13311e2bd8dda6ae54b5766a1c7d6dqhuang pop %ebx 4453c71d097b13311e2bd8dda6ae54b5766a1c7d6dqhuang pop %ebp 457b414b4ed6ccdefce8e167ecc7d67ad64118eb94vanjeff ret 4653c71d097b13311e2bd8dda6ae54b5766a1c7d6dqhuang 477102b199613eaef6d28e89f72783e35f15cf6b8cjyaoASM_GLOBAL ASM_PFX(EbcLLEbcInterpret) 487102b199613eaef6d28e89f72783e35f15cf6b8cjyaoASM_PFX(EbcLLEbcInterpret): 497102b199613eaef6d28e89f72783e35f15cf6b8cjyao # Construct new stack 507102b199613eaef6d28e89f72783e35f15cf6b8cjyao push %ebp 517102b199613eaef6d28e89f72783e35f15cf6b8cjyao mov %esp, %ebp 527102b199613eaef6d28e89f72783e35f15cf6b8cjyao push %esi 537102b199613eaef6d28e89f72783e35f15cf6b8cjyao push %edi 547102b199613eaef6d28e89f72783e35f15cf6b8cjyao sub $0x40, %esp 557102b199613eaef6d28e89f72783e35f15cf6b8cjyao push %eax 567102b199613eaef6d28e89f72783e35f15cf6b8cjyao mov %ebp, %esi 577102b199613eaef6d28e89f72783e35f15cf6b8cjyao add $0x8, %esi 587102b199613eaef6d28e89f72783e35f15cf6b8cjyao mov %esp, %edi 597102b199613eaef6d28e89f72783e35f15cf6b8cjyao add $0x4, %edi 607102b199613eaef6d28e89f72783e35f15cf6b8cjyao mov $0x10, %ecx 617102b199613eaef6d28e89f72783e35f15cf6b8cjyao rep movsd 627102b199613eaef6d28e89f72783e35f15cf6b8cjyao 637102b199613eaef6d28e89f72783e35f15cf6b8cjyao # call C-code 647102b199613eaef6d28e89f72783e35f15cf6b8cjyao call ASM_PFX(EbcInterpret) 657102b199613eaef6d28e89f72783e35f15cf6b8cjyao add $0x44, %esp 667102b199613eaef6d28e89f72783e35f15cf6b8cjyao pop %edi 677102b199613eaef6d28e89f72783e35f15cf6b8cjyao pop %esi 687102b199613eaef6d28e89f72783e35f15cf6b8cjyao pop %ebp 697102b199613eaef6d28e89f72783e35f15cf6b8cjyao ret 707102b199613eaef6d28e89f72783e35f15cf6b8cjyao 717102b199613eaef6d28e89f72783e35f15cf6b8cjyaoASM_GLOBAL ASM_PFX(EbcLLExecuteEbcImageEntryPoint) 727102b199613eaef6d28e89f72783e35f15cf6b8cjyaoASM_PFX(EbcLLExecuteEbcImageEntryPoint): 737102b199613eaef6d28e89f72783e35f15cf6b8cjyao # Construct new stack 747102b199613eaef6d28e89f72783e35f15cf6b8cjyao mov %eax, -0xC(%esp) 757102b199613eaef6d28e89f72783e35f15cf6b8cjyao mov 0x4(%esp), %eax 767102b199613eaef6d28e89f72783e35f15cf6b8cjyao mov %eax, -0x8(%esp) 777102b199613eaef6d28e89f72783e35f15cf6b8cjyao mov 0x8(%esp), %eax 787102b199613eaef6d28e89f72783e35f15cf6b8cjyao mov %eax, -0x4(%esp) 797102b199613eaef6d28e89f72783e35f15cf6b8cjyao # call C-code 807102b199613eaef6d28e89f72783e35f15cf6b8cjyao sub $0xC, %esp 817102b199613eaef6d28e89f72783e35f15cf6b8cjyao call ASM_PFX(ExecuteEbcImageEntryPoint) 827102b199613eaef6d28e89f72783e35f15cf6b8cjyao add $0xC, %esp 837102b199613eaef6d28e89f72783e35f15cf6b8cjyao ret 84