/* This file contains the definitions and documentation for the
Register Transfer Expressions (rtx's) that make up the
Register Transfer Language (rtl) used in the Back End of the GNU compiler.
- Copyright (C) 1987-1991 Free Software Foundation, Inc.
+ Copyright (C) 1987, 1988, 1992, 1994, 1995 Free Software Foundation, Inc.
This file is part of GNU CC.
You should have received a copy of the GNU General Public License
along with GNU CC; see the file COPYING. If not, write to
-the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */
+the Free Software Foundation, 59 Temple Place - Suite 330,
+Boston, MA 02111-1307, USA. */
/* Expression definitions and descriptions for all targets are in this file.
Each gives a set of operations and associated delays. The first three
operands must be the same for each operation for the same function unit.
- All delays are specified in units of COST_PER_CYCLE.
+ All delays are specified in cycles.
1st operand: Name of function unit (mostly for documentation)
2nd operand: Number of identical function units in CPU
executing this operation. The meaning depends on whether or
not the next operand is supplied.
7th operand: If this operand is not specified, the 6th operand gives the
- cost of scheduling another operation on this unit while a
- previous one is active. A value of zero should be used for a
- pipelined unit. 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 and the 6th and 7th operands will
- be ignored.
+ 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
- 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
+ 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')
attribute name and the second is the comparison value. */
DEF_RTL_EXPR(EQ_ATTR, "eq_attr", "ss", 'x')
+/* A conditional expression which is true if the specified flag is
+ true for the insn being scheduled in reorg.
+
+ genattr.c defines the following flags which can be tested by
+ (attr_flag "foo") expressions in eligible_for_delay.
+
+ forward, backward, very_likely, likely, very_unlikely, and unlikely. */
+
+DEF_RTL_EXPR (ATTR_FLAG, "attr_flag", "s", 'x')
+
/* ----------------------------------------------------------------------
Expression types used for things in the instruction chain.
/* 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')
+ Field ( rtx->fld[7] ) is CALL_INSN_FUNCTION_USAGE.
+ All other fields ( rtx->fld[] ) have exact same meaning as INSN's. */
+DEF_RTL_EXPR(CALL_INSN, "call_insn", "iuueieee", 'i')
/* A marker that indicates that control will not flow through. */
DEF_RTL_EXPR(BARRIER, "barrier", "iuu", 'x')
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')
+DEF_RTL_EXPR(INLINE_HEADER, "inline_header", "iuuuiiiiiieeiiEeEss", 'x')
/* ----------------------------------------------------------------------
Top level constituents of INSN, JUMP_INSN and CALL_INSN.
DEF_RTL_EXPR(STRICT_LOW_PART, "strict_low_part", "e", 'x')
+/* (CONCAT a b) represents the virtual concatenation of a and b
+ to make a value that has as many bits as a and b put together.
+ This is used for complex values. Normally it appears only
+ in DECL_RTLs and during RTL generation, but not in the insn chain. */
+DEF_RTL_EXPR(CONCAT, "concat", "ee", 'o')
+
/* A memory location; operand is the address.
Can be nested inside a VOLATILE. */
DEF_RTL_EXPR(MEM, "mem", "e", 'o')
/* 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", '2')
+ 1: number of bits. */
DEF_RTL_EXPR(ASHIFT, "ashift", "ee", '2')
DEF_RTL_EXPR(ROTATE, "rotate", "ee", '2')
/*
Local variables:
mode:c
-version-control: t
End:
*/