* interlocked* changed to longints, including winapi. (which was a bug)

This commit is contained in:
marco 2004-03-05 12:17:50 +00:00
parent 6043f1a626
commit e546db7a23
7 changed files with 56 additions and 35 deletions
rtl

View File

@ -22,28 +22,28 @@
{ the ARM doesn't know multiprocessor system which would require locking }
function InterLockedDecrement (var Target: integer) : Integer;
function InterLockedDecrement (var Target: longint) : longint;
begin
dec(Target);
result:=target;
end;
function InterLockedIncrement (var Target: integer) : Integer;
function InterLockedIncrement (var Target: longint) : longint;
begin
inc(Target);
result:=target;
end;
function InterLockedExchange (var Target: integer;Source : integer) : Integer;
function InterLockedExchange (var Target: longint;Source : longint) : longint;
begin
Result:=Target;
Target:=Source;
end;
function InterLockedExchangeAdd (var Target: integer;Source : integer) : Integer;
function InterLockedExchangeAdd (var Target: longint;Source : longint) : longint;
begin
Result:=Target;
inc(Target,Source);
@ -52,6 +52,9 @@ function InterLockedExchangeAdd (var Target: integer;Source : integer) : Integer
{
$Log$
Revision 1.1 2003-11-30 19:48:20 florian
Revision 1.2 2004-03-05 12:17:50 marco
* interlocked* changed to longints, including winapi. (which was a bug)
Revision 1.1 2003/11/30 19:48:20 florian
* fixed some arm stuff
}

View File

@ -20,7 +20,7 @@
{$ASMMODE ATT}
function InterLockedDecrement (var Target: integer) : Integer; assembler;
function InterLockedDecrement (var Target: longint) : longint; assembler;
asm
{$ifdef REGCALL}
movl $-1,%edx
@ -35,7 +35,7 @@ asm
end;
function InterLockedIncrement (var Target: integer) : Integer; assembler;
function InterLockedIncrement (var Target: longint) : longint; assembler;
asm
{$ifdef REGCALL}
movl $1,%edx
@ -50,7 +50,7 @@ asm
end;
function InterLockedExchange (var Target: integer;Source : integer) : Integer; assembler;
function InterLockedExchange (var Target: longint;Source : longint) : longint; assembler;
asm
{$ifdef REGCALL}
xchgl (%eax),%edx
@ -63,7 +63,7 @@ asm
end;
function InterLockedExchangeAdd (var Target: integer;Source : integer) : Integer; assembler;
function InterLockedExchangeAdd (var Target: longint;Source : longint) : longint; assembler;
asm
{$ifdef REGCALL}
xchgl %eax,%edx
@ -78,7 +78,10 @@ end;
{
$Log$
Revision 1.4 2003-12-23 22:23:34 peter
Revision 1.5 2004-03-05 12:17:50 marco
* interlocked* changed to longints, including winapi. (which was a bug)
Revision 1.4 2003/12/23 22:23:34 peter
* increment should use ofcourse use 1 instead of -1
Revision 1.3 2003/11/11 21:08:17 peter

View File

@ -24,14 +24,17 @@ type
{$endif HASINTF}
function InterLockedIncrement (var Target: integer) : Integer;
function InterLockedDecrement (var Target: integer) : Integer;
function InterLockedExchange (var Target: integer;Source : integer) : Integer;
function InterLockedExchangeAdd (var Target: integer;Source : integer) : Integer;
function InterLockedIncrement (var Target: longint) : longint;
function InterLockedDecrement (var Target: longint) : longint;
function InterLockedExchange (var Target: longint;Source : longint) : longint;
function InterLockedExchangeAdd (var Target: longint;Source : longint) : longint;
{
$Log$
Revision 1.1 2003-10-06 21:01:06 peter
Revision 1.2 2004-03-05 12:17:50 marco
* interlocked* changed to longints, including winapi. (which was a bug)
Revision 1.1 2003/10/06 21:01:06 peter
* moved classes unit to rtl
Revision 1.3 2002/09/07 16:01:22 peter

View File

@ -18,7 +18,7 @@
This include contains cpu-specific routines
---------------------------------------------------------------------}
function InterLockedDecrement (var Target: integer) : Integer; assembler;
function InterLockedDecrement (var Target: longint) : longint; assembler;
{ input: address of target in r3 }
{ output: target-1 in r3 }
{ side-effect: target := target-1 }
@ -32,7 +32,7 @@ asm
end;
function InterLockedIncrement (var Target: integer) : Integer; assembler;
function InterLockedIncrement (var Target: longint) : longint; assembler;
{ input: address of target in r3 }
{ output: target+1 in r3 }
{ side-effect: target := target+1 }
@ -46,7 +46,7 @@ asm
end;
function InterLockedExchange (var Target: integer;Source : integer) : Integer; assembler;
function InterLockedExchange (var Target: longint;Source : longint) : longint; assembler;
{ input: address of target in r3, source in r4 }
{ output: target in r3 }
{ side-effect: target := source }
@ -59,7 +59,7 @@ asm
end;
function InterLockedExchangeAdd (var Target: integer;Source : integer) : Integer; assembler;
function InterLockedExchangeAdd (var Target: longint;Source : longint) : longint; assembler;
{ input: address of target in r3, source in r4 }
{ output: target in r3 }
{ side-effect: target := target+source }
@ -75,7 +75,10 @@ end;
{
$Log$
Revision 1.7 2004-01-04 20:09:36 jonas
Revision 1.8 2004-03-05 12:17:50 marco
* interlocked* changed to longints, including winapi. (which was a bug)
Revision 1.7 2004/01/04 20:09:36 jonas
* renamed "r0" usages as base register to 0
Revision 1.6 2003/12/28 20:55:57 jonas
@ -84,7 +87,7 @@ end;
Revision 1.5 2003/11/29 16:27:19 jonas
* fixed several ppc assembler reader related problems
* local vars in assembler procedures now start at offset 4
* fixed second_int_to_bool (apparently an integer can be in LOC_JUMP??)
* fixed second_int_to_bool (apparently an longint can be in LOC_JUMP??)
Revision 1.4 2003/08/24 20:50:11 olle
* changed used scratchreg from r0 to r10

View File

@ -18,7 +18,7 @@
This include contains cpu-specific routines
---------------------------------------------------------------------}
function InterLockedDecrement (var Target: integer) : Integer; assembler;
function InterLockedDecrement (var Target: longint) : longint; assembler;
asm
{$warning FIXME}
end;
@ -37,7 +37,7 @@ end;
*)
function InterLockedIncrement (var Target: integer) : Integer; assembler;
function InterLockedIncrement (var Target: longint) : longint; assembler;
asm
{$warning FIXME}
end;
@ -55,7 +55,7 @@ InterLockedIncLoop:
end;
*)
function InterLockedExchange (var Target: integer;Source : integer) : Integer; assembler;
function InterLockedExchange (var Target: longint;Source : longint) : longint; assembler;
asm
{$warning FIXME}
end;
@ -73,7 +73,7 @@ end;
*)
function InterLockedExchangeAdd (var Target: integer;Source : integer) : Integer; assembler;
function InterLockedExchangeAdd (var Target: longint;Source : longint) : longint; assembler;
asm
{$warning FIXME}
end;
@ -93,7 +93,10 @@ end;
{
$Log$
Revision 1.1 2003-09-01 20:46:32 peter
Revision 1.2 2004-03-05 12:17:50 marco
* interlocked* changed to longints, including winapi. (which was a bug)
Revision 1.1 2003/09/01 20:46:32 peter
* new dummies
}

View File

@ -611,9 +611,9 @@ function InsertMenuItemA(p1: HMENU; p2: UINT; p3: BOOL; const p4: TMenuItemInfoA
{$ifdef support_smartlink}
function InterlockedCompareExchange(var Destination: Pointer; Exchange: Pointer; Comperand: Pointer): Pointer;external 'kernel32' name 'InterlockedCompareExchange';
{$endif support_smartlink}
function InterlockedDecrement(var Addend: Integer): Integer; external 'kernel32' name 'InterlockedDecrement';
function InterlockedExchange(var Target: Integer; Value: Integer): Integer; external 'kernel32' name 'InterlockedExchange';
function InterlockedIncrement(var Addend: Integer): Integer; external 'kernel32' name 'InterlockedIncrement';
function InterlockedDecrement(var Addend: longint): longint; external 'kernel32' name 'InterlockedDecrement';
function InterlockedExchange(var Target: longint; Value: longint): longint; external 'kernel32' name 'InterlockedExchange';
function InterlockedIncrement(var Addend: longint): longint; external 'kernel32' name 'InterlockedIncrement';
function IntersectRect(var lprcDst: TRect; const lprcSrc1, lprcSrc2: TRect): BOOL; external 'user32' name 'IntersectRect';
//function InvertRect(hDC: HDC; const lprc: TRect): BOOL; external 'user32' name 'InvertRect';
function IsDialogMessage(hDlg: HWND; var lpMsg: TMsg): BOOL;external 'user32' name 'IsDialogMessageA';
@ -1052,7 +1052,10 @@ end;
{
$Log$
Revision 1.19 2004-02-08 17:13:11 marco
Revision 1.20 2004-03-05 12:17:50 marco
* interlocked* changed to longints, including winapi. (which was a bug)
Revision 1.19 2004/02/08 17:13:11 marco
* getsystemtimeasfiletime
Revision 1.18 2004/02/07 00:21:10 marco

View File

@ -18,7 +18,7 @@
This include contains cpu-specific routines
---------------------------------------------------------------------}
function InterLockedDecrement (var Target: integer) : Integer; assembler;
function InterLockedDecrement (var Target: longint) : longint; assembler;
asm
movl $-1,%edx
xchgl %edx,%eax
@ -28,7 +28,7 @@ asm
end;
function InterLockedIncrement (var Target: integer) : Integer; assembler;
function InterLockedIncrement (var Target: longint) : longint; assembler;
asm
movl $1,%edx
xchgl %edx,%eax
@ -38,14 +38,14 @@ asm
end;
function InterLockedExchange (var Target: integer;Source : integer) : Integer; assembler;
function InterLockedExchange (var Target: longint;Source : longint) : longint; assembler;
asm
xchgl (%rax),%edx
movl %edx,%eax
end;
function InterLockedExchangeAdd (var Target: integer;Source : integer) : Integer; assembler;
function InterLockedExchangeAdd (var Target: longint;Source : longint) : longint; assembler;
asm
xchgl %eax,%edx
lock
@ -55,7 +55,10 @@ end;
{
$Log$
Revision 1.1 2004-02-20 22:15:16 florian
Revision 1.2 2004-03-05 12:17:50 marco
* interlocked* changed to longints, including winapi. (which was a bug)
Revision 1.1 2004/02/20 22:15:16 florian
+ x86_64 dependend sysutils part added
* some 64 bit adaptions
}