|
@@ -763,7 +763,16 @@ end;
|
|
{$endif FPC_PIC}
|
|
{$endif FPC_PIC}
|
|
{$endif}
|
|
{$endif}
|
|
|
|
|
|
|
|
+{$ifndef VER3_2}
|
|
|
|
+{$define FPC_SYSTEM_INTERLOCKED_USE_INTRIN}
|
|
|
|
+{$endif VER3_2}
|
|
|
|
+
|
|
|
|
+{$ifdef VER3_2}
|
|
function InterLockedDecrement (var Target: longint) : longint; assembler; nostackframe;
|
|
function InterLockedDecrement (var Target: longint) : longint; assembler; nostackframe;
|
|
|
|
+{$else VER3_2}
|
|
|
|
+{$define FPC_SYSTEM_HAS_ATOMIC_DEC_32}
|
|
|
|
+function fpc_atomic_dec_32 (var Target: longint) : longint; assembler; nostackframe;
|
|
|
|
+{$endif VER3_2}
|
|
asm
|
|
asm
|
|
{$ifdef CPUARM_HAS_LDREX}
|
|
{$ifdef CPUARM_HAS_LDREX}
|
|
.Lloop:
|
|
.Lloop:
|
|
@@ -846,7 +855,12 @@ asm
|
|
{$endif}
|
|
{$endif}
|
|
end;
|
|
end;
|
|
|
|
|
|
|
|
+{$ifdef VER3_2}
|
|
function InterLockedIncrement (var Target: longint) : longint; assembler; nostackframe;
|
|
function InterLockedIncrement (var Target: longint) : longint; assembler; nostackframe;
|
|
|
|
+{$else VER3_2}
|
|
|
|
+{$define FPC_SYSTEM_HAS_ATOMIC_INC_32}
|
|
|
|
+function fpc_atomic_inc_32 (var Target: longint) : longint; assembler; nostackframe;
|
|
|
|
+{$endif VER3_2}
|
|
asm
|
|
asm
|
|
{$ifdef CPUARM_HAS_LDREX}
|
|
{$ifdef CPUARM_HAS_LDREX}
|
|
.Lloop:
|
|
.Lloop:
|
|
@@ -927,7 +941,12 @@ asm
|
|
{$endif}
|
|
{$endif}
|
|
end;
|
|
end;
|
|
|
|
|
|
|
|
+{$ifdef VER3_2}
|
|
function InterLockedExchange (var Target: longint;Source : longint) : longint; assembler; nostackframe;
|
|
function InterLockedExchange (var Target: longint;Source : longint) : longint; assembler; nostackframe;
|
|
|
|
+{$else VER3_2}
|
|
|
|
+{$define FPC_SYSTEM_HAS_ATOMIC_XCHG_32}
|
|
|
|
+function fpc_atomic_xchg_32 (var Target: longint;Source : longint) : longint; assembler; nostackframe;
|
|
|
|
+{$endif VER3_2}
|
|
asm
|
|
asm
|
|
{$ifdef CPUARM_HAS_LDREX}
|
|
{$ifdef CPUARM_HAS_LDREX}
|
|
// swp is deprecated on ARMv6 and above
|
|
// swp is deprecated on ARMv6 and above
|
|
@@ -1008,7 +1027,12 @@ asm
|
|
{$endif}
|
|
{$endif}
|
|
end;
|
|
end;
|
|
|
|
|
|
|
|
+{$ifdef VER3_2}
|
|
function InterLockedExchangeAdd (var Target: longint;Source : longint) : longint; assembler; nostackframe;
|
|
function InterLockedExchangeAdd (var Target: longint;Source : longint) : longint; assembler; nostackframe;
|
|
|
|
+{$else VER3_2}
|
|
|
|
+{$define FPC_SYSTEM_HAS_ATOMIC_ADD_32}
|
|
|
|
+function fpc_atomic_add_32 (var Target: longint;Value : longint) : longint; assembler; nostackframe;
|
|
|
|
+{$endif VER3_2}
|
|
asm
|
|
asm
|
|
{$ifdef CPUARM_HAS_LDREX}
|
|
{$ifdef CPUARM_HAS_LDREX}
|
|
.Lloop:
|
|
.Lloop:
|
|
@@ -1096,7 +1120,12 @@ asm
|
|
end;
|
|
end;
|
|
|
|
|
|
|
|
|
|
|
|
+{$ifdef VER3_2}
|
|
function InterlockedCompareExchange(var Target: longint; NewValue: longint; Comperand: longint): longint; assembler; nostackframe;
|
|
function InterlockedCompareExchange(var Target: longint; NewValue: longint; Comperand: longint): longint; assembler; nostackframe;
|
|
|
|
+{$else VER3_2}
|
|
|
|
+{$define FPC_SYSTEM_HAS_ATOMIC_CMP_XCHG_32}
|
|
|
|
+function fpc_atomic_cmp_xchg_32 (var Target: longint; NewValue: longint; Comparand: longint) : longint; [public,alias:'FPC_ATOMIC_CMP_XCHG_32']; assembler; nostackframe;
|
|
|
|
+{$endif VER3_2}
|
|
asm
|
|
asm
|
|
{$ifdef CPUARM_HAS_LDREX}
|
|
{$ifdef CPUARM_HAS_LDREX}
|
|
.Lloop:
|
|
.Lloop:
|