macpas.pp 8.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319
  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. function GetPointerSize(p: pointer): ptrint; {$ifdef systeminline}inline;{$endif}
  67. implementation
  68. function FCC(const literal: string): LongWord; {$ifdef systeminline}inline;{$endif}
  69. begin
  70. FCC := PLongWord(@literal[1])^;
  71. end;
  72. function FOUR_CHAR_CODE(const literal: string): LongWord; {$ifdef systeminline}inline;{$endif}
  73. begin
  74. FOUR_CHAR_CODE := PLongWord(@literal[1])^;
  75. end;
  76. operator := (const s: ShortString) res: LongWord; {$ifdef systeminline}inline;{$endif}
  77. begin
  78. res := PLongWord(@s[1])^;
  79. end;
  80. Function Member (Instance : TObject; AClass : TClass) : boolean; {$ifdef systeminline}inline;{$endif}
  81. begin
  82. Result:=Instance is AClass;
  83. end;
  84. function ord4(i: smallint): smallint; {$ifdef systeminline}inline;{$endif}
  85. begin
  86. result:=i;
  87. end;
  88. function ord4(l: longint): longint; {$ifdef systeminline}inline;{$endif}
  89. begin
  90. result := l;
  91. end;
  92. function ord4(c: cardinal): cardinal; {$ifdef systeminline}inline;{$endif}
  93. begin
  94. result := c;
  95. end;
  96. function ord4(p: pointer): ptrint; {$ifdef systeminline}inline;{$endif}
  97. begin
  98. result := ptrint(p);
  99. end;
  100. function BAnd(i,j: longint): longint; {$ifdef systeminline}inline;{$endif}
  101. begin
  102. result := i and j;
  103. end;
  104. function BAnd(i,j: cardinal): cardinal; {$ifdef systeminline}inline;{$endif}
  105. begin
  106. result := i and j;
  107. end;
  108. function BAnd(i,j: int64): int64; {$ifdef systeminline}inline;{$endif}
  109. begin
  110. result := i and j;
  111. end;
  112. function BAnd(i,j: qword): qword; {$ifdef systeminline}inline;{$endif}
  113. begin
  114. result := i and j;
  115. end;
  116. function BOr(i,j: longint): longint; {$ifdef systeminline}inline;{$endif}
  117. begin
  118. result := i or j;
  119. end;
  120. function BOr(i,j: cardinal): cardinal; {$ifdef systeminline}inline;{$endif}
  121. begin
  122. result := i or j;
  123. end;
  124. function BOr(i,j: int64): int64; {$ifdef systeminline}inline;{$endif}
  125. begin
  126. result := i or j;
  127. end;
  128. function BOr(i,j: qword): qword; {$ifdef systeminline}inline;{$endif}
  129. begin
  130. result := i or j;
  131. end;
  132. function BXor(i,j: longint): longint; {$ifdef systeminline}inline;{$endif}
  133. begin
  134. result := i xor j;
  135. end;
  136. function BXor(i,j: cardinal): cardinal; {$ifdef systeminline}inline;{$endif}
  137. begin
  138. result := i xor j;
  139. end;
  140. function BXor(i,j: int64): int64; {$ifdef systeminline}inline;{$endif}
  141. begin
  142. result := i xor j;
  143. end;
  144. function BXor(i,j: qword): qword; {$ifdef systeminline}inline;{$endif}
  145. begin
  146. result := i xor j;
  147. end;
  148. function Bsr(i: longint; j: cardinal): longint; {$ifdef systeminline}inline;{$endif}
  149. begin
  150. result := i shr j;
  151. end;
  152. function Bsr(i,j: cardinal): cardinal; {$ifdef systeminline}inline;{$endif}
  153. begin
  154. result := i shr j;
  155. end;
  156. function Bsr(i: int64; j: cardinal): int64; {$ifdef systeminline}inline;{$endif}
  157. begin
  158. result := i shr j;
  159. end;
  160. function Bsr(i: qword; j: cardinal): qword; {$ifdef systeminline}inline;{$endif}
  161. begin
  162. result := i shr j;
  163. end;
  164. function Bsl(i: longint; j: cardinal): longint; {$ifdef systeminline}inline;{$endif}
  165. begin
  166. result := i shl j;
  167. end;
  168. function Bsl(i,j: cardinal): cardinal; {$ifdef systeminline}inline;{$endif}
  169. begin
  170. result := i shl j;
  171. end;
  172. function Bsl(i: int64; j: cardinal): int64; {$ifdef systeminline}inline;{$endif}
  173. begin
  174. result := i shl j;
  175. end;
  176. function Bsl(i: qword; j: cardinal): qword; {$ifdef systeminline}inline;{$endif}
  177. begin
  178. result := i shl j;
  179. end;
  180. function BTst(i: longint; j: cardinal): boolean; {$ifdef systeminline}inline;{$endif}
  181. begin
  182. result := ((i shr j) and 1) <> 0;
  183. end;
  184. function BTst(i,j: cardinal): boolean; {$ifdef systeminline}inline;{$endif}
  185. begin
  186. result := ((i shr j) and 1) <> 0;
  187. end;
  188. function BTst(i: int64; j: cardinal): boolean; {$ifdef systeminline}inline;{$endif}
  189. begin
  190. result := (cardinal(i shr j) and 1) <> 0;
  191. end;
  192. function BTst(i: qword; j: cardinal): boolean; {$ifdef systeminline}inline;{$endif}
  193. begin
  194. result := (cardinal(i shr j) and 1) <> 0;
  195. end;
  196. procedure BSet(var i: longint; j: cardinal); {$ifdef systeminline}inline;{$endif}
  197. begin
  198. i := i or (1 shl j);
  199. end;
  200. procedure BSet(var i: cardinal; j: cardinal); {$ifdef systeminline}inline;{$endif}
  201. begin
  202. i := i or (1 shl j);
  203. end;
  204. procedure BSet(var i: int64; j: cardinal); {$ifdef systeminline}inline;{$endif}
  205. begin
  206. i := i or (int64(1) shl j);
  207. end;
  208. procedure BSet(var i: qword; j: cardinal); {$ifdef systeminline}inline;{$endif}
  209. begin
  210. i := i or (qword(1) shl j);
  211. end;
  212. procedure BClr(var i: longint; j: cardinal); {$ifdef systeminline}inline;{$endif}
  213. begin
  214. i := i and not (1 shl j);
  215. end;
  216. procedure BClr(var i: cardinal; j: cardinal); {$ifdef systeminline}inline;{$endif}
  217. begin
  218. i := i and not (1 shl j);
  219. end;
  220. procedure BClr(var i: int64; j: cardinal); {$ifdef systeminline}inline;{$endif}
  221. begin
  222. i := i and not (int64(1) shl j);
  223. end;
  224. procedure BClr(var i: qword; j: cardinal); {$ifdef systeminline}inline;{$endif}
  225. begin
  226. i := i and not (qword(1) shl j);
  227. end;
  228. function GetPointerSize(p: pointer): ptrint; {$ifdef systeminline}inline;{$endif}
  229. begin
  230. GetPointerSize := memsize(p);
  231. end;
  232. {$ifdef cpupowerpc}
  233. begin
  234. asm
  235. mtfsfi 6,1
  236. end;
  237. {$endif cpupowerpc}
  238. end.