libFirm
|
Code Generation (backend) produces machine-code. More...
Modules | |
Just in Time Compilation | |
Provides interface to generate code and resolve symbols in memory buffers. | |
Data Structures | |
struct | vararg_params |
This structure holds the information on how the backend implements variadic functions. More... | |
struct | backend_params |
This structure contains parameters that should be propagated to the libFirm parameter set. More... | |
Typedefs | |
typedef void(* | lower_func) (ir_node *) |
typedef void(* | after_transform_func) (ir_graph *irg, const char *name) |
Functions | |
int | be_parse_arg (const char *arg) |
Parse one backend argument. More... | |
int | be_is_big_endian (void) |
Returns 1 if the backend uses big-endian byte ordering and 0 for little-endian. More... | |
unsigned | be_get_machine_size (void) |
Returns size of machine words. More... | |
ir_mode * | be_get_mode_float_arithmetic (void) |
Returns supported float arithmetic mode or NULL if mode_D and mode_F are supported natively. More... | |
ir_type * | be_get_type_long_double (void) |
Returns type used for long double or NULL if none available. More... | |
float_int_conversion_overflow_style_t | be_get_float_int_overflow (void) |
Returns the backend behaviour on float to integer conversion overflow. More... | |
void | be_initialize (void) |
Initialize the backend for the selected isa. More... | |
const backend_params * | be_get_backend_param (void) |
Returns the backend configuration parameter. More... | |
void | be_lower_for_target (void) |
Lowers current program for the target architecture. More... | |
void | be_set_after_transform_func (after_transform_func func) |
Sets a callback that is called after each transformation step in be_lower_for_target(). More... | |
void | be_main (FILE *output, const char *compilation_unit_name) |
Main interface to the frontend. More... | |
asm_constraint_flags_t | be_parse_asm_constraints (const char *constraints) |
parse assembler constraint strings and returns flags (so the frontend knows which operands are inputs/outputs and whether memory is required) More... | |
int | be_is_valid_clobber (const char *clobber) |
tests whether a string is a valid clobber in an ASM instruction More... | |
void | be_dwarf_set_source_language (dwarf_source_language language) |
Sets source language for dwarf debug information. More... | |
void | be_dwarf_set_compilation_directory (const char *directory) |
Sets working directory of the compiler (or directory where the compiler searched for sources) for dwarf debug information. More... | |
Code Generation (backend) produces machine-code.
struct vararg_params |
This structure holds the information on how the backend implements variadic functions.
Data Fields | ||
---|---|---|
lower_func | lower_va_arg | The function to lower a call to the va_arg macro. |
ir_type * | va_list_type |
Which type is to be used for va_list. If this is NULL, the backend does not implement variadic functions. |
struct backend_params |
This structure contains parameters that should be propagated to the libFirm parameter set.
Data Fields | ||
---|---|---|
arch_allow_ifconv_func | allow_ifconv | Backend settings for if-conversion. |
unsigned | byte_order_big_endian:1 | the backend uses big-endian byte ordering if set, else little endian |
const ir_settings_arch_dep_t * | dep_param | Settings for architecture dependent optimizations. |
char const * | experimental | |
float_int_conversion_overflow_style_t | float_int_overflow | Semantic on float->int conversion overflow. |
unsigned | machine_size |
size of machine word in bits. This is usually the size of the general purpose integer/address registers. |
ir_mode * | mode_float_arithmetic | some backends like x87 can only do arithmetic in a specific float mode (load/store are still done in the "normal" float/double modes). |
unsigned | modulo_shift |
Shifts on this architecture only read some bits of the shift value. For example on x86 for every mode with less than 32bits only 5 bits of the shift value are read resulting in a modulo shift value of 32. On an architecture without modulo_shift this value is 0. |
unsigned | pic_supported:1 | 1 if backend supports generation of position independent code (PIC) |
unsigned | stack_param_align | Alignment of stack parameters. |
unsigned | thread_local_storage_supported:1 | Whether thread local storage is supported. |
ir_type * | type_long_double | type used for long double or NULL if none available. |
unsigned | unaligned_memaccess_supported:1 | unaligned memory accesses are not supported natively (but the backend may break the access up into several smaller ones) |
vararg_params | vararg | How this backend implements variadic functions. |
typedef void(* after_transform_func) (ir_graph *irg, const char *name) |
flags categorizing assembler constraint specifications
Dwarf source language codes.
void be_dwarf_set_compilation_directory | ( | const char * | directory | ) |
Sets working directory of the compiler (or directory where the compiler searched for sources) for dwarf debug information.
void be_dwarf_set_source_language | ( | dwarf_source_language | language | ) |
Sets source language for dwarf debug information.
const backend_params* be_get_backend_param | ( | void | ) |
Returns the backend configuration parameter.
float_int_conversion_overflow_style_t be_get_float_int_overflow | ( | void | ) |
Returns the backend behaviour on float to integer conversion overflow.
unsigned be_get_machine_size | ( | void | ) |
Returns size of machine words.
This is usually the size of the general purpose integer registers.
ir_mode* be_get_mode_float_arithmetic | ( | void | ) |
Returns supported float arithmetic mode or NULL if mode_D and mode_F are supported natively.
Some backends like x87 can only do arithmetic in a specific float mode (load/store are still done in the "normal" float/double modes).
ir_type* be_get_type_long_double | ( | void | ) |
Returns type used for long double or NULL if none available.
void be_initialize | ( | void | ) |
Initialize the backend for the selected isa.
This initializes mode_P and should be called after all options are set with be_parse_arg().
int be_is_big_endian | ( | void | ) |
Returns 1 if the backend uses big-endian byte ordering and 0 for little-endian.
int be_is_valid_clobber | ( | const char * | clobber | ) |
tests whether a string is a valid clobber in an ASM instruction
void be_lower_for_target | ( | void | ) |
Lowers current program for the target architecture.
This must be run once before using be_main. The idea here is that the backend can perform lowerings like doubleword-lowering, ABI adjustments or implementation of boolean values, if-conversion, with target specific settings. The resulting graph is still a "normal" firm-graph on which you can and should perform further architecture-neutral optimizations before be_main.
void be_main | ( | FILE * | output, |
const char * | compilation_unit_name | ||
) |
Main interface to the frontend.
int be_parse_arg | ( | const char * | arg | ) |
Parse one backend argument.
This is intended to provide commandline options to various backend parameters that might be changing. Returns -1 if 'help' was found, 0 if the argument could not be parsed, 1 if the option could be set.
asm_constraint_flags_t be_parse_asm_constraints | ( | const char * | constraints | ) |
parse assembler constraint strings and returns flags (so the frontend knows which operands are inputs/outputs and whether memory is required)
void be_set_after_transform_func | ( | after_transform_func | func | ) |
Sets a callback that is called after each transformation step in be_lower_for_target().
This is typically used to run dump & verify steps to help debugging.