macpas.pp 8.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313
  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. {FourCharCode coercion
  21. This routine coreces string literals to a FourCharCode.}
  22. function FCC(const literal: string): LongWord; {$ifdef systeminline}inline;{$endif}
  23. {Same as FCC, to be compatible with GPC}
  24. function FOUR_CHAR_CODE(const literal: string): LongWord; {$ifdef systeminline}inline;{$endif}
  25. {This makes casts from ShortString to FourCharCode automatically,
  26. to emulate the behaviour of mac pascal compilers}
  27. operator := (const s: ShortString) res: LongWord; {$ifdef systeminline}inline;{$endif}
  28. { Same as the "is" operator }
  29. Function Member (Instance : TObject; AClass : TClass) : boolean; {$ifdef systeminline}inline;{$endif}
  30. function ord4(i: smallint): smallint; {$ifdef systeminline}inline;{$endif}
  31. function ord4(l: longint): longint; {$ifdef systeminline}inline;{$endif}
  32. function ord4(c: cardinal): cardinal; {$ifdef systeminline}inline;{$endif}
  33. function ord4(p: pointer): ptrint; {$ifdef systeminline}inline;{$endif}
  34. function BAnd(i,j: longint): longint; {$ifdef systeminline}inline;{$endif}
  35. function BAnd(i,j: cardinal): cardinal; {$ifdef systeminline}inline;{$endif}
  36. function BAnd(i,j: int64): int64; {$ifdef systeminline}inline;{$endif}
  37. function BAnd(i,j: qword): qword; {$ifdef systeminline}inline;{$endif}
  38. function BOr(i,j: longint): longint; {$ifdef systeminline}inline;{$endif}
  39. function BOr(i,j: cardinal): cardinal; {$ifdef systeminline}inline;{$endif}
  40. function BOr(i,j: int64): int64; {$ifdef systeminline}inline;{$endif}
  41. function BOr(i,j: qword): qword; {$ifdef systeminline}inline;{$endif}
  42. function BXor(i,j: longint): longint; {$ifdef systeminline}inline;{$endif}
  43. function BXor(i,j: cardinal): cardinal; {$ifdef systeminline}inline;{$endif}
  44. function BXor(i,j: int64): int64; {$ifdef systeminline}inline;{$endif}
  45. function BXor(i,j: qword): qword; {$ifdef systeminline}inline;{$endif}
  46. function Bsr(i: longint; j: cardinal): longint; {$ifdef systeminline}inline;{$endif}
  47. function Bsr(i,j: cardinal): cardinal; {$ifdef systeminline}inline;{$endif}
  48. function Bsr(i: int64; j: cardinal): int64; {$ifdef systeminline}inline;{$endif}
  49. function Bsr(i: qword; j: cardinal): qword; {$ifdef systeminline}inline;{$endif}
  50. function Bsl(i: longint; j: cardinal): longint; {$ifdef systeminline}inline;{$endif}
  51. function Bsl(i,j: cardinal): cardinal; {$ifdef systeminline}inline;{$endif}
  52. function Bsl(i: int64; j: cardinal): int64; {$ifdef systeminline}inline;{$endif}
  53. function Bsl(i: qword; j: cardinal): qword; {$ifdef systeminline}inline;{$endif}
  54. function BTst(i: longint; j: cardinal): boolean; {$ifdef systeminline}inline;{$endif}
  55. function BTst(i,j: cardinal): boolean; {$ifdef systeminline}inline;{$endif}
  56. function BTst(i: int64; j: cardinal): boolean; {$ifdef systeminline}inline;{$endif}
  57. function BTst(i: qword; j: cardinal): boolean; {$ifdef systeminline}inline;{$endif}
  58. procedure BSet(var i: longint; j: cardinal); {$ifdef systeminline}inline;{$endif}
  59. procedure BSet(var i: cardinal; j: cardinal); {$ifdef systeminline}inline;{$endif}
  60. procedure BSet(var i: int64; j: cardinal); {$ifdef systeminline}inline;{$endif}
  61. procedure BSet(var i: qword; j: cardinal); {$ifdef systeminline}inline;{$endif}
  62. procedure BClr(var i: longint; j: cardinal); {$ifdef systeminline}inline;{$endif}
  63. procedure BClr(var i: cardinal; j: cardinal); {$ifdef systeminline}inline;{$endif}
  64. procedure BClr(var i: int64; j: cardinal); {$ifdef systeminline}inline;{$endif}
  65. procedure BClr(var i: qword; j: cardinal); {$ifdef systeminline}inline;{$endif}
  66. implementation
  67. function FCC(const literal: string): LongWord; {$ifdef systeminline}inline;{$endif}
  68. begin
  69. FCC := PLongWord(@literal[1])^;
  70. end;
  71. function FOUR_CHAR_CODE(const literal: string): LongWord; {$ifdef systeminline}inline;{$endif}
  72. begin
  73. FOUR_CHAR_CODE := PLongWord(@literal[1])^;
  74. end;
  75. operator := (const s: ShortString) res: LongWord; {$ifdef systeminline}inline;{$endif}
  76. begin
  77. res := PLongWord(@s[1])^;
  78. end;
  79. Function Member (Instance : TObject; AClass : TClass) : boolean; {$ifdef systeminline}inline;{$endif}
  80. begin
  81. Result:=Instance is AClass;
  82. end;
  83. function ord4(i: smallint): smallint; {$ifdef systeminline}inline;{$endif}
  84. begin
  85. result:=i;
  86. end;
  87. function ord4(l: longint): longint; {$ifdef systeminline}inline;{$endif}
  88. begin
  89. result := l;
  90. end;
  91. function ord4(c: cardinal): cardinal; {$ifdef systeminline}inline;{$endif}
  92. begin
  93. result := c;
  94. end;
  95. function ord4(p: pointer): ptrint; {$ifdef systeminline}inline;{$endif}
  96. begin
  97. result := ptrint(p);
  98. end;
  99. function BAnd(i,j: longint): longint; {$ifdef systeminline}inline;{$endif}
  100. begin
  101. result := i and j;
  102. end;
  103. function BAnd(i,j: cardinal): cardinal; {$ifdef systeminline}inline;{$endif}
  104. begin
  105. result := i and j;
  106. end;
  107. function BAnd(i,j: int64): int64; {$ifdef systeminline}inline;{$endif}
  108. begin
  109. result := i and j;
  110. end;
  111. function BAnd(i,j: qword): qword; {$ifdef systeminline}inline;{$endif}
  112. begin
  113. result := i and j;
  114. end;
  115. function BOr(i,j: longint): longint; {$ifdef systeminline}inline;{$endif}
  116. begin
  117. result := i or j;
  118. end;
  119. function BOr(i,j: cardinal): cardinal; {$ifdef systeminline}inline;{$endif}
  120. begin
  121. result := i or j;
  122. end;
  123. function BOr(i,j: int64): int64; {$ifdef systeminline}inline;{$endif}
  124. begin
  125. result := i or j;
  126. end;
  127. function BOr(i,j: qword): qword; {$ifdef systeminline}inline;{$endif}
  128. begin
  129. result := i or j;
  130. end;
  131. function BXor(i,j: longint): longint; {$ifdef systeminline}inline;{$endif}
  132. begin
  133. result := i xor j;
  134. end;
  135. function BXor(i,j: cardinal): cardinal; {$ifdef systeminline}inline;{$endif}
  136. begin
  137. result := i xor j;
  138. end;
  139. function BXor(i,j: int64): int64; {$ifdef systeminline}inline;{$endif}
  140. begin
  141. result := i xor j;
  142. end;
  143. function BXor(i,j: qword): qword; {$ifdef systeminline}inline;{$endif}
  144. begin
  145. result := i xor j;
  146. end;
  147. function Bsr(i: longint; j: cardinal): longint; {$ifdef systeminline}inline;{$endif}
  148. begin
  149. result := i shr j;
  150. end;
  151. function Bsr(i,j: cardinal): cardinal; {$ifdef systeminline}inline;{$endif}
  152. begin
  153. result := i shr j;
  154. end;
  155. function Bsr(i: int64; j: cardinal): int64; {$ifdef systeminline}inline;{$endif}
  156. begin
  157. result := i shr j;
  158. end;
  159. function Bsr(i: qword; j: cardinal): qword; {$ifdef systeminline}inline;{$endif}
  160. begin
  161. result := i shr j;
  162. end;
  163. function Bsl(i: longint; j: cardinal): longint; {$ifdef systeminline}inline;{$endif}
  164. begin
  165. result := i shl j;
  166. end;
  167. function Bsl(i,j: cardinal): cardinal; {$ifdef systeminline}inline;{$endif}
  168. begin
  169. result := i shl j;
  170. end;
  171. function Bsl(i: int64; j: cardinal): int64; {$ifdef systeminline}inline;{$endif}
  172. begin
  173. result := i shl j;
  174. end;
  175. function Bsl(i: qword; j: cardinal): qword; {$ifdef systeminline}inline;{$endif}
  176. begin
  177. result := i shl j;
  178. end;
  179. function BTst(i: longint; j: cardinal): boolean; {$ifdef systeminline}inline;{$endif}
  180. begin
  181. result := ((i shr j) and 1) <> 0;
  182. end;
  183. function BTst(i,j: cardinal): boolean; {$ifdef systeminline}inline;{$endif}
  184. begin
  185. result := ((i shr j) and 1) <> 0;
  186. end;
  187. function BTst(i: int64; j: cardinal): boolean; {$ifdef systeminline}inline;{$endif}
  188. begin
  189. result := (cardinal(i shr j) and 1) <> 0;
  190. end;
  191. function BTst(i: qword; j: cardinal): boolean; {$ifdef systeminline}inline;{$endif}
  192. begin
  193. result := (cardinal(i shr j) and 1) <> 0;
  194. end;
  195. procedure BSet(var i: longint; j: cardinal); {$ifdef systeminline}inline;{$endif}
  196. begin
  197. i := i or (1 shl j);
  198. end;
  199. procedure BSet(var i: cardinal; j: cardinal); {$ifdef systeminline}inline;{$endif}
  200. begin
  201. i := i or (1 shl j);
  202. end;
  203. procedure BSet(var i: int64; j: cardinal); {$ifdef systeminline}inline;{$endif}
  204. begin
  205. i := i or (int64(1) shl j);
  206. end;
  207. procedure BSet(var i: qword; j: cardinal); {$ifdef systeminline}inline;{$endif}
  208. begin
  209. i := i or (qword(1) shl j);
  210. end;
  211. procedure BClr(var i: longint; j: cardinal); {$ifdef systeminline}inline;{$endif}
  212. begin
  213. i := i and not (1 shl j);
  214. end;
  215. procedure BClr(var i: cardinal; j: cardinal); {$ifdef systeminline}inline;{$endif}
  216. begin
  217. i := i and not (1 shl j);
  218. end;
  219. procedure BClr(var i: int64; j: cardinal); {$ifdef systeminline}inline;{$endif}
  220. begin
  221. i := i and not (int64(1) shl j);
  222. end;
  223. procedure BClr(var i: qword; j: cardinal); {$ifdef systeminline}inline;{$endif}
  224. begin
  225. i := i and not (qword(1) shl j);
  226. end;
  227. {$ifdef cpupowerpc}
  228. begin
  229. asm
  230. mtfsfi 6,1
  231. end;
  232. {$endif cpupowerpc}
  233. end.