DEADSOFTWARE

1310c8ea30c8a0c8fdb07ade7d9954c9fd7e64e8
[d2df-sdl.git] / src / lib / libjit / libjit.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;
23 {$IFDEF WIN32}
24 {$DEFINE MSWINDOWS}
25 {$ENDIF}
27 {$MODE DELPHI}
28 {$PACKRECORDS C}
29 {$MACRO ON}
31 {$Z4} // Force four-byte enums
33 interface
35 const
36 {$IFDEF MSWINDOWS}
37 //{$LINKLIB libjit.dll.a}
38 LIBJIT_LIBNAME = 'libjit-0.dll';
39 {$DEFINE libraryLibJITDecl := cdecl}
40 {$DEFINE libraryLibJITImp := cdecl; external LIBJIT_LIBNAME}
41 {$ELSE}
42 LIBJIT_LIBNAME = 'jit';
43 {$DEFINE libraryLibJITDecl := cdecl}
44 {$DEFINE libraryLibJITImp := cdecl; external LIBJIT_LIBNAME}
45 {$ENDIF}
48 type
49 jit_sbyte = ShortInt; pjit_sbyte = ^jit_sbyte;
50 jit_ubyte = Byte; pjit_ubyte = ^jit_ubyte;
51 jit_short = SmallInt; pjit_short = ^jit_short;
52 jit_ushort = Word; pjit_ushort = ^jit_ushort;
53 jit_int = LongInt; pjit_int = ^jit_int;
54 jit_uint = LongWord; pjit_uint = ^jit_uint;
55 // "native" types (should prolly be 8 bytes on 64-bit arch)
56 //jit_nint = PtrInt; pjit_nint = ^jit_nint; // "native"
57 //jit_nuint = PtrUInt; pjit_nuint = ^jit_nuint; // "native"
58 jit_long = Int64; pjit_long = ^jit_long;
59 jit_ulong = UInt64; pjit_ulong = ^jit_ulong;
60 jit_float32 = Single; pjit_float32 = ^jit_float32;
61 jit_float64 = Double; pjit_float64 = ^jit_float64;
62 jit_nfloat = Extended; pjit_nfloat = ^jit_nfloat; //k8: seems to be the same for x86; i think that FPC's `Extended` is C's `long double`
63 jit_ptr = Pointer; pjit_ptr = ^jit_ptr;
64 {$IF DEFINED(CPU32)}
65 {$DEFINE JIT_NATIVE_INT32}
66 jit_nint = LongInt; pjit_nint = ^jit_nint; // "native"
67 jit_nuint = LongWord; pjit_nuint = ^jit_nuint; // "native"
68 {$ELSEIF DEFINED(CPU64)}
69 {$UNDEF JIT_NATIVE_INT32}
70 jit_nint = Int64; pjit_nint = ^jit_nint; // "native"
71 jit_nuint = UInt64; pjit_nuint = ^jit_nuint; // "native"
72 {$ELSE}
73 {$ERROR unknown CPU bitness}
74 {$ENDIF}
76 const
77 jit_min_int = jit_int(jit_int(1) shl (sizeof(jit_int)*8-1));
78 jit_max_int = jit_int(jit_int(not jit_min_int));
79 jit_max_uint = jit_uint(not (jit_uint(0)));
80 jit_min_long = jit_long(jit_long(1) shl (sizeof(jit_long)*8-1));
81 jit_max_long = jit_long(not jit_min_long);
82 jit_max_ulong = jit_ulong(not (jit_ulong(0)));
84 (*
85 * Opaque structure that represents a context.
86 *)
87 type jit_context_t = Pointer;
89 (*
90 * Opaque structure that represents a function.
91 *)
92 type jit_function_t = Pointer;
94 (*
95 * Opaque structure that represents a block.
96 *)
97 type jit_block_t = Pointer;
99 (*
100 * Opaque structure that represents an instruction.
101 *)
102 type jit_insn_t = Pointer;
104 (*
105 * Opaque structure that represents a value.
106 *)
107 type jit_value_t = Pointer;
108 type pjit_value_t = ^jit_value_t;
110 (*
111 * Opaque structure that represents a type descriptor.
112 *)
113 type jit_type_t = Pointer;
114 type pjit_type_t = ^jit_type_t;
116 (*
117 * Opaque type that represents an exception stack trace.
118 *)
119 type jit_stack_trace_t = Pointer;
121 (*
122 * Block label identifier.
123 *)
124 type jit_label_t = jit_nuint;
125 type pjit_label_t = ^jit_label_t;
127 (*
128 * Value that represents an undefined label.
129 *)
130 const jit_label_undefined = jit_label_t(not (jit_uint(0)));
132 (*
133 * Value that represents an undefined offset.
134 *)
135 const JIT_NO_OFFSET = jit_uint(not (jit_uint(0)));
137 (*
138 * Function that is used to free user-supplied metadata.
139 *)
140 type jit_meta_free_func = procedure (data: Pointer); libraryLibJITDecl;
142 (*
143 * Function that is used to compile a function on demand.
144 * Returns zero if the compilation process failed for some reason.
145 *)
146 type jit_on_demand_func = function (func: jit_function_t): Integer; libraryLibJITDecl; //FIXME: should this be `jit_int` instead for x64?
148 (*
149 * Function that is used to control on demand compilation.
150 * Typically, it should take care of the context locking and unlocking,
151 * calling function's on demand compiler, and final compilation.
152 *)
153 type jit_on_demand_driver_func = function (func: jit_function_t): Pointer; libraryLibJITDecl;
156 function jit_context_create (): jit_context_t; libraryLibJITDecl;
157 procedure jit_context_destroy (context: jit_context_t); libraryLibJITDecl;
159 procedure jit_context_build_start (context: jit_context_t); libraryLibJITDecl;
160 procedure jit_context_build_end (context: jit_context_t); libraryLibJITDecl;
162 procedure jit_context_set_on_demand_driver (context: jit_context_t; driver: jit_on_demand_driver_func); libraryLibJITDecl;
164 //moved down;procedure jit_context_set_memory_manager (context: jit_context_t; manager: jit_memory_manager_t); libraryLibJITDecl;
166 function jit_context_set_meta (context: jit_context_t; type_: Integer; data: Pointer; free_data: jit_meta_free_func): Integer; libraryLibJITDecl;
167 function jit_context_set_meta_numeric (context: jit_context_t; type_: Integer; data: jit_nuint): Integer; libraryLibJITDecl;
168 function jit_context_get_meta (context: jit_context_t; type_: Integer): Pointer; libraryLibJITDecl;
169 function jit_context_get_meta_numeric (context: jit_context_t; type_: Integer): jit_nuint; libraryLibJITDecl;
170 procedure jit_context_free_meta (context: jit_context_t; type_: Integer); libraryLibJITDecl;
172 (*
173 * Standard meta values for builtin configurable options.
174 *)
175 const JIT_OPTION_CACHE_LIMIT = 10000;
176 const JIT_OPTION_CACHE_PAGE_SIZE = 10001;
177 const JIT_OPTION_PRE_COMPILE = 10002;
178 const JIT_OPTION_DONT_FOLD = 10003;
179 const JIT_OPTION_POSITION_INDEPENDENT = 10004;
180 const JIT_OPTION_CACHE_MAX_PAGE_FACTOR = 10005;
183 (*
184 * Prototype for closure functions.
185 *)
186 type jit_closure_func = procedure (signature: jit_type_t; result_: Pointer; args: PPointer; user_data: Pointer); libraryLibJITDecl;
188 (*
189 * Opaque type for accessing vararg parameters on closures.
190 *)
191 type jit_closure_va_list_t = Pointer;
193 (*
194 * External function declarations.
195 *)
196 procedure jit_apply (signature: jit_type_t; func: Pointer; args: PPointer; num_fixed_args: LongWord; return_value: Pointer); libraryLibJITDecl;
197 procedure jit_apply_raw (signature: jit_type_t; func: Pointer; args: Pointer; return_value: Pointer); libraryLibJITDecl;
198 function jit_raw_supported (signature: jit_type_t): Integer; libraryLibJITDecl;
200 function jit_closure_create (context: jit_context_t; signature: jit_type_t; func: jit_closure_func; user_data: Pointer): Pointer; libraryLibJITDecl;
202 function jit_closure_va_get_nint (va: jit_closure_va_list_t): jit_nint; libraryLibJITDecl;
203 function jit_closure_va_get_nuint (va: jit_closure_va_list_t): jit_nuint; libraryLibJITDecl;
204 function jit_closure_va_get_long (va: jit_closure_va_list_t): jit_long; libraryLibJITDecl;
205 function jit_closure_va_get_ulong (va: jit_closure_va_list_t): jit_ulong; libraryLibJITDecl;
206 function jit_closure_va_get_float32 (va: jit_closure_va_list_t): jit_float32; libraryLibJITDecl;
207 function jit_closure_va_get_float64 (va: jit_closure_va_list_t): jit_float64; libraryLibJITDecl;
208 function jit_closure_va_get_nfloat (va: jit_closure_va_list_t): jit_nfloat; libraryLibJITDecl;
209 function jit_closure_va_get_ptr (va: jit_closure_va_list_t): Pointer; libraryLibJITDecl;
210 procedure jit_closure_va_get_struct (va: jit_closure_va_list_t; buf: Pointer; type_: jit_type_t); libraryLibJITDecl;
212 function jit_block_get_function (block: jit_block_t): jit_function_t; libraryLibJITDecl;
213 function jit_block_get_context (block: jit_block_t): jit_context_t; libraryLibJITDecl;
214 function jit_block_get_label (block: jit_block_t): jit_label_t; libraryLibJITDecl;
215 function jit_block_get_next_label (block: jit_block_t; label_: jit_label_t): jit_label_t; libraryLibJITDecl;
216 function jit_block_next (func: jit_function_t; previous: jit_block_t): jit_block_t; libraryLibJITDecl;
217 function jit_block_previous (func: jit_function_t; previous: jit_block_t): jit_block_t; libraryLibJITDecl;
218 function jit_block_from_label (func: jit_function_t; label_: jit_label_t): jit_block_t; libraryLibJITDecl;
219 function jit_block_set_meta (block: jit_block_t; type_: Integer; data: Pointer; free_data: jit_meta_free_func): Integer; libraryLibJITDecl;
220 function jit_block_get_meta (block: jit_block_t; type_: Integer): Pointer; libraryLibJITDecl;
221 procedure jit_block_free_meta (block: jit_block_t; type_: Integer); libraryLibJITDecl;
222 function jit_block_is_reachable (block: jit_block_t): Integer; libraryLibJITDecl;
223 function jit_block_ends_in_dead (block: jit_block_t): Integer; libraryLibJITDecl;
224 function jit_block_current_is_dead (func: jit_function_t): Integer; libraryLibJITDecl;
226 type jit_debugger_t = Pointer;
227 type jit_debugger_thread_id_t = jit_nint;
228 type jit_debugger_breakpoint_id_t = jit_nint;
230 type jit_debugger_event_t = record
231 type_: Integer;
232 thread: jit_debugger_thread_id_t;
233 function_: jit_function_t;
234 data1: jit_nint;
235 data2: jit_nint;
236 id: jit_debugger_breakpoint_id_t;
237 trace: jit_stack_trace_t;
238 end;
239 type pjit_debugger_event_t = ^jit_debugger_event_t;
241 const JIT_DEBUGGER_TYPE_QUIT = 0;
242 const JIT_DEBUGGER_TYPE_HARD_BREAKPOINT = 1;
243 const JIT_DEBUGGER_TYPE_SOFT_BREAKPOINT = 2;
244 const JIT_DEBUGGER_TYPE_USER_BREAKPOINT = 3;
245 const JIT_DEBUGGER_TYPE_ATTACH_THREAD = 4;
246 const JIT_DEBUGGER_TYPE_DETACH_THREAD = 5;
248 type jit_debugger_breakpoint_info = record
249 flags: Integer;
250 thread: jit_debugger_thread_id_t;
251 function_: jit_function_t;
252 data1: jit_nint;
253 data2: jit_nint;
254 end;
255 type jit_debugger_breakpoint_info_t = ^jit_debugger_breakpoint_info;
257 const JIT_DEBUGGER_FLAG_THREAD = (1 shl 0);
258 const JIT_DEBUGGER_FLAG_FUNCTION = (1 shl 1);
259 const JIT_DEBUGGER_FLAG_DATA1 = (1 shl 2);
260 const JIT_DEBUGGER_FLAG_DATA2 = (1 shl 3);
262 const JIT_DEBUGGER_DATA1_FIRST = 10000;
263 const JIT_DEBUGGER_DATA1_LINE = 10000;
264 const JIT_DEBUGGER_DATA1_ENTER = 10001;
265 const JIT_DEBUGGER_DATA1_LEAVE = 10002;
266 const JIT_DEBUGGER_DATA1_THROW = 10003;
268 type jit_debugger_hook_func = procedure (func: jit_function_t; data1: jit_nint; data2: jit_nint); libraryLibJITDecl;
270 function jit_debugging_possible (): Integer; libraryLibJITDecl;
272 function jit_debugger_create (context: jit_context_t): jit_debugger_t; libraryLibJITDecl;
273 procedure jit_debugger_destroy (dbg: jit_debugger_t); libraryLibJITDecl;
275 function jit_debugger_get_context (dbg: jit_debugger_t): jit_context_t; libraryLibJITDecl;
276 function jit_debugger_from_context (context: jit_context_t): jit_debugger_t; libraryLibJITDecl;
278 function jit_debugger_get_self (dbg: jit_debugger_t): jit_debugger_thread_id_t; libraryLibJITDecl;
279 function jit_debugger_get_thread (dbg: jit_debugger_t; const native_thread: Pointer): jit_debugger_thread_id_t; libraryLibJITDecl;
280 function jit_debugger_get_native_thread (dbg: jit_debugger_t; thread: jit_debugger_thread_id_t; native_thread: Pointer): Integer; libraryLibJITDecl;
281 procedure jit_debugger_set_breakable (dbg: jit_debugger_t; const native_thread: Pointer; flag: Integer); libraryLibJITDecl;
283 procedure jit_debugger_attach_self (dbg: jit_debugger_t; stop_immediately: Integer); libraryLibJITDecl;
284 procedure jit_debugger_detach_self (dbg: jit_debugger_t); libraryLibJITDecl;
286 function jit_debugger_wait_event (dbg: jit_debugger_t; event: pjit_debugger_event_t; timeout: jit_int): Integer; libraryLibJITDecl;
288 function jit_debugger_add_breakpoint (dbg: jit_debugger_t; info: jit_debugger_breakpoint_info_t): jit_debugger_breakpoint_id_t; libraryLibJITDecl;
289 procedure jit_debugger_remove_breakpoint (dbg: jit_debugger_t; id: jit_debugger_breakpoint_id_t); libraryLibJITDecl;
290 procedure jit_debugger_remove_all_breakpoints (dbg: jit_debugger_t); libraryLibJITDecl;
292 function jit_debugger_is_alive (dbg: jit_debugger_t; thread: jit_debugger_thread_id_t): Integer; libraryLibJITDecl;
293 function jit_debugger_is_running (dbg: jit_debugger_t; thread: jit_debugger_thread_id_t): Integer; libraryLibJITDecl;
294 procedure jit_debugger_run (dbg: jit_debugger_t; thread: jit_debugger_thread_id_t); libraryLibJITDecl;
295 procedure jit_debugger_step (dbg: jit_debugger_t; thread: jit_debugger_thread_id_t); libraryLibJITDecl;
296 procedure jit_debugger_next (dbg: jit_debugger_t; thread: jit_debugger_thread_id_t); libraryLibJITDecl;
297 procedure jit_debugger_finish (dbg: jit_debugger_t; thread: jit_debugger_thread_id_t); libraryLibJITDecl;
299 procedure jit_debugger_break (dbg: jit_debugger_t); libraryLibJITDecl;
301 procedure jit_debugger_quit (dbg: jit_debugger_t); libraryLibJITDecl;
303 function jit_debugger_set_hook (context: jit_context_t; hook: jit_debugger_hook_func): jit_debugger_hook_func; libraryLibJITDecl;
306 (*
307 * Opaque types that represent a loaded ELF binary in read or write mode.
308 *)
309 type jit_readelf_t = Pointer;
310 type jit_writeelf_t = Pointer;
311 type pjit_readelf_t = ^jit_readelf_t;
313 (*
314 * Flags for "jit_readelf_open".
315 *)
316 const JIT_READELF_FLAG_FORCE = (1 shl 0); (* Force file to load *)
317 const JIT_READELF_FLAG_DEBUG = (1 shl 1); (* Print debugging information *)
319 (*
320 * Result codes from "jit_readelf_open".
321 *)
322 const JIT_READELF_OK = 0; (* File was opened successfully *)
323 const JIT_READELF_CANNOT_OPEN = 1; (* Could not open the file *)
324 const JIT_READELF_NOT_ELF = 2; (* Not an ELF-format binary *)
325 const JIT_READELF_WRONG_ARCH = 3; (* Wrong architecture for local system *)
326 const JIT_READELF_BAD_FORMAT = 4; (* ELF file, but badly formatted *)
327 const JIT_READELF_MEMORY = 5; (* Insufficient memory to load the file *)
329 (*
330 * External function declarations.
331 *)
332 function jit_readelf_open (readelf: pjit_readelf_t; const filename: PAnsiChar; flags: Integer): Integer; libraryLibJITDecl;
333 procedure jit_readelf_close (readelf: jit_readelf_t); libraryLibJITDecl;
334 function jit_readelf_get_name (readelf: jit_readelf_t): PAnsiChar; libraryLibJITDecl; // const
335 function jit_readelf_get_symbol (readelf: jit_readelf_t; const name: PAnsiChar): Pointer; libraryLibJITDecl;
336 function jit_readelf_get_section (readelf: jit_readelf_t; const name: PAnsiChar; size: pjit_nuint): Pointer; libraryLibJITDecl;
337 function jit_readelf_get_section_by_type (readelf: jit_readelf_t; type_: jit_int; size: pjit_nuint): Pointer; libraryLibJITDecl;
338 function jit_readelf_map_vaddr (readelf: jit_readelf_t; vaddr: jit_nuint): Pointer; libraryLibJITDecl;
339 function jit_readelf_num_needed (readelf: jit_readelf_t): LongWord; libraryLibJITDecl;
340 function jit_readelf_get_needed (readelf: jit_readelf_t; index: LongWord): PAnsiChar; libraryLibJITDecl; // const
341 procedure jit_readelf_add_to_context (readelf: jit_readelf_t; context: jit_context_t); libraryLibJITDecl;
342 function jit_readelf_resolve_all (context: jit_context_t; print_failures: Integer): Integer; libraryLibJITDecl;
343 function jit_readelf_register_symbol (context: jit_context_t; const name: PAnsiChar; value: Pointer; after: Integer): Integer; libraryLibJITDecl;
345 function jit_writeelf_create (const library_name: PAnsiChar): jit_writeelf_t; libraryLibJITDecl;
346 procedure jit_writeelf_destroy (writeelf: jit_writeelf_t); libraryLibJITDecl;
347 function jit_writeelf_write (writeelf: jit_writeelf_t; const filename: PAnsiChar): Integer; libraryLibJITDecl;
348 function jit_writeelf_add_function (writeelf: jit_writeelf_t; func: jit_function_t; const name: PAnsiChar): Integer; libraryLibJITDecl;
349 function jit_writeelf_add_needed (writeelf: jit_writeelf_t; const library_name: PAnsiChar): Integer; libraryLibJITDecl;
350 function jit_writeelf_write_section (writeelf: jit_writeelf_t; const name: PAnsiChar; type_: jit_int; const buf: Pointer; len: LongWord; discardable: Integer): Integer; libraryLibJITDecl;
352 (*
353 * Builtin exception type codes, and result values for intrinsic functions.
354 *)
355 const JIT_RESULT_OK = (1);
356 const JIT_RESULT_OVERFLOW = (0);
357 const JIT_RESULT_ARITHMETIC = (-1);
358 const JIT_RESULT_DIVISION_BY_ZERO = (-2);
359 const JIT_RESULT_COMPILE_ERROR = (-3);
360 const JIT_RESULT_OUT_OF_MEMORY = (-4);
361 const JIT_RESULT_NULL_REFERENCE = (-5);
362 const JIT_RESULT_NULL_FUNCTION = (-6);
363 const JIT_RESULT_CALLED_NESTED = (-7);
364 const JIT_RESULT_OUT_OF_BOUNDS = (-8);
365 const JIT_RESULT_UNDEFINED_LABEL = (-9);
366 const JIT_RESULT_MEMORY_FULL = (-10000);
368 (*
369 * Exception handling function for builtin exceptions.
370 *)
371 type jit_exception_func = function (exception_type: Integer): Pointer; libraryLibJITDecl;
373 (*
374 * External function declarations.
375 *)
376 function jit_exception_get_last (): Pointer; libraryLibJITDecl;
377 function jit_exception_get_last_and_clear (): Pointer; libraryLibJITDecl;
378 procedure jit_exception_set_last (object_: Pointer); libraryLibJITDecl;
379 procedure jit_exception_clear_last (); libraryLibJITDecl;
380 procedure jit_exception_throw (object_: Pointer); libraryLibJITDecl;
381 procedure jit_exception_builtin (exception_type: Integer); libraryLibJITDecl;
382 function jit_exception_set_handler (handler: jit_exception_func): jit_exception_func; libraryLibJITDecl;
383 function jit_exception_get_handler (): jit_exception_func; libraryLibJITDecl;
384 function jit_exception_get_stack_trace (): jit_stack_trace_t; libraryLibJITDecl;
385 function jit_stack_trace_get_size (trace: jit_stack_trace_t): LongWord; libraryLibJITDecl;
386 function jit_stack_trace_get_function (context: jit_context_t; trace: jit_stack_trace_t; posn: LongWord): jit_function_t; libraryLibJITDecl;
387 function jit_stack_trace_get_pc (trace: jit_stack_trace_t; posn: LongWord): Pointer; libraryLibJITDecl;
388 function jit_stack_trace_get_offset (context: jit_context_t; trace: jit_stack_trace_t; posn: LongWord): LongWord; libraryLibJITDecl;
389 procedure jit_stack_trace_free (trace: jit_stack_trace_t); libraryLibJITDecl;
392 (* Optimization levels *)
393 const JIT_OPTLEVEL_NONE = 0;
394 const JIT_OPTLEVEL_NORMAL = 1;
396 function jit_function_create (context: jit_context_t; signature: jit_type_t): jit_function_t; libraryLibJITDecl;
397 function jit_function_create_nested (context: jit_context_t; signature: jit_type_t; parent: jit_function_t): jit_function_t; libraryLibJITDecl;
398 procedure jit_function_abandon (func: jit_function_t); libraryLibJITDecl;
399 function jit_function_get_context (func: jit_function_t): jit_context_t; libraryLibJITDecl;
400 function jit_function_get_signature (func: jit_function_t): jit_type_t; libraryLibJITDecl;
401 function jit_function_set_meta (func: jit_function_t; type_: Integer; data: Pointer; free_data: jit_meta_free_func; build_only: Integer): Integer; libraryLibJITDecl;
402 function jit_function_get_meta (func: jit_function_t; type_: Integer): Pointer; libraryLibJITDecl;
403 procedure jit_function_free_meta (func: jit_function_t; type_: Integer); libraryLibJITDecl;
404 function jit_function_next (context: jit_context_t; prev: jit_function_t): jit_function_t; libraryLibJITDecl;
405 function jit_function_previous (context: jit_context_t; prev: jit_function_t): jit_function_t; libraryLibJITDecl;
406 function jit_function_get_entry (func: jit_function_t): jit_block_t; libraryLibJITDecl;
407 function jit_function_get_current (func: jit_function_t): jit_block_t; libraryLibJITDecl;
408 function jit_function_get_nested_parent (func: jit_function_t): jit_function_t; libraryLibJITDecl;
409 function jit_function_compile (func: jit_function_t): Integer; libraryLibJITDecl;
410 function jit_function_is_compiled (func: jit_function_t): Integer; libraryLibJITDecl;
411 procedure jit_function_set_recompilable (func: jit_function_t); libraryLibJITDecl;
412 procedure jit_function_clear_recompilable (func: jit_function_t); libraryLibJITDecl;
413 function jit_function_is_recompilable (func: jit_function_t): Integer; libraryLibJITDecl;
414 function jit_function_compile_entry (func: jit_function_t; entry_point: PPointer): Integer; libraryLibJITDecl;
415 procedure jit_function_setup_entry (func: jit_function_t; entry_point: Pointer); libraryLibJITDecl;
416 function jit_function_to_closure (func: jit_function_t): Pointer; libraryLibJITDecl;
417 function jit_function_from_closure (context: jit_context_t; closure: Pointer): jit_function_t; libraryLibJITDecl;
418 function jit_function_from_pc (context: jit_context_t; pc: Pointer; handler: PPointer): jit_function_t; libraryLibJITDecl;
419 function jit_function_to_vtable_pointer (func: jit_function_t): Pointer; libraryLibJITDecl;
420 function jit_function_from_vtable_pointer (context: jit_context_t; vtable_pointer: Pointer): jit_function_t; libraryLibJITDecl;
421 procedure jit_function_set_on_demand_compiler (func: jit_function_t; on_demand: jit_on_demand_func); libraryLibJITDecl;
422 function jit_function_get_on_demand_compiler (func: jit_function_t): jit_on_demand_func; libraryLibJITDecl;
423 function jit_function_apply (func: jit_function_t; args: PPointer; return_area: Pointer): Integer; libraryLibJITDecl;
424 function jit_function_apply_vararg (func: jit_function_t; signature: jit_type_t; args: PPointer; return_area: Pointer): Integer; libraryLibJITDecl;
425 procedure jit_function_set_optimization_level (func: jit_function_t; level: LongWord); libraryLibJITDecl;
426 function jit_function_get_optimization_level (func: jit_function_t): LongWord; libraryLibJITDecl;
427 function jit_function_get_max_optimization_level (): LongWord; libraryLibJITDecl;
428 function jit_function_reserve_label (func: jit_function_t): jit_label_t; libraryLibJITDecl;
429 function jit_function_labels_equal (func: jit_function_t; label_: jit_label_t; label2: jit_label_t): Integer; libraryLibJITDecl;
432 procedure jit_init (); libraryLibJITDecl;
434 function jit_uses_interpreter (): Integer; libraryLibJITDecl;
436 function jit_supports_threads (): Integer; libraryLibJITDecl;
438 function jit_supports_virtual_memory (): Integer; libraryLibJITDecl;
440 function jit_supports_closures (): Integer; libraryLibJITDecl;
442 function jit_get_closure_size (): LongWord; libraryLibJITDecl;
443 function jit_get_closure_alignment (): LongWord; libraryLibJITDecl;
444 function jit_get_trampoline_size (): LongWord; libraryLibJITDecl;
445 function jit_get_trampoline_alignment (): LongWord; libraryLibJITDecl;
448 (*
449 * Descriptor for an intrinsic function.
450 *)
451 type jit_intrinsic_descr_t = record
452 return_type: jit_type_t;
453 ptr_result_type: jit_type_t;
454 arg1_type: jit_type_t;
455 arg2_type: jit_type_t;
456 end;
457 type pjit_intrinsic_descr_t = ^jit_intrinsic_descr_t;
459 (*
460 * Structure for iterating over the instructions in a block.
461 * This should be treated as opaque.
462 *)
463 type jit_insn_iter_t = record
464 block: jit_block_t;
465 posn: Integer;
466 end;
467 type pjit_insn_iter_t = ^jit_insn_iter_t;
469 (*
470 * Flags for "jit_insn_call" and friends.
471 *)
472 const JIT_CALL_NOTHROW = (1 shl 0);
473 const JIT_CALL_NORETURN = (1 shl 1);
474 const JIT_CALL_TAIL = (1 shl 2);
476 function jit_insn_get_opcode (insn: jit_insn_t): Integer; libraryLibJITDecl;
477 function jit_insn_get_dest (insn: jit_insn_t): jit_value_t; libraryLibJITDecl;
478 function jit_insn_get_value1 (insn: jit_insn_t): jit_value_t; libraryLibJITDecl;
479 function jit_insn_get_value2 (insn: jit_insn_t): jit_value_t; libraryLibJITDecl;
480 function jit_insn_get_label (insn: jit_insn_t): jit_label_t; libraryLibJITDecl;
481 function jit_insn_get_function (insn: jit_insn_t): jit_function_t; libraryLibJITDecl;
482 function jit_insn_get_native (insn: jit_insn_t): Pointer; libraryLibJITDecl;
483 function jit_insn_get_name (insn: jit_insn_t): PAnsiChar; libraryLibJITDecl; // const
484 function jit_insn_get_signature (insn: jit_insn_t): jit_type_t; libraryLibJITDecl;
485 function jit_insn_dest_is_value (insn: jit_insn_t): Integer; libraryLibJITDecl;
487 function jit_insn_label (func: jit_function_t; label_: pjit_label_t): Integer; libraryLibJITDecl;
488 function jit_insn_label_tight (func: jit_function_t; label_: pjit_label_t): Integer; libraryLibJITDecl;
489 function jit_insn_new_block (func: jit_function_t): Integer; libraryLibJITDecl;
490 function jit_insn_load (func: jit_function_t; value: jit_value_t): jit_value_t; libraryLibJITDecl;
491 function jit_insn_dup (func: jit_function_t; value: jit_value_t): jit_value_t; libraryLibJITDecl;
492 function jit_insn_store (func: jit_function_t; dest: jit_value_t; value: jit_value_t): Integer; libraryLibJITDecl;
493 function jit_insn_load_relative (func: jit_function_t; value: jit_value_t; offset: jit_nint; type_: jit_type_t): jit_value_t; libraryLibJITDecl;
494 function jit_insn_store_relative (func: jit_function_t; dest: jit_value_t; offset: jit_nint; value: jit_value_t): Integer; libraryLibJITDecl;
495 function jit_insn_add_relative (func: jit_function_t; value: jit_value_t; offset: jit_nint): jit_value_t; libraryLibJITDecl;
496 function jit_insn_load_elem (func: jit_function_t; base_addr: jit_value_t; index: jit_value_t; elem_type: jit_type_t): jit_value_t; libraryLibJITDecl;
497 function jit_insn_load_elem_address (func: jit_function_t; base_addr: jit_value_t; index: jit_value_t; elem_type: jit_type_t): jit_value_t; libraryLibJITDecl;
498 function jit_insn_store_elem (func: jit_function_t; base_addr: jit_value_t; index: jit_value_t; value: jit_value_t): Integer; libraryLibJITDecl;
499 function jit_insn_check_null (func: jit_function_t; value: jit_value_t): Integer; libraryLibJITDecl;
500 function jit_insn_nop (func: jit_function_t): Integer; libraryLibJITDecl;
502 function jit_insn_add (func: jit_function_t; value1: jit_value_t; value2: jit_value_t): jit_value_t; libraryLibJITDecl;
503 function jit_insn_add_ovf (func: jit_function_t; value1: jit_value_t; value2: jit_value_t): jit_value_t; libraryLibJITDecl;
504 function jit_insn_sub (func: jit_function_t; value1: jit_value_t; value2: jit_value_t): jit_value_t; libraryLibJITDecl;
505 function jit_insn_sub_ovf (func: jit_function_t; value1: jit_value_t; value2: jit_value_t): jit_value_t; libraryLibJITDecl;
506 function jit_insn_mul (func: jit_function_t; value1: jit_value_t; value2: jit_value_t): jit_value_t; libraryLibJITDecl;
507 function jit_insn_mul_ovf (func: jit_function_t; value1: jit_value_t; value2: jit_value_t): jit_value_t; libraryLibJITDecl;
508 function jit_insn_div (func: jit_function_t; value1: jit_value_t; value2: jit_value_t): jit_value_t; libraryLibJITDecl;
509 function jit_insn_rem (func: jit_function_t; value1: jit_value_t; value2: jit_value_t): jit_value_t; libraryLibJITDecl;
510 function jit_insn_rem_ieee (func: jit_function_t; value1: jit_value_t; value2: jit_value_t): jit_value_t; libraryLibJITDecl;
511 function jit_insn_neg (func: jit_function_t; value1: jit_value_t): jit_value_t; libraryLibJITDecl;
512 function jit_insn_and (func: jit_function_t; value1: jit_value_t; value2: jit_value_t): jit_value_t; libraryLibJITDecl;
513 function jit_insn_or (func: jit_function_t; value1: jit_value_t; value2: jit_value_t): jit_value_t; libraryLibJITDecl;
514 function jit_insn_xor (func: jit_function_t; value1: jit_value_t; value2: jit_value_t): jit_value_t; libraryLibJITDecl;
515 function jit_insn_not (func: jit_function_t; value1: jit_value_t): jit_value_t; libraryLibJITDecl;
516 function jit_insn_shl (func: jit_function_t; value1: jit_value_t; value2: jit_value_t): jit_value_t; libraryLibJITDecl;
517 function jit_insn_shr (func: jit_function_t; value1: jit_value_t; value2: jit_value_t): jit_value_t; libraryLibJITDecl;
518 function jit_insn_ushr (func: jit_function_t; value1: jit_value_t; value2: jit_value_t): jit_value_t; libraryLibJITDecl;
519 function jit_insn_sshr (func: jit_function_t; value1: jit_value_t; value2: jit_value_t): jit_value_t; libraryLibJITDecl;
520 function jit_insn_eq (func: jit_function_t; value1: jit_value_t; value2: jit_value_t): jit_value_t; libraryLibJITDecl;
521 function jit_insn_ne (func: jit_function_t; value1: jit_value_t; value2: jit_value_t): jit_value_t; libraryLibJITDecl;
522 function jit_insn_lt (func: jit_function_t; value1: jit_value_t; value2: jit_value_t): jit_value_t; libraryLibJITDecl;
523 function jit_insn_le (func: jit_function_t; value1: jit_value_t; value2: jit_value_t): jit_value_t; libraryLibJITDecl;
524 function jit_insn_gt (func: jit_function_t; value1: jit_value_t; value2: jit_value_t): jit_value_t; libraryLibJITDecl;
525 function jit_insn_ge (func: jit_function_t; value1: jit_value_t; value2: jit_value_t): jit_value_t; libraryLibJITDecl;
526 function jit_insn_cmpl (func: jit_function_t; value1: jit_value_t; value2: jit_value_t): jit_value_t; libraryLibJITDecl;
527 function jit_insn_cmpg (func: jit_function_t; value1: jit_value_t; value2: jit_value_t): jit_value_t; libraryLibJITDecl;
528 function jit_insn_to_bool (func: jit_function_t; value1: jit_value_t): jit_value_t; libraryLibJITDecl;
529 function jit_insn_to_not_bool (func: jit_function_t; value1: jit_value_t): jit_value_t; libraryLibJITDecl;
530 function jit_insn_acos (func: jit_function_t; value1: jit_value_t): jit_value_t; libraryLibJITDecl;
531 function jit_insn_asin (func: jit_function_t; value1: jit_value_t): jit_value_t; libraryLibJITDecl;
532 function jit_insn_atan (func: jit_function_t; value1: jit_value_t): jit_value_t; libraryLibJITDecl;
533 function jit_insn_atan2 (func: jit_function_t; value1: jit_value_t; value2: jit_value_t): jit_value_t; libraryLibJITDecl;
534 function jit_insn_ceil (func: jit_function_t; value1: jit_value_t): jit_value_t; libraryLibJITDecl;
535 function jit_insn_cos (func: jit_function_t; value1: jit_value_t): jit_value_t; libraryLibJITDecl;
536 function jit_insn_cosh (func: jit_function_t; value1: jit_value_t): jit_value_t; libraryLibJITDecl;
537 function jit_insn_exp (func: jit_function_t; value1: jit_value_t): jit_value_t; libraryLibJITDecl;
538 function jit_insn_floor (func: jit_function_t; value1: jit_value_t): jit_value_t; libraryLibJITDecl;
539 function jit_insn_log (func: jit_function_t; value1: jit_value_t): jit_value_t; libraryLibJITDecl;
540 function jit_insn_log10 (func: jit_function_t; value1: jit_value_t): jit_value_t; libraryLibJITDecl;
541 function jit_insn_pow (func: jit_function_t; value1: jit_value_t; value2: jit_value_t): jit_value_t; libraryLibJITDecl;
542 function jit_insn_rint (func: jit_function_t; value1: jit_value_t): jit_value_t; libraryLibJITDecl;
543 function jit_insn_round (func: jit_function_t; value1: jit_value_t): jit_value_t; libraryLibJITDecl;
544 function jit_insn_sin (func: jit_function_t; value1: jit_value_t): jit_value_t; libraryLibJITDecl;
545 function jit_insn_sinh (func: jit_function_t; value1: jit_value_t): jit_value_t; libraryLibJITDecl;
546 function jit_insn_sqrt (func: jit_function_t; value1: jit_value_t): jit_value_t; libraryLibJITDecl;
547 function jit_insn_tan (func: jit_function_t; value1: jit_value_t): jit_value_t; libraryLibJITDecl;
548 function jit_insn_tanh (func: jit_function_t; value1: jit_value_t): jit_value_t; libraryLibJITDecl;
549 function jit_insn_trunc (func: jit_function_t; value1: jit_value_t): jit_value_t; libraryLibJITDecl;
550 function jit_insn_is_nan (func: jit_function_t; value1: jit_value_t): jit_value_t; libraryLibJITDecl;
551 function jit_insn_is_finite (func: jit_function_t; value1: jit_value_t): jit_value_t; libraryLibJITDecl;
552 function jit_insn_is_inf (func: jit_function_t; value1: jit_value_t): jit_value_t; libraryLibJITDecl;
553 function jit_insn_abs (func: jit_function_t; value1: jit_value_t): jit_value_t; libraryLibJITDecl;
554 function jit_insn_min (func: jit_function_t; value1: jit_value_t; value2: jit_value_t): jit_value_t; libraryLibJITDecl;
555 function jit_insn_max (func: jit_function_t; value1: jit_value_t; value2: jit_value_t): jit_value_t; libraryLibJITDecl;
556 function jit_insn_sign (func: jit_function_t; value1: jit_value_t): jit_value_t; libraryLibJITDecl;
557 function jit_insn_branch (func: jit_function_t; label_: pjit_label_t): Integer; libraryLibJITDecl;
558 function jit_insn_branch_if (func: jit_function_t; value: jit_value_t; label_: pjit_label_t): Integer; libraryLibJITDecl;
559 function jit_insn_branch_if_not (func: jit_function_t; value: jit_value_t; label_: pjit_label_t): Integer; libraryLibJITDecl;
560 function jit_insn_jump_table (func: jit_function_t; value: jit_value_t; labels: pjit_label_t; num_labels: LongWord): Integer; libraryLibJITDecl;
561 function jit_insn_address_of (func: jit_function_t; value1: jit_value_t): jit_value_t; libraryLibJITDecl;
562 function jit_insn_address_of_label (func: jit_function_t; label_: pjit_label_t): jit_value_t; libraryLibJITDecl;
563 function jit_insn_convert (func: jit_function_t; value: jit_value_t; type_: jit_type_t; overflow_check: Integer): jit_value_t; libraryLibJITDecl;
565 function jit_insn_call (func: jit_function_t; const name: PAnsiChar; jit_func: jit_function_t; signature: jit_type_t; args: pjit_value_t; num_args: LongWord; flags: Integer): jit_value_t; libraryLibJITDecl;
566 function jit_insn_call_indirect (func: jit_function_t; value: jit_value_t; signature: jit_type_t; args: pjit_value_t; num_args: LongWord; flags: Integer): jit_value_t; libraryLibJITDecl;
567 function jit_insn_call_indirect_vtable (func: jit_function_t; value: jit_value_t; signature: jit_type_t; args: pjit_value_t; num_args: LongWord; flags: Integer): jit_value_t; libraryLibJITDecl;
568 function jit_insn_call_native (func: jit_function_t; const name: PAnsiChar; native_func: Pointer; signature: jit_type_t; args: pjit_value_t; num_args: LongWord; flags: Integer): jit_value_t; libraryLibJITDecl;
569 function jit_insn_call_intrinsic (func: jit_function_t; const name: PAnsiChar; intrinsic_func: Pointer; const descriptor: pjit_intrinsic_descr_t; arg1: jit_value_t; arg2: jit_value_t): jit_value_t; libraryLibJITDecl;
570 function jit_insn_incoming_reg (func: jit_function_t; value: jit_value_t; reg: Integer): Integer; libraryLibJITDecl;
571 function jit_insn_incoming_frame_posn (func: jit_function_t; value: jit_value_t; frame_offset: jit_nint): Integer; libraryLibJITDecl;
572 function jit_insn_outgoing_reg (func: jit_function_t; value: jit_value_t; reg: Integer): Integer; libraryLibJITDecl;
573 function jit_insn_outgoing_frame_posn (func: jit_function_t; value: jit_value_t; frame_offset: jit_nint): Integer; libraryLibJITDecl;
574 function jit_insn_return_reg (func: jit_function_t; value: jit_value_t; reg: Integer): Integer; libraryLibJITDecl;
575 function jit_insn_setup_for_nested (func: jit_function_t; nested_level: Integer; reg: Integer): Integer; libraryLibJITDecl;
576 function jit_insn_flush_struct (func: jit_function_t; value: jit_value_t): Integer; libraryLibJITDecl;
577 function jit_insn_import (func: jit_function_t; value: jit_value_t): jit_value_t; libraryLibJITDecl;
578 function jit_insn_push (func: jit_function_t; value: jit_value_t): Integer; libraryLibJITDecl;
579 function jit_insn_push_ptr (func: jit_function_t; value: jit_value_t; type_: jit_type_t): Integer; libraryLibJITDecl;
580 function jit_insn_set_param (func: jit_function_t; value: jit_value_t; offset: jit_nint): Integer; libraryLibJITDecl;
581 function jit_insn_set_param_ptr (func: jit_function_t; value: jit_value_t; type_: jit_type_t; offset: jit_nint): Integer; libraryLibJITDecl;
582 function jit_insn_push_return_area_ptr (func: jit_function_t): Integer; libraryLibJITDecl;
583 function jit_insn_pop_stack (func: jit_function_t; num_items: jit_nint): Integer; libraryLibJITDecl;
584 function jit_insn_defer_pop_stack (func: jit_function_t; num_items: jit_nint): Integer; libraryLibJITDecl;
585 function jit_insn_flush_defer_pop (func: jit_function_t; num_items: jit_nint): Integer; libraryLibJITDecl;
586 function jit_insn_return (func: jit_function_t; value: jit_value_t): Integer; libraryLibJITDecl;
587 function jit_insn_return_ptr (func: jit_function_t; value: jit_value_t; type_: jit_type_t): Integer; libraryLibJITDecl;
588 function jit_insn_default_return (func: jit_function_t): Integer; libraryLibJITDecl;
589 function jit_insn_throw (func: jit_function_t; value: jit_value_t): Integer; libraryLibJITDecl;
590 function jit_insn_get_call_stack (func: jit_function_t): jit_value_t; libraryLibJITDecl;
592 function jit_insn_thrown_exception (func: jit_function_t): jit_value_t; libraryLibJITDecl;
593 function jit_insn_uses_catcher (func: jit_function_t): Integer; libraryLibJITDecl;
594 function jit_insn_start_catcher (func: jit_function_t): jit_value_t; libraryLibJITDecl;
595 function jit_insn_branch_if_pc_not_in_range (func: jit_function_t; start_label: jit_label_t; end_label: jit_label_t; label_: pjit_label_t): Integer; libraryLibJITDecl;
596 function jit_insn_rethrow_unhandled (func: jit_function_t): Integer; libraryLibJITDecl;
597 function jit_insn_start_finally (func: jit_function_t; finally_label: pjit_label_t): Integer; libraryLibJITDecl;
598 function jit_insn_return_from_finally (func: jit_function_t): Integer; libraryLibJITDecl;
599 function jit_insn_call_finally (func: jit_function_t; finally_label: pjit_label_t): Integer; libraryLibJITDecl;
600 function jit_insn_start_filter (func: jit_function_t; label_: pjit_label_t; type_: jit_type_t): jit_value_t; libraryLibJITDecl;
601 function jit_insn_return_from_filter (func: jit_function_t; value: jit_value_t): Integer; libraryLibJITDecl;
602 function jit_insn_call_filter (func: jit_function_t; label_: pjit_label_t; value: jit_value_t; type_: jit_type_t): jit_value_t; libraryLibJITDecl;
604 function jit_insn_memcpy (func: jit_function_t; dest: jit_value_t; src: jit_value_t; size: jit_value_t): Integer; libraryLibJITDecl;
605 function jit_insn_memmove (func: jit_function_t; dest: jit_value_t; src: jit_value_t; size: jit_value_t): Integer; libraryLibJITDecl;
606 function jit_insn_memset (func: jit_function_t; dest: jit_value_t; value: jit_value_t; size: jit_value_t): Integer; libraryLibJITDecl;
607 function jit_insn_alloca (func: jit_function_t; size: jit_value_t): jit_value_t; libraryLibJITDecl;
609 function jit_insn_move_blocks_to_end (func: jit_function_t; from_label: jit_label_t; to_label: jit_label_t): Integer; libraryLibJITDecl;
610 function jit_insn_move_blocks_to_start (func: jit_function_t; from_label: jit_label_t; to_label: jit_label_t): Integer; libraryLibJITDecl;
612 function jit_insn_mark_offset (func: jit_function_t; offset: jit_int): Integer; libraryLibJITDecl;
613 function jit_insn_mark_breakpoint (func: jit_function_t; data1: jit_nint; data2: jit_nint): Integer; libraryLibJITDecl;
614 function jit_insn_mark_breakpoint_variable (func: jit_function_t; data1: jit_value_t; data2: jit_value_t): Integer; libraryLibJITDecl;
616 procedure jit_insn_iter_init (iter: pjit_insn_iter_t; block: jit_block_t); libraryLibJITDecl;
617 procedure jit_insn_iter_init_last (iter: pjit_insn_iter_t; block: jit_block_t); libraryLibJITDecl;
618 function jit_insn_iter_next (iter: pjit_insn_iter_t): jit_insn_t; libraryLibJITDecl;
619 function jit_insn_iter_previous (iter: pjit_insn_iter_t): jit_insn_t; libraryLibJITDecl;
622 (*
623 * Perform operations on signed 32-bit integers.
624 *)
625 function jit_int_add (value1: jit_int; value2: jit_int): jit_int; libraryLibJITDecl;
626 function jit_int_sub (value1: jit_int; value2: jit_int): jit_int; libraryLibJITDecl;
627 function jit_int_mul (value1: jit_int; value2: jit_int): jit_int; libraryLibJITDecl;
628 function jit_int_div (result_: pjit_int; value1: jit_int; value2: jit_int): jit_int; libraryLibJITDecl;
629 function jit_int_rem (result_: pjit_int; value1: jit_int; value2: jit_int): jit_int; libraryLibJITDecl;
630 function jit_int_add_ovf (result_: pjit_int; value1: jit_int; value2: jit_int): jit_int; libraryLibJITDecl;
631 function jit_int_sub_ovf (result_: pjit_int; value1: jit_int; value2: jit_int): jit_int; libraryLibJITDecl;
632 function jit_int_mul_ovf (result_: pjit_int; value1: jit_int; value2: jit_int): jit_int; libraryLibJITDecl;
633 function jit_int_neg (value1: jit_int): jit_int; libraryLibJITDecl;
634 function jit_int_and (value1: jit_int; value2: jit_int): jit_int; libraryLibJITDecl;
635 function jit_int_or (value1: jit_int; value2: jit_int): jit_int; libraryLibJITDecl;
636 function jit_int_xor (value1: jit_int; value2: jit_int): jit_int; libraryLibJITDecl;
637 function jit_int_not (value1: jit_int): jit_int; libraryLibJITDecl;
638 function jit_int_shl (value1: jit_int; value2: jit_uint): jit_int; libraryLibJITDecl;
639 function jit_int_shr (value1: jit_int; value2: jit_uint): jit_int; libraryLibJITDecl;
640 function jit_int_eq (value1: jit_int; value2: jit_int): jit_int; libraryLibJITDecl;
641 function jit_int_ne (value1: jit_int; value2: jit_int): jit_int; libraryLibJITDecl;
642 function jit_int_lt (value1: jit_int; value2: jit_int): jit_int; libraryLibJITDecl;
643 function jit_int_le (value1: jit_int; value2: jit_int): jit_int; libraryLibJITDecl;
644 function jit_int_gt (value1: jit_int; value2: jit_int): jit_int; libraryLibJITDecl;
645 function jit_int_ge (value1: jit_int; value2: jit_int): jit_int; libraryLibJITDecl;
646 function jit_int_cmp (value1: jit_int; value2: jit_int): jit_int; libraryLibJITDecl;
647 function jit_int_abs (value1: jit_int): jit_int; libraryLibJITDecl;
648 function jit_int_min (value1: jit_int; value2: jit_int): jit_int; libraryLibJITDecl;
649 function jit_int_max (value1: jit_int; value2: jit_int): jit_int; libraryLibJITDecl;
650 function jit_int_sign (value1: jit_int): jit_int; libraryLibJITDecl;
652 (*
653 * Perform operations on unsigned 32-bit integers.
654 *)
655 function jit_uint_add (value1: jit_uint; value2: jit_uint): jit_uint; libraryLibJITDecl;
656 function jit_uint_sub (value1: jit_uint; value2: jit_uint): jit_uint; libraryLibJITDecl;
657 function jit_uint_mul (value1: jit_uint; value2: jit_uint): jit_uint; libraryLibJITDecl;
658 function jit_uint_div (result_: pjit_uint; value1: jit_uint; value2: jit_uint): jit_int; libraryLibJITDecl;
659 function jit_uint_rem (result_: pjit_uint; value1: jit_uint; value2: jit_uint): jit_int; libraryLibJITDecl;
660 function jit_uint_add_ovf (result_: pjit_uint; value1: jit_uint; value2: jit_uint): jit_int; libraryLibJITDecl;
661 function jit_uint_sub_ovf (result_: pjit_uint; value1: jit_uint; value2: jit_uint): jit_int; libraryLibJITDecl;
662 function jit_uint_mul_ovf (result_: pjit_uint; value1: jit_uint; value2: jit_uint): jit_int; libraryLibJITDecl;
663 function jit_uint_neg (value1: jit_uint): jit_uint; libraryLibJITDecl;
664 function jit_uint_and (value1: jit_uint; value2: jit_uint): jit_uint; libraryLibJITDecl;
665 function jit_uint_or (value1: jit_uint; value2: jit_uint): jit_uint; libraryLibJITDecl;
666 function jit_uint_xor (value1: jit_uint; value2: jit_uint): jit_uint; libraryLibJITDecl;
667 function jit_uint_not (value1: jit_uint): jit_uint; libraryLibJITDecl;
668 function jit_uint_shl (value1: jit_uint; value2: jit_uint): jit_uint; libraryLibJITDecl;
669 function jit_uint_shr (value1: jit_uint; value2: jit_uint): jit_uint; libraryLibJITDecl;
670 function jit_uint_eq (value1: jit_uint; value2: jit_uint): jit_int; libraryLibJITDecl;
671 function jit_uint_ne (value1: jit_uint; value2: jit_uint): jit_int; libraryLibJITDecl;
672 function jit_uint_lt (value1: jit_uint; value2: jit_uint): jit_int; libraryLibJITDecl;
673 function jit_uint_le (value1: jit_uint; value2: jit_uint): jit_int; libraryLibJITDecl;
674 function jit_uint_gt (value1: jit_uint; value2: jit_uint): jit_int; libraryLibJITDecl;
675 function jit_uint_ge (value1: jit_uint; value2: jit_uint): jit_int; libraryLibJITDecl;
676 function jit_uint_cmp (value1: jit_uint; value2: jit_uint): jit_int; libraryLibJITDecl;
677 function jit_uint_min (value1: jit_uint; value2: jit_uint): jit_uint; libraryLibJITDecl;
678 function jit_uint_max (value1: jit_uint; value2: jit_uint): jit_uint; libraryLibJITDecl;
680 (*
681 * Perform operations on signed 64-bit integers.
682 *)
683 function jit_long_add (value1: jit_long; value2: jit_long): jit_long; libraryLibJITDecl;
684 function jit_long_sub (value1: jit_long; value2: jit_long): jit_long; libraryLibJITDecl;
685 function jit_long_mul (value1: jit_long; value2: jit_long): jit_long; libraryLibJITDecl;
686 function jit_long_div (result_: pjit_long; value1: jit_long; value2: jit_long): jit_int; libraryLibJITDecl;
687 function jit_long_rem (result_: pjit_long; value1: jit_long; value2: jit_long): jit_int; libraryLibJITDecl;
688 function jit_long_add_ovf (result_: pjit_long; value1: jit_long; value2: jit_long): jit_int; libraryLibJITDecl;
689 function jit_long_sub_ovf (result_: pjit_long; value1: jit_long; value2: jit_long): jit_int; libraryLibJITDecl;
690 function jit_long_mul_ovf (result_: pjit_long; value1: jit_long; value2: jit_long): jit_int; libraryLibJITDecl;
691 function jit_long_neg (value1: jit_long): jit_long; libraryLibJITDecl;
692 function jit_long_and (value1: jit_long; value2: jit_long): jit_long; libraryLibJITDecl;
693 function jit_long_or (value1: jit_long; value2: jit_long): jit_long; libraryLibJITDecl;
694 function jit_long_xor (value1: jit_long; value2: jit_long): jit_long; libraryLibJITDecl;
695 function jit_long_not (value1: jit_long): jit_long; libraryLibJITDecl;
696 function jit_long_shl (value1: jit_long; value2: jit_uint): jit_long; libraryLibJITDecl;
697 function jit_long_shr (value1: jit_long; value2: jit_uint): jit_long; libraryLibJITDecl;
698 function jit_long_eq (value1: jit_long; value2: jit_long): jit_int; libraryLibJITDecl;
699 function jit_long_ne (value1: jit_long; value2: jit_long): jit_int; libraryLibJITDecl;
700 function jit_long_lt (value1: jit_long; value2: jit_long): jit_int; libraryLibJITDecl;
701 function jit_long_le (value1: jit_long; value2: jit_long): jit_int; libraryLibJITDecl;
702 function jit_long_gt (value1: jit_long; value2: jit_long): jit_int; libraryLibJITDecl;
703 function jit_long_ge (value1: jit_long; value2: jit_long): jit_int; libraryLibJITDecl;
704 function jit_long_cmp (value1: jit_long; value2: jit_long): jit_int; libraryLibJITDecl;
705 function jit_long_abs (value1: jit_long): jit_long; libraryLibJITDecl;
706 function jit_long_min (value1: jit_long; value2: jit_long): jit_long; libraryLibJITDecl;
707 function jit_long_max (value1: jit_long; value2: jit_long): jit_long; libraryLibJITDecl;
708 function jit_long_sign (value1: jit_long): jit_int; libraryLibJITDecl;
710 (*
711 * Perform operations on unsigned 64-bit integers.
712 *)
713 function jit_ulong_add (value1: jit_ulong; value2: jit_ulong): jit_ulong; libraryLibJITDecl;
714 function jit_ulong_sub (value1: jit_ulong; value2: jit_ulong): jit_ulong; libraryLibJITDecl;
715 function jit_ulong_mul (value1: jit_ulong; value2: jit_ulong): jit_ulong; libraryLibJITDecl;
716 function jit_ulong_div (result_: pjit_ulong; value1: jit_ulong; value2: jit_ulong): jit_int; libraryLibJITDecl;
717 function jit_ulong_rem (result_: pjit_ulong; value1: jit_ulong; value2: jit_ulong): jit_int; libraryLibJITDecl;
718 function jit_ulong_add_ovf (result_: pjit_ulong; value1: jit_ulong; value2: jit_ulong): jit_int; libraryLibJITDecl;
719 function jit_ulong_sub_ovf (result_: pjit_ulong; value1: jit_ulong; value2: jit_ulong): jit_int; libraryLibJITDecl;
720 function jit_ulong_mul_ovf (result_: pjit_ulong; value1: jit_ulong; value2: jit_ulong): jit_int; libraryLibJITDecl;
721 function jit_ulong_neg (value1: jit_ulong): jit_ulong; libraryLibJITDecl;
722 function jit_ulong_and (value1: jit_ulong; value2: jit_ulong): jit_ulong; libraryLibJITDecl;
723 function jit_ulong_or (value1: jit_ulong; value2: jit_ulong): jit_ulong; libraryLibJITDecl;
724 function jit_ulong_xor (value1: jit_ulong; value2: jit_ulong): jit_ulong; libraryLibJITDecl;
725 function jit_ulong_not (value1: jit_ulong): jit_ulong; libraryLibJITDecl;
726 function jit_ulong_shl (value1: jit_ulong; value2: jit_uint): jit_ulong; libraryLibJITDecl;
727 function jit_ulong_shr (value1: jit_ulong; value2: jit_uint): jit_ulong; libraryLibJITDecl;
728 function jit_ulong_eq (value1: jit_ulong; value2: jit_ulong): jit_int; libraryLibJITDecl;
729 function jit_ulong_ne (value1: jit_ulong; value2: jit_ulong): jit_int; libraryLibJITDecl;
730 function jit_ulong_lt (value1: jit_ulong; value2: jit_ulong): jit_int; libraryLibJITDecl;
731 function jit_ulong_le (value1: jit_ulong; value2: jit_ulong): jit_int; libraryLibJITDecl;
732 function jit_ulong_gt (value1: jit_ulong; value2: jit_ulong): jit_int; libraryLibJITDecl;
733 function jit_ulong_ge (value1: jit_ulong; value2: jit_ulong): jit_int; libraryLibJITDecl;
734 function jit_ulong_cmp (value1: jit_ulong; value2: jit_ulong): jit_int; libraryLibJITDecl;
735 function jit_ulong_min (value1: jit_ulong; value2: jit_ulong): jit_ulong; libraryLibJITDecl;
736 function jit_ulong_max (value1: jit_ulong; value2: jit_ulong): jit_ulong; libraryLibJITDecl;
738 (*
739 * Perform operations on 32-bit floating-point values.
740 *)
741 function jit_float32_add (value1: jit_float32; value2: jit_float32): jit_float32; libraryLibJITDecl;
742 function jit_float32_sub (value1: jit_float32; value2: jit_float32): jit_float32; libraryLibJITDecl;
743 function jit_float32_mul (value1: jit_float32; value2: jit_float32): jit_float32; libraryLibJITDecl;
744 function jit_float32_div (value1: jit_float32; value2: jit_float32): jit_float32; libraryLibJITDecl;
745 function jit_float32_rem (value1: jit_float32; value2: jit_float32): jit_float32; libraryLibJITDecl;
746 function jit_float32_ieee_rem (value1: jit_float32; value2: jit_float32): jit_float32; libraryLibJITDecl;
747 function jit_float32_neg (value1: jit_float32): jit_float32; libraryLibJITDecl;
748 function jit_float32_eq (value1: jit_float32; value2: jit_float32): jit_int; libraryLibJITDecl;
749 function jit_float32_ne (value1: jit_float32; value2: jit_float32): jit_int; libraryLibJITDecl;
750 function jit_float32_lt (value1: jit_float32; value2: jit_float32): jit_int; libraryLibJITDecl;
751 function jit_float32_le (value1: jit_float32; value2: jit_float32): jit_int; libraryLibJITDecl;
752 function jit_float32_gt (value1: jit_float32; value2: jit_float32): jit_int; libraryLibJITDecl;
753 function jit_float32_ge (value1: jit_float32; value2: jit_float32): jit_int; libraryLibJITDecl;
754 function jit_float32_cmpl (value1: jit_float32; value2: jit_float32): jit_int; libraryLibJITDecl;
755 function jit_float32_cmpg (value1: jit_float32; value2: jit_float32): jit_int; libraryLibJITDecl;
756 function jit_float32_acos (value1: jit_float32): jit_float32; libraryLibJITDecl;
757 function jit_float32_asin (value1: jit_float32): jit_float32; libraryLibJITDecl;
758 function jit_float32_atan (value1: jit_float32): jit_float32; libraryLibJITDecl;
759 function jit_float32_atan2 (value1: jit_float32; value2: jit_float32): jit_float32; libraryLibJITDecl;
760 function jit_float32_ceil (value1: jit_float32): jit_float32; libraryLibJITDecl;
761 function jit_float32_cos (value1: jit_float32): jit_float32; libraryLibJITDecl;
762 function jit_float32_cosh (value1: jit_float32): jit_float32; libraryLibJITDecl;
763 function jit_float32_exp (value1: jit_float32): jit_float32; libraryLibJITDecl;
764 function jit_float32_floor (value1: jit_float32): jit_float32; libraryLibJITDecl;
765 function jit_float32_log (value1: jit_float32): jit_float32; libraryLibJITDecl;
766 function jit_float32_log10 (value1: jit_float32): jit_float32; libraryLibJITDecl;
767 function jit_float32_pow (value1: jit_float32; value2: jit_float32): jit_float32; libraryLibJITDecl;
768 function jit_float32_rint (value1: jit_float32): jit_float32; libraryLibJITDecl;
769 function jit_float32_round (value1: jit_float32): jit_float32; libraryLibJITDecl;
770 function jit_float32_sin (value1: jit_float32): jit_float32; libraryLibJITDecl;
771 function jit_float32_sinh (value1: jit_float32): jit_float32; libraryLibJITDecl;
772 function jit_float32_sqrt (value1: jit_float32): jit_float32; libraryLibJITDecl;
773 function jit_float32_tan (value1: jit_float32): jit_float32; libraryLibJITDecl;
774 function jit_float32_tanh (value1: jit_float32): jit_float32; libraryLibJITDecl;
775 function jit_float32_trunc (value1: jit_float32): jit_float32; libraryLibJITDecl;
776 function jit_float32_is_finite (value: jit_float32): jit_int; libraryLibJITDecl;
777 function jit_float32_is_nan (value: jit_float32): jit_int; libraryLibJITDecl;
778 function jit_float32_is_inf (value: jit_float32): jit_int; libraryLibJITDecl;
779 function jit_float32_abs (value1: jit_float32): jit_float32; libraryLibJITDecl;
780 function jit_float32_min (value1: jit_float32; value2: jit_float32): jit_float32; libraryLibJITDecl;
781 function jit_float32_max (value1: jit_float32; value2: jit_float32): jit_float32; libraryLibJITDecl;
782 function jit_float32_sign (value1: jit_float32): jit_int; libraryLibJITDecl;
784 (*
785 * Perform operations on 64-bit floating-point values.
786 *)
787 function jit_float64_add (value1: jit_float64; value2: jit_float64): jit_float64; libraryLibJITDecl;
788 function jit_float64_sub (value1: jit_float64; value2: jit_float64): jit_float64; libraryLibJITDecl;
789 function jit_float64_mul (value1: jit_float64; value2: jit_float64): jit_float64; libraryLibJITDecl;
790 function jit_float64_div (value1: jit_float64; value2: jit_float64): jit_float64; libraryLibJITDecl;
791 function jit_float64_rem (value1: jit_float64; value2: jit_float64): jit_float64; libraryLibJITDecl;
792 function jit_float64_ieee_rem (value1: jit_float64; value2: jit_float64): jit_float64; libraryLibJITDecl;
793 function jit_float64_neg (value1: jit_float64): jit_float64; libraryLibJITDecl;
794 function jit_float64_eq (value1: jit_float64; value2: jit_float64): jit_int; libraryLibJITDecl;
795 function jit_float64_ne (value1: jit_float64; value2: jit_float64): jit_int; libraryLibJITDecl;
796 function jit_float64_lt (value1: jit_float64; value2: jit_float64): jit_int; libraryLibJITDecl;
797 function jit_float64_le (value1: jit_float64; value2: jit_float64): jit_int; libraryLibJITDecl;
798 function jit_float64_gt (value1: jit_float64; value2: jit_float64): jit_int; libraryLibJITDecl;
799 function jit_float64_ge (value1: jit_float64; value2: jit_float64): jit_int; libraryLibJITDecl;
800 function jit_float64_cmpl (value1: jit_float64; value2: jit_float64): jit_int; libraryLibJITDecl;
801 function jit_float64_cmpg (value1: jit_float64; value2: jit_float64): jit_int; libraryLibJITDecl;
802 function jit_float64_acos (value1: jit_float64): jit_float64; libraryLibJITDecl;
803 function jit_float64_asin (value1: jit_float64): jit_float64; libraryLibJITDecl;
804 function jit_float64_atan (value1: jit_float64): jit_float64; libraryLibJITDecl;
805 function jit_float64_atan2 (value1: jit_float64; value2: jit_float64): jit_float64; libraryLibJITDecl;
806 function jit_float64_ceil (value1: jit_float64): jit_float64; libraryLibJITDecl;
807 function jit_float64_cos (value1: jit_float64): jit_float64; libraryLibJITDecl;
808 function jit_float64_cosh (value1: jit_float64): jit_float64; libraryLibJITDecl;
809 function jit_float64_exp (value1: jit_float64): jit_float64; libraryLibJITDecl;
810 function jit_float64_floor (value1: jit_float64): jit_float64; libraryLibJITDecl;
811 function jit_float64_log (value1: jit_float64): jit_float64; libraryLibJITDecl;
812 function jit_float64_log10 (value1: jit_float64): jit_float64; libraryLibJITDecl;
813 function jit_float64_pow (value1: jit_float64; value2: jit_float64): jit_float64; libraryLibJITDecl;
814 function jit_float64_rint (value1: jit_float64): jit_float64; libraryLibJITDecl;
815 function jit_float64_round (value1: jit_float64): jit_float64; libraryLibJITDecl;
816 function jit_float64_sin (value1: jit_float64): jit_float64; libraryLibJITDecl;
817 function jit_float64_sinh (value1: jit_float64): jit_float64; libraryLibJITDecl;
818 function jit_float64_sqrt (value1: jit_float64): jit_float64; libraryLibJITDecl;
819 function jit_float64_tan (value1: jit_float64): jit_float64; libraryLibJITDecl;
820 function jit_float64_tanh (value1: jit_float64): jit_float64; libraryLibJITDecl;
821 function jit_float64_trunc (value1: jit_float64): jit_float64; libraryLibJITDecl;
822 function jit_float64_is_finite (value: jit_float64): jit_int; libraryLibJITDecl;
823 function jit_float64_is_nan (value: jit_float64): jit_int; libraryLibJITDecl;
824 function jit_float64_is_inf (value: jit_float64): jit_int; libraryLibJITDecl;
825 function jit_float64_abs (value1: jit_float64): jit_float64; libraryLibJITDecl;
826 function jit_float64_min (value1: jit_float64; value2: jit_float64): jit_float64; libraryLibJITDecl;
827 function jit_float64_max (value1: jit_float64; value2: jit_float64): jit_float64; libraryLibJITDecl;
828 function jit_float64_sign (value1: jit_float64): jit_int; libraryLibJITDecl;
830 (*
831 * Perform operations on native floating-point values.
832 *)
833 function jit_nfloat_add (value1: jit_nfloat; value2: jit_nfloat): jit_nfloat; libraryLibJITDecl;
834 function jit_nfloat_sub (value1: jit_nfloat; value2: jit_nfloat): jit_nfloat; libraryLibJITDecl;
835 function jit_nfloat_mul (value1: jit_nfloat; value2: jit_nfloat): jit_nfloat; libraryLibJITDecl;
836 function jit_nfloat_div (value1: jit_nfloat; value2: jit_nfloat): jit_nfloat; libraryLibJITDecl;
837 function jit_nfloat_rem (value1: jit_nfloat; value2: jit_nfloat): jit_nfloat; libraryLibJITDecl;
838 function jit_nfloat_ieee_rem (value1: jit_nfloat; value2: jit_nfloat): jit_nfloat; libraryLibJITDecl;
839 function jit_nfloat_neg (value1: jit_nfloat): jit_nfloat; libraryLibJITDecl;
840 function jit_nfloat_eq (value1: jit_nfloat; value2: jit_nfloat): jit_int; libraryLibJITDecl;
841 function jit_nfloat_ne (value1: jit_nfloat; value2: jit_nfloat): jit_int; libraryLibJITDecl;
842 function jit_nfloat_lt (value1: jit_nfloat; value2: jit_nfloat): jit_int; libraryLibJITDecl;
843 function jit_nfloat_le (value1: jit_nfloat; value2: jit_nfloat): jit_int; libraryLibJITDecl;
844 function jit_nfloat_gt (value1: jit_nfloat; value2: jit_nfloat): jit_int; libraryLibJITDecl;
845 function jit_nfloat_ge (value1: jit_nfloat; value2: jit_nfloat): jit_int; libraryLibJITDecl;
846 function jit_nfloat_cmpl (value1: jit_nfloat; value2: jit_nfloat): jit_int; libraryLibJITDecl;
847 function jit_nfloat_cmpg (value1: jit_nfloat; value2: jit_nfloat): jit_int; libraryLibJITDecl;
848 function jit_nfloat_acos (value1: jit_nfloat): jit_nfloat; libraryLibJITDecl;
849 function jit_nfloat_asin (value1: jit_nfloat): jit_nfloat; libraryLibJITDecl;
850 function jit_nfloat_atan (value1: jit_nfloat): jit_nfloat; libraryLibJITDecl;
851 function jit_nfloat_atan2 (value1: jit_nfloat; value2: jit_nfloat): jit_nfloat; libraryLibJITDecl;
852 function jit_nfloat_ceil (value1: jit_nfloat): jit_nfloat; libraryLibJITDecl;
853 function jit_nfloat_cos (value1: jit_nfloat): jit_nfloat; libraryLibJITDecl;
854 function jit_nfloat_cosh (value1: jit_nfloat): jit_nfloat; libraryLibJITDecl;
855 function jit_nfloat_exp (value1: jit_nfloat): jit_nfloat; libraryLibJITDecl;
856 function jit_nfloat_floor (value1: jit_nfloat): jit_nfloat; libraryLibJITDecl;
857 function jit_nfloat_log (value1: jit_nfloat): jit_nfloat; libraryLibJITDecl;
858 function jit_nfloat_log10 (value1: jit_nfloat): jit_nfloat; libraryLibJITDecl;
859 function jit_nfloat_pow (value1: jit_nfloat; value2: jit_nfloat): jit_nfloat; libraryLibJITDecl;
860 function jit_nfloat_rint (value1: jit_nfloat): jit_nfloat; libraryLibJITDecl;
861 function jit_nfloat_round (value1: jit_nfloat): jit_nfloat; libraryLibJITDecl;
862 function jit_nfloat_sin (value1: jit_nfloat): jit_nfloat; libraryLibJITDecl;
863 function jit_nfloat_sinh (value1: jit_nfloat): jit_nfloat; libraryLibJITDecl;
864 function jit_nfloat_sqrt (value1: jit_nfloat): jit_nfloat; libraryLibJITDecl;
865 function jit_nfloat_tan (value1: jit_nfloat): jit_nfloat; libraryLibJITDecl;
866 function jit_nfloat_tanh (value1: jit_nfloat): jit_nfloat; libraryLibJITDecl;
867 function jit_nfloat_trunc (value1: jit_nfloat): jit_nfloat; libraryLibJITDecl;
868 function jit_nfloat_is_finite (value: jit_nfloat): jit_int; libraryLibJITDecl;
869 function jit_nfloat_is_nan (value: jit_nfloat): jit_int; libraryLibJITDecl;
870 function jit_nfloat_is_inf (value: jit_nfloat): jit_int; libraryLibJITDecl;
871 function jit_nfloat_abs (value1: jit_nfloat): jit_nfloat; libraryLibJITDecl;
872 function jit_nfloat_min (value1: jit_nfloat; value2: jit_nfloat): jit_nfloat; libraryLibJITDecl;
873 function jit_nfloat_max (value1: jit_nfloat; value2: jit_nfloat): jit_nfloat; libraryLibJITDecl;
874 function jit_nfloat_sign (value1: jit_nfloat): jit_int; libraryLibJITDecl;
876 (*
877 * Convert between integer types.
878 *)
879 function jit_int_to_sbyte (value: jit_int): jit_int; libraryLibJITDecl;
880 function jit_int_to_ubyte (value: jit_int): jit_int; libraryLibJITDecl;
881 function jit_int_to_short (value: jit_int): jit_int; libraryLibJITDecl;
882 function jit_int_to_ushort (value: jit_int): jit_int; libraryLibJITDecl;
883 function jit_int_to_int (value: jit_int): jit_int; libraryLibJITDecl;
884 function jit_int_to_uint (value: jit_int): jit_uint; libraryLibJITDecl;
885 function jit_int_to_long (value: jit_int): jit_long; libraryLibJITDecl;
886 function jit_int_to_ulong (value: jit_int): jit_ulong; libraryLibJITDecl;
887 function jit_uint_to_int (value: jit_uint): jit_int; libraryLibJITDecl;
888 function jit_uint_to_uint (value: jit_uint): jit_uint; libraryLibJITDecl;
889 function jit_uint_to_long (value: jit_uint): jit_long; libraryLibJITDecl;
890 function jit_uint_to_ulong (value: jit_uint): jit_ulong; libraryLibJITDecl;
891 function jit_long_to_int (value: jit_long): jit_int; libraryLibJITDecl;
892 function jit_long_to_uint (value: jit_long): jit_uint; libraryLibJITDecl;
893 function jit_long_to_long (value: jit_long): jit_long; libraryLibJITDecl;
894 function jit_long_to_ulong (value: jit_long): jit_ulong; libraryLibJITDecl;
895 function jit_ulong_to_int (value: jit_ulong): jit_int; libraryLibJITDecl;
896 function jit_ulong_to_uint (value: jit_ulong): jit_uint; libraryLibJITDecl;
897 function jit_ulong_to_long (value: jit_ulong): jit_long; libraryLibJITDecl;
898 function jit_ulong_to_ulong (value: jit_ulong): jit_ulong; libraryLibJITDecl;
900 (*
901 * Convert between integer types with overflow detection.
902 *)
903 function jit_int_to_sbyte_ovf (result_: pjit_int; value: jit_int): jit_int; libraryLibJITDecl;
904 function jit_int_to_ubyte_ovf (result_: pjit_int; value: jit_int): jit_int; libraryLibJITDecl;
905 function jit_int_to_short_ovf (result_: pjit_int; value: jit_int): jit_int; libraryLibJITDecl;
906 function jit_int_to_ushort_ovf (result_: pjit_int; value: jit_int): jit_int; libraryLibJITDecl;
907 function jit_int_to_int_ovf (result_: pjit_int; value: jit_int): jit_int; libraryLibJITDecl;
908 function jit_int_to_uint_ovf (result_: pjit_uint; value: jit_int): jit_int; libraryLibJITDecl;
909 function jit_int_to_long_ovf (result_: pjit_long; value: jit_int): jit_int; libraryLibJITDecl;
910 function jit_int_to_ulong_ovf (result_: pjit_ulong; value: jit_int): jit_int; libraryLibJITDecl;
911 function jit_uint_to_int_ovf (result_: pjit_int; value: jit_uint): jit_int; libraryLibJITDecl;
912 function jit_uint_to_uint_ovf (result_: pjit_uint; value: jit_uint): jit_int; libraryLibJITDecl;
913 function jit_uint_to_long_ovf (result_: pjit_long; value: jit_uint): jit_int; libraryLibJITDecl;
914 function jit_uint_to_ulong_ovf (result_: pjit_ulong; value: jit_uint): jit_int; libraryLibJITDecl;
915 function jit_long_to_int_ovf (result_: pjit_int; value: jit_long): jit_int; libraryLibJITDecl;
916 function jit_long_to_uint_ovf (result_: pjit_uint; value: jit_long): jit_int; libraryLibJITDecl;
917 function jit_long_to_long_ovf (result_: pjit_long; value: jit_long): jit_int; libraryLibJITDecl;
918 function jit_long_to_ulong_ovf (result_: pjit_ulong; value: jit_long): jit_int; libraryLibJITDecl;
919 function jit_ulong_to_int_ovf (result_: pjit_int; value: jit_ulong): jit_int; libraryLibJITDecl;
920 function jit_ulong_to_uint_ovf (result_: pjit_uint; value: jit_ulong): jit_int; libraryLibJITDecl;
921 function jit_ulong_to_long_ovf (result_: pjit_long; value: jit_ulong): jit_int; libraryLibJITDecl;
922 function jit_ulong_to_ulong_ovf (result_: pjit_ulong; value: jit_ulong): jit_int; libraryLibJITDecl;
924 (*
925 * Convert a 32-bit floating-point value into various integer types.
926 *)
927 function jit_float32_to_int (value: jit_float32): jit_int; libraryLibJITDecl;
928 function jit_float32_to_uint (value: jit_float32): jit_uint; libraryLibJITDecl;
929 function jit_float32_to_long (value: jit_float32): jit_long; libraryLibJITDecl;
930 function jit_float32_to_ulong (value: jit_float32): jit_ulong; libraryLibJITDecl;
932 (*
933 * Convert a 32-bit floating-point value into various integer types,
934 * with overflow detection.
935 *)
936 function jit_float32_to_int_ovf (result_: pjit_int; value: jit_float32): jit_int; libraryLibJITDecl;
937 function jit_float32_to_uint_ovf (result_: pjit_uint; value: jit_float32): jit_int; libraryLibJITDecl;
938 function jit_float32_to_long_ovf (result_: pjit_long; value: jit_float32): jit_int; libraryLibJITDecl;
939 function jit_float32_to_ulong_ovf (result_: pjit_ulong; value: jit_float32): jit_int; libraryLibJITDecl;
941 (*
942 * Convert a 64-bit floating-point value into various integer types.
943 *)
944 function jit_float64_to_int (value: jit_float64): jit_int; libraryLibJITDecl;
945 function jit_float64_to_uint (value: jit_float64): jit_uint; libraryLibJITDecl;
946 function jit_float64_to_long (value: jit_float64): jit_long; libraryLibJITDecl;
947 function jit_float64_to_ulong (value: jit_float64): jit_ulong; libraryLibJITDecl;
949 (*
950 * Convert a 64-bit floating-point value into various integer types,
951 * with overflow detection.
952 *)
953 function jit_float64_to_int_ovf (result_: pjit_int; value: jit_float64): jit_int; libraryLibJITDecl;
954 function jit_float64_to_uint_ovf (result_: pjit_uint; value: jit_float64): jit_int; libraryLibJITDecl;
955 function jit_float64_to_long_ovf (result_: pjit_long; value: jit_float64): jit_int; libraryLibJITDecl;
956 function jit_float64_to_ulong_ovf (result_: pjit_ulong; value: jit_float64): jit_int; libraryLibJITDecl;
958 (*
959 * Convert a native floating-point value into various integer types.
960 *)
961 function jit_nfloat_to_int (value: jit_nfloat): jit_int; libraryLibJITDecl;
962 function jit_nfloat_to_uint (value: jit_nfloat): jit_uint; libraryLibJITDecl;
963 function jit_nfloat_to_long (value: jit_nfloat): jit_long; libraryLibJITDecl;
964 function jit_nfloat_to_ulong (value: jit_nfloat): jit_ulong; libraryLibJITDecl;
966 (*
967 * Convert a native floating-point value into various integer types,
968 * with overflow detection.
969 *)
970 function jit_nfloat_to_int_ovf (result_: pjit_int; value: jit_nfloat): jit_int; libraryLibJITDecl;
971 function jit_nfloat_to_uint_ovf (result_: pjit_uint; value: jit_nfloat): jit_int; libraryLibJITDecl;
972 function jit_nfloat_to_long_ovf (result_: pjit_long; value: jit_nfloat): jit_int; libraryLibJITDecl;
973 function jit_nfloat_to_ulong_ovf (result_: pjit_ulong; value: jit_nfloat): jit_int; libraryLibJITDecl;
975 (*
976 * Convert integer types into floating-point values.
977 *)
978 function jit_int_to_float32 (value: jit_int): jit_float32; libraryLibJITDecl;
979 function jit_int_to_float64 (value: jit_int): jit_float64; libraryLibJITDecl;
980 function jit_int_to_nfloat (value: jit_int): jit_nfloat; libraryLibJITDecl;
981 function jit_uint_to_float32 (value: jit_uint): jit_float32; libraryLibJITDecl;
982 function jit_uint_to_float64 (value: jit_uint): jit_float64; libraryLibJITDecl;
983 function jit_uint_to_nfloat (value: jit_uint): jit_nfloat; libraryLibJITDecl;
984 function jit_long_to_float32 (value: jit_long): jit_float32; libraryLibJITDecl;
985 function jit_long_to_float64 (value: jit_long): jit_float64; libraryLibJITDecl;
986 function jit_long_to_nfloat (value: jit_long): jit_nfloat; libraryLibJITDecl;
987 function jit_ulong_to_float32 (value: jit_ulong): jit_float32; libraryLibJITDecl;
988 function jit_ulong_to_float64 (value: jit_ulong): jit_float64; libraryLibJITDecl;
989 function jit_ulong_to_nfloat (value: jit_ulong): jit_nfloat; libraryLibJITDecl;
991 (*
992 * Convert between floating-point types.
993 *)
994 function jit_float32_to_float64 (value: jit_float32): jit_float64; libraryLibJITDecl;
995 function jit_float32_to_nfloat (value: jit_float32): jit_nfloat; libraryLibJITDecl;
996 function jit_float64_to_float32 (value: jit_float64): jit_float32; libraryLibJITDecl;
997 function jit_float64_to_nfloat (value: jit_float64): jit_nfloat; libraryLibJITDecl;
998 function jit_nfloat_to_float32 (value: jit_nfloat): jit_float32; libraryLibJITDecl;
999 function jit_nfloat_to_float64 (value: jit_nfloat): jit_float64; libraryLibJITDecl;
1002 type jit_meta_t = Pointer;
1003 type pjit_meta_t = ^jit_meta_t;
1005 function jit_meta_set (list: pjit_meta_t; type_: Integer; data: Pointer; free_data: jit_meta_free_func; pool_owner: jit_function_t): Integer; libraryLibJITDecl;
1006 function jit_meta_get (list: jit_meta_t; type_: Integer): Pointer; libraryLibJITDecl;
1007 procedure jit_meta_free (list: pjit_meta_t; type_: Integer); libraryLibJITDecl;
1008 procedure jit_meta_destroy (list: pjit_meta_t); libraryLibJITDecl;
1011 (*
1012 * Opaque types that describe object model elements.
1013 *)
1014 //struct jit_objmodel {}
1015 type jitom_class_t = Pointer;
1016 type pjitom_class_t = ^jitom_class_t;
1017 type jitom_field_t = Pointer;
1018 type pjitom_field_t = ^jitom_field_t;
1019 type jitom_method_t = Pointer;
1020 type pjitom_method_t = ^jitom_method_t;
1022 (*
1023 * Internal structure of an object model handler.
1024 *)
1025 type jit_objmodel_t = ^jit_objmodel;
1026 jit_objmodel = record
1027 (*
1028 * Size of this structure, for versioning.
1029 *)
1030 size: LongWord;
1032 (*
1033 * Reserved fields that can be used by the handler to store its state.
1034 *)
1035 reserved0: Pointer;
1036 reserved1: Pointer;
1037 reserved2: Pointer;
1038 reserved3: Pointer;
1040 (*
1041 * Operations on object models.
1042 *)
1043 destroy_model: procedure (model: jit_objmodel_t); libraryLibJITDecl;
1044 get_class_by_name: function (model: jit_objmodel_t; const name: PAnsiChar): jitom_class_t; libraryLibJITDecl;
1046 (*
1047 * Operations on object model classes.
1048 *)
1049 class_get_name: function (model: jit_objmodel_t; klass: jitom_class_t): PAnsiChar; libraryLibJITDecl;
1050 class_get_modifiers: function (model: jit_objmodel_t; klass: jitom_class_t): Integer; libraryLibJITDecl;
1051 class_get_type: function (model: jit_objmodel_t; klass: jitom_class_t): jit_type_t; libraryLibJITDecl;
1052 class_get_value_type: function (model: jit_objmodel_t; klass: jitom_class_t): jit_type_t; libraryLibJITDecl;
1053 class_get_primary_super: function (model: jit_objmodel_t; klass: jitom_class_t): jitom_class_t; libraryLibJITDecl;
1054 class_get_all_supers: function (model: jit_objmodel_t; klass: jitom_class_t; num: PLongWord): pjitom_class_t; libraryLibJITDecl;
1055 class_get_interfaces: function (model: jit_objmodel_t; klass: jitom_class_t; num: PLongWord): pjitom_class_t; libraryLibJITDecl;
1056 class_get_fields: function (model: jit_objmodel_t; klass: jitom_class_t; num: PLongWord): pjitom_field_t; libraryLibJITDecl;
1057 class_get_methods: function (model: jit_objmodel_t; klass: jitom_class_t; num: PLongWord): pjitom_method_t; libraryLibJITDecl;
1058 class_new: function (model: jit_objmodel_t; klass: jitom_class_t; ctor: jitom_method_t; func: jit_function_t; args: pjit_value_t; num_args: LongWord; flags: Integer): jit_value_t; libraryLibJITDecl;
1059 class_new_value: function (model: jit_objmodel_t; klass: jitom_class_t; ctor: jitom_method_t; func: jit_function_t; args: pjit_value_t; num_args: LongWord; flags: Integer): jit_value_t; libraryLibJITDecl;
1060 class_delete: function (model: jit_objmodel_t; klass: jitom_class_t; obj_value: jit_value_t): Integer; libraryLibJITDecl;
1061 class_add_ref: function (model: jit_objmodel_t; klass: jitom_class_t; obj_value: jit_value_t): Integer; libraryLibJITDecl;
1063 (*
1064 * Operations on object model fields.
1065 *)
1066 field_get_name: function (model: jit_objmodel_t; klass: jitom_class_t; field: jitom_field_t): PAnsiChar; libraryLibJITDecl;
1067 field_get_type: function (model: jit_objmodel_t; klass: jitom_class_t; field: jitom_field_t): jit_type_t; libraryLibJITDecl;
1068 field_get_modifiers: function (model: jit_objmodel_t; klass: jitom_class_t; field: jitom_field_t): Integer; libraryLibJITDecl;
1069 field_load: function (model: jit_objmodel_t; klass: jitom_class_t; field: jitom_field_t; func: jit_function_t; obj_value: jit_value_t): jit_value_t; libraryLibJITDecl;
1070 field_load_address: function (model: jit_objmodel_t; klass: jitom_class_t; field: jitom_field_t; func: jit_function_t; obj_value: jit_value_t): jit_value_t; libraryLibJITDecl;
1071 field_store: function (model: jit_objmodel_t; klass: jitom_class_t; field: jitom_field_t; func: jit_function_t; obj_value: jit_value_t; value: jit_value_t): Integer; libraryLibJITDecl;
1073 (*
1074 * Operations on object model methods.
1075 *)
1076 method_get_name: function (model: jit_objmodel_t; klass: jitom_class_t; method: jitom_method_t): PAnsiChar; libraryLibJITDecl;
1077 method_get_type: function (model: jit_objmodel_t; klass: jitom_class_t; method: jitom_method_t): jit_type_t; libraryLibJITDecl;
1078 method_get_modifiers: function (model: jit_objmodel_t; klass: jitom_class_t; method: jitom_method_t): Integer; libraryLibJITDecl;
1079 method_invoke: function (model: jit_objmodel_t; klass: jitom_class_t; method: jitom_method_t; func: jit_function_t; args: pjit_value_t; num_args: LongWord; flags: Integer): jit_value_t; libraryLibJITDecl;
1080 method_invoke_virtual: function (model: jit_objmodel_t; klass: jitom_class_t; method: jitom_method_t; func: jit_function_t; args: pjit_value_t; num_args: LongWord; flags: Integer): jit_value_t; libraryLibJITDecl;
1081 end;
1084 (*
1085 * Modifier flags that describe an item's properties.
1086 *)
1087 const JITOM_MODIFIER_ACCESS_MASK = $0007;
1088 const JITOM_MODIFIER_PUBLIC = $0000;
1089 const JITOM_MODIFIER_PRIVATE = $0001;
1090 const JITOM_MODIFIER_PROTECTED = $0002;
1091 const JITOM_MODIFIER_PACKAGE = $0003;
1092 const JITOM_MODIFIER_PACKAGE_OR_PROTECTED = $0004;
1093 const JITOM_MODIFIER_PACKAGE_AND_PROTECTED = $0005;
1094 const JITOM_MODIFIER_OTHER1 = $0006;
1095 const JITOM_MODIFIER_OTHER2 = $0007;
1096 const JITOM_MODIFIER_STATIC = $0008;
1097 const JITOM_MODIFIER_VIRTUAL = $0010;
1098 const JITOM_MODIFIER_NEW_SLOT = $0020;
1099 const JITOM_MODIFIER_ABSTRACT = $0040;
1100 const JITOM_MODIFIER_LITERAL = $0080;
1101 const JITOM_MODIFIER_CTOR = $0100;
1102 const JITOM_MODIFIER_STATIC_CTOR = $0200;
1103 const JITOM_MODIFIER_DTOR = $0400;
1104 const JITOM_MODIFIER_INTERFACE = $0800;
1105 const JITOM_MODIFIER_VALUE = $1000;
1106 const JITOM_MODIFIER_FINAL = $2000;
1107 const JITOM_MODIFIER_DELETE = $4000;
1108 const JITOM_MODIFIER_REFERENCE_COUNTED = $8000;
1110 (*
1111 * Type tags that are used to mark instances of object model classes.
1112 *)
1113 const JITOM_TYPETAG_CLASS = 11000; (* Object reference *)
1114 const JITOM_TYPETAG_VALUE = 11001; (* Inline stack value *)
1116 (*
1117 * Operations on object models.
1118 *)
1119 procedure jitom_destroy_model (model: jit_objmodel_t); libraryLibJITDecl;
1120 function jitom_get_class_by_name (model: jit_objmodel_t; const name: PAnsiChar): jitom_class_t; libraryLibJITDecl;
1122 (*
1123 * Operations on object model classes.
1124 *)
1125 function jitom_class_get_name (model: jit_objmodel_t; klass: jitom_class_t): PAnsiChar; libraryLibJITDecl;
1126 function jitom_class_get_modifiers (model: jit_objmodel_t; klass: jitom_class_t): Integer; libraryLibJITDecl;
1127 function jitom_class_get_type (model: jit_objmodel_t; klass: jitom_class_t): jit_type_t; libraryLibJITDecl;
1128 function jitom_class_get_value_type (model: jit_objmodel_t; klass: jitom_class_t): jit_type_t; libraryLibJITDecl;
1129 function jitom_class_get_primary_super (model: jit_objmodel_t; klass: jitom_class_t): jitom_class_t; libraryLibJITDecl;
1130 function jitom_class_get_all_supers (model: jit_objmodel_t; klass: jitom_class_t; num: PLongWord): pjitom_class_t; libraryLibJITDecl;
1131 function jitom_class_get_interfaces (model: jit_objmodel_t; klass: jitom_class_t; num: PLongWord): pjitom_class_t; libraryLibJITDecl;
1132 function jitom_class_get_fields (model: jit_objmodel_t; klass: jitom_class_t; num: PLongWord): pjitom_field_t; libraryLibJITDecl;
1133 function jitom_class_get_methods (model: jit_objmodel_t; klass: jitom_class_t; num: PLongWord): pjitom_method_t; libraryLibJITDecl;
1134 function jitom_class_new (model: jit_objmodel_t; klass: jitom_class_t; ctor: jitom_method_t; func: jit_function_t; args: pjit_value_t; num_args: LongWord; flags: Integer): jit_value_t; libraryLibJITDecl;
1135 function jitom_class_new_value (model: jit_objmodel_t; klass: jitom_class_t; ctor: jitom_method_t; func: jit_function_t; args: pjit_value_t; num_args: LongWord; flags: Integer): jit_value_t; libraryLibJITDecl;
1136 function jitom_class_delete (model: jit_objmodel_t; klass: jitom_class_t; obj_value: jit_value_t): Integer; libraryLibJITDecl;
1137 function jitom_class_add_ref (model: jit_objmodel_t; klass: jitom_class_t; obj_value: jit_value_t): Integer; libraryLibJITDecl;
1139 (*
1140 * Operations on object model fields.
1141 *)
1142 function jitom_field_get_name (model: jit_objmodel_t; klass: jitom_class_t; field: jitom_field_t): PAnsiChar; libraryLibJITDecl; // const
1143 function jitom_field_get_type (model: jit_objmodel_t; klass: jitom_class_t; field: jitom_field_t): jit_type_t; libraryLibJITDecl;
1144 function jitom_field_get_modifiers (model: jit_objmodel_t; klass: jitom_class_t; field: jitom_field_t): Integer; libraryLibJITDecl;
1145 function jitom_field_load (model: jit_objmodel_t; klass: jitom_class_t; field: jitom_field_t; func: jit_function_t; obj_value: jit_value_t): jit_value_t; libraryLibJITDecl;
1146 function jitom_field_load_address (model: jit_objmodel_t; klass: jitom_class_t; field: jitom_field_t; func: jit_function_t; obj_value: jit_value_t): jit_value_t; libraryLibJITDecl;
1147 function jitom_field_store (model: jit_objmodel_t; klass: jitom_class_t; field: jitom_field_t; func: jit_function_t; obj_value: jit_value_t; value: jit_value_t): Integer; libraryLibJITDecl;
1149 (*
1150 * Operations on object model methods.
1151 *)
1152 function jitom_method_get_name (model: jit_objmodel_t; klass: jitom_class_t; method: jitom_method_t): PAnsiChar; libraryLibJITDecl; // const
1153 function jitom_method_get_type (model: jit_objmodel_t; klass: jitom_class_t; method: jitom_method_t): jit_type_t; libraryLibJITDecl;
1154 function jitom_method_get_modifiers (model: jit_objmodel_t; klass: jitom_class_t; method: jitom_method_t): Integer; libraryLibJITDecl;
1155 function jitom_method_invoke (model: jit_objmodel_t; klass: jitom_class_t; method: jitom_method_t; func: jit_function_t; args: pjit_value_t; num_args: LongWord; flags: Integer): jit_value_t; libraryLibJITDecl;
1156 function jitom_method_invoke_virtual (model: jit_objmodel_t; klass: jitom_class_t; method: jitom_method_t; func: jit_function_t; args: pjit_value_t; num_args: LongWord; flags: Integer): jit_value_t; libraryLibJITDecl;
1158 (*
1159 * Manipulate types that represent objects and inline values.
1160 *)
1161 function jitom_type_tag_as_class (type_: jit_type_t; model: jit_objmodel_t; klass: jitom_class_t; incref: Integer): jit_type_t; libraryLibJITDecl;
1162 function jitom_type_tag_as_value (type_: jit_type_t; model: jit_objmodel_t; klass: jitom_class_t; incref: Integer): jit_type_t; libraryLibJITDecl;
1163 function jitom_type_is_class (type_: jit_type_t): Integer; libraryLibJITDecl;
1164 function jitom_type_is_value (type_: jit_type_t): Integer; libraryLibJITDecl;
1165 function jitom_type_get_model (type_: jit_type_t): jit_objmodel_t; libraryLibJITDecl;
1166 function jitom_type_get_class (type_: jit_type_t): jitom_class_t; libraryLibJITDecl;
1169 const JIT_OP_NOP = $0000;
1170 const JIT_OP_TRUNC_SBYTE = $0001;
1171 const JIT_OP_TRUNC_UBYTE = $0002;
1172 const JIT_OP_TRUNC_SHORT = $0003;
1173 const JIT_OP_TRUNC_USHORT = $0004;
1174 const JIT_OP_TRUNC_INT = $0005;
1175 const JIT_OP_TRUNC_UINT = $0006;
1176 const JIT_OP_CHECK_SBYTE = $0007;
1177 const JIT_OP_CHECK_UBYTE = $0008;
1178 const JIT_OP_CHECK_SHORT = $0009;
1179 const JIT_OP_CHECK_USHORT = $000A;
1180 const JIT_OP_CHECK_INT = $000B;
1181 const JIT_OP_CHECK_UINT = $000C;
1182 const JIT_OP_LOW_WORD = $000D;
1183 const JIT_OP_EXPAND_INT = $000E;
1184 const JIT_OP_EXPAND_UINT = $000F;
1185 const JIT_OP_CHECK_LOW_WORD = $0010;
1186 const JIT_OP_CHECK_SIGNED_LOW_WORD = $0011;
1187 const JIT_OP_CHECK_LONG = $0012;
1188 const JIT_OP_CHECK_ULONG = $0013;
1189 const JIT_OP_FLOAT32_TO_INT = $0014;
1190 const JIT_OP_FLOAT32_TO_UINT = $0015;
1191 const JIT_OP_FLOAT32_TO_LONG = $0016;
1192 const JIT_OP_FLOAT32_TO_ULONG = $0017;
1193 const JIT_OP_CHECK_FLOAT32_TO_INT = $0018;
1194 const JIT_OP_CHECK_FLOAT32_TO_UINT = $0019;
1195 const JIT_OP_CHECK_FLOAT32_TO_LONG = $001A;
1196 const JIT_OP_CHECK_FLOAT32_TO_ULONG = $001B;
1197 const JIT_OP_INT_TO_FLOAT32 = $001C;
1198 const JIT_OP_UINT_TO_FLOAT32 = $001D;
1199 const JIT_OP_LONG_TO_FLOAT32 = $001E;
1200 const JIT_OP_ULONG_TO_FLOAT32 = $001F;
1201 const JIT_OP_FLOAT32_TO_FLOAT64 = $0020;
1202 const JIT_OP_FLOAT64_TO_INT = $0021;
1203 const JIT_OP_FLOAT64_TO_UINT = $0022;
1204 const JIT_OP_FLOAT64_TO_LONG = $0023;
1205 const JIT_OP_FLOAT64_TO_ULONG = $0024;
1206 const JIT_OP_CHECK_FLOAT64_TO_INT = $0025;
1207 const JIT_OP_CHECK_FLOAT64_TO_UINT = $0026;
1208 const JIT_OP_CHECK_FLOAT64_TO_LONG = $0027;
1209 const JIT_OP_CHECK_FLOAT64_TO_ULONG = $0028;
1210 const JIT_OP_INT_TO_FLOAT64 = $0029;
1211 const JIT_OP_UINT_TO_FLOAT64 = $002A;
1212 const JIT_OP_LONG_TO_FLOAT64 = $002B;
1213 const JIT_OP_ULONG_TO_FLOAT64 = $002C;
1214 const JIT_OP_FLOAT64_TO_FLOAT32 = $002D;
1215 const JIT_OP_NFLOAT_TO_INT = $002E;
1216 const JIT_OP_NFLOAT_TO_UINT = $002F;
1217 const JIT_OP_NFLOAT_TO_LONG = $0030;
1218 const JIT_OP_NFLOAT_TO_ULONG = $0031;
1219 const JIT_OP_CHECK_NFLOAT_TO_INT = $0032;
1220 const JIT_OP_CHECK_NFLOAT_TO_UINT = $0033;
1221 const JIT_OP_CHECK_NFLOAT_TO_LONG = $0034;
1222 const JIT_OP_CHECK_NFLOAT_TO_ULONG = $0035;
1223 const JIT_OP_INT_TO_NFLOAT = $0036;
1224 const JIT_OP_UINT_TO_NFLOAT = $0037;
1225 const JIT_OP_LONG_TO_NFLOAT = $0038;
1226 const JIT_OP_ULONG_TO_NFLOAT = $0039;
1227 const JIT_OP_NFLOAT_TO_FLOAT32 = $003A;
1228 const JIT_OP_NFLOAT_TO_FLOAT64 = $003B;
1229 const JIT_OP_FLOAT32_TO_NFLOAT = $003C;
1230 const JIT_OP_FLOAT64_TO_NFLOAT = $003D;
1231 const JIT_OP_IADD = $003E;
1232 const JIT_OP_IADD_OVF = $003F;
1233 const JIT_OP_IADD_OVF_UN = $0040;
1234 const JIT_OP_ISUB = $0041;
1235 const JIT_OP_ISUB_OVF = $0042;
1236 const JIT_OP_ISUB_OVF_UN = $0043;
1237 const JIT_OP_IMUL = $0044;
1238 const JIT_OP_IMUL_OVF = $0045;
1239 const JIT_OP_IMUL_OVF_UN = $0046;
1240 const JIT_OP_IDIV = $0047;
1241 const JIT_OP_IDIV_UN = $0048;
1242 const JIT_OP_IREM = $0049;
1243 const JIT_OP_IREM_UN = $004A;
1244 const JIT_OP_INEG = $004B;
1245 const JIT_OP_LADD = $004C;
1246 const JIT_OP_LADD_OVF = $004D;
1247 const JIT_OP_LADD_OVF_UN = $004E;
1248 const JIT_OP_LSUB = $004F;
1249 const JIT_OP_LSUB_OVF = $0050;
1250 const JIT_OP_LSUB_OVF_UN = $0051;
1251 const JIT_OP_LMUL = $0052;
1252 const JIT_OP_LMUL_OVF = $0053;
1253 const JIT_OP_LMUL_OVF_UN = $0054;
1254 const JIT_OP_LDIV = $0055;
1255 const JIT_OP_LDIV_UN = $0056;
1256 const JIT_OP_LREM = $0057;
1257 const JIT_OP_LREM_UN = $0058;
1258 const JIT_OP_LNEG = $0059;
1259 const JIT_OP_FADD = $005A;
1260 const JIT_OP_FSUB = $005B;
1261 const JIT_OP_FMUL = $005C;
1262 const JIT_OP_FDIV = $005D;
1263 const JIT_OP_FREM = $005E;
1264 const JIT_OP_FREM_IEEE = $005F;
1265 const JIT_OP_FNEG = $0060;
1266 const JIT_OP_DADD = $0061;
1267 const JIT_OP_DSUB = $0062;
1268 const JIT_OP_DMUL = $0063;
1269 const JIT_OP_DDIV = $0064;
1270 const JIT_OP_DREM = $0065;
1271 const JIT_OP_DREM_IEEE = $0066;
1272 const JIT_OP_DNEG = $0067;
1273 const JIT_OP_NFADD = $0068;
1274 const JIT_OP_NFSUB = $0069;
1275 const JIT_OP_NFMUL = $006A;
1276 const JIT_OP_NFDIV = $006B;
1277 const JIT_OP_NFREM = $006C;
1278 const JIT_OP_NFREM_IEEE = $006D;
1279 const JIT_OP_NFNEG = $006E;
1280 const JIT_OP_IAND = $006F;
1281 const JIT_OP_IOR = $0070;
1282 const JIT_OP_IXOR = $0071;
1283 const JIT_OP_INOT = $0072;
1284 const JIT_OP_ISHL = $0073;
1285 const JIT_OP_ISHR = $0074;
1286 const JIT_OP_ISHR_UN = $0075;
1287 const JIT_OP_LAND = $0076;
1288 const JIT_OP_LOR = $0077;
1289 const JIT_OP_LXOR = $0078;
1290 const JIT_OP_LNOT = $0079;
1291 const JIT_OP_LSHL = $007A;
1292 const JIT_OP_LSHR = $007B;
1293 const JIT_OP_LSHR_UN = $007C;
1294 const JIT_OP_BR = $007D;
1295 const JIT_OP_BR_IFALSE = $007E;
1296 const JIT_OP_BR_ITRUE = $007F;
1297 const JIT_OP_BR_IEQ = $0080;
1298 const JIT_OP_BR_INE = $0081;
1299 const JIT_OP_BR_ILT = $0082;
1300 const JIT_OP_BR_ILT_UN = $0083;
1301 const JIT_OP_BR_ILE = $0084;
1302 const JIT_OP_BR_ILE_UN = $0085;
1303 const JIT_OP_BR_IGT = $0086;
1304 const JIT_OP_BR_IGT_UN = $0087;
1305 const JIT_OP_BR_IGE = $0088;
1306 const JIT_OP_BR_IGE_UN = $0089;
1307 const JIT_OP_BR_LFALSE = $008A;
1308 const JIT_OP_BR_LTRUE = $008B;
1309 const JIT_OP_BR_LEQ = $008C;
1310 const JIT_OP_BR_LNE = $008D;
1311 const JIT_OP_BR_LLT = $008E;
1312 const JIT_OP_BR_LLT_UN = $008F;
1313 const JIT_OP_BR_LLE = $0090;
1314 const JIT_OP_BR_LLE_UN = $0091;
1315 const JIT_OP_BR_LGT = $0092;
1316 const JIT_OP_BR_LGT_UN = $0093;
1317 const JIT_OP_BR_LGE = $0094;
1318 const JIT_OP_BR_LGE_UN = $0095;
1319 const JIT_OP_BR_FEQ = $0096;
1320 const JIT_OP_BR_FNE = $0097;
1321 const JIT_OP_BR_FLT = $0098;
1322 const JIT_OP_BR_FLE = $0099;
1323 const JIT_OP_BR_FGT = $009A;
1324 const JIT_OP_BR_FGE = $009B;
1325 const JIT_OP_BR_FLT_INV = $009C;
1326 const JIT_OP_BR_FLE_INV = $009D;
1327 const JIT_OP_BR_FGT_INV = $009E;
1328 const JIT_OP_BR_FGE_INV = $009F;
1329 const JIT_OP_BR_DEQ = $00A0;
1330 const JIT_OP_BR_DNE = $00A1;
1331 const JIT_OP_BR_DLT = $00A2;
1332 const JIT_OP_BR_DLE = $00A3;
1333 const JIT_OP_BR_DGT = $00A4;
1334 const JIT_OP_BR_DGE = $00A5;
1335 const JIT_OP_BR_DLT_INV = $00A6;
1336 const JIT_OP_BR_DLE_INV = $00A7;
1337 const JIT_OP_BR_DGT_INV = $00A8;
1338 const JIT_OP_BR_DGE_INV = $00A9;
1339 const JIT_OP_BR_NFEQ = $00AA;
1340 const JIT_OP_BR_NFNE = $00AB;
1341 const JIT_OP_BR_NFLT = $00AC;
1342 const JIT_OP_BR_NFLE = $00AD;
1343 const JIT_OP_BR_NFGT = $00AE;
1344 const JIT_OP_BR_NFGE = $00AF;
1345 const JIT_OP_BR_NFLT_INV = $00B0;
1346 const JIT_OP_BR_NFLE_INV = $00B1;
1347 const JIT_OP_BR_NFGT_INV = $00B2;
1348 const JIT_OP_BR_NFGE_INV = $00B3;
1349 const JIT_OP_ICMP = $00B4;
1350 const JIT_OP_ICMP_UN = $00B5;
1351 const JIT_OP_LCMP = $00B6;
1352 const JIT_OP_LCMP_UN = $00B7;
1353 const JIT_OP_FCMPL = $00B8;
1354 const JIT_OP_FCMPG = $00B9;
1355 const JIT_OP_DCMPL = $00BA;
1356 const JIT_OP_DCMPG = $00BB;
1357 const JIT_OP_NFCMPL = $00BC;
1358 const JIT_OP_NFCMPG = $00BD;
1359 const JIT_OP_IEQ = $00BE;
1360 const JIT_OP_INE = $00BF;
1361 const JIT_OP_ILT = $00C0;
1362 const JIT_OP_ILT_UN = $00C1;
1363 const JIT_OP_ILE = $00C2;
1364 const JIT_OP_ILE_UN = $00C3;
1365 const JIT_OP_IGT = $00C4;
1366 const JIT_OP_IGT_UN = $00C5;
1367 const JIT_OP_IGE = $00C6;
1368 const JIT_OP_IGE_UN = $00C7;
1369 const JIT_OP_LEQ = $00C8;
1370 const JIT_OP_LNE = $00C9;
1371 const JIT_OP_LLT = $00CA;
1372 const JIT_OP_LLT_UN = $00CB;
1373 const JIT_OP_LLE = $00CC;
1374 const JIT_OP_LLE_UN = $00CD;
1375 const JIT_OP_LGT = $00CE;
1376 const JIT_OP_LGT_UN = $00CF;
1377 const JIT_OP_LGE = $00D0;
1378 const JIT_OP_LGE_UN = $00D1;
1379 const JIT_OP_FEQ = $00D2;
1380 const JIT_OP_FNE = $00D3;
1381 const JIT_OP_FLT = $00D4;
1382 const JIT_OP_FLE = $00D5;
1383 const JIT_OP_FGT = $00D6;
1384 const JIT_OP_FGE = $00D7;
1385 const JIT_OP_FLT_INV = $00D8;
1386 const JIT_OP_FLE_INV = $00D9;
1387 const JIT_OP_FGT_INV = $00DA;
1388 const JIT_OP_FGE_INV = $00DB;
1389 const JIT_OP_DEQ = $00DC;
1390 const JIT_OP_DNE = $00DD;
1391 const JIT_OP_DLT = $00DE;
1392 const JIT_OP_DLE = $00DF;
1393 const JIT_OP_DGT = $00E0;
1394 const JIT_OP_DGE = $00E1;
1395 const JIT_OP_DLT_INV = $00E2;
1396 const JIT_OP_DLE_INV = $00E3;
1397 const JIT_OP_DGT_INV = $00E4;
1398 const JIT_OP_DGE_INV = $00E5;
1399 const JIT_OP_NFEQ = $00E6;
1400 const JIT_OP_NFNE = $00E7;
1401 const JIT_OP_NFLT = $00E8;
1402 const JIT_OP_NFLE = $00E9;
1403 const JIT_OP_NFGT = $00EA;
1404 const JIT_OP_NFGE = $00EB;
1405 const JIT_OP_NFLT_INV = $00EC;
1406 const JIT_OP_NFLE_INV = $00ED;
1407 const JIT_OP_NFGT_INV = $00EE;
1408 const JIT_OP_NFGE_INV = $00EF;
1409 const JIT_OP_IS_FNAN = $00F0;
1410 const JIT_OP_IS_FINF = $00F1;
1411 const JIT_OP_IS_FFINITE = $00F2;
1412 const JIT_OP_IS_DNAN = $00F3;
1413 const JIT_OP_IS_DINF = $00F4;
1414 const JIT_OP_IS_DFINITE = $00F5;
1415 const JIT_OP_IS_NFNAN = $00F6;
1416 const JIT_OP_IS_NFINF = $00F7;
1417 const JIT_OP_IS_NFFINITE = $00F8;
1418 const JIT_OP_FACOS = $00F9;
1419 const JIT_OP_FASIN = $00FA;
1420 const JIT_OP_FATAN = $00FB;
1421 const JIT_OP_FATAN2 = $00FC;
1422 const JIT_OP_FCEIL = $00FD;
1423 const JIT_OP_FCOS = $00FE;
1424 const JIT_OP_FCOSH = $00FF;
1425 const JIT_OP_FEXP = $0100;
1426 const JIT_OP_FFLOOR = $0101;
1427 const JIT_OP_FLOG = $0102;
1428 const JIT_OP_FLOG10 = $0103;
1429 const JIT_OP_FPOW = $0104;
1430 const JIT_OP_FRINT = $0105;
1431 const JIT_OP_FROUND = $0106;
1432 const JIT_OP_FSIN = $0107;
1433 const JIT_OP_FSINH = $0108;
1434 const JIT_OP_FSQRT = $0109;
1435 const JIT_OP_FTAN = $010A;
1436 const JIT_OP_FTANH = $010B;
1437 const JIT_OP_FTRUNC = $010C;
1438 const JIT_OP_DACOS = $010D;
1439 const JIT_OP_DASIN = $010E;
1440 const JIT_OP_DATAN = $010F;
1441 const JIT_OP_DATAN2 = $0110;
1442 const JIT_OP_DCEIL = $0111;
1443 const JIT_OP_DCOS = $0112;
1444 const JIT_OP_DCOSH = $0113;
1445 const JIT_OP_DEXP = $0114;
1446 const JIT_OP_DFLOOR = $0115;
1447 const JIT_OP_DLOG = $0116;
1448 const JIT_OP_DLOG10 = $0117;
1449 const JIT_OP_DPOW = $0118;
1450 const JIT_OP_DRINT = $0119;
1451 const JIT_OP_DROUND = $011A;
1452 const JIT_OP_DSIN = $011B;
1453 const JIT_OP_DSINH = $011C;
1454 const JIT_OP_DSQRT = $011D;
1455 const JIT_OP_DTAN = $011E;
1456 const JIT_OP_DTANH = $011F;
1457 const JIT_OP_DTRUNC = $0120;
1458 const JIT_OP_NFACOS = $0121;
1459 const JIT_OP_NFASIN = $0122;
1460 const JIT_OP_NFATAN = $0123;
1461 const JIT_OP_NFATAN2 = $0124;
1462 const JIT_OP_NFCEIL = $0125;
1463 const JIT_OP_NFCOS = $0126;
1464 const JIT_OP_NFCOSH = $0127;
1465 const JIT_OP_NFEXP = $0128;
1466 const JIT_OP_NFFLOOR = $0129;
1467 const JIT_OP_NFLOG = $012A;
1468 const JIT_OP_NFLOG10 = $012B;
1469 const JIT_OP_NFPOW = $012C;
1470 const JIT_OP_NFRINT = $012D;
1471 const JIT_OP_NFROUND = $012E;
1472 const JIT_OP_NFSIN = $012F;
1473 const JIT_OP_NFSINH = $0130;
1474 const JIT_OP_NFSQRT = $0131;
1475 const JIT_OP_NFTAN = $0132;
1476 const JIT_OP_NFTANH = $0133;
1477 const JIT_OP_NFTRUNC = $0134;
1478 const JIT_OP_IABS = $0135;
1479 const JIT_OP_LABS = $0136;
1480 const JIT_OP_FABS = $0137;
1481 const JIT_OP_DABS = $0138;
1482 const JIT_OP_NFABS = $0139;
1483 const JIT_OP_IMIN = $013A;
1484 const JIT_OP_IMIN_UN = $013B;
1485 const JIT_OP_LMIN = $013C;
1486 const JIT_OP_LMIN_UN = $013D;
1487 const JIT_OP_FMIN = $013E;
1488 const JIT_OP_DMIN = $013F;
1489 const JIT_OP_NFMIN = $0140;
1490 const JIT_OP_IMAX = $0141;
1491 const JIT_OP_IMAX_UN = $0142;
1492 const JIT_OP_LMAX = $0143;
1493 const JIT_OP_LMAX_UN = $0144;
1494 const JIT_OP_FMAX = $0145;
1495 const JIT_OP_DMAX = $0146;
1496 const JIT_OP_NFMAX = $0147;
1497 const JIT_OP_ISIGN = $0148;
1498 const JIT_OP_LSIGN = $0149;
1499 const JIT_OP_FSIGN = $014A;
1500 const JIT_OP_DSIGN = $014B;
1501 const JIT_OP_NFSIGN = $014C;
1502 const JIT_OP_CHECK_NULL = $014D;
1503 const JIT_OP_CALL = $014E;
1504 const JIT_OP_CALL_TAIL = $014F;
1505 const JIT_OP_CALL_INDIRECT = $0150;
1506 const JIT_OP_CALL_INDIRECT_TAIL = $0151;
1507 const JIT_OP_CALL_VTABLE_PTR = $0152;
1508 const JIT_OP_CALL_VTABLE_PTR_TAIL = $0153;
1509 const JIT_OP_CALL_EXTERNAL = $0154;
1510 const JIT_OP_CALL_EXTERNAL_TAIL = $0155;
1511 const JIT_OP_RETURN = $0156;
1512 const JIT_OP_RETURN_INT = $0157;
1513 const JIT_OP_RETURN_LONG = $0158;
1514 const JIT_OP_RETURN_FLOAT32 = $0159;
1515 const JIT_OP_RETURN_FLOAT64 = $015A;
1516 const JIT_OP_RETURN_NFLOAT = $015B;
1517 const JIT_OP_RETURN_SMALL_STRUCT = $015C;
1518 const JIT_OP_SETUP_FOR_NESTED = $015D;
1519 const JIT_OP_SETUP_FOR_SIBLING = $015E;
1520 const JIT_OP_IMPORT = $015F;
1521 const JIT_OP_THROW = $0160;
1522 const JIT_OP_RETHROW = $0161;
1523 const JIT_OP_LOAD_PC = $0162;
1524 const JIT_OP_LOAD_EXCEPTION_PC = $0163;
1525 const JIT_OP_ENTER_FINALLY = $0164;
1526 const JIT_OP_LEAVE_FINALLY = $0165;
1527 const JIT_OP_CALL_FINALLY = $0166;
1528 const JIT_OP_ENTER_FILTER = $0167;
1529 const JIT_OP_LEAVE_FILTER = $0168;
1530 const JIT_OP_CALL_FILTER = $0169;
1531 const JIT_OP_CALL_FILTER_RETURN = $016A;
1532 const JIT_OP_ADDRESS_OF_LABEL = $016B;
1533 const JIT_OP_COPY_LOAD_SBYTE = $016C;
1534 const JIT_OP_COPY_LOAD_UBYTE = $016D;
1535 const JIT_OP_COPY_LOAD_SHORT = $016E;
1536 const JIT_OP_COPY_LOAD_USHORT = $016F;
1537 const JIT_OP_COPY_INT = $0170;
1538 const JIT_OP_COPY_LONG = $0171;
1539 const JIT_OP_COPY_FLOAT32 = $0172;
1540 const JIT_OP_COPY_FLOAT64 = $0173;
1541 const JIT_OP_COPY_NFLOAT = $0174;
1542 const JIT_OP_COPY_STRUCT = $0175;
1543 const JIT_OP_COPY_STORE_BYTE = $0176;
1544 const JIT_OP_COPY_STORE_SHORT = $0177;
1545 const JIT_OP_ADDRESS_OF = $0178;
1546 const JIT_OP_INCOMING_REG = $0179;
1547 const JIT_OP_INCOMING_FRAME_POSN = $017A;
1548 const JIT_OP_OUTGOING_REG = $017B;
1549 const JIT_OP_OUTGOING_FRAME_POSN = $017C;
1550 const JIT_OP_RETURN_REG = $017D;
1551 const JIT_OP_PUSH_INT = $017E;
1552 const JIT_OP_PUSH_LONG = $017F;
1553 const JIT_OP_PUSH_FLOAT32 = $0180;
1554 const JIT_OP_PUSH_FLOAT64 = $0181;
1555 const JIT_OP_PUSH_NFLOAT = $0182;
1556 const JIT_OP_PUSH_STRUCT = $0183;
1557 const JIT_OP_POP_STACK = $0184;
1558 const JIT_OP_FLUSH_SMALL_STRUCT = $0185;
1559 const JIT_OP_SET_PARAM_INT = $0186;
1560 const JIT_OP_SET_PARAM_LONG = $0187;
1561 const JIT_OP_SET_PARAM_FLOAT32 = $0188;
1562 const JIT_OP_SET_PARAM_FLOAT64 = $0189;
1563 const JIT_OP_SET_PARAM_NFLOAT = $018A;
1564 const JIT_OP_SET_PARAM_STRUCT = $018B;
1565 const JIT_OP_PUSH_RETURN_AREA_PTR = $018C;
1566 const JIT_OP_LOAD_RELATIVE_SBYTE = $018D;
1567 const JIT_OP_LOAD_RELATIVE_UBYTE = $018E;
1568 const JIT_OP_LOAD_RELATIVE_SHORT = $018F;
1569 const JIT_OP_LOAD_RELATIVE_USHORT = $0190;
1570 const JIT_OP_LOAD_RELATIVE_INT = $0191;
1571 const JIT_OP_LOAD_RELATIVE_LONG = $0192;
1572 const JIT_OP_LOAD_RELATIVE_FLOAT32 = $0193;
1573 const JIT_OP_LOAD_RELATIVE_FLOAT64 = $0194;
1574 const JIT_OP_LOAD_RELATIVE_NFLOAT = $0195;
1575 const JIT_OP_LOAD_RELATIVE_STRUCT = $0196;
1576 const JIT_OP_STORE_RELATIVE_BYTE = $0197;
1577 const JIT_OP_STORE_RELATIVE_SHORT = $0198;
1578 const JIT_OP_STORE_RELATIVE_INT = $0199;
1579 const JIT_OP_STORE_RELATIVE_LONG = $019A;
1580 const JIT_OP_STORE_RELATIVE_FLOAT32 = $019B;
1581 const JIT_OP_STORE_RELATIVE_FLOAT64 = $019C;
1582 const JIT_OP_STORE_RELATIVE_NFLOAT = $019D;
1583 const JIT_OP_STORE_RELATIVE_STRUCT = $019E;
1584 const JIT_OP_ADD_RELATIVE = $019F;
1585 const JIT_OP_LOAD_ELEMENT_SBYTE = $01A0;
1586 const JIT_OP_LOAD_ELEMENT_UBYTE = $01A1;
1587 const JIT_OP_LOAD_ELEMENT_SHORT = $01A2;
1588 const JIT_OP_LOAD_ELEMENT_USHORT = $01A3;
1589 const JIT_OP_LOAD_ELEMENT_INT = $01A4;
1590 const JIT_OP_LOAD_ELEMENT_LONG = $01A5;
1591 const JIT_OP_LOAD_ELEMENT_FLOAT32 = $01A6;
1592 const JIT_OP_LOAD_ELEMENT_FLOAT64 = $01A7;
1593 const JIT_OP_LOAD_ELEMENT_NFLOAT = $01A8;
1594 const JIT_OP_STORE_ELEMENT_BYTE = $01A9;
1595 const JIT_OP_STORE_ELEMENT_SHORT = $01AA;
1596 const JIT_OP_STORE_ELEMENT_INT = $01AB;
1597 const JIT_OP_STORE_ELEMENT_LONG = $01AC;
1598 const JIT_OP_STORE_ELEMENT_FLOAT32 = $01AD;
1599 const JIT_OP_STORE_ELEMENT_FLOAT64 = $01AE;
1600 const JIT_OP_STORE_ELEMENT_NFLOAT = $01AF;
1601 const JIT_OP_MEMCPY = $01B0;
1602 const JIT_OP_MEMMOVE = $01B1;
1603 const JIT_OP_MEMSET = $01B2;
1604 const JIT_OP_ALLOCA = $01B3;
1605 const JIT_OP_MARK_OFFSET = $01B4;
1606 const JIT_OP_MARK_BREAKPOINT = $01B5;
1607 const JIT_OP_JUMP_TABLE = $01B6;
1608 const JIT_OP_NUM_OPCODES = $01B7;
1610 (*
1611 * Opcode information.
1612 *)
1613 type jit_opcode_info_t = record
1614 name: PAnsiChar; // const
1615 flags: Integer;
1616 end;
1617 const JIT_OPCODE_DEST_MASK = $0000000F;
1618 const JIT_OPCODE_DEST_EMPTY = $00000000;
1619 const JIT_OPCODE_DEST_INT = $00000001;
1620 const JIT_OPCODE_DEST_LONG = $00000002;
1621 const JIT_OPCODE_DEST_FLOAT32 = $00000003;
1622 const JIT_OPCODE_DEST_FLOAT64 = $00000004;
1623 const JIT_OPCODE_DEST_NFLOAT = $00000005;
1624 const JIT_OPCODE_DEST_ANY = $00000006;
1625 const JIT_OPCODE_SRC1_MASK = $000000F0;
1626 const JIT_OPCODE_SRC1_EMPTY = $00000000;
1627 const JIT_OPCODE_SRC1_INT = $00000010;
1628 const JIT_OPCODE_SRC1_LONG = $00000020;
1629 const JIT_OPCODE_SRC1_FLOAT32 = $00000030;
1630 const JIT_OPCODE_SRC1_FLOAT64 = $00000040;
1631 const JIT_OPCODE_SRC1_NFLOAT = $00000050;
1632 const JIT_OPCODE_SRC1_ANY = $00000060;
1633 const JIT_OPCODE_SRC2_MASK = $00000F00;
1634 const JIT_OPCODE_SRC2_EMPTY = $00000000;
1635 const JIT_OPCODE_SRC2_INT = $00000100;
1636 const JIT_OPCODE_SRC2_LONG = $00000200;
1637 const JIT_OPCODE_SRC2_FLOAT32 = $00000300;
1638 const JIT_OPCODE_SRC2_FLOAT64 = $00000400;
1639 const JIT_OPCODE_SRC2_NFLOAT = $00000500;
1640 const JIT_OPCODE_SRC2_ANY = $00000600;
1641 const JIT_OPCODE_IS_BRANCH = $00001000;
1642 const JIT_OPCODE_IS_CALL = $00002000;
1643 const JIT_OPCODE_IS_CALL_EXTERNAL = $00004000;
1644 const JIT_OPCODE_IS_REG = $00008000;
1645 const JIT_OPCODE_IS_ADDROF_LABEL = $00010000;
1646 const JIT_OPCODE_IS_JUMP_TABLE = $00020000;
1647 const JIT_OPCODE_OPER_MASK = $01F00000;
1648 const JIT_OPCODE_OPER_NONE = $00000000;
1649 const JIT_OPCODE_OPER_ADD = $00100000;
1650 const JIT_OPCODE_OPER_SUB = $00200000;
1651 const JIT_OPCODE_OPER_MUL = $00300000;
1652 const JIT_OPCODE_OPER_DIV = $00400000;
1653 const JIT_OPCODE_OPER_REM = $00500000;
1654 const JIT_OPCODE_OPER_NEG = $00600000;
1655 const JIT_OPCODE_OPER_AND = $00700000;
1656 const JIT_OPCODE_OPER_OR = $00800000;
1657 const JIT_OPCODE_OPER_XOR = $00900000;
1658 const JIT_OPCODE_OPER_NOT = $00A00000;
1659 const JIT_OPCODE_OPER_EQ = $00B00000;
1660 const JIT_OPCODE_OPER_NE = $00C00000;
1661 const JIT_OPCODE_OPER_LT = $00D00000;
1662 const JIT_OPCODE_OPER_LE = $00E00000;
1663 const JIT_OPCODE_OPER_GT = $00F00000;
1664 const JIT_OPCODE_OPER_GE = $01000000;
1665 const JIT_OPCODE_OPER_SHL = $01100000;
1666 const JIT_OPCODE_OPER_SHR = $01200000;
1667 const JIT_OPCODE_OPER_SHR_UN = $01300000;
1668 const JIT_OPCODE_OPER_COPY = $01400000;
1669 const JIT_OPCODE_OPER_ADDRESS_OF = $01500000;
1670 {$IF DEFINED(JIT_NATIVE_INT32)}
1671 const JIT_OPCODE_DEST_PTR = JIT_OPCODE_DEST_INT;
1672 const JIT_OPCODE_SRC1_PTR = JIT_OPCODE_SRC1_INT;
1673 const JIT_OPCODE_SRC2_PTR = JIT_OPCODE_SRC2_INT;
1674 {$ELSE}
1675 const JIT_OPCODE_DEST_PTR = JIT_OPCODE_DEST_LONG;
1676 const JIT_OPCODE_SRC1_PTR = JIT_OPCODE_SRC1_LONG;
1677 const JIT_OPCODE_SRC2_PTR = JIT_OPCODE_SRC2_LONG;
1678 {$ENDIF}
1679 //k8: not yet
1680 //(*const*) var jit_opcodes: packed array [0..JIT_OP_NUM_OPCODES-1] of jit_opcode_info_t; external name 'jit_opcodes';
1683 (*
1684 * Some obsolete opcodes that have been removed because they are duplicates
1685 * of other opcodes.
1686 *)
1687 const JIT_OP_FEQ_INV = JIT_OP_FEQ;
1688 const JIT_OP_FNE_INV = JIT_OP_FNE;
1689 const JIT_OP_DEQ_INV = JIT_OP_DEQ;
1690 const JIT_OP_DNE_INV = JIT_OP_DNE;
1691 const JIT_OP_NFEQ_INV = JIT_OP_NFEQ;
1692 const JIT_OP_NFNE_INV = JIT_OP_NFNE;
1693 const JIT_OP_BR_FEQ_INV = JIT_OP_BR_FEQ;
1694 const JIT_OP_BR_FNE_INV = JIT_OP_BR_FNE;
1695 const JIT_OP_BR_DEQ_INV = JIT_OP_BR_DEQ;
1696 const JIT_OP_BR_DNE_INV = JIT_OP_BR_DNE;
1697 const JIT_OP_BR_NFEQ_INV = JIT_OP_BR_NFEQ;
1698 const JIT_OP_BR_NFNE_INV = JIT_OP_BR_NFNE;
1702 (*
1703 * Pre-defined type descriptors.
1704 *)
1705 (*const*) var jit_type_void_: jit_type_t; external name 'jit_type_void';
1706 (*const*) var jit_type_sbyte: jit_type_t; external;
1707 (*const*) var jit_type_ubyte: jit_type_t; external;
1708 (*const*) var jit_type_short: jit_type_t; external;
1709 (*const*) var jit_type_ushort: jit_type_t; external;
1710 (*const*) var jit_type_int: jit_type_t; external;
1711 (*const*) var jit_type_uint: jit_type_t; external;
1712 (*const*) var jit_type_nint: jit_type_t; external;
1713 (*const*) var jit_type_nuint: jit_type_t; external;
1714 (*const*) var jit_type_long: jit_type_t; external;
1715 (*const*) var jit_type_ulong: jit_type_t; external;
1716 (*const*) var jit_type_float32: jit_type_t; external;
1717 (*const*) var jit_type_float64: jit_type_t; external;
1718 (*const*) var jit_type_nfloat: jit_type_t; external;
1719 (*const*) var jit_type_void_ptr: jit_type_t; external;
1721 (*
1722 * Type descriptors for the system "char", "int", "long", etc types.
1723 * These are defined to one of the above values.
1724 *)
1725 (*const*) var jit_type_sys_bool: jit_type_t; external;
1726 (*const*) var jit_type_sys_char: jit_type_t; external;
1727 (*const*) var jit_type_sys_schar: jit_type_t; external;
1728 (*const*) var jit_type_sys_uchar: jit_type_t; external;
1729 (*const*) var jit_type_sys_short: jit_type_t; external;
1730 (*const*) var jit_type_sys_ushort: jit_type_t; external;
1731 (*const*) var jit_type_sys_int: jit_type_t; external;
1732 (*const*) var jit_type_sys_uint: jit_type_t; external;
1733 (*const*) var jit_type_sys_long: jit_type_t; external;
1734 (*const*) var jit_type_sys_ulong: jit_type_t; external;
1735 (*const*) var jit_type_sys_longlong: jit_type_t; external;
1736 (*const*) var jit_type_sys_ulonglong: jit_type_t; external;
1737 (*const*) var jit_type_sys_float: jit_type_t; external;
1738 (*const*) var jit_type_sys_double: jit_type_t; external;
1739 (*const*) var jit_type_sys_long_double: jit_type_t; external;
1743 (*
1744 * Type kinds that may be returned by "jit_type_get_kind".
1745 *)
1746 const TJIT_TYPE_INVALID = -1;
1747 const TJIT_TYPE_VOID = 0;
1748 const TJIT_TYPE_SBYTE = 1;
1749 const TJIT_TYPE_UBYTE = 2;
1750 const TJIT_TYPE_SHORT = 3;
1751 const TJIT_TYPE_USHORT = 4;
1752 const TJIT_TYPE_INT = 5;
1753 const TJIT_TYPE_UINT = 6;
1754 const TJIT_TYPE_NINT = 7;
1755 const TJIT_TYPE_NUINT = 8;
1756 const TJIT_TYPE_LONG = 9;
1757 const TJIT_TYPE_ULONG = 10;
1758 const TJIT_TYPE_FLOAT32 = 11;
1759 const TJIT_TYPE_FLOAT64 = 12;
1760 const TJIT_TYPE_NFLOAT = 13;
1761 const TJIT_TYPE_MAX_PRIMITIVE = TJIT_TYPE_NFLOAT;
1762 const TJIT_TYPE_STRUCT = 14;
1763 const TJIT_TYPE_UNION = 15;
1764 const TJIT_TYPE_SIGNATURE = 16;
1765 const TJIT_TYPE_PTR = 17;
1766 const TJIT_TYPE_FIRST_TAGGED = 32;
1768 (*
1769 * Special tag types.
1770 *)
1771 const JIT_TYPETAG_NAME = 10000;
1772 const JIT_TYPETAG_STRUCT_NAME = 10001;
1773 const JIT_TYPETAG_UNION_NAME = 10002;
1774 const JIT_TYPETAG_ENUM_NAME = 10003;
1775 const JIT_TYPETAG_CONST = 10004;
1776 const JIT_TYPETAG_VOLATILE = 10005;
1777 const JIT_TYPETAG_REFERENCE = 10006;
1778 const JIT_TYPETAG_OUTPUT = 10007;
1779 const JIT_TYPETAG_RESTRICT = 10008;
1780 const JIT_TYPETAG_SYS_BOOL = 10009;
1781 const JIT_TYPETAG_SYS_CHAR = 10010;
1782 const JIT_TYPETAG_SYS_SCHAR = 10011;
1783 const JIT_TYPETAG_SYS_UCHAR = 10012;
1784 const JIT_TYPETAG_SYS_SHORT = 10013;
1785 const JIT_TYPETAG_SYS_USHORT = 10014;
1786 const JIT_TYPETAG_SYS_INT = 10015;
1787 const JIT_TYPETAG_SYS_UINT = 10016;
1788 const JIT_TYPETAG_SYS_LONG = 10017;
1789 const JIT_TYPETAG_SYS_ULONG = 10018;
1790 const JIT_TYPETAG_SYS_LONGLONG = 10019;
1791 const JIT_TYPETAG_SYS_ULONGLONG = 10020;
1792 const JIT_TYPETAG_SYS_FLOAT = 10021;
1793 const JIT_TYPETAG_SYS_DOUBLE = 10022;
1794 const JIT_TYPETAG_SYS_LONGDOUBLE = 10023;
1796 (*
1797 * ABI types for function signatures.
1798 *)
1799 type jit_abi_t = (
1800 jit_abi_cdecl, (* Native C calling conventions *)
1801 jit_abi_vararg, (* Native C with optional variable arguments *)
1802 jit_abi_stdcall, (* Win32 STDCALL (same as cdecl if not Win32) *)
1803 jit_abi_fastcall (* Win32 FASTCALL (same as cdecl if not Win32) *)
1804 );
1806 (*
1807 * External function declarations.
1808 *)
1809 function jit_type_copy (type_: jit_type_t): jit_type_t; libraryLibJITDecl;
1810 procedure jit_type_free (type_: jit_type_t); libraryLibJITDecl;
1811 function jit_type_create_struct (fields: pjit_type_t; num_fields: LongWord; incref: Integer): jit_type_t; libraryLibJITDecl;
1812 function jit_type_create_union (fields: pjit_type_t; num_fields: LongWord; incref: Integer): jit_type_t; libraryLibJITDecl;
1813 function jit_type_create_signature (abi: jit_abi_t; return_type: jit_type_t; params: pjit_type_t; num_params: LongWord; incref: Integer): jit_type_t; libraryLibJITDecl;
1814 function jit_type_create_pointer (type_: jit_type_t; incref: Integer): jit_type_t; libraryLibJITDecl;
1815 function jit_type_create_tagged (type_: jit_type_t; kind: Integer; data: Pointer; free_func: jit_meta_free_func; incref: Integer): jit_type_t; libraryLibJITDecl;
1816 function jit_type_set_names (type_: jit_type_t; names: PPAnsiChar; num_names: LongWord): Integer; libraryLibJITDecl;
1817 procedure jit_type_set_size_and_alignment (type_: jit_type_t; size: jit_nint; alignment: jit_nint); libraryLibJITDecl;
1818 procedure jit_type_set_offset (type_: jit_type_t; field_index: LongWord; offset: jit_nuint); libraryLibJITDecl;
1819 function jit_type_get_kind (type_: jit_type_t): Integer; libraryLibJITDecl;
1820 function jit_type_get_size (type_: jit_type_t): jit_nuint; libraryLibJITDecl;
1821 function jit_type_get_alignment (type_: jit_type_t): jit_nuint; libraryLibJITDecl;
1822 function jit_type_num_fields (type_: jit_type_t): LongWord; libraryLibJITDecl;
1823 function jit_type_get_field (type_: jit_type_t; field_index: LongWord): jit_type_t; libraryLibJITDecl;
1824 function jit_type_get_offset (type_: jit_type_t; field_index: LongWord): jit_nuint; libraryLibJITDecl;
1825 function jit_type_get_name (type_: jit_type_t; index: LongWord): PAnsiChar; libraryLibJITDecl; // const
1826 const JIT_INVALID_NAME = LongWord(not ((LongWord(0))));
1827 function jit_type_find_name (type_: jit_type_t; const name: PAnsiChar): LongWord; libraryLibJITDecl;
1828 function jit_type_num_params (type_: jit_type_t): LongWord; libraryLibJITDecl;
1829 function jit_type_get_return (type_: jit_type_t): jit_type_t; libraryLibJITDecl;
1830 function jit_type_get_param (type_: jit_type_t; param_index: LongWord): jit_type_t; libraryLibJITDecl;
1831 function jit_type_get_abi (type_: jit_type_t): jit_abi_t; libraryLibJITDecl;
1832 function jit_type_get_ref (type_: jit_type_t): jit_type_t; libraryLibJITDecl;
1833 function jit_type_get_tagged_type (type_: jit_type_t): jit_type_t; libraryLibJITDecl;
1834 procedure jit_type_set_tagged_type (type_: jit_type_t; underlying: jit_type_t; incref: Integer); libraryLibJITDecl;
1835 function jit_type_get_tagged_kind (type_: jit_type_t): Integer; libraryLibJITDecl;
1836 function jit_type_get_tagged_data (type_: jit_type_t): Pointer; libraryLibJITDecl;
1837 procedure jit_type_set_tagged_data (type_: jit_type_t; data: Pointer; free_func: jit_meta_free_func); libraryLibJITDecl;
1838 function jit_type_is_primitive (type_: jit_type_t): Integer; libraryLibJITDecl;
1839 function jit_type_is_struct (type_: jit_type_t): Integer; libraryLibJITDecl;
1840 function jit_type_is_union (type_: jit_type_t): Integer; libraryLibJITDecl;
1841 function jit_type_is_signature (type_: jit_type_t): Integer; libraryLibJITDecl;
1842 function jit_type_is_pointer (type_: jit_type_t): Integer; libraryLibJITDecl;
1843 function jit_type_is_tagged (type_: jit_type_t): Integer; libraryLibJITDecl;
1844 function jit_type_best_alignment (): jit_nuint; libraryLibJITDecl;
1845 function jit_type_normalize (type_: jit_type_t): jit_type_t; libraryLibJITDecl;
1846 function jit_type_remove_tags (type_: jit_type_t): jit_type_t; libraryLibJITDecl;
1847 function jit_type_promote_int (type_: jit_type_t): jit_type_t; libraryLibJITDecl;
1848 function jit_type_return_via_pointer (type_: jit_type_t): Integer; libraryLibJITDecl;
1849 function jit_type_has_tag (type_: jit_type_t; kind: Integer): Integer; libraryLibJITDecl;
1852 type jit_unwind_context_t = record
1853 frame: Pointer;
1854 cache: Pointer;
1855 context: jit_context_t;
1856 (*k8: it isn't here in x86/x86_65/arm/generic
1857 #ifdef _JIT_ARCH_UNWIND_DATA
1858 _JIT_ARCH_UNWIND_DATA
1859 #endif
1860 *)
1861 end;
1862 type pjit_unwind_context_t = ^jit_unwind_context_t;
1864 function jit_unwind_init (unwind: pjit_unwind_context_t; context: jit_context_t): Integer; libraryLibJITDecl;
1865 procedure jit_unwind_free (unwind: pjit_unwind_context_t); libraryLibJITDecl;
1867 function jit_unwind_next (unwind: pjit_unwind_context_t): Integer; libraryLibJITDecl;
1868 function jit_unwind_next_pc (unwind: pjit_unwind_context_t): Integer; libraryLibJITDecl;
1869 function jit_unwind_get_pc (unwind: pjit_unwind_context_t): Pointer; libraryLibJITDecl;
1871 function jit_unwind_jump (unwind: pjit_unwind_context_t; pc: Pointer): Integer; libraryLibJITDecl;
1873 function jit_unwind_get_function (unwind: pjit_unwind_context_t): jit_function_t; libraryLibJITDecl;
1874 function jit_unwind_get_offset (unwind: pjit_unwind_context_t): LongWord; libraryLibJITDecl;
1877 (*
1878 * Memory allocation routines.
1879 *)
1880 function jit_malloc (size: LongWord): Pointer; libraryLibJITDecl;
1881 function jit_calloc (num: LongWord; size: LongWord): Pointer; libraryLibJITDecl;
1882 function jit_realloc (ptr: Pointer; size: LongWord): Pointer; libraryLibJITDecl;
1883 procedure jit_free (ptr: Pointer); libraryLibJITDecl;
1885 (*
1886 #define jit_new(type) ((type * )jit_malloc(sizeof(type_)))
1887 #define jit_cnew(type_) ((type_ * )jit_calloc(1; sizeof(type_)))
1888 *)
1890 (*
1891 * Memory set/copy/compare routines.
1892 *)
1893 function jit_memset (dest: Pointer; ch: Integer; len: LongWord): Pointer; libraryLibJITDecl;
1894 function jit_memcpy (dest: Pointer; const src: Pointer; len: LongWord): Pointer; libraryLibJITDecl;
1895 function jit_memmove (dest: Pointer; const src: Pointer; len: LongWord): Pointer; libraryLibJITDecl;
1896 function jit_memcmp (const s1: Pointer; const s2: Pointer; len: LongWord): Integer; libraryLibJITDecl;
1897 function jit_memchr (const str: Pointer; ch: Integer; len: LongWord): Pointer; libraryLibJITDecl;
1899 (*
1900 * String routines.
1901 *)
1902 function jit_strlen (const str: PAnsiChar): LongWord; libraryLibJITDecl;
1903 function jit_strcpy (dest: PAnsiChar; const src: PAnsiChar): PAnsiChar; libraryLibJITDecl;
1904 function jit_strcat (dest: PAnsiChar; const src: PAnsiChar): PAnsiChar; libraryLibJITDecl;
1905 function jit_strncpy (dest: PAnsiChar; const src: PAnsiChar; len: LongWord): PAnsiChar; libraryLibJITDecl;
1906 function jit_strdup (const str: PAnsiChar): PAnsiChar; libraryLibJITDecl;
1907 function jit_strndup (const str: PAnsiChar; len: LongWord): PAnsiChar; libraryLibJITDecl;
1908 function jit_strcmp (const str1: PAnsiChar; const str2: PAnsiChar): Integer; libraryLibJITDecl;
1909 function jit_strncmp (const str1: PAnsiChar; const str2: PAnsiChar; len: LongWord): Integer; libraryLibJITDecl;
1910 function jit_stricmp (const str1: PAnsiChar; const str2: PAnsiChar): Integer; libraryLibJITDecl;
1911 function jit_strnicmp (const str1: PAnsiChar; const str2: PAnsiChar; len: LongWord): Integer; libraryLibJITDecl;
1912 function jit_strchr (const str: PAnsiChar; ch: Integer): PAnsiChar; libraryLibJITDecl;
1913 function jit_strrchr (const str: PAnsiChar; ch: Integer): PAnsiChar; libraryLibJITDecl;
1914 {$IFNDEF MSWINDOWS}
1915 function jit_sprintf (str: PAnsiChar; const format: PAnsiChar): Integer; libraryLibJITDecl; varargs;
1916 function jit_snprintf (str: PAnsiChar; len: LongWord; const format: PAnsiChar): Integer; libraryLibJITDecl; varargs;
1917 {$ENDIF}
1920 (*
1921 * Full struction that can hold a constant of any type.
1922 *)
1923 type jit_constant_t = record
1924 type_: jit_type_t;
1925 case Integer of
1926 TJIT_TYPE_PTR: (ptr_value: Pointer);
1927 TJIT_TYPE_INT: (int_value: jit_int);
1928 TJIT_TYPE_UINT: (uint_value: jit_uint);
1929 TJIT_TYPE_NINT: (nint_value: jit_nint);
1930 TJIT_TYPE_NUINT: (nuint_value: jit_nuint);
1931 TJIT_TYPE_LONG: (long_value: jit_long);
1932 TJIT_TYPE_ULONG: (ulong_value: jit_ulong);
1933 TJIT_TYPE_FLOAT32: (float32_value: jit_float32);
1934 TJIT_TYPE_FLOAT64: (float64_value: jit_float64);
1935 TJIT_TYPE_NFLOAT: (nfloat_value: jit_nfloat);
1936 (*un;*) //k8
1937 end;
1938 type pjit_constant_t = ^jit_constant_t;
1941 (*
1942 * External function declarations.
1943 *)
1944 function jit_value_create (func: jit_function_t; type_: jit_type_t): jit_value_t; libraryLibJITDecl;
1945 function jit_value_create_nint_constant (func: jit_function_t; type_: jit_type_t; const_value: jit_nint): jit_value_t; libraryLibJITDecl;
1946 function jit_value_create_long_constant (func: jit_function_t; type_: jit_type_t; const_value: jit_long): jit_value_t; libraryLibJITDecl;
1947 function jit_value_create_float32_constant (func: jit_function_t; type_: jit_type_t; const_value: jit_float32): jit_value_t; libraryLibJITDecl;
1948 function jit_value_create_float64_constant (func: jit_function_t; type_: jit_type_t; const_value: jit_float64): jit_value_t; libraryLibJITDecl;
1949 function jit_value_create_nfloat_constant (func: jit_function_t; type_: jit_type_t; const_value: jit_nfloat): jit_value_t; libraryLibJITDecl;
1950 function jit_value_create_constant (func: jit_function_t; const const_value: pjit_constant_t): jit_value_t; libraryLibJITDecl;
1951 function jit_value_get_param (func: jit_function_t; param: LongWord): jit_value_t; libraryLibJITDecl;
1952 function jit_value_get_struct_pointer (func: jit_function_t): jit_value_t; libraryLibJITDecl;
1953 function jit_value_is_temporary (value: jit_value_t): Integer; libraryLibJITDecl;
1954 function jit_value_is_local (value: jit_value_t): Integer; libraryLibJITDecl;
1955 function jit_value_is_constant (value: jit_value_t): Integer; libraryLibJITDecl;
1956 function jit_value_is_parameter (value: jit_value_t): Integer; libraryLibJITDecl;
1957 procedure jit_value_ref (func: jit_function_t; value: jit_value_t); libraryLibJITDecl;
1958 procedure jit_value_set_volatile (value: jit_value_t); libraryLibJITDecl;
1959 function jit_value_is_volatile (value: jit_value_t): Integer; libraryLibJITDecl;
1960 procedure jit_value_set_addressable (value: jit_value_t); libraryLibJITDecl;
1961 function jit_value_is_addressable (value: jit_value_t): Integer; libraryLibJITDecl;
1962 function jit_value_get_type (value: jit_value_t): jit_type_t; libraryLibJITDecl;
1963 function jit_value_get_function (value: jit_value_t): jit_function_t; libraryLibJITDecl;
1964 function jit_value_get_block (value: jit_value_t): jit_block_t; libraryLibJITDecl;
1965 function jit_value_get_context (value: jit_value_t): jit_context_t; libraryLibJITDecl;
1966 function jit_value_get_constant (value: jit_value_t): jit_constant_t; libraryLibJITDecl;
1967 function jit_value_get_nint_constant (value: jit_value_t): jit_nint; libraryLibJITDecl;
1968 function jit_value_get_long_constant (value: jit_value_t): jit_long; libraryLibJITDecl;
1969 function jit_value_get_float32_constant (value: jit_value_t): jit_float32; libraryLibJITDecl;
1970 function jit_value_get_float64_constant (value: jit_value_t): jit_float64; libraryLibJITDecl;
1971 function jit_value_get_nfloat_constant (value: jit_value_t): jit_nfloat; libraryLibJITDecl;
1972 function jit_value_is_true (value: jit_value_t): Integer; libraryLibJITDecl;
1973 function jit_constant_convert (result_: pjit_constant_t; const value: pjit_constant_t; type_: jit_type_t; overflow_check: Integer): Integer; libraryLibJITDecl;
1976 type jit_prot_t = (
1977 JIT_PROT_NONE,
1978 JIT_PROT_READ,
1979 JIT_PROT_READ_WRITE,
1980 JIT_PROT_EXEC_READ,
1981 JIT_PROT_EXEC_READ_WRITE
1982 );
1985 procedure jit_vmem_init (); libraryLibJITDecl;
1987 function jit_vmem_page_size (): jit_uint; libraryLibJITDecl;
1988 function jit_vmem_round_up (value: jit_nuint): jit_nuint; libraryLibJITDecl;
1989 function jit_vmem_round_down (value: jit_nuint): jit_nuint; libraryLibJITDecl;
1991 function jit_vmem_reserve (size: jit_uint): Pointer; libraryLibJITDecl;
1992 function jit_vmem_reserve_committed (size: jit_uint; prot: jit_prot_t): Pointer; libraryLibJITDecl;
1993 function jit_vmem_release (addr: Pointer; size: jit_uint): Integer; libraryLibJITDecl;
1995 function jit_vmem_commit (addr: Pointer; size: jit_uint; prot: jit_prot_t): Integer; libraryLibJITDecl;
1996 function jit_vmem_decommit (addr: Pointer; size: jit_uint): Integer; libraryLibJITDecl;
1998 function jit_vmem_protect (addr: Pointer; size: jit_uint; prot: jit_prot_t): Integer; libraryLibJITDecl;
2001 (*
2002 * Result values for "_jit_cache_start_function" and "_jit_cache_end_function".
2003 *)
2004 const JIT_MEMORY_OK = 0; (* Function is OK *)
2005 const JIT_MEMORY_RESTART = 1; (* Restart is required *)
2006 const JIT_MEMORY_TOO_BIG = 2; (* Function is too big for the cache *)
2007 const JIT_MEMORY_ERROR = 3; (* Other error *)
2010 (* TODO: the proper place for this is jit-def.h and it's going to depend on the platform. *)
2011 type jit_size_t = LongWord;
2013 type jit_memory_context_t = Pointer;
2014 type jit_function_info_t = Pointer;
2016 type jit_memory_manager = record
2017 create: function (context: jit_context_t): jit_memory_context_t; libraryLibJITDecl;
2018 destroy: procedure (memctx: jit_memory_context_t); libraryLibJITDecl;
2020 find_function_info: function (memctx: jit_memory_context_t; pc: Pointer): jit_function_info_t; libraryLibJITDecl;
2021 get_function: function (memctx: jit_memory_context_t; info: jit_function_info_t): jit_function_t; libraryLibJITDecl;
2022 get_function_start: function (memctx: jit_memory_context_t; info: jit_function_info_t): Pointer; libraryLibJITDecl;
2023 get_function_end: function (memctx: jit_memory_context_t; info: jit_function_info_t): Pointer; libraryLibJITDecl;
2025 alloc_function: function (memctx: jit_memory_context_t): jit_function_t; libraryLibJITDecl;
2026 free_function: procedure (memctx: jit_memory_context_t; func: jit_function_t); libraryLibJITDecl;
2028 start_function: function (memctx: jit_memory_context_t; func: jit_function_t): Integer; libraryLibJITDecl;
2029 end_function: function (memctx: jit_memory_context_t; result_: Integer): Integer; libraryLibJITDecl;
2030 extend_limit: function (memctx: jit_memory_context_t; count: Integer): Integer; libraryLibJITDecl;
2032 get_limit: function (memctx: jit_memory_context_t): Pointer; libraryLibJITDecl;
2033 get_break: function (memctx: jit_memory_context_t): Pointer; libraryLibJITDecl;
2034 set_break: procedure (memctx: jit_memory_context_t; brk: Pointer); libraryLibJITDecl;
2036 alloc_trampoline: function (memctx: jit_memory_context_t): Pointer; libraryLibJITDecl;
2037 free_trampoline: procedure (memctx: jit_memory_context_t; ptr: Pointer); libraryLibJITDecl;
2039 alloc_closure: function (memctx: jit_memory_context_t): Pointer; libraryLibJITDecl;
2040 free_closure: procedure (memctx: jit_memory_context_t; ptr: Pointer); libraryLibJITDecl;
2042 alloc_data: function (memctx: jit_memory_context_t; size: jit_size_t; align_: jit_size_t): Pointer; libraryLibJITDecl;
2043 end;
2044 type jit_memory_manager_t = (*const(jit_memory_manager)* *)^jit_memory_manager; //k8: const?! was const in C header
2046 function jit_default_memory_manager (): jit_memory_manager_t; libraryLibJITDecl;
2047 procedure jit_context_set_memory_manager (context: jit_context_t; manager: jit_memory_manager_t); libraryLibJITDecl;
2050 (*
2051 import core.stdc.stdio : FILE;
2053 procedure jit_dump_type (FILE* stream; type_: jit_type_t); libraryLibJITDecl;
2054 procedure jit_dump_value (FILE* stream; func: value: jit_function_t;: jit_value_t; const prefix: PAnsiChar); libraryLibJITDecl;
2055 procedure jit_dump_insn (FILE* stream; func: jit_function_t; insn: jit_insn_t); libraryLibJITDecl;
2056 procedure jit_dump_function (FILE* stream; func: jit_function_t; const name: PAnsiChar); libraryLibJITDecl;
2057 *)
2060 (*
2061 * Get the frame address for a frame which is "n" levels up the stack.
2062 * A level value of zero indicates the current frame.
2063 *)
2064 //k8 void* _jit_get_frame_address (void* start, uint n) nothrow @nogc;
2065 (*k8: not complete
2066 #if defined(__GNUC__)
2067 # define jit_get_frame_address(n) \
2068 (_jit_get_frame_address(jit_get_current_frame(), (n)))
2069 #else
2070 # define jit_get_frame_address(n) (_jit_get_frame_address(0, (n)))
2071 #endif
2072 *)
2074 (*
2075 * Get the frame address for the current frame. May be more efficient
2076 * than using "jit_get_frame_address(0)".
2078 * Note: some gcc vestions have broken __builtin_frame_address() so use
2079 * _JIT_ARCH_GET_CURRENT_FRAME() if available.
2080 *)
2081 (*k8:???
2082 #if defined(__GNUC__)
2083 # define JIT_FAST_GET_CURRENT_FRAME 1
2084 # if defined(_JIT_ARCH_GET_CURRENT_FRAME)
2085 # define jit_get_current_frame() \
2086 ({ \
2087 void* address; \
2088 _JIT_ARCH_GET_CURRENT_FRAME(address); \
2089 address; \
2090 })
2091 # else
2092 # define jit_get_current_frame() (__builtin_frame_address(0))
2093 # endif
2094 #else
2095 # define JIT_FAST_GET_CURRENT_FRAME 0
2096 # define jit_get_current_frame() (jit_get_frame_address(0))
2097 #endif
2099 ( *
2100 * Get the next frame up the stack from a specified frame.
2101 * Returns NULL if it isn't possible to retrieve the next frame.
2102 * )
2103 Pointer _jit_get_next_frame_address(Pointer frame);
2104 #if defined(__GNUC__) && defined(_JIT_ARCH_GET_NEXT_FRAME)
2105 # define jit_get_next_frame_address(frame) \
2106 ({ \
2107 void* address; \
2108 _JIT_ARCH_GET_NEXT_FRAME(address, (frame)); \
2109 address; \
2110 })
2111 #else
2112 # define jit_get_next_frame_address(frame) \
2113 (_jit_get_next_frame_address(frame))
2114 #endif
2116 ( *
2117 * Get the return address for a specific frame.
2118 * )
2119 Pointer _jit_get_return_address(Pointer frame; Pointer frame0; Pointer return0);
2120 #if defined(__GNUC__)
2121 # if defined(_JIT_ARCH_GET_RETURN_ADDRESS)
2122 # define jit_get_return_address(frame) \
2123 ({ \
2124 void* address; \
2125 _JIT_ARCH_GET_RETURN_ADDRESS(address, (frame)); \
2126 address; \
2127 })
2128 # else
2129 # define jit_get_return_address(frame) \
2130 (_jit_get_return_address \
2131 ((frame); \
2132 __builtin_frame_address(0); \
2133 __builtin_return_address(0)))
2134 # endif
2135 #else
2136 # define jit_get_return_address(frame) \
2137 (_jit_get_return_address((frame); 0; 0))
2138 #endif
2140 ( *
2141 * Get the return address for the current frame. May be more efficient
2142 * than using "jit_get_return_address(0)".
2143 * )
2144 #if defined(__GNUC__)
2145 # if defined(_JIT_ARCH_GET_CURRENT_RETURN)
2146 # define jit_get_current_return() \
2147 ({ \
2148 void* address; \
2149 _JIT_ARCH_GET_CURRENT_RETURN(address); \
2150 address; \
2151 })
2152 # else
2153 # define jit_get_current_return() (__builtin_return_address(0))
2154 # endif
2155 #else
2156 # define jit_get_current_return() \
2157 (jit_get_return_address(jit_get_current_frame()))
2158 #endif
2159 *)
2161 (*
2162 * Declare a stack crawl mark variable. The address of this variable
2163 * can be passed to "jit_frame_contains_crawl_mark" to determine
2164 * if a frame contains the mark.
2165 *)
2166 //k8:??? struct jit_crawl_mark_t { void* volatile mark; }
2167 //k8:??? #define jit_declare_crawl_mark(name) jit_crawl_mark_t name = {0}
2169 (*
2170 * Determine if the stack frame just above "frame" contains a
2171 * particular crawl mark.
2172 *)
2173 //k8:??? int jit_frame_contains_crawl_mark(void* frame, jit_crawl_mark_t* mark);
2176 implementation
2178 function jit_context_create; libraryLibJITImp;
2179 procedure jit_context_destroy; libraryLibJITImp;
2180 procedure jit_context_build_start; libraryLibJITImp;
2181 procedure jit_context_build_end; libraryLibJITImp;
2182 procedure jit_context_set_on_demand_driver; libraryLibJITImp;
2183 function jit_context_set_meta; libraryLibJITImp;
2184 function jit_context_set_meta_numeric; libraryLibJITImp;
2185 function jit_context_get_meta; libraryLibJITImp;
2186 function jit_context_get_meta_numeric; libraryLibJITImp;
2187 procedure jit_context_free_meta; libraryLibJITImp;
2188 procedure jit_apply; libraryLibJITImp;
2189 procedure jit_apply_raw; libraryLibJITImp;
2190 function jit_raw_supported; libraryLibJITImp;
2191 function jit_closure_create; libraryLibJITImp;
2192 function jit_closure_va_get_nint; libraryLibJITImp;
2193 function jit_closure_va_get_nuint; libraryLibJITImp;
2194 function jit_closure_va_get_long; libraryLibJITImp;
2195 function jit_closure_va_get_ulong; libraryLibJITImp;
2196 function jit_closure_va_get_float32; libraryLibJITImp;
2197 function jit_closure_va_get_float64; libraryLibJITImp;
2198 function jit_closure_va_get_nfloat; libraryLibJITImp;
2199 function jit_closure_va_get_ptr; libraryLibJITImp;
2200 procedure jit_closure_va_get_struct; libraryLibJITImp;
2201 function jit_block_get_function; libraryLibJITImp;
2202 function jit_block_get_context; libraryLibJITImp;
2203 function jit_block_get_label; libraryLibJITImp;
2204 function jit_block_get_next_label; libraryLibJITImp;
2205 function jit_block_next; libraryLibJITImp;
2206 function jit_block_previous; libraryLibJITImp;
2207 function jit_block_from_label; libraryLibJITImp;
2208 function jit_block_set_meta; libraryLibJITImp;
2209 function jit_block_get_meta; libraryLibJITImp;
2210 procedure jit_block_free_meta; libraryLibJITImp;
2211 function jit_block_is_reachable; libraryLibJITImp;
2212 function jit_block_ends_in_dead; libraryLibJITImp;
2213 function jit_block_current_is_dead; libraryLibJITImp;
2214 function jit_debugging_possible; libraryLibJITImp;
2215 function jit_debugger_create; libraryLibJITImp;
2216 procedure jit_debugger_destroy; libraryLibJITImp;
2217 function jit_debugger_get_context; libraryLibJITImp;
2218 function jit_debugger_from_context; libraryLibJITImp;
2219 function jit_debugger_get_self; libraryLibJITImp;
2220 function jit_debugger_get_thread; libraryLibJITImp;
2221 function jit_debugger_get_native_thread; libraryLibJITImp;
2222 procedure jit_debugger_set_breakable; libraryLibJITImp;
2223 procedure jit_debugger_attach_self; libraryLibJITImp;
2224 procedure jit_debugger_detach_self; libraryLibJITImp;
2225 function jit_debugger_wait_event; libraryLibJITImp;
2226 function jit_debugger_add_breakpoint; libraryLibJITImp;
2227 procedure jit_debugger_remove_breakpoint; libraryLibJITImp;
2228 procedure jit_debugger_remove_all_breakpoints; libraryLibJITImp;
2229 function jit_debugger_is_alive; libraryLibJITImp;
2230 function jit_debugger_is_running; libraryLibJITImp;
2231 procedure jit_debugger_run; libraryLibJITImp;
2232 procedure jit_debugger_step; libraryLibJITImp;
2233 procedure jit_debugger_next; libraryLibJITImp;
2234 procedure jit_debugger_finish; libraryLibJITImp;
2235 procedure jit_debugger_break; libraryLibJITImp;
2236 procedure jit_debugger_quit; libraryLibJITImp;
2237 function jit_debugger_set_hook; libraryLibJITImp;
2238 function jit_readelf_open; libraryLibJITImp;
2239 procedure jit_readelf_close; libraryLibJITImp;
2240 function jit_readelf_get_name; libraryLibJITImp;
2241 function jit_readelf_get_symbol; libraryLibJITImp;
2242 function jit_readelf_get_section; libraryLibJITImp;
2243 function jit_readelf_get_section_by_type; libraryLibJITImp;
2244 function jit_readelf_map_vaddr; libraryLibJITImp;
2245 function jit_readelf_num_needed; libraryLibJITImp;
2246 function jit_readelf_get_needed; libraryLibJITImp;
2247 procedure jit_readelf_add_to_context; libraryLibJITImp;
2248 function jit_readelf_resolve_all; libraryLibJITImp;
2249 function jit_readelf_register_symbol; libraryLibJITImp;
2250 function jit_writeelf_create; libraryLibJITImp;
2251 procedure jit_writeelf_destroy; libraryLibJITImp;
2252 function jit_writeelf_write; libraryLibJITImp;
2253 function jit_writeelf_add_function; libraryLibJITImp;
2254 function jit_writeelf_add_needed; libraryLibJITImp;
2255 function jit_writeelf_write_section; libraryLibJITImp;
2256 function jit_exception_get_last; libraryLibJITImp;
2257 function jit_exception_get_last_and_clear; libraryLibJITImp;
2258 procedure jit_exception_set_last; libraryLibJITImp;
2259 procedure jit_exception_clear_last; libraryLibJITImp;
2260 procedure jit_exception_throw; libraryLibJITImp;
2261 procedure jit_exception_builtin; libraryLibJITImp;
2262 function jit_exception_set_handler; libraryLibJITImp;
2263 function jit_exception_get_handler; libraryLibJITImp;
2264 function jit_exception_get_stack_trace; libraryLibJITImp;
2265 function jit_stack_trace_get_size; libraryLibJITImp;
2266 function jit_stack_trace_get_function; libraryLibJITImp;
2267 function jit_stack_trace_get_pc; libraryLibJITImp;
2268 function jit_stack_trace_get_offset; libraryLibJITImp;
2269 procedure jit_stack_trace_free; libraryLibJITImp;
2270 function jit_function_create; libraryLibJITImp;
2271 function jit_function_create_nested; libraryLibJITImp;
2272 procedure jit_function_abandon; libraryLibJITImp;
2273 function jit_function_get_context; libraryLibJITImp;
2274 function jit_function_get_signature; libraryLibJITImp;
2275 function jit_function_set_meta; libraryLibJITImp;
2276 function jit_function_get_meta; libraryLibJITImp;
2277 procedure jit_function_free_meta; libraryLibJITImp;
2278 function jit_function_next; libraryLibJITImp;
2279 function jit_function_previous; libraryLibJITImp;
2280 function jit_function_get_entry; libraryLibJITImp;
2281 function jit_function_get_current; libraryLibJITImp;
2282 function jit_function_get_nested_parent; libraryLibJITImp;
2283 function jit_function_compile; libraryLibJITImp;
2284 function jit_function_is_compiled; libraryLibJITImp;
2285 procedure jit_function_set_recompilable; libraryLibJITImp;
2286 procedure jit_function_clear_recompilable; libraryLibJITImp;
2287 function jit_function_is_recompilable; libraryLibJITImp;
2288 function jit_function_compile_entry; libraryLibJITImp;
2289 procedure jit_function_setup_entry; libraryLibJITImp;
2290 function jit_function_to_closure; libraryLibJITImp;
2291 function jit_function_from_closure; libraryLibJITImp;
2292 function jit_function_from_pc; libraryLibJITImp;
2293 function jit_function_to_vtable_pointer; libraryLibJITImp;
2294 function jit_function_from_vtable_pointer; libraryLibJITImp;
2295 procedure jit_function_set_on_demand_compiler; libraryLibJITImp;
2296 function jit_function_get_on_demand_compiler; libraryLibJITImp;
2297 function jit_function_apply; libraryLibJITImp;
2298 function jit_function_apply_vararg; libraryLibJITImp;
2299 procedure jit_function_set_optimization_level; libraryLibJITImp;
2300 function jit_function_get_optimization_level; libraryLibJITImp;
2301 function jit_function_get_max_optimization_level; libraryLibJITImp;
2302 function jit_function_reserve_label; libraryLibJITImp;
2303 function jit_function_labels_equal; libraryLibJITImp;
2304 procedure jit_init; libraryLibJITImp;
2305 function jit_uses_interpreter; libraryLibJITImp;
2306 function jit_supports_threads; libraryLibJITImp;
2307 function jit_supports_virtual_memory; libraryLibJITImp;
2308 function jit_supports_closures; libraryLibJITImp;
2309 function jit_get_closure_size; libraryLibJITImp;
2310 function jit_get_closure_alignment; libraryLibJITImp;
2311 function jit_get_trampoline_size; libraryLibJITImp;
2312 function jit_get_trampoline_alignment; libraryLibJITImp;
2313 function jit_insn_get_opcode; libraryLibJITImp;
2314 function jit_insn_get_dest; libraryLibJITImp;
2315 function jit_insn_get_value1; libraryLibJITImp;
2316 function jit_insn_get_value2; libraryLibJITImp;
2317 function jit_insn_get_label; libraryLibJITImp;
2318 function jit_insn_get_function; libraryLibJITImp;
2319 function jit_insn_get_native; libraryLibJITImp;
2320 function jit_insn_get_name; libraryLibJITImp;
2321 function jit_insn_get_signature; libraryLibJITImp;
2322 function jit_insn_dest_is_value; libraryLibJITImp;
2323 function jit_insn_label; libraryLibJITImp;
2324 function jit_insn_label_tight; libraryLibJITImp;
2325 function jit_insn_new_block; libraryLibJITImp;
2326 function jit_insn_load; libraryLibJITImp;
2327 function jit_insn_dup; libraryLibJITImp;
2328 function jit_insn_store; libraryLibJITImp;
2329 function jit_insn_load_relative; libraryLibJITImp;
2330 function jit_insn_store_relative; libraryLibJITImp;
2331 function jit_insn_add_relative; libraryLibJITImp;
2332 function jit_insn_load_elem; libraryLibJITImp;
2333 function jit_insn_load_elem_address; libraryLibJITImp;
2334 function jit_insn_store_elem; libraryLibJITImp;
2335 function jit_insn_check_null; libraryLibJITImp;
2336 function jit_insn_nop; libraryLibJITImp;
2337 function jit_insn_add; libraryLibJITImp;
2338 function jit_insn_add_ovf; libraryLibJITImp;
2339 function jit_insn_sub; libraryLibJITImp;
2340 function jit_insn_sub_ovf; libraryLibJITImp;
2341 function jit_insn_mul; libraryLibJITImp;
2342 function jit_insn_mul_ovf; libraryLibJITImp;
2343 function jit_insn_div; libraryLibJITImp;
2344 function jit_insn_rem; libraryLibJITImp;
2345 function jit_insn_rem_ieee; libraryLibJITImp;
2346 function jit_insn_neg; libraryLibJITImp;
2347 function jit_insn_and; libraryLibJITImp;
2348 function jit_insn_or; libraryLibJITImp;
2349 function jit_insn_xor; libraryLibJITImp;
2350 function jit_insn_not; libraryLibJITImp;
2351 function jit_insn_shl; libraryLibJITImp;
2352 function jit_insn_shr; libraryLibJITImp;
2353 function jit_insn_ushr; libraryLibJITImp;
2354 function jit_insn_sshr; libraryLibJITImp;
2355 function jit_insn_eq; libraryLibJITImp;
2356 function jit_insn_ne; libraryLibJITImp;
2357 function jit_insn_lt; libraryLibJITImp;
2358 function jit_insn_le; libraryLibJITImp;
2359 function jit_insn_gt; libraryLibJITImp;
2360 function jit_insn_ge; libraryLibJITImp;
2361 function jit_insn_cmpl; libraryLibJITImp;
2362 function jit_insn_cmpg; libraryLibJITImp;
2363 function jit_insn_to_bool; libraryLibJITImp;
2364 function jit_insn_to_not_bool; libraryLibJITImp;
2365 function jit_insn_acos; libraryLibJITImp;
2366 function jit_insn_asin; libraryLibJITImp;
2367 function jit_insn_atan; libraryLibJITImp;
2368 function jit_insn_atan2; libraryLibJITImp;
2369 function jit_insn_ceil; libraryLibJITImp;
2370 function jit_insn_cos; libraryLibJITImp;
2371 function jit_insn_cosh; libraryLibJITImp;
2372 function jit_insn_exp; libraryLibJITImp;
2373 function jit_insn_floor; libraryLibJITImp;
2374 function jit_insn_log; libraryLibJITImp;
2375 function jit_insn_log10; libraryLibJITImp;
2376 function jit_insn_pow; libraryLibJITImp;
2377 function jit_insn_rint; libraryLibJITImp;
2378 function jit_insn_round; libraryLibJITImp;
2379 function jit_insn_sin; libraryLibJITImp;
2380 function jit_insn_sinh; libraryLibJITImp;
2381 function jit_insn_sqrt; libraryLibJITImp;
2382 function jit_insn_tan; libraryLibJITImp;
2383 function jit_insn_tanh; libraryLibJITImp;
2384 function jit_insn_trunc; libraryLibJITImp;
2385 function jit_insn_is_nan; libraryLibJITImp;
2386 function jit_insn_is_finite; libraryLibJITImp;
2387 function jit_insn_is_inf; libraryLibJITImp;
2388 function jit_insn_abs; libraryLibJITImp;
2389 function jit_insn_min; libraryLibJITImp;
2390 function jit_insn_max; libraryLibJITImp;
2391 function jit_insn_sign; libraryLibJITImp;
2392 function jit_insn_branch; libraryLibJITImp;
2393 function jit_insn_branch_if; libraryLibJITImp;
2394 function jit_insn_branch_if_not; libraryLibJITImp;
2395 function jit_insn_jump_table; libraryLibJITImp;
2396 function jit_insn_address_of; libraryLibJITImp;
2397 function jit_insn_address_of_label; libraryLibJITImp;
2398 function jit_insn_convert; libraryLibJITImp;
2399 function jit_insn_call; libraryLibJITImp;
2400 function jit_insn_call_indirect; libraryLibJITImp;
2401 function jit_insn_call_indirect_vtable; libraryLibJITImp;
2402 function jit_insn_call_native; libraryLibJITImp;
2403 function jit_insn_call_intrinsic; libraryLibJITImp;
2404 function jit_insn_incoming_reg; libraryLibJITImp;
2405 function jit_insn_incoming_frame_posn; libraryLibJITImp;
2406 function jit_insn_outgoing_reg; libraryLibJITImp;
2407 function jit_insn_outgoing_frame_posn; libraryLibJITImp;
2408 function jit_insn_return_reg; libraryLibJITImp;
2409 function jit_insn_setup_for_nested; libraryLibJITImp;
2410 function jit_insn_flush_struct; libraryLibJITImp;
2411 function jit_insn_import; libraryLibJITImp;
2412 function jit_insn_push; libraryLibJITImp;
2413 function jit_insn_push_ptr; libraryLibJITImp;
2414 function jit_insn_set_param; libraryLibJITImp;
2415 function jit_insn_set_param_ptr; libraryLibJITImp;
2416 function jit_insn_push_return_area_ptr; libraryLibJITImp;
2417 function jit_insn_pop_stack; libraryLibJITImp;
2418 function jit_insn_defer_pop_stack; libraryLibJITImp;
2419 function jit_insn_flush_defer_pop; libraryLibJITImp;
2420 function jit_insn_return; libraryLibJITImp;
2421 function jit_insn_return_ptr; libraryLibJITImp;
2422 function jit_insn_default_return; libraryLibJITImp;
2423 function jit_insn_throw; libraryLibJITImp;
2424 function jit_insn_get_call_stack; libraryLibJITImp;
2425 function jit_insn_thrown_exception; libraryLibJITImp;
2426 function jit_insn_uses_catcher; libraryLibJITImp;
2427 function jit_insn_start_catcher; libraryLibJITImp;
2428 function jit_insn_branch_if_pc_not_in_range; libraryLibJITImp;
2429 function jit_insn_rethrow_unhandled; libraryLibJITImp;
2430 function jit_insn_start_finally; libraryLibJITImp;
2431 function jit_insn_return_from_finally; libraryLibJITImp;
2432 function jit_insn_call_finally; libraryLibJITImp;
2433 function jit_insn_start_filter; libraryLibJITImp;
2434 function jit_insn_return_from_filter; libraryLibJITImp;
2435 function jit_insn_call_filter; libraryLibJITImp;
2436 function jit_insn_memcpy; libraryLibJITImp;
2437 function jit_insn_memmove; libraryLibJITImp;
2438 function jit_insn_memset; libraryLibJITImp;
2439 function jit_insn_alloca; libraryLibJITImp;
2440 function jit_insn_move_blocks_to_end; libraryLibJITImp;
2441 function jit_insn_move_blocks_to_start; libraryLibJITImp;
2442 function jit_insn_mark_offset; libraryLibJITImp;
2443 function jit_insn_mark_breakpoint; libraryLibJITImp;
2444 function jit_insn_mark_breakpoint_variable; libraryLibJITImp;
2445 procedure jit_insn_iter_init; libraryLibJITImp;
2446 procedure jit_insn_iter_init_last; libraryLibJITImp;
2447 function jit_insn_iter_next; libraryLibJITImp;
2448 function jit_insn_iter_previous; libraryLibJITImp;
2449 function jit_int_add; libraryLibJITImp;
2450 function jit_int_sub; libraryLibJITImp;
2451 function jit_int_mul; libraryLibJITImp;
2452 function jit_int_div; libraryLibJITImp;
2453 function jit_int_rem; libraryLibJITImp;
2454 function jit_int_add_ovf; libraryLibJITImp;
2455 function jit_int_sub_ovf; libraryLibJITImp;
2456 function jit_int_mul_ovf; libraryLibJITImp;
2457 function jit_int_neg; libraryLibJITImp;
2458 function jit_int_and; libraryLibJITImp;
2459 function jit_int_or; libraryLibJITImp;
2460 function jit_int_xor; libraryLibJITImp;
2461 function jit_int_not; libraryLibJITImp;
2462 function jit_int_shl; libraryLibJITImp;
2463 function jit_int_shr; libraryLibJITImp;
2464 function jit_int_eq; libraryLibJITImp;
2465 function jit_int_ne; libraryLibJITImp;
2466 function jit_int_lt; libraryLibJITImp;
2467 function jit_int_le; libraryLibJITImp;
2468 function jit_int_gt; libraryLibJITImp;
2469 function jit_int_ge; libraryLibJITImp;
2470 function jit_int_cmp; libraryLibJITImp;
2471 function jit_int_abs; libraryLibJITImp;
2472 function jit_int_min; libraryLibJITImp;
2473 function jit_int_max; libraryLibJITImp;
2474 function jit_int_sign; libraryLibJITImp;
2475 function jit_uint_add; libraryLibJITImp;
2476 function jit_uint_sub; libraryLibJITImp;
2477 function jit_uint_mul; libraryLibJITImp;
2478 function jit_uint_div; libraryLibJITImp;
2479 function jit_uint_rem; libraryLibJITImp;
2480 function jit_uint_add_ovf; libraryLibJITImp;
2481 function jit_uint_sub_ovf; libraryLibJITImp;
2482 function jit_uint_mul_ovf; libraryLibJITImp;
2483 function jit_uint_neg; libraryLibJITImp;
2484 function jit_uint_and; libraryLibJITImp;
2485 function jit_uint_or; libraryLibJITImp;
2486 function jit_uint_xor; libraryLibJITImp;
2487 function jit_uint_not; libraryLibJITImp;
2488 function jit_uint_shl; libraryLibJITImp;
2489 function jit_uint_shr; libraryLibJITImp;
2490 function jit_uint_eq; libraryLibJITImp;
2491 function jit_uint_ne; libraryLibJITImp;
2492 function jit_uint_lt; libraryLibJITImp;
2493 function jit_uint_le; libraryLibJITImp;
2494 function jit_uint_gt; libraryLibJITImp;
2495 function jit_uint_ge; libraryLibJITImp;
2496 function jit_uint_cmp; libraryLibJITImp;
2497 function jit_uint_min; libraryLibJITImp;
2498 function jit_uint_max; libraryLibJITImp;
2499 function jit_long_add; libraryLibJITImp;
2500 function jit_long_sub; libraryLibJITImp;
2501 function jit_long_mul; libraryLibJITImp;
2502 function jit_long_div; libraryLibJITImp;
2503 function jit_long_rem; libraryLibJITImp;
2504 function jit_long_add_ovf; libraryLibJITImp;
2505 function jit_long_sub_ovf; libraryLibJITImp;
2506 function jit_long_mul_ovf; libraryLibJITImp;
2507 function jit_long_neg; libraryLibJITImp;
2508 function jit_long_and; libraryLibJITImp;
2509 function jit_long_or; libraryLibJITImp;
2510 function jit_long_xor; libraryLibJITImp;
2511 function jit_long_not; libraryLibJITImp;
2512 function jit_long_shl; libraryLibJITImp;
2513 function jit_long_shr; libraryLibJITImp;
2514 function jit_long_eq; libraryLibJITImp;
2515 function jit_long_ne; libraryLibJITImp;
2516 function jit_long_lt; libraryLibJITImp;
2517 function jit_long_le; libraryLibJITImp;
2518 function jit_long_gt; libraryLibJITImp;
2519 function jit_long_ge; libraryLibJITImp;
2520 function jit_long_cmp; libraryLibJITImp;
2521 function jit_long_abs; libraryLibJITImp;
2522 function jit_long_min; libraryLibJITImp;
2523 function jit_long_max; libraryLibJITImp;
2524 function jit_long_sign; libraryLibJITImp;
2525 function jit_ulong_add; libraryLibJITImp;
2526 function jit_ulong_sub; libraryLibJITImp;
2527 function jit_ulong_mul; libraryLibJITImp;
2528 function jit_ulong_div; libraryLibJITImp;
2529 function jit_ulong_rem; libraryLibJITImp;
2530 function jit_ulong_add_ovf; libraryLibJITImp;
2531 function jit_ulong_sub_ovf; libraryLibJITImp;
2532 function jit_ulong_mul_ovf; libraryLibJITImp;
2533 function jit_ulong_neg; libraryLibJITImp;
2534 function jit_ulong_and; libraryLibJITImp;
2535 function jit_ulong_or; libraryLibJITImp;
2536 function jit_ulong_xor; libraryLibJITImp;
2537 function jit_ulong_not; libraryLibJITImp;
2538 function jit_ulong_shl; libraryLibJITImp;
2539 function jit_ulong_shr; libraryLibJITImp;
2540 function jit_ulong_eq; libraryLibJITImp;
2541 function jit_ulong_ne; libraryLibJITImp;
2542 function jit_ulong_lt; libraryLibJITImp;
2543 function jit_ulong_le; libraryLibJITImp;
2544 function jit_ulong_gt; libraryLibJITImp;
2545 function jit_ulong_ge; libraryLibJITImp;
2546 function jit_ulong_cmp; libraryLibJITImp;
2547 function jit_ulong_min; libraryLibJITImp;
2548 function jit_ulong_max; libraryLibJITImp;
2549 function jit_float32_add; libraryLibJITImp;
2550 function jit_float32_sub; libraryLibJITImp;
2551 function jit_float32_mul; libraryLibJITImp;
2552 function jit_float32_div; libraryLibJITImp;
2553 function jit_float32_rem; libraryLibJITImp;
2554 function jit_float32_ieee_rem; libraryLibJITImp;
2555 function jit_float32_neg; libraryLibJITImp;
2556 function jit_float32_eq; libraryLibJITImp;
2557 function jit_float32_ne; libraryLibJITImp;
2558 function jit_float32_lt; libraryLibJITImp;
2559 function jit_float32_le; libraryLibJITImp;
2560 function jit_float32_gt; libraryLibJITImp;
2561 function jit_float32_ge; libraryLibJITImp;
2562 function jit_float32_cmpl; libraryLibJITImp;
2563 function jit_float32_cmpg; libraryLibJITImp;
2564 function jit_float32_acos; libraryLibJITImp;
2565 function jit_float32_asin; libraryLibJITImp;
2566 function jit_float32_atan; libraryLibJITImp;
2567 function jit_float32_atan2; libraryLibJITImp;
2568 function jit_float32_ceil; libraryLibJITImp;
2569 function jit_float32_cos; libraryLibJITImp;
2570 function jit_float32_cosh; libraryLibJITImp;
2571 function jit_float32_exp; libraryLibJITImp;
2572 function jit_float32_floor; libraryLibJITImp;
2573 function jit_float32_log; libraryLibJITImp;
2574 function jit_float32_log10; libraryLibJITImp;
2575 function jit_float32_pow; libraryLibJITImp;
2576 function jit_float32_rint; libraryLibJITImp;
2577 function jit_float32_round; libraryLibJITImp;
2578 function jit_float32_sin; libraryLibJITImp;
2579 function jit_float32_sinh; libraryLibJITImp;
2580 function jit_float32_sqrt; libraryLibJITImp;
2581 function jit_float32_tan; libraryLibJITImp;
2582 function jit_float32_tanh; libraryLibJITImp;
2583 function jit_float32_trunc; libraryLibJITImp;
2584 function jit_float32_is_finite; libraryLibJITImp;
2585 function jit_float32_is_nan; libraryLibJITImp;
2586 function jit_float32_is_inf; libraryLibJITImp;
2587 function jit_float32_abs; libraryLibJITImp;
2588 function jit_float32_min; libraryLibJITImp;
2589 function jit_float32_max; libraryLibJITImp;
2590 function jit_float32_sign; libraryLibJITImp;
2591 function jit_float64_add; libraryLibJITImp;
2592 function jit_float64_sub; libraryLibJITImp;
2593 function jit_float64_mul; libraryLibJITImp;
2594 function jit_float64_div; libraryLibJITImp;
2595 function jit_float64_rem; libraryLibJITImp;
2596 function jit_float64_ieee_rem; libraryLibJITImp;
2597 function jit_float64_neg; libraryLibJITImp;
2598 function jit_float64_eq; libraryLibJITImp;
2599 function jit_float64_ne; libraryLibJITImp;
2600 function jit_float64_lt; libraryLibJITImp;
2601 function jit_float64_le; libraryLibJITImp;
2602 function jit_float64_gt; libraryLibJITImp;
2603 function jit_float64_ge; libraryLibJITImp;
2604 function jit_float64_cmpl; libraryLibJITImp;
2605 function jit_float64_cmpg; libraryLibJITImp;
2606 function jit_float64_acos; libraryLibJITImp;
2607 function jit_float64_asin; libraryLibJITImp;
2608 function jit_float64_atan; libraryLibJITImp;
2609 function jit_float64_atan2; libraryLibJITImp;
2610 function jit_float64_ceil; libraryLibJITImp;
2611 function jit_float64_cos; libraryLibJITImp;
2612 function jit_float64_cosh; libraryLibJITImp;
2613 function jit_float64_exp; libraryLibJITImp;
2614 function jit_float64_floor; libraryLibJITImp;
2615 function jit_float64_log; libraryLibJITImp;
2616 function jit_float64_log10; libraryLibJITImp;
2617 function jit_float64_pow; libraryLibJITImp;
2618 function jit_float64_rint; libraryLibJITImp;
2619 function jit_float64_round; libraryLibJITImp;
2620 function jit_float64_sin; libraryLibJITImp;
2621 function jit_float64_sinh; libraryLibJITImp;
2622 function jit_float64_sqrt; libraryLibJITImp;
2623 function jit_float64_tan; libraryLibJITImp;
2624 function jit_float64_tanh; libraryLibJITImp;
2625 function jit_float64_trunc; libraryLibJITImp;
2626 function jit_float64_is_finite; libraryLibJITImp;
2627 function jit_float64_is_nan; libraryLibJITImp;
2628 function jit_float64_is_inf; libraryLibJITImp;
2629 function jit_float64_abs; libraryLibJITImp;
2630 function jit_float64_min; libraryLibJITImp;
2631 function jit_float64_max; libraryLibJITImp;
2632 function jit_float64_sign; libraryLibJITImp;
2633 function jit_nfloat_add; libraryLibJITImp;
2634 function jit_nfloat_sub; libraryLibJITImp;
2635 function jit_nfloat_mul; libraryLibJITImp;
2636 function jit_nfloat_div; libraryLibJITImp;
2637 function jit_nfloat_rem; libraryLibJITImp;
2638 function jit_nfloat_ieee_rem; libraryLibJITImp;
2639 function jit_nfloat_neg; libraryLibJITImp;
2640 function jit_nfloat_eq; libraryLibJITImp;
2641 function jit_nfloat_ne; libraryLibJITImp;
2642 function jit_nfloat_lt; libraryLibJITImp;
2643 function jit_nfloat_le; libraryLibJITImp;
2644 function jit_nfloat_gt; libraryLibJITImp;
2645 function jit_nfloat_ge; libraryLibJITImp;
2646 function jit_nfloat_cmpl; libraryLibJITImp;
2647 function jit_nfloat_cmpg; libraryLibJITImp;
2648 function jit_nfloat_acos; libraryLibJITImp;
2649 function jit_nfloat_asin; libraryLibJITImp;
2650 function jit_nfloat_atan; libraryLibJITImp;
2651 function jit_nfloat_atan2; libraryLibJITImp;
2652 function jit_nfloat_ceil; libraryLibJITImp;
2653 function jit_nfloat_cos; libraryLibJITImp;
2654 function jit_nfloat_cosh; libraryLibJITImp;
2655 function jit_nfloat_exp; libraryLibJITImp;
2656 function jit_nfloat_floor; libraryLibJITImp;
2657 function jit_nfloat_log; libraryLibJITImp;
2658 function jit_nfloat_log10; libraryLibJITImp;
2659 function jit_nfloat_pow; libraryLibJITImp;
2660 function jit_nfloat_rint; libraryLibJITImp;
2661 function jit_nfloat_round; libraryLibJITImp;
2662 function jit_nfloat_sin; libraryLibJITImp;
2663 function jit_nfloat_sinh; libraryLibJITImp;
2664 function jit_nfloat_sqrt; libraryLibJITImp;
2665 function jit_nfloat_tan; libraryLibJITImp;
2666 function jit_nfloat_tanh; libraryLibJITImp;
2667 function jit_nfloat_trunc; libraryLibJITImp;
2668 function jit_nfloat_is_finite; libraryLibJITImp;
2669 function jit_nfloat_is_nan; libraryLibJITImp;
2670 function jit_nfloat_is_inf; libraryLibJITImp;
2671 function jit_nfloat_abs; libraryLibJITImp;
2672 function jit_nfloat_min; libraryLibJITImp;
2673 function jit_nfloat_max; libraryLibJITImp;
2674 function jit_nfloat_sign; libraryLibJITImp;
2675 function jit_int_to_sbyte; libraryLibJITImp;
2676 function jit_int_to_ubyte; libraryLibJITImp;
2677 function jit_int_to_short; libraryLibJITImp;
2678 function jit_int_to_ushort; libraryLibJITImp;
2679 function jit_int_to_int; libraryLibJITImp;
2680 function jit_int_to_uint; libraryLibJITImp;
2681 function jit_int_to_long; libraryLibJITImp;
2682 function jit_int_to_ulong; libraryLibJITImp;
2683 function jit_uint_to_int; libraryLibJITImp;
2684 function jit_uint_to_uint; libraryLibJITImp;
2685 function jit_uint_to_long; libraryLibJITImp;
2686 function jit_uint_to_ulong; libraryLibJITImp;
2687 function jit_long_to_int; libraryLibJITImp;
2688 function jit_long_to_uint; libraryLibJITImp;
2689 function jit_long_to_long; libraryLibJITImp;
2690 function jit_long_to_ulong; libraryLibJITImp;
2691 function jit_ulong_to_int; libraryLibJITImp;
2692 function jit_ulong_to_uint; libraryLibJITImp;
2693 function jit_ulong_to_long; libraryLibJITImp;
2694 function jit_ulong_to_ulong; libraryLibJITImp;
2695 function jit_int_to_sbyte_ovf; libraryLibJITImp;
2696 function jit_int_to_ubyte_ovf; libraryLibJITImp;
2697 function jit_int_to_short_ovf; libraryLibJITImp;
2698 function jit_int_to_ushort_ovf; libraryLibJITImp;
2699 function jit_int_to_int_ovf; libraryLibJITImp;
2700 function jit_int_to_uint_ovf; libraryLibJITImp;
2701 function jit_int_to_long_ovf; libraryLibJITImp;
2702 function jit_int_to_ulong_ovf; libraryLibJITImp;
2703 function jit_uint_to_int_ovf; libraryLibJITImp;
2704 function jit_uint_to_uint_ovf; libraryLibJITImp;
2705 function jit_uint_to_long_ovf; libraryLibJITImp;
2706 function jit_uint_to_ulong_ovf; libraryLibJITImp;
2707 function jit_long_to_int_ovf; libraryLibJITImp;
2708 function jit_long_to_uint_ovf; libraryLibJITImp;
2709 function jit_long_to_long_ovf; libraryLibJITImp;
2710 function jit_long_to_ulong_ovf; libraryLibJITImp;
2711 function jit_ulong_to_int_ovf; libraryLibJITImp;
2712 function jit_ulong_to_uint_ovf; libraryLibJITImp;
2713 function jit_ulong_to_long_ovf; libraryLibJITImp;
2714 function jit_ulong_to_ulong_ovf; libraryLibJITImp;
2715 function jit_float32_to_int; libraryLibJITImp;
2716 function jit_float32_to_uint; libraryLibJITImp;
2717 function jit_float32_to_long; libraryLibJITImp;
2718 function jit_float32_to_ulong; libraryLibJITImp;
2719 function jit_float32_to_int_ovf; libraryLibJITImp;
2720 function jit_float32_to_uint_ovf; libraryLibJITImp;
2721 function jit_float32_to_long_ovf; libraryLibJITImp;
2722 function jit_float32_to_ulong_ovf; libraryLibJITImp;
2723 function jit_float64_to_int; libraryLibJITImp;
2724 function jit_float64_to_uint; libraryLibJITImp;
2725 function jit_float64_to_long; libraryLibJITImp;
2726 function jit_float64_to_ulong; libraryLibJITImp;
2727 function jit_float64_to_int_ovf; libraryLibJITImp;
2728 function jit_float64_to_uint_ovf; libraryLibJITImp;
2729 function jit_float64_to_long_ovf; libraryLibJITImp;
2730 function jit_float64_to_ulong_ovf; libraryLibJITImp;
2731 function jit_nfloat_to_int; libraryLibJITImp;
2732 function jit_nfloat_to_uint; libraryLibJITImp;
2733 function jit_nfloat_to_long; libraryLibJITImp;
2734 function jit_nfloat_to_ulong; libraryLibJITImp;
2735 function jit_nfloat_to_int_ovf; libraryLibJITImp;
2736 function jit_nfloat_to_uint_ovf; libraryLibJITImp;
2737 function jit_nfloat_to_long_ovf; libraryLibJITImp;
2738 function jit_nfloat_to_ulong_ovf; libraryLibJITImp;
2739 function jit_int_to_float32; libraryLibJITImp;
2740 function jit_int_to_float64; libraryLibJITImp;
2741 function jit_int_to_nfloat; libraryLibJITImp;
2742 function jit_uint_to_float32; libraryLibJITImp;
2743 function jit_uint_to_float64; libraryLibJITImp;
2744 function jit_uint_to_nfloat; libraryLibJITImp;
2745 function jit_long_to_float32; libraryLibJITImp;
2746 function jit_long_to_float64; libraryLibJITImp;
2747 function jit_long_to_nfloat; libraryLibJITImp;
2748 function jit_ulong_to_float32; libraryLibJITImp;
2749 function jit_ulong_to_float64; libraryLibJITImp;
2750 function jit_ulong_to_nfloat; libraryLibJITImp;
2751 function jit_float32_to_float64; libraryLibJITImp;
2752 function jit_float32_to_nfloat; libraryLibJITImp;
2753 function jit_float64_to_float32; libraryLibJITImp;
2754 function jit_float64_to_nfloat; libraryLibJITImp;
2755 function jit_nfloat_to_float32; libraryLibJITImp;
2756 function jit_nfloat_to_float64; libraryLibJITImp;
2757 function jit_meta_set; libraryLibJITImp;
2758 function jit_meta_get; libraryLibJITImp;
2759 procedure jit_meta_free; libraryLibJITImp;
2760 procedure jit_meta_destroy; libraryLibJITImp;
2761 procedure jitom_destroy_model; libraryLibJITImp;
2762 function jitom_get_class_by_name; libraryLibJITImp;
2763 function jitom_class_get_name; libraryLibJITImp;
2764 function jitom_class_get_modifiers; libraryLibJITImp;
2765 function jitom_class_get_type; libraryLibJITImp;
2766 function jitom_class_get_value_type; libraryLibJITImp;
2767 function jitom_class_get_primary_super; libraryLibJITImp;
2768 function jitom_class_get_all_supers; libraryLibJITImp;
2769 function jitom_class_get_interfaces; libraryLibJITImp;
2770 function jitom_class_get_fields; libraryLibJITImp;
2771 function jitom_class_get_methods; libraryLibJITImp;
2772 function jitom_class_new; libraryLibJITImp;
2773 function jitom_class_new_value; libraryLibJITImp;
2774 function jitom_class_delete; libraryLibJITImp;
2775 function jitom_class_add_ref; libraryLibJITImp;
2776 function jitom_field_get_name; libraryLibJITImp;
2777 function jitom_field_get_type; libraryLibJITImp;
2778 function jitom_field_get_modifiers; libraryLibJITImp;
2779 function jitom_field_load; libraryLibJITImp;
2780 function jitom_field_load_address; libraryLibJITImp;
2781 function jitom_field_store; libraryLibJITImp;
2782 function jitom_method_get_name; libraryLibJITImp;
2783 function jitom_method_get_type; libraryLibJITImp;
2784 function jitom_method_get_modifiers; libraryLibJITImp;
2785 function jitom_method_invoke; libraryLibJITImp;
2786 function jitom_method_invoke_virtual; libraryLibJITImp;
2787 function jitom_type_tag_as_class; libraryLibJITImp;
2788 function jitom_type_tag_as_value; libraryLibJITImp;
2789 function jitom_type_is_class; libraryLibJITImp;
2790 function jitom_type_is_value; libraryLibJITImp;
2791 function jitom_type_get_model; libraryLibJITImp;
2792 function jitom_type_get_class; libraryLibJITImp;
2793 function jit_type_copy; libraryLibJITImp;
2794 procedure jit_type_free; libraryLibJITImp;
2795 function jit_type_create_struct; libraryLibJITImp;
2796 function jit_type_create_union; libraryLibJITImp;
2797 function jit_type_create_signature; libraryLibJITImp;
2798 function jit_type_create_pointer; libraryLibJITImp;
2799 function jit_type_create_tagged; libraryLibJITImp;
2800 function jit_type_set_names; libraryLibJITImp;
2801 procedure jit_type_set_size_and_alignment; libraryLibJITImp;
2802 procedure jit_type_set_offset; libraryLibJITImp;
2803 function jit_type_get_kind; libraryLibJITImp;
2804 function jit_type_get_size; libraryLibJITImp;
2805 function jit_type_get_alignment; libraryLibJITImp;
2806 function jit_type_num_fields; libraryLibJITImp;
2807 function jit_type_get_field; libraryLibJITImp;
2808 function jit_type_get_offset; libraryLibJITImp;
2809 function jit_type_get_name; libraryLibJITImp;
2810 function jit_type_find_name; libraryLibJITImp;
2811 function jit_type_num_params; libraryLibJITImp;
2812 function jit_type_get_return; libraryLibJITImp;
2813 function jit_type_get_param; libraryLibJITImp;
2814 function jit_type_get_abi; libraryLibJITImp;
2815 function jit_type_get_ref; libraryLibJITImp;
2816 function jit_type_get_tagged_type; libraryLibJITImp;
2817 procedure jit_type_set_tagged_type; libraryLibJITImp;
2818 function jit_type_get_tagged_kind; libraryLibJITImp;
2819 function jit_type_get_tagged_data; libraryLibJITImp;
2820 procedure jit_type_set_tagged_data; libraryLibJITImp;
2821 function jit_type_is_primitive; libraryLibJITImp;
2822 function jit_type_is_struct; libraryLibJITImp;
2823 function jit_type_is_union; libraryLibJITImp;
2824 function jit_type_is_signature; libraryLibJITImp;
2825 function jit_type_is_pointer; libraryLibJITImp;
2826 function jit_type_is_tagged; libraryLibJITImp;
2827 function jit_type_best_alignment; libraryLibJITImp;
2828 function jit_type_normalize; libraryLibJITImp;
2829 function jit_type_remove_tags; libraryLibJITImp;
2830 function jit_type_promote_int; libraryLibJITImp;
2831 function jit_type_return_via_pointer; libraryLibJITImp;
2832 function jit_type_has_tag; libraryLibJITImp;
2833 function jit_unwind_init; libraryLibJITImp;
2834 procedure jit_unwind_free; libraryLibJITImp;
2835 function jit_unwind_next; libraryLibJITImp;
2836 function jit_unwind_next_pc; libraryLibJITImp;
2837 function jit_unwind_get_pc; libraryLibJITImp;
2838 function jit_unwind_jump; libraryLibJITImp;
2839 function jit_unwind_get_function; libraryLibJITImp;
2840 function jit_unwind_get_offset; libraryLibJITImp;
2841 function jit_malloc; libraryLibJITImp;
2842 function jit_calloc; libraryLibJITImp;
2843 function jit_realloc; libraryLibJITImp;
2844 procedure jit_free; libraryLibJITImp;
2845 function jit_memset; libraryLibJITImp;
2846 function jit_memcpy; libraryLibJITImp;
2847 function jit_memmove; libraryLibJITImp;
2848 function jit_memcmp; libraryLibJITImp;
2849 function jit_memchr; libraryLibJITImp;
2850 function jit_strlen; libraryLibJITImp;
2851 function jit_strcpy; libraryLibJITImp;
2852 function jit_strcat; libraryLibJITImp;
2853 function jit_strncpy; libraryLibJITImp;
2854 function jit_strdup; libraryLibJITImp;
2855 function jit_strndup; libraryLibJITImp;
2856 function jit_strcmp; libraryLibJITImp;
2857 function jit_strncmp; libraryLibJITImp;
2858 function jit_stricmp; libraryLibJITImp;
2859 function jit_strnicmp; libraryLibJITImp;
2860 function jit_strchr; libraryLibJITImp;
2861 function jit_strrchr; libraryLibJITImp;
2862 {$IFNDEF MSWINDOWS}
2863 function jit_sprintf; libraryLibJITImp;
2864 function jit_snprintf; libraryLibJITImp;
2865 {$ENDIF}
2866 function jit_value_create; libraryLibJITImp;
2867 function jit_value_create_nint_constant; libraryLibJITImp;
2868 function jit_value_create_long_constant; libraryLibJITImp;
2869 function jit_value_create_float32_constant; libraryLibJITImp;
2870 function jit_value_create_float64_constant; libraryLibJITImp;
2871 function jit_value_create_nfloat_constant; libraryLibJITImp;
2872 function jit_value_create_constant; libraryLibJITImp;
2873 function jit_value_get_param; libraryLibJITImp;
2874 function jit_value_get_struct_pointer; libraryLibJITImp;
2875 function jit_value_is_temporary; libraryLibJITImp;
2876 function jit_value_is_local; libraryLibJITImp;
2877 function jit_value_is_constant; libraryLibJITImp;
2878 function jit_value_is_parameter; libraryLibJITImp;
2879 procedure jit_value_ref; libraryLibJITImp;
2880 procedure jit_value_set_volatile; libraryLibJITImp;
2881 function jit_value_is_volatile; libraryLibJITImp;
2882 procedure jit_value_set_addressable; libraryLibJITImp;
2883 function jit_value_is_addressable; libraryLibJITImp;
2884 function jit_value_get_type; libraryLibJITImp;
2885 function jit_value_get_function; libraryLibJITImp;
2886 function jit_value_get_block; libraryLibJITImp;
2887 function jit_value_get_context; libraryLibJITImp;
2888 function jit_value_get_constant; libraryLibJITImp;
2889 function jit_value_get_nint_constant; libraryLibJITImp;
2890 function jit_value_get_long_constant; libraryLibJITImp;
2891 function jit_value_get_float32_constant; libraryLibJITImp;
2892 function jit_value_get_float64_constant; libraryLibJITImp;
2893 function jit_value_get_nfloat_constant; libraryLibJITImp;
2894 function jit_value_is_true; libraryLibJITImp;
2895 function jit_constant_convert; libraryLibJITImp;
2896 procedure jit_vmem_init; libraryLibJITImp;
2897 function jit_vmem_page_size; libraryLibJITImp;
2898 function jit_vmem_round_up; libraryLibJITImp;
2899 function jit_vmem_round_down; libraryLibJITImp;
2900 function jit_vmem_reserve; libraryLibJITImp;
2901 function jit_vmem_reserve_committed; libraryLibJITImp;
2902 function jit_vmem_release; libraryLibJITImp;
2903 function jit_vmem_commit; libraryLibJITImp;
2904 function jit_vmem_decommit; libraryLibJITImp;
2905 function jit_vmem_protect; libraryLibJITImp;
2906 function jit_default_memory_manager; libraryLibJITImp;
2907 procedure jit_context_set_memory_manager; libraryLibJITImp;
2908 procedure jit_dump_type; libraryLibJITImp;
2909 procedure jit_dump_value; libraryLibJITImp;
2910 procedure jit_dump_insn; libraryLibJITImp;
2911 procedure jit_dump_function; libraryLibJITImp;
2914 end.