Browse Source

+ support i8086 far data memory models in InterLockedDecrement and
InterLockedIncrement

git-svn-id: trunk@27402 -

nickysn 11 years ago
parent
commit
8eaf8938f4
1 changed files with 18 additions and 2 deletions
  1. 18 2
      rtl/i8086/i8086.inc

+ 18 - 2
rtl/i8086/i8086.inc

@@ -208,11 +208,16 @@ asm
 @@Lgnf_null:
 end;
 
-{TODO: fix, use smallint?}
+{TODO: use smallint?}
 function InterLockedDecrement (var Target: longint) : longint;nostackframe;assembler;
 asm
   mov si, sp
+{$ifdef FPC_X86_DATA_NEAR}
   mov bx, ss:[si + 2 + extra_param_offset]  // Target
+{$else FPC_X86_DATA_NEAR}
+  mov cx, ds
+  lds bx, ss:[si + 2 + extra_param_offset]  // Target
+{$endif FPC_X86_DATA_NEAR}
   pushf
   cli
   sub word [bx], 1
@@ -220,13 +225,21 @@ asm
   mov ax, [bx]
   mov dx, [bx+2]
   popf
+{$if defined(FPC_X86_DATA_FAR) or defined(FPC_X86_DATA_HUGE)}
+  mov ds, cx
+{$endif}
 end;
 
-{TODO: fix, use smallint?}
+{TODO: use smallint?}
 function InterLockedIncrement (var Target: longint) : longint;nostackframe;assembler;
 asm
   mov si, sp
+{$ifdef FPC_X86_DATA_NEAR}
   mov bx, ss:[si + 2 + extra_param_offset]  // Target
+{$else FPC_X86_DATA_NEAR}
+  mov cx, ds
+  lds bx, ss:[si + 2 + extra_param_offset]  // Target
+{$endif FPC_X86_DATA_NEAR}
   pushf
   cli
   add word [bx], 1
@@ -234,6 +247,9 @@ asm
   mov ax, [bx]
   mov dx, [bx+2]
   popf
+{$if defined(FPC_X86_DATA_FAR) or defined(FPC_X86_DATA_HUGE)}
+  mov ds, cx
+{$endif}
 end;
 
 {TODO: fix, use smallint?}