aboutsummaryrefslogtreecommitdiff
path: root/gcc/config/m88k
diff options
context:
space:
mode:
Diffstat (limited to 'gcc/config/m88k')
-rw-r--r--gcc/config/m88k/dgux.h2
-rw-r--r--gcc/config/m88k/m88k.c25
-rw-r--r--gcc/config/m88k/m88k.h13
-rw-r--r--gcc/config/m88k/m88k.md87
-rw-r--r--gcc/config/m88k/sysv3.h6
-rw-r--r--gcc/config/m88k/t-luna-gas2
-rw-r--r--gcc/config/m88k/xm-sysv3.h6
7 files changed, 63 insertions, 78 deletions
diff --git a/gcc/config/m88k/dgux.h b/gcc/config/m88k/dgux.h
index 3e4c66ea90c..f93672c99c9 100644
--- a/gcc/config/m88k/dgux.h
+++ b/gcc/config/m88k/dgux.h
@@ -30,7 +30,7 @@ Boston, MA 02111-1307, USA. */
(TARGET_SVR4 ? DWARF_DEBUG : SDB_DEBUG)
#ifndef VERSION_INFO2
-#define VERSION_INFO2 "$Revision: 1.3 $"
+#define VERSION_INFO2 "$Revision: 1.4 $"
#endif
#ifndef NO_BUGS
#define AS_BUG_IMMEDIATE_LABEL
diff --git a/gcc/config/m88k/m88k.c b/gcc/config/m88k/m88k.c
index b1250e5e61b..2814ccbbc64 100644
--- a/gcc/config/m88k/m88k.c
+++ b/gcc/config/m88k/m88k.c
@@ -1,5 +1,6 @@
/* Subroutines for insn-output.c for Motorola 88000.
- Copyright (C) 1988, 92, 93, 94, 95, 16, 1997 Free Software Foundation, Inc.
+ Copyright (C) 1988, 92, 93, 94, 95, 16, 1997, 1999 Free Software
+ Foundation, Inc.
Contributed by Michael Tiemann (tiemann@mcc.com)
Currently maintained by (gcc@dg-rtp.dg.com)
@@ -406,8 +407,7 @@ legitimize_address (pic, orig, reg, scratch)
{
new = gen_rtx (MEM, GET_MODE (orig), new);
RTX_UNCHANGING_P (new) = RTX_UNCHANGING_P (orig);
- MEM_VOLATILE_P (new) = MEM_VOLATILE_P (orig);
- MEM_IN_STRUCT_P (new) = MEM_IN_STRUCT_P (orig);
+ MEM_COPY_ATTRIBUTES (new, orig);
}
return new;
}
@@ -603,8 +603,7 @@ block_move_loop (dest, dest_mem, src, src_mem, size, align)
gen_rtx (REG, Pmode, 3),
offset_rtx));
RTX_UNCHANGING_P (value_rtx) = RTX_UNCHANGING_P (src_mem);
- MEM_VOLATILE_P (value_rtx) = MEM_VOLATILE_P (src_mem);
- MEM_IN_STRUCT_P (value_rtx) = MEM_IN_STRUCT_P (src_mem);
+ MEM_COPY_ATTRIBUTES (value_rtx, src_mem);
emit_insn (gen_call_movstrsi_loop
(gen_rtx (SYMBOL_REF, Pmode, IDENTIFIER_POINTER (entry_name)),
@@ -660,8 +659,7 @@ block_move_no_loop (dest, dest_mem, src, src_mem, size, align)
gen_rtx (REG, Pmode, 3),
offset_rtx));
RTX_UNCHANGING_P (value_rtx) = RTX_UNCHANGING_P (src_mem);
- MEM_VOLATILE_P (value_rtx) = MEM_VOLATILE_P (src_mem);
- MEM_IN_STRUCT_P (value_rtx) = MEM_IN_STRUCT_P (src_mem);
+ MEM_COPY_ATTRIBUTES (value_rtx, src_mem);
value_reg = ((((most - (size - remainder)) / align) & 1) == 0
? (align == 8 ? 6 : 5) : 4);
@@ -733,8 +731,7 @@ block_move_sequence (dest, dest_mem, src, src_mem, size, align, offset)
gen_rtx (PLUS, Pmode, src,
GEN_INT (offset_ld)));
RTX_UNCHANGING_P (srcp) = RTX_UNCHANGING_P (src_mem);
- MEM_VOLATILE_P (srcp) = MEM_VOLATILE_P (src_mem);
- MEM_IN_STRUCT_P (srcp) = MEM_IN_STRUCT_P (src_mem);
+ MEM_COPY_ATTRIBUTES (srcp, src_mem);
emit_insn (gen_rtx (SET, VOIDmode, temp[next], srcp));
offset_ld += amount[next];
active[next] = TRUE;
@@ -748,8 +745,7 @@ block_move_sequence (dest, dest_mem, src, src_mem, size, align, offset)
gen_rtx (PLUS, Pmode, dest,
GEN_INT (offset_st)));
RTX_UNCHANGING_P (dstp) = RTX_UNCHANGING_P (dest_mem);
- MEM_VOLATILE_P (dstp) = MEM_VOLATILE_P (dest_mem);
- MEM_IN_STRUCT_P (dstp) = MEM_IN_STRUCT_P (dest_mem);
+ MEM_COPY_ATTRIBUTES (dstp, dest_mem);
emit_insn (gen_rtx (SET, VOIDmode, dstp, temp[phase]));
offset_st += amount[phase];
}
@@ -1484,6 +1480,7 @@ struct options
char *string;
int *variable;
int on_value;
+ char *description;
};
static int
@@ -2610,7 +2607,7 @@ m88k_builtin_saveregs (arglist)
/* Allocate the va_list constructor */
block = assign_stack_local (BLKmode, 3 * UNITS_PER_WORD, BITS_PER_WORD);
- MEM_IN_STRUCT_P (block) = 1;
+ MEM_SET_IN_STRUCT_P (block, 1);
RTX_UNCHANGING_P (block) = 1;
RTX_UNCHANGING_P (XEXP (block, 0)) = 1;
@@ -2626,7 +2623,7 @@ m88k_builtin_saveregs (arglist)
/* Allocate the register space, and store it as the __va_reg member. */
addr = assign_stack_local (BLKmode, 8 * UNITS_PER_WORD, -1);
- MEM_IN_STRUCT_P (addr) = 1;
+ MEM_SET_IN_STRUCT_P (addr, 1);
RTX_UNCHANGING_P (addr) = 1;
RTX_UNCHANGING_P (XEXP (addr, 0)) = 1;
emit_move_insn (change_address (block, Pmode,
@@ -2644,7 +2641,7 @@ m88k_builtin_saveregs (arglist)
UNITS_PER_WORD * (8 - fixed));
}
- if (flag_check_memory_usage)
+ if (current_function_check_memory_usage)
{
emit_library_call (chkr_set_right_libfunc, 1, VOIDmode, 3,
block, ptr_mode,
diff --git a/gcc/config/m88k/m88k.h b/gcc/config/m88k/m88k.h
index 40230029e5b..5f3a4f58c55 100644
--- a/gcc/config/m88k/m88k.h
+++ b/gcc/config/m88k/m88k.h
@@ -198,13 +198,13 @@ extern char * reg_names[];
Redefined in sysv4.h, and luna.h. */
#define VERSION_INFO1 "m88k, "
#ifndef VERSION_INFO2
-#define VERSION_INFO2 "$Revision: 1.9 $"
+#define VERSION_INFO2 "$Revision: 1.12 $"
#endif
#ifndef VERSION_STRING
#define VERSION_STRING version_string
#ifdef __STDC__
-#define TM_RCS_ID "@(#)" __FILE__ " $Revision: 1.9 $ " __DATE__
+#define TM_RCS_ID "@(#)" __FILE__ " $Revision: 1.12 $ " __DATE__
#else
#define TM_RCS_ID "$What: <@(#) m88k.h,v 1.1.1.2.2.2> $"
#endif /* __STDC__ */
@@ -648,7 +648,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)
@@ -1260,11 +1259,11 @@ enum reg_class { NO_REGS, AP_REG, XRF_REGS, GENERAL_REGS, AGRF_REGS,
#define SELECT_CC_MODE(OP,X,Y) CCmode
-/* #define HAVE_POST_INCREMENT */
-/* #define HAVE_POST_DECREMENT */
+/* #define HAVE_POST_INCREMENT 0 */
+/* #define HAVE_POST_DECREMENT 0 */
-/* #define HAVE_PRE_DECREMENT */
-/* #define HAVE_PRE_INCREMENT */
+/* #define HAVE_PRE_DECREMENT 0 */
+/* #define HAVE_PRE_INCREMENT 0 */
/* Recognize any constant value that is a valid address.
When PIC, we do not accept an address that would require a scratch reg
diff --git a/gcc/config/m88k/m88k.md b/gcc/config/m88k/m88k.md
index 118ebe366da..edab3f706ae 100644
--- a/gcc/config/m88k/m88k.md
+++ b/gcc/config/m88k/m88k.md
@@ -1,5 +1,5 @@
;;- Machine description for the Motorola 88000 for GNU C compiler
-;;; Copyright (C) 1988, 92, 93, 94, 95, 1996 Free Software Foundation, Inc.
+;;; Copyright (C) 1988, 92-96, 1999 Free Software Foundation, Inc.
;; Contributed by Michael Tiemann (tiemann@mcc.com)
;; Currently maintained by (gcc@dg-rtp.dg.com)
@@ -759,7 +759,7 @@
(define_insn ""
[(set (match_operand:CCEVEN 0 "register_operand" "=r")
- (rotate:CC (match_operand 1 "partial_ccmode_register_operand" "r")
+ (rotate:CCEVEN (match_operand 1 "partial_ccmode_register_operand" "r")
(match_operand:CC 2 "int5_operand" "")))]
""
"rot %0,%1,%2"
@@ -782,7 +782,7 @@
(define_insn ""
[(set (match_operand:CCEVEN 0 "register_operand" "=r")
- (ior:CC (rotate:CC (match_operand 1 "partial_ccmode_register_operand" "r")
+ (ior:CCEVEN (rotate:CC (match_operand 1 "partial_ccmode_register_operand" "r")
(match_operand:CC 2 "int5_operand" ""))
(match_operand 3 "partial_ccmode_register_operand" "r")))
(clobber (match_scratch:CCEVEN 4 "=r"))]
@@ -2129,60 +2129,49 @@
DONE;
}")
+;; ??? We shouldn't be allowing such mode mismatches
(define_insn ""
- [(set (match_operand:QI 0 "register_operand" "=r")
- (match_operand:BLK 1 "memory_operand" "m"))]
- ""
- "%V1ld.bu\\t %0,%1"
- [(set_attr "type" "load")])
-
-(define_insn ""
- [(set (match_operand:HI 0 "register_operand" "=r")
+ [(set (match_operand 0 "register_operand" "=r")
(match_operand:BLK 1 "memory_operand" "m"))]
""
- "%V1ld.hu\\t %0,%1"
- [(set_attr "type" "load")])
-
-(define_insn ""
- [(set (match_operand:SI 0 "register_operand" "=r")
- (match_operand:BLK 1 "memory_operand" "m"))]
- ""
- "%V1ld\\t %0,%1"
+ "*
+{
+ switch (GET_MODE (operands[0]))
+ {
+ case QImode:
+ return \"%V1ld.bu\\t %0,%1\";
+ case HImode:
+ return \"%V1ld.hu\\t %0,%1\";
+ case SImode:
+ return \"%V1ld\\t %0,%1\";
+ case DImode:
+ return \"%V1ld.d\\t %0,%1\";
+ default:
+ abort ();
+ }
+}"
[(set_attr "type" "load")])
(define_insn ""
- [(set (match_operand:DI 0 "register_operand" "=r")
- (match_operand:BLK 1 "memory_operand" "m"))]
- ""
- "%V1ld.d\\t %0,%1"
- [(set_attr "type" "loadd")])
-
-(define_insn ""
- [(set (match_operand:BLK 0 "memory_operand" "=m")
- (match_operand:QI 1 "register_operand" "r"))]
- ""
- "%v0st.b\\t %1,%0"
- [(set_attr "type" "store")])
-
-(define_insn ""
[(set (match_operand:BLK 0 "memory_operand" "=m")
- (match_operand:HI 1 "register_operand" "r"))]
+ (match_operand 1 "register_operand" "r"))]
""
- "%v0st.h\\t %1,%0"
- [(set_attr "type" "store")])
-
-(define_insn ""
- [(set (match_operand:BLK 0 "memory_operand" "=m")
- (match_operand:SI 1 "register_operand" "r"))]
- ""
- "%v0st\\t %1,%0"
- [(set_attr "type" "store")])
-
-(define_insn ""
- [(set (match_operand:BLK 0 "memory_operand" "=m")
- (match_operand:DI 1 "register_operand" "r"))]
- ""
- "%v0st.d\\t %1,%0"
+ "*
+{
+ switch (GET_MODE (operands[1]))
+ {
+ case QImode:
+ return \"%v0st.b\\t %1,%0\";
+ case HImode:
+ return \"%v0st.h\\t %1,%0\";
+ case SImode:
+ return \"%v0st\\t %1,%0\";
+ case DImode:
+ return \"%v0st.d\\t %1,%0\";
+ default:
+ abort ();
+ }
+}"
[(set_attr "type" "store")])
;; Call a non-looping block move library function (e.g. __movstrSI96x64).
diff --git a/gcc/config/m88k/sysv3.h b/gcc/config/m88k/sysv3.h
index ef351897398..546b6dfc1a6 100644
--- a/gcc/config/m88k/sysv3.h
+++ b/gcc/config/m88k/sysv3.h
@@ -1,6 +1,6 @@
/* Definitions of target machine for GNU compiler.
Motorola m88100 running the AT&T/Unisoft/Motorola V.3 reference port.
- Copyright (C) 1990, 1991, 1997 Free Software Foundation, Inc.
+ Copyright (C) 1990, 1991, 1997, 1999 Free Software Foundation, Inc.
Contributed by Ray Essick (ressick@mot.com)
Enhanced by Tom Wood (Tom_Wood@NeXT.com)
@@ -44,6 +44,10 @@ Boston, MA 02111-1307, USA. */
#undef LIB_SPEC
#define LIB_SPEC "%{p:-L/lib/libp}%{pg:%{!p:-L/lib/libp}} -lg -lc crtend.o%s"
+/* We need POSIX/XOPEN symbols; otherwise building libio will fail. */
+#define ADD_MISSING_POSIX 1
+#define ADD_MISSING_XOPEN 1
+
/* Hot version of the profiler that uses r10 to pass the address of
the counter. the _gcc_mcount routine knows not to screw with
the parameter registers.
diff --git a/gcc/config/m88k/t-luna-gas b/gcc/config/m88k/t-luna-gas
index 1d6692ab4a0..780e75cec9f 100644
--- a/gcc/config/m88k/t-luna-gas
+++ b/gcc/config/m88k/t-luna-gas
@@ -5,7 +5,7 @@ MOVE_ASM = moveHI15x.asm moveQI16x.asm moveSI46x.asm moveSI64n.asm \
moveDI96x.asm
$(MOVE_ASM): $(srcdir)/config/m88k/m88k-move.sh
- bash $(srcdir)/config/m88k/m88k-move.sh -no-tdesc
+ $(SHELL) $(srcdir)/config/m88k/m88k-move.sh -no-tdesc
LIB2FUNCS_EXTRA = $(MOVE_ASM)
LIBGCC1 = libgcc1.null
diff --git a/gcc/config/m88k/xm-sysv3.h b/gcc/config/m88k/xm-sysv3.h
index 84110d7474d..a15fbbaaa54 100644
--- a/gcc/config/m88k/xm-sysv3.h
+++ b/gcc/config/m88k/xm-sysv3.h
@@ -1,6 +1,6 @@
/* Configuration for GNU C-compiler.
Motorola m88100 running the AT&T/Unisoft/Motorola V.3 reference port.
- Copyright (C) 1990, 1998 Free Software Foundation, Inc.
+ Copyright (C) 1990, 1998, 1999 Free Software Foundation, Inc.
This file is part of GNU CC.
@@ -26,7 +26,3 @@ Boston, MA 02111-1307, USA. */
/* for the emacs version of alloca */
#define STACK_DIRECTION -1
-
-/* We need POSIX/XOPEN symbols; otherwise make check will fail. */
-#define ADD_MISSING_POSIX 1
-#define ADD_MISSING_XOPEN 1