NAME

GCCJIT - Perl bindings for GCCJIT library

SYNOPSIS

use GCCJIT qw/:constants/;
use GCCJIT::Context;

my $ctxt = GCCJIT::Context->acquire();
my $int_type = $ctxt->get_type(GCC_JIT_TYPE_INT);

my $param_i = $ctxt->new_param(undef, $int_type, "i");
my $func = $ctxt->new_function(undef, GCC_JIT_FUNCTION_EXPORTED,
    $int_type, "square", [ $param_i ], 0);

my $block = $func->new_block("my new block");

my $expr = $ctxt->new_binary_op(undef, GCC_JIT_BINARY_OP_MULT,
    $int_type, $param_i->as_rvalue(), $param_i->as_rvalue());

$block->end_with_return(undef, $expr);

my $result = $ctxt->compile();
my $raw_ptr = $result->get_code("square");

use FFI::Raw;
my $ffi = FFI::Raw->new_from_ptr($raw_ptr, FFI::Raw::int, FFI::Raw::int);
say $ffi->(4);

DESCRIPTION

This package provides bindings for libgccjit, an embeddable compiler backend based on GCC. There are two packages in this distribution:

GCCJIT, this package, provides direct bindings to the C API of libgccjit.

GCCJIT::Context provides a more succinct, object-oriented view of the same API.

Where gccjit functions expects an array and its length as two arguments, GCCJIT variant takes a single array reference instead.

EXPORTS

This package does not export anything by default. Exportable are all gccjit constants and functions, and following tags:

:constants

Exports all libgccjit constants.

:raw_api

Exports raw libgccjit functions (use GCCJIT::Context wrappers instead).

:all

Exports everything.

SEE ALSO

Online documentation for GCCJIT library: https://gcc.gnu.org/onlinedocs/gcc-5.2.0/jit/

GCCJIT project wiki page: https://gcc.gnu.org/wiki/JIT

AUTHOR

Vickenty Fesunov <cpan-gccjit@setattr.net>

COPYRIGHT AND LICENSE

Copyright (C) 2015 by Vickenty Fesunov.

This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.

This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.

You should have received a copy of the GNU General Public License along with this program. If not, see <http://www.gnu.org/licenses/>.