|
@@ -17,16 +17,22 @@ Function fpc_SetJmp (Var S : Jmp_buf) : smallint;assembler;nostackframe;[Public,
|
|
|
asm
|
|
|
mov si, sp
|
|
|
|
|
|
- mov bx, ss:[si + 2 + extra_param_offset] // S
|
|
|
- mov word [bx + Jmp_buf.bp], bp
|
|
|
+{$ifdef FPC_X86_DATA_NEAR}
|
|
|
+ mov di, ss:[si + 2 + extra_param_offset] // S
|
|
|
+ mov ax, ds
|
|
|
+ mov es, ax
|
|
|
+{$else FPC_X86_DATA_NEAR}
|
|
|
+ les di, ss:[si + 2 + extra_param_offset] // S
|
|
|
+{$endif FPC_X86_DATA_NEAR}
|
|
|
+ mov word es:[di + Jmp_buf.bp], bp
|
|
|
mov ax, word ss:[si]
|
|
|
- mov word [bx + Jmp_buf.ip], ax
|
|
|
+ mov word es:[di + Jmp_buf.ip], ax
|
|
|
{$ifdef FPC_X86_CODE_FAR}
|
|
|
mov ax, word ss:[si + 2]
|
|
|
- mov word [bx + Jmp_buf.cs], ax
|
|
|
+ mov word es:[di + Jmp_buf.cs], ax
|
|
|
{$endif FPC_X86_CODE_FAR}
|
|
|
- lea ax, [si + 4 + extra_param_offset]
|
|
|
- mov word [bx + Jmp_buf.sp], ax
|
|
|
+ lea ax, [si + 4 + extra_param_offset + extra_data_offset]
|
|
|
+ mov word es:[di + Jmp_buf.sp], ax
|
|
|
|
|
|
xor ax, ax
|
|
|
end;
|