summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authornickysn <nickysn@3ad0048d-3df7-0310-abae-a5850022a9f2>2020-04-26 23:51:18 +0000
committernickysn <nickysn@3ad0048d-3df7-0310-abae-a5850022a9f2>2020-04-26 23:51:18 +0000
commit8ffc32cf18ad2dd6de2e19a85b119fe225f59efd (patch)
tree13c68dacff6fe215118f1c46cc93a578e8ce1bf2
parent3e12d4f717188dd6e179af100b54f0b6afb5400b (diff)
downloadfpc-8ffc32cf18ad2dd6de2e19a85b119fe225f59efd.tar.gz
* fixed the interlockedXXX functions
git-svn-id: https://svn.freepascal.org/svn/fpc/branches/z80@45136 3ad0048d-3df7-0310-abae-a5850022a9f2
-rw-r--r--rtl/z80/z80.inc28
1 files changed, 24 insertions, 4 deletions
diff --git a/rtl/z80/z80.inc b/rtl/z80/z80.inc
index e801b4ae33..bd7dbbec01 100644
--- a/rtl/z80/z80.inc
+++ b/rtl/z80/z80.inc
@@ -132,6 +132,7 @@ function InterLockedDecrement (var Target: longint) : longint;
begin
{ block interrupts }
asm
+ di
end;
dec(Target);
@@ -139,6 +140,7 @@ function InterLockedDecrement (var Target: longint) : longint;
{ release interrupts }
asm
+ ei
end;
end;
@@ -149,6 +151,7 @@ function InterLockedIncrement (var Target: longint) : longint;
begin
{ block interrupts }
asm
+ di
end;
inc(Target);
@@ -156,6 +159,7 @@ function InterLockedIncrement (var Target: longint) : longint;
{ release interrupts }
asm
+ ei
end;
end;
@@ -166,6 +170,7 @@ function InterLockedExchange (var Target: longint;Source : longint) : longint;
begin
{ block interrupts }
asm
+ di
end;
Result:=Target;
@@ -173,6 +178,7 @@ function InterLockedExchange (var Target: longint;Source : longint) : longint;
{ release interrupts }
asm
+ ei
end;
end;
@@ -183,14 +189,16 @@ function InterlockedCompareExchange(var Target: longint; NewValue: longint; Comp
begin
{ block interrupts }
asm
+ di
end;
Result:=Target;
-// if Target=Comperand then
-// Target:=NewValue;
+ if Target=Comperand then
+ Target:=NewValue;
{ release interrupts }
asm
+ ei
end;
end;
@@ -201,6 +209,7 @@ function InterLockedExchangeAdd (var Target: longint;Source : longint) : longint
begin
{ block interrupts }
asm
+ di
end;
Result:=Target;
@@ -208,6 +217,7 @@ function InterLockedExchangeAdd (var Target: longint;Source : longint) : longint
{ release interrupts }
asm
+ ei
end;
end;
@@ -218,6 +228,7 @@ function InterLockedDecrement (var Target: smallint) : smallint;
begin
{ block interrupts }
asm
+ di
end;
dec(Target);
@@ -225,6 +236,7 @@ function InterLockedDecrement (var Target: smallint) : smallint;
{ release interrupts }
asm
+ ei
end;
end;
@@ -235,6 +247,7 @@ function InterLockedIncrement (var Target: smallint) : smallint;
begin
{ block interrupts }
asm
+ di
end;
inc(Target);
@@ -242,6 +255,7 @@ function InterLockedIncrement (var Target: smallint) : smallint;
{ release interrupts }
asm
+ ei
end;
end;
@@ -252,6 +266,7 @@ function InterLockedExchange (var Target: smallint;Source : smallint) : smallint
begin
{ block interrupts }
asm
+ di
end;
Result:=Target;
@@ -259,6 +274,7 @@ function InterLockedExchange (var Target: smallint;Source : smallint) : smallint
{ release interrupts }
asm
+ ei
end;
end;
@@ -269,14 +285,16 @@ function InterlockedCompareExchange(var Target: smallint; NewValue: smallint; Co
begin
{ block interrupts }
asm
+ di
end;
Result:=Target;
-// if Target=Comperand then
-// Target:=NewValue;
+ if Target=Comperand then
+ Target:=NewValue;
{ release interrupts }
asm
+ ei
end;
end;
@@ -287,6 +305,7 @@ function InterLockedExchangeAdd (var Target: smallint;Source : smallint) : small
begin
{ block interrupts }
asm
+ di
end;
Result:=Target;
@@ -294,5 +313,6 @@ function InterLockedExchangeAdd (var Target: smallint;Source : smallint) : small
{ release interrupts }
asm
+ ei
end;
end;