NAME
LibJIT - Perl bindings for GNU LibJIT
SYNOPSIS
my
$ctx
= jit_context_create;
jit_context_build_start
$ctx
;
my
$sig
= jit_type_create_signature jit_abi_cdecl, jit_type_nint, [ jit_type_nint, jit_type_nint ], 1;
my
$fun
= jit_function_create
$ctx
,
$sig
;
my
(
$i
,
$j
) =
map
jit_value_get_param(
$fun
,
$_
), 0 .. 1;
my
$prod
= jit_insn_mul
$fun
,
$i
,
$j
;
jit_insn_return
$fun
,
$prod
;
jit_function_compile
$fun
;
jit_context_build_end
$ctx
;
DESCRIPTION
As straightforward as bindings can be - for every function and constant defined by the C library a Perl subroutine is exported.
Where C function takes two arguments, a pointer and number of elements, Perl function would take a single array reference instead. This should be straightforward in most cases, except, probably, jit_function_apply
.
In C, jit_function_apply
has this signature (see LibJIT documentation for description of each argument):
int
jit_function_apply (jit_function_t func, void *
*args
, void
*return_area
)
In Perl, args
is represented as a reference to an array of strings, where each string contains binary representation of the argument, as produced by pack
. return_area
should be a scalar variable, when jit_function_apply
returns it will be set to the binary representation of the return value, that can be decoded with unpack
.
FFI::Raw in combination with jit_function_to_closure
can be a cleaner way to call compiled functions.
SEE MORE
GNU LibJIT home page and documentation: https://www.gnu.org/software/libjit/.
AUTHOR
Vickenty Fesunov, <cpan+libjit@setattr.net>
COPYRIGHT AND LICENSE
Copyright (C) 2015 by Vickenty Fesunov.
The library is distributed under the terms of the GNU Lesser General Public License. See the LICENSE file for details.