- x86_push_membase (buf, X86_ESP, 52);
-
- /* save all register values */
- x86_push_reg (buf, X86_EBX);
- x86_push_reg (buf, X86_EDI);
- x86_push_reg (buf, X86_ESI);
- x86_push_membase (buf, X86_ESP, 64); /* EDX */
- x86_push_membase (buf, X86_ESP, 64); /* ECX */
- x86_push_membase (buf, X86_ESP, 64); /* EAX */
-
- x86_call_code (buf, x86_magic_trampoline);
- x86_alu_reg_imm (buf, X86_ADD, X86_ESP, 8*4);
-
- /* restore LMF start */
- /* ebx = previous_lmf */
- x86_pop_reg (buf, X86_EBX);
- /* edi = lmf */
- x86_pop_reg (buf, X86_EDI);
- /* *(lmf) = previous_lmf */
- x86_mov_membase_reg (buf, X86_EDI, 0, X86_EBX, 4);
- /* discard method info */
- x86_pop_reg (buf, X86_ESI);
- /* restore caller saved regs */
- x86_pop_reg (buf, X86_EBP);
- x86_pop_reg (buf, X86_ESI);
- x86_pop_reg (buf, X86_EDI);
- x86_pop_reg (buf, X86_EBX);
- /* discard save IP */
- x86_alu_reg_imm (buf, X86_ADD, X86_ESP, 4);
- /* restore LMF end */
-
- x86_alu_reg_imm (buf, X86_ADD, X86_ESP, 16);
-
- /* call the compiled method */
- x86_jump_reg (buf, X86_EAX);
-#endif