Mercurial > hg > CbC > CbC_gcc
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 |