DEADSOFTWARE

9c0536867a7bfbd44447d224970ebf7f4eff51a0
[d2df-sdl.git] / src / lib / libjit / libjit_types.pas
1 (*
2 * jit.h - General definitions for JIT back-ends.
3 *
4 * Copyright (C) 2004 Southern Storm Software, Pty Ltd.
5 * Copyright (C) 2016 Ketmar Dark
6 *
7 * The libjit library is free software: you can redistribute it and/or
8 * modify it under the terms of the GNU Lesser General Public License
9 * as published by the Free Software Foundation, either version 2.1 of
10 * the License, or (at your option) any later version.
11 *
12 * The libjit library is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15 * Lesser General Public License for more details.
16 *
17 * You should have received a copy of the GNU Lesser General Public
18 * License along with the libjit library. If not, see
19 * <http://www.gnu.org/licenses/>.
20 *)
21 unit libjit_types;
23 {$IFDEF WIN32}
24 {$DEFINE MSWINDOWS}
25 {$ENDIF}
27 {$MODE OBJFPC}
28 {$PACKRECORDS C}
29 {$MACRO ON}
31 {$Z4} // Force four-byte enums
33 interface
35 uses
36 libjit;
38 //LIBJIT_LIBNAME = 'libjit.dll';
39 {$IF not DEFINED(MSWINDOWS)}
40 (*const*) var jit_opcodes: packed array [0..JIT_OP_NUM_OPCODES-1] of jit_opcode_info_t; cvar; external LIBJIT_LIBNAME;
42 (*
43 * Pre-defined type descriptors.
44 *)
45 (*const*) var jit_type_void: jit_type_t; cvar; external LIBJIT_LIBNAME;
46 (*const*) var jit_type_sbyte: jit_type_t; cvar; external LIBJIT_LIBNAME;
47 (*const*) var jit_type_ubyte: jit_type_t; cvar; external LIBJIT_LIBNAME;
48 (*const*) var jit_type_short: jit_type_t; cvar; external LIBJIT_LIBNAME;
49 (*const*) var jit_type_ushort: jit_type_t; cvar; external LIBJIT_LIBNAME;
50 (*const*) var jit_type_int: jit_type_t; cvar; external LIBJIT_LIBNAME;
51 (*const*) var jit_type_uint: jit_type_t; cvar; external LIBJIT_LIBNAME;
52 (*const*) var jit_type_nint: jit_type_t; cvar; external LIBJIT_LIBNAME;
53 (*const*) var jit_type_nuint: jit_type_t; cvar; external LIBJIT_LIBNAME;
54 (*const*) var jit_type_long: jit_type_t; cvar; external LIBJIT_LIBNAME;
55 (*const*) var jit_type_ulong: jit_type_t; cvar; external LIBJIT_LIBNAME;
56 (*const*) var jit_type_float32: jit_type_t; cvar; external LIBJIT_LIBNAME;
57 (*const*) var jit_type_float64: jit_type_t; cvar; external LIBJIT_LIBNAME;
58 (*const*) var jit_type_nfloat: jit_type_t; cvar; external LIBJIT_LIBNAME;
59 (*const*) var jit_type_void_ptr: jit_type_t; cvar; external LIBJIT_LIBNAME;
61 (*
62 * Type descriptors for the system "char", "int", "long", etc types.
63 * These are defined to one of the above values.
64 *)
65 (*const*) var jit_type_sys_bool: jit_type_t; cvar; external LIBJIT_LIBNAME;
66 (*const*) var jit_type_sys_char: jit_type_t; cvar; external LIBJIT_LIBNAME;
67 (*const*) var jit_type_sys_schar: jit_type_t; cvar; external LIBJIT_LIBNAME;
68 (*const*) var jit_type_sys_uchar: jit_type_t; cvar; external LIBJIT_LIBNAME;
69 (*const*) var jit_type_sys_short: jit_type_t; cvar; external LIBJIT_LIBNAME;
70 (*const*) var jit_type_sys_ushort: jit_type_t; cvar; external LIBJIT_LIBNAME;
71 (*const*) var jit_type_sys_int: jit_type_t; cvar; external LIBJIT_LIBNAME;
72 (*const*) var jit_type_sys_uint: jit_type_t; cvar; external LIBJIT_LIBNAME;
73 (*const*) var jit_type_sys_long: jit_type_t; cvar; external LIBJIT_LIBNAME;
74 (*const*) var jit_type_sys_ulong: jit_type_t; cvar; external LIBJIT_LIBNAME;
75 (*const*) var jit_type_sys_longlong: jit_type_t; cvar; external LIBJIT_LIBNAME;
76 (*const*) var jit_type_sys_ulonglong: jit_type_t; cvar; external LIBJIT_LIBNAME;
77 (*const*) var jit_type_sys_float: jit_type_t; cvar; external LIBJIT_LIBNAME;
78 (*const*) var jit_type_sys_double: jit_type_t; cvar; external LIBJIT_LIBNAME;
79 (*const*) var jit_type_sys_long_double: jit_type_t; cvar; external LIBJIT_LIBNAME;
81 {$ELSE}
82 function jit_type_void (): jit_type_t;
83 function jit_type_sbyte (): jit_type_t;
84 function jit_type_ubyte (): jit_type_t;
85 function jit_type_short (): jit_type_t;
86 function jit_type_ushort (): jit_type_t;
87 function jit_type_int (): jit_type_t;
88 function jit_type_uint (): jit_type_t;
89 function jit_type_nint (): jit_type_t;
90 function jit_type_nuint (): jit_type_t;
91 function jit_type_long (): jit_type_t;
92 function jit_type_ulong (): jit_type_t;
93 function jit_type_float32 (): jit_type_t;
94 function jit_type_float64 (): jit_type_t;
95 function jit_type_nfloat (): jit_type_t;
96 function jit_type_void_ptr (): jit_type_t;
98 function jit_type_sys_bool (): jit_type_t;
99 function jit_type_sys_char (): jit_type_t;
100 function jit_type_sys_schar (): jit_type_t;
101 function jit_type_sys_uchar (): jit_type_t;
102 function jit_type_sys_short (): jit_type_t;
103 function jit_type_sys_ushort (): jit_type_t;
104 function jit_type_sys_int (): jit_type_t;
105 function jit_type_sys_uint (): jit_type_t;
106 function jit_type_sys_long (): jit_type_t;
107 function jit_type_sys_ulong (): jit_type_t;
108 function jit_type_sys_longlong (): jit_type_t;
109 function jit_type_sys_ulonglong (): jit_type_t;
110 function jit_type_sys_float (): jit_type_t;
111 function jit_type_sys_double (): jit_type_t;
112 function jit_type_sys_long_double (): jit_type_t;
113 {$ENDIF}
116 implementation
118 {$IF DEFINED(MSWINDOWS)}
119 uses
120 Windows, SysUtils;
122 var
123 libjitH: HModule = 0;
126 function libjitImport (const name: AnsiString): Pointer;
127 begin
128 if (libjitH = 0) then
129 begin
130 libjitH := LoadLibrary(LIBJIT_LIBNAME);
131 if (libjitH = 0) then raise Exception.Create('cannot load '+LIBJIT_LIBNAME);
132 end;
133 result := GetProcAddress(libjitH, PAnsiChar(name));
134 if (result = nil) then raise Exception.Create('cannot load '''+name+''' from '+LIBJIT_LIBNAME);
135 end;
138 var
139 imp_jit_type_void: Pointer = nil;
140 imp_jit_type_sbyte: Pointer = nil;
141 imp_jit_type_ubyte: Pointer = nil;
142 imp_jit_type_short: Pointer = nil;
143 imp_jit_type_ushort: Pointer = nil;
144 imp_jit_type_int: Pointer = nil;
145 imp_jit_type_uint: Pointer = nil;
146 imp_jit_type_nint: Pointer = nil;
147 imp_jit_type_nuint: Pointer = nil;
148 imp_jit_type_long: Pointer = nil;
149 imp_jit_type_ulong: Pointer = nil;
150 imp_jit_type_float32: Pointer = nil;
151 imp_jit_type_float64: Pointer = nil;
152 imp_jit_type_nfloat: Pointer = nil;
153 imp_jit_type_void_ptr: Pointer = nil;
155 imp_jit_type_sys_bool: Pointer = nil;
156 imp_jit_type_sys_char: Pointer = nil;
157 imp_jit_type_sys_schar: Pointer = nil;
158 imp_jit_type_sys_uchar: Pointer = nil;
159 imp_jit_type_sys_short: Pointer = nil;
160 imp_jit_type_sys_ushort: Pointer = nil;
161 imp_jit_type_sys_int: Pointer = nil;
162 imp_jit_type_sys_uint: Pointer = nil;
163 imp_jit_type_sys_long: Pointer = nil;
164 imp_jit_type_sys_ulong: Pointer = nil;
165 imp_jit_type_sys_longlong: Pointer = nil;
166 imp_jit_type_sys_ulonglong: Pointer = nil;
167 imp_jit_type_sys_float: Pointer = nil;
168 imp_jit_type_sys_double: Pointer = nil;
169 imp_jit_type_sys_long_double: Pointer = nil;
172 function jit_type_void (): jit_type_t; begin if (imp_jit_type_void = nil) then imp_jit_type_void := jit_type_t(libjitImport('jit_type_void')); result := imp_jit_type_void; end;
173 function jit_type_sbyte (): jit_type_t; begin if (imp_jit_type_sbyte = nil) then imp_jit_type_sbyte := jit_type_t(libjitImport('jit_type_sbyte')); result := imp_jit_type_sbyte; end;
174 function jit_type_ubyte (): jit_type_t; begin if (imp_jit_type_ubyte = nil) then imp_jit_type_ubyte := jit_type_t(libjitImport('jit_type_ubyte')); result := imp_jit_type_ubyte; end;
175 function jit_type_short (): jit_type_t; begin if (imp_jit_type_short = nil) then imp_jit_type_short := jit_type_t(libjitImport('jit_type_short')); result := imp_jit_type_short; end;
176 function jit_type_ushort (): jit_type_t; begin if (imp_jit_type_ushort = nil) then imp_jit_type_ushort := jit_type_t(libjitImport('jit_type_ushort')); result := imp_jit_type_ushort; end;
177 function jit_type_int (): jit_type_t; begin if (imp_jit_type_int = nil) then imp_jit_type_int := jit_type_t(libjitImport('jit_type_int')); result := imp_jit_type_int; end;
178 function jit_type_uint (): jit_type_t; begin if (imp_jit_type_uint = nil) then imp_jit_type_uint := jit_type_t(libjitImport('jit_type_uint')); result := imp_jit_type_uint; end;
179 function jit_type_nint (): jit_type_t; begin if (imp_jit_type_nint = nil) then imp_jit_type_nint := jit_type_t(libjitImport('jit_type_nint')); result := imp_jit_type_nint; end;
180 function jit_type_nuint (): jit_type_t; begin if (imp_jit_type_nuint = nil) then imp_jit_type_nuint := jit_type_t(libjitImport('jit_type_nuint')); result := imp_jit_type_nuint; end;
181 function jit_type_long (): jit_type_t; begin if (imp_jit_type_long = nil) then imp_jit_type_long := jit_type_t(libjitImport('jit_type_long')); result := imp_jit_type_long; end;
182 function jit_type_ulong (): jit_type_t; begin if (imp_jit_type_ulong = nil) then imp_jit_type_ulong := jit_type_t(libjitImport('jit_type_ulong')); result := imp_jit_type_ulong; end;
183 function jit_type_float32 (): jit_type_t; begin if (imp_jit_type_float32 = nil) then imp_jit_type_float32 := jit_type_t(libjitImport('jit_type_float32')); result := imp_jit_type_float32; end;
184 function jit_type_float64 (): jit_type_t; begin if (imp_jit_type_float64 = nil) then imp_jit_type_float64 := jit_type_t(libjitImport('jit_type_float64')); result := imp_jit_type_float64; end;
185 function jit_type_nfloat (): jit_type_t; begin if (imp_jit_type_nfloat = nil) then imp_jit_type_nfloat := jit_type_t(libjitImport('jit_type_nfloat')); result := imp_jit_type_nfloat; end;
186 function jit_type_void_ptr (): jit_type_t; begin if (imp_jit_type_void_ptr = nil) then imp_jit_type_void_ptr := jit_type_t(libjitImport('jit_type_void_ptr')); result := imp_jit_type_void_ptr; end;
188 function jit_type_sys_bool (): jit_type_t; begin if (imp_jit_type_sys_bool = nil) then imp_jit_type_sys_bool := jit_type_t(libjitImport('jit_type_sys_bool')); result := imp_jit_type_sys_bool; end;
189 function jit_type_sys_char (): jit_type_t; begin if (imp_jit_type_sys_char = nil) then imp_jit_type_sys_char := jit_type_t(libjitImport('jit_type_sys_char')); result := imp_jit_type_sys_char; end;
190 function jit_type_sys_schar (): jit_type_t; begin if (imp_jit_type_sys_schar = nil) then imp_jit_type_sys_schar := jit_type_t(libjitImport('jit_type_sys_schar')); result := imp_jit_type_sys_schar; end;
191 function jit_type_sys_uchar (): jit_type_t; begin if (imp_jit_type_sys_uchar = nil) then imp_jit_type_sys_uchar := jit_type_t(libjitImport('jit_type_sys_uchar')); result := imp_jit_type_sys_uchar; end;
192 function jit_type_sys_short (): jit_type_t; begin if (imp_jit_type_sys_short = nil) then imp_jit_type_sys_short := jit_type_t(libjitImport('jit_type_sys_short')); result := imp_jit_type_sys_short; end;
193 function jit_type_sys_ushort (): jit_type_t; begin if (imp_jit_type_sys_ushort = nil) then imp_jit_type_sys_ushort := jit_type_t(libjitImport('jit_type_sys_ushort')); result := imp_jit_type_sys_ushort; end;
194 function jit_type_sys_int (): jit_type_t; begin if (imp_jit_type_sys_int = nil) then imp_jit_type_sys_int := jit_type_t(libjitImport('jit_type_sys_int')); result := imp_jit_type_sys_int; end;
195 function jit_type_sys_uint (): jit_type_t; begin if (imp_jit_type_sys_uint = nil) then imp_jit_type_sys_uint := jit_type_t(libjitImport('jit_type_sys_uint')); result := imp_jit_type_sys_uint; end;
196 function jit_type_sys_long (): jit_type_t; begin if (imp_jit_type_sys_long = nil) then imp_jit_type_sys_long := jit_type_t(libjitImport('jit_type_sys_long')); result := imp_jit_type_sys_long; end;
197 function jit_type_sys_ulong (): jit_type_t; begin if (imp_jit_type_sys_ulong = nil) then imp_jit_type_sys_ulong := jit_type_t(libjitImport('jit_type_sys_ulong')); result := imp_jit_type_sys_ulong; end;
198 function jit_type_sys_longlong (): jit_type_t; begin if (imp_jit_type_sys_longlong = nil) then imp_jit_type_sys_longlong := jit_type_t(libjitImport('jit_type_sys_longlong')); result := imp_jit_type_sys_longlong; end;
199 function jit_type_sys_ulonglong (): jit_type_t; begin if (imp_jit_type_sys_ulonglong = nil) then imp_jit_type_sys_ulonglong := jit_type_t(libjitImport('jit_type_sys_ulonglong')); result := imp_jit_type_sys_ulonglong; end;
200 function jit_type_sys_float (): jit_type_t; begin if (imp_jit_type_sys_float = nil) then imp_jit_type_sys_float := jit_type_t(libjitImport('jit_type_sys_float')); result := imp_jit_type_sys_float; end;
201 function jit_type_sys_double (): jit_type_t; begin if (imp_jit_type_sys_double = nil) then imp_jit_type_sys_double := jit_type_t(libjitImport('jit_type_sys_double')); result := imp_jit_type_sys_double; end;
202 function jit_type_sys_long_double (): jit_type_t; begin if (imp_jit_type_sys_long_double = nil) then imp_jit_type_sys_long_double := jit_type_t(libjitImport('jit_type_sys_long_double')); result := imp_jit_type_sys_long_double; end;
203 {$ENDIF}
206 end.