From 9a52f0dd19a1d3314b435fade0a5338609e838a1 Mon Sep 17 00:00:00 2001 From: Christian Kamm Date: Fri, 26 Feb 2010 13:57:50 +0100 Subject: Add scripting support. --- library/fibers/switchstack_gcc_32_linux_mac.s | 41 +++++++++++++++++++++++++++ 1 file changed, 41 insertions(+) create mode 100644 library/fibers/switchstack_gcc_32_linux_mac.s (limited to 'library/fibers/switchstack_gcc_32_linux_mac.s') diff --git a/library/fibers/switchstack_gcc_32_linux_mac.s b/library/fibers/switchstack_gcc_32_linux_mac.s new file mode 100644 index 0000000..e4eac63 --- /dev/null +++ b/library/fibers/switchstack_gcc_32_linux_mac.s @@ -0,0 +1,41 @@ +.text +.globl _switchStackInternal + +_switchStackInternal: + // save callee-saved registers + push %ebp + movl %esp, %ebp + push %ebx + push %esi + push %edi + + // store SIMD floating point control word + sub $4, %esp + stmxcsr (%esp) + + // store floating point control bytes + sub $4, %esp + fstcw (%esp) + + // save the old stack pointer + movl 0xc(%ebp), %edx + movl %esp, (%edx) + // set the new stack pointer + movl 0x8(%ebp), %esp + + // restore floating point control bytes + fnclex + fldcw (%esp) + add $4, %esp + + // restore SIMD floating point control word + ldmxcsr (%esp) + add $4, %esp + + // pop callee-saved registers + pop %edi + pop %esi + pop %ebx + pop %ebp + + ret -- cgit v1.2.3