2013-08-02 14:46:53 +00:00
|
|
|
/* 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)
|
|
|
|
*/
|
|
|
|
|
2013-08-02 17:21:22 +00:00
|
|
|
.global _jump_fcontext
|
2013-08-02 14:46:53 +00:00
|
|
|
.text
|
|
|
|
.align 2
|
|
|
|
|
2013-08-02 17:21:22 +00:00
|
|
|
_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
|