macpas.pp 8.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312
  1. {
  2. This file is part of the Free Pascal Run time library.
  3. Copyright (c) 2004 by Olle Raab
  4. This unit contain procedures specific for mode MacPas.
  5. It should be platform independant.
  6. See the file COPYING.FPC, included in this distribution,
  7. For details about the copyright.
  8. This program is distributed in the hope that it will be useful,
  9. but WITHOUT ANY WARRANTY; without even the implied warranty of
  10. MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
  11. **********************************************************************}
  12. {$mode objfpc}
  13. unit MacPas;
  14. interface
  15. { Using inlining for small system functions/wrappers }
  16. {$inline on}
  17. {$define SYSTEMINLINE}
  18. type
  19. LongDouble = ValReal;
  20. FourCharArray = packed array[1..4] of char;
  21. {FourCharCode coercion
  22. This routine coreces string literals to a FourCharCode.}
  23. function FCC(const literal: string): LongWord; {$ifdef systeminline}inline;{$endif}
  24. {Same as FCC, to be compatible with GPC}
  25. function FOUR_CHAR_CODE(const literal: string): LongWord; {$ifdef systeminline}inline;{$endif}
  26. { Same as the "is" operator }
  27. Function Member (Instance : TObject; AClass : TClass) : boolean; {$ifdef systeminline}inline;{$endif}
  28. function ord4(i: smallint): smallint; {$ifdef systeminline}inline;{$endif}
  29. function ord4(l: longint): longint; {$ifdef systeminline}inline;{$endif}
  30. function ord4(c: cardinal): cardinal; {$ifdef systeminline}inline;{$endif}
  31. function ord4(p: pointer): ptrint; {$ifdef systeminline}inline;{$endif}
  32. function BAnd(i,j: longint): longint; {$ifdef systeminline}inline;{$endif}
  33. function BAnd(i,j: cardinal): cardinal; {$ifdef systeminline}inline;{$endif}
  34. function BAnd(i,j: int64): int64; {$ifdef systeminline}inline;{$endif}
  35. function BAnd(i,j: qword): qword; {$ifdef systeminline}inline;{$endif}
  36. function BOr(i,j: longint): longint; {$ifdef systeminline}inline;{$endif}
  37. function BOr(i,j: cardinal): cardinal; {$ifdef systeminline}inline;{$endif}
  38. function BOr(i,j: int64): int64; {$ifdef systeminline}inline;{$endif}
  39. function BOr(i,j: qword): qword; {$ifdef systeminline}inline;{$endif}
  40. function BXor(i,j: longint): longint; {$ifdef systeminline}inline;{$endif}
  41. function BXor(i,j: cardinal): cardinal; {$ifdef systeminline}inline;{$endif}
  42. function BXor(i,j: int64): int64; {$ifdef systeminline}inline;{$endif}
  43. function BXor(i,j: qword): qword; {$ifdef systeminline}inline;{$endif}
  44. function Bsr(i: longint; j: cardinal): longint; {$ifdef systeminline}inline;{$endif}
  45. function Bsr(i,j: cardinal): cardinal; {$ifdef systeminline}inline;{$endif}
  46. function Bsr(i: int64; j: cardinal): int64; {$ifdef systeminline}inline;{$endif}
  47. function Bsr(i: qword; j: cardinal): qword; {$ifdef systeminline}inline;{$endif}
  48. function Bsl(i: longint; j: cardinal): longint; {$ifdef systeminline}inline;{$endif}
  49. function Bsl(i,j: cardinal): cardinal; {$ifdef systeminline}inline;{$endif}
  50. function Bsl(i: int64; j: cardinal): int64; {$ifdef systeminline}inline;{$endif}
  51. function Bsl(i: qword; j: cardinal): qword; {$ifdef systeminline}inline;{$endif}
  52. function BTst(i: longint; j: cardinal): boolean; {$ifdef systeminline}inline;{$endif}
  53. function BTst(i,j: cardinal): boolean; {$ifdef systeminline}inline;{$endif}
  54. function BTst(i: int64; j: cardinal): boolean; {$ifdef systeminline}inline;{$endif}
  55. function BTst(i: qword; j: cardinal): boolean; {$ifdef systeminline}inline;{$endif}
  56. procedure BSet(var i: longint; j: cardinal); {$ifdef systeminline}inline;{$endif}
  57. procedure BSet(var i: cardinal; j: cardinal); {$ifdef systeminline}inline;{$endif}
  58. procedure BSet(var i: int64; j: cardinal); {$ifdef systeminline}inline;{$endif}
  59. procedure BSet(var i: qword; j: cardinal); {$ifdef systeminline}inline;{$endif}
  60. procedure BClr(var i: longint; j: cardinal); {$ifdef systeminline}inline;{$endif}
  61. procedure BClr(var i: cardinal; j: cardinal); {$ifdef systeminline}inline;{$endif}
  62. procedure BClr(var i: int64; j: cardinal); {$ifdef systeminline}inline;{$endif}
  63. procedure BClr(var i: qword; j: cardinal); {$ifdef systeminline}inline;{$endif}
  64. implementation
  65. function FCC(const literal: string): LongWord; {$ifdef systeminline}inline;{$endif}
  66. begin
  67. {$ifdef FPC_LITTLE_ENDIAN}
  68. FCC := (ord(literal[1]) shl 24) or (ord(literal[2]) shl 16) or ord(literal[3] shl 8) or ord(literal[4]);
  69. {$else FPC_LITTLE_ENDIAN}
  70. FCC := PLongWord(@literal[1])^;
  71. {$endif FPC_LITTLE_ENDIAN}
  72. end;
  73. function FOUR_CHAR_CODE(const literal: string): LongWord; {$ifdef systeminline}inline;{$endif}
  74. begin
  75. {$ifdef FPC_LITTLE_ENDIAN}
  76. FOUR_CHAR_CODE := (ord(literal[1]) shl 24) or (ord(literal[2]) shl 16) or ord(literal[3] shl 8) or ord(literal[4]);
  77. {$else FPC_LITTLE_ENDIAN}
  78. FOUR_CHAR_CODE := PLongWord(@literal[1])^;
  79. {$endif FPC_LITTLE_ENDIAN}
  80. end;
  81. Function Member (Instance : TObject; AClass : TClass) : boolean; {$ifdef systeminline}inline;{$endif}
  82. begin
  83. Result:=Instance is AClass;
  84. end;
  85. function ord4(i: smallint): smallint; {$ifdef systeminline}inline;{$endif}
  86. begin
  87. result:=i;
  88. end;
  89. function ord4(l: longint): longint; {$ifdef systeminline}inline;{$endif}
  90. begin
  91. result := l;
  92. end;
  93. function ord4(c: cardinal): cardinal; {$ifdef systeminline}inline;{$endif}
  94. begin
  95. result := c;
  96. end;
  97. function ord4(p: pointer): ptrint; {$ifdef systeminline}inline;{$endif}
  98. begin
  99. result := ptrint(p);
  100. end;
  101. function BAnd(i,j: longint): longint; {$ifdef systeminline}inline;{$endif}
  102. begin
  103. result := i and j;
  104. end;
  105. function BAnd(i,j: cardinal): cardinal; {$ifdef systeminline}inline;{$endif}
  106. begin
  107. result := i and j;
  108. end;
  109. function BAnd(i,j: int64): int64; {$ifdef systeminline}inline;{$endif}
  110. begin
  111. result := i and j;
  112. end;
  113. function BAnd(i,j: qword): qword; {$ifdef systeminline}inline;{$endif}
  114. begin
  115. result := i and j;
  116. end;
  117. function BOr(i,j: longint): longint; {$ifdef systeminline}inline;{$endif}
  118. begin
  119. result := i or j;
  120. end;
  121. function BOr(i,j: cardinal): cardinal; {$ifdef systeminline}inline;{$endif}
  122. begin
  123. result := i or j;
  124. end;
  125. function BOr(i,j: int64): int64; {$ifdef systeminline}inline;{$endif}
  126. begin
  127. result := i or j;
  128. end;
  129. function BOr(i,j: qword): qword; {$ifdef systeminline}inline;{$endif}
  130. begin
  131. result := i or j;
  132. end;
  133. function BXor(i,j: longint): longint; {$ifdef systeminline}inline;{$endif}
  134. begin
  135. result := i xor j;
  136. end;
  137. function BXor(i,j: cardinal): cardinal; {$ifdef systeminline}inline;{$endif}
  138. begin
  139. result := i xor j;
  140. end;
  141. function BXor(i,j: int64): int64; {$ifdef systeminline}inline;{$endif}
  142. begin
  143. result := i xor j;
  144. end;
  145. function BXor(i,j: qword): qword; {$ifdef systeminline}inline;{$endif}
  146. begin
  147. result := i xor j;
  148. end;
  149. function Bsr(i: longint; j: cardinal): longint; {$ifdef systeminline}inline;{$endif}
  150. begin
  151. result := i shr j;
  152. end;
  153. function Bsr(i,j: cardinal): cardinal; {$ifdef systeminline}inline;{$endif}
  154. begin
  155. result := i shr j;
  156. end;
  157. function Bsr(i: int64; j: cardinal): int64; {$ifdef systeminline}inline;{$endif}
  158. begin
  159. result := i shr j;
  160. end;
  161. function Bsr(i: qword; j: cardinal): qword; {$ifdef systeminline}inline;{$endif}
  162. begin
  163. result := i shr j;
  164. end;
  165. function Bsl(i: longint; j: cardinal): longint; {$ifdef systeminline}inline;{$endif}
  166. begin
  167. result := i shl j;
  168. end;
  169. function Bsl(i,j: cardinal): cardinal; {$ifdef systeminline}inline;{$endif}
  170. begin
  171. result := i shl j;
  172. end;
  173. function Bsl(i: int64; j: cardinal): int64; {$ifdef systeminline}inline;{$endif}
  174. begin
  175. result := i shl j;
  176. end;
  177. function Bsl(i: qword; j: cardinal): qword; {$ifdef systeminline}inline;{$endif}
  178. begin
  179. result := i shl j;
  180. end;
  181. function BTst(i: longint; j: cardinal): boolean; {$ifdef systeminline}inline;{$endif}
  182. begin
  183. result := ((i shr j) and 1) <> 0;
  184. end;
  185. function BTst(i,j: cardinal): boolean; {$ifdef systeminline}inline;{$endif}
  186. begin
  187. result := ((i shr j) and 1) <> 0;
  188. end;
  189. function BTst(i: int64; j: cardinal): boolean; {$ifdef systeminline}inline;{$endif}
  190. begin
  191. result := (cardinal(i shr j) and 1) <> 0;
  192. end;
  193. function BTst(i: qword; j: cardinal): boolean; {$ifdef systeminline}inline;{$endif}
  194. begin
  195. result := (cardinal(i shr j) and 1) <> 0;
  196. end;
  197. procedure BSet(var i: longint; j: cardinal); {$ifdef systeminline}inline;{$endif}
  198. begin
  199. i := i or (1 shl j);
  200. end;
  201. procedure BSet(var i: cardinal; j: cardinal); {$ifdef systeminline}inline;{$endif}
  202. begin
  203. i := i or (1 shl j);
  204. end;
  205. procedure BSet(var i: int64; j: cardinal); {$ifdef systeminline}inline;{$endif}
  206. begin
  207. i := i or (int64(1) shl j);
  208. end;
  209. procedure BSet(var i: qword; j: cardinal); {$ifdef systeminline}inline;{$endif}
  210. begin
  211. i := i or (qword(1) shl j);
  212. end;
  213. procedure BClr(var i: longint; j: cardinal); {$ifdef systeminline}inline;{$endif}
  214. begin
  215. i := i and not (1 shl j);
  216. end;
  217. procedure BClr(var i: cardinal; j: cardinal); {$ifdef systeminline}inline;{$endif}
  218. begin
  219. i := i and not (1 shl j);
  220. end;
  221. procedure BClr(var i: int64; j: cardinal); {$ifdef systeminline}inline;{$endif}
  222. begin
  223. i := i and not (int64(1) shl j);
  224. end;
  225. procedure BClr(var i: qword; j: cardinal); {$ifdef systeminline}inline;{$endif}
  226. begin
  227. i := i and not (qword(1) shl j);
  228. end;
  229. {$ifdef cpupowerpc}
  230. begin
  231. asm
  232. mtfsfi 6,1
  233. end;
  234. {$endif cpupowerpc}
  235. end.