Function pointers — libgccjit 16.0.0 (experimental ) documentation (original) (raw)
You can generate calls that use a function pointer viagcc_jit_context_new_call_through_ptr().
To do requires a gcc_jit_rvalue of the correct function pointer type.
Function pointers for a gcc_jit_function can be obtained via gcc_jit_function_get_address().
gcc_jit_rvalue *gcc_jit_function_get_address(gcc_jit_function *fn, gcc_jit_location *loc)¶
Get the address of a function as an rvalue, of function pointer type.
This entrypoint was added in LIBGCCJIT_ABI_9; you can test for its presence using
#ifdef LIBGCCJIT_HAVE_gcc_jit_function_get_address
Alternatively, given an existing function, you can obtain a pointer to it in gcc_jit_rvalue form usinggcc_jit_context_new_rvalue_from_ptr(), using a function pointer type obtained using gcc_jit_context_new_function_ptr_type().
Here’s an example of creating a function pointer type corresponding to C’svoid (*)(int, int, int):
gcc_jit_type *void_type = gcc_jit_context_get_type (ctxt, GCC_JIT_TYPE_VOID); gcc_jit_type *int_type = gcc_jit_context_get_type (ctxt, GCC_JIT_TYPE_INT);
/* Build the function ptr type. */ gcc_jit_type *param_types[3]; param_types[0] = int_type; param_types[1] = int_type; param_types[2] = int_type;
gcc_jit_type *fn_ptr_type = gcc_jit_context_new_function_ptr_type (ctxt, NULL, void_type, 3, param_types, 0);
gcc_jit_type *gcc_jit_context_new_function_ptr_type(gcc_jit_context *ctxt, gcc_jit_location *loc, gcc_jit_type *return_type, int num_params, gcc_jit_type **param_types, int is_variadic)¶
Generate a gcc_jit_type for a function pointer with the given return type and parameters.
Each of param_types must be non-void; return_type may be void.