]> git.ipfire.org Git - thirdparty/gcc.git/blobdiff - gcc/config/m88k/m88k.h
Makefile.in (MACHMODE_H): Add @extra_modes_file@.
[thirdparty/gcc.git] / gcc / config / m88k / m88k.h
index b748a224069f2bab63c3c2e881c9ec0f6b8c6cf2..1678b6bcf7e3bb53dfd61a87642d9f76bfa09dd5 100644 (file)
@@ -1,6 +1,7 @@
 /* Definitions of target machine for GNU compiler for
    Motorola m88100 in an 88open OCS/BCS environment.
-   Copyright (C) 1988, 92, 93, 94, 95, 96, 97, 1998 Free Software Foundation, Inc.
+   Copyright (C) 1988, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000,
+   2001, 2002 Free Software Foundation, Inc.
    Contributed by Michael Tiemann (tiemann@cygnus.com).
    Currently maintained by (gcc@dg-rtp.dg.com)
 
@@ -85,7 +86,7 @@ enum m88k_instruction {
 enum processor_type {
   PROCESSOR_M88100,
   PROCESSOR_M88110,
-  PROCESSOR_M88000,
+  PROCESSOR_M88000
 };
 
 /* Recast the cpu class to be the cpu attribute.  */
@@ -93,9 +94,9 @@ enum processor_type {
 
 /* External variables/functions defined in m88k.c.  */
 
-extern char *m88k_pound_sign;
-extern char *m88k_short_data;
-extern char *m88k_version;
+extern const char *m88k_pound_sign;
+extern const char *m88k_short_data;
+extern const char *m88k_version;
 extern char m88k_volatile_code;
 
 extern unsigned m88k_gp_threshold;
@@ -111,54 +112,12 @@ extern struct rtx_def *m88k_compare_op1;
 
 extern enum processor_type m88k_cpu;
 
-extern int null_prologue ();
-extern int integer_ok_for_set ();
-extern int m88k_debugger_offset ();
-
-
-extern void emit_bcnd ();
-extern void expand_block_move ();
-extern void m88k_layout_frame ();
-extern void m88k_expand_prologue ();
-extern void m88k_begin_prologue ();
-extern void m88k_end_prologue ();
-extern void m88k_expand_epilogue ();
-extern void m88k_begin_epilogue ();
-extern void m88k_end_epilogue ();
-extern void output_function_profiler ();
-extern void output_function_block_profiler ();
-extern void output_block_profiler ();
-extern void output_file_start ();
-extern void output_ascii ();
-extern void output_label ();
-extern void print_operand ();
-extern void print_operand_address ();
-
-extern char *output_load_const_int ();
-extern char *output_load_const_float ();
-extern char *output_load_const_double ();
-extern char *output_load_const_dimode ();
-extern char *output_and ();
-extern char *output_ior ();
-extern char *output_xor ();
-extern char *output_call ();
-
-extern struct rtx_def *emit_test ();
-extern struct rtx_def *legitimize_address ();
-extern struct rtx_def *legitimize_operand ();
-extern struct rtx_def *m88k_function_arg ();
-extern struct rtx_def *m88k_builtin_saveregs ();
-
-extern enum m88k_instruction classify_integer ();
-
 /* external variables defined elsewhere in the compiler */
 
 extern int target_flags;                       /* -m compiler switches */
 extern int frame_pointer_needed;               /* current function has a FP */
-extern int current_function_pretend_args_size; /* args size without ... */
 extern int flag_delayed_branch;                        /* -fdelayed-branch */
 extern int flag_pic;                           /* -fpic */
-extern char * reg_names[];
 
 /* Specify the default monitors.  The meaning of these values can
    be obtained by doing "grep MONITOR_GCC *m88k*".  Generally, the
@@ -191,27 +150,12 @@ extern char * reg_names[];
    Redefined in sysv3.h, sysv4.h, dgux.h, and luna.h.  */
 #define CPP_PREDEFINES "-Dm88000 -Dm88k -Dunix -D__CLASSIFY_TYPE__=2"
 
-#define TARGET_VERSION fprintf (stderr, " (%s%s)", \
-                               VERSION_INFO1, VERSION_INFO2)
+#define TARGET_VERSION fprintf (stderr, " (%s)", VERSION_INFO1)
 
-/* Print subsidiary information on the compiler version in use.
-   Redefined in sysv4.h, and luna.h.  */
-#define VERSION_INFO1  "m88k, "
-#ifndef VERSION_INFO2
-#define VERSION_INFO2   "$Revision: 1.4 $"
+#ifndef VERSION_INFO1
+#define VERSION_INFO1  "m88k"
 #endif
 
-#ifndef VERSION_STRING
-#define VERSION_STRING  version_string
-#ifdef __STDC__
-#define TM_RCS_ID      "@(#)" __FILE__ " $Revision: 1.4 $ " __DATE__
-#else
-#define TM_RCS_ID      "$What: <@(#) m88k.h,v  1.1.1.2.2.2> $"
-#endif  /* __STDC__ */
-#else
-#define TM_RCS_ID      "@(#)" __FILE__ " " VERSION_INFO2 " " __DATE__
-#endif  /* VERSION_STRING */
-
 /* Run-time compilation parameters selecting different hardware subsets.  */
 
 /* Macro to define tables used to set the flags.
@@ -346,13 +290,13 @@ extern char * reg_names[];
                                                                             \
     if (m88k_short_data)                                                    \
       {                                                                             \
-       char *p = m88k_short_data;                                           \
+       const char *p = m88k_short_data;                                     \
        while (*p)                                                           \
-         if (*p >= '0' && *p <= '9')                                        \
+         if (ISDIGIT (*p))                                                  \
            p++;                                                             \
          else                                                               \
            {                                                                \
-             error ("Invalid option `-mshort-data-%s'", m88k_short_data);   \
+             error ("invalid option `-mshort-data-%s'", m88k_short_data);   \
              break;                                                         \
            }                                                                \
        m88k_gp_threshold = atoi (m88k_short_data);                          \
@@ -368,7 +312,6 @@ extern char * reg_names[];
 /*** Storage Layout ***/
 
 /* Sizes in bits of the various types.  */
-#define CHAR_TYPE_SIZE          8
 #define SHORT_TYPE_SIZE                16
 #define INT_TYPE_SIZE          32
 #define LONG_TYPE_SIZE         32
@@ -392,22 +335,9 @@ extern char * reg_names[];
    instructions for them.  */
 #define WORDS_BIG_ENDIAN 1
 
-/* Number of bits in an addressable storage unit */
-#define BITS_PER_UNIT 8
-
-/* Width in bits of a "word", which is the contents of a machine register.
-   Note that this is not necessarily the width of data type `int';
-   if using 16-bit ints on a 68000, this would still be 32.
-   But on a machine with 16-bit registers, this would be 16.  */
-#define BITS_PER_WORD 32
-
 /* Width of a word, in units (bytes).  */
 #define UNITS_PER_WORD 4
 
-/* Width in bits of a pointer.
-   See also the macro `Pmode' defined below.  */
-#define POINTER_SIZE 32
-
 /* Allocation boundary (in *bits*) for storing arguments in argument list.  */
 #define PARM_BOUNDARY 32
 
@@ -645,11 +575,6 @@ extern char * reg_names[];
       }                                                        \
   }
 
-/* These interfaces that don't apply to the m88000.  */
-/* OVERLAPPING_REGNO_P(REGNO) 0 */
-/* INSN_CLOBBERS_REGNO_P(INSN, REGNO) 0 */
-/* PRESERVE_DEATH_INFO_REGNO_P(REGNO) 0 */
-
 /* True if register is an extended register.  */
 #define XRF_REGNO_P(N) ((N) < FIRST_PSEUDO_REGISTER && (N) >= FIRST_EXTENDED_REGISTER)
  
@@ -751,11 +676,11 @@ extern char * reg_names[];
    write-over scoreboard delays between caller and callee.  */
 #define ORDER_REGS_FOR_LOCAL_ALLOC                             \
 {                                                              \
-  static int leaf[] = REG_LEAF_ALLOC_ORDER;                    \
-  static int nonleaf[] = REG_ALLOC_ORDER;                      \
+  static const int leaf[] = REG_LEAF_ALLOC_ORDER;              \
+  static const int nonleaf[] = REG_ALLOC_ORDER;                        \
                                                                \
-  bcopy (regs_ever_live[1] ? nonleaf : leaf, reg_alloc_order,  \
-        FIRST_PSEUDO_REGISTER * sizeof (int));                 \
+  memcpy (reg_alloc_order, regs_ever_live[1] ? nonleaf : leaf, \
+         FIRST_PSEUDO_REGISTER * sizeof (int));                \
 }
 \f
 /*** Register Classes ***/
@@ -933,7 +858,7 @@ enum reg_class { NO_REGS, AP_REG, XRF_REGS, GENERAL_REGS, AGRF_REGS,
    `current_function_outgoing_args_size'.  No space will be pushed
    onto the stack for each call; instead, the function prologue should
    increase the stack frame size by this amount.  */
-#define ACCUMULATE_OUTGOING_ARGS
+#define ACCUMULATE_OUTGOING_ARGS 1
 
 /* Offset from the stack pointer register to the first location at which
    outgoing arguments are placed.  Use the default value zero.  */
@@ -992,9 +917,8 @@ enum reg_class { NO_REGS, AP_REG, XRF_REGS, GENERAL_REGS, AGRF_REGS,
    If the precise function being called is known, FUNC is its FUNCTION_DECL;
    otherwise, FUNC is 0.  */
 #define FUNCTION_VALUE(VALTYPE, FUNC) \
-  gen_rtx (REG, \
-          TYPE_MODE (VALTYPE) == BLKmode ? SImode : TYPE_MODE (VALTYPE), \
-          2)
+  gen_rtx_REG (TYPE_MODE (VALTYPE) == BLKmode ? SImode : TYPE_MODE (VALTYPE), \
+              2)
 
 /* Define this if it differs from FUNCTION_VALUE.  */
 /* #define FUNCTION_OUTGOING_VALUE(VALTYPE, FUNC) ... */
@@ -1014,7 +938,7 @@ enum reg_class { NO_REGS, AP_REG, XRF_REGS, GENERAL_REGS, AGRF_REGS,
 
 /* Define how to find the value returned by a library function
    assuming the value has mode MODE.  */
-#define LIBCALL_VALUE(MODE)  gen_rtx (REG, MODE, 2)
+#define LIBCALL_VALUE(MODE)  gen_rtx_REG (MODE, 2)
 
 /* True if N is a possible register number for a function value
    as seen by the caller.  */
@@ -1094,13 +1018,19 @@ enum reg_class { NO_REGS, AP_REG, XRF_REGS, GENERAL_REGS, AGRF_REGS,
 
 /* Generate necessary RTL for __builtin_saveregs().
    ARGLIST is the argument list; see expr.c.  */
-#define EXPAND_BUILTIN_SAVEREGS(ARGLIST) m88k_builtin_saveregs (ARGLIST)
+#define EXPAND_BUILTIN_SAVEREGS() m88k_builtin_saveregs ()
 
-/* Generate the assembly code for function entry. */
-#define FUNCTION_PROLOGUE(FILE, SIZE) m88k_begin_prologue(FILE, SIZE)
+/* Define the `__builtin_va_list' type for the ABI.  */
+#define BUILD_VA_LIST_TYPE(VALIST) \
+  (VALIST) = m88k_build_va_list ()
 
-/* Perform special actions at the point where the prologue ends.  */
-#define FUNCTION_END_PROLOGUE(FILE) m88k_end_prologue(FILE)
+/* Implement `va_start' for varargs and stdarg.  */
+#define EXPAND_BUILTIN_VA_START(stdarg, valist, nextarg) \
+  m88k_va_start (stdarg, valist, nextarg)
+
+/* Implement `va_arg'.  */
+#define EXPAND_BUILTIN_VA_ARG(valist, type) \
+  m88k_va_arg (valist, type)
 
 /* Output assembler code to FILE to increment profiler label # LABELNO
    for profiling a function entry.  Redefined in sysv3.h, sysv4.h and
@@ -1111,34 +1041,12 @@ enum reg_class { NO_REGS, AP_REG, XRF_REGS, GENERAL_REGS, AGRF_REGS,
 /* Maximum length in instructions of the code output by FUNCTION_PROFILER.  */
 #define FUNCTION_PROFILER_LENGTH (5+3+1+5)
 
-/* Output assembler code to FILE to initialize basic-block profiling for
-   the current module.  LABELNO is unique to each instance.  */
-#define FUNCTION_BLOCK_PROFILER(FILE, LABELNO) \
-  output_function_block_profiler (FILE, LABELNO)
-
-/* Maximum length in instructions of the code output by
-   FUNCTION_BLOCK_PROFILER.  */
-#define FUNCTION_BLOCK_PROFILER_LENGTH (3+5+2+5)
-
-/* Output assembler code to FILE to increment the count associated with
-   the basic block number BLOCKNO.  */
-#define BLOCK_PROFILER(FILE, BLOCKNO) output_block_profiler (FILE, BLOCKNO)
-
-/* Maximum length in instructions of the code output by BLOCK_PROFILER.  */
-#define BLOCK_PROFILER_LENGTH 4
-
 /* EXIT_IGNORE_STACK should be nonzero if, when returning from a function,
    the stack pointer does not matter.  The value is tested only in
    functions that have frame pointers.
    No definition is equivalent to always zero.  */
 #define EXIT_IGNORE_STACK (1)
 
-/* Generate the assembly code for function exit. */
-#define FUNCTION_EPILOGUE(FILE, SIZE) m88k_end_epilogue(FILE, SIZE)
-
-/* Perform special actions at the point where the epilogue begins.  */
-#define FUNCTION_BEGIN_EPILOGUE(FILE) m88k_begin_epilogue(FILE)
-
 /* Value should be nonzero if functions must have frame pointers.
    Zero means the frame pointer need not be set up (and parms
    may be accessed via the stack pointer) in functions that seem suitable.
@@ -1216,9 +1124,9 @@ enum reg_class { NO_REGS, AP_REG, XRF_REGS, GENERAL_REGS, AGRF_REGS,
   /* Restore r10 and load the static chain register.  */               \
   fprintf (FILE, "\tld.d\t %s,%s,24\n", reg_names[10], reg_names[10]); \
   /* Storage: r10 save area, static chain, function address.  */       \
-  ASM_OUTPUT_INT (FILE, const0_rtx);                                   \
-  ASM_OUTPUT_INT (FILE, const0_rtx);                                   \
-  ASM_OUTPUT_INT (FILE, const0_rtx);                                   \
+  assemble_aligned_integer (UNITS_PER_WORD, const0_rtx);               \
+  assemble_aligned_integer (UNITS_PER_WORD, const0_rtx);               \
+  assemble_aligned_integer (UNITS_PER_WORD, const0_rtx);               \
 }
 
 /* Length in units of the trampoline for entering a nested function.
@@ -1241,8 +1149,8 @@ enum reg_class { NO_REGS, AP_REG, XRF_REGS, GENERAL_REGS, AGRF_REGS,
 
 #define INITIALIZE_TRAMPOLINE(TRAMP, FNADDR, CXT)                      \
 {                                                                      \
-  emit_move_insn (gen_rtx (MEM, SImode, plus_constant (TRAMP, 40)), FNADDR); \
-  emit_move_insn (gen_rtx (MEM, SImode, plus_constant (TRAMP, 36)), CXT); \
+  emit_move_insn (gen_rtx_MEM (SImode, plus_constant (TRAMP, 40)), FNADDR); \
+  emit_move_insn (gen_rtx_MEM (SImode, plus_constant (TRAMP, 36)), CXT); \
 }
 
 /*** Library Subroutine Names ***/
@@ -1254,17 +1162,13 @@ enum reg_class { NO_REGS, AP_REG, XRF_REGS, GENERAL_REGS, AGRF_REGS,
 \f
 /*** Addressing Modes ***/
 
-#define EXTRA_CC_MODES CCEVENmode
-
-#define EXTRA_CC_NAMES "CCEVEN"
-
 #define SELECT_CC_MODE(OP,X,Y) CCmode
 
-/* #define HAVE_POST_INCREMENT */
-/* #define HAVE_POST_DECREMENT */
+/* #define HAVE_POST_INCREMENT */
+/* #define HAVE_POST_DECREMENT */
 
-/* #define HAVE_PRE_DECREMENT */
-/* #define HAVE_PRE_INCREMENT */
+/* #define HAVE_PRE_DECREMENT */
+/* #define HAVE_PRE_INCREMENT */
 
 /* Recognize any constant value that is a valid address.
    When PIC, we do not accept an address that would require a scratch reg
@@ -1420,23 +1324,23 @@ enum reg_class { NO_REGS, AP_REG, XRF_REGS, GENERAL_REGS, AGRF_REGS,
 #define LEGITIMIZE_ADDRESS(X,OLDX,MODE,WIN)                    \
 {                                                              \
   if (GET_CODE (X) == PLUS && CONSTANT_ADDRESS_P (XEXP (X, 1)))        \
-    (X) = gen_rtx (PLUS, SImode, XEXP (X, 0),                  \
-                  copy_to_mode_reg (SImode, XEXP (X, 1)));     \
+    (X) = gen_rtx_PLUS (SImode, XEXP (X, 0),                   \
+                       copy_to_mode_reg (SImode, XEXP (X, 1))); \
   if (GET_CODE (X) == PLUS && CONSTANT_ADDRESS_P (XEXP (X, 0)))        \
-    (X) = gen_rtx (PLUS, SImode, XEXP (X, 1),                  \
-                  copy_to_mode_reg (SImode, XEXP (X, 0)));     \
+    (X) = gen_rtx_PLUS (SImode, XEXP (X, 1),                   \
+                       copy_to_mode_reg (SImode, XEXP (X, 0))); \
   if (GET_CODE (X) == PLUS && GET_CODE (XEXP (X, 0)) == MULT)  \
-    (X) = gen_rtx (PLUS, SImode, XEXP (X, 1),                  \
-                  force_operand (XEXP (X, 0), 0));             \
+    (X) = gen_rtx_PLUS (SImode, XEXP (X, 1),                   \
+                       force_operand (XEXP (X, 0), 0));        \
   if (GET_CODE (X) == PLUS && GET_CODE (XEXP (X, 1)) == MULT)  \
-    (X) = gen_rtx (PLUS, SImode, XEXP (X, 0),                  \
-                  force_operand (XEXP (X, 1), 0));             \
+    (X) = gen_rtx_PLUS (SImode, XEXP (X, 0),                   \
+                       force_operand (XEXP (X, 1), 0));        \
   if (GET_CODE (X) == PLUS && GET_CODE (XEXP (X, 0)) == PLUS)  \
-    (X) = gen_rtx (PLUS, Pmode, force_operand (XEXP (X, 0), NULL_RTX),\
-                  XEXP (X, 1));                                \
+    (X) = gen_rtx_PLUS (Pmode, force_operand (XEXP (X, 0), NULL_RTX),\
+                       XEXP (X, 1));                           \
   if (GET_CODE (X) == PLUS && GET_CODE (XEXP (X, 1)) == PLUS)  \
-    (X) = gen_rtx (PLUS, Pmode, XEXP (X, 0),                   \
-                  force_operand (XEXP (X, 1), NULL_RTX));      \
+    (X) = gen_rtx_PLUS (Pmode, XEXP (X, 0),                    \
+                       force_operand (XEXP (X, 1), NULL_RTX)); \
   if (GET_CODE (X) == SYMBOL_REF || GET_CODE (X) == CONST      \
           || GET_CODE (X) == LABEL_REF)                        \
     (X) = legitimize_address (flag_pic, X, 0, 0);              \
@@ -1445,7 +1349,7 @@ enum reg_class { NO_REGS, AP_REG, XRF_REGS, GENERAL_REGS, AGRF_REGS,
 
 /* Go to LABEL if ADDR (a legitimate address expression)
    has an effect that depends on the machine mode it is used for.
-   On the the m88000 this is never true.  */
+   On the m88000 this is never true.  */
 
 #define GO_IF_MODE_DEPENDENT_ADDRESS(ADDR,LABEL)
 
@@ -1501,6 +1405,13 @@ enum reg_class { NO_REGS, AP_REG, XRF_REGS, GENERAL_REGS, AGRF_REGS,
   {"equality_op", {EQ, NE}},                                           \
   {"pc_or_label_ref", {PC, LABEL_REF}},
 
+/* A list of predicates that do special things with modes, and so
+   should not elicit warnings for VOIDmode match_operand.  */
+
+#define SPECIAL_MODE_PREDICATES                \
+  "partial_ccmode_register_operand",   \
+  "pc_or_label_ref",
+
 /* The case table contains either words or branch instructions.  This says
    which.  We always claim that the vector is PC-relative.  It is position
    independent when -fpic is used.  */
@@ -1530,12 +1441,6 @@ enum reg_class { NO_REGS, AP_REG, XRF_REGS, GENERAL_REGS, AGRF_REGS,
    win very much though.  */
 #define CASE_VALUES_THRESHOLD (TARGET_88100 ? 4 : 7)
 
-/* Specify the tree operation to be used to convert reals to integers.  */
-#define IMPLICIT_FIX_EXPR FIX_ROUND_EXPR
-
-/* This is the kind of divide that is easiest to do in the general case.  */
-#define EASY_DIV_EXPR TRUNC_DIV_EXPR
-
 /* Define this as 1 if `char' should by default be signed; else as 0.  */
 #define DEFAULT_SIGNED_CHAR 1
 
@@ -1577,15 +1482,11 @@ enum reg_class { NO_REGS, AP_REG, XRF_REGS, GENERAL_REGS, AGRF_REGS,
    `short' in a prototype should actually be passed as an
    `int'.  In addition to avoiding errors in certain cases of
    mismatch, it also makes for better code on certain machines.  */
-#define PROMOTE_PROTOTYPES
-
-/* Define this macro if a float function always returns float
-   (even in traditional mode).  Redefined in luna.h.  */
-#define TRADITIONAL_RETURN_FLOAT
+#define PROMOTE_PROTOTYPES 1
 
 /* We assume that the store-condition-codes instructions store 0 for false
    and some other value for true.  This is the value stored for true.  */
-#define STORE_FLAG_VALUE -1
+#define STORE_FLAG_VALUE (-1)
 
 /* Specify the machine mode that pointers have.
    After generation of rtl, the compiler makes no further distinction
@@ -1612,19 +1513,10 @@ enum reg_class { NO_REGS, AP_REG, XRF_REGS, GENERAL_REGS, AGRF_REGS,
   else if (GET_CODE (RTX) == NOTE                                      \
           && NOTE_LINE_NUMBER (RTX) == NOTE_INSN_PROLOGUE_END)         \
     {                                                                  \
-      if (profile_block_flag)                                          \
-       LENGTH += FUNCTION_BLOCK_PROFILER_LENGTH;                       \
-      if (profile_flag)                                                        \
+      if (current_function_profile)                                    \
        LENGTH += (FUNCTION_PROFILER_LENGTH + REG_PUSH_LENGTH           \
                   + REG_POP_LENGTH);                                   \
     }                                                                  \
-  else if (profile_block_flag                                          \
-          && (GET_CODE (RTX) == CODE_LABEL                             \
-              || GET_CODE (RTX) == JUMP_INSN                           \
-              || (GET_CODE (RTX) == INSN                               \
-                  && GET_CODE (PATTERN (RTX)) == SEQUENCE              \
-                  && GET_CODE (XVECEXP (PATTERN (RTX), 0, 0)) == JUMP_INSN)))\
-    LENGTH += BLOCK_PROFILER_LENGTH;
 
 /* Track the state of the last volatile memory reference.  Clear the
    state with CC_STATUS_INIT for now.  */
@@ -1690,28 +1582,11 @@ enum reg_class { NO_REGS, AP_REG, XRF_REGS, GENERAL_REGS, AGRF_REGS,
 
 /* A C expressions returning the cost of moving data of MODE from a register
    to or from memory.  This is more costly than between registers.  */
-#define MEMORY_MOVE_COST(MODE) 4
+#define MEMORY_MOVE_COST(MODE,CLASS,IN) 4
 
 /* Provide the cost of a branch.  Exact meaning under development.  */
 #define BRANCH_COST (TARGET_88100 ? 1 : 2)
 
-/* A C statement (sans semicolon) to update the integer variable COST
-   based on the relationship between INSN that is dependent on
-   DEP_INSN through the dependence LINK.  The default is to make no
-   adjustment to COST.  On the m88k, ignore the cost of anti- and
-   output-dependencies.  On the m88100, a store can issue two cycles
-   before the value (not the address) has finished computing.  */
-#define ADJUST_COST(INSN,LINK,DEP_INSN,COST)                           \
-  do {                                                                 \
-    if (REG_NOTE_KIND (LINK) != 0)                                     \
-      (COST) = 0; /* Anti or output dependence.  */                    \
-    else if (! TARGET_88100                                            \
-            && recog_memoized (INSN) >= 0                              \
-            && get_attr_type (INSN) == TYPE_STORE                      \
-            && SET_SRC (PATTERN (INSN)) == SET_DEST (PATTERN (DEP_INSN))) \
-      (COST) -= 4; /* 88110 store reservation station.  */             \
-  } while (0)
-
 /* Do not break .stabs pseudos into continuations.  */
 #define DBX_CONTIN_LENGTH 0
 \f
@@ -1725,12 +1600,11 @@ enum reg_class { NO_REGS, AP_REG, XRF_REGS, GENERAL_REGS, AGRF_REGS,
 #define ASM_COMMENT_START ";"
 
 /* Allow pseudo-ops to be overridden.  Override these in svr[34].h.  */
-#undef INT_ASM_OP
 #undef ASCII_DATA_ASM_OP
-#undef CONST_SECTION_ASM_OP
+#undef READONLY_DATA_SECTION_ASM_OP
 #undef CTORS_SECTION_ASM_OP
 #undef DTORS_SECTION_ASM_OP
-#undef  ASM_OUTPUT_SECTION_NAME
+#undef  TARGET_ASM_NAMED_SECTION
 #undef INIT_SECTION_ASM_OP
 #undef FINI_SECTION_ASM_OP
 #undef TYPE_ASM_OP
@@ -1742,49 +1616,45 @@ enum reg_class { NO_REGS, AP_REG, XRF_REGS, GENERAL_REGS, AGRF_REGS,
 #undef IDENT_ASM_OP
 
 /* These are used in varasm.c as well.  */
-#define TEXT_SECTION_ASM_OP    "text"
-#define DATA_SECTION_ASM_OP    "data"
+#define TEXT_SECTION_ASM_OP    "\ttext"
+#define DATA_SECTION_ASM_OP    "\tdata"
 
 /* Other sections.  */
-#define CONST_SECTION_ASM_OP (TARGET_SVR4                      \
-                             ? "section\t .rodata,\"a\""       \
-                             : "section\t .rodata,\"x\"")
+#define READONLY_DATA_SECTION_ASM_OP (TARGET_SVR4              \
+                             ? "\tsection\t .rodata,\"a\""     \
+                             : "\tsection\t .rodata,\"x\"")
 #define TDESC_SECTION_ASM_OP (TARGET_SVR4                      \
-                             ? "section\t .tdesc,\"a\""        \
-                             : "section\t .tdesc,\"x\"")
+                             ? "\tsection\t .tdesc,\"a\""      \
+                             : "\tsection\t .tdesc,\"x\"")
 
 /* These must be constant strings for crtstuff.c.  */
-#define CTORS_SECTION_ASM_OP   "section\t .ctors,\"d\""
-#define DTORS_SECTION_ASM_OP   "section\t .dtors,\"d\""
-#define INIT_SECTION_ASM_OP    "section\t .init,\"x\""
-#define FINI_SECTION_ASM_OP    "section\t .fini,\"x\""
+#define CTORS_SECTION_ASM_OP   "\tsection\t .ctors,\"d\""
+#define DTORS_SECTION_ASM_OP   "\tsection\t .dtors,\"d\""
+#define INIT_SECTION_ASM_OP    "\tsection\t .init,\"x\""
+#define FINI_SECTION_ASM_OP    "\tsection\t .fini,\"x\""
 
 /* These are pretty much common to all assemblers.  */
-#define IDENT_ASM_OP           "ident"
-#define FILE_ASM_OP            "file"
-#define SECTION_ASM_OP         "section"
-#define SET_ASM_OP             "def"
-#define GLOBAL_ASM_OP          "global"
-#define ALIGN_ASM_OP           "align"
-#define SKIP_ASM_OP            "zero"
-#define COMMON_ASM_OP          "comm"
-#define BSS_ASM_OP             "bss"
-#define FLOAT_ASM_OP           "float"
-#define DOUBLE_ASM_OP          "double"
-#define INT_ASM_OP             "word"
-#define ASM_LONG               INT_ASM_OP
-#define SHORT_ASM_OP           "half"
-#define CHAR_ASM_OP            "byte"
-#define ASCII_DATA_ASM_OP      "string"
+#define IDENT_ASM_OP           "\tident\t"
+#define FILE_ASM_OP            "\tfile\t"
+#define SECTION_ASM_OP         "\tsection\t"
+#define SET_ASM_OP             "\tdef\t"
+#define GLOBAL_ASM_OP          "\tglobal\t"
+#define ALIGN_ASM_OP           "\talign\t"
+#define SKIP_ASM_OP            "\tzero\t"
+#define COMMON_ASM_OP          "\tcomm\t"
+#define BSS_ASM_OP             "\tbss\t"
+#define FLOAT_ASM_OP           "\tfloat\t"
+#define DOUBLE_ASM_OP          "\tdouble\t"
+#define ASCII_DATA_ASM_OP      "\tstring\t"
 
 /* These are particular to the global pool optimization.  */
-#define SBSS_ASM_OP            "sbss"
-#define SCOMM_ASM_OP           "scomm"
-#define SDATA_SECTION_ASM_OP   "sdata"
+#define SBSS_ASM_OP            "\tsbss\t"
+#define SCOMM_ASM_OP           "\tscomm\t"
+#define SDATA_SECTION_ASM_OP   "\tsdata"
 
 /* These are specific to PIC.  */
-#define TYPE_ASM_OP            "type"
-#define SIZE_ASM_OP            "size"
+#define TYPE_ASM_OP            "\ttype\t"
+#define SIZE_ASM_OP            "\tsize\t"
 #ifndef AS_BUG_POUND_TYPE /* Faulty assemblers require @ rather than #.  */
 #undef TYPE_OPERAND_FMT
 #define TYPE_OPERAND_FMT       "#%s"
@@ -1798,15 +1668,13 @@ enum reg_class { NO_REGS, AP_REG, XRF_REGS, GENERAL_REGS, AGRF_REGS,
        fputc ('\n', FILE); } while (0)
 
 /* These are specific to version 03.00 assembler syntax.  */
-#define INTERNAL_ASM_OP                "local"
-#define VERSION_ASM_OP         "version"
-#define UNALIGNED_SHORT_ASM_OP "uahalf"
-#define UNALIGNED_INT_ASM_OP   "uaword"
-#define PUSHSECTION_ASM_OP     "section"
-#define POPSECTION_ASM_OP      "previous"
+#define INTERNAL_ASM_OP                "\tlocal\t"
+#define VERSION_ASM_OP         "\tversion\t"
+#define PUSHSECTION_ASM_OP     "\tsection\t"
+#define POPSECTION_ASM_OP      "\tprevious"
 
 /* These are specific to the version 04.00 assembler syntax.  */
-#define REQUIRES_88110_ASM_OP  "requires_88110"
+#define REQUIRES_88110_ASM_OP  "\trequires_88110"
 
 /* Output any initial stuff to the assembly file.  Always put out
    a file directive, even if not debugging.
@@ -1852,22 +1720,29 @@ enum reg_class { NO_REGS, AP_REG, XRF_REGS, GENERAL_REGS, AGRF_REGS,
     if (TARGET_SVR4)                                                   \
       {                                                                        \
        if (TARGET_88110)                                               \
-         fprintf (FILE, "\t%s\t \"%s\"\n", VERSION_ASM_OP, "04.00");   \
+         fprintf (FILE, "%s\"%s\"\n", VERSION_ASM_OP, "04.00");        \
        else                                                            \
-         fprintf (FILE, "\t%s\t \"%s\"\n", VERSION_ASM_OP, "03.00");   \
+         fprintf (FILE, "%s\"%s\"\n", VERSION_ASM_OP, "03.00");        \
       }                                                                        \
   } while (0)
 
 /* Override svr[34].h.  */
 #undef ASM_FILE_START
 #define ASM_FILE_START(FILE) \
-  output_file_start (FILE, f_options, sizeof f_options / sizeof f_options[0], \
-                    W_options, sizeof W_options / sizeof W_options[0])
+  output_file_start (FILE, \
+       (struct m88k_lang_independent_options *) f_options, \
+       ARRAY_SIZE (f_options), \
+       (struct m88k_lang_independent_options *) W_options, \
+       ARRAY_SIZE (W_options))
 
 #undef ASM_FILE_END
 
 #define ASM_OUTPUT_SOURCE_FILENAME(FILE, NAME) \
-  fprintf (FILE, "\t%s\t \"%s\"\n", FILE_ASM_OP, NAME)
+  do {                                         \
+    fprintf (FILE_ASM_OP, FILE);               \
+    output_quoted_string (FILE, NAME);         \
+    putc ('\n', FILE);                         \
+  } while (0)
 
 #ifdef SDB_DEBUGGING_INFO
 #undef ASM_OUTPUT_SOURCE_LINE
@@ -1901,7 +1776,7 @@ enum reg_class { NO_REGS, AP_REG, XRF_REGS, GENERAL_REGS, AGRF_REGS,
 #define ASM_OUTPUT_OPCODE(STREAM, PTR)                                 \
   {                                                                    \
     int ch;                                                            \
-    char *orig_ptr;                                                    \
+    const char *orig_ptr;                                              \
                                                                        \
     for (orig_ptr = (PTR);                                             \
         (ch = *(PTR)) && ch != ' ' && ch != '\t' && ch != '\n' && ch != '%'; \
@@ -1932,10 +1807,7 @@ enum reg_class { NO_REGS, AP_REG, XRF_REGS, GENERAL_REGS, AGRF_REGS,
    is our `condition code' register), so that condition codes can easily
    be clobbered by an asm.  The carry bit in the PSR is now used.  */
 
-#define ADDITIONAL_REGISTER_NAMES      {"psr", 0, "cc", 0}
-
-/* How to renumber registers for dbx and gdb.  */
-#define DBX_REGISTER_NUMBER(REGNO) (REGNO)
+#define ADDITIONAL_REGISTER_NAMES      {{"psr", 0}, {"cc", 0}}
 
 /* Tell when to declare ASM names.  Override svr4.h to provide this hook.  */
 #undef DECLARE_ASM_NAME
@@ -1947,7 +1819,7 @@ enum reg_class { NO_REGS, AP_REG, XRF_REGS, GENERAL_REGS, AGRF_REGS,
   do {                                                                 \
     if (DECLARE_ASM_NAME)                                              \
       {                                                                        \
-       fprintf (FILE, "\t%s\t ", TYPE_ASM_OP);                         \
+       fprintf (FILE, "%s", TYPE_ASM_OP);                              \
        assemble_name (FILE, NAME);                                     \
        putc (',', FILE);                                               \
        fprintf (FILE, TYPE_OPERAND_FMT, "function");                   \
@@ -1962,7 +1834,7 @@ enum reg_class { NO_REGS, AP_REG, XRF_REGS, GENERAL_REGS, AGRF_REGS,
   do {                                                                     \
     if (DECLARE_ASM_NAME)                                                  \
       {                                                                            \
-       fprintf (FILE, "\t%s\t ", TYPE_ASM_OP);                             \
+       fprintf (FILE, "%s", TYPE_ASM_OP);                                  \
        assemble_name (FILE, NAME);                                         \
        putc (',', FILE);                                                   \
        fprintf (FILE, TYPE_OPERAND_FMT, "object");                         \
@@ -1971,7 +1843,7 @@ enum reg_class { NO_REGS, AP_REG, XRF_REGS, GENERAL_REGS, AGRF_REGS,
        if (!flag_inhibit_size_directive && DECL_SIZE (DECL))               \
          {                                                                 \
             size_directive_output = 1;                                     \
-           fprintf (FILE, "\t%s\t ", SIZE_ASM_OP);                         \
+           fprintf (FILE, "%s", SIZE_ASM_OP);                              \
            assemble_name (FILE, NAME);                                     \
            fprintf (FILE, ",%d\n",  int_size_in_bytes (TREE_TYPE (DECL))); \
          }                                                                 \
@@ -1988,7 +1860,7 @@ enum reg_class { NO_REGS, AP_REG, XRF_REGS, GENERAL_REGS, AGRF_REGS,
 #undef ASM_FINISH_DECLARE_OBJECT
 #define ASM_FINISH_DECLARE_OBJECT(FILE, DECL, TOP_LEVEL, AT_END)        \
 do {                                                                    \
-     char *name = XSTR (XEXP (DECL_RTL (DECL), 0), 0);                  \
+     const char *name = XSTR (XEXP (DECL_RTL (DECL), 0), 0);            \
      if (!flag_inhibit_size_directive && DECL_SIZE (DECL)               \
         && DECLARE_ASM_NAME                                             \
          && ! AT_END && TOP_LEVEL                                       \
@@ -1996,7 +1868,7 @@ do {                                                                       \
         && !size_directive_output)                                      \
        {                                                                \
         size_directive_output = 1;                                      \
-        fprintf (FILE, "\t%s\t ", SIZE_ASM_OP);                         \
+        fprintf (FILE, "%s", SIZE_ASM_OP);                              \
         assemble_name (FILE, name);                                     \
         fprintf (FILE, ",%d\n",  int_size_in_bytes (TREE_TYPE (DECL))); \
        }                                                                \
@@ -2015,7 +1887,7 @@ do {                                                                       \
            labelno++;                                                  \
            ASM_GENERATE_INTERNAL_LABEL (label, "Lfe", labelno);        \
            ASM_OUTPUT_INTERNAL_LABEL (FILE, "Lfe", labelno);           \
-           fprintf (FILE, "\t%s\t ", SIZE_ASM_OP);                     \
+           fprintf (FILE, "%s", SIZE_ASM_OP);                          \
            assemble_name (FILE, (FNAME));                              \
            fprintf (FILE, ",%s-", &label[1]);                          \
            assemble_name (FILE, (FNAME));                              \
@@ -2033,7 +1905,7 @@ do {                                                                       \
    defined for reference from other files.  */
 #define ASM_GLOBALIZE_LABEL(FILE,NAME)                 \
   do {                                                 \
-    fprintf (FILE, "\t%s\t ", GLOBAL_ASM_OP);          \
+    fprintf (FILE, "%s", GLOBAL_ASM_OP);               \
     assemble_name (FILE, NAME);                                \
     putc ('\n', FILE);                                 \
   } while (0)
@@ -2060,7 +1932,7 @@ do {                                                                       \
 #undef ASM_OUTPUT_INTERNAL_LABEL
 #ifdef AS_BUG_DOT_LABELS /* The assembler requires a declaration of local.  */
 #define ASM_OUTPUT_INTERNAL_LABEL(FILE,PREFIX,NUM)                     \
-  fprintf (FILE, TARGET_SVR4 ? ".%s%d:\n\t%s\t .%s%d\n" : "@%s%d:\n", \
+  fprintf (FILE, TARGET_SVR4 ? ".%s%d:\n%s.%s%d\n" : "@%s%d:\n", \
           PREFIX, NUM, INTERNAL_ASM_OP, PREFIX, NUM)
 #else
 #define ASM_OUTPUT_INTERNAL_LABEL(FILE,PREFIX,NUM)                     \
@@ -2076,85 +1948,9 @@ do {                                                                      \
 
 #undef ASM_GENERATE_INTERNAL_LABEL
 #define ASM_GENERATE_INTERNAL_LABEL(LABEL,PREFIX,NUM)                  \
-  sprintf (LABEL, TARGET_SVR4 ? "*.%s%d" : "*@%s%d", PREFIX, NUM)
-
-/* Internal macro to get a single precision floating point value into
-   an int, so we can print it's value in hex.  */
-#define FLOAT_TO_INT_INTERNAL( FVALUE, IVALUE )                                \
-  { union {                                                            \
-      REAL_VALUE_TYPE d;                                               \
-      struct {                                                         \
-       unsigned sign      :  1;                                        \
-       unsigned exponent1 :  1;                                        \
-       unsigned exponent2 :  3;                                        \
-       unsigned exponent3 :  7;                                        \
-       unsigned mantissa1 : 20;                                        \
-       unsigned mantissa2 :  3;                                        \
-       unsigned mantissa3 : 29;                                        \
-      } s;                                                             \
-    } _u;                                                              \
-                                                                       \
-    union {                                                            \
-      int i;                                                           \
-      struct {                                                         \
-        unsigned sign      :  1;                                       \
-       unsigned exponent1 :  1;                                        \
-       unsigned exponent3 :  7;                                        \
-        unsigned mantissa1 : 20;                                       \
-        unsigned mantissa2 :  3;                                       \
-      } s;                                                             \
-    } _u2;                                                             \
-                                                                       \
-    _u.d = REAL_VALUE_TRUNCATE (SFmode, FVALUE);                       \
-    _u2.s.sign = _u.s.sign;                                            \
-    _u2.s.exponent1 = _u.s.exponent1;                                  \
-    _u2.s.exponent3 = _u.s.exponent3;                                  \
-    _u2.s.mantissa1 = _u.s.mantissa1;                                  \
-    _u2.s.mantissa2 = _u.s.mantissa2;                                  \
-    IVALUE = _u2.i;                                                    \
-  }
-
-/* This is how to output an assembler line defining a `double' constant.
-   Use "word" pseudos to avoid printing NaNs, infinity, etc.  */
-#define ASM_OUTPUT_DOUBLE(FILE,VALUE)                                  \
-  do {                                                                 \
-    union { REAL_VALUE_TYPE d; long l[2]; } x;                         \
-    x.d = (VALUE);                                                     \
-    fprintf (FILE, "\t%s\t 0x%.8x, 0x%.8x\n", INT_ASM_OP,                      \
-            x.l[0], x.l[1]);                                           \
-  } while (0)
-
-/* This is how to output an assembler line defining a `float' constant.  */
-#define ASM_OUTPUT_FLOAT(FILE,VALUE)                                   \
-  do {                                                                 \
-    int i;                                                             \
-    FLOAT_TO_INT_INTERNAL (VALUE, i);                                  \
-    fprintf (FILE, "\t%s\t 0x%.8x\n", INT_ASM_OP, i);                  \
-  } while (0)
-
-/* Likewise for `int', `short', and `char' constants.  */
-#define ASM_OUTPUT_INT(FILE,VALUE)                                     \
-( fprintf (FILE, "\t%s\t ", INT_ASM_OP),                               \
-  output_addr_const (FILE, (VALUE)),                                   \
-  fprintf (FILE, "\n"))
-
-#define ASM_OUTPUT_SHORT(FILE,VALUE)                                   \
-( fprintf (FILE, "\t%s\t ", SHORT_ASM_OP),                             \
-  output_addr_const (FILE, (VALUE)),                                   \
-  fprintf (FILE, "\n"))
-
-#define ASM_OUTPUT_CHAR(FILE,VALUE)                                    \
-( fprintf (FILE, "\t%s\t ", CHAR_ASM_OP),                              \
-  output_addr_const (FILE, (VALUE)),                                   \
-  fprintf (FILE, "\n"))
-
-/* This is how to output an assembler line for a numeric constant byte.  */
-#define ASM_OUTPUT_BYTE(FILE,VALUE)  \
-  fprintf (FILE, "\t%s\t 0x%x\n", CHAR_ASM_OP, (VALUE))
+  sprintf (LABEL, TARGET_SVR4 ? "*.%s%ld" : "*@%s%ld", PREFIX, (long)(NUM))
 
 /* The single-byte pseudo-op is the default.  Override svr[34].h.  */
-#undef ASM_BYTE_OP
-#define ASM_BYTE_OP "byte"
 #undef ASM_OUTPUT_ASCII
 #define ASM_OUTPUT_ASCII(FILE, P, SIZE)  \
   output_ascii (FILE, ASCII_DATA_ASM_OP, 48, P, SIZE)
@@ -2199,7 +1995,7 @@ do {                                                                       \
   } while (0)
 
 /* This is how to output an element of a case-vector that is relative.  */
-#define ASM_OUTPUT_ADDR_DIFF_ELT(FILE, VALUE, REL) \
+#define ASM_OUTPUT_ADDR_DIFF_ELT(FILE, BODY, VALUE, REL) \
   ASM_OUTPUT_ADDR_VEC_ELT (FILE, VALUE)
 
 /* This is how to output an assembler line
@@ -2207,7 +2003,7 @@ do {                                                                       \
    to a multiple of 2**LOG bytes.  */
 #define ASM_OUTPUT_ALIGN(FILE,LOG)     \
   if ((LOG) != 0)                      \
-    fprintf (FILE, "\t%s\t %d\n", ALIGN_ASM_OP, 1<<(LOG))
+    fprintf (FILE, "%s%d\n", ALIGN_ASM_OP, 1<<(LOG))
 
 /* On the m88100, align the text address to half a cache boundary when it
    can only be reached by jumping.  Pack code tightly when compiling
@@ -2218,7 +2014,7 @@ do {                                                                       \
 /* Override svr[34].h.  */
 #undef ASM_OUTPUT_SKIP
 #define ASM_OUTPUT_SKIP(FILE,SIZE)  \
-  fprintf (FILE, "\t%s\t %u\n", SKIP_ASM_OP, (SIZE))
+  fprintf (FILE, "%s%u\n", SKIP_ASM_OP, (SIZE))
 
 /* Override svr4.h.  */
 #undef ASM_OUTPUT_EXTERNAL_LIBCALL
@@ -2229,7 +2025,7 @@ do {                                                                       \
 #undef ASM_OUTPUT_COMMON
 #undef ASM_OUTPUT_ALIGNED_COMMON
 #define ASM_OUTPUT_COMMON(FILE, NAME, SIZE, ROUNDED)   \
-( fprintf ((FILE), "\t%s\t ",                          \
+( fprintf ((FILE), "%s",                               \
           ((SIZE) ? (SIZE) : 1) <= m88k_gp_threshold ? SCOMM_ASM_OP : COMMON_ASM_OP), \
   assemble_name ((FILE), (NAME)),                      \
   fprintf ((FILE), ",%u\n", (SIZE) ? (SIZE) : 1))
@@ -2239,7 +2035,7 @@ do {                                                                       \
 #undef ASM_OUTPUT_LOCAL
 #undef ASM_OUTPUT_ALIGNED_LOCAL
 #define ASM_OUTPUT_LOCAL(FILE, NAME, SIZE, ROUNDED)    \
-( fprintf ((FILE), "\t%s\t ",                          \
+( fprintf ((FILE), "%s",                               \
           ((SIZE) ? (SIZE) : 1) <= m88k_gp_threshold ? SBSS_ASM_OP : BSS_ASM_OP), \
   assemble_name ((FILE), (NAME)),                      \
   fprintf ((FILE), ",%u,%d\n", (SIZE) ? (SIZE) : 1, (SIZE) <= 4 ? 4 : 8))
@@ -2275,20 +2071,6 @@ do {                                                                      \
 
 /* Length in instructions of the code output by ASM_OUTPUT_REG_POP.  */
 #define REG_POP_LENGTH 2
-
-/* Define the parentheses used to group arithmetic operations
-   in assembler code.  */
-#define ASM_OPEN_PAREN "("
-#define ASM_CLOSE_PAREN ")"
-
-/* Define results of standard character escape sequences.  */
-#define TARGET_BELL 007
-#define TARGET_BS 010
-#define TARGET_TAB 011
-#define TARGET_NEWLINE 012
-#define TARGET_VT 013
-#define TARGET_FF 014
-#define TARGET_CR 015
 \f
 /* Macros to deal with OCS debug information */
 
@@ -2320,7 +2102,7 @@ do {                                                                       \
 #define PUT_SDB_SCL(a)                                         \
   do {                                                         \
     register int s = (a);                                      \
-    register char *scl;                                                \
+    register const char *scl;                                  \
     switch (s)                                                 \
       {                                                                \
       case C_EFCN:     scl = "end of function";        break;  \
@@ -2360,9 +2142,10 @@ do {                                                                      \
   do {                                                         \
     register int t = (a);                                      \
     static char buffer[100];                                   \
-    register char *p = buffer, *q;                             \
+    register char *p = buffer;                                 \
+    register const char *q;                                    \
     register int typ = t;                                      \
-    register int i,d;                                          \
+    register int i;                                            \
                                                                \
     for (i = 0; i <= 5; i++)                                   \
       {                                                                \
@@ -2498,35 +2281,24 @@ do {                                                                     \
    and so follows DECLARE_ASM_NAME.  Note that strings go in text
    rather than const.  Override svr[34].h.  */
 
-#undef USE_CONST_SECTION
 #undef EXTRA_SECTIONS
 
-#define USE_CONST_SECTION DECLARE_ASM_NAME
-
 #if defined(USING_SVR4_H)
 
-#define EXTRA_SECTIONS in_const, in_tdesc, in_sdata, in_ctors, in_dtors
+#define EXTRA_SECTIONS in_tdesc, in_sdata
 #define INIT_SECTION_FUNCTION
 #define FINI_SECTION_FUNCTION
 
 #else
 #if defined(USING_SVR3_H)
 
-#define EXTRA_SECTIONS in_const, in_tdesc, in_sdata, in_ctors, in_dtors, \
-                      in_init, in_fini
+#define EXTRA_SECTIONS in_tdesc, in_sdata, in_init, in_fini
 
 #else /* luna or other not based on svr[34].h.  */
 
+#undef READONLY_DATA_SECTION_ASM_OP
 #undef INIT_SECTION_ASM_OP
-#define EXTRA_SECTIONS in_const, in_tdesc, in_sdata
-#define CONST_SECTION_FUNCTION                                         \
-void                                                                   \
-const_section ()                                                       \
-{                                                                      \
-  text_section();                                                      \
-}
-#define CTORS_SECTION_FUNCTION
-#define DTORS_SECTION_FUNCTION
+#define EXTRA_SECTIONS in_tdesc, in_sdata
 #define INIT_SECTION_FUNCTION
 #define FINI_SECTION_FUNCTION
 
@@ -2535,8 +2307,6 @@ const_section ()                                                  \
 
 #undef EXTRA_SECTION_FUNCTIONS
 #define EXTRA_SECTION_FUNCTIONS                                                \
-  CONST_SECTION_FUNCTION                                               \
-                                                                       \
 void                                                                   \
 tdesc_section ()                                                       \
 {                                                                      \
@@ -2557,78 +2327,15 @@ sdata_section ()                                                        \
     }                                                                  \
 }                                                                      \
                                                                        \
-  CTORS_SECTION_FUNCTION                                               \
-  DTORS_SECTION_FUNCTION                                               \
   INIT_SECTION_FUNCTION                                                        \
   FINI_SECTION_FUNCTION
 
-/* A C statement or statements to switch to the appropriate
-   section for output of DECL.  DECL is either a `VAR_DECL' node
-   or a constant of some sort.  RELOC indicates whether forming
-   the initial value of DECL requires link-time relocations.
-
-   For strings, the section is selected before the segment info is encoded.  */
-#undef SELECT_SECTION
-#define SELECT_SECTION(DECL,RELOC)                                     \
-{                                                                      \
-  if (TREE_CODE (DECL) == STRING_CST)                                  \
-    {                                                                  \
-      if (! flag_writable_strings)                                     \
-       const_section ();                                               \
-      else if ( TREE_STRING_LENGTH (DECL) <= m88k_gp_threshold)                \
-       sdata_section ();                                               \
-      else                                                             \
-       data_section ();                                                \
-    }                                                                  \
-  else if (TREE_CODE (DECL) == VAR_DECL)                               \
-    {                                                                  \
-      if (SYMBOL_REF_FLAG (XEXP (DECL_RTL (DECL), 0)))                 \
-       sdata_section ();                                               \
-      else if ((flag_pic && RELOC)                                     \
-              || !TREE_READONLY (DECL) || TREE_SIDE_EFFECTS (DECL)     \
-              || !DECL_INITIAL (DECL)                                  \
-              || (DECL_INITIAL (DECL) != error_mark_node               \
-                  && !TREE_CONSTANT (DECL_INITIAL (DECL))))            \
-       data_section ();                                                \
-      else                                                             \
-       const_section ();                                               \
-    }                                                                  \
-  else                                                                 \
-    const_section ();                                                  \
-}
+#define TARGET_ASM_SELECT_SECTION  m88k_select_section
 
 /* Jump tables consist of branch instructions and should be output in
    the text section.  When we use a table of addresses, we explicitly
    change to the readonly data section.  */
 #define JUMP_TABLES_IN_TEXT_SECTION 1
-
-/* Define this macro if references to a symbol must be treated differently
-   depending on something about the variable or function named by the
-   symbol (such as what section it is in).
-
-   The macro definition, if any, is executed immediately after the rtl for
-   DECL has been created and stored in `DECL_RTL (DECL)'.  The value of the
-   rtl will be a `mem' whose address is a `symbol_ref'.
-
-   For the m88k, determine if the item should go in the global pool.  */
-#define ENCODE_SECTION_INFO(DECL)                                      \
-  do {                                                                 \
-    if (m88k_gp_threshold > 0)                                         \
-      if (TREE_CODE (DECL) == VAR_DECL)                                        \
-       {                                                               \
-         if (!TREE_READONLY (DECL) || TREE_SIDE_EFFECTS (DECL))        \
-           {                                                           \
-             int size = int_size_in_bytes (TREE_TYPE (DECL));          \
-                                                                       \
-             if (size > 0 && size <= m88k_gp_threshold)                \
-               SYMBOL_REF_FLAG (XEXP (DECL_RTL (DECL), 0)) = 1;        \
-           }                                                           \
-       }                                                               \
-      else if (TREE_CODE (DECL) == STRING_CST                          \
-              && flag_writable_strings                                 \
-              && TREE_STRING_LENGTH (DECL) <= m88k_gp_threshold)       \
-       SYMBOL_REF_FLAG (XEXP (TREE_CST_RTL (DECL), 0)) = 1;            \
-  } while (0)
 \f
 /* Print operand X (an rtx) in assembler syntax to file FILE.
    CODE is a letter or dot (`z' in `%z0') or 0 if no letter was specified.