123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395 |
- {
- This file is part of the Free Pascal Run time library.
- Copyright (c) 2004 by Olle Raab
- This unit contain procedures specific for mode MacPas.
- It should be platform independant.
- See the file COPYING.FPC, included in this distribution,
- For details about the copyright.
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- **********************************************************************}
- {$mode objfpc}
- unit MacPas;
- interface
- { Using inlining for small system functions/wrappers }
- {$inline on}
- {$define SYSTEMINLINE}
- type
- LongDouble = ValReal;
- FourCharArray = packed array[1..4] of char;
- UnsignedByte = Byte;
- UnsignedWord = Word;
- UnsignedLong = Longword;
- {FourCharCode coercion
- This routine coreces string literals to a FourCharCode.}
- function FCC(const literal: string): LongWord; {$ifdef systeminline}inline;{$endif}
- {Same as FCC, to be compatible with GPC}
- function FOUR_CHAR_CODE(const literal: string): LongWord; {$ifdef systeminline}inline;{$endif}
- { Same as the "is" operator }
- Function Member (Instance : TObject; AClass : TClass) : boolean; {$ifdef systeminline}inline;{$endif}
- function ord4(i: smallint): smallint; {$ifdef systeminline}inline;{$endif}
- function ord4(l: longint): longint; {$ifdef systeminline}inline;{$endif}
- function ord4(c: cardinal): cardinal; {$ifdef systeminline}inline;{$endif}
- function ord4(p: pointer): ptrint; {$ifdef systeminline}inline;{$endif}
- function BAnd(i,j: longint): longint; {$ifdef systeminline}inline;{$endif}
- function BAnd(i,j: cardinal): cardinal; {$ifdef systeminline}inline;{$endif}
- function BAnd(i,j: int64): int64; {$ifdef systeminline}inline;{$endif}
- function BAnd(i,j: qword): qword; {$ifdef systeminline}inline;{$endif}
- function BOr(i,j: longint): longint; {$ifdef systeminline}inline;{$endif}
- function BOr(i,j: cardinal): cardinal; {$ifdef systeminline}inline;{$endif}
- function BOr(i,j: int64): int64; {$ifdef systeminline}inline;{$endif}
- function BOr(i,j: qword): qword; {$ifdef systeminline}inline;{$endif}
- function BXor(i,j: longint): longint; {$ifdef systeminline}inline;{$endif}
- function BXor(i,j: cardinal): cardinal; {$ifdef systeminline}inline;{$endif}
- function BXor(i,j: int64): int64; {$ifdef systeminline}inline;{$endif}
- function BXor(i,j: qword): qword; {$ifdef systeminline}inline;{$endif}
- function Bsr(i: longint; j: cardinal): longint; {$ifdef systeminline}inline;{$endif}
- function Bsr(i,j: cardinal): cardinal; {$ifdef systeminline}inline;{$endif}
- function Bsr(i: int64; j: cardinal): int64; {$ifdef systeminline}inline;{$endif}
- function Bsr(i: qword; j: cardinal): qword; {$ifdef systeminline}inline;{$endif}
- function Bsl(i: longint; j: cardinal): longint; {$ifdef systeminline}inline;{$endif}
- function Bsl(i,j: cardinal): cardinal; {$ifdef systeminline}inline;{$endif}
- function Bsl(i: int64; j: cardinal): int64; {$ifdef systeminline}inline;{$endif}
- function Bsl(i: qword; j: cardinal): qword; {$ifdef systeminline}inline;{$endif}
- function BTst(i: longint; j: cardinal): boolean; {$ifdef systeminline}inline;{$endif}
- function BTst(i,j: cardinal): boolean; {$ifdef systeminline}inline;{$endif}
- function BTst(i: int64; j: cardinal): boolean; {$ifdef systeminline}inline;{$endif}
- function BTst(i: qword; j: cardinal): boolean; {$ifdef systeminline}inline;{$endif}
- procedure BSet(var i: longint; j: cardinal); {$ifdef systeminline}inline;{$endif}
- procedure BSet(var i: cardinal; j: cardinal); {$ifdef systeminline}inline;{$endif}
- procedure BSet(var i: int64; j: cardinal); {$ifdef systeminline}inline;{$endif}
- procedure BSet(var i: qword; j: cardinal); {$ifdef systeminline}inline;{$endif}
- procedure BClr(var i: longint; j: cardinal); {$ifdef systeminline}inline;{$endif}
- procedure BClr(var i: cardinal; j: cardinal); {$ifdef systeminline}inline;{$endif}
- procedure BClr(var i: int64; j: cardinal); {$ifdef systeminline}inline;{$endif}
- procedure BClr(var i: qword; j: cardinal); {$ifdef systeminline}inline;{$endif}
- function BRotL(i: longint; j: cardinal): longint; {$ifdef systeminline}inline;{$endif}
- function BRotL(i,j: cardinal): cardinal; {$ifdef systeminline}inline;{$endif}
- function BRotL(i: int64; j: cardinal): int64; {$ifdef systeminline}inline;{$endif}
- function BRotL(i: qword; j: cardinal): qword; {$ifdef systeminline}inline;{$endif}
- function BRotR(i: longint; j: cardinal): longint; {$ifdef systeminline}inline;{$endif}
- function BRotR(i,j: cardinal): cardinal; {$ifdef systeminline}inline;{$endif}
- function BRotR(i: int64; j: cardinal): int64; {$ifdef systeminline}inline;{$endif}
- function BRotR(i: qword; j: cardinal): qword; {$ifdef systeminline}inline;{$endif}
- function BNot(i: longint): longint; {$ifdef systeminline}inline;{$endif}
- function BNot(i: cardinal): cardinal; {$ifdef systeminline}inline;{$endif}
- function BNot(i: int64): int64; {$ifdef systeminline}inline;{$endif}
- function BNot(i: qword): qword; {$ifdef systeminline}inline;{$endif}
- implementation
- {$r-}
- {$q-}
- function FCC(const literal: string): LongWord; {$ifdef systeminline}inline;{$endif}
- begin
- {$ifdef FPC_LITTLE_ENDIAN}
- FCC := (ord(literal[1]) shl 24) or (ord(literal[2]) shl 16) or (ord(literal[3]) shl 8) or ord(literal[4]);
- {$else FPC_LITTLE_ENDIAN}
- FCC := PLongWord(@literal[1])^;
- {$endif FPC_LITTLE_ENDIAN}
- end;
- function FOUR_CHAR_CODE(const literal: string): LongWord; {$ifdef systeminline}inline;{$endif}
- begin
- {$ifdef FPC_LITTLE_ENDIAN}
- FOUR_CHAR_CODE := (ord(literal[1]) shl 24) or (ord(literal[2]) shl 16) or (ord(literal[3]) shl 8) or ord(literal[4]);
- {$else FPC_LITTLE_ENDIAN}
- FOUR_CHAR_CODE := PLongWord(@literal[1])^;
- {$endif FPC_LITTLE_ENDIAN}
- end;
- Function Member (Instance : TObject; AClass : TClass) : boolean; {$ifdef systeminline}inline;{$endif}
- begin
- Result:=Instance is AClass;
- end;
- function ord4(i: smallint): smallint; {$ifdef systeminline}inline;{$endif}
- begin
- result:=i;
- end;
- function ord4(l: longint): longint; {$ifdef systeminline}inline;{$endif}
- begin
- result := l;
- end;
- function ord4(c: cardinal): cardinal; {$ifdef systeminline}inline;{$endif}
- begin
- result := c;
- end;
- function ord4(p: pointer): ptrint; {$ifdef systeminline}inline;{$endif}
- begin
- result := ptrint(p);
- end;
- function BAnd(i,j: longint): longint; {$ifdef systeminline}inline;{$endif}
- begin
- result := i and j;
- end;
- function BAnd(i,j: cardinal): cardinal; {$ifdef systeminline}inline;{$endif}
- begin
- result := i and j;
- end;
- function BAnd(i,j: int64): int64; {$ifdef systeminline}inline;{$endif}
- begin
- result := i and j;
- end;
- function BAnd(i,j: qword): qword; {$ifdef systeminline}inline;{$endif}
- begin
- result := i and j;
- end;
- function BOr(i,j: longint): longint; {$ifdef systeminline}inline;{$endif}
- begin
- result := i or j;
- end;
- function BOr(i,j: cardinal): cardinal; {$ifdef systeminline}inline;{$endif}
- begin
- result := i or j;
- end;
- function BOr(i,j: int64): int64; {$ifdef systeminline}inline;{$endif}
- begin
- result := i or j;
- end;
- function BOr(i,j: qword): qword; {$ifdef systeminline}inline;{$endif}
- begin
- result := i or j;
- end;
- function BXor(i,j: longint): longint; {$ifdef systeminline}inline;{$endif}
- begin
- result := i xor j;
- end;
- function BXor(i,j: cardinal): cardinal; {$ifdef systeminline}inline;{$endif}
- begin
- result := i xor j;
- end;
- function BXor(i,j: int64): int64; {$ifdef systeminline}inline;{$endif}
- begin
- result := i xor j;
- end;
- function BXor(i,j: qword): qword; {$ifdef systeminline}inline;{$endif}
- begin
- result := i xor j;
- end;
- function Bsr(i: longint; j: cardinal): longint; {$ifdef systeminline}inline;{$endif}
- begin
- result := i shr j;
- end;
- function Bsr(i,j: cardinal): cardinal; {$ifdef systeminline}inline;{$endif}
- begin
- result := i shr j;
- end;
- function Bsr(i: int64; j: cardinal): int64; {$ifdef systeminline}inline;{$endif}
- begin
- result := i shr j;
- end;
- function Bsr(i: qword; j: cardinal): qword; {$ifdef systeminline}inline;{$endif}
- begin
- result := i shr j;
- end;
- function Bsl(i: longint; j: cardinal): longint; {$ifdef systeminline}inline;{$endif}
- begin
- result := i shl j;
- end;
- function Bsl(i,j: cardinal): cardinal; {$ifdef systeminline}inline;{$endif}
- begin
- result := i shl j;
- end;
- function Bsl(i: int64; j: cardinal): int64; {$ifdef systeminline}inline;{$endif}
- begin
- result := i shl j;
- end;
- function Bsl(i: qword; j: cardinal): qword; {$ifdef systeminline}inline;{$endif}
- begin
- result := i shl j;
- end;
- function BTst(i: longint; j: cardinal): boolean; {$ifdef systeminline}inline;{$endif}
- begin
- result := ((i shr j) and 1) <> 0;
- end;
- function BTst(i,j: cardinal): boolean; {$ifdef systeminline}inline;{$endif}
- begin
- result := ((i shr j) and 1) <> 0;
- end;
- function BTst(i: int64; j: cardinal): boolean; {$ifdef systeminline}inline;{$endif}
- begin
- result := (cardinal(i shr j) and 1) <> 0;
- end;
- function BTst(i: qword; j: cardinal): boolean; {$ifdef systeminline}inline;{$endif}
- begin
- result := (cardinal(i shr j) and 1) <> 0;
- end;
- procedure BSet(var i: longint; j: cardinal); {$ifdef systeminline}inline;{$endif}
- begin
- i := i or (1 shl j);
- end;
- procedure BSet(var i: cardinal; j: cardinal); {$ifdef systeminline}inline;{$endif}
- begin
- i := i or (1 shl j);
- end;
- procedure BSet(var i: int64; j: cardinal); {$ifdef systeminline}inline;{$endif}
- begin
- i := i or (int64(1) shl j);
- end;
- procedure BSet(var i: qword; j: cardinal); {$ifdef systeminline}inline;{$endif}
- begin
- i := i or (qword(1) shl j);
- end;
- procedure BClr(var i: longint; j: cardinal); {$ifdef systeminline}inline;{$endif}
- begin
- i := i and not (1 shl j);
- end;
- procedure BClr(var i: cardinal; j: cardinal); {$ifdef systeminline}inline;{$endif}
- begin
- i := i and not (1 shl j);
- end;
- procedure BClr(var i: int64; j: cardinal); {$ifdef systeminline}inline;{$endif}
- begin
- i := i and not (int64(1) shl j);
- end;
- procedure BClr(var i: qword; j: cardinal); {$ifdef systeminline}inline;{$endif}
- begin
- i := i and not (qword(1) shl j);
- end;
- function BRotL(i: longint; j: cardinal): longint; {$ifdef systeminline}inline;{$endif}
- begin
- result := (i shl j) or (i shr (32-j));
- end;
- function BRotL(i,j: cardinal): cardinal; {$ifdef systeminline}inline;{$endif}
- begin
- result := (i shl j) or (i shr (32-j));
- end;
- function BRotL(i: int64; j: cardinal): int64; {$ifdef systeminline}inline;{$endif}
- begin
- result := (i shl j) or (i shr (64-j));
- end;
- function BRotL(i: qword; j: cardinal): qword; {$ifdef systeminline}inline;{$endif}
- begin
- result := (i shl j) or (i shr (64-j));
- end;
- function BRotR(i: longint; j: cardinal): longint; {$ifdef systeminline}inline;{$endif}
- begin
- result := (i shr j) or (i shl (32-j));
- end;
- function BRotR(i,j: cardinal): cardinal; {$ifdef systeminline}inline;{$endif}
- begin
- result := (i shr j) or (i shl (32-j));
- end;
- function BRotR(i: int64; j: cardinal): int64; {$ifdef systeminline}inline;{$endif}
- begin
- result := (i shr j) or (i shl (64-j));
- end;
- function BRotR(i: qword; j: cardinal): qword; {$ifdef systeminline}inline;{$endif}
- begin
- result := (i shr j) or (i shl (64-j));
- end;
- function BNot(i: longint): longint; {$ifdef systeminline}inline;{$endif}
- begin
- result := not(i);
- end;
- function BNot(i: cardinal): cardinal; {$ifdef systeminline}inline;{$endif}
- begin
- result := not(i);
- end;
- function BNot(i: int64): int64; {$ifdef systeminline}inline;{$endif}
- begin
- result := not(i);
- end;
- function BNot(i: qword): qword; {$ifdef systeminline}inline;{$endif}
- begin
- result := not(i);
- end;
- {$ifdef cpupowerpc}
- begin
- asm
- mtfsfi 6,1
- end;
- {$endif cpupowerpc}
- end.
|