Annotation of researchv10dc/cmd/gcc/tree.def, revision 1.1

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: */

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.