libFirm

executes assembler fragments of the target machine. More...

Data Structures

struct  ir_asm_constraint
 A input/output constraint attribute. More...
 

Enumerations

enum  n_ASM { n_ASM_mem, n_ASM_max = n_ASM_mem }
 Input numbers for ASM node. More...
 
enum  pn_ASM { pn_ASM_M, pn_ASM_first_out, pn_ASM_max = pn_ASM_first_out }
 Projection numbers for result of ASM node (use for Proj nodes) More...
 

Functions

ir_nodenew_rd_ASM (dbg_info *db, ir_node *block, ir_node *mem, int arity, ir_node *in[], size_t n_constraints, ir_asm_constraint *constraints, size_t n_clobber, ident *clobber[], ident *asm_text)
 Constructor for an ASM pseudo node. More...
 
ir_nodenew_r_ASM (ir_node *block, ir_node *mem, int arity, ir_node *in[], size_t n_constraints, ir_asm_constraint *constraints, size_t n_clobber, ident *clobber[], ident *asm_text)
 Constructor for an ASM pseudo node. More...
 
ir_nodenew_d_ASM (dbg_info *db, ir_node *mem, int arity, ir_node *in[], size_t n_constraints, ir_asm_constraint *constraints, size_t n_clobber, ident *clobber[], ident *asm_text)
 Constructor for an ASM pseudo node. More...
 
ir_nodenew_ASM (ir_node *mem, int arity, ir_node *in[], size_t n_constraints, ir_asm_constraint *constraints, size_t n_clobber, ident *clobber[], ident *asm_text)
 Constructor for an ASM pseudo node. More...
 
size_t get_ASM_n_constraints (const ir_node *node)
 Returns the number of output constraints for an ASM node. More...
 
size_t get_ASM_n_clobbers (const ir_node *node)
 Returns the number of clobbered registers for an ASM node. More...
 
int is_ASM (const ir_node *node)
 Test if node is a ASM. More...
 
ir_nodeget_ASM_mem (const ir_node *node)
 Returns mem input of an ASM node. More...
 
void set_ASM_mem (ir_node *node, ir_node *mem)
 Sets mem input of an ASM node. More...
 
int get_ASM_n_inputs (ir_node const *node)
 Get the number of ASM inputs. More...
 
ir_nodeget_ASM_input (ir_node const *node, int pos)
 Get the ASM input with index pos. More...
 
void set_ASM_input (ir_node *node, int pos, ir_node *input)
 Set the ASM input with index pos. More...
 
ir_node ** get_ASM_input_arr (ir_node *node)
 Get an array of all ASM inputs. More...
 
ir_asm_constraintget_ASM_constraints (const ir_node *node)
 Returns constraints attribute of an ASM node. More...
 
void set_ASM_constraints (ir_node *node, ir_asm_constraint *constraints)
 Sets constraints attribute of an ASM node. More...
 
ident ** get_ASM_clobbers (const ir_node *node)
 Returns clobbers attribute of an ASM node. More...
 
void set_ASM_clobbers (ir_node *node, ident **clobbers)
 Sets clobbers attribute of an ASM node. More...
 
identget_ASM_text (const ir_node *node)
 Returns text attribute of an ASM node. More...
 
void set_ASM_text (ir_node *node, ident *text)
 Sets text attribute of an ASM node. More...
 
ir_opget_op_ASM (void)
 Returns opcode for ASM nodes. More...
 

Variables

ir_opop_ASM
 ASM opcode. More...
 

Detailed Description

executes assembler fragments of the target machine.

The node contains a template for an assembler snippet. The compiler will replace occurrences of %0 to %9 with input/output registers, %% with a single % char. Some backends allow additional specifiers (for example w3, l3, h3 on x86 to get a 16bit, 8hit low, 8bit high part of a register). After the replacements the text is emitted into the final assembly.

The clobber list contains names of registers which have an undefined value after the assembler instruction is executed; it may also contain 'memory' or 'cc' if global state/memory changes or the condition code registers (some backends implicitly set cc, memory clobbers on all ASM statements).

Example (an i386 instruction)::

ASM(text="btsl %1, %0",
    constraints = ["=m", "r"],
    clobbers = ["cc"])

As there are no output, the %0 references the first input which is just an address which the asm operation writes to. %1 references to an input which is passed as a register. The condition code register has an unknown value after the instruction.

(This format is inspired by the gcc extended asm syntax)


Data Structure Documentation

struct ir_asm_constraint

A input/output constraint attribute.

Definition at line 270 of file firm_types.h.

Data Fields
ident * constraint The constraint for this input/output.
int in_pos The input position for this constraint.
ir_mode * mode The mode of the constraint.
int out_pos The output position for this constraint.

Enumeration Type Documentation

enum n_ASM

Input numbers for ASM node.

Enumerator
n_ASM_mem 

memory dependency

n_ASM_max 

Definition at line 113 of file nodes.h.

enum pn_ASM

Projection numbers for result of ASM node (use for Proj nodes)

Enumerator
pn_ASM_M 

memory result

pn_ASM_first_out 

first output

pn_ASM_max 

Definition at line 121 of file nodes.h.

Function Documentation

ident** get_ASM_clobbers ( const ir_node node)

Returns clobbers attribute of an ASM node.

ir_asm_constraint* get_ASM_constraints ( const ir_node node)

Returns constraints attribute of an ASM node.

ir_node* get_ASM_input ( ir_node const *  node,
int  pos 
)

Get the ASM input with index pos.

ir_node** get_ASM_input_arr ( ir_node node)

Get an array of all ASM inputs.

ir_node* get_ASM_mem ( const ir_node node)

Returns mem input of an ASM node.

size_t get_ASM_n_clobbers ( const ir_node node)

Returns the number of clobbered registers for an ASM node.

size_t get_ASM_n_constraints ( const ir_node node)

Returns the number of output constraints for an ASM node.

int get_ASM_n_inputs ( ir_node const *  node)

Get the number of ASM inputs.

ident* get_ASM_text ( const ir_node node)

Returns text attribute of an ASM node.

ir_op* get_op_ASM ( void  )

Returns opcode for ASM nodes.

int is_ASM ( const ir_node node)

Test if node is a ASM.

Returns
1 if the node is a ASM node, 0 otherwise
ir_node* new_ASM ( ir_node mem,
int  arity,
ir_node in[],
size_t  n_constraints,
ir_asm_constraint constraints,
size_t  n_clobber,
ident clobber[],
ident asm_text 
)

Constructor for an ASM pseudo node.

Parameters
memmemory dependency
arityThe number of data inputs to the node.
inThe array of length arity of data inputs.
n_constraintsThe number of constraints to the node.
constraintsThe array of length n_constraints of constraints.
n_clobberThe number of clobbered registers.
clobberThe array of length n_clobber of clobbered registers.
asm_textThe assembler text.
ir_node* new_d_ASM ( dbg_info db,
ir_node mem,
int  arity,
ir_node in[],
size_t  n_constraints,
ir_asm_constraint constraints,
size_t  n_clobber,
ident clobber[],
ident asm_text 
)

Constructor for an ASM pseudo node.

Parameters
dbA pointer for debug information.
memmemory dependency
arityThe number of data inputs to the node.
inThe array of length arity of data inputs.
n_constraintsThe number of constraints to the node.
constraintsThe array of length n_constraints of constraints.
n_clobberThe number of clobbered registers.
clobberThe array of length n_clobber of clobbered registers.
asm_textThe assembler text.
ir_node* new_r_ASM ( ir_node block,
ir_node mem,
int  arity,
ir_node in[],
size_t  n_constraints,
ir_asm_constraint constraints,
size_t  n_clobber,
ident clobber[],
ident asm_text 
)

Constructor for an ASM pseudo node.

Parameters
blockThe block the node belong to.
memmemory dependency
arityThe number of data inputs to the node.
inThe array of length arity of data inputs.
n_constraintsThe number of constraints to the node.
constraintsThe array of length n_constraints of constraints.
n_clobberThe number of clobbered registers.
clobberThe array of length n_clobber of clobbered registers.
asm_textThe assembler text.
ir_node* new_rd_ASM ( dbg_info db,
ir_node block,
ir_node mem,
int  arity,
ir_node in[],
size_t  n_constraints,
ir_asm_constraint constraints,
size_t  n_clobber,
ident clobber[],
ident asm_text 
)

Constructor for an ASM pseudo node.

Parameters
dbA pointer for debug information.
blockThe block the node belong to.
memmemory dependency
arityThe number of data inputs to the node.
inThe array of length arity of data inputs.
n_constraintsThe number of constraints to the node.
constraintsThe array of length n_constraints of constraints.
n_clobberThe number of clobbered registers.
clobberThe array of length n_clobber of clobbered registers.
asm_textThe assembler text.
void set_ASM_clobbers ( ir_node node,
ident **  clobbers 
)

Sets clobbers attribute of an ASM node.

void set_ASM_constraints ( ir_node node,
ir_asm_constraint constraints 
)

Sets constraints attribute of an ASM node.

void set_ASM_input ( ir_node node,
int  pos,
ir_node input 
)

Set the ASM input with index pos.

void set_ASM_mem ( ir_node node,
ir_node mem 
)

Sets mem input of an ASM node.

void set_ASM_text ( ir_node node,
ident text 
)

Sets text attribute of an ASM node.

Variable Documentation

ir_op* op_ASM

ASM opcode.

Definition at line 162 of file nodes.h.