/* Copyright Oliver Kowalke 2009. Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) */ .global _jump_fcontext .text .align 2 _jump_fcontext: mov 0x4(%esp),%ecx mov %edi,(%ecx) mov %esi,0x4(%ecx) mov %ebx,0x8(%ecx) mov %ebp,0xc(%ecx) mov %fs:0x18,%edx mov (%edx),%eax mov %eax,0x24(%ecx) mov 0x4(%edx),%eax mov %eax,0x18(%ecx) mov 0x8(%edx),%eax mov %eax,0x20(%ecx) mov 0x10(%edx),%eax mov %eax,0x28(%ecx) lea 0x4(%esp),%eax mov %eax,0x10(%ecx) mov (%esp),%eax mov %eax,0x14(%ecx) mov 0x8(%esp),%edx mov (%edx),%edi mov 0x4(%edx),%esi mov 0x8(%edx),%ebx mov 0xc(%edx),%ebp mov 0x10(%esp),%eax test %eax,%eax je _jump_fcontext+0x5f stmxcsr 0x2c(%ecx) fnstcw 0x30(%ecx) ldmxcsr 0x2c(%edx) fldcw 0x30(%edx) mov %edx,%ecx mov %fs:0x18,%edx mov 0x24(%ecx),%eax mov %eax,(%edx) mov 0x18(%ecx),%eax mov %eax,0x4(%edx) mov 0x20(%ecx),%eax mov %eax,0x8(%edx) mov 0x28(%ecx),%eax mov %eax,0x10(%edx) mov 0xc(%esp),%eax mov 0x10(%ecx),%esp mov %eax,0x4(%esp) mov 0x14(%ecx),%ecx jmp *%ecx