libvx32/OSX: add forgotten darwin-asm.S - vx32 - Local 9vx git repository for patches.
(DIR) Log
(DIR) Files
(DIR) Refs
---
(DIR) commit 261ae7f9ebdff175fc43fa6067de6abb4df1d52f
(DIR) parent c144c04d93a9215b1749322cbebef45f043474a6
(HTM) Author: Russ Cox <rsc@swtch.com>
Date: Sat, 28 Jun 2008 12:35:40 -0400
libvx32/OSX: add forgotten darwin-asm.S
Diffstat:
src/libvx32/darwin-asm.S | 37 +++++++++++++++++++++++++++++++
1 file changed, 37 insertions(+), 0 deletions(-)
---
(DIR) diff --git a/src/libvx32/darwin-asm.S b/src/libvx32/darwin-asm.S
@@ -0,0 +1,37 @@
+// Context routines for OS X
+
+// vx32_getcontext(struct i386_thread_state *ss);
+// see /usr/include/mach/i386/thread_status.h for layout.
+// not traditional intel layout!
+
+.globl _vx32_getcontext
+_vx32_getcontext:
+ movl 4(%esp), %eax
+
+ movl $1, 0(%eax) /* %eax */
+ movl %ebx, 4(%eax)
+ movl %ecx, 8(%eax)
+ movl %edx, 12(%eax)
+ movl %edi, 16(%eax)
+ movl %esi, 20(%eax)
+ movl %ebp, 24(%eax)
+ /* 28(%eax) is esp */
+ movl %ss, 32(%eax)
+ pushfl
+ popl 36(%eax)
+ /* 40(%eax) is eip */
+ movl %cs, 44(%eax)
+ movl %ds, 48(%eax)
+ movl %es, 52(%eax)
+ movl %fs, 56(%eax)
+ movl %gs, 60(%eax)
+
+ movl 0(%esp), %ecx /* %eip */
+ movl %ecx, 40(%eax)
+ leal 4(%esp), %ecx /* %esp */
+ movl %ecx, 28(%eax)
+
+ movl 8(%eax), %ecx /* restore %ecx */
+ movl $0, %eax
+ ret
+