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