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:
parent
5505f548bb
commit
e5778b1e84
6 changed files with 237 additions and 140 deletions
|
@ -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.
|
||||
|
|
108
gcc/config/m88k/m88k-protos.h
Normal file
108
gcc/config/m88k/m88k-protos.h
Normal 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 */
|
|
@ -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);
|
||||
|
|
|
@ -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.
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Add table
Reference in a new issue