m88k-protos.h: New file.

* m88k-protos.h: New file.

        * m88k.c: Include tm_p.h.  Add static prototypes.  Fix compile
        time warnings.

        * m88k.h: Move prototypes to m88k-protos.h.  Fix compile time warnings.

        * m88k.md: Likewise.

        * tekXD88.h: Likewise.

From-SVN: r31359
This commit is contained in:
Kaveh R. Ghazi 2000-01-12 19:50:19 +00:00 committed by Kaveh Ghazi
parent 5505f548bb
commit e5778b1e84
6 changed files with 237 additions and 140 deletions

View file

@ -1,3 +1,16 @@
2000-01-12 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
* m88k-protos.h: New file.
* m88k.c: Include tm_p.h. Add static prototypes. Fix compile
time warnings.
* m88k.h: Move prototypes to m88k-protos.h. Fix compile time warnings.
* m88k.md: Likewise.
* tekXD88.h: Likewise.
2000-01-12 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
* m68k-protos.h: New file.

View file

@ -0,0 +1,108 @@
/* Definitions of target machine for GNU compiler for
Motorola m88100 in an 88open OCS/BCS environment.
Copyright (C) 2000 Free Software Foundation, Inc.
Contributed by Michael Tiemann (tiemann@cygnus.com).
Currently maintained by (gcc@dg-rtp.dg.com)
This file is part of GNU CC.
GNU CC is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2, or (at your option)
any later version.
GNU CC is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with GNU CC; see the file COPYING. If not, write to
the Free Software Foundation, 59 Temple Place - Suite 330,
Boston, MA 02111-1307, USA. */
#ifdef RTX_CODE
extern int m88k_debugger_offset PARAMS ((rtx, int));
extern void emit_bcnd PARAMS ((enum rtx_code, rtx));
extern void expand_block_move PARAMS ((rtx, rtx, rtx *));
extern void print_operand PARAMS ((FILE *, rtx, int));
extern void print_operand_address PARAMS ((FILE *, rtx));
extern const char *output_load_const_int PARAMS ((enum machine_mode, rtx *));
extern const char *output_load_const_float PARAMS ((rtx *));
extern const char *output_load_const_double PARAMS ((rtx *));
extern const char *output_load_const_dimode PARAMS ((rtx *));
extern const char *output_and PARAMS ((rtx[]));
extern const char *output_ior PARAMS ((rtx[]));
extern const char *output_xor PARAMS ((rtx[]));
extern const char *output_call PARAMS ((rtx[], rtx));
extern struct rtx_def *emit_test PARAMS ((enum rtx_code, enum machine_mode));
extern struct rtx_def *legitimize_address PARAMS ((int, rtx, rtx, rtx));
extern struct rtx_def *legitimize_operand PARAMS ((rtx, enum machine_mode));
extern int pic_address_needs_scratch PARAMS ((rtx));
extern int symbolic_address_p PARAMS ((rtx));
extern int condition_value PARAMS ((rtx));
extern int emit_move_sequence PARAMS ((rtx *, enum machine_mode, rtx));
extern int mostly_false_jump PARAMS ((rtx, rtx));
extern int real_power_of_2_operand PARAMS ((rtx, enum machine_mode));
extern int move_operand PARAMS ((rtx, enum machine_mode));
extern int call_address_operand PARAMS ((rtx, enum machine_mode));
extern int reg_or_0_operand PARAMS ((rtx, enum machine_mode));
extern int arith_operand PARAMS ((rtx, enum machine_mode));
extern int arith5_operand PARAMS ((rtx, enum machine_mode));
extern int arith32_operand PARAMS ((rtx, enum machine_mode));
extern int arith64_operand PARAMS ((rtx, enum machine_mode));
extern int int5_operand PARAMS ((rtx, enum machine_mode));
extern int int32_operand PARAMS ((rtx, enum machine_mode));
extern int add_operand PARAMS ((rtx, enum machine_mode));
extern int reg_or_bbx_mask_operand PARAMS ((rtx, enum machine_mode));
extern int real_or_0_operand PARAMS ((rtx, enum machine_mode));
extern int partial_ccmode_register_operand PARAMS ((rtx, enum machine_mode));
extern int relop PARAMS ((rtx, enum machine_mode));
extern int even_relop PARAMS ((rtx, enum machine_mode));
extern int odd_relop PARAMS ((rtx, enum machine_mode));
extern int relop_no_unsigned PARAMS ((rtx, enum machine_mode));
extern int equality_op PARAMS ((rtx, enum machine_mode));
extern int pc_or_label_ref PARAMS ((rtx, enum machine_mode));
extern int symbolic_operand PARAMS ((rtx, enum machine_mode));
#ifdef TREE_CODE
extern void m88k_va_start PARAMS ((int, tree, rtx));
#endif /* TREE_CODE */
#endif /* RTX_CODE */
#ifdef ANSI_PROTOTYPES
struct m88k_lang_independent_options;
#endif
extern void output_file_start PARAMS ((FILE *,
struct m88k_lang_independent_options *,
int,
struct m88k_lang_independent_options *,
int));
extern int null_prologue PARAMS ((void));
extern int integer_ok_for_set PARAMS ((unsigned));
extern void m88k_layout_frame PARAMS ((void));
extern void m88k_expand_prologue PARAMS ((void));
extern void m88k_begin_prologue PARAMS ((FILE *, int));
extern void m88k_end_prologue PARAMS ((FILE *));
extern void m88k_expand_epilogue PARAMS ((void));
extern void m88k_begin_epilogue PARAMS ((FILE *));
extern void m88k_end_epilogue PARAMS ((FILE *, int));
extern void output_function_profiler PARAMS ((FILE *, int, const char *, int));
extern void output_function_block_profiler PARAMS ((FILE *, int));
extern void output_block_profiler PARAMS ((FILE *, int));
extern void output_ascii PARAMS ((FILE *, const char *, int,
const unsigned char *, int));
extern void output_label PARAMS ((int));
extern struct rtx_def *m88k_builtin_saveregs PARAMS ((void));
extern enum m88k_instruction classify_integer PARAMS ((enum machine_mode, int));
extern int mak_mask_p PARAMS ((int));
#ifdef TREE_CODE
extern struct rtx_def *m88k_function_arg PARAMS ((CUMULATIVE_ARGS,
enum machine_mode, tree,
int));
extern struct rtx_def *m88k_va_arg PARAMS ((tree, tree));
extern tree m88k_build_va_list PARAMS ((void));
#endif /* TREE_CODE */

View file

@ -1,5 +1,5 @@
/* Subroutines for insn-output.c for Motorola 88000.
Copyright (C) 1988, 92, 93, 94, 95, 96, 1997, 1998, 1999 Free Software
Copyright (C) 1988, 92-99, 2000 Free Software
Foundation, Inc.
Contributed by Michael Tiemann (tiemann@mcc.com)
Currently maintained by (gcc@dg-rtp.dg.com)
@ -37,14 +37,17 @@ Boston, MA 02111-1307, USA. */
#include "c-tree.h"
#include "expr.h"
#include "flags.h"
#include "recog.h"
#include "toplev.h"
#include "tm_p.h"
extern char *version_string;
extern int flag_traditional;
extern FILE *asm_out_file;
char *m88k_pound_sign = ""; /* Either # for SVR4 or empty for SVR3 */
char *m88k_short_data;
char *m88k_version;
const char *m88k_pound_sign = ""; /* Either # for SVR4 or empty for SVR3 */
const char *m88k_short_data;
const char *m88k_version;
char m88k_volatile_code;
unsigned m88k_gp_threshold = 0;
@ -68,8 +71,6 @@ classify_integer (mode, value)
enum machine_mode mode;
register int value;
{
register int mask;
if (value == 0)
return m88k_zero;
else if (SMALL_INTVAL (value))
@ -120,12 +121,12 @@ integer_ok_for_set (value)
return (value && POWER_OF_2_or_0 (mask + 1));
}
char *
const char *
output_load_const_int (mode, operands)
enum machine_mode mode;
rtx *operands;
{
static char *patterns[] =
static const char *const patterns[] =
{ "or %0,%#r0,0",
"or %0,%#r0,%1",
"subu %0,%#r0,%n1",
@ -145,7 +146,7 @@ output_load_const_int (mode, operands)
/* These next two routines assume that floating point numbers are represented
in a manner which is consistent between host and target machines. */
char *
const char *
output_load_const_float (operands)
rtx *operands;
{
@ -156,7 +157,7 @@ output_load_const_float (operands)
return output_load_const_int (SImode, operands);
}
char *
const char *
output_load_const_double (operands)
rtx *operands;
{
@ -178,7 +179,7 @@ output_load_const_double (operands)
return output_load_const_int (SImode, operands);
}
char *
const char *
output_load_const_dimode (operands)
rtx *operands;
{
@ -340,7 +341,7 @@ legitimize_address (pic, orig, reg, scratch)
}
else if (GET_CODE (addr) == CONST)
{
rtx base, offset;
rtx base;
if (GET_CODE (XEXP (addr, 0)) == PLUS
&& XEXP (XEXP (addr, 0), 0) == pic_offset_table_rtx)
@ -466,17 +467,21 @@ static int max_from_align[] = {0, MOVSTR_QI, MOVSTR_HI, 0, MOVSTR_SI,
static int all_from_align[] = {0, MOVSTR_QI, MOVSTR_ODD_HI, 0, MOVSTR_ODD_SI,
0, 0, 0, MOVSTR_ODD_DI};
static int best_from_align[3][9] =
{0, MOVSTR_QI_LIMIT_88100, MOVSTR_HI_LIMIT_88100, 0, MOVSTR_SI_LIMIT_88100,
0, 0, 0, MOVSTR_DI_LIMIT_88100,
0, MOVSTR_QI_LIMIT_88110, MOVSTR_HI_LIMIT_88110, 0, MOVSTR_SI_LIMIT_88110,
0, 0, 0, MOVSTR_DI_LIMIT_88110,
0, MOVSTR_QI_LIMIT_88000, MOVSTR_HI_LIMIT_88000, 0, MOVSTR_SI_LIMIT_88000,
0, 0, 0, MOVSTR_DI_LIMIT_88000};
static int best_from_align[3][9] = {
{0, MOVSTR_QI_LIMIT_88100, MOVSTR_HI_LIMIT_88100, 0, MOVSTR_SI_LIMIT_88100,
0, 0, 0, MOVSTR_DI_LIMIT_88100},
{0, MOVSTR_QI_LIMIT_88110, MOVSTR_HI_LIMIT_88110, 0, MOVSTR_SI_LIMIT_88110,
0, 0, 0, MOVSTR_DI_LIMIT_88110},
{0, MOVSTR_QI_LIMIT_88000, MOVSTR_HI_LIMIT_88000, 0, MOVSTR_SI_LIMIT_88000,
0, 0, 0, MOVSTR_DI_LIMIT_88000}
};
static void block_move_loop ();
static void block_move_no_loop ();
static void block_move_sequence ();
static void block_move_loop PARAMS ((rtx, rtx, rtx, rtx, int, int));
static void block_move_no_loop PARAMS ((rtx, rtx, rtx, rtx, int, int));
static void block_move_sequence PARAMS ((rtx, rtx, rtx, rtx, int, int, int));
static void output_short_branch_defs PARAMS ((FILE *));
static int output_option PARAMS ((FILE *, const char *, const char *,
const char *, const char *, int, int));
/* Emit code to perform a block move. Choose the best method.
@ -751,7 +756,7 @@ block_move_sequence (dest, dest_mem, src, src_mem, size, align, offset)
/* Emit the code to do an AND operation. */
char *
const char *
output_and (operands)
rtx operands[];
{
@ -777,7 +782,7 @@ output_and (operands)
/* Emit the code to do an inclusive OR operation. */
char *
const char *
output_ior (operands)
rtx operands[];
{
@ -799,7 +804,7 @@ output_ior (operands)
/* Emit the instructions for doing an XOR. */
char *
const char *
output_xor (operands)
rtx operands[];
{
@ -831,7 +836,7 @@ static rtx sb_name = 0;
static rtx sb_high = 0;
static rtx sb_low = 0;
char *
const char *
output_call (operands, addr)
rtx operands[];
rtx addr;
@ -852,7 +857,7 @@ output_call (operands, addr)
if (GET_CODE (jump) == JUMP_INSN)
{
rtx low, high;
char *last;
const char *last;
rtx dest = XEXP (SET_SRC (PATTERN (jump)), 0);
int delta = 4 * (insn_addresses[INSN_UID (dest)]
- insn_addresses[INSN_UID (seq_insn)]
@ -1071,6 +1076,8 @@ mostly_false_jump (jump_insn, condition)
if (XEXP (condition, 1) == const0_rtx)
return 0;
break;
default:
break;
}
return 0;
@ -1082,7 +1089,7 @@ mostly_false_jump (jump_insn, condition)
int
real_power_of_2_operand (op, mode)
rtx op;
enum machine_mode mode;
enum machine_mode mode ATTRIBUTE_UNUSED;
{
union {
REAL_VALUE_TYPE d;
@ -1196,7 +1203,7 @@ move_operand (op, mode)
int
call_address_operand (op, mode)
rtx op;
enum machine_mode mode;
enum machine_mode mode ATTRIBUTE_UNUSED;
{
return (REG_P (op) || symbolic_address_p (op));
}
@ -1278,7 +1285,7 @@ arith64_operand (op, mode)
int
int5_operand (op, mode)
rtx op;
enum machine_mode mode;
enum machine_mode mode ATTRIBUTE_UNUSED;
{
return (GET_CODE (op) == CONST_INT && (unsigned) INTVAL (op) < 32);
}
@ -1286,7 +1293,7 @@ int5_operand (op, mode)
int
int32_operand (op, mode)
rtx op;
enum machine_mode mode;
enum machine_mode mode ATTRIBUTE_UNUSED;
{
return (GET_CODE (op) == CONST_INT);
}
@ -1353,7 +1360,7 @@ real_or_0_operand (op, mode)
int
partial_ccmode_register_operand (op, mode)
rtx op;
enum machine_mode mode;
enum machine_mode mode ATTRIBUTE_UNUSED;
{
return register_operand (op, CCmode) || register_operand (op, CCEVENmode);
}
@ -1363,7 +1370,7 @@ partial_ccmode_register_operand (op, mode)
int
relop (op, mode)
rtx op;
enum machine_mode mode;
enum machine_mode mode ATTRIBUTE_UNUSED;
{
switch (GET_CODE (op))
{
@ -1386,7 +1393,7 @@ relop (op, mode)
int
even_relop (op, mode)
rtx op;
enum machine_mode mode;
enum machine_mode mode ATTRIBUTE_UNUSED;
{
switch (GET_CODE (op))
{
@ -1404,7 +1411,7 @@ even_relop (op, mode)
int
odd_relop (op, mode)
rtx op;
enum machine_mode mode;
enum machine_mode mode ATTRIBUTE_UNUSED;
{
switch (GET_CODE (op))
{
@ -1425,7 +1432,7 @@ odd_relop (op, mode)
int
relop_no_unsigned (op, mode)
rtx op;
enum machine_mode mode;
enum machine_mode mode ATTRIBUTE_UNUSED;
{
switch (GET_CODE (op))
{
@ -1454,7 +1461,7 @@ relop_no_unsigned (op, mode)
int
equality_op (op, mode)
rtx op;
enum machine_mode mode;
enum machine_mode mode ATTRIBUTE_UNUSED;
{
return (GET_CODE (op) == EQ || GET_CODE (op) == NE);
}
@ -1464,32 +1471,40 @@ equality_op (op, mode)
int
pc_or_label_ref (op, mode)
rtx op;
enum machine_mode mode;
enum machine_mode mode ATTRIBUTE_UNUSED;
{
return (GET_CODE (op) == PC || GET_CODE (op) == LABEL_REF);
}
/* Output to FILE the start of the assembler file. */
struct options
/* This definition must match lang_independent_options from toplev.c. */
struct m88k_lang_independent_options
{
char *string;
const char *string;
int *variable;
int on_value;
char *description;
const char *description;
};
static void output_options PARAMS ((FILE *,
struct m88k_lang_independent_options *,
int,
struct m88k_lang_independent_options *,
int, int, int, const char *, const char *,
const char *));
static int
output_option (file, sep, type, name, indent, pos, max)
FILE *file;
char *sep;
char *type;
char *name;
char *indent;
const char *sep;
const char *type;
const char *name;
const char *indent;
int pos;
int max;
{
if (strlen (sep) + strlen (type) + strlen (name) + pos > max)
if ((long)(strlen (sep) + strlen (type) + strlen (name) + pos) > max)
{
fprintf (file, indent);
return fprintf (file, "%s%s", type, name);
@ -1497,19 +1512,20 @@ output_option (file, sep, type, name, indent, pos, max)
return pos + fprintf (file, "%s%s%s", sep, type, name);
}
static struct { char *name; int value; } m_options[] = TARGET_SWITCHES;
static struct { const char *name; int value; } m_options[] = TARGET_SWITCHES;
static void
output_options (file, f_options, f_len, W_options, W_len,
pos, max, sep, indent, term)
FILE *file;
struct options *f_options;
struct options *W_options;
struct m88k_lang_independent_options *f_options;
struct m88k_lang_independent_options *W_options;
int f_len, W_len;
int pos;
int max;
char *indent;
char *term;
const char *sep;
const char *indent;
const char *term;
{
register int j;
@ -1534,7 +1550,7 @@ output_options (file, f_options, f_len, W_options, W_len,
pos = output_option (file, sep, "-W", W_options[j].string,
indent, pos, max);
for (j = 0; j < sizeof m_options / sizeof m_options[0]; j++)
for (j = 0; j < (long) (sizeof m_options / sizeof m_options[0]); j++)
if (m_options[j].name[0] != '\0'
&& m_options[j].value > 0
&& ((m_options[j].value & target_flags)
@ -1552,8 +1568,8 @@ output_options (file, f_options, f_len, W_options, W_len,
void
output_file_start (file, f_options, f_len, W_options, W_len)
FILE *file;
struct options *f_options;
struct options *W_options;
struct m88k_lang_independent_options *f_options;
struct m88k_lang_independent_options *W_options;
int f_len, W_len;
{
register int pos;
@ -1595,9 +1611,9 @@ output_file_start (file, f_options, f_len, W_options, W_len)
void
output_ascii (file, opcode, max, p, size)
FILE *file;
char *opcode;
const char *opcode;
int max;
unsigned char *p;
const unsigned char *p;
int size;
{
int i;
@ -1741,10 +1757,11 @@ output_label (label_number)
variable space.
*/
static void emit_add ();
static void preserve_registers ();
static void emit_ldst ();
static void output_tdesc ();
static void emit_add PARAMS ((rtx, rtx, int));
static void preserve_registers PARAMS ((int, int));
static void emit_ldst PARAMS ((int, int, enum machine_mode, int));
static void output_tdesc PARAMS ((FILE *, int));
static int uses_arg_area_p PARAMS ((void));
static int nregs;
static int nxregs;
@ -1922,8 +1939,8 @@ uses_arg_area_p ()
void
m88k_begin_prologue (stream, size)
FILE *stream;
int size;
FILE *stream ATTRIBUTE_UNUSED;
int size ATTRIBUTE_UNUSED;
{
if (TARGET_OMIT_LEAF_FRAME_POINTER && ! quiet_flag && leaf_function_p ())
fprintf (stderr, "$");
@ -2022,7 +2039,7 @@ m88k_begin_epilogue (stream)
void
m88k_end_epilogue (stream, size)
FILE *stream;
int size;
int size ATTRIBUTE_UNUSED;
{
rtx insn = get_last_insn ();
@ -2341,9 +2358,9 @@ output_tdesc (file, offset)
ASM_GENERATE_INTERNAL_LABEL (buf, OCS_END_PREFIX, m88k_function_number);
fprintf (file, ",%s%s", buf+1, flag_pic ? "#rel" : "");
fprintf (file, ",0x%x,0x%x,0x%x,0x%x",
fprintf (file, ",0x%x,0x%x,0x%lx,0x%lx",
/* 8:1,17:0x%.3x,1:0,1:%d,5:%d */
(((xmask ? 3 : 1) << (17+1+1+5))
(int)(((xmask ? 3 : 1) << (17+1+1+5))
| (mask << (1+1+5))
| ((!!save_regs[1]) << 5)
| (frame_pointer_needed
@ -2353,7 +2370,7 @@ output_tdesc (file, offset)
return_address_info,
register_save_offset);
if (xmask)
fprintf (file, ",0x%x%04x", xmask, (0xffff & xregister_save_offset));
fprintf (file, ",0x%lx%04lx", xmask, (0xffff & xregister_save_offset));
fputc ('\n', file);
text_section ();
@ -2368,7 +2385,7 @@ void
output_function_profiler (file, labelno, name, savep)
FILE *file;
int labelno;
char *name;
const char *name;
int savep;
{
char label[256];
@ -2526,7 +2543,7 @@ m88k_function_arg (args_so_far, mode, type, named)
CUMULATIVE_ARGS args_so_far;
enum machine_mode mode;
tree type;
int named;
int named ATTRIBUTE_UNUSED;
{
int bytes, words;
@ -2655,7 +2672,7 @@ m88k_build_va_list ()
void
m88k_va_start (stdarg_p, valist, nextarg)
int stdarg_p;
int stdarg_p ATTRIBUTE_UNUSED;
tree valist;
rtx nextarg ATTRIBUTE_UNUSED;
{
@ -2840,7 +2857,7 @@ void
print_operand (file, x, code)
FILE *file;
rtx x;
char code;
int code;
{
enum rtx_code xc = (x ? GET_CODE (x) : UNKNOWN);
register int value = (xc == CONST_INT ? INTVAL (x) : 0);

View file

@ -1,6 +1,6 @@
/* Definitions of target machine for GNU compiler for
Motorola m88100 in an 88open OCS/BCS environment.
Copyright (C) 1988, 92-97, 1998 Free Software Foundation, Inc.
Copyright (C) 1988, 92-99, 2000 Free Software Foundation, Inc.
Contributed by Michael Tiemann (tiemann@cygnus.com).
Currently maintained by (gcc@dg-rtp.dg.com)
@ -93,9 +93,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,46 +111,6 @@ 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 */
@ -329,7 +289,7 @@ extern int flag_pic; /* -fpic */
\
if (m88k_short_data) \
{ \
char *p = m88k_short_data; \
const char *p = m88k_short_data; \
while (*p) \
if (*p >= '0' && *p <= '9') \
p++; \
@ -1076,17 +1036,14 @@ enum reg_class { NO_REGS, AP_REG, XRF_REGS, GENERAL_REGS, AGRF_REGS,
/* Define the `__builtin_va_list' type for the ABI. */
#define BUILD_VA_LIST_TYPE(VALIST) \
(VALIST) = m88k_build_va_list ()
extern union tree_node *m88k_build_va_list ();
/* Implement `va_start' for varargs and stdarg. */
#define EXPAND_BUILTIN_VA_START(stdarg, valist, nextarg) \
m88k_va_start (stdarg, valist, nextarg)
extern void m88k_va_start ();
/* Implement `va_arg'. */
#define EXPAND_BUILTIN_VA_ARG(valist, type) \
m88k_va_arg (valist, type)
extern struct rtx_def *m88k_va_arg ();
/* Generate the assembly code for function entry. */
#define FUNCTION_PROLOGUE(FILE, SIZE) m88k_begin_prologue(FILE, SIZE)
@ -1858,8 +1815,11 @@ extern struct rtx_def *m88k_va_arg ();
/* 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, \
sizeof f_options / sizeof f_options[0], \
(struct m88k_lang_independent_options *) W_options, \
sizeof W_options / sizeof W_options[0])
#undef ASM_FILE_END
@ -1898,7 +1858,7 @@ extern struct rtx_def *m88k_va_arg ();
#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 != '%'; \
@ -1929,7 +1889,7 @@ extern struct rtx_def *m88k_va_arg ();
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}
#define ADDITIONAL_REGISTER_NAMES {{"psr", 0}, {"cc", 0}}
/* How to renumber registers for dbx and gdb. */
#define DBX_REGISTER_NUMBER(REGNO) (REGNO)
@ -1985,7 +1945,7 @@ extern struct rtx_def *m88k_va_arg ();
#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 \
@ -2117,8 +2077,8 @@ do { \
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]); \
fprintf (FILE, "\t%s\t 0x%.8lx, 0x%.8lx\n", INT_ASM_OP, \
(long) x.l[0], (long) x.l[1]); \
} while (0)
/* This is how to output an assembler line defining a `float' constant. */
@ -2317,7 +2277,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; \
@ -2357,9 +2317,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++) \
{ \
@ -2611,6 +2572,7 @@ sdata_section () \
#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)) \
@ -2625,6 +2587,7 @@ sdata_section () \
&& flag_writable_strings \
&& TREE_STRING_LENGTH (DECL) <= m88k_gp_threshold) \
SYMBOL_REF_FLAG (XEXP (TREE_CST_RTL (DECL), 0)) = 1; \
} \
} while (0)
/* Print operand X (an rtx) in assembler syntax to file FILE.

View file

@ -1,5 +1,5 @@
;;- Machine description for the Motorola 88000 for GNU C compiler
;;; Copyright (C) 1988, 92-96, 1998, 1999 Free Software Foundation, Inc.
;; Copyright (C) 1988, 92-96, 98, 99, 2000 Free Software Foundation, Inc.
;; Contributed by Michael Tiemann (tiemann@mcc.com)
;; Currently maintained by (gcc@dg-rtp.dg.com)
@ -23,14 +23,6 @@
;;- See file "rtl.def" for documentation on define_insn, match_*, et. al.
;; RCS rev field. This is a NOP, just to get the RCS id into the
;; program image.
(define_expand "m88k_rcs_id"
[(match_operand:SI 0 "" "")]
""
"{ static char rcs_id[] = \"$What: <@(#) m88k.md,v 1.1.1.2.2.2> $\";
FAIL; }")
;; Attribute describing the processor. This attribute must match exactly
;; with the processor_type enumeration in m88k.h.
@ -3058,7 +3050,7 @@
"
{
operands[1] = legitimize_operand (operands[1], DFmode);
if (real_power_of_2_operand (operands[2]))
if (real_power_of_2_operand (operands[2], DFmode))
{
union real_extract u;
bcopy (&CONST_DOUBLE_LOW (operands[2]), &u, sizeof u);

View file

@ -1,6 +1,6 @@
/* Tektronix XD88 UTekV 3.2e (svr3 derived from UniSoft System V/88)
Copyright (C) 1993 Free Software Foundation, Inc.
Copyright (C) 1993, 2000 Free Software Foundation, Inc.
Contributed by Kaveh R. Ghazi (ghazi@caip.rutgers.edu) 2/22/93.
This file is part of GNU CC.
@ -36,8 +36,12 @@
/* I don't know if this SDB thing is needed or not --KRG */
/* Use T_ARG as T_VOID. T_VOID is not defined in <syms.h> as it should be. */
/* Use T_ARG as T_VOID. T_VOID is not defined in <syms.h> as it
should be. If we're cross compiling, then don't do this because
"gsyms.h" has T_VOID. */
#ifndef CROSS_COMPILE
#define T_VOID T_ARG
#endif
/* The bundled ld program needs link editor directives which normally