mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-08-15 05:49:12 +02:00
+ implemented FPC_SETJMP for the i8086
git-svn-id: branches/i8086@24002 -
This commit is contained in:
parent
f38114b34b
commit
5ea6f37247
@ -13,8 +13,21 @@
|
|||||||
|
|
||||||
**********************************************************************}
|
**********************************************************************}
|
||||||
|
|
||||||
Function fpc_SetJmp (Var S : Jmp_buf) : longint;assembler;nostackframe;[Public, alias : 'FPC_SETJMP']; compilerproc;
|
Function fpc_SetJmp (Var S : Jmp_buf) : smallint;assembler;nostackframe;[Public, alias : 'FPC_SETJMP']; compilerproc;
|
||||||
asm
|
asm
|
||||||
|
xchg ax, bx
|
||||||
|
mov word [bx + Jmp_buf.bx], ax
|
||||||
|
mov word [bx + Jmp_buf.si], si
|
||||||
|
mov word [bx + Jmp_buf.di], di
|
||||||
|
mov word [bx + Jmp_buf.bp], bp
|
||||||
|
mov di, sp
|
||||||
|
add di, 2
|
||||||
|
mov word [bx + Jmp_buf.sp], di
|
||||||
|
mov di, word [di - 2]
|
||||||
|
mov word [bx + Jmp_buf.pc], di
|
||||||
|
mov di, word [bx + Jmp_buf.di]
|
||||||
|
mov bx, ax
|
||||||
|
xor ax, ax
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
|
||||||
|
@ -15,8 +15,10 @@
|
|||||||
|
|
||||||
Type
|
Type
|
||||||
jmp_buf = packed record
|
jmp_buf = packed record
|
||||||
|
bx,si,di: Word;
|
||||||
|
bp,sp,pc: Pointer;
|
||||||
end;
|
end;
|
||||||
PJmp_buf = ^jmp_buf;
|
PJmp_buf = ^jmp_buf;
|
||||||
|
|
||||||
Function Setjmp (Var S : Jmp_buf) : longint; [external name 'FPC_SETJMP'];
|
Function Setjmp (Var S : Jmp_buf) : smallint; [external name 'FPC_SETJMP'];
|
||||||
Procedure longjmp (Var S : Jmp_buf; value : longint); [external name 'FPC_LONGJMP'];
|
Procedure longjmp (Var S : Jmp_buf; value : longint); [external name 'FPC_LONGJMP'];
|
||||||
|
@ -640,5 +640,5 @@ function fpc_qword_to_double(q: qword): double; compilerproc;
|
|||||||
function fpc_longword_to_double(i: longword): double; compilerproc;
|
function fpc_longword_to_double(i: longword): double; compilerproc;
|
||||||
{$endif FPC_INCLUDE_SOFTWARE_LONGWORD_TO_DOUBLE}
|
{$endif FPC_INCLUDE_SOFTWARE_LONGWORD_TO_DOUBLE}
|
||||||
|
|
||||||
function fpc_setjmp(var s : jmp_buf) : longint; compilerproc;
|
function fpc_setjmp(var s : jmp_buf) : {$ifdef CPU16}smallint{$else}longint{$endif}; compilerproc;
|
||||||
procedure fpc_longjmp(var s : jmp_buf; value : longint); compilerproc;
|
procedure fpc_longjmp(var s : jmp_buf; value : longint); compilerproc;
|
||||||
|
Loading…
Reference in New Issue
Block a user