|
|
1.1 ! root 1: /* This file contains the definitions and documentation for the ! 2: machine modes used in the the GNU compiler. ! 3: Copyright (C) 1987 Free Software Foundation, Inc. ! 4: ! 5: This file is part of GNU CC. ! 6: ! 7: GNU CC is distributed in the hope that it will be useful, ! 8: but WITHOUT ANY WARRANTY. No author or distributor ! 9: accepts responsibility to anyone for the consequences of using it ! 10: or for whether it serves any particular purpose or works at all, ! 11: unless he says so in writing. Refer to the GNU CC General Public ! 12: License for full details. ! 13: ! 14: Everyone is granted permission to copy, modify and redistribute ! 15: GNU CC, but only under the conditions described in the ! 16: GNU CC General Public License. A copy of this license is ! 17: supposed to have been given to you along with GNU CC so you ! 18: can know your rights and responsibilities. It should be in a ! 19: file named COPYING. Among other things, the copyright notice ! 20: and this notice must be preserved on all copies. */ ! 21: ! 22: ! 23: /* The third argument can be: ! 24: "x" for an exceptional code (fits no category). ! 25: "s" for a statement code. ! 26: "t" for a type object code. ! 27: ! 28: "c" for codes for constants. ! 29: "d" for codes for declarations (also serving as variable refs). ! 30: "r" for codes for references to storage. ! 31: "e" for codes for other kinds of expressions. */ ! 32: ! 33: /* Any erroneous construct is parsed into a node of this type. ! 34: This type of node is accepted without complaint in all contexts ! 35: by later parsing activities, to avoid multiple error messages ! 36: for one error. ! 37: No fields in these nodes are used except the TREE_CODE. */ ! 38: DEFTREECODE (ERROR_MARK, "error_mark", "x", 0) ! 39: ! 40: /* Used to represent a name (such as, in the DECL_NAME of a decl node). ! 41: Internally it looks like a STRING_CST node. ! 42: There is only one IDENTIFIER_NODE ever made for any particular name. ! 43: Use `get_identifier' to get it (or create it, the first time). */ ! 44: DEFTREECODE (IDENTIFIER_NODE, "identifier_node", "x", 6) ! 45: ! 46: /* Has the TREE_VALUE and TREE_PURPOSE fields. */ ! 47: /* These nodes are made into lists by chaining through the ! 48: TREE_CHAIN field. The elements of the list live in the ! 49: TREE_VALUE fields, while TREE_PURPOSE fields are occasionally ! 50: used as well to get the effect of Lisp association lists. */ ! 51: DEFTREECODE (TREE_LIST, "tree_list", "x", 2) ! 52: ! 53: /* Each data type is represented by a tree node whose code is one of ! 54: the following: */ ! 55: /* Each node that represents a data type has a component TYPE_SIZE ! 56: containing a tree that is an expression for the size in some units. ! 57: The TYPE_SIZE_UNIT component is the number of bits in a unit. ! 58: The TYPE_MODE contains the machine mode for values of this type. ! 59: The TYPE_POINTER_TO field contains a type for a pointer to this type, ! 60: or zero if no such has been created yet. ! 61: The TYPE_NEXT_VARIANT field is used to chain together types ! 62: that are variants made by type modifiers such as "const" and "volatile". ! 63: The TYPE_MAIN_VARIANT field, in any member of such a chain, ! 64: points to the start of the chain. ! 65: The TYPE_NAME field contains info on the name used in the program ! 66: for this type (for GDB symbol table output). It is either a ! 67: TYPE_DECL node, for types that are typedefs, or an IDENTIFIER_NODE ! 68: in the case of structs, unions or enums that are known with a tag, ! 69: or zero for types that have no special name. */ ! 70: /* The TREE_CHAIN of a ..._TYPE node is normally used to put ! 71: every type onto permanent_type_chain or temporary_type_chain (see tree.c). ! 72: One exception is for ENUMERAL_TYPE, RECORD_TYPE and UNION_TYPE ! 73: nodes used as forward-references to names; see below. */ ! 74: ! 75: DEFTREECODE (VOID_TYPE, "void_type", "t", 0) /* The void type in C */ ! 76: ! 77: /* Integer types in all languages, including char in C. */ ! 78: /* Has components TYPE_MIN_VALUE, TYPE_MAX_VALUE (expressions, inclusive) ! 79: and TYPE_PRECISION (number of bits used by this type). ! 80: In the case of a subrange type in Pascal, the TREE_TYPE ! 81: of this will point at the supertype (another INTEGER_TYPE). ! 82: Otherwise, the TREE_TYPE is zero. */ ! 83: DEFTREECODE (INTEGER_TYPE, "integer_type", "t", 0) ! 84: ! 85: /* C's float and double. Different floating types are distinguished ! 86: by machine mode and by the TYPE_SIZE and the TYPE_PRECISION. */ ! 87: DEFTREECODE (REAL_TYPE, "real_type", "t", 0) ! 88: ! 89: /* Complex number types. The TREE_TYPE field is the data type ! 90: of the real and imaginary parts. */ ! 91: DEFTREECODE (COMPLEX_TYPE, "complex_type", "t", 0) ! 92: ! 93: /* C enums. The type node looks just like an INTEGER_TYPE node. ! 94: The symbols for the values of the enum type are defined by ! 95: CONST_DECL nodes, but the type does not point to them; ! 96: however, the TREE_VALUES is a list in which each elements' TREE_PURPOSE ! 97: is a name and the TREE_VALUE is the value (an INTEGER_CST node). */ ! 98: /* A forward reference `enum foo' when no enum named foo is defined yet ! 99: has zero (a null pointer) in its TYPE_SIZE. The tag name is in ! 100: the TYPE_NAME field. If the type is later defined, the normal ! 101: fields are filled in. ! 102: RECORD_TYPE and UNION_TYPE forward refs are treated similarly. */ ! 103: DEFTREECODE (ENUMERAL_TYPE, "enumeral_type", "t", 0) ! 104: ! 105: /* Pascal's boolean type (true or false are the only values); ! 106: no special fields needed. */ ! 107: DEFTREECODE (BOOLEAN_TYPE, "boolean_type", "t", 0) ! 108: ! 109: /* CHAR in Pascal; not used in C. ! 110: No special fields needed. */ ! 111: DEFTREECODE (CHAR_TYPE, "char_type", "t", 0) ! 112: ! 113: /* All pointer-to-x types have code POINTER_TYPE. ! 114: The TREE_TYPE points to the node for the type pointed to. */ ! 115: DEFTREECODE (POINTER_TYPE, "pointer_type", "t", 0) ! 116: ! 117: /* Used for Pascal; details not determined right now. */ ! 118: DEFTREECODE (FILE_TYPE, "file_type", "t", 0) ! 119: ! 120: /* Types of arrays. Special fields: ! 121: TREE_TYPE Type of an array element. ! 122: TYPE_DOMAIN Type to index by. ! 123: Its range of values specifies the array length. ! 124: TYPE_SEP Expression for units from one elt to the next. ! 125: TYPE_SEP_UNIT Number of bits in a unit for previous. ! 126: TYPE_POINTER_TO It is safe to assume, for an array type, ! 127: that TYPE_POINTER_TO (TREE_TYPE (array_type)) is always nonzero ! 128: and holds the type to coerce a value of that array type to in C. */ ! 129: /* Array types in C or Pascal */ ! 130: DEFTREECODE (ARRAY_TYPE, "array_type", "t", 0) ! 131: ! 132: /* Types of sets for Pascal. Special fields are the same as ! 133: in an array type. The target type is always a boolean type. */ ! 134: DEFTREECODE (SET_TYPE, "set_type", "t", 0) ! 135: ! 136: /* Not known whether Pascal really needs this ! 137: or what it should contain. */ ! 138: DEFTREECODE (STRING_TYPE, "string_type", "t", 0) ! 139: ! 140: /* Struct in C, or record in Pascal. */ ! 141: /* Special fields: ! 142: TYPE_FIELDS chain of FIELD_DECLs for the fields of the struct. ! 143: A few may need to be added for Pascal. */ ! 144: /* See the comment above, before ENUMERAL_TYPE, for how ! 145: forward references to struct tags are handled in C. */ ! 146: DEFTREECODE (RECORD_TYPE, "record_type", "t", 0) ! 147: ! 148: /* Union in C. Like a struct, except that the offsets of the fields ! 149: will all be zero. */ ! 150: /* See the comment above, before ENUMERAL_TYPE, for how ! 151: forward references to union tags are handled in C. */ ! 152: DEFTREECODE (UNION_TYPE, "union_type", "t", 0) /* C union type */ ! 153: ! 154: /* Type of functions. Special fields: ! 155: TREE_TYPE type of value returned. ! 156: TYPE_ARG_TYPES list of types of arguments expected. ! 157: this list is made of TREE_LIST nodes. ! 158: Types of "Procedures" in languages where they are different from functions ! 159: have code FUNCTION_TYPE also, but then TREE_TYPE is zero or void type. */ ! 160: DEFTREECODE (FUNCTION_TYPE, "function_type", "t", 0) ! 161: ! 162: /* All statement types have fields STMT_SOURCE_FILE and STMT_SOURCE_LINE. */ ! 163: /* Consecutive statements within a compound statement are chained together ! 164: through the TREE_CHAIN field. */ ! 165: ! 166: /* A label definition, encapsulated as a statement. ! 167: STMT_BODY is the LABEL_DECL node for the label that appears here. */ ! 168: DEFTREECODE (LABEL_STMT, "label_stmt", "s", 1) ! 169: ! 170: /* GOTO, in any language. STMT_BODY is a LABEL_DECL node. */ ! 171: DEFTREECODE (GOTO_STMT, "goto_stmt", "s", 1) ! 172: ! 173: /* RETURN, in any language. ! 174: Evaluates the expression STMT_BODY, then returns from the current function. ! 175: Presumably STMT_BODY is an assignment that stores into the ! 176: RESULT_DECL that hold the value to be returned. ! 177: STMT_BODY may be zero. */ ! 178: DEFTREECODE (RETURN_STMT, "return_stmt", "s", 1) ! 179: ! 180: /* Statement that evaluates an expression. STMT_BODY is the expression. */ ! 181: DEFTREECODE (EXPR_STMT, "expr_stmt", "s", 1) ! 182: ! 183: /* Pascal WITH statement. ! 184: Contains a chain of variables (..._DECL nodes) in the STMT_VARS ! 185: and a chain of statements (the STMT_BODY). ! 186: STMT_SUPERCONTEXT points to the containing declaration scope. */ ! 187: DEFTREECODE (WITH_STMT, "with_stmt", "s", 5) ! 188: ! 189: /* Declare variables whose scope is less than a function. ! 190: This is used for C brace-pairs that contain declarations. ! 191: Contains a chain of variables (..._DECL nodes) in the STMT_VARS ! 192: and a chain of statements (the STMT_BODY). ! 193: STMT_SUPERCONTEXT points to the containing declaration scope. ! 194: STMT_BIND_SIZE is an expression for the size of local storage here. ! 195: STMT_TYPE_TAGS is a list (chain of TREE_LIST nodes) ! 196: pairing struct, union and enum tag names with the types they mean, ! 197: for tags defined in this context. */ ! 198: DEFTREECODE (LET_STMT, "let_stmt", "s", 5) ! 199: ! 200: /* if-then-else statements in C and other languages. ! 201: STMT_COND is the condition (an expression). ! 202: STMT_THEN is the then-branch (a statement or chain of statements). ! 203: STMT_ELSE is the else-branch (a statement or chain of statements). */ ! 204: DEFTREECODE (IF_STMT, "if_stmt", "s", 3) ! 205: ! 206: /* if-else-exit; used in building parts of iterations. ! 207: STMT_BODY is the condition (an expression). ! 208: Exit if the iteration if the condition is FALSE. */ ! 209: DEFTREECODE (EXIT_STMT, "exit_stmt", "s", 1) ! 210: ! 211: /* STMT_CASE_INDEX is an expression for the value to dispatch on. ! 212: STMT_CASE_LIST is a list (a chain of TREE_LIST nodes) ! 213: of the branches of the dispatch. ! 214: Each such TREE_LIST node has the case it is for (a constant expression) ! 215: as the TREE_PURPOSE ! 216: and the label to go to (a LABEL_DECL) as the TREE_VALUE. ! 217: ! 218: Normally, the labels reside inside a COMPOUND_STMT ! 219: which contains ths CASE_STMT as its first statement. */ ! 220: DEFTREECODE (CASE_STMT, "case_stmt", "s", 3) ! 221: ! 222: /* STMT_BODY contains a chain of statements to be executed repeatedly. */ ! 223: DEFTREECODE (LOOP_STMT, "loop_stmt", "s", 1) ! 224: ! 225: /* Contains as its STMT_BODY a chain of substatements. */ ! 226: DEFTREECODE (COMPOUND_STMT, "compound_stmt", "s", 1) ! 227: ! 228: /* Contains as its STMT_BODY a string of assembly code. */ ! 229: DEFTREECODE (ASM_STMT, "asm_stmt", "s", 1) ! 230: ! 231: /* Expressions */ ! 232: ! 233: /* First, the constants. */ ! 234: ! 235: /* Contents are in TREE_INT_CST_LOW and TREE_INT_CST_HIGH fields, ! 236: 32 bits each, giving us a 64 bit constant capability. ! 237: Note: constants of type char in Pascal are INTEGER_CST, ! 238: and so are pointer constants such as nil in Pascal or NULL in C. ! 239: `(int *) 1' in C also results in an INTEGER_CST. */ ! 240: DEFTREECODE (INTEGER_CST, "integer_cst", "c", 2) ! 241: ! 242: /* Contents are in TREE_REAL_CST field. Also there is TREE_CST_RTL. */ ! 243: DEFTREECODE (REAL_CST, "real_cst", "c", 3) ! 244: ! 245: /* Contents are in TREE_REALPART and TREE_IMAGPART fields, ! 246: whose contents are other constant nodes. ! 247: Also there is TREE_CST_RTL. */ ! 248: DEFTREECODE (COMPLEX_CST, "complex_cst", "c", 3) ! 249: ! 250: /* Contents are TREE_STRING_LENGTH and TREE_STRING_POINTER fields. ! 251: Also there is TREE_CST_RTL. */ ! 252: DEFTREECODE (STRING_CST, "string_cst", "c", 3) ! 253: ! 254: /* Declarations. All references to names are represented as ..._DECL nodes. ! 255: The decls in one binding context are chained through the TREE_CHAIN field. ! 256: Each DECL has a DECL_NAME field which contains an IDENTIFIER_NODE. ! 257: (Some decls, most often labels, may have zero as the DECL_NAME). ! 258: DECL_CONTEXT points to the node representing the context in which ! 259: this declaration has its scope. For FIELD_DECLs, this is the ! 260: RECORD_TYPE or UNION_TYPE node that the field belongs to; ! 261: for other kinds of decl nodes, this is a LET_STMT node or the ROOT_NODE. ! 262: The TREE_TYPE field holds the data type of the object, when relevant. ! 263: LABEL_DECLs have no data type. For TYPE_DECL, the TREE_TYPE field ! 264: contents are the type whose name is being declared. ! 265: The DECL_ALIGN, DECL_SIZE, DECL_SIZE_UNIT ! 266: and DECL_MODE fields exist in decl nodes just as in type nodes. ! 267: They are unused in LABEL_DECL, TYPE_DECL and CONST_DECL nodes. ! 268: ! 269: DECL_OFFSET holds an integer number of bits offset for the location. ! 270: DECL_VOFFSET holds an expression for a variable offset; it is ! 271: to be multiplied by DECL_VOFFSET_UNIT (an integer). ! 272: These fields are relevant only in FIELD_DECLs and PARM_DECLs. ! 273: ! 274: DECL_INITIAL holds the value to initialize a variable to, ! 275: or the value of a constant. For a function, it holds the body ! 276: (a node of type LET_STMT representing the function's binding contour ! 277: and whose body contains the function's statements.) ! 278: ! 279: PARM_DECLs use a special field: ! 280: DECL_ARG_TYPE is the type in which the argument is actually ! 281: passed, which may be different from its type within the function. ! 282: ! 283: FUNCTION_DECLs use four special fields: ! 284: DECL_ARGUMENTS holds a chain of PARM_DECL nodes for the arguments. ! 285: DECL_RESULT holds a RESULT_DECL node for the value of a function, ! 286: or it is 0 for a function that returns no value. ! 287: (C functions returning void have zero here.) ! 288: DECL_FUNCTION_CODE is a code number that is nonzero for ! 289: built-in functions. Its value is an enum built_in_function ! 290: that says which built-in function it is. ! 291: DECL_BLOCK_SYMTAB_ADDRESS records (after the symtab data for the function's ! 292: body has been output) the address in the symtab file of the ! 293: `struct block' for the function's top-level binding context. ! 294: This must be stored in the symtab structure for the function name. ! 295: Also, TREE_UNSIGNED (function_decl) is nonzero if the ({...}) ! 296: construct is used in the function. ! 297: ! 298: DECL_SOURCE_FILE holds a filename string and DECL_SOURCE_LINE ! 299: holds a line number. */ ! 300: ! 301: DEFTREECODE (FUNCTION_DECL, "function_decl", "d", 0) ! 302: DEFTREECODE (LABEL_DECL, "label_decl", "d", 0) ! 303: DEFTREECODE (CONST_DECL, "const_decl", "d", 0) ! 304: DEFTREECODE (TYPE_DECL, "type_decl", "d", 0) ! 305: DEFTREECODE (VAR_DECL, "var_decl", "d", 0) ! 306: DEFTREECODE (PARM_DECL, "parm_decl", "d", 0) ! 307: DEFTREECODE (RESULT_DECL, "result_decl", "d", 0) ! 308: DEFTREECODE (FIELD_DECL, "field_decl", "d", 0) ! 309: ! 310: /* References to storage. */ ! 311: ! 312: /* Value is structure or union component. ! 313: Operand 0 is the structure or union (an expression); ! 314: operand 1 is the field (a node of type FIELD_DECL). */ ! 315: DEFTREECODE (COMPONENT_REF, "component_ref", "r", 2) ! 316: ! 317: /* C unary `*' or Pascal `^'. One operand, an expression for a pointer. */ ! 318: DEFTREECODE (INDIRECT_REF, "indirect_ref", "r", 1) ! 319: ! 320: /* Pascal `^` on a file. One operand, an expression for the file. */ ! 321: DEFTREECODE (BUFFER_REF, "buffer_ref", "r", 1) ! 322: ! 323: /* Array indexing in languages other than C. ! 324: Operand 0 is the array; operand 1 is a list of indices ! 325: stored as a chain of TREE_LIST nodes. */ ! 326: DEFTREECODE (ARRAY_REF, "array_ref", "r", 2) ! 327: ! 328: /* Constructor: return an aggregate value made from specified components. ! 329: In C, this is used only for structure and array initializers. ! 330: The first "operand" is really a pointer to the RTL, ! 331: for constant constructors only. ! 332: The second operand is a list of component values ! 333: made out of a chain of TREE_LIST nodes. */ ! 334: DEFTREECODE (CONSTRUCTOR, "constructor", "e", 2) ! 335: ! 336: /* The expression types are mostly straightforward, ! 337: with the fourth argument of DEFTREECODE saying ! 338: how many operands there are. ! 339: Unless otherwise specified, the operands are expressions. */ ! 340: ! 341: /* Contains two expressions to compute, one followed by the other. ! 342: the first value is ignored. The second one's value is used. */ ! 343: DEFTREECODE (COMPOUND_EXPR, "compound_expr", "e", 2) ! 344: ! 345: /* Assignment expression. Operand 0 is the what to set; 1, the new value. */ ! 346: DEFTREECODE (MODIFY_EXPR, "modify_expr", "e", 2) ! 347: ! 348: /* Conditional expression ( ... ? ... : ... in C). ! 349: Operand 0 is the condition. ! 350: Operand 1 is the then-value. ! 351: Operand 2 is the else-value. */ ! 352: DEFTREECODE (COND_EXPR, "cond_expr", "e", 3) ! 353: ! 354: /* Function call. Operand 0 is the function. ! 355: Operand 1 is the argument list, a list of expressions ! 356: made out of a chain of TREE_LIST nodes. ! 357: There is no operand 2. That slot is used for the ! 358: CALL_EXPR_RTL macro (see preexpand_calls). */ ! 359: DEFTREECODE (CALL_EXPR, "call_expr", "e", 3) ! 360: ! 361: /* Simple arithmetic. Operands must have the same machine mode ! 362: and the value shares that mode. */ ! 363: DEFTREECODE (PLUS_EXPR, "plus_expr", "e", 2) ! 364: DEFTREECODE (MINUS_EXPR, "minus_expr", "e", 2) ! 365: DEFTREECODE (MULT_EXPR, "mult_expr", "e", 2) ! 366: ! 367: /* Division for integer result that rounds the quotient toward zero. */ ! 368: /* Operands must have the same machine mode. ! 369: In principle they may be real, but that is not currently supported. ! 370: The result is always fixed point, and it has the same type as the ! 371: operands if they are fixed point. */ ! 372: DEFTREECODE (TRUNC_DIV_EXPR, "trunc_div_expr", "e", 2) ! 373: ! 374: /* Division for integer result that rounds the quotient toward infinity. */ ! 375: DEFTREECODE (CEIL_DIV_EXPR, "ceil_div_expr", "e", 2) ! 376: ! 377: /* Division for integer result that rounds toward minus infinity. */ ! 378: DEFTREECODE (FLOOR_DIV_EXPR, "floor_div_expr", "e", 2) ! 379: ! 380: /* Division for integer result that rounds toward nearest integer. */ ! 381: DEFTREECODE (ROUND_DIV_EXPR, "round_div_expr", "e", 2) ! 382: ! 383: /* Four kinds of remainder that go with the four kinds of division. */ ! 384: DEFTREECODE (TRUNC_MOD_EXPR, "trunc_mod_expr", "e", 2) ! 385: DEFTREECODE (CEIL_MOD_EXPR, "ceil_mod_expr", "e", 2) ! 386: DEFTREECODE (FLOOR_MOD_EXPR, "floor_mod_expr", "e", 2) ! 387: DEFTREECODE (ROUND_MOD_EXPR, "round_mod_expr", "e", 2) ! 388: ! 389: /* Division for real result. The two operands must have the same type. ! 390: In principle they could be integers, but currently only real ! 391: operands are supported. The result must have the same type ! 392: as the operands. */ ! 393: DEFTREECODE (RDIV_EXPR, "rdiv_expr", "e", 2) ! 394: ! 395: /* Conversion of real to fixed point: four ways to round, ! 396: like the four ways to divide. ! 397: CONVERT_EXPR can also be used to convert a real to an integer, ! 398: and that is what is used in languages that do not have ways of ! 399: specifying which of these is wanted. Maybe these are not needed. */ ! 400: DEFTREECODE (FIX_TRUNC_EXPR, "fix_trunc_expr", "e", 1) ! 401: DEFTREECODE (FIX_CEIL_EXPR, "fix_ceil_expr", "e", 1) ! 402: DEFTREECODE (FIX_FLOOR_EXPR, "fix_floor_expr", "e", 1) ! 403: DEFTREECODE (FIX_ROUND_EXPR, "fix_round_expr", "e", 1) ! 404: ! 405: /* Conversion of an integer to a real. */ ! 406: DEFTREECODE (FLOAT_EXPR, "float_expr", "e", 1) ! 407: ! 408: /* Exponentiation. Operands may have any types; ! 409: constraints on value type are not known yet. */ ! 410: DEFTREECODE (EXPON_EXPR, "expon_expr", "e", 2) ! 411: ! 412: /* Unary negation. Value has same type as operand. */ ! 413: DEFTREECODE (NEGATE_EXPR, "negate_expr", "e", 1) ! 414: ! 415: DEFTREECODE (MIN_EXPR, "min_expr", "e", 2) ! 416: DEFTREECODE (MAX_EXPR, "max_expr", "e", 2) ! 417: DEFTREECODE (ABS_EXPR, "abs_expr", "e", 1) ! 418: DEFTREECODE (FFS_EXPR, "ffs_expr", "e", 1) ! 419: ! 420: /* Shift operations for shift and rotate. ! 421: Shift is supposed to mean logical shift if done on an ! 422: unsigned type, arithmetic shift on a signed type. ! 423: The second operand is the number of bits to ! 424: shift by, and must always have mode SImode. ! 425: The result has the same mode as the first operand. */ ! 426: DEFTREECODE (LSHIFT_EXPR, "alshift_expr", "e", 2) ! 427: DEFTREECODE (RSHIFT_EXPR, "arshift_expr", "e", 2) ! 428: DEFTREECODE (LROTATE_EXPR, "lrotate_expr", "e", 2) ! 429: DEFTREECODE (RROTATE_EXPR, "rrotate_expr", "e", 2) ! 430: ! 431: /* Bitwise operations. Operands have same mode as result. */ ! 432: DEFTREECODE (BIT_IOR_EXPR, "bit_ior_expr", "e", 2) ! 433: DEFTREECODE (BIT_XOR_EXPR, "bit_xor_expr", "e", 2) ! 434: DEFTREECODE (BIT_AND_EXPR, "bit_and_expr", "e", 2) ! 435: DEFTREECODE (BIT_ANDTC_EXPR, "bit_andtc_expr", "e", 2) ! 436: DEFTREECODE (BIT_NOT_EXPR, "bit_not_expr", "e", 1) ! 437: ! 438: /* Combination of boolean values or of integers considered only ! 439: as zero or nonzero. ANDIF and ORIF allow the second operand ! 440: not to be computed if the value of the expression is determined ! 441: from the first operand. AND and OR always compute the second ! 442: operand whether its value is needed or not (for side effects). */ ! 443: DEFTREECODE (TRUTH_ANDIF_EXPR, "truth_andif_expr", "e", 2) ! 444: DEFTREECODE (TRUTH_ORIF_EXPR, "truth_orif_expr", "e", 2) ! 445: DEFTREECODE (TRUTH_AND_EXPR, "truth_and_expr", "e", 2) ! 446: DEFTREECODE (TRUTH_OR_EXPR, "truth_or_expr", "e", 2) ! 447: DEFTREECODE (TRUTH_NOT_EXPR, "truth_not_expr", "e", 1) ! 448: ! 449: /* Relational operators. ! 450: `EQ_EXPR' and `NE_EXPR' are allowed for any types. ! 451: The others are allowed only for integer (or pointer or enumeral) ! 452: or real types. ! 453: In all cases the operands will have the same type, ! 454: and the value is always the type used by the language for booleans. */ ! 455: DEFTREECODE (LT_EXPR, "lt_expr", "e", 2) ! 456: DEFTREECODE (LE_EXPR, "le_expr", "e", 2) ! 457: DEFTREECODE (GT_EXPR, "gt_expr", "e", 2) ! 458: DEFTREECODE (GE_EXPR, "ge_expr", "e", 2) ! 459: DEFTREECODE (EQ_EXPR, "eq_expr", "e", 2) ! 460: DEFTREECODE (NE_EXPR, "ne_expr", "e", 2) ! 461: ! 462: /* Operations for Pascal sets. Not used now. */ ! 463: DEFTREECODE (IN_EXPR, "in_expr", "e", 2) ! 464: DEFTREECODE (SET_LE_EXPR, "set_le_expr", "e", 2) ! 465: DEFTREECODE (CARD_EXPR, "card_expr", "e", 1) ! 466: DEFTREECODE (RANGE_EXPR, "range_expr", "e", 2) ! 467: ! 468: /* Represents a conversion of type of a value. ! 469: All conversions, including implicit ones, must be ! 470: represented by CONVERT_EXPR nodes. */ ! 471: DEFTREECODE (CONVERT_EXPR, "convert_expr", "e", 1) ! 472: ! 473: /* Represents a conversion expected to require no code to be generated. */ ! 474: DEFTREECODE (NOP_EXPR, "nop_expr", "e", 1) ! 475: ! 476: /* Represents something we computed once and will use multiple times. ! 477: First operand is that expression. Second is the RTL, ! 478: nonzero only after the expression has been computed. ! 479: TREE_UNSIGNED in a SAVE_EXPR is nonzero if that SAVE_EXPR ! 480: has been seen already in assign_vars_1. */ ! 481: DEFTREECODE (SAVE_EXPR, "save_expr", "e", 2) ! 482: ! 483: /* Represents something whose RTL has already been expanded ! 484: as a sequence which should be emitted when this expression is expanded. ! 485: The first operand is the-the RTL to emit (which is a SEQUENCE). ! 486: The second is the RTL expression for the result. */ ! 487: DEFTREECODE (RTL_EXPR, "rtl_expr", "e", 2) ! 488: ! 489: /* & in C. Value is the address at which the operand's value resides. ! 490: Operand may have any mode. Result mode is Pmode. */ ! 491: DEFTREECODE (ADDR_EXPR, "addr_expr", "e", 1) ! 492: ! 493: /* Operand is a function constant; result is a function variable value ! 494: of typeEPmode. Used only for languages that need static chains. */ ! 495: DEFTREECODE (ENTRY_VALUE_EXPR, "entry_value_expr", "e", 1) ! 496: ! 497: /* Given two real or integer operands of the same type, ! 498: returns a complex value of the corresponding complex type. */ ! 499: DEFTREECODE (COMPLEX_EXPR, "complex_expr", "e", 2) ! 500: ! 501: /* Complex conjugate of operand. Used only on complex types. ! 502: The value has the same type as the operand. */ ! 503: DEFTREECODE (CONJ_EXPR, "conj_expr", "e", 1) ! 504: ! 505: /* Used only on an operand of complex type, these return ! 506: a value of the corresponding component type. */ ! 507: DEFTREECODE (REALPART_EXPR, "realpart_expr", "e", 1) ! 508: DEFTREECODE (IMAGPART_EXPR, "imagpart_expr", "e", 1) ! 509: ! 510: /* Nodes for ++ and -- in C. ! 511: The second arg is how much to increment or decrement by. ! 512: For a pointer, it would be the size of the object pointed to. */ ! 513: DEFTREECODE (PREDECREMENT_EXPR, "predecrement_expr", "e", 2) ! 514: DEFTREECODE (PREINCREMENT_EXPR, "preincrement_expr", "e", 2) ! 515: DEFTREECODE (POSTDECREMENT_EXPR, "postdecrement_expr", "e", 2) ! 516: DEFTREECODE (POSTINCREMENT_EXPR, "postincrement_expr", "e", 2) ! 517: ! 518: /* ! 519: Local variables: ! 520: mode:c ! 521: version-control: t ! 522: End: ! 523: */
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.