+ implemented FPC_SETJMP for the i8086

git-svn-id: branches/i8086@24002 -
This commit is contained in:
nickysn 2013-03-25 18:12:48 +00:00
parent f38114b34b
commit 5ea6f37247
3 changed files with 18 additions and 3 deletions

View File

@ -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
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;

View File

@ -15,8 +15,10 @@
Type
jmp_buf = packed record
bx,si,di: Word;
bp,sp,pc: Pointer;
end;
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'];

View File

@ -640,5 +640,5 @@ function fpc_qword_to_double(q: qword): double; compilerproc;
function fpc_longword_to_double(i: longword): double; compilerproc;
{$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;