(libgccjit.info)Top
libgccjit Documentation
***********************
libgccjit 11.0.0 (experimental 20210114), Jan 14, 2021
David Malcolm
Copyright © 2014-2021 Free Software Foundation, Inc.
This document describes libgccjit(1), an API for embedding GCC inside
programs and libraries.
There are actually two APIs for the library:
* a pure C API: ‘libgccjit.h’
* a C++ wrapper API: ‘libgccjit++.h’. This is a collection of “thin”
wrapper classes around the C API, to save typing.
Contents:
- Tutorial
- Topic Reference
- C++ bindings for libgccjit
- Internals
- Indices and tables
- Index
— The Detailed Node Listing —
Tutorial
- Tutorial part 1; “Hello world”
- Tutorial part 1 “Hello world”.
- Tutorial part 2; Creating a trivial machine code function
- Tutorial part 2 Creating a trivial machine code function.
- Tutorial part 3; Loops and variables
- Tutorial part 3 Loops and variables.
- Tutorial part 4; Adding JIT-compilation to a toy interpreter
- Tutorial part 4 Adding JIT-compilation to a toy interpreter.
- Tutorial part 5; Implementing an Ahead-of-Time compiler
- Tutorial part 5 Implementing an Ahead-of-Time compiler.
Tutorial part 2: Creating a trivial machine code function
- Error-handling
- Options
- Full example
Tutorial part 3: Loops and variables
- Expressions; lvalues and rvalues
- Expressions lvalues and rvalues.
- Control flow
- Visualizing the control flow graph
- Full example
- Full example<2>.
Tutorial part 4: Adding JIT-compilation to a toy interpreter
- Our toy interpreter
- Compiling to machine code
- Setting things up
- Populating the function
- Verifying the control flow graph
- Compiling the context
- Single-stepping through the generated code
- Examining the generated code
- Putting it all together
- Behind the curtain; How does our code get optimized?
- Behind the curtain How does our code get optimized?.
Behind the curtain: How does our code get optimized?
- Optimizing away stack manipulation
- Elimination of tail recursion
Tutorial part 5: Implementing an Ahead-of-Time compiler
- The “brainf” language
- Converting a brainf script to libgccjit IR
- Compiling a context to a file
- Other forms of ahead-of-time-compilation
Topic Reference
- Compilation contexts
- Objects
- Types
- Expressions
- Creating and using functions
- Function pointers
- Function pointers<2>.
- Source Locations
- Compiling a context
- ABI and API compatibility
- Performance
- Using Assembly Language with libgccjit
Compilation contexts
- Lifetime-management
- Thread-safety
- Error-handling
- Error-handling<2>.
- Debugging
- Options
- Options<2>.
Options
- String Options
- Boolean options
- Integer options
- Additional command-line options
Types
- Standard types
- Pointers, const, and volatile
- Pointers const and volatile.
- Vector types
- Structures and unions
- Function pointer types
Expressions
- Rvalues
- Lvalues
- Working with pointers, structs and unions
- Working with pointers structs and unions.
Rvalues
- Simple expressions
- Vector expressions
- Unary Operations
- Binary Operations
- Comparisons
- Function calls
- Function pointers
- Type-coercion
Lvalues
- Global variables
Creating and using functions
- Params
- Functions
- Blocks
- Statements
Source Locations
- Faking it
Compiling a context
- In-memory compilation
- Ahead-of-time compilation
ABI and API compatibility
- Programmatically checking version
- ABI symbol tags
ABI symbol tags
- LIBGCCJIT_ABI_0
- LIBGCCJIT_ABI_1
- LIBGCCJIT_ABI_2
- LIBGCCJIT_ABI_3
- LIBGCCJIT_ABI_4
- LIBGCCJIT_ABI_5
- LIBGCCJIT_ABI_6
- LIBGCCJIT_ABI_7
- LIBGCCJIT_ABI_8
- LIBGCCJIT_ABI_9
- LIBGCCJIT_ABI_10
- LIBGCCJIT_ABI_11
- LIBGCCJIT_ABI_12
- LIBGCCJIT_ABI_13
- LIBGCCJIT_ABI_14
- LIBGCCJIT_ABI_15
Performance
- The timing API
Using Assembly Language with libgccjit
- Adding assembler instructions within a function
- Adding top-level assembler statements
C++ bindings for libgccjit
- Tutorial
- Tutorial<2>.
- Topic Reference
- Topic Reference<2>.
Tutorial
- Tutorial part 1; “Hello world”
- Tutorial part 1 “Hello world”<2>.
- Tutorial part 2; Creating a trivial machine code function
- Tutorial part 2 Creating a trivial machine code function<2>.
- Tutorial part 3; Loops and variables
- Tutorial part 3 Loops and variables<2>.
- Tutorial part 4; Adding JIT-compilation to a toy interpreter
- Tutorial part 4 Adding JIT-compilation to a toy interpreter<2>.
Tutorial part 2: Creating a trivial machine code function
- Options
- Options<3>.
- Full example
- Full example<3>.
Tutorial part 3: Loops and variables
- Expressions; lvalues and rvalues
- Expressions lvalues and rvalues<2>.
- Control flow
- Control flow<2>.
- Visualizing the control flow graph
- Visualizing the control flow graph<2>.
- Full example
- Full example<4>.
Tutorial part 4: Adding JIT-compilation to a toy interpreter
- Our toy interpreter
- Our toy interpreter<2>.
- Compiling to machine code
- Compiling to machine code<2>.
- Setting things up
- Setting things up<2>.
- Populating the function
- Populating the function<2>.
- Verifying the control flow graph
- Verifying the control flow graph<2>.
- Compiling the context
- Compiling the context<2>.
- Single-stepping through the generated code
- Single-stepping through the generated code<2>.
- Examining the generated code
- Examining the generated code<2>.
- Putting it all together
- Putting it all together<2>.
- Behind the curtain; How does our code get optimized?
- Behind the curtain How does our code get optimized?<2>.
Behind the curtain: How does our code get optimized?
- Optimizing away stack manipulation
- Optimizing away stack manipulation<2>.
- Elimination of tail recursion
- Elimination of tail recursion<2>.
Topic Reference
- Compilation contexts
- Compilation contexts<2>.
- Objects
- Objects<2>.
- Types
- Types<2>.
- Expressions
- Expressions<2>.
- Creating and using functions
- Creating and using functions<2>.
- Source Locations
- Source Locations<2>.
- Compiling a context
- Compiling a context<2>.
- Using Assembly Language with libgccjit++
Compilation contexts
- Lifetime-management
- Lifetime-management<2>.
- Thread-safety
- Thread-safety<2>.
- Error-handling
- Error-handling<3>.
- Debugging
- Debugging<2>.
- Options
- Options<4>.
Options
- String Options
- String Options<2>.
- Boolean options
- Boolean options<2>.
- Integer options
- Integer options<2>.
- Additional command-line options
- Additional command-line options<2>.
Types
- Standard types
- Standard types<2>.
- Pointers, const, and volatile
- Pointers const and volatile<2>.
- Vector types
- Vector types<2>.
- Structures and unions
- Structures and unions<2>.
Expressions
- Rvalues
- Rvalues<2>.
- Lvalues
- Lvalues<2>.
- Working with pointers, structs and unions
- Working with pointers structs and unions<2>.
Rvalues
- Simple expressions
- Simple expressions<2>.
- Vector expressions
- Vector expressions<2>.
- Unary Operations
- Unary Operations<2>.
- Binary Operations
- Binary Operations<2>.
- Comparisons
- Comparisons<2>.
- Function calls
- Function calls<2>.
- Function pointers
- Function pointers<3>.
- Type-coercion
- Type-coercion<2>.
Lvalues
- Global variables
- Global variables<2>.
Creating and using functions
- Params
- Params<2>.
- Functions
- Functions<2>.
- Blocks
- Blocks<2>.
- Statements
- Statements<2>.
Source Locations
- Faking it
- Faking it<2>.
Compiling a context
- In-memory compilation
- In-memory compilation<2>.
- Ahead-of-time compilation
- Ahead-of-time compilation<2>.
Using Assembly Language with libgccjit++
- Adding assembler instructions within a function
- Adding assembler instructions within a function<2>.
- Adding top-level assembler statements
- Adding top-level assembler statements<2>.
Internals
- Working on the JIT library
- Running the test suite
- Environment variables
- Packaging notes
- Overview of code structure
- Design notes
- Submitting patches
Running the test suite
- Running under valgrind
---------- Footnotes ----------
(1) http://gcc.gnu.org/wiki/JIT