libFirm
ASM node

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...

Functions

ir_nodenew_rd_ASM (dbg_info *db, ir_node *block, ir_node *mem, int arity, ir_node *in[], ir_asm_constraint *inputs, size_t n_outs, ir_asm_constraint *outputs, size_t n_clobber, ident *clobber[], ident *asm_text)
 Constructor for an ASM pseudo node.
ir_nodenew_r_ASM (ir_node *block, ir_node *mem, int arity, ir_node *in[], ir_asm_constraint *inputs, size_t n_outs, ir_asm_constraint *outputs, size_t n_clobber, ident *clobber[], ident *asm_text)
 Constructor for an ASM pseudo node.
ir_nodenew_d_ASM (dbg_info *db, ir_node *mem, int arity, ir_node *in[], ir_asm_constraint *inputs, size_t n_outs, ir_asm_constraint *outputs, size_t n_clobber, ident *clobber[], ident *asm_text)
 Constructor for an ASM pseudo node.
ir_nodenew_ASM (ir_node *mem, int arity, ir_node *in[], ir_asm_constraint *inputs, size_t n_outs, ir_asm_constraint *outputs, size_t n_clobber, ident *clobber[], ident *asm_text)
 Constructor for an ASM pseudo node.
int get_ASM_n_inputs (const ir_node *node)
 Returns the number of input constraints for an ASM node.
ir_nodeget_ASM_input (const ir_node *node, int pos)
 Returns input number pos of an ASM node.
size_t get_ASM_n_output_constraints (const ir_node *node)
 Returns the number of output constraints for an ASM node.
size_t get_ASM_n_clobbers (const ir_node *node)
 Returns the number of clobbered registers for an ASM node.
int is_ASM (const ir_node *node)
 Test if node is a ASM.
ir_nodeget_ASM_mem (const ir_node *node)
 Returns mem input of an ASM node.
void set_ASM_mem (ir_node *node, ir_node *mem)
 Sets mem input of an ASM node.
ir_asm_constraintget_ASM_input_constraints (const ir_node *node)
 Returns input_constraints attribute of an ASM node.
void set_ASM_input_constraints (ir_node *node, ir_asm_constraint *input_constraints)
 Sets input_constraints attribute of an ASM node.
ir_asm_constraintget_ASM_output_constraints (const ir_node *node)
 Returns output_constraints attribute of an ASM node.
void set_ASM_output_constraints (ir_node *node, ir_asm_constraint *output_constraints)
 Sets output_constraints attribute of an ASM node.
ident ** get_ASM_clobbers (const ir_node *node)
 Returns clobbers attribute of an ASM node.
void set_ASM_clobbers (ir_node *node, ident **clobbers)
 Sets clobbers attribute of an ASM node.
identget_ASM_text (const ir_node *node)
 Returns text attribute of an ASM node.
void set_ASM_text (ir_node *node, ident *text)
 Sets text attribute of an ASM node.
ir_opget_op_ASM (void)
 Returns opcode for ASM nodes.

Variables

ir_opop_ASM
 ASM opcode.

Detailed Description

executes assembler fragments of the target machine.

The node contains a template for an assembler snippet. The compiler will replace occurences 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 implicitely set cc, memory clobbers on all ASM statements).

Example (an i386 instruction)::

    ASM(text="btsl %1, %0",
            input_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)

Enumeration Type Documentation

enum n_ASM

Input numbers for ASM node.

Definition at line 49 of file nodeops.h.

Function Documentation

ident** get_ASM_clobbers ( const ir_node node)

Returns clobbers attribute of an ASM node.

ir_node* get_ASM_input ( const ir_node node,
int  pos 
)

Returns input number pos of an ASM node.

ir_asm_constraint* get_ASM_input_constraints ( const ir_node node)

Returns input_constraints attribute of an ASM node.

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.

int get_ASM_n_inputs ( const ir_node node)

Returns the number of input constraints for an ASM node.

size_t get_ASM_n_output_constraints ( const ir_node node)

Returns the number of output constraints for an ASM node.

ir_asm_constraint* get_ASM_output_constraints ( const ir_node node)

Returns output_constraints attribute of an ASM node.

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[],
ir_asm_constraint inputs,
size_t  n_outs,
ir_asm_constraint outputs,
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.
*inputsThe array of length arity of input constraints.
n_outsThe number of data outputs to the node.
*outputsThe array of length n_outs of output 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[],
ir_asm_constraint inputs,
size_t  n_outs,
ir_asm_constraint outputs,
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.
*inputsThe array of length arity of input constraints.
n_outsThe number of data outputs to the node.
*outputsThe array of length n_outs of output 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[],
ir_asm_constraint inputs,
size_t  n_outs,
ir_asm_constraint outputs,
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.
*inputsThe array of length arity of input constraints.
n_outsThe number of data outputs to the node.
*outputsThe array of length n_outs of output 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[],
ir_asm_constraint inputs,
size_t  n_outs,
ir_asm_constraint outputs,
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.
*inputsThe array of length arity of input constraints.
n_outsThe number of data outputs to the node.
*outputsThe array of length n_outs of output 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_input_constraints ( ir_node node,
ir_asm_constraint input_constraints 
)

Sets input_constraints attribute of an ASM node.

void set_ASM_mem ( ir_node node,
ir_node mem 
)

Sets mem input of an ASM node.

void set_ASM_output_constraints ( ir_node node,
ir_asm_constraint output_constraints 
)

Sets output_constraints attribute 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 93 of file opcodes.h.