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

📄 rtl.def

📁 这是完整的gcc源代码
💻 DEF
📖 第 1 页 / 共 2 页
字号:
   under PARALLEL.  */DEF_RTL_EXPR(SET, "set", "ee")/* 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")/* 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")/* Call a subroutine.   Operand 1 is the address to call.   Operand 2 is the number of arguments.  */DEF_RTL_EXPR(CALL, "call", "ee")/* Return from a subroutine.  */DEF_RTL_EXPR(RETURN, "return", "")/* ----------------------------------------------------------------------   Primitive values for use in expressions.   ---------------------------------------------------------------------- *//* numeric integer constant */DEF_RTL_EXPR(CONST_INT, "const_int", "i")/* 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", "e0ii")/* 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")/* program counter.  Ordinary jumps are represented   by a SET whose first operand is (PC).  */DEF_RTL_EXPR(PC, "pc", "")/* 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")/* One word of a multi-word value.   The first operand is the complete value; the second says which word.   The WORDS_BIG_ENDIAN flag controls whether word number 0   (as numbered in a SUBREG) is the most or least significant word.   This is also used to refer to a value in a different machine mode.   For example, it can be used to refer to a SImode value as if it were   Qimode, or vice versa.  Then the word number is always 0.  */DEF_RTL_EXPR(SUBREG, "subreg", "ei")/* This one-argument rtx is used for move instructions   that are guaranteed to alter only the low part of a destination.   Thus, (SET (SUBREG:HI (REG...)) (MEM:HI ...))   has an unspecified effect on the high part of REG,   but (SET (STRICT_LOW_PART (SUBREG:HI (REG...))) (MEM:HI ...))   is guaranteed to alter only the bits of REG that are in HImode.   The actual instruction used is probably the same in both cases,   but the register constraints may be tighter when STRICT_LOW_PART   is in use.  */DEF_RTL_EXPR(STRICT_LOW_PART, "strict_low_part", "e")/* A memory location; operand is the address.   Can be nested inside a VOLATILE.  */DEF_RTL_EXPR(MEM, "mem", "e")/* Reference to an assembler label in the code for this function.   The operand is a CODE_LABEL found in the insn chain.   The unprinted fields 1 and 2 are used in flow.c for the   LABEL_NEXTREF and CONTAINING_INSN.  */DEF_RTL_EXPR(LABEL_REF, "label_ref", "u00")/* Reference to a named label: the string that is the first operand,   with `_' added implicitly in front.   Exception: if the first character explicitly given is `*',   to give it to the assembler, remove the `*' and do not add `_'.  */DEF_RTL_EXPR(SYMBOL_REF, "symbol_ref", "s")/* The condition code register is represented, in our imagination,   as a register holding a value that can be compared to zero.   In fact, the machine has already compared them and recorded the   results; but instructions that look at the condition code   pretend to be looking at the entire value and comparing it.  */DEF_RTL_EXPR(CC0, "cc0", "")/* =====================================================================   A QUEUED expression really points to a member of the queue of instructions   to be output later for postincrement/postdecrement.   QUEUED expressions never become part of instructions.   When a QUEUED expression would be put into an instruction,   instead either the incremented variable or a copy of its previous   value is used.      Operands are:   0. the variable to be incremented (a REG rtx).   1. the incrementing instruction, or 0 if it hasn't been output yet.   2. A REG rtx for a copy of the old value of the variable, or 0 if none yet.   3. the body to use for the incrementing instruction   4. the next QUEUED expression in the queue.   ====================================================================== */DEF_RTL_EXPR(QUEUED, "queued", "eeeee")/* ----------------------------------------------------------------------   Expressions for operators in an rtl pattern   ---------------------------------------------------------------------- *//* if_then_else.  This is used in representing ordinary   conditional jump instructions.     Operand:     0:  condition     1:  then expr     2:  else expr */DEF_RTL_EXPR(IF_THEN_ELSE, "if_then_else", "eee")/* Comparison, produces a condition code result.  */DEF_RTL_EXPR(COMPARE, "compare", "ee")/* plus */DEF_RTL_EXPR(PLUS, "plus", "ee")/* Operand 0 minus operand 1.  */DEF_RTL_EXPR(MINUS, "minus", "ee")/* Minus operand 0.  */DEF_RTL_EXPR(NEG, "neg", "e")DEF_RTL_EXPR(MULT, "mult", "ee")/* Operand 0 divided by operand 1.  */DEF_RTL_EXPR(DIV, "div", "ee")/* Remainder of operand 0 divided by operand 1.  */DEF_RTL_EXPR(MOD, "mod", "ee")/* Unsigned multiply and divide.  */DEF_RTL_EXPR(UMULT, "umult", "ee")DEF_RTL_EXPR(UDIV, "udiv", "ee")DEF_RTL_EXPR(UMOD, "umod", "ee")/* Bitwise operations.  */DEF_RTL_EXPR(AND, "and", "ee")DEF_RTL_EXPR(IOR, "ior", "ee")DEF_RTL_EXPR(XOR, "xor", "ee")DEF_RTL_EXPR(NOT, "not", "e")/* Operand:     0:  value to be shifted.     1:  number of bits.   ASHIFT and LSHIFT are distinguished because on some machines   these allow a negative operand and shift right in that case.  */DEF_RTL_EXPR(LSHIFT, "lshift", "ee")DEF_RTL_EXPR(ASHIFT, "ashift", "ee")DEF_RTL_EXPR(ROTATE, "rotate", "ee")/* Right shift operations, for machines where these are not the same   as left shifting with a negative argument.  */DEF_RTL_EXPR(ASHIFTRT, "ashiftrt", "ee")DEF_RTL_EXPR(LSHIFTRT, "lshiftrt", "ee")DEF_RTL_EXPR(ROTATERT, "rotatert", "ee")/* These unary operations are used to represent incrementation   and decrementation as they occur in memory addresses.   The amount of increment or decrement are not represented   because they can be understood from the machine-mode of the   containing MEM.  These operations exist in only two cases:   1. pushes onto the stack.   2. created automatically by the life_analysis pass in flow.c.  */DEF_RTL_EXPR(PRE_DEC, "pre_dec", "e")DEF_RTL_EXPR(PRE_INC, "pre_inc", "e")DEF_RTL_EXPR(POST_DEC, "post_dec", "e")DEF_RTL_EXPR(POST_INC, "post_inc", "e")/* Comparison operations.  The ordered comparisons exist in two   flavors, signed and unsigned.  */DEF_RTL_EXPR(NE, "ne", "ee")DEF_RTL_EXPR(EQ, "eq", "ee")DEF_RTL_EXPR(GE, "ge", "ee")DEF_RTL_EXPR(GT, "gt", "ee")DEF_RTL_EXPR(LE, "le", "ee")DEF_RTL_EXPR(LT, "lt", "ee")DEF_RTL_EXPR(GEU, "geu", "ee")DEF_RTL_EXPR(GTU, "gtu", "ee")DEF_RTL_EXPR(LEU, "leu", "ee")DEF_RTL_EXPR(LTU, "ltu", "ee")/* Represents the result of sign-extending the sole operand.   The machine modes of the operand and of the SIGN_EXTEND expression   determine how much sign-extension is going on.  */DEF_RTL_EXPR(SIGN_EXTEND, "sign_extend", "e")/* Similar for zero-extension (such as unsigned short to int).  */DEF_RTL_EXPR(ZERO_EXTEND, "zero_extend", "e")/* Similar but here the operand has a wider mode.  */DEF_RTL_EXPR(TRUNCATE, "truncate", "e")/* Similar for extending floating-point values (such as SFmode to DFmode).  */DEF_RTL_EXPR(FLOAT_EXTEND, "float_extend", "e")DEF_RTL_EXPR(FLOAT_TRUNCATE, "float_truncate", "e")/* Conversion of fixed point operand to floating point value.  */DEF_RTL_EXPR(FLOAT, "float", "e")/* With fixed-point machine mode:   Conversion of floating point operand to fixed point value.   Value is defined only when the operand's value is an integer.   With floating-point machine mode (and operand with same mode):   Operand is rounded toward zero to produce an integer value   represented in floating point.  */DEF_RTL_EXPR(FIX, "fix", "e")/* Conversion of unsigned fixed point operand to floating point value.  */DEF_RTL_EXPR(UNSIGNED_FLOAT, "unsigned_float", "e")/* With fixed-point machine mode:   Conversion of floating point operand to *unsigned* fixed point value.   Value is defined only when the operand's value is an integer.  */DEF_RTL_EXPR(UNSIGNED_FIX, "unsigned_fix", "e")/* Absolute value */DEF_RTL_EXPR(ABS, "abs", "e")/* Square root */DEF_RTL_EXPR(SQRT, "sqrt", "e")/* Find first bit that is set.   Value is 1 + number of trailing zeros in the arg.,   or 0 if arg is 0.  */DEF_RTL_EXPR(FFS, "ffs", "e")/* Reference to a signed bit-field of specified size and position.   Operand 0 is the memory unit (usually SImode or QImode) which   contains the field's first bit.  Operand 1 is the width, in bits.   Operand 2 is the number of bits in the memory unit before the   first bit of this field.   If BITS_BIG_ENDIAN is defined, the first bit is the msb and   operand 2 counts from the msb of the memory unit.   Otherwise, the first bit is the lsb and operand 2 counts from   the lsb of the memory unit.  */DEF_RTL_EXPR(SIGN_EXTRACT, "sign_extract", "eee")/* Similar for unsigned bit-field.  */DEF_RTL_EXPR(ZERO_EXTRACT, "zero_extract", "eee")/*Local variables:mode:cversion-control: tEnd:*/

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -