📄 rtl.def
字号:
7th operand: If this operand is not specified, the 6th operand gives the number of cycles after the instruction matching the 4th operand begins using the function unit until a subsequent insn can begin. A value of zero should be used for a unit with no issue constraints. If only one operation can be executed a time and the unit is busy for the entire time, the 3rd operand should be specified as 1, the 6th operand sould be specified as 0, and the 7th operand should not be specified. If this operand is specified, it is a list of attribute expressions. If an insn for which any of these expressions is true is currently executing on the function unit, the issue delay will be given by the 6th operand. Otherwise, the insn can be immediately scheduled (subject to the limit on the number of simultaneous operations executing on the unit.) */DEF_RTL_EXPR(DEFINE_FUNCTION_UNIT, "define_function_unit", "siieiiV", 'x')/* Define attribute computation for `asm' instructions. */DEF_RTL_EXPR(DEFINE_ASM_ATTRIBUTES, "define_asm_attributes", "V", 'x' )/* SEQUENCE appears in the result of a `gen_...' function for a DEFINE_EXPAND that wants to make several insns. Its elements are the bodies of the insns that should be made. `emit_insn' takes the SEQUENCE apart and makes separate insns. */DEF_RTL_EXPR(SEQUENCE, "sequence", "E", 'x')/* Refers to the address of its argument. This appears only in machine descriptions, indicating that any expression that would be acceptable as the operand of MEM should be matched. */DEF_RTL_EXPR(ADDRESS, "address", "e", 'm')/* ---------------------------------------------------------------------- Expressions used for insn attributes. These also do not appear in actual rtl code in the compiler. ---------------------------------------------------------------------- *//* Definition of an insn attribute. 1st operand: name of the attribute 2nd operand: comma-separated list of possible attribute values 3rd operand: expression for the default value of the attribute. */DEF_RTL_EXPR(DEFINE_ATTR, "define_attr", "sse", 'x')/* Marker for the name of an attribute. */DEF_RTL_EXPR(ATTR, "attr", "s", 'x')/* For use in the last (optional) operand of DEFINE_INSN or DEFINE_PEEPHOLE and in DEFINE_ASM_INSN to specify an attribute to assign to insns matching that pattern. (set_attr "name" "value") is equivalent to (set (attr "name") (const_string "value")) */DEF_RTL_EXPR(SET_ATTR, "set_attr", "ss", 'x')/* In the last operand of DEFINE_INSN and DEFINE_PEEPHOLE, this can be used to specify that attribute values are to be assigned according to the alternative matched. The following three expressions are equivalent: (set (attr "att") (cond [(eq_attrq "alternative" "1") (const_string "a1") (eq_attrq "alternative" "2") (const_string "a2")] (const_string "a3"))) (set_attr_alternative "att" [(const_string "a1") (const_string "a2") (const_string "a3")]) (set_attr "att" "a1,a2,a3") */DEF_RTL_EXPR(SET_ATTR_ALTERNATIVE, "set_attr_alternative", "sE", 'x')/* A conditional expression true if the value of the specified attribute of the current insn equals the specified value. The first operand is the attribute name and the second is the comparison value. */DEF_RTL_EXPR(EQ_ATTR, "eq_attr", "ss", 'x')/* ---------------------------------------------------------------------- Expression types used for things in the instruction chain. All formats must start with "iuu" to handle the chain. Each insn expression holds an rtl instruction and its semantics during back-end processing. See macros's in "rtl.h" for the meaning of each rtx->fld[]. ---------------------------------------------------------------------- *//* An instruction that cannot jump. */DEF_RTL_EXPR(INSN, "insn", "iuueiee", 'i')/* An instruction that can possibly jump. Fields ( rtx->fld[] ) have exact same meaning as INSN's. */DEF_RTL_EXPR(JUMP_INSN, "jump_insn", "iuueiee0", 'i')/* An instruction that can possibly call a subroutine but which will not change which instruction comes next in the current function. Fields ( rtx->fld[] ) have exact same meaning as INSN's. */DEF_RTL_EXPR(CALL_INSN, "call_insn", "iuueiee", 'i')/* A marker that indicates that control will not flow through. */DEF_RTL_EXPR(BARRIER, "barrier", "iuu", 'x')/* Holds a label that is followed by instructions. Operand: 3: is a number that is unique in the entire compilation. 4: is the user-given name of the label, if any. 5: is used in jump.c for the use-count of the label. and in flow.c to point to the chain of label_ref's to this label. */DEF_RTL_EXPR(CODE_LABEL, "code_label", "iuuis0", 'x') /* Say where in the code a source line starts, for symbol table's sake. Contains a filename and a line number. Line numbers <= 0 are special: 0 is used in a dummy placed at the front of every function just so there will never be a need to delete the first insn; -1 indicates a dummy; insns to be deleted by flow analysis and combining are really changed to NOTEs with a number of -1. -2 means beginning of a name binding contour; output N_LBRAC. -3 means end of a contour; output N_RBRAC. */DEF_RTL_EXPR(NOTE, "note", "iuusn", 'x')/* INLINE_HEADER is use by inline function machinery. The information it contains helps to build the mapping function between the rtx's of the function to be inlined and the current function being expanded. */DEF_RTL_EXPR(INLINE_HEADER, "inline_header", "iuuuiiiiiieiiEe", 'x')/* ---------------------------------------------------------------------- Top level constituents of INSN, JUMP_INSN and CALL_INSN. ---------------------------------------------------------------------- */ /* Several operations to be done in parallel. */DEF_RTL_EXPR(PARALLEL, "parallel", "E", 'x')/* A string that is passed through to the assembler as input. One can obviously pass comments through by using the assembler comment syntax. These occur in an insn all by themselves as the PATTERN. They also appear inside an ASM_OPERANDS as a convenient way to hold a string. */DEF_RTL_EXPR(ASM_INPUT, "asm_input", "s", 'x')/* An assembler instruction with operands. 1st operand is the instruction template. 2nd operand is the constraint for the output. 3rd operand is the number of the output this expression refers to. When an insn stores more than one value, a separate ASM_OPERANDS is made for each output; this integer distinguishes them. 4th is a vector of values of input operands. 5th is a vector of modes and constraints for the input operands. Each element is an ASM_INPUT containing a constraint string and whose mode indicates the mode of the input operand. 6th is the name of the containing source file. 7th is the source line number. */DEF_RTL_EXPR(ASM_OPERANDS, "asm_operands", "ssiEEsi", 'x')/* A machine-specific operation. 1st operand is a vector of operands being used by the operation so that any needed reloads can be done. 2nd operand is a unique value saying which of a number of machine-specific operations is to be performed. (Note that the vector must be the first operand because of the way that genrecog.c record positions within an insn.) This can occur all by itself in a PATTERN, as a component of a PARALLEL, or inside an expression. */DEF_RTL_EXPR(UNSPEC, "unspec", "Ei", 'x')/* Similar, but a volatile operation and one which may trap. */DEF_RTL_EXPR(UNSPEC_VOLATILE, "unspec_volatile", "Ei", 'x')/* Vector of addresses, stored as full words. *//* Each element is a LABEL_REF to a CODE_LABEL whose address we want. */DEF_RTL_EXPR(ADDR_VEC, "addr_vec", "E", 'x')/* Vector of address differences X0 - BASE, X1 - BASE, ... First operand is BASE; the vector contains the X's. The machine mode of this rtx says how much space to leave for each difference. */DEF_RTL_EXPR(ADDR_DIFF_VEC, "addr_diff_vec", "eE", 'x')/* ---------------------------------------------------------------------- At the top level of an instruction (perhaps under PARALLEL). ---------------------------------------------------------------------- *//* Assignment. Operand 1 is the location (REG, MEM, PC, CC0 or whatever) assigned to. Operand 2 is the value stored there. ALL assignment must use SET. Instructions that do multiple assignments must use multiple SET, under PARALLEL. */DEF_RTL_EXPR(SET, "set", "ee", 'x')/* Indicate something is used in a way that we don't want to explain. For example, subroutine calls will use the register in which the static chain is passed. */DEF_RTL_EXPR(USE, "use", "e", 'x')/* Indicate something is clobbered in a way that we don't want to explain. For example, subroutine calls will clobber some physical registers (the ones that are by convention not saved). */DEF_RTL_EXPR(CLOBBER, "clobber", "e", 'x')/* Call a subroutine. Operand 1 is the address to call. Operand 2 is the number of arguments. */DEF_RTL_EXPR(CALL, "call", "ee", 'x')/* Return from a subroutine. */DEF_RTL_EXPR(RETURN, "return", "", 'x')/* Conditional trap. Operand 1 is the condition. Operand 2 is the trap code. For an unconditional trap, make the condition (const_int 1). */DEF_RTL_EXPR(TRAP_IF, "trap_if", "ei", 'x')/* ---------------------------------------------------------------------- Primitive values for use in expressions. ---------------------------------------------------------------------- *//* numeric integer constant */DEF_RTL_EXPR(CONST_INT, "const_int", "w", 'o')/* numeric double constant. Operand 0 is the MEM that stores this constant in memory, or various other things (see comments at immed_double_const in varasm.c). Operand 1 is a chain of all CONST_DOUBLEs in use in the current function. Remaining operands hold the actual value. The number of operands may be more than 2 if cross-compiling; see init_rtl. */DEF_RTL_EXPR(CONST_DOUBLE, "const_double", "e0ww", 'o')/* String constant. Used only for attributes right now. */DEF_RTL_EXPR(CONST_STRING, "const_string", "s", 'o')/* This is used to encapsulate an expression whose value is constant (such as the sum of a SYMBOL_REF and a CONST_INT) so that it will be recognized as a constant operand rather than by arithmetic instructions. */DEF_RTL_EXPR(CONST, "const", "e", 'o')/* program counter. Ordinary jumps are represented by a SET whose first operand is (PC). */DEF_RTL_EXPR(PC, "pc", "", 'o')/* A register. The "operand" is the register number, accessed with the REGNO macro. If this number is less than FIRST_PSEUDO_REGISTER than a hardware register is being referred to. */DEF_RTL_EXPR(REG, "reg", "i", 'o')
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -