diff options
author | rsc <devnull@localhost> | 2005-11-04 16:34:19 +0000 |
---|---|---|
committer | rsc <devnull@localhost> | 2005-11-04 16:34:19 +0000 |
commit | 1e05fdf92cf4c3ae32c52d6928f3e74000b76f6a (patch) | |
tree | 2df6702fe73590dbf26e59a854d903481362574a /src/libthread/FreeBSD-386-asm.s | |
parent | b4d5d19438106b3904185eb9ba7d6e1b8b0cfdf7 (diff) | |
download | plan9port-1e05fdf92cf4c3ae32c52d6928f3e74000b76f6a.tar.gz plan9port-1e05fdf92cf4c3ae32c52d6928f3e74000b76f6a.tar.bz2 plan9port-1e05fdf92cf4c3ae32c52d6928f3e74000b76f6a.zip |
use macro for getcontext (setjmp)
Diffstat (limited to 'src/libthread/FreeBSD-386-asm.s')
-rw-r--r-- | src/libthread/FreeBSD-386-asm.s | 25 |
1 files changed, 11 insertions, 14 deletions
diff --git a/src/libthread/FreeBSD-386-asm.s b/src/libthread/FreeBSD-386-asm.s index e1f266da..42169853 100644 --- a/src/libthread/FreeBSD-386-asm.s +++ b/src/libthread/FreeBSD-386-asm.s @@ -5,11 +5,10 @@ _tas: xchgl %eax, 0(%ecx) ret -.globl getcontext -getcontext: +.globl getmcontext +getmcontext: movl 4(%esp), %eax - addl $16, %eax /* point to mcontext */ - + movl %fs, 8(%eax) movl %es, 12(%eax) movl %ds, 16(%eax) @@ -26,16 +25,15 @@ getcontext: movl %ecx, 60(%eax) leal 4(%esp), %ecx /* %esp */ movl %ecx, 72(%eax) - + movl 44(%eax), %ecx /* restore %ecx */ movl $0, %eax ret -.globl setcontext -setcontext: +.globl setmcontext +setmcontext: movl 4(%esp), %eax - addl $16, %eax /* point to mcontext */ - + movl 8(%eax), %fs movl 12(%eax), %es movl 16(%eax), %ds @@ -45,11 +43,10 @@ setcontext: movl 28(%eax), %ebp movl 36(%eax), %ebx movl 40(%eax), %edx - movl 72(%eax), %esp - - movl 60(%eax), %ecx /* push new %eip */ - pushl %ecx - movl 44(%eax), %ecx + + movl 72(%eax), %esp + pushl 60(%eax) /* new %eip */ movl 48(%eax), %eax ret + |