⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 rtl.def

📁 早期freebsd实现
💻 DEF
📖 第 1 页 / 共 3 页
字号:
   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 + -