Annotation of gcc/config/h8300/h8300.h, revision 1.1.1.4

1.1       root        1: /* Definitions of target machine for GNU compiler. 
                      2:    Hitachi H8/300 version generating coff 
1.1.1.4 ! root        3:    Copyright (C) 1992, 1993, 1994, 1995 Free Software Foundation, Inc.
1.1.1.3   root        4:    Contributed by Steve Chamberlain ([email protected]),
                      5:    Jim Wilson ([email protected]), and Doug Evans ([email protected]).
1.1       root        6: 
                      7: This file is part of GNU CC.
                      8: 
                      9: GNU CC is free software; you can redistribute it and/or modify
                     10: it under the terms of the GNU General Public License as published by
                     11: the Free Software Foundation; either version 2, or (at your option)
                     12: any later version.
                     13: 
                     14: GNU CC is distributed in the hope that it will be useful,
                     15: but WITHOUT ANY WARRANTY; without even the implied warranty of
                     16: MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
                     17: GNU General Public License for more details.
                     18: 
                     19: You should have received a copy of the GNU General Public License
                     20: along with GNU CC; see the file COPYING.  If not, write to
1.1.1.4 ! root       21: the Free Software Foundation, 59 Temple Place - Suite 330,
        !            22: Boston, MA 02111-1307, USA.  */
1.1       root       23: 
1.1.1.3   root       24: /* Which cpu to compile for.
                     25:    We use int for CPU_TYPE to avoid lots of casts.  */
                     26: #if 0 /* defined in insn-attr.h, here for documentation */
                     27: enum attr_cpu { CPU_H8300, CPU_H8300H };
                     28: #endif
                     29: extern int cpu_type;
                     30: 
                     31: /* Various globals defined in h8300.c.  */
                     32: 
                     33: extern char *h8_push_op,*h8_pop_op,*h8_mov_op;
                     34: extern char **h8_reg_names;
                     35: 
1.1       root       36: /* Names to predefine in the preprocessor for this target machine.  */
                     37: 
1.1.1.3   root       38: #define CPP_PREDEFINES \
                     39: "-D__LONG_MAX__=2147483647L -D__LONG_LONG_MAX__=2147483647L -D_DOUBLE_IS_32BITS"
1.1       root       40: 
1.1.1.3   root       41: #define CPP_SPEC \
                     42:   "%{!mh:-D__H8300__} %{mh:-D__H8300H__} \
                     43:    %{!mh:-D__SIZE_TYPE__=unsigned\\ int -D__PTRDIFF_TYPE__=int} \
                     44:    %{mh:-D__SIZE_TYPE__=unsigned\\ long -D__PTRDIFF_TYPE__=long} \
                     45:    %{!mh:-Acpu(h8300) -Amachine(h8300)} %{mh:-Acpu(h8300h) -Amachine(h8300h)} \
                     46:    %{!mint32:-D__INT_MAX__=32767} %{mint32:-D__INT_MAX__=2147483647}"
                     47: 
                     48: #define LINK_SPEC "%{mh:-m h8300h}"
                     49: 
                     50: #define LIB_SPEC "%{mrelax:-relax} %{g:-lg} %{!p:%{!pg:-lc}}%{p:-lc_p}%{pg:-lc_p}"
1.1       root       51: 
                     52: /* Print subsidiary information on the compiler version in use.  */
1.1.1.3   root       53: 
1.1       root       54: #define TARGET_VERSION fprintf (stderr, " (Hitachi H8/300)");
1.1.1.3   root       55: 
1.1       root       56: /* Run-time compilation parameters selecting different hardware subsets.  */
1.1.1.3   root       57: 
                     58: extern int target_flags;
1.1       root       59: 
                     60: /* Macros used in the machine description to test the flags.  */
                     61: 
1.1.1.3   root       62: /* Make int's 32 bits.  */
                     63: #define TARGET_INT32 (target_flags & 8)
                     64: 
                     65: /* Dump recorded insn lengths into the output file.  This helps debug the
                     66:    md file.  */
                     67: #define TARGET_ADDRESSES (target_flags & 64)
                     68: 
                     69: /* Pass the first few arguments in registers.  */
                     70: #define TARGET_QUICKCALL (target_flags & 128)
                     71: 
                     72: /* Pretend byte accesses are slow.  */
                     73: #define TARGET_SLOWBYTE (target_flags & 256)
                     74: 
                     75: /* Dump each assembler insn's rtl into the output file.
                     76:    This is for debugging the compiler only.  */
                     77: #define TARGET_RTL_DUMP        (target_flags & 2048)
                     78: 
                     79: /* Select between the h8/300 and h8/300h cpus.  */
                     80: #define TARGET_H8300   (! TARGET_H8300H)
                     81: #define TARGET_H8300H  (target_flags & 4096)
                     82: 
1.1       root       83: /* Macro to define tables used to set the flags.
                     84:    This is a list in braces of pairs in braces,
                     85:    each pair being { "NAME", VALUE }
                     86:    where VALUE is the bits to set or minus the bits to clear.
                     87:    An empty string NAME is used to identify the default VALUE.  */
                     88: 
                     89: #define TARGET_SWITCHES  \
1.1.1.3   root       90:   { {"int32",8},               \
                     91:     {"addresses",64 },         \
                     92:     {"quickcall",128},         \
                     93:     {"no-quickcall",-128},     \
                     94:     {"slowbyte",256},          \
                     95:     {"relax",1024},            \
                     96:     {"rtl-dump",2048},         \
                     97:     {"h",4096},                        \
                     98:     {"no-h",-4096},            \
                     99:     {"exp",8192},              \
1.1       root      100:     { "", TARGET_DEFAULT}}
                    101: 
1.1.1.4 ! root      102: /* Merge the meaning of -mdouble64 and -fshort-double.
        !           103:    ??? Unfortunately, there's no way to detect -fno-short-double
        !           104:    (our default is the opposite of theirs).
        !           105:    Also do other things that must be done once at start up.  */
        !           106: 
1.1.1.3   root      107: #define OVERRIDE_OPTIONS \
                    108: {                              \
1.1.1.4 ! root      109:   /*extern int flag_short_double; \
        !           110:   flag_short_double = TARGET_DOUBLE32;*/ \
1.1.1.3   root      111:   h8300_init_once ();          \
1.1       root      112: }
                    113: 
                    114: /* Default target_flags if no switches specified.  */
1.1.1.3   root      115: 
1.1       root      116: #ifndef TARGET_DEFAULT
1.1.1.3   root      117: #define TARGET_DEFAULT (128)   /* quickcall */
1.1       root      118: #endif
                    119: 
1.1.1.3   root      120: /* Show we can debug even without a frame pointer.  */
                    121: /* #define CAN_DEBUG_WITHOUT_FP */
                    122: 
                    123: /* Define this if addresses of constant functions
                    124:    shouldn't be put through pseudo regs where they can be cse'd.
                    125:    Desirable on machines where ordinary constants are expensive
                    126:    but a CALL with constant address is cheap.  */
                    127: #define NO_FUNCTION_CSE
1.1       root      128: 
1.1.1.3   root      129: /* Target machine storage layout */
                    130: 
                    131: /* Define to use software floating point emulator for REAL_ARITHMETIC and
                    132:    decimal <-> binary conversion. */
                    133: #define REAL_ARITHMETIC
1.1       root      134: 
                    135: /* Define this if most significant bit is lowest numbered
                    136:    in instructions that operate on numbered bit-fields.
                    137:    This is not true on the H8/300.  */
                    138: #define BITS_BIG_ENDIAN 0
                    139: 
                    140: /* Define this if most significant byte of a word is the lowest numbered.  */
                    141: /* That is true on the H8/300.  */
                    142: #define BYTES_BIG_ENDIAN 1
                    143: 
                    144: /* Define this if most significant word of a multiword number is lowest
                    145:    numbered.  
                    146:    This is true on an H8/300 (actually we can make it up, but we choose to
1.1.1.3   root      147:    be consistent.  */ 
1.1       root      148: #define WORDS_BIG_ENDIAN 1
                    149: 
                    150: /* Number of bits in an addressable storage unit */
                    151: #define BITS_PER_UNIT 8
                    152: 
                    153: /* Width in bits of a "word", which is the contents of a machine register.
                    154:    Note that this is not necessarily the width of data type `int';
                    155:    if using 16-bit ints on a 68000, this would still be 32.
                    156:    But on a machine with 16-bit registers, this would be 16.  */
1.1.1.3   root      157: #define BITS_PER_WORD          (TARGET_H8300H ? 32 : 16)
                    158: #define MAX_BITS_PER_WORD      32
1.1       root      159: 
                    160: /* Width of a word, in units (bytes).  */
1.1.1.3   root      161: #define UNITS_PER_WORD         (TARGET_H8300H ? 4 : 2)
1.1.1.4 ! root      162: #define MIN_UNITS_PER_WORD     2
1.1       root      163: 
                    164: /* Width in bits of a pointer.
                    165:    See also the macro `Pmode' defined below.  */
1.1.1.3   root      166: #define POINTER_SIZE (TARGET_H8300H ? 32 : 16)
1.1       root      167: 
1.1.1.3   root      168: #define SHORT_TYPE_SIZE        16
                    169: #define INT_TYPE_SIZE          (TARGET_INT32 ? 32 : 16)
                    170: #define LONG_TYPE_SIZE                 32
                    171: #define LONG_LONG_TYPE_SIZE    32
                    172: #define FLOAT_TYPE_SIZE        32
                    173: #define DOUBLE_TYPE_SIZE       32
                    174: #define LONG_DOUBLE_TYPE_SIZE  DOUBLE_TYPE_SIZE
1.1       root      175: 
1.1.1.3   root      176: #define MAX_FIXED_MODE_SIZE    32
1.1       root      177: 
                    178: /* Allocation boundary (in *bits*) for storing arguments in argument list.  */
1.1.1.3   root      179: #define PARM_BOUNDARY (TARGET_H8300H ? 32 : 16)
1.1       root      180: 
                    181: /* Allocation boundary (in *bits*) for the code of a function.  */
                    182: #define FUNCTION_BOUNDARY 16
                    183: 
                    184: /* Alignment of field after `int : 0' in a structure.  */
1.1.1.3   root      185: #define EMPTY_FIELD_BOUNDARY 16
1.1       root      186: 
                    187: /* A bitfield declared as `int' forces `int' alignment for the struct.  */
                    188: #define PCC_BITFIELD_TYPE_MATTERS  0
                    189: 
                    190: /* No data type wants to be aligned rounder than this.  */
1.1.1.3   root      191: #define BIGGEST_ALIGNMENT (TARGET_H8300H ? 32 : 16)
1.1       root      192: 
                    193: /* No structure field wants to be aligned rounder than this.  */
1.1.1.3   root      194: #define BIGGEST_FIELD_ALIGNMENT (TARGET_H8300H ? 32 : 16)
1.1       root      195: 
1.1.1.3   root      196: /* The stack goes in 16/32 bit lumps.  */
                    197: #define STACK_BOUNDARY (TARGET_H8300 ? 16 : 32)
1.1       root      198: 
                    199: /* Define this if move instructions will actually fail to work
                    200:    when given unaligned data.  */
1.1.1.3   root      201: /* On the H8/300, longs can be aligned on halfword boundaries, but not
                    202:    byte boundaries.  */
1.1       root      203: #define STRICT_ALIGNMENT 1
                    204: 
                    205: /* Standard register usage.  */
                    206: 
                    207: /* Number of actual hardware registers.
                    208:    The hardware registers are assigned numbers for the compiler
                    209:    from 0 to just below FIRST_PSEUDO_REGISTER.
                    210: 
                    211:    All registers that the compiler knows about must be given numbers,
                    212:    even those that are not normally considered general registers.  
                    213: 
                    214:    Reg 8 does not correspond to any hardware register, but instead
                    215:    appears in the RTL as an argument pointer prior to reload, and is
                    216:    eliminated during reloading in favor of either the stack or frame
                    217:    pointer.  */
1.1.1.3   root      218: 
1.1       root      219: #define FIRST_PSEUDO_REGISTER 9
                    220: 
                    221: /* 1 for registers that have pervasive standard uses
1.1.1.3   root      222:    and are not available for the register allocator.  */
1.1       root      223: 
                    224: #define FIXED_REGISTERS \
1.1.1.3   root      225:   { 0, 0, 0, 0, 0, 0, 0, 1, 1}
1.1       root      226: 
                    227: /* 1 for registers not available across function calls.
                    228:    These must include the FIXED_REGISTERS and also any
                    229:    registers that can be used without being saved.
                    230:    The latter must include the registers where values are returned
                    231:    and the register where structure-value addresses are passed.
                    232:    Aside from that, you can include as many other registers as you
                    233:    like.  
                    234: 
1.1.1.3   root      235:    h8 destroys r0,r1,r2,r3.  */
1.1       root      236: 
                    237: #define CALL_USED_REGISTERS \
1.1.1.3   root      238:   { 1, 1, 1, 1, 0, 0, 0, 1, 1 }
1.1       root      239: 
1.1.1.3   root      240: #define REG_ALLOC_ORDER \
                    241:   { 2, 3, 0, 1, 4, 5, 6, 7, 8}
1.1       root      242: 
                    243: /* Return number of consecutive hard regs needed starting at reg REGNO
                    244:    to hold something of mode MODE.
                    245: 
                    246:    This is ordinarily the length in words of a value of mode MODE
                    247:    but can be less for certain modes in special long registers.  */
1.1.1.3   root      248: 
1.1       root      249: #define HARD_REGNO_NREGS(REGNO, MODE)   \
                    250:   ((GET_MODE_SIZE (MODE) + UNITS_PER_WORD - 1) / UNITS_PER_WORD)
                    251: 
                    252: /* Value is 1 if hard register REGNO can hold a value of machine-mode
                    253:    MODE.
                    254: 
1.1.1.3   root      255:    H8/300: If an even reg, then anything goes. Otherwise the mode must be QI
1.1.1.4 ! root      256:            or HI.
1.1.1.3   root      257:    H8/300H: Anything goes.  */
                    258: 
1.1       root      259: #define HARD_REGNO_MODE_OK(REGNO, MODE) \
1.1.1.3   root      260:  (TARGET_H8300 ? (((REGNO)&1)==0) || (MODE==HImode) || (MODE==QImode) \
                    261:   : 1)
1.1       root      262: 
                    263: /* Value is 1 if it is a good idea to tie two pseudo registers
                    264:    when one has mode MODE1 and one has mode MODE2.
                    265:    If HARD_REGNO_MODE_OK could produce different values for MODE1 and MODE2,
                    266:    for any hard reg, then this must be 0 for correct output.  */
                    267: #define MODES_TIEABLE_P(MODE1, MODE2)  ((MODE1) == (MODE2))
                    268: 
                    269: /* Specify the registers used for certain standard purposes.
                    270:    The values of these macros are register numbers.  */
                    271: 
                    272: /* H8/300 pc is not overloaded on a register.  */
1.1.1.3   root      273: 
1.1       root      274: /*#define PC_REGNUM 15*/
                    275: 
                    276: /* Register to use for pushing function arguments.  */
                    277: #define STACK_POINTER_REGNUM 7
                    278: 
                    279: /* Base register for access to local variables of the function.  */
                    280: #define FRAME_POINTER_REGNUM 6
                    281: 
                    282: /* Value should be nonzero if functions must have frame pointers.
                    283:    Zero means the frame pointer need not be set up (and parms
                    284:    may be accessed via the stack pointer) in functions that seem suitable.
                    285:    This is computed in `reload', in reload1.c.  */
                    286: #define FRAME_POINTER_REQUIRED 0
                    287: 
                    288: /* Base register for access to arguments of the function.  */
                    289: #define ARG_POINTER_REGNUM 8
                    290: 
                    291: /* Register in which static-chain is passed to a function.  */
1.1.1.4 ! root      292: #define STATIC_CHAIN_REGNUM 3
1.1       root      293: 
                    294: /* Define the classes of registers for register constraints in the
                    295:    machine description.  Also define ranges of constants.
                    296: 
                    297:    One of the classes must always be named ALL_REGS and include all hard regs.
                    298:    If there is more than one class, another class must be named NO_REGS
                    299:    and contain no registers.
                    300: 
                    301:    The name GENERAL_REGS must be the name of a class (or an alias for
                    302:    another name such as ALL_REGS).  This is the class of registers
                    303:    that is allowed by "g" or "r" in a register constraint.
                    304:    Also, registers outside this class are allocated only when
                    305:    instructions express preferences for them.
                    306: 
                    307:    The classes must be numbered in nondecreasing order; that is,
                    308:    a larger-numbered class must never be contained completely
                    309:    in a smaller-numbered class.
                    310: 
                    311:    For any two classes, it is very desirable that there be another
                    312:    class that represents their union.  */
                    313:    
1.1.1.3   root      314: /* The h8 has only one kind of register, but we mustn't do byte by
                    315:    byte operations on the sp, so we keep it as a different class */
1.1       root      316: 
1.1.1.3   root      317: enum reg_class { NO_REGS,  LONG_REGS, GENERAL_REGS, SP_REG, SP_AND_G_REG, ALL_REGS, LIM_REG_CLASSES };
1.1       root      318: 
                    319: #define N_REG_CLASSES (int) LIM_REG_CLASSES
                    320: 
1.1.1.3   root      321: /* Give names of register classes as strings for dump file.   */
1.1       root      322: 
                    323: #define REG_CLASS_NAMES \
1.1.1.3   root      324:  {"NO_REGS",  "LONG_REGS",  "GENERAL_REGS", "SP_REG", "SP_AND_G_REG", "ALL_REGS", "LIM_REGS" }
1.1       root      325: 
                    326: /* Define which registers fit in which classes.
                    327:    This is an initializer for a vector of HARD_REG_SET
                    328:    of length N_REG_CLASSES.  */
                    329: 
1.1.1.3   root      330: #define REG_CLASS_CONTENTS                     \
                    331: {      0,              /* No regs      */      \
                    332:    0x07f,               /* LONG_REGS    */      \
                    333:    0x07f,              /* GENERAL_REGS */      \
                    334:    0x080,              /* SP_REG       */      \
                    335:    0x0ff,              /* SP_AND_G_REG */      \
                    336:    0x1ff,              /* ALL_REGS     */      \
1.1       root      337: }
                    338: 
1.1.1.3   root      339: /* The same information, inverted:
                    340:    Return the class number of the smallest class containing
                    341:    reg number REGNO.  This could be a conditional expression
                    342:    or could index an array.  */
                    343: 
                    344: #define REGNO_REG_CLASS(REGNO)  \
                    345:    ((REGNO) < 7  ? LONG_REGS  : \
                    346:     (REGNO) == 7 ? SP_REG     : \
                    347:     GENERAL_REGS)
1.1       root      348: 
                    349: /* The class value for index registers, and the one for base regs.  */
                    350: 
                    351: #define INDEX_REG_CLASS NO_REGS
                    352: #define BASE_REG_CLASS  GENERAL_REGS
                    353: 
                    354: /* Get reg_class from a letter such as appears in the machine description.  */
                    355: 
                    356: #define REG_CLASS_FROM_LETTER(C) \
1.1.1.3   root      357:   ((C) == 'a' ? (SP_REG) : (C) == 'l' ? (LONG_REGS) : (NO_REGS))
1.1       root      358: 
                    359: /* The letters I, J, K, L, M, N, O, P in a register constraint string
                    360:    can be used to stand for particular ranges of immediate operands.
                    361:    This macro defines what the ranges are.
                    362:    C is the letter, and VALUE is a constant value.
                    363:    Return 1 if VALUE is in the range specified by C.  */
                    364: 
1.1.1.3   root      365: #define CONST_OK_FOR_I(VALUE) ((VALUE) == 0)
                    366: #define CONST_OK_FOR_J(VALUE) ((unsigned) (VALUE) < 256)
                    367: #define CONST_OK_FOR_K(VALUE) (((VALUE) == 1) || (VALUE) == 2)
                    368: #define CONST_OK_FOR_L(VALUE) (((VALUE) == -1) || (VALUE) == -2)
                    369: #define CONST_OK_FOR_M(VALUE) (((VALUE) == 3) || (VALUE) == 4)
                    370: #define CONST_OK_FOR_N(VALUE) (((VALUE) == -3) || (VALUE) == -4)
                    371: #define CONST_OK_FOR_O(VALUE) (ok_for_bclr (VALUE))
                    372: #define CONST_OK_FOR_P(VALUE) (small_power_of_two (VALUE))
                    373: 
                    374: #define CONST_OK_FOR_LETTER_P(VALUE, C) \
                    375:   ((C) == 'I' ? CONST_OK_FOR_I (VALUE) : \
                    376:    (C) == 'J' ? CONST_OK_FOR_J (VALUE) : \
                    377:    (C) == 'K' ? CONST_OK_FOR_K (VALUE) : \
                    378:    (C) == 'L' ? CONST_OK_FOR_L (VALUE) : \
                    379:    (C) == 'M' ? CONST_OK_FOR_M (VALUE) : \
                    380:    (C) == 'N' ? CONST_OK_FOR_N (VALUE) : \
                    381:    (C) == 'O' ? CONST_OK_FOR_O (VALUE) : \
                    382:    (C) == 'P' ? CONST_OK_FOR_P(VALUE) : \
1.1       root      383:    0)
                    384: 
                    385: /* Similar, but for floating constants, and defining letters G and H.
                    386:    Here VALUE is the CONST_DOUBLE rtx itself. 
1.1.1.3   root      387:      
                    388:   `G' is a floating-point zero.  */
1.1       root      389: 
1.1.1.3   root      390: #define CONST_DOUBLE_OK_FOR_LETTER_P(VALUE, C) \
                    391:   ((C) == 'G' ? (VALUE) == CONST0_RTX (DFmode) \
1.1       root      392:    : 0)
                    393: 
                    394: /* Given an rtx X being reloaded into a reg required to be
                    395:    in class CLASS, return the class of reg to actually use.
                    396:    In general this is just CLASS; but on some machines
                    397:    in some cases it is preferable to use a more restrictive class.  */
1.1.1.3   root      398: 
1.1       root      399: #define PREFERRED_RELOAD_CLASS(X,CLASS)  (CLASS)
                    400: 
                    401: /* Return the maximum number of consecutive registers
                    402:    needed to represent mode MODE in a register of class CLASS.  */
                    403: 
1.1.1.3   root      404: /* On the H8, this is the size of MODE in words.  */
                    405: 
1.1       root      406: #define CLASS_MAX_NREGS(CLASS, MODE)   \
                    407:   ((GET_MODE_SIZE (MODE) + UNITS_PER_WORD - 1) / UNITS_PER_WORD)
                    408: 
                    409: /* Any SI register to register move may need to be reloaded, 
                    410:    so define REGISTER_MOVE_COST to be > 2 so that reload never
                    411:    shortcuts.  */
1.1.1.3   root      412: 
1.1       root      413: #define REGISTER_MOVE_COST(CLASS1, CLASS2) 3
                    414: 
                    415: /* Stack layout; function entry, exit and calling.  */
                    416: 
                    417: /* Define this if pushing a word on the stack
                    418:    makes the stack pointer a smaller address.  */
1.1.1.3   root      419: 
1.1       root      420: #define STACK_GROWS_DOWNWARD
                    421: 
                    422: /* Define this if the nominal address of the stack frame
                    423:    is at the high-address end of the local variables;
                    424:    that is, each additional local variable allocated
                    425:    goes at a more negative offset in the frame.  */
1.1.1.3   root      426: 
1.1       root      427: #define FRAME_GROWS_DOWNWARD
                    428: 
                    429: /* Offset within stack frame to start allocating local variables at.
                    430:    If FRAME_GROWS_DOWNWARD, this is the offset to the END of the
                    431:    first local allocated.  Otherwise, it is the offset to the BEGINNING
                    432:    of the first local allocated.  */
1.1.1.3   root      433: 
1.1       root      434: #define STARTING_FRAME_OFFSET 0
                    435: 
                    436: /* If we generate an insn to push BYTES bytes,
                    437:    this says how many the stack pointer really advances by.
                    438: 
                    439:    On the H8/300, @-sp really pushes a byte if you ask it to - but that's
                    440:    dangerous, so we claim that it always pushes a word, then we catch
1.1.1.3   root      441:    the mov.b rx,@-sp and turn it into a mov.w rx,@-sp on output.
1.1       root      442: 
1.1.1.3   root      443:    On the H8/300h, we simplify TARGET_QUICKCALL by setting this to 4 and doing
                    444:    a similar thing.  */
1.1       root      445: 
1.1.1.3   root      446: #define PUSH_ROUNDING(BYTES) \
                    447:   (((BYTES) + PARM_BOUNDARY/8 - 1) & -PARM_BOUNDARY/8)
                    448: 
                    449: /* Offset of first parameter from the argument pointer register value.  */
1.1       root      450: /* Is equal to the size of the saved fp + pc, even if an fp isn't
                    451:    saved since the value is used before we know.  */
1.1.1.3   root      452: 
1.1       root      453: #define FIRST_PARM_OFFSET(FNDECL) 0
                    454: 
                    455: /* Value is the number of bytes of arguments automatically
                    456:    popped when returning from a subroutine call.
1.1.1.4 ! root      457:    FUNDECL is the declaration node of the function (as a tree),
1.1       root      458:    FUNTYPE is the data type of the function (as a tree),
                    459:    or for a library call it is an identifier node for the subroutine name.
                    460:    SIZE is the number of bytes of arguments passed on the stack.
                    461: 
1.1.1.3   root      462:    On the H8 the return does not pop anything.  */
                    463: 
1.1.1.4 ! root      464: #define RETURN_POPS_ARGS(FUNDECL,FUNTYPE,SIZE) 0
1.1       root      465: 
                    466: /* Definitions for register eliminations.
                    467: 
                    468:    This is an array of structures.  Each structure initializes one pair
                    469:    of eliminable registers.  The "from" register number is given first,
                    470:    followed by "to".  Eliminations of the same "from" register are listed
                    471:    in order of preference.
                    472: 
1.1.1.3   root      473:    We have two registers that can be eliminated on the h8300.  First, the
1.1       root      474:    frame pointer register can often be eliminated in favor of the stack
                    475:    pointer register.  Secondly, the argument pointer register can always be
                    476:    eliminated; it is replaced with either the stack or frame pointer. */
1.1.1.3   root      477: 
1.1       root      478: #define ELIMINABLE_REGS                                \
                    479: {{ ARG_POINTER_REGNUM, STACK_POINTER_REGNUM},  \
                    480:  { ARG_POINTER_REGNUM, FRAME_POINTER_REGNUM},   \
                    481:  { FRAME_POINTER_REGNUM, STACK_POINTER_REGNUM}}
                    482: 
1.1.1.3   root      483: /* Given FROM and TO register numbers, say whether this elimination is allowed.
                    484:    Frame pointer elimination is automatically handled.
                    485: 
                    486:    For the h8300, if frame pointer elimination is being done, we would like to
                    487:    convert ap into sp, not fp.
                    488: 
                    489:    All other eliminations are valid.  */
                    490: 
1.1       root      491: #define CAN_ELIMINATE(FROM, TO)                                        \
                    492:  ((FROM) == ARG_POINTER_REGNUM && (TO) == STACK_POINTER_REGNUM \
                    493:   ? ! frame_pointer_needed                                     \
                    494:   : 1)
                    495: 
                    496: /* Define the offset between two registers, one to be eliminated, and the other
                    497:    its replacement, at the start of a routine.  */
1.1.1.3   root      498: 
                    499: #define INITIAL_ELIMINATION_OFFSET(FROM, TO, OFFSET) \
                    500:   OFFSET = initial_offset (FROM, TO)
1.1       root      501: 
                    502: /* Define how to find the value returned by a function.
                    503:    VALTYPE is the data type of the value (as a tree).
                    504:    If the precise function being called is known, FUNC is its FUNCTION_DECL;
                    505:    otherwise, FUNC is 0. 
                    506:    
1.1.1.3   root      507:    On the H8 the return value is in R0/R1.  */
                    508: 
1.1       root      509: #define FUNCTION_VALUE(VALTYPE, FUNC) \
1.1.1.3   root      510:   gen_rtx (REG, TYPE_MODE (VALTYPE), 0)
1.1       root      511: 
                    512: /* Define how to find the value returned by a library function
                    513:    assuming the value has mode MODE.  */
                    514: 
1.1.1.3   root      515: /* On the h8 the return value is in R0/R1 */
                    516: 
1.1       root      517: #define LIBCALL_VALUE(MODE) \
1.1.1.3   root      518:   gen_rtx (REG, MODE, 0)
1.1       root      519: 
                    520: /* 1 if N is a possible register number for a function value.
1.1.1.3   root      521:    On the H8, R0 is the only register thus used.  */
                    522: 
1.1       root      523: #define FUNCTION_VALUE_REGNO_P(N) ((N) == 0)
                    524: 
                    525: /* Define this if PCC uses the nonreentrant convention for returning
                    526:    structure and union values.  */
1.1.1.3   root      527: 
                    528: /*#define PCC_STATIC_STRUCT_RETURN*/
1.1       root      529: 
                    530: /* 1 if N is a possible register number for function argument passing.
1.1.1.3   root      531:    On the H8, no registers are used in this way.  */
                    532: /* ??? What about TARGET_QUICKCALL? */
                    533: 
1.1       root      534: #define FUNCTION_ARG_REGNO_P(N) 0
                    535: 
                    536: /* Register in which address to store a structure value
                    537:    is passed to a function.  */
1.1.1.3   root      538: 
1.1       root      539: #define STRUCT_VALUE 0
                    540: 
                    541: /* Return true if X should be returned in memory.  */
1.1.1.3   root      542: /* ??? This will return small structs in regs.  */
                    543: #define RETURN_IN_MEMORY(X) (GET_MODE_SIZE (TYPE_MODE (X)) > 4)
1.1       root      544: 
                    545: /* When defined, the compiler allows registers explicitly used in the
                    546:    rtl to be used as spill registers but prevents the compiler from
1.1.1.3   root      547:    extending the lifetime of these registers. */
                    548: 
1.1       root      549: #define SMALL_REGISTER_CLASSES
                    550: 
                    551: /* Define a data type for recording info about an argument list
                    552:    during the scan of that argument list.  This data type should
1.1.1.3   root      553:    hold all necessary information about the function itself
1.1       root      554:    and about the args processed so far, enough to enable macros
                    555:    such as FUNCTION_ARG to determine where the next arg should go.
                    556: 
                    557:    On the H8/300, this is a two item struct, the first is the number of bytes
1.1.1.3   root      558:    scanned so far and the second is the rtx of the called library
                    559:    function if any.  */
1.1       root      560: 
                    561: #define CUMULATIVE_ARGS struct cum_arg
1.1.1.3   root      562: struct cum_arg { int nbytes; struct rtx_def * libcall; };
1.1       root      563: 
                    564: /* Initialize a variable CUM of type CUMULATIVE_ARGS
                    565:    for a call to a function whose data type is FNTYPE.
                    566:    For a library call, FNTYPE is 0.
                    567: 
                    568:    On the H8/300, the offset starts at 0.  */
1.1.1.3   root      569: 
1.1       root      570: #define INIT_CUMULATIVE_ARGS(CUM,FNTYPE,LIBNAME)       \
1.1.1.3   root      571:  ((CUM).nbytes = 0, (CUM).libcall = LIBNAME)
1.1       root      572: 
                    573: /* Update the data in CUM to advance over an argument
                    574:    of mode MODE and data type TYPE.
1.1.1.3   root      575:    (TYPE is null for libcalls where that information may not be available.)  */
1.1       root      576: 
1.1.1.3   root      577: #define FUNCTION_ARG_ADVANCE(CUM, MODE, TYPE, NAMED)   \
                    578:  ((CUM).nbytes += ((MODE) != BLKmode                   \
                    579:   ? (GET_MODE_SIZE (MODE) + UNITS_PER_WORD - 1) & -UNITS_PER_WORD      \
                    580:   : (int_size_in_bytes (TYPE) + UNITS_PER_WORD - 1) & -UNITS_PER_WORD))
1.1       root      581: 
                    582: /* Define where to put the arguments to a function.
                    583:    Value is zero to push the argument on the stack,
                    584:    or a hard register in which to store the argument.
                    585: 
                    586:    MODE is the argument's machine mode.
                    587:    TYPE is the data type of the argument (as a tree).
                    588:     This is null for libcalls where that information may
                    589:     not be available.
                    590:    CUM is a variable of type CUMULATIVE_ARGS which gives info about
                    591:     the preceding args and about the function being called.
                    592:    NAMED is nonzero if this argument is a named parameter
                    593:     (otherwise it is an extra parameter matching an ellipsis).  */
                    594: 
1.1.1.3   root      595: /* On the H8/300 all normal args are pushed, unless -mquickcall in which
                    596:    case the first 3 arguments are passed in registers.
                    597:    See function `function_arg'.  */
1.1       root      598: 
1.1.1.3   root      599: struct rtx_def *function_arg();
1.1       root      600: #define FUNCTION_ARG(CUM, MODE, TYPE, NAMED) \
                    601:   function_arg (&CUM, MODE, TYPE, NAMED)
                    602: 
1.1.1.3   root      603: /* Perform any needed actions needed for a function that is receiving a
                    604:    variable number of arguments.  */
                    605: 
                    606: extern int current_function_anonymous_args;
                    607: #define SETUP_INCOMING_VARARGS(ASF, MODE, TYPE, PAS, ST) \
                    608:   current_function_anonymous_args = 1;
                    609: 
                    610: /* Generate assembly output for the start of a function.  */
1.1       root      611: 
                    612: #define FUNCTION_PROLOGUE(FILE, SIZE) \
1.1.1.3   root      613:   function_prologue (FILE, SIZE)
1.1       root      614: 
                    615: /* Output assembler code to FILE to increment profiler label # LABELNO
                    616:    for profiling a function entry.  */
                    617: 
1.1.1.3   root      618: #define FUNCTION_PROFILER(FILE, LABELNO)  \
                    619:   fprintf (FILE, "\t%s\t#LP%d,%s\n\tjsr @mcount\n", \
                    620:           h8_mov_op, (LABELNO), h8_reg_names[0]);
1.1       root      621: 
                    622: /* Output assembler code to FILE to initialize this source file's
                    623:    basic block profiling info, if that has not already been done.  */
1.1.1.3   root      624: /* ??? @LPBX0 is moved into r0 twice.  */
1.1       root      625: 
                    626: #define FUNCTION_BLOCK_PROFILER(FILE, LABELNO)  \
1.1.1.3   root      627:   fprintf (FILE, "\t%s\t%s\n\t%s\t@LPBX0,%s\n\tbne LPI%d\n\t%s\t@LPBX0,%s\n\t%s\t%s\n\tjsr\t@__bb_init_func\nLPI%d:\t%s\t%s\n", \
                    628:           h8_push_op, h8_reg_names[0],         \
                    629:           h8_mov_op, h8_reg_names[0],          \
                    630:           (LABELNO),                           \
                    631:           h8_mov_op, h8_reg_names[0],          \
                    632:           h8_push_op, h8_reg_names[0],         \
                    633:           (LABELNO),                           \
                    634:           h8_pop_op, h8_reg_names[0]);
1.1       root      635: 
                    636: /* Output assembler code to FILE to increment the entry-count for
1.1.1.3   root      637:    the BLOCKNO'th basic block in this source file.  This is a real pain in the
                    638:    sphincter on a VAX, since we do not want to change any of the bits in the
                    639:    processor status word.  The way it is done here, it is pushed onto the stack
                    640:    before any flags have changed, and then the stack is fixed up to account for
                    641:    the fact that the instruction to restore the flags only reads a word.
                    642:    It may seem a bit clumsy, but at least it works.  */
                    643: /* ??? This one needs work.  */
                    644: 
                    645: #define BLOCK_PROFILER(FILE, BLOCKNO)  \
                    646:   fprintf (FILE, "\tmovpsl -(sp)\n\tmovw (sp),2(sp)\n\taddl2 $2,sp\n\taddl2 $1,LPBX2+%d\n\tbicpsw $255\n\tbispsw (sp)+\n", \
                    647:           4 * BLOCKNO)
1.1       root      648: 
                    649: /* EXIT_IGNORE_STACK should be nonzero if, when returning from a function,
                    650:    the stack pointer does not matter.  The value is tested only in
                    651:    functions that have frame pointers.
                    652:    No definition is equivalent to always zero.  */
                    653: 
                    654: #define EXIT_IGNORE_STACK 0
                    655: 
                    656: /* This macro generates the assembly code for function exit,
                    657:    on machines that need it.  If FUNCTION_EPILOGUE is not defined
                    658:    then individual return instructions are generated for each
                    659:    return statement.  Args are same as for FUNCTION_PROLOGUE.  */
                    660: 
1.1.1.3   root      661: #define FUNCTION_EPILOGUE(FILE, SIZE) \
                    662:   function_epilogue (FILE, SIZE)
1.1       root      663: 
                    664: /* Output assembler code for a block containing the constant parts
1.1.1.3   root      665:    of a trampoline, leaving space for the variable parts.  
1.1       root      666: 
1.1.1.3   root      667:    H8/300
                    668:              vvvv context
1.1.1.4 ! root      669:    1 0000 7900xxxx             mov.w   #0x1234,r3
        !           670:    2 0004 5A00xxxx             jmp     @0x1234
1.1.1.3   root      671:              ^^^^ function
                    672: 
                    673:    H8/300H
                    674:              vvvvvvvv context
1.1.1.4 ! root      675:    2 0000 7A00xxxxxxxx                 mov.l   #0x12345678,er3
        !           676:    3 0006 5Axxxxxx             jmp     @0x123456
1.1.1.3   root      677:            ^^^^^^ function
                    678: */
                    679: 
                    680: #define TRAMPOLINE_TEMPLATE(FILE)                      \
                    681:   do {                                                 \
                    682:     if (TARGET_H8300)                                  \
                    683:       {                                                        \
1.1.1.4 ! root      684:        fprintf (FILE, "\tmov.w #0x1234,r3\n");         \
1.1.1.3   root      685:        fprintf (FILE, "\tjmp   @0x1234\n");            \
                    686:       }                                                        \
                    687:     else                                               \
                    688:       {                                                        \
1.1.1.4 ! root      689:        fprintf (FILE, "\tmov.l #0x12345678,er3\n");    \
1.1.1.3   root      690:        fprintf (FILE, "\tjmp   @0x123456\n");  \
                    691:       }                                                        \
                    692:   } while (0)
1.1       root      693: 
                    694: /* Length in units of the trampoline for entering a nested function.  */
                    695: 
1.1.1.3   root      696: #define TRAMPOLINE_SIZE (TARGET_H8300 ? 8 : 12)
1.1       root      697: 
                    698: /* Emit RTL insns to initialize the variable parts of a trampoline.
                    699:    FNADDR is an RTX for the address of the function's pure code.
                    700:    CXT is an RTX for the static chain value for the function.  */
                    701: 
1.1.1.3   root      702: #define INITIALIZE_TRAMPOLINE(TRAMP, FNADDR, CXT)                              \
                    703: {                                                                              \
                    704:   enum machine_mode mode = TARGET_H8300H ? SImode : HImode;                    \
                    705:   emit_move_insn (gen_rtx (MEM, mode, plus_constant ((TRAMP), 2)), CXT);       \
                    706:   emit_move_insn (gen_rtx (MEM, mode, plus_constant ((TRAMP), 6)), FNADDR);    \
                    707:   if (TARGET_H8300H)                                                           \
                    708:     emit_move_insn (gen_rtx (MEM, QImode, plus_constant ((TRAMP), 6)), GEN_INT (0x5A)); \
1.1       root      709: }
                    710: 
1.1.1.3   root      711: /* Addressing modes, and classification of registers for them.  */
1.1       root      712: 
1.1.1.3   root      713: #define HAVE_POST_INCREMENT
1.1       root      714: /*#define HAVE_POST_DECREMENT */
                    715: 
1.1.1.3   root      716: #define HAVE_PRE_DECREMENT
1.1       root      717: /*#define HAVE_PRE_INCREMENT */
                    718: 
                    719: /* Macros to check register numbers against specific register classes.  */
                    720: 
                    721: /* These assume that REGNO is a hard or pseudo reg number.
                    722:    They give nonzero only if REGNO is a hard reg of the suitable class
                    723:    or a pseudo reg currently allocated to a suitable hard reg.
                    724:    Since they use reg_renumber, they are safe only once reg_renumber
                    725:    has been allocated, which happens in local-alloc.c.  */
                    726:  
1.1.1.3   root      727: #define REGNO_OK_FOR_INDEX_P(regno) 0
1.1       root      728: 
                    729: #define REGNO_OK_FOR_BASE_P(regno) \
                    730:   ((regno) < FIRST_PSEUDO_REGISTER || reg_renumber[regno] >= 0)
                    731: 
                    732: /* Maximum number of registers that can appear in a valid memory address.  */
                    733: 
                    734: #define MAX_REGS_PER_ADDRESS 1
                    735: 
                    736: /* 1 if X is an rtx for a constant that is a valid address.  */
                    737: 
                    738: #define CONSTANT_ADDRESS_P(X)   \
1.1.1.3   root      739:   (GET_CODE (X) == LABEL_REF || GET_CODE (X) == SYMBOL_REF     \
                    740:    || (GET_CODE (X) == CONST_INT                               \
                    741:        /* We handle signed and unsigned offsets here.  */      \
                    742:        && INTVAL (X) > (TARGET_H8300 ? -0x10000 : -0x1000000)  \
                    743:        && INTVAL (X) < (TARGET_H8300 ? 0x10000 : 0x1000000))   \
                    744:    || GET_CODE (X) == CONST                                    \
1.1       root      745:    || GET_CODE (X) == HIGH)
                    746: 
                    747: /* Nonzero if the constant value X is a legitimate general operand.
                    748:    It is given that X satisfies CONSTANT_P or is a CONST_DOUBLE.  */
                    749: 
                    750: #define LEGITIMATE_CONSTANT_P(X) (GET_CODE (X) != CONST_DOUBLE)
                    751: 
                    752: /* The macros REG_OK_FOR..._P assume that the arg is a REG rtx
                    753:    and check its validity for a certain class.
                    754:    We have two alternate definitions for each of them.
                    755:    The usual definition accepts all pseudo regs; the other rejects
                    756:    them unless they have been allocated suitable hard regs.
                    757:    The symbol REG_OK_STRICT causes the latter definition to be used.
                    758: 
                    759:    Most source files want to accept pseudo regs in the hope that
                    760:    they will get allocated to the class that the insn wants them to be in.
                    761:    Source files for reload pass need to be strict.
                    762:    After reload, it makes no difference, since pseudo regs have
                    763:    been eliminated by then.  */
                    764: 
                    765: #ifndef REG_OK_STRICT
                    766: 
                    767: /* Nonzero if X is a hard reg that can be used as an index
                    768:    or if it is a pseudo reg.  */
                    769: #define REG_OK_FOR_INDEX_P(X) 0
                    770: /* Nonzero if X is a hard reg that can be used as a base reg
                    771:    or if it is a pseudo reg.  */
                    772: #define REG_OK_FOR_BASE_P(X) 1
                    773: #define REG_OK_FOR_INDEX_P_STRICT(X) REGNO_OK_FOR_INDEX_P (REGNO (X))
1.1.1.3   root      774: #define REG_OK_FOR_BASE_P_STRICT(X) REGNO_OK_FOR_BASE_P (REGNO (X))
                    775: #define STRICT 0
1.1       root      776: 
                    777: #else
                    778: 
                    779: /* Nonzero if X is a hard reg that can be used as an index.  */
                    780: #define REG_OK_FOR_INDEX_P(X) REGNO_OK_FOR_INDEX_P (REGNO (X))
                    781: /* Nonzero if X is a hard reg that can be used as a base reg.  */
                    782: #define REG_OK_FOR_BASE_P(X) REGNO_OK_FOR_BASE_P (REGNO (X))
1.1.1.3   root      783: #define STRICT 1
1.1       root      784: 
                    785: #endif
1.1.1.3   root      786: 
                    787: /* Extra constraints - 'U' if for an operand valid for a bset
                    788:    destination; i.e. a register or register indirect target.  */
                    789: #define OK_FOR_U(OP) \
                    790:   ((GET_CODE (OP) == REG && REG_OK_FOR_BASE_P (OP)) \
                    791:    || (GET_CODE (OP) == MEM && GET_CODE (XEXP (OP, 0)) == REG \
                    792:        && REG_OK_FOR_BASE_P (XEXP (OP, 0)))) 
                    793:  
                    794: #define EXTRA_CONSTRAINT(OP, C) \
                    795:  ((C) == 'U' ? OK_FOR_U (OP) : 0)
1.1       root      796: 
                    797: /* GO_IF_LEGITIMATE_ADDRESS recognizes an RTL expression
                    798:    that is a valid memory address for an instruction.
                    799:    The MODE argument is the machine mode for the MEM expression
                    800:    that wants to use this address.
                    801: 
                    802:    The other macros defined here are used only in GO_IF_LEGITIMATE_ADDRESS,
                    803:    except for CONSTANT_ADDRESS_P which is actually
                    804:    machine-independent.  
                    805: 
                    806:    On the H8/300, a legitimate address has the form
                    807:    REG, REG+CONSTANT_ADDRESS or CONSTANT_ADDRESS.  */
                    808: 
                    809: /* Accept either REG or SUBREG where a register is valid.  */
                    810:   
1.1.1.3   root      811: #define RTX_OK_FOR_BASE_P(X)                                   \
                    812:   ((REG_P (X) && REG_OK_FOR_BASE_P (X))                                \
                    813:    || (GET_CODE (X) == SUBREG && REG_P (SUBREG_REG (X))                \
1.1       root      814:        && REG_OK_FOR_BASE_P (SUBREG_REG (X))))
                    815: 
1.1.1.3   root      816: #define GO_IF_LEGITIMATE_ADDRESS(MODE, X, ADDR)        \
                    817:   if (RTX_OK_FOR_BASE_P (X)) goto ADDR;                        \
                    818:   if (CONSTANT_ADDRESS_P (X)) goto ADDR;               \
                    819:   if (GET_CODE (X) == PLUS                             \
                    820:       && CONSTANT_ADDRESS_P (XEXP (X, 1))              \
1.1       root      821:       && RTX_OK_FOR_BASE_P (XEXP (X, 0))) goto ADDR;
                    822: 
                    823: /* Try machine-dependent ways of modifying an illegitimate address
                    824:    to be legitimate.  If we find one, return the new, valid address.
                    825:    This macro is used in only one place: `memory_address' in explow.c.
                    826: 
                    827:    OLDX is the address as it was before break_out_memory_refs was called.
                    828:    In some cases it is useful to look at this to decide what needs to be done.
                    829: 
                    830:    MODE and WIN are passed so that this macro can use
                    831:    GO_IF_LEGITIMATE_ADDRESS.
                    832: 
                    833:    It is always safe for this macro to do nothing.  It exists to recognize
1.1.1.3   root      834:    opportunities to optimize the output. 
1.1       root      835: 
                    836:    For the H8/300, don't do anything.  */
                    837: 
                    838: #define LEGITIMIZE_ADDRESS(X,OLDX,MODE,WIN)  {}
                    839: 
                    840: /* Go to LABEL if ADDR (a legitimate address expression)
                    841:    has an effect that depends on the machine mode it is used for.
                    842: 
                    843:    On the H8/300, the predecrement and postincrement address depend thus
                    844:    (the amount of decrement or increment being the length of the operand)
                    845:    and all indexed address depend thus (because the index scale factor
                    846:    is the length of the operand).  */
                    847: 
1.1.1.3   root      848: #define GO_IF_MODE_DEPENDENT_ADDRESS(ADDR,LABEL) \
                    849:   if (GET_CODE (ADDR) == POST_INC || GET_CODE (ADDR) == PRE_DEC) goto LABEL;
1.1       root      850: 
                    851: /* Specify the machine mode that this machine uses
                    852:    for the index in the tablejump instruction.  */
1.1.1.3   root      853: #define CASE_VECTOR_MODE Pmode
1.1       root      854: 
                    855: /* Define this if the case instruction expects the table
                    856:    to contain offsets from the address of the table.
                    857:    Do not define this if the table should contain absolute addresses.  */
                    858: /*#define CASE_VECTOR_PC_RELATIVE*/
                    859: 
                    860: /* Define this if the case instruction drops through after the table
                    861:    when the index is out of range.  Don't define it if the case insn
                    862:    jumps to the default label instead.  */
                    863: #define CASE_DROPS_THROUGH
                    864: 
                    865: /* Specify the tree operation to be used to convert reals to integers.  */
                    866: #define IMPLICIT_FIX_EXPR FIX_ROUND_EXPR
                    867: 
                    868: /* This is the kind of divide that is easiest to do in the general case.  */
                    869: #define EASY_DIV_EXPR TRUNC_DIV_EXPR
                    870: 
                    871: /* Define this as 1 if `char' should by default be signed; else as 0.
                    872: 
                    873:    On the H8/300, sign extension is expensive, so we'll say that chars
                    874:    are unsigned.  */
                    875: #define DEFAULT_SIGNED_CHAR 0
                    876: 
                    877: /* This flag, if defined, says the same insns that convert to a signed fixnum
                    878:    also convert validly to an unsigned one.  */
                    879: #define FIXUNS_TRUNC_LIKE_FIX_TRUNC
                    880: 
                    881: /* Max number of bytes we can move from memory to memory
                    882:    in one reasonably fast instruction.  */
1.1.1.3   root      883: #define MOVE_MAX       (TARGET_H8300H ? 4 : 2)
                    884: #define MAX_MOVE_MAX   4
1.1       root      885: 
                    886: /* Define this if zero-extension is slow (more than one real instruction).  */
                    887: /* #define SLOW_ZERO_EXTEND */
                    888: 
                    889: /* Nonzero if access to memory by bytes is slow and undesirable.  */
                    890: #define SLOW_BYTE_ACCESS TARGET_SLOWBYTE
                    891: 
                    892: /* Define if shifts truncate the shift count
                    893:    which implies one can omit a sign-extension or zero-extension
                    894:    of a shift count.  */
                    895: /* #define SHIFT_COUNT_TRUNCATED */
                    896: 
                    897: /* Value is 1 if truncating an integer of INPREC bits to OUTPREC bits
                    898:    is done just by pretending it is already truncated.  */
                    899: #define TRULY_NOOP_TRUNCATION(OUTPREC, INPREC) 1
                    900: 
                    901: /* Specify the machine mode that pointers have.
                    902:    After generation of rtl, the compiler makes no further distinction
                    903:    between pointers and any other objects of this machine mode.  */
1.1.1.3   root      904: #define Pmode (TARGET_H8300H ? SImode : HImode)
1.1       root      905: 
1.1.1.3   root      906: /* ANSI C types.
                    907:    We use longs for the 300h because ints can be 16 or 32.
                    908:    GCC requires SIZE_TYPE to be the same size as pointers.  */
                    909: #define NO_BUILTIN_SIZE_TYPE
                    910: #define NO_BUILTIN_PTRDIFF_TYPE
                    911: #define SIZE_TYPE (TARGET_H8300 ? "unsigned int" : "long unsigned int")
                    912: #define PTRDIFF_TYPE (TARGET_H8300 ? "int" : "long int")
                    913: 
                    914: #define WCHAR_TYPE "short unsigned int"
                    915: #define WCHAR_TYPE_SIZE 16
                    916: #define MAX_WCHAR_TYPE_SIZE 16
1.1       root      917: 
                    918: /* A function address in a call instruction
                    919:    is a byte address (for indexing purposes)
                    920:    so give the MEM rtx a byte's mode.  */
                    921: #define FUNCTION_MODE QImode
                    922: 
                    923: /* Compute the cost of computing a constant rtl expression RTX
                    924:    whose rtx-code is CODE.  The body of this macro is a portion
                    925:    of a switch statement.  If the code is computed here,
                    926:    return it with a return statement.  Otherwise, break from the switch.  */
                    927: 
1.1.1.3   root      928: #define CONST_COSTS(RTX,CODE,OUTER_CODE) \
                    929:   default: { int _zxy= const_costs(RTX, CODE); \
                    930:             if(_zxy) return _zxy; break;}
                    931: 
                    932: #define BRANCH_COST 0
1.1       root      933: 
1.1.1.3   root      934: /* We say that MOD and DIV are so cheap because otherwise we'll
                    935:    generate some really horrible code for division of a power of two.  */
1.1       root      936: 
                    937: /* Provide the costs of a rtl expression.  This is in the body of a
                    938:    switch on CODE.  */
1.1.1.3   root      939: /* ??? Shifts need to have a *much* higher cost than this.  */
                    940: 
                    941: #define RTX_COSTS(RTX,CODE,OUTER_CODE) \
                    942:   case MOD:            \
                    943:   case DIV:            \
                    944:     return 60;         \
                    945:   case MULT:           \
                    946:     return 20;         \
                    947:   case ASHIFT:         \
                    948:   case ASHIFTRT:       \
                    949:   case LSHIFTRT:       \
                    950:   case ROTATE:         \
                    951:   case ROTATERT:       \
                    952:     if (GET_MODE (RTX) == HImode) return 2; \
                    953:     return 8; 
1.1       root      954: 
                    955: /* Tell final.c how to eliminate redundant test instructions.  */
                    956: 
1.1.1.3   root      957: /* Here we define machine-dependent flags and fields in cc_status
                    958:    (see `conditions.h').  No extra ones are needed for the vax.  */
                    959: 
                    960: /* Store in cc_status the expressions
                    961:    that the condition codes will describe
                    962:    after execution of an instruction whose pattern is EXP.
                    963:    Do not alter them if the instruction would not alter the cc's.  */
                    964: 
                    965: #define NOTICE_UPDATE_CC(EXP, INSN) notice_update_cc(EXP, INSN)
                    966: #define CC_DONE_CBIT 0400
                    967: 
                    968: #define OUTPUT_JUMP(NORMAL, FLOAT, NO_OV) \
                    969: {                                      \
                    970:   if (cc_status.flags & CC_NO_OVERFLOW)        \
                    971:     return NO_OV;                      \
                    972:   return NORMAL;                       \
1.1       root      973: }
                    974: 
                    975: /* Control the assembler format that we output.  */
                    976: 
                    977: #define ASM_IDENTIFY_GCC /* nothing */
                    978: 
1.1.1.3   root      979: /* Output at beginning/end of assembler file.  */
                    980: 
                    981: #define ASM_FILE_START(FILE) asm_file_start(FILE)
1.1       root      982: 
1.1.1.3   root      983: #define ASM_FILE_END(FILE) asm_file_end(FILE)
1.1       root      984: 
                    985: /* Output to assembler file text saying following lines
                    986:    may contain character constants, extra white space, comments, etc.  */
                    987: 
1.1.1.3   root      988: #define ASM_APP_ON "; #APP\n"
1.1       root      989: 
                    990: /* Output to assembler file text saying following lines
                    991:    no longer contain unusual constructs.  */
                    992: 
1.1.1.3   root      993: #define ASM_APP_OFF "; #NO_APP\n"
1.1       root      994: 
1.1.1.3   root      995: #define FILE_ASM_OP "\t.file\n"
                    996: #define IDENT_ASM_OP "\t.ident\n"
                    997: 
                    998: /* The assembler op to get a word, 2 bytes for the H8/300, 4 for H8/300H.  */
                    999: #define ASM_WORD_OP    (TARGET_H8300 ? ".word" : ".long")
1.1       root     1000: 
                   1001: /* Output before read-only data.  */
                   1002: 
                   1003: #define TEXT_SECTION_ASM_OP "\t.section .text"
                   1004: #define DATA_SECTION_ASM_OP "\t.section .data"
1.1.1.3   root     1005: #define BSS_SECTION_ASM_OP "\t.section .bss"
                   1006: #define INIT_SECTION_ASM_OP "\t.section .init"
                   1007: #define CTORS_SECTION_ASM_OP "\t.section .ctors"
                   1008: #define DTORS_SECTION_ASM_OP "\t.section .dtors"
                   1009: 
                   1010: #define EXTRA_SECTIONS in_ctors, in_dtors
                   1011: 
                   1012: #define EXTRA_SECTION_FUNCTIONS                                        \
                   1013:                                                                \
                   1014: void                                                           \
                   1015: ctors_section()                                                \
                   1016: {                                                              \
                   1017:   if (in_section != in_ctors)                                  \
                   1018:     {                                                          \
                   1019:       fprintf (asm_out_file, "%s\n", CTORS_SECTION_ASM_OP);    \
                   1020:       in_section = in_ctors;                                   \
                   1021:     }                                                          \
                   1022: }                                                              \
                   1023:                                                                \
                   1024: void                                                           \
                   1025: dtors_section()                                                \
                   1026: {                                                              \
                   1027:   if (in_section != in_dtors)                                  \
                   1028:     {                                                          \
                   1029:       fprintf (asm_out_file, "%s\n", DTORS_SECTION_ASM_OP);    \
                   1030:       in_section = in_dtors;                                   \
                   1031:     }                                                          \
                   1032: }                                                              \
1.1       root     1033: 
1.1.1.3   root     1034: #define ASM_OUTPUT_CONSTRUCTOR(FILE,NAME)      \
                   1035:   do { ctors_section();                                \
                   1036:        fprintf(FILE, "\t%s\t_%s\n", ASM_WORD_OP, NAME); } while (0)
1.1       root     1037: 
1.1.1.3   root     1038: #define ASM_OUTPUT_DESTRUCTOR(FILE,NAME)       \
                   1039:   do { dtors_section();                                \
                   1040:        fprintf(FILE, "\t%s\t_%s\n", ASM_WORD_OP, NAME); } while (0)
                   1041: 
                   1042: #undef DO_GLOBAL_CTORS_BODY                     
                   1043: #define DO_GLOBAL_CTORS_BODY                   \
                   1044: {                                              \
                   1045:   typedef (*pfunc)();                          \
                   1046:   extern pfunc __ctors[];                      \
                   1047:   extern pfunc __ctors_end[];                  \
                   1048:   pfunc *p;                                    \
1.1.1.4 ! root     1049:   for (p = __ctors_end; p > __ctors; )         \
1.1.1.3   root     1050:     {                                          \
1.1.1.4 ! root     1051:       (*--p)();                                        \
1.1.1.3   root     1052:     }                                          \
                   1053: }                                              
                   1054: 
                   1055: #undef DO_GLOBAL_DTORS_BODY                     
                   1056: #define DO_GLOBAL_DTORS_BODY                    \
                   1057: {                                              \
                   1058:   typedef (*pfunc)();                          \
                   1059:   extern pfunc __dtors[];                      \
                   1060:   extern pfunc __dtors_end[];                  \
                   1061:   pfunc *p;                                    \
                   1062:   for (p = __dtors; p < __dtors_end; p++)      \
                   1063:     {                                          \
                   1064:       (*p)();                                  \
                   1065:     }                                          \
                   1066: }                                               
1.1       root     1067: 
                   1068: /* How to refer to registers in assembler output.
                   1069:    This sequence is indexed by compiler's hard-register-number (see above).  */
                   1070: 
                   1071: #define REGISTER_NAMES \
1.1.1.4 ! root     1072: { "r0", "r1", "r2", "r3", "r4", "r5", "r6", "sp", "ap"}
        !          1073: 
        !          1074: #define ADDITIONAL_REGISTER_NAMES { { "r7", 7 } }
1.1       root     1075: 
                   1076: /* How to renumber registers for dbx and gdb.
                   1077:    H8/300 needs no change in the numeration.  */
                   1078: 
                   1079: #define DBX_REGISTER_NUMBER(REGNO) (REGNO)
                   1080: 
                   1081: #define SDB_DEBUGGING_INFO
                   1082: #define SDB_DELIM      "\n"
                   1083: 
1.1.1.4 ! root     1084: /* Output DBX (stabs) debugging information if doing -gstabs.  */
        !          1085: 
        !          1086: #define DBX_DEBUGGING_INFO
        !          1087: 
        !          1088: /* Generate SDB debugging information by default. */
        !          1089: 
        !          1090: #define PREFERRED_DEBUGGING_TYPE SDB_DEBUG
        !          1091: 
        !          1092: /* A C statement to output something to the assembler file to switch to section
        !          1093:    NAME for object DECL which is either a FUNCTION_DECL, a VAR_DECL or
        !          1094:    NULL_TREE.  Some target formats do not support arbitrary sections.  Do not
        !          1095:    define this macro in such cases.  */
1.1.1.3   root     1096: 
1.1.1.4 ! root     1097: #define ASM_OUTPUT_SECTION_NAME(FILE, DECL, NAME) \
        !          1098:   fprintf (FILE, "\t.section %s\n", NAME)
1.1.1.3   root     1099: 
                   1100: /* This is how to output the definition of a user-level label named NAME,
                   1101:    such as the label on a static function or variable NAME.  */
                   1102: 
                   1103: #define ASM_OUTPUT_LABEL(FILE, NAME)   \
1.1       root     1104:   do { assemble_name (FILE, NAME); fputs (":\n", FILE); } while (0)
                   1105: 
1.1.1.3   root     1106: #define ASM_OUTPUT_EXTERNAL(FILE, DECL, NAME) 
1.1       root     1107: 
                   1108: /* This is how to output a command to make the user-level label named NAME
                   1109:    defined for reference from other files.  */
1.1.1.3   root     1110: 
                   1111: #define ASM_GLOBALIZE_LABEL(FILE, NAME)        \
1.1       root     1112:   do { fputs ("\t.global ", FILE); assemble_name (FILE, NAME); fputs ("\n", FILE);} while (0)
                   1113: 
1.1.1.3   root     1114: #define ASM_DECLARE_FUNCTION_NAME(FILE, NAME, DECL) \
                   1115:    ASM_OUTPUT_LABEL(FILE, NAME)
                   1116: 
                   1117: /* This is how to output a reference to a user-level label named NAME.
                   1118:    `assemble_name' uses this.  */
1.1       root     1119: 
                   1120: #define ASM_OUTPUT_LABELREF(FILE, NAME)        \
1.1.1.3   root     1121:   fprintf (FILE, "_%s", NAME)
1.1       root     1122: 
                   1123: /* This is how to output an internal numbered label where
                   1124:    PREFIX is the class of label and NUM is the number within the class.  */
                   1125: 
                   1126: #define ASM_OUTPUT_INTERNAL_LABEL(FILE, PREFIX, NUM)   \
                   1127:   fprintf (FILE, ".%s%d:\n", PREFIX, NUM)
                   1128: 
                   1129: /* This is how to store into the string LABEL
                   1130:    the symbol_ref name of an internal numbered label where
                   1131:    PREFIX is the class of label and NUM is the number within the class.
                   1132:    This is suitable for output with `assemble_name'.  */
                   1133: 
                   1134: #define ASM_GENERATE_INTERNAL_LABEL(LABEL, PREFIX, NUM)        \
                   1135:   sprintf (LABEL, "*.%s%d", PREFIX, NUM)
                   1136: 
                   1137: /* This is how to output an assembler line defining a `double' constant.
                   1138:    It is .dfloat or .gfloat, depending.  */
                   1139: 
1.1.1.3   root     1140: #define ASM_OUTPUT_DOUBLE(FILE, VALUE)                 \
                   1141: do { char dstr[30];                                    \
                   1142:      REAL_VALUE_TO_DECIMAL ((VALUE), "%.20e", dstr);   \
                   1143:      fprintf (FILE, "\t.double %s\n", dstr);           \
                   1144:    } while (0)
                   1145: 
1.1       root     1146: 
                   1147: /* This is how to output an assembler line defining a `float' constant.  */
1.1.1.3   root     1148: #define ASM_OUTPUT_FLOAT(FILE, VALUE)                  \
                   1149: do { char dstr[30];                                    \
                   1150:      REAL_VALUE_TO_DECIMAL ((VALUE), "%.20e", dstr);   \
                   1151:      fprintf (FILE, "\t.float %s\n", dstr);            \
                   1152:    } while (0)
1.1       root     1153: 
                   1154: /* This is how to output an assembler line defining an `int' constant.  */
1.1.1.3   root     1155: 
                   1156: #define ASM_OUTPUT_INT(FILE, VALUE)            \
1.1       root     1157: ( fprintf (FILE, "\t.long "),                  \
                   1158:   output_addr_const (FILE, (VALUE)),           \
                   1159:   fprintf (FILE, "\n"))
                   1160: 
                   1161: /* Likewise for `char' and `short' constants.  */
1.1.1.3   root     1162: 
                   1163: #define ASM_OUTPUT_SHORT(FILE, VALUE)          \
                   1164: ( fprintf (FILE, "\t.word "),                  \
1.1       root     1165:   output_addr_const (FILE, (VALUE)),           \
                   1166:   fprintf (FILE, "\n"))
                   1167: 
1.1.1.3   root     1168: #define ASM_OUTPUT_CHAR(FILE, VALUE)           \
                   1169: ( fprintf (FILE, "\t.byte "),                  \
1.1       root     1170:   output_addr_const (FILE, (VALUE)),           \
                   1171:   fprintf (FILE, "\n"))
                   1172: 
                   1173: /* This is how to output an assembler line for a numeric constant byte.  */
1.1.1.3   root     1174: #define ASM_OUTPUT_BYTE(FILE, VALUE)  \
1.1       root     1175:   fprintf (FILE, "\t.byte 0x%x\n", (VALUE))
                   1176: 
                   1177: /* This is how to output an insn to push a register on the stack.
                   1178:    It need not be very fast code.  */
1.1.1.3   root     1179: 
                   1180: #define ASM_OUTPUT_REG_PUSH(FILE, REGNO) \
                   1181:   fprintf (FILE, "\t%s\t%s\n", h8_push_op, h8_reg_names[REGNO])
1.1       root     1182: 
                   1183: /* This is how to output an insn to pop a register from the stack.
                   1184:    It need not be very fast code.  */
                   1185: 
1.1.1.3   root     1186: #define ASM_OUTPUT_REG_POP(FILE,REGNO) \
                   1187:   fprintf (FILE, "\t%s\t%s\n", h8_pop_op, h8_reg_names[REGNO])
                   1188: 
                   1189: /* This is how to output an element of a case-vector that is absolute.  */
                   1190: 
                   1191: #define ASM_OUTPUT_ADDR_VEC_ELT(FILE, VALUE) \
                   1192:   asm_fprintf (FILE, "\t%s .L%d\n", ASM_WORD_OP, VALUE)
1.1       root     1193: 
                   1194: /* This is how to output an element of a case-vector that is relative.  */
1.1.1.3   root     1195: 
                   1196: #define ASM_OUTPUT_ADDR_DIFF_ELT(FILE, VALUE, REL) \
                   1197:   fprintf (FILE, "\t%s .L%d-.L%d\n", ASM_WORD_OP, VALUE, REL)
1.1       root     1198: 
                   1199: /* This is how to output an assembler line
                   1200:    that says to advance the location counter
                   1201:    to a multiple of 2**LOG bytes.  */
1.1.1.3   root     1202: 
                   1203: #define ASM_OUTPUT_ALIGN(FILE,LOG)     \
                   1204:   if ((LOG) != 0)                      \
1.1.1.4 ! root     1205:     fprintf (FILE, "\t.align %d\n", (LOG))
1.1       root     1206: 
                   1207: /* This is how to output an assembler line
                   1208:    that says to advance the location counter by SIZE bytes.  */
1.1.1.3   root     1209: 
1.1       root     1210: #define ASM_OUTPUT_IDENT(FILE, NAME) \
1.1.1.3   root     1211:   fprintf(FILE, "%s\t \"%s\"\n", IDENT_ASM_OP, NAME)
1.1       root     1212: 
1.1.1.3   root     1213: #define ASM_OUTPUT_SKIP(FILE, SIZE) \
1.1       root     1214:   fprintf (FILE, "\t.space %d\n", (SIZE))
                   1215: 
                   1216: /* This says how to output an assembler line
                   1217:    to define a global common symbol.  */
1.1.1.3   root     1218: 
                   1219: #define ASM_OUTPUT_COMMON(FILE, NAME, SIZE, ROUNDED) \
                   1220: ( fputs ("\t.comm ", (FILE)),                  \
                   1221:   assemble_name ((FILE), (NAME)),              \
1.1       root     1222:   fprintf ((FILE), ",%d\n", (SIZE)))
                   1223: 
                   1224: /* This says how to output an assembler line
                   1225:    to define a local common symbol.  */
1.1.1.3   root     1226: 
1.1       root     1227: #define ASM_OUTPUT_LOCAL(FILE, NAME, SIZE,ROUNDED)     \
                   1228: ( fputs ("\t.lcomm ", (FILE)),                         \
                   1229:   assemble_name ((FILE), (NAME)),                      \
                   1230:   fprintf ((FILE), ",%d\n", (SIZE)))
                   1231: 
                   1232: /* Store in OUTPUT a string (made with alloca) containing
                   1233:    an assembler-name for a local static variable named NAME.
                   1234:    LABELNO is an integer which is different for each call.  */
                   1235: 
                   1236: #define ASM_FORMAT_PRIVATE_NAME(OUTPUT, NAME, LABELNO) \
                   1237: ( (OUTPUT) = (char *) alloca (strlen ((NAME)) + 10),   \
                   1238:   sprintf ((OUTPUT), "%s___%d", (NAME), (LABELNO)))
                   1239: 
                   1240: /* Define the parentheses used to group arithmetic operations
                   1241:    in assembler code.  */
                   1242: 
                   1243: #define ASM_OPEN_PAREN "("
                   1244: #define ASM_CLOSE_PAREN ")"
                   1245: 
                   1246: /* Define results of standard character escape sequences.  */
                   1247: #define TARGET_BELL 007
                   1248: #define TARGET_BS 010
                   1249: #define TARGET_TAB 011
                   1250: #define TARGET_NEWLINE 012
                   1251: #define TARGET_VT 013
                   1252: #define TARGET_FF 014
                   1253: #define TARGET_CR 015
                   1254: 
1.1.1.3   root     1255: /* Print an instruction operand X on file FILE.
                   1256:    look in h8300.c for details */
                   1257: 
                   1258: #define PRINT_OPERAND_PUNCT_VALID_P(CODE) \
1.1       root     1259:   ((CODE) == '#')
                   1260: 
1.1.1.3   root     1261: #define PRINT_OPERAND(FILE, X, CODE)  print_operand(FILE,X,CODE)
1.1       root     1262: 
                   1263: /* Print a memory operand whose address is X, on file FILE.
1.1.1.3   root     1264:    This uses a function in output-vax.c.  */
1.1       root     1265: 
1.1.1.3   root     1266: #define PRINT_OPERAND_ADDRESS(FILE, ADDR) print_operand_address (FILE, ADDR)
1.1       root     1267: 
                   1268: #define HANDLE_PRAGMA(FILE) handle_pragma (FILE)
                   1269: 
1.1.1.3   root     1270: #define FINAL_PRESCAN_INSN(insn, operand, nop) final_prescan_insn (insn, operand,nop)
1.1       root     1271: 
                   1272: /* Define this macro if GNU CC should generate calls to the System V
                   1273:    (and ANSI C) library functions `memcpy' and `memset' rather than
                   1274:    the BSD functions `bcopy' and `bzero'.  */
                   1275: 
1.1.1.3   root     1276: #define TARGET_MEM_FUNCTIONS 1
1.1       root     1277: 
1.1.1.3   root     1278: #define MULHI3_LIBCALL "__mulhi3"
                   1279: #define DIVHI3_LIBCALL "__divhi3"
                   1280: #define UDIVHI3_LIBCALL        "__udivhi3"
                   1281: #define MODHI3_LIBCALL "__modhi3"
                   1282: #define UMODHI3_LIBCALL        "__umodhi3"
                   1283: 
                   1284: /* Perform target dependent optabs initialization.  */
                   1285: 
                   1286: #define INIT_TARGET_OPTABS \
                   1287:   do { \
                   1288:     smul_optab->handlers[(int) HImode].libfunc         \
                   1289:       = gen_rtx (SYMBOL_REF, Pmode, MULHI3_LIBCALL);   \
                   1290:     sdiv_optab->handlers[(int) HImode].libfunc         \
                   1291:       = gen_rtx (SYMBOL_REF, Pmode, DIVHI3_LIBCALL);   \
                   1292:     udiv_optab->handlers[(int) HImode].libfunc         \
                   1293:       = gen_rtx (SYMBOL_REF, Pmode, UDIVHI3_LIBCALL);  \
                   1294:     smod_optab->handlers[(int) HImode].libfunc         \
                   1295:       = gen_rtx (SYMBOL_REF, Pmode, MODHI3_LIBCALL);   \
                   1296:     umod_optab->handlers[(int) HImode].libfunc         \
                   1297:       = gen_rtx (SYMBOL_REF, Pmode, UMODHI3_LIBCALL);  \
                   1298:   } while (0)
1.1       root     1299: 
                   1300: #define MOVE_RATIO 3
                   1301: 
1.1.1.3   root     1302: /* Declarations for functions used in insn-output.c.  */
                   1303: char *emit_a_shift ();
                   1304: 
                   1305: 

unix.superglobalmegacorp.com

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