comparison gcc/rtl.def @ 55:77e2b8dfacca gcc-4.4.5

update it from 4.4.3 to 4.5.0
author ryoma <e075725@ie.u-ryukyu.ac.jp>
date Fri, 12 Feb 2010 23:39:51 +0900
parents a06113de4d67
children b7f97abdc517
comparison
equal deleted inserted replaced
52:c156f1bd5cd9 55:77e2b8dfacca
1 /* This file contains the definitions and documentation for the 1 /* This file contains the definitions and documentation for the
2 Register Transfer Expressions (rtx's) that make up the 2 Register Transfer Expressions (rtx's) that make up the
3 Register Transfer Language (rtl) used in the Back End of the GNU compiler. 3 Register Transfer Language (rtl) used in the Back End of the GNU compiler.
4 Copyright (C) 1987, 1988, 1992, 1994, 1995, 1997, 1998, 1999, 2000, 2004, 4 Copyright (C) 1987, 1988, 1992, 1994, 1995, 1997, 1998, 1999, 2000, 2004,
5 2005, 2006, 2007, 2008 5 2005, 2006, 2007, 2008, 2009
6 Free Software Foundation, Inc. 6 Free Software Foundation, Inc.
7 7
8 This file is part of GCC. 8 This file is part of GCC.
9 9
10 GCC is free software; you can redistribute it and/or modify it under 10 GCC is free software; you can redistribute it and/or modify it under
40 By convention these are the internal (field 1) names in lower_case. 40 By convention these are the internal (field 1) names in lower_case.
41 41
42 3. The print format, and type of each rtx->u.fld[] (field) in this rtx. 42 3. The print format, and type of each rtx->u.fld[] (field) in this rtx.
43 These formats are stored in rtx_format[]. 43 These formats are stored in rtx_format[].
44 The meaning of the formats is documented in front of this array in rtl.c 44 The meaning of the formats is documented in front of this array in rtl.c
45 45
46 4. The class of the rtx. These are stored in rtx_class and are accessed 46 4. The class of the rtx. These are stored in rtx_class and are accessed
47 via the GET_RTX_CLASS macro. They are defined as follows: 47 via the GET_RTX_CLASS macro. They are defined as follows:
48 48
49 RTX_CONST_OBJ 49 RTX_CONST_OBJ
50 an rtx code that can be used to represent a constant object 50 an rtx code that can be used to represent a constant object
79 79
80 /* Unknown, or no such operation; the enumeration constant should have 80 /* Unknown, or no such operation; the enumeration constant should have
81 value zero. */ 81 value zero. */
82 DEF_RTL_EXPR(UNKNOWN, "UnKnown", "*", RTX_EXTRA) 82 DEF_RTL_EXPR(UNKNOWN, "UnKnown", "*", RTX_EXTRA)
83 83
84 /* Used in the cselib routines to describe a value. Objects of this
85 kind are only allocated in cselib.c, in an alloc pool instead of in
86 GC memory. The only operand of a VALUE is a cselib_val_struct.
87 var-tracking requires this to have a distinct integral value from
88 DECL codes in trees. */
89 DEF_RTL_EXPR(VALUE, "value", "0", RTX_OBJ)
90
91 /* The RTL generated for a DEBUG_EXPR_DECL. It links back to the
92 DEBUG_EXPR_DECL in the first operand. */
93 DEF_RTL_EXPR(DEBUG_EXPR, "debug_expr", "0", RTX_OBJ)
94
84 /* --------------------------------------------------------------------- 95 /* ---------------------------------------------------------------------
85 Expressions used in constructing lists. 96 Expressions used in constructing lists.
86 --------------------------------------------------------------------- */ 97 --------------------------------------------------------------------- */
87 98
88 /* a linked list of expressions */ 99 /* a linked list of expressions */
108 Each insn expression holds an rtl instruction and its semantics 119 Each insn expression holds an rtl instruction and its semantics
109 during back-end processing. 120 during back-end processing.
110 See macros's in "rtl.h" for the meaning of each rtx->u.fld[]. 121 See macros's in "rtl.h" for the meaning of each rtx->u.fld[].
111 122
112 ---------------------------------------------------------------------- */ 123 ---------------------------------------------------------------------- */
124
125 /* An annotation for variable assignment tracking. */
126 DEF_RTL_EXPR(DEBUG_INSN, "debug_insn", "iuuBieie", RTX_INSN)
113 127
114 /* An instruction that cannot jump. */ 128 /* An instruction that cannot jump. */
115 DEF_RTL_EXPR(INSN, "insn", "iuuBieie", RTX_INSN) 129 DEF_RTL_EXPR(INSN, "insn", "iuuBieie", RTX_INSN)
116 130
117 /* An instruction that can possibly jump. 131 /* An instruction that can possibly jump.
144 DEF_RTL_EXPR(NOTE, "note", "iuuB0ni", RTX_EXTRA) 158 DEF_RTL_EXPR(NOTE, "note", "iuuB0ni", RTX_EXTRA)
145 159
146 /* ---------------------------------------------------------------------- 160 /* ----------------------------------------------------------------------
147 Top level constituents of INSN, JUMP_INSN and CALL_INSN. 161 Top level constituents of INSN, JUMP_INSN and CALL_INSN.
148 ---------------------------------------------------------------------- */ 162 ---------------------------------------------------------------------- */
149 163
150 /* Conditionally execute code. 164 /* Conditionally execute code.
151 Operand 0 is the condition that if true, the code is executed. 165 Operand 0 is the condition that if true, the code is executed.
152 Operand 1 is the code to be executed (typically a SET). 166 Operand 1 is the code to be executed (typically a SET).
153 167
154 Semantics are that there are no side effects if the condition 168 Semantics are that there are no side effects if the condition
155 is false. This pattern is created automatically by the if_convert 169 is false. This pattern is created automatically by the if_convert
156 pass run after reload or by target-specific splitters. */ 170 pass run after reload or by target-specific splitters. */
157 DEF_RTL_EXPR(COND_EXEC, "cond_exec", "ee", RTX_EXTRA) 171 DEF_RTL_EXPR(COND_EXEC, "cond_exec", "ee", RTX_EXTRA)
175 is made for each output; this integer distinguishes them. 189 is made for each output; this integer distinguishes them.
176 4th is a vector of values of input operands. 190 4th is a vector of values of input operands.
177 5th is a vector of modes and constraints for the input operands. 191 5th is a vector of modes and constraints for the input operands.
178 Each element is an ASM_INPUT containing a constraint string 192 Each element is an ASM_INPUT containing a constraint string
179 and whose mode indicates the mode of the input operand. 193 and whose mode indicates the mode of the input operand.
180 6th is the source line number. */ 194 6th is a vector of labels that may be branched to by the asm.
181 DEF_RTL_EXPR(ASM_OPERANDS, "asm_operands", "ssiEEi", RTX_EXTRA) 195 7th is the source line number. */
196 DEF_RTL_EXPR(ASM_OPERANDS, "asm_operands", "ssiEEEi", RTX_EXTRA)
182 197
183 /* A machine-specific operation. 198 /* A machine-specific operation.
184 1st operand is a vector of operands being used by the operation so that 199 1st operand is a vector of operands being used by the operation so that
185 any needed reloads can be done. 200 any needed reloads can be done.
186 2nd operand is a unique value saying which of a number of machine-specific 201 2nd operand is a unique value saying which of a number of machine-specific
187 operations is to be performed. 202 operations is to be performed.
188 (Note that the vector must be the first operand because of the way that 203 (Note that the vector must be the first operand because of the way that
189 genrecog.c record positions within an insn.) 204 genrecog.c record positions within an insn.)
190 205
191 UNSPEC can occur all by itself in a PATTERN, as a component of a PARALLEL, 206 UNSPEC can occur all by itself in a PATTERN, as a component of a PARALLEL,
192 or inside an expression. 207 or inside an expression.
193 UNSPEC by itself or as a component of a PARALLEL 208 UNSPEC by itself or as a component of a PARALLEL
194 is currently considered not deletable. 209 is currently considered not deletable.
195 210
196 FIXME: Replace all uses of UNSPEC that appears by itself or as a component 211 FIXME: Replace all uses of UNSPEC that appears by itself or as a component
197 of a PARALLEL with USE. 212 of a PARALLEL with USE.
225 scale: scaling that is necessary to make offsets fit into the mode. 240 scale: scaling that is necessary to make offsets fit into the mode.
226 241
227 The third, fourth and fifth operands are only valid when 242 The third, fourth and fifth operands are only valid when
228 CASE_VECTOR_SHORTEN_MODE is defined, and only in an optimizing 243 CASE_VECTOR_SHORTEN_MODE is defined, and only in an optimizing
229 compilations. */ 244 compilations. */
230 245
231 DEF_RTL_EXPR(ADDR_DIFF_VEC, "addr_diff_vec", "eEee0", RTX_EXTRA) 246 DEF_RTL_EXPR(ADDR_DIFF_VEC, "addr_diff_vec", "eEee0", RTX_EXTRA)
232 247
233 /* Memory prefetch, with attributes supported on some targets. 248 /* Memory prefetch, with attributes supported on some targets.
234 Operand 1 is the address of the memory to fetch. 249 Operand 1 is the address of the memory to fetch.
235 Operand 2 is 1 for a write access, 0 otherwise. 250 Operand 2 is 1 for a write access, 0 otherwise.
253 under PARALLEL. */ 268 under PARALLEL. */
254 DEF_RTL_EXPR(SET, "set", "ee", RTX_EXTRA) 269 DEF_RTL_EXPR(SET, "set", "ee", RTX_EXTRA)
255 270
256 /* Indicate something is used in a way that we don't want to explain. 271 /* Indicate something is used in a way that we don't want to explain.
257 For example, subroutine calls will use the register 272 For example, subroutine calls will use the register
258 in which the static chain is passed. 273 in which the static chain is passed.
259 274
260 USE can not appear as an operand of other rtx except for PARALLEL. 275 USE can not appear as an operand of other rtx except for PARALLEL.
261 USE is not deletable, as it indicates that the operand 276 USE is not deletable, as it indicates that the operand
262 is used in some unknown way. */ 277 is used in some unknown way. */
263 DEF_RTL_EXPR(USE, "use", "e", RTX_EXTRA) 278 DEF_RTL_EXPR(USE, "use", "e", RTX_EXTRA)
264 279
265 /* Indicate something is clobbered in a way that we don't want to explain. 280 /* Indicate something is clobbered in a way that we don't want to explain.
266 For example, subroutine calls will clobber some physical registers 281 For example, subroutine calls will clobber some physical registers
267 (the ones that are by convention not saved). 282 (the ones that are by convention not saved).
268 283
269 CLOBBER can not appear as an operand of other rtx except for PARALLEL. 284 CLOBBER can not appear as an operand of other rtx except for PARALLEL.
270 CLOBBER of a hard register appearing by itself (not within PARALLEL) 285 CLOBBER of a hard register appearing by itself (not within PARALLEL)
271 is considered undeletable before reload. */ 286 is considered undeletable before reload. */
272 DEF_RTL_EXPR(CLOBBER, "clobber", "e", RTX_EXTRA) 287 DEF_RTL_EXPR(CLOBBER, "clobber", "e", RTX_EXTRA)
278 DEF_RTL_EXPR(CALL, "call", "ee", RTX_EXTRA) 293 DEF_RTL_EXPR(CALL, "call", "ee", RTX_EXTRA)
279 294
280 /* Return from a subroutine. */ 295 /* Return from a subroutine. */
281 296
282 DEF_RTL_EXPR(RETURN, "return", "", RTX_EXTRA) 297 DEF_RTL_EXPR(RETURN, "return", "", RTX_EXTRA)
298
299 /* Special for EH return from subroutine. */
300
301 DEF_RTL_EXPR(EH_RETURN, "eh_return", "", RTX_EXTRA)
283 302
284 /* Conditional trap. 303 /* Conditional trap.
285 Operand 1 is the condition. 304 Operand 1 is the condition.
286 Operand 2 is the trap code. 305 Operand 2 is the trap code.
287 For an unconditional trap, make the condition (const_int 1). */ 306 For an unconditional trap, make the condition (const_int 1). */
288 DEF_RTL_EXPR(TRAP_IF, "trap_if", "ee", RTX_EXTRA) 307 DEF_RTL_EXPR(TRAP_IF, "trap_if", "ee", RTX_EXTRA)
289 308
290 /* Placeholder for _Unwind_Resume before we know if a function call
291 or a branch is needed. Operand 1 is the exception region from
292 which control is flowing. */
293 DEF_RTL_EXPR(RESX, "resx", "i", RTX_EXTRA)
294
295 /* ---------------------------------------------------------------------- 309 /* ----------------------------------------------------------------------
296 Primitive values for use in expressions. 310 Primitive values for use in expressions.
297 ---------------------------------------------------------------------- */ 311 ---------------------------------------------------------------------- */
298 312
299 /* numeric integer constant */ 313 /* numeric integer constant */
322 DEF_RTL_EXPR(CONST, "const", "e", RTX_CONST_OBJ) 336 DEF_RTL_EXPR(CONST, "const", "e", RTX_CONST_OBJ)
323 337
324 /* program counter. Ordinary jumps are represented 338 /* program counter. Ordinary jumps are represented
325 by a SET whose first operand is (PC). */ 339 by a SET whose first operand is (PC). */
326 DEF_RTL_EXPR(PC, "pc", "", RTX_OBJ) 340 DEF_RTL_EXPR(PC, "pc", "", RTX_OBJ)
327
328 /* Used in the cselib routines to describe a value. Objects of this
329 kind are only allocated in cselib.c, in an alloc pool instead of
330 in GC memory. The only operand of a VALUE is a cselib_val_struct. */
331 DEF_RTL_EXPR(VALUE, "value", "0", RTX_OBJ)
332 341
333 /* A register. The "operand" is the register number, accessed with 342 /* A register. The "operand" is the register number, accessed with
334 the REGNO macro. If this number is less than FIRST_PSEUDO_REGISTER 343 the REGNO macro. If this number is less than FIRST_PSEUDO_REGISTER
335 than a hardware register is being referred to. The second operand 344 than a hardware register is being referred to. The second operand
336 holds the original register number - this will be different for a 345 holds the original register number - this will be different for a
383 392
384 /* Reference to an assembler label in the code for this function. 393 /* Reference to an assembler label in the code for this function.
385 The operand is a CODE_LABEL found in the insn chain. */ 394 The operand is a CODE_LABEL found in the insn chain. */
386 DEF_RTL_EXPR(LABEL_REF, "label_ref", "u", RTX_CONST_OBJ) 395 DEF_RTL_EXPR(LABEL_REF, "label_ref", "u", RTX_CONST_OBJ)
387 396
388 /* Reference to a named label: 397 /* Reference to a named label:
389 Operand 0: label name 398 Operand 0: label name
390 Operand 1: flags (see SYMBOL_FLAG_* in rtl.h) 399 Operand 1: flags (see SYMBOL_FLAG_* in rtl.h)
391 Operand 2: tree from which this symbol is derived, or null. 400 Operand 2: tree from which this symbol is derived, or null.
392 This is either a DECL node, or some kind of constant. */ 401 This is either a DECL node, or some kind of constant. */
393 DEF_RTL_EXPR(SYMBOL_REF, "symbol_ref", "s00", RTX_CONST_OBJ) 402 DEF_RTL_EXPR(SYMBOL_REF, "symbol_ref", "s00", RTX_CONST_OBJ)
662 /* Describes an operation that converts a small vector into a larger one by 671 /* Describes an operation that converts a small vector into a larger one by
663 duplicating the input values. The output vector mode must have the same 672 duplicating the input values. The output vector mode must have the same
664 submodes as the input vector mode, and the number of output parts must be 673 submodes as the input vector mode, and the number of output parts must be
665 an integer multiple of the number of input parts. */ 674 an integer multiple of the number of input parts. */
666 DEF_RTL_EXPR(VEC_DUPLICATE, "vec_duplicate", "e", RTX_UNARY) 675 DEF_RTL_EXPR(VEC_DUPLICATE, "vec_duplicate", "e", RTX_UNARY)
667 676
668 /* Addition with signed saturation */ 677 /* Addition with signed saturation */
669 DEF_RTL_EXPR(SS_PLUS, "ss_plus", "ee", RTX_COMM_ARITH) 678 DEF_RTL_EXPR(SS_PLUS, "ss_plus", "ee", RTX_COMM_ARITH)
670 679
671 /* Addition with unsigned saturation */ 680 /* Addition with unsigned saturation */
672 DEF_RTL_EXPR(US_PLUS, "us_plus", "ee", RTX_COMM_ARITH) 681 DEF_RTL_EXPR(US_PLUS, "us_plus", "ee", RTX_COMM_ARITH)
759 768
760 /* Match a PARALLEL of arbitrary length. The predicate is applied 769 /* Match a PARALLEL of arbitrary length. The predicate is applied
761 to the PARALLEL and the initial expressions in the PARALLEL are matched. 770 to the PARALLEL and the initial expressions in the PARALLEL are matched.
762 Operand 0 is the operand-number, as in match_operand. 771 Operand 0 is the operand-number, as in match_operand.
763 Operand 1 is a predicate to apply to the PARALLEL. 772 Operand 1 is a predicate to apply to the PARALLEL.
764 Operand 2 is a vector of expressions, each of which must match the 773 Operand 2 is a vector of expressions, each of which must match the
765 corresponding element in the PARALLEL. */ 774 corresponding element in the PARALLEL. */
766 DEF_RTL_EXPR(MATCH_PARALLEL, "match_parallel", "isE", RTX_MATCH) 775 DEF_RTL_EXPR(MATCH_PARALLEL, "match_parallel", "isE", RTX_MATCH)
767 776
768 /* Match only something equal to what is stored in the operand table 777 /* Match only something equal to what is stored in the operand table
769 at the index specified by the argument. Use with MATCH_OPERAND. */ 778 at the index specified by the argument. Use with MATCH_OPERAND. */
847 3: is the action to execute if this pattern is matched. 856 3: is the action to execute if this pattern is matched.
848 If this assembler code template starts with a * then it is a fragment of 857 If this assembler code template starts with a * then it is a fragment of
849 C code to run to decide on a template to use. Otherwise, it is the 858 C code to run to decide on a template to use. Otherwise, it is the
850 template to use. 859 template to use.
851 4: C expression that must be true for split. This may start with "&&" 860 4: C expression that must be true for split. This may start with "&&"
852 in which case the split condition is the logical and of the insn 861 in which case the split condition is the logical and of the insn
853 condition and what follows the "&&" of this operand. 862 condition and what follows the "&&" of this operand.
854 5: vector of insn patterns to place into a SEQUENCE 863 5: vector of insn patterns to place into a SEQUENCE
855 6: optionally, some C code to execute before generating the 864 6: optionally, some C code to execute before generating the
856 insns. This might, for example, create some RTX's and store them in 865 insns. This might, for example, create some RTX's and store them in
857 elements of `recog_data.operand' for use by the vector of 866 elements of `recog_data.operand' for use by the vector of
858 insn-patterns. 867 insn-patterns.
859 (`operands' is an alias here for `recog_data.operand'). 868 (`operands' is an alias here for `recog_data.operand').
860 7: optionally, a vector of attributes for this insn. */ 869 7: optionally, a vector of attributes for this insn. */
861 DEF_RTL_EXPR(DEFINE_INSN_AND_SPLIT, "define_insn_and_split", "sEsTsESV", RTX_EXTRA) 870 DEF_RTL_EXPR(DEFINE_INSN_AND_SPLIT, "define_insn_and_split", "sEsTsESV", RTX_EXTRA)
862 871
863 /* Definition of an RTL peephole operation. 872 /* Definition of an RTL peephole operation.
864 Follows the same arguments as define_split. */ 873 Follows the same arguments as define_split. */
874 This might, for example, create some RTX's and store them in 883 This might, for example, create some RTX's and store them in
875 elements of `recog_data.operand' for use by the vector of 884 elements of `recog_data.operand' for use by the vector of
876 insn-patterns. 885 insn-patterns.
877 (`operands' is an alias here for `recog_data.operand'). */ 886 (`operands' is an alias here for `recog_data.operand'). */
878 DEF_RTL_EXPR(DEFINE_EXPAND, "define_expand", "sEss", RTX_EXTRA) 887 DEF_RTL_EXPR(DEFINE_EXPAND, "define_expand", "sEss", RTX_EXTRA)
879 888
880 /* Define a requirement for delay slots. 889 /* Define a requirement for delay slots.
881 1st operand: Condition involving insn attributes that, if true, 890 1st operand: Condition involving insn attributes that, if true,
882 indicates that the insn requires the number of delay slots 891 indicates that the insn requires the number of delay slots
883 shown. 892 shown.
884 2nd operand: Vector whose length is the three times the number of delay 893 2nd operand: Vector whose length is the three times the number of delay
885 slots required. 894 slots required.
886 Each entry gives three conditions, each involving attributes. 895 Each entry gives three conditions, each involving attributes.
887 The first must be true for an insn to occupy that delay slot 896 The first must be true for an insn to occupy that delay slot
888 location. The second is true for all insns that can be 897 location. The second is true for all insns that can be
889 annulled if the branch is true and the third is true for all 898 annulled if the branch is true and the third is true for all
890 insns that can be annulled if the branch is false. 899 insns that can be annulled if the branch is false.
891 900
892 Multiple DEFINE_DELAYs may be present. They indicate differing 901 Multiple DEFINE_DELAYs may be present. They indicate differing
893 requirements for delay slots. */ 902 requirements for delay slots. */
894 DEF_RTL_EXPR(DEFINE_DELAY, "define_delay", "eE", RTX_EXTRA) 903 DEF_RTL_EXPR(DEFINE_DELAY, "define_delay", "eE", RTX_EXTRA)
895 904
953 DEFINE_ADDRESS_CONSTRAINT tells reload that this constraint can be made 962 DEFINE_ADDRESS_CONSTRAINT tells reload that this constraint can be made
954 to match, if it doesn't already, by converting the operand to the form 963 to match, if it doesn't already, by converting the operand to the form
955 (reg X) where X is a base register. It is suitable for constraints that 964 (reg X) where X is a base register. It is suitable for constraints that
956 describe a subset of all address references. 965 describe a subset of all address references.
957 966
958 When in doubt, use plain DEFINE_CONSTRAINT. 967 When in doubt, use plain DEFINE_CONSTRAINT.
959 968
960 Operand: 969 Operand:
961 0: The name of the constraint (often, but not always, a single letter). 970 0: The name of the constraint (often, but not always, a single letter).
962 1: A docstring for this constraint, in Texinfo syntax; not currently 971 1: A docstring for this constraint, in Texinfo syntax; not currently
963 used, in future will be incorporated into the manual's list of 972 used, in future will be incorporated into the manual's list of
977 Do not use ival/hval/lval/rval if op is not the appropriate kind of 986 Do not use ival/hval/lval/rval if op is not the appropriate kind of
978 RTL object. */ 987 RTL object. */
979 DEF_RTL_EXPR(DEFINE_CONSTRAINT, "define_constraint", "sse", RTX_EXTRA) 988 DEF_RTL_EXPR(DEFINE_CONSTRAINT, "define_constraint", "sse", RTX_EXTRA)
980 DEF_RTL_EXPR(DEFINE_MEMORY_CONSTRAINT, "define_memory_constraint", "sse", RTX_EXTRA) 989 DEF_RTL_EXPR(DEFINE_MEMORY_CONSTRAINT, "define_memory_constraint", "sse", RTX_EXTRA)
981 DEF_RTL_EXPR(DEFINE_ADDRESS_CONSTRAINT, "define_address_constraint", "sse", RTX_EXTRA) 990 DEF_RTL_EXPR(DEFINE_ADDRESS_CONSTRAINT, "define_address_constraint", "sse", RTX_EXTRA)
982 991
983 992
984 /* Constructions for CPU pipeline description described by NDFAs. */ 993 /* Constructions for CPU pipeline description described by NDFAs. */
985 994
986 /* (define_cpu_unit string [string]) describes cpu functional 995 /* (define_cpu_unit string [string]) describes cpu functional
987 units (separated by comma). 996 units (separated by comma).
1013 the first string can not be reserved unless at least one of pattern 1022 the first string can not be reserved unless at least one of pattern
1014 of units whose names are in the second string is reserved. This is 1023 of units whose names are in the second string is reserved. This is
1015 an asymmetric relation. CPU units or unit patterns in the strings 1024 an asymmetric relation. CPU units or unit patterns in the strings
1016 are separated by commas. Pattern is one unit name or unit names 1025 are separated by commas. Pattern is one unit name or unit names
1017 separated by white-spaces. 1026 separated by white-spaces.
1018 1027
1019 For example, it is useful for description that slot1 is reserved 1028 For example, it is useful for description that slot1 is reserved
1020 after slot0 reservation for a VLIW processor. We could describe it 1029 after slot0 reservation for a VLIW processor. We could describe it
1021 by the following construction 1030 by the following construction
1022 1031
1023 (presence_set "slot1" "slot0") 1032 (presence_set "slot1" "slot0")
1038 changed. The first state is a source state, the second one is a 1047 changed. The first state is a source state, the second one is a
1039 result state. Checking for `presence_set' is done on the source 1048 result state. Checking for `presence_set' is done on the source
1040 state reservation, checking for `final_presence_set' is done on the 1049 state reservation, checking for `final_presence_set' is done on the
1041 result reservation. This construction is useful to describe a 1050 result reservation. This construction is useful to describe a
1042 reservation which is actually two subsequent reservations. For 1051 reservation which is actually two subsequent reservations. For
1043 example, if we use 1052 example, if we use
1044 1053
1045 (presence_set "slot1" "slot0") 1054 (presence_set "slot1" "slot0")
1046 1055
1047 the following insn will be never issued (because slot1 requires 1056 the following insn will be never issued (because slot1 requires
1048 slot0 which is absent in the source state). 1057 slot0 which is absent in the source state).
1086 string. Insn names in the strings are separated by commas. The 1095 string. Insn names in the strings are separated by commas. The
1087 third operand is optional name of function which is additional 1096 third operand is optional name of function which is additional
1088 guard for the bypass. The function will get the two insns as 1097 guard for the bypass. The function will get the two insns as
1089 parameters. If the function returns zero the bypass will be 1098 parameters. If the function returns zero the bypass will be
1090 ignored for this case. Additional guard is necessary to recognize 1099 ignored for this case. Additional guard is necessary to recognize
1091 complicated bypasses, e.g. when consumer is load address. */ 1100 complicated bypasses, e.g. when consumer is load address. If there
1101 are more one bypass with the same output and input insns, the
1102 chosen bypass is the first bypass with a guard in description whose
1103 guard function returns nonzero. If there is no such bypass, then
1104 bypass without the guard function is chosen. */
1092 DEF_RTL_EXPR(DEFINE_BYPASS, "define_bypass", "issS", RTX_EXTRA) 1105 DEF_RTL_EXPR(DEFINE_BYPASS, "define_bypass", "issS", RTX_EXTRA)
1093 1106
1094 /* (define_automaton string) describes names of automata generated and 1107 /* (define_automaton string) describes names of automata generated and
1095 used for pipeline hazards recognition. The names are separated by 1108 used for pipeline hazards recognition. The names are separated by
1096 comma. Actually it is possibly to generate the single automaton 1109 comma. Actually it is possibly to generate the single automaton
1107 is only worth to do when we are debugging the description and 1120 is only worth to do when we are debugging the description and
1108 need to look more accurately at reservations of states. 1121 need to look more accurately at reservations of states.
1109 1122
1110 o "time" which means printing additional time statistics about 1123 o "time" which means printing additional time statistics about
1111 generation of automata. 1124 generation of automata.
1112 1125
1113 o "v" which means generation of file describing the result 1126 o "v" which means generation of file describing the result
1114 automata. The file has suffix `.dfa' and can be used for the 1127 automata. The file has suffix `.dfa' and can be used for the
1115 description verification and debugging. 1128 description verification and debugging.
1116 1129
1117 o "w" which means generation of warning instead of error for 1130 o "w" which means generation of warning instead of error for
1145 oneof = oneof "|" allof 1158 oneof = oneof "|" allof
1146 | allof 1159 | allof
1147 1160
1148 allof = allof "+" repeat 1161 allof = allof "+" repeat
1149 | repeat 1162 | repeat
1150 1163
1151 repeat = element "*" number 1164 repeat = element "*" number
1152 | element 1165 | element
1153 1166
1154 element = cpu_function_unit_name 1167 element = cpu_function_unit_name
1155 | reservation_name 1168 | reservation_name