|
@@ -19,7 +19,11 @@
|
|
|
|
|
|
function InterLockedDecrement (var Target: longint) : longint; assembler;
|
|
function InterLockedDecrement (var Target: longint) : longint; assembler;
|
|
asm
|
|
asm
|
|
|
|
+{$ifdef win64}
|
|
|
|
+ movq %rcx,%rax
|
|
|
|
+{$else win64}
|
|
movq %rdi,%rax
|
|
movq %rdi,%rax
|
|
|
|
+{$endif win64}
|
|
movl $-1,%edx
|
|
movl $-1,%edx
|
|
xchgq %rdx,%rax
|
|
xchgq %rdx,%rax
|
|
lock
|
|
lock
|
|
@@ -30,7 +34,11 @@ end;
|
|
|
|
|
|
function InterLockedIncrement (var Target: longint) : longint; assembler;
|
|
function InterLockedIncrement (var Target: longint) : longint; assembler;
|
|
asm
|
|
asm
|
|
|
|
+{$ifdef win64}
|
|
|
|
+ movq %rcx,%rax
|
|
|
|
+{$else win64}
|
|
movq %rdi,%rax
|
|
movq %rdi,%rax
|
|
|
|
+{$endif win64}
|
|
movl $1,%edx
|
|
movl $1,%edx
|
|
xchgq %rdx,%rax
|
|
xchgq %rdx,%rax
|
|
lock
|
|
lock
|
|
@@ -41,17 +49,27 @@ end;
|
|
|
|
|
|
function InterLockedExchange (var Target: longint;Source : longint) : longint; assembler;
|
|
function InterLockedExchange (var Target: longint;Source : longint) : longint; assembler;
|
|
asm
|
|
asm
|
|
|
|
+{$ifdef win64}
|
|
|
|
+ xchgl (%rcx),%edx
|
|
|
|
+ movl %edx,%eax
|
|
|
|
+{$else win64}
|
|
xchgl (%rdi),%esi
|
|
xchgl (%rdi),%esi
|
|
movl %esi,%eax
|
|
movl %esi,%eax
|
|
|
|
+{$endif win64}
|
|
end;
|
|
end;
|
|
|
|
|
|
|
|
|
|
function InterLockedExchangeAdd (var Target: longint;Source : longint) : longint; assembler;
|
|
function InterLockedExchangeAdd (var Target: longint;Source : longint) : longint; assembler;
|
|
asm
|
|
asm
|
|
|
|
+{$ifdef win64}
|
|
|
|
+ xchgq %rcx,%rdx
|
|
|
|
+ lock
|
|
|
|
+ xaddl %ecx, (%rdx)
|
|
|
|
+ movl %ecx,%eax
|
|
|
|
+{$else win64}
|
|
xchgq %rdi,%rsi
|
|
xchgq %rdi,%rsi
|
|
lock
|
|
lock
|
|
xaddl %edi, (%rsi)
|
|
xaddl %edi, (%rsi)
|
|
movl %edi,%eax
|
|
movl %edi,%eax
|
|
|
|
+{$endif win64}
|
|
end;
|
|
end;
|
|
-
|
|
|
|
-
|
|
|