2000-02-18 03:39:52 +08:00
|
|
|
/* This is file SETJMP.S */
|
|
|
|
/*
|
2001-02-23 06:12:43 +08:00
|
|
|
** Copyright (C) 1993 DJ Delorie
|
2000-02-18 03:39:52 +08:00
|
|
|
**
|
|
|
|
** This file is distributed under the terms listed in the document
|
2001-02-23 06:12:43 +08:00
|
|
|
** "copying.dj".
|
2000-02-18 03:39:52 +08:00
|
|
|
** A copy of "copying.dj" should accompany this file; if not, a copy
|
|
|
|
** should be available from where this file was obtained. This file
|
|
|
|
** may not be distributed without a verbatim copy of "copying.dj".
|
|
|
|
**
|
|
|
|
** This file is distributed WITHOUT ANY WARRANTY; without even the implied
|
|
|
|
** warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
|
|
|
*/
|
|
|
|
|
|
|
|
/*
|
|
|
|
** jmp_buf:
|
|
|
|
** eax ebx ecx edx esi edi ebp esp eip es fs gs ss
|
|
|
|
** 0 4 8 12 16 20 24 28 32 36 38 40 42
|
|
|
|
*/
|
|
|
|
|
|
|
|
.globl _setjmp /* jmp_buf */
|
|
|
|
_setjmp:
|
|
|
|
pushl %ebp
|
|
|
|
movl %esp,%ebp
|
|
|
|
|
|
|
|
pushl %edi
|
|
|
|
movl 8(%ebp),%edi
|
|
|
|
|
|
|
|
movl %eax,0(%edi)
|
|
|
|
movl %ebx,4(%edi)
|
|
|
|
movl %ecx,8(%edi)
|
|
|
|
movl %edx,12(%edi)
|
|
|
|
movl %esi,16(%edi)
|
|
|
|
|
|
|
|
movl -4(%ebp),%eax
|
|
|
|
movl %eax,20(%edi)
|
|
|
|
|
|
|
|
movl 0(%ebp),%eax
|
|
|
|
movl %eax,24(%edi)
|
|
|
|
|
|
|
|
movl %esp,%eax
|
|
|
|
addl $12,%eax
|
|
|
|
movl %eax,28(%edi)
|
|
|
|
|
|
|
|
movl 4(%ebp),%eax
|
|
|
|
movl %eax,32(%edi)
|
|
|
|
|
|
|
|
movw %es, %ax
|
|
|
|
movw %ax, 36(%edi)
|
|
|
|
movw %fs, %ax
|
|
|
|
movw %ax, 38(%edi)
|
|
|
|
movw %gs, %ax
|
|
|
|
movw %ax, 40(%edi)
|
|
|
|
movw %ss, %ax
|
|
|
|
movw %ax, 42(%edi)
|
|
|
|
|
|
|
|
popl %edi
|
|
|
|
movl $0,%eax
|
|
|
|
leave
|
|
|
|
ret
|
|
|
|
|