Annotation of researchv10dc/cmd/gcc/rtl.def, revision 1.1.1.1

1.1       root        1: /* This file contains the definitions and documentation for 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.
                      4:    Copyright (C) 1987, 1988 Free Software Foundation, Inc.
                      5: 
                      6: This file is part of GNU CC.
                      7: 
                      8: GNU CC is distributed in the hope that it will be useful,
                      9: but WITHOUT ANY WARRANTY.  No author or distributor
                     10: accepts responsibility to anyone for the consequences of using it
                     11: or for whether it serves any particular purpose or works at all,
                     12: unless he says so in writing.  Refer to the GNU CC General Public
                     13: License for full details.
                     14: 
                     15: Everyone is granted permission to copy, modify and redistribute
                     16: GNU CC, but only under the conditions described in the
                     17: GNU CC General Public License.   A copy of this license is
                     18: supposed to have been given to you along with GNU CC so you
                     19: can know your rights and responsibilities.  It should be in a
                     20: file named COPYING.  Among other things, the copyright notice
                     21: and this notice must be preserved on all copies.  */
                     22: 
                     23: 
                     24: /* Expression definitions and descriptions for all targets are in this file.
                     25:    Some will not be used for some targets.
                     26: 
                     27:    The fields in the cpp macro call "DEF_RTL_EXPR()"
                     28:    are used to create declarations in the C source of the compiler.
                     29: 
                     30:    The fields are:
                     31: 
                     32:    1.  The internal name of the rtx used in the C source.
                     33:    It is a tag in the enumeration "enum rtx_code" defined in "rtl.h".
                     34:    By convention these are in UPPER_CASE.
                     35: 
                     36:    2.  The name of the rtx in the external ASCII format read by
                     37:    rtl.read_rtl(), and printed by rtl.print_rtl().
                     38:    These names are stored in rtl.rtx_name[].
                     39:    By convention these are the internal (field 1) names in lower_case.
                     40: 
                     41:    3.  The print format, and type of each rtx->fld[] (field) in this rtx.
                     42:    These formats are stored in rtl.rtx_format[].
                     43:    The meaning of the formats is documented in front of this array in rtl.c
                     44:    
                     45:    */
                     46: 
                     47: /* ---------------------------------------------------------------------
                     48:    Expressions (and "meta" expressions) used for structuring the
                     49:    rtl representation of a program.
                     50:    --------------------------------------------------------------------- */
                     51: 
                     52: /* an expression code name unknown to the reader */
                     53: DEF_RTL_EXPR(UNKNOWN, "UnKnown", "*")
                     54: 
                     55: /* (NIL) is used by rtl reader and printer to represent a null pointer.  */
                     56: 
                     57: DEF_RTL_EXPR(NIL, "nil", "*")
                     58: 
                     59: /* ---------------------------------------------------------------------
                     60:    Expressions used in constructing lists.
                     61:    --------------------------------------------------------------------- */
                     62: 
                     63: /* a linked list of expressions */
                     64: DEF_RTL_EXPR(EXPR_LIST, "expr_list", "ee")
                     65: 
                     66: /* a linked list of instructions.
                     67:    The insns are represented in print by their uids.  */
                     68: DEF_RTL_EXPR(INSN_LIST, "insn_list", "ue")
                     69: 
                     70: /* ----------------------------------------------------------------------
                     71:    Expression types for machine descripions.
                     72:    These do not appear in actual rtl code in the compiler.
                     73:    ---------------------------------------------------------------------- */
                     74: 
                     75: /* Appears only in machine descriptions.
                     76:    Means use the function named by the second arg (the string)
                     77:    as a predicate; if matched, store the structure that was matched
                     78:    in the operand table at index specified by the first arg (the integer).
                     79:    If the second arg is the null string, the structure is just stored.
                     80: 
                     81:    A third string argument indicates to the register allocator restrictions
                     82:    on where the operand can be allocated.
                     83: 
                     84:    If the target needs no restriction on any instruction this field should
                     85:    be the null string.
                     86: 
                     87:    The string is prepended by:
                     88:    '=' to indicate the operand is only written to.
                     89:    '+' to indicate the operand is both read and written to.
                     90: 
                     91:    Each character in the string represents an allocatable class for an operand.
                     92:    'g' indicates the operand can be any valid class.
                     93:    'i' indicates the operand can be immeadiate (in the instruction) data.
                     94:    'r' indicates the operand can be in a register.
                     95:    'm' indicates the operand can be in memory.
                     96:    'o' a subset of the 'm' class.  Those memory addressing modes that
                     97:        can be offset at compile time (have a constant added to them).
                     98: 
                     99:    Other characters indicate target dependent operand classes and
                    100:    are described in each target's machine description.
                    101: 
                    102:    For instructions with more than one operand, sets of classes can be
                    103:    separated by a comma to indicate the appropriate multi-operand constraints.
                    104:    There must be a 1 to 1 correspondence between these sets of classes in
                    105:    all operands for an instruction.
                    106:    */
                    107: DEF_RTL_EXPR(MATCH_OPERAND, "match_operand", "iss")
                    108: 
                    109: /* Appears only in machine descriptions.
                    110:    Means match only something equal to what is stored in the operand table
                    111:    at the index specified by the argument.  */
                    112: DEF_RTL_EXPR(MATCH_DUP, "match_dup", "i")
                    113: 
                    114: /* Appears only in machine descriptions.
                    115:    Defines the pattern for one kind of instruction.
                    116:    Operand:
                    117:    0: names this instruction.
                    118:       If the name is the null string, the instruction is in the
                    119:       machine description just to be recognized, and will never be emitted by
                    120:       the tree to rtl expander.
                    121:    1: is the pattern.
                    122:    2: is a string which is a C expression
                    123:       giving an additional condition for recognizing this pattern.
                    124:       A null string means no extra condition.
                    125:    3: is the action to execute if this pattern is matched.
                    126:       If this assembler code template starts with a * then it is a fragment of
                    127:       C code to run to decide on a template to use.  Otherwise, it is the
                    128:       template to use.
                    129:    */
                    130: DEF_RTL_EXPR(DEFINE_INSN, "define_insn", "sEss")
                    131: 
                    132: /* Definition of a peephole optimization.
                    133:    1st operand: vector of insn patterns to match
                    134:    2nd operand: C expression that must be true
                    135:    3rd operand: template or C code to produce assembler output.  */
                    136: DEF_RTL_EXPR(DEFINE_PEEPHOLE, "define_peephole", "Ess")
                    137: 
                    138: /* Definition of a combiner pattern.
                    139:    Operands not defined yet.  */
                    140: DEF_RTL_EXPR(DEFINE_COMBINE, "define_combine", "Ess")
                    141: 
                    142: /* Define how to generate multiple insns for a standard insn name.
                    143:    1st operand: the insn name.
                    144:    2nd operand: vector of insn-patterns.
                    145:        Use match_operand to substitute an element of `recog_operand'.
                    146:    3rd operand: C expression that must be true for this to be available.
                    147:        This may not test any operands.
                    148:    4th operand: Extra C code to execute before generating the insns.
                    149:        This might, for example, create some RTX's and store them in
                    150:        elements of `recog_operand' for use by the vector of insn-patterns.
                    151:        (`operands' is an alias here for `recog_operand').  */
                    152: DEF_RTL_EXPR(DEFINE_EXPAND, "define_expand", "sEss")
                    153:    
                    154: /* SEQUENCE appears in the result of a `gen_...' function
                    155:    for a DEFINE_EXPAND that wants to make several insns.
                    156:    Its elements are the bodies of the insns that should be made.
                    157:    `emit_insn' takes the SEQUENCE apart and makes separate insns.  */
                    158: DEF_RTL_EXPR(SEQUENCE, "sequence", "E")
                    159: 
                    160: /* Refers to the address of its argument.
                    161:    This appears only in machine descriptions, indicating that
                    162:    any expression that would be acceptable as the operand of MEM
                    163:    should be matched.  */
                    164: DEF_RTL_EXPR(ADDRESS, "address", "e")
                    165: 
                    166: /* ----------------------------------------------------------------------
                    167:    Expressions types used for things in the instruction chain.
                    168: 
                    169:    All formats must start with "iuu" to handle the chain.
                    170:    Each insn expression holds an rtl instruction and its semantics
                    171:    during back-end processing.
                    172:    See macros's in "rtl.h" for the meaning of each rtx->fld[].
                    173: 
                    174:    ---------------------------------------------------------------------- */
                    175: 
                    176: /* An instruction that cannot jump.  */
                    177: DEF_RTL_EXPR(INSN, "insn", "iuueiee")
                    178: 
                    179: /* An instruction that can possibly jump.
                    180:    Fields ( rtx->fld[] ) have exact same meaning as INSN's
                    181:    except field 3 is also used in jump.c to point to the label jumped to. 
                    182:    Field 7 is used in jump.c as the JUMP_LABEL.  */
                    183: DEF_RTL_EXPR(JUMP_INSN, "jump_insn", "iuueiee0")
                    184: 
                    185: /* An instruction that can possibly call a subroutine
                    186:    but which will not change which instruction comes next
                    187:    in the current function.
                    188:    Fields ( rtx->fld[] ) have exact same meaning as INSN's.  */
                    189: DEF_RTL_EXPR(CALL_INSN, "call_insn", "iuueiee")
                    190: 
                    191: /* A marker that indicates that control will not flow through.  */
                    192: DEF_RTL_EXPR(BARRIER, "barrier", "iuu")
                    193: 
                    194: /* Holds a label that is followed by instructions.
                    195:    Operand:
                    196:    3: is a number that is unique in the entire compilation.
                    197:    4: is used in jump.c for the use-count of the label.
                    198:    and in flow.c to point to the chain of label_ref's to this label.  */
                    199: DEF_RTL_EXPR(CODE_LABEL, "code_label", "iuui0")
                    200:      
                    201: /* Say where in the code a source line starts, for symbol table's sake.
                    202:    Contains a filename and a line number.  Line numbers <= 0 are special:
                    203:    0 is used in a dummy placed at the front of every function
                    204:       just so there will never be a need to delete the first insn;
                    205:    -1 indicates a dummy; insns to be deleted by flow analysis and combining
                    206:       are really changed to NOTEs with a number of -1.
                    207:    -2 means beginning of a name binding contour; output N_LBRAC.
                    208:    -3 means end of a contour; output N_RBRAC.  */
                    209: DEF_RTL_EXPR(NOTE, "note", "iuusi")
                    210: 
                    211: /* INLINE_HEADER is use by inline function machinery.  The information
                    212:    it contains helps to build the mapping function between the rtx's of
                    213:    the function to be inlined and the current function being expanded.  */
                    214: 
                    215: DEF_RTL_EXPR(INLINE_HEADER, "inline_header", "iuuiiiiiiii")
                    216: 
                    217: /* ----------------------------------------------------------------------
                    218:    Top level constituents of INSN, JUMP_INSN and CALL_INSN.
                    219:    ---------------------------------------------------------------------- */
                    220:    
                    221: /* Several operations to be done in parallel.  */
                    222: DEF_RTL_EXPR(PARALLEL, "parallel", "E")
                    223: 
                    224: /* A string that is passed through to the assembler as input.
                    225:      One can obviously pass comments through by using the
                    226:      assembler comment syntax.
                    227:      These occur in an insn all by themselves as the PATTERN.
                    228:      They also appear inside an ASM_OPERANDS
                    229:      as a convenient way to hold a string.  */
                    230: DEF_RTL_EXPR(ASM_INPUT, "asm_input", "s")
                    231: 
                    232: /* An assembler instruction with operands.
                    233:    1st operand is the instruction template.
                    234:    2nd operand is the constraint for the output.
                    235:    3rd operand is the number of the output this expression refers to.
                    236:      When an insn stores more than one value, a separate ASM_OPERANDS
                    237:      is made for each output; this integer distinguishes them.
                    238:    5th is a vector of values of input operands.
                    239:    4th is a vector of modes and constraints for the input operands.
                    240:      Each element is an ASM_INPUT containing a constraint string
                    241:      and whose mode indicates the mode of the input operand.  */
                    242: DEF_RTL_EXPR(ASM_OPERANDS, "asm_operands", "ssiEE")
                    243: 
                    244: /* Vector of addresses, stored as full words.  */
                    245: /* Each element is a LABEL_REF to a CODE_LABEL whose address we want.  */
                    246: DEF_RTL_EXPR(ADDR_VEC, "addr_vec", "E")
                    247: 
                    248: /* Vector of address differences X0 - BASE, X1 - BASE, ...
                    249:    First operand is BASE; the vector contains the X's.
                    250:    The machine mode of this rtx says how much space to leave
                    251:    for each difference.  */
                    252: /* Appears inside a DEFINE_DATA.  */
                    253: DEF_RTL_EXPR(ADDR_DIFF_VEC, "addr_diff_vec", "eE")
                    254: 
                    255: /* ----------------------------------------------------------------------
                    256:    At the top level of an instruction (perhaps under PARALLEL).
                    257:    ---------------------------------------------------------------------- */
                    258: 
                    259: /* Assignment.
                    260:    Operand 1 is the location (REG, MEM, PC, CC0 or whatever) assigned to.
                    261:    Operand 2 is the value stored there.
                    262:    ALL assignment must use SET.
                    263:    Instructions that do multiple assignments must use multiple SET,
                    264:    under PARALLEL.  */
                    265: DEF_RTL_EXPR(SET, "set", "ee")
                    266: 
                    267: /* Indicate something is used in a way that we don't want to explain.
                    268:    For example, subroutine calls will use the register
                    269:    in which the static chain is passed.  */
                    270: DEF_RTL_EXPR(USE, "use", "e")
                    271: 
                    272: /* Indicate something is clobbered in a way that we don't want to explain.
                    273:    For example, subroutine calls will clobber some physical registers
                    274:    (the ones that are by convention not saved).  */
                    275: DEF_RTL_EXPR(CLOBBER, "clobber", "e")
                    276: 
                    277: /* Call a subroutine.
                    278:    Operand 1 is the address to call.
                    279:    Operand 2 is the number of arguments.  */
                    280: 
                    281: DEF_RTL_EXPR(CALL, "call", "ee")
                    282: 
                    283: /* Return from a subroutine.  */
                    284: 
                    285: DEF_RTL_EXPR(RETURN, "return", "")
                    286: 
                    287: /* ----------------------------------------------------------------------
                    288:    Primitive values for use in expressions.
                    289:    ---------------------------------------------------------------------- */
                    290: 
                    291: /* numeric integer constant */
                    292: DEF_RTL_EXPR(CONST_INT, "const_int", "i")
                    293: 
                    294: /* numeric double constant.
                    295:    The double is stored in two "integer" operands.
                    296:    The third operand is the MEM that stores this constant in memory.
                    297:    The fourth is used to chain together these rtx's for uniquization.  */
                    298: DEF_RTL_EXPR(CONST_DOUBLE, "const_double", "iie00")
                    299: 
                    300: /* This is used to encapsulate an expression whose value is constant
                    301:    (such as the sum of a SYMBOL_REF and a CONST_INT) so that it will be
                    302:    recognized as a constant operand rather than by arithmetic instructions.  */
                    303: 
                    304: DEF_RTL_EXPR(CONST, "const", "e")
                    305: 
                    306: /* program counter.  Ordinary jumps are represented
                    307:    by a SET whose first operand is (PC).  */
                    308: DEF_RTL_EXPR(PC, "pc", "")
                    309: 
                    310: /* A register.  The "operand" is the register number, accessed
                    311:    with the REGNO macro.  If this number is less than FIRST_PSEUDO_REGISTER
                    312:    than a hardware register is being referred to.  */
                    313: DEF_RTL_EXPR(REG, "reg", "i")
                    314: 
                    315: /* One word of a multi-word value.
                    316:    The first operand is the complete value; the second says which word.
                    317:    The WORDS_BIG_ENDIAN flag controls whether word number 0
                    318:    (as numbered in a SUBREG) is the most or least significant word.
                    319: 
                    320:    This is also used to refer to a value in a different machine mode.
                    321:    For example, it can be used to refer to a SImode value as if it were
                    322:    Qimode, or vice versa.  Then the word number is always 0.  */
                    323: DEF_RTL_EXPR(SUBREG, "subreg", "ei")
                    324: 
                    325: /* This one-argument rtx is used for move instructions
                    326:    that are guaranteed to alter only the low part of a destination.
                    327:    Thus, (SET (SUBREG:HI (REG...)) (MEM:HI ...))
                    328:    has an unspecified effect on the high part of REG,
                    329:    but (SET (STRICT_LOW_PART (SUBREG:HI (REG...))) (MEM:HI ...))
                    330:    is guaranteed to alter only the bits of REG that are in HImode.
                    331: 
                    332:    The actual instruction used is probably the same in both cases,
                    333:    but the register constraints may be tighter when STRICT_LOW_PART
                    334:    is in use.  */
                    335: 
                    336: DEF_RTL_EXPR(STRICT_LOW_PART, "strict_low_part", "e")
                    337: 
                    338: /* A memory location; operand is the address.
                    339:    Can be nested inside a VOLATILE.  */
                    340: DEF_RTL_EXPR(MEM, "mem", "e")
                    341: 
                    342: /* Reference to an assembler label in the code for this function.
                    343:    The operand is a CODE_LABEL found in the insn chain.
                    344:    The unprinted fields 1 and 2 are used in flow.c for the
                    345:    LABEL_NEXTREF and CONTAINING_INSN.  */
                    346: DEF_RTL_EXPR(LABEL_REF, "label_ref", "u00")
                    347: 
                    348: /* Reference to a named label: the string that is the first operand,
                    349:    with `_' added implicitly in front.
                    350:    Exception: if the first character explicitly given is `*',
                    351:    to give it to the assembler, remove the `*' and do not add `_'.  */
                    352: DEF_RTL_EXPR(SYMBOL_REF, "symbol_ref", "s")
                    353: 
                    354: /* The condition code register is represented, in our imagination,
                    355:    as a register holding a value that can be compared to zero.
                    356:    In fact, the machine has already compared them and recorded the
                    357:    results; but instructions that look at the condition code
                    358:    pretend to be looking at the entire value and comparing it.  */
                    359: DEF_RTL_EXPR(CC0, "cc0", "")
                    360: 
                    361: /* =====================================================================
                    362:    A QUEUED expression really points to a member of the queue of instructions
                    363:    to be output later for postincrement/postdecrement.
                    364:    QUEUED expressions never become part of instructions.
                    365:    When a QUEUED expression would be put into an instruction,
                    366:    instead either the incremented variable or a copy of its previous
                    367:    value is used.
                    368:    
                    369:    Operands are:
                    370:    0. the variable to be incremented (a REG rtx).
                    371:    1. the incrementing instruction, or 0 if it hasn't been output yet.
                    372:    2. A REG rtx for a copy of the old value of the variable, or 0 if none yet.
                    373:    3. the body to use for the incrementing instruction
                    374:    4. the next QUEUED expression in the queue.
                    375:    ====================================================================== */
                    376: 
                    377: DEF_RTL_EXPR(QUEUED, "queued", "eeeee")
                    378: 
                    379: /* ----------------------------------------------------------------------
                    380:    Expressions for operators in an rtl pattern
                    381:    ---------------------------------------------------------------------- */
                    382: 
                    383: /* if_then_else.  This is used in representing ordinary
                    384:    conditional jump instructions.
                    385:      Operand:
                    386:      0:  condition
                    387:      1:  then expr
                    388:      2:  else expr */
                    389: DEF_RTL_EXPR(IF_THEN_ELSE, "if_then_else", "eee")
                    390: 
                    391: /* plus */
                    392: DEF_RTL_EXPR(PLUS, "plus", "ee")
                    393: 
                    394: /* Operand 0 minus operand 1.  */
                    395: DEF_RTL_EXPR(MINUS, "minus", "ee")
                    396: 
                    397: /* Minus operand 0.  */
                    398: DEF_RTL_EXPR(NEG, "neg", "e")
                    399: 
                    400: DEF_RTL_EXPR(MULT, "mult", "ee")
                    401: 
                    402: /* Operand 0 divided by operand 1.  */
                    403: DEF_RTL_EXPR(DIV, "div", "ee")
                    404: /* Remainder of operand 0 divided by operand 1.  */
                    405: DEF_RTL_EXPR(MOD, "mod", "ee")
                    406: 
                    407: /* Unsigned multiply and divide.  */
                    408: 
                    409: DEF_RTL_EXPR(UMULT, "umult", "ee")
                    410: DEF_RTL_EXPR(UDIV, "udiv", "ee")
                    411: DEF_RTL_EXPR(UMOD, "umod", "ee")
                    412: 
                    413: /* Bitwise operations.  */
                    414: DEF_RTL_EXPR(AND, "and", "ee")
                    415: 
                    416: DEF_RTL_EXPR(IOR, "ior", "ee")
                    417: 
                    418: DEF_RTL_EXPR(XOR, "xor", "ee")
                    419: 
                    420: DEF_RTL_EXPR(NOT, "not", "e")
                    421: 
                    422: /* Operand:
                    423:      0:  value to be shifted.
                    424:      1:  number of bits.
                    425:    ASHIFT and LSHIFT are distinguished because on some machines
                    426:    these allow a negative operand and shift right in that case.  */
                    427: DEF_RTL_EXPR(LSHIFT, "lshift", "ee")
                    428: DEF_RTL_EXPR(ASHIFT, "ashift", "ee")
                    429: DEF_RTL_EXPR(ROTATE, "rotate", "ee")
                    430: 
                    431: /* Right shift operations, for machines where these are not the same
                    432:    as left shifting with a negative argument.  */
                    433: 
                    434: DEF_RTL_EXPR(ASHIFTRT, "ashiftrt", "ee")
                    435: DEF_RTL_EXPR(LSHIFTRT, "lshiftrt", "ee")
                    436: DEF_RTL_EXPR(ROTATERT, "rotatert", "ee")
                    437: 
                    438: /* These unary operations are used to represent incrementation
                    439:    and decrementation as they occur in memory addresses.
                    440:    The amount of increment or decrement are not represented
                    441:    because they can be understood from the machine-mode of the
                    442:    containing MEM.  These operations exist in only two cases:
                    443:    1. pushes onto the stack.
                    444:    2. created automatically by the life_analysis pass in flow.c.  */
                    445: DEF_RTL_EXPR(PRE_DEC, "pre_dec", "e")
                    446: DEF_RTL_EXPR(PRE_INC, "pre_inc", "e")
                    447: DEF_RTL_EXPR(POST_DEC, "post_dec", "e")
                    448: DEF_RTL_EXPR(POST_INC, "post_inc", "e")
                    449: 
                    450: /* Comparison operations.  The ordered comparisons exist in two
                    451:    flavors, signed and unsigned.  */
                    452: DEF_RTL_EXPR(NE, "ne", "ee")
                    453: DEF_RTL_EXPR(EQ, "eq", "ee")
                    454: DEF_RTL_EXPR(GE, "ge", "ee")
                    455: DEF_RTL_EXPR(GT, "gt", "ee")
                    456: DEF_RTL_EXPR(LE, "le", "ee")
                    457: DEF_RTL_EXPR(LT, "lt", "ee")
                    458: DEF_RTL_EXPR(GEU, "geu", "ee")
                    459: DEF_RTL_EXPR(GTU, "gtu", "ee")
                    460: DEF_RTL_EXPR(LEU, "leu", "ee")
                    461: DEF_RTL_EXPR(LTU, "ltu", "ee")
                    462: 
                    463: /* Represents the result of sign-extending the sole operand.
                    464:    The machine modes of the operand and of the SIGN_EXTEND expression
                    465:    determine how much sign-extension is going on.  */
                    466: DEF_RTL_EXPR(SIGN_EXTEND, "sign_extend", "e")
                    467: 
                    468: /* Similar for zero-extension (such as unsigned short to int).  */
                    469: DEF_RTL_EXPR(ZERO_EXTEND, "zero_extend", "e")
                    470: 
                    471: /* Similar but here the operand has a wider mode.  */
                    472: DEF_RTL_EXPR(TRUNCATE, "truncate", "e")
                    473: 
                    474: /* Similar for extending floating-point values (such as SFmode to DFmode).  */
                    475: DEF_RTL_EXPR(FLOAT_EXTEND, "float_extend", "e")
                    476: DEF_RTL_EXPR(FLOAT_TRUNCATE, "float_truncate", "e")
                    477: 
                    478: /* Conversion of fixed point operand to floating point value.  */
                    479: DEF_RTL_EXPR(FLOAT, "float", "e")
                    480: 
                    481: /* With fixed-point machine mode:
                    482:    Conversion of floating point operand to fixed point value.
                    483:    Value is defined only when the operand's value is an integer.
                    484:    With floating-point machine mode (and operand with same mode):
                    485:    Operand is rounded toward zero to produce an integer value
                    486:    represented in floating point.  */
                    487: DEF_RTL_EXPR(FIX, "fix", "e")
                    488: 
                    489: /* Conversion of unsigned fixed point operand to floating point value.  */
                    490: DEF_RTL_EXPR(UNSIGNED_FLOAT, "unsigned_float", "e")
                    491: 
                    492: /* With fixed-point machine mode:
                    493:    Conversion of floating point operand to *unsigned* fixed point value.
                    494:    Value is defined only when the operand's value is an integer.  */
                    495: DEF_RTL_EXPR(UNSIGNED_FIX, "unsigned_fix", "e")
                    496: 
                    497: /* Absolute value */
                    498: DEF_RTL_EXPR(ABS, "abs", "e")
                    499: 
                    500: /* Square root */
                    501: DEF_RTL_EXPR(SQRT, "sqrt", "e")
                    502: 
                    503: /* Find first bit that is set.
                    504:    Value is 1 + number of trailing zeros in the arg.,
                    505:    or 0 if arg is 0.  */
                    506: DEF_RTL_EXPR(FFS, "ffs", "e")
                    507: 
                    508: /* Reference to a signed bit-field of specified size and position.
                    509:    Operand 0 is the memory unit (usually SImode or QImode) which
                    510:    contains the field's first bit.  Operand 1 is the width, in bits.
                    511:    Operand 2 is the number of bits in the memory unit before the
                    512:    first bit of this field.
                    513:    If BITS_BIG_ENDIAN is defined, the first bit is the msb and
                    514:    operand 2 counts from the msb of the memory unit.
                    515:    Otherwise, the first bit is the lsb and operand 2 counts from
                    516:    the lsb of the memory unit.  */
                    517: DEF_RTL_EXPR(SIGN_EXTRACT, "sign_extract", "eee")
                    518: 
                    519: /* Similar for unsigned bit-field.  */
                    520: DEF_RTL_EXPR(ZERO_EXTRACT, "zero_extract", "eee")
                    521: 
                    522: /*
                    523: Local variables:
                    524: mode:c
                    525: version-control: t
                    526: End:
                    527: */

unix.superglobalmegacorp.com

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