From 032158d9437cd26e3ef857632fcc3abc842dc16e Mon Sep 17 00:00:00 2001 From: Pierre Muller <pierre@freepascal.org> Date: Mon, 10 Jul 2023 07:04:11 +0200 Subject: [PATCH] Fix system compilation for CPU16 --- rtl/inc/system.inc | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/rtl/inc/system.inc b/rtl/inc/system.inc index 30b6406d87..652e32d8c9 100644 --- a/rtl/inc/system.inc +++ b/rtl/inc/system.inc @@ -2311,9 +2311,13 @@ function AtomicIncrement (var Target: pointer) : pointer; {$ifdef SYSTEMINLINE}i begin {$IFDEF CPU64} Result:=Pointer(InterlockedIncrement64(int64(Target))); +{$ELSE} +{$IFDEF CPU16} + Result:=Pointer(InterlockedIncrement(smallint(Target))); {$ELSE} Result:=Pointer(InterlockedIncrement(Longint(Target))); {$ENDIF} +{$ENDIF} end; @@ -2322,9 +2326,13 @@ function AtomicDecrement (var Target: pointer) : pointer; {$ifdef SYSTEMINLINE}i begin {$IFDEF CPU64} Result:=Pointer(InterlockedDecrement64(Int64(Target))); +{$ELSE} +{$IFDEF CPU16} + Result:=Pointer(InterlockedDecrement(smallint(Target))); {$ELSE} Result:=Pointer(InterlockedDecrement(Longint(Target))); {$ENDIF} +{$ENDIF} end; @@ -2333,9 +2341,13 @@ function AtomicCmpExchange(var Target: pointer; NewValue, Comperand: pointer): p begin {$IFDEF CPU64} Result:=Pointer(InterlockedCompareExchange64(Int64(Target),Int64(NewValue), Int64(Comperand))); +{$ELSE} +{$IFDEF CPU16} + Result:=Pointer(InterlockedCompareExchange(smallint(Target),smallint(NewValue),smallint(Comperand))); {$ELSE} Result:=Pointer(InterlockedCompareExchange(LongInt(Target),LongInt(NewValue), LongInt(Comperand))); {$ENDIF} +{$ENDIF} end; @@ -2344,9 +2356,13 @@ function AtomicExchange(var Target: pointer;Source : pointer) : pointer; {$ifdef begin {$IFDEF CPU64} Result:=Pointer(InterlockedExchange64(Int64(Target),Int64(Source))); +{$ELSE} +{$IFDEF CPU16} + Result:=Pointer(InterlockedExchange(smallint(Target),smallint(Source))); {$ELSE} Result:=Pointer(InterlockedExchange(LongInt(Target),LongInt(Source))); {$ENDIF} +{$ENDIF} end; function AtomicIncrement (var Target: Cardinal) : Cardinal; {$ifdef SYSTEMINLINE}inline{$endif};