From 4c84febfae7f0a1a1af186721d9a54657394d6f4 Mon Sep 17 00:00:00 2001 From: sergei Date: Tue, 15 Jan 2013 19:17:57 +0000 Subject: [PATCH] * InterlockedIncrement/Decrement must return the modified value, not the initial one. Fixes a number of interface memory leaks in MIPS test suite. The functions remain not thread-safe yet. git-svn-id: trunk@23393 - --- rtl/mips/mips.inc | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/rtl/mips/mips.inc b/rtl/mips/mips.inc index 841410404e..8af2a9f2f0 100644 --- a/rtl/mips/mips.inc +++ b/rtl/mips/mips.inc @@ -543,18 +543,20 @@ end; function InterLockedDecrement (var Target: longint) : longint; assembler; nostackframe; asm {$warning FIXME: This implementation of InterLockedDecrement in not yet ThreadSafe } + // must return value after decrement lw $v0,($a0) - addi $v1,$v0,-1 - sw $v1,($a0) + addi $v0,$v0,-1 + sw $v0,($a0) end; function InterLockedIncrement (var Target: longint) : longint; assembler; nostackframe; asm {$warning FIXME: This implementation of InterLockedIncrement in not yet ThreadSafe } + // must return value after increment lw $v0,($a0) - addi $v1,$v0,1 - sw $v1,($a0) + addi $v0,$v0,1 + sw $v0,($a0) end;