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

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

unix.superglobalmegacorp.com

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