Explorar o código

Merged revisions 4156-4157 via svnmerge from
svn+ssh://[email protected]/FPC/svn/fpc/trunk

........
r4156 | jonas | 2006-07-13 14:58:20 +0200 (Thu, 13 Jul 2006) | 2 lines

+ macpas BAnd/BOr/BXor/Bsr/Bsl/BTst/BSet/BClr support

........
r4157 | jonas | 2006-07-13 15:10:19 +0200 (Thu, 13 Jul 2006) | 3 lines

* use const strings parameters for four_char_code helpers to avoid
unnecessary copying

........

git-svn-id: branches/fixes_2_0@4188 -

Jonas Maebe %!s(int64=19) %!d(string=hai) anos
pai
achega
9062564469
Modificáronse 1 ficheiros con 215 adicións e 6 borrados
  1. 215 6
      rtl/inc/macpas.pp

+ 215 - 6
rtl/inc/macpas.pp

@@ -29,14 +29,14 @@ type
 
 {FourCharCode coercion
 This routine coreces string literals to a FourCharCode.}
-function FCC(literal: string): LongWord; {$ifdef systeminline}inline;{$endif}
+function FCC(const literal: string): LongWord; {$ifdef systeminline}inline;{$endif}
 
 {Same as FCC, to be compatible with GPC}
-function FOUR_CHAR_CODE(literal: string): LongWord; {$ifdef systeminline}inline;{$endif}
+function FOUR_CHAR_CODE(const literal: string): LongWord; {$ifdef systeminline}inline;{$endif}
 
 {This makes casts from ShortString to FourCharCode automatically,
  to emulate the behaviour of mac pascal compilers}
-operator := (s: ShortString) res: LongWord; {$ifdef systeminline}inline;{$endif}
+operator := (const s: ShortString) res: LongWord; {$ifdef systeminline}inline;{$endif}
 
 { Same as the "is" operator }
 Function Member (Instance : TObject; AClass : TClass) : boolean; {$ifdef systeminline}inline;{$endif}
@@ -46,21 +46,61 @@ 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}
+
 
 implementation
 
 
-function FCC(literal: string): LongWord; {$ifdef systeminline}inline;{$endif}
+function FCC(const literal: string): LongWord; {$ifdef systeminline}inline;{$endif}
 begin
   FCC := PLongWord(@literal[1])^;
 end;
 
-function FOUR_CHAR_CODE(literal: string): LongWord; {$ifdef systeminline}inline;{$endif}
+function FOUR_CHAR_CODE(const literal: string): LongWord; {$ifdef systeminline}inline;{$endif}
 begin
   FOUR_CHAR_CODE := PLongWord(@literal[1])^;
 end;
 
-operator := (s: ShortString) res: LongWord; {$ifdef systeminline}inline;{$endif}
+operator := (const s: ShortString) res: LongWord; {$ifdef systeminline}inline;{$endif}
 begin
   res := PLongWord(@s[1])^;
 end;
@@ -95,6 +135,175 @@ begin
 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;
+
+
 {$ifdef cpupowerpc}
 begin
   asm