diff options
Diffstat (limited to 'gcc/config/m88k')
-rw-r--r-- | gcc/config/m88k/dgux.h | 2 | ||||
-rw-r--r-- | gcc/config/m88k/m88k.c | 25 | ||||
-rw-r--r-- | gcc/config/m88k/m88k.h | 13 | ||||
-rw-r--r-- | gcc/config/m88k/m88k.md | 87 | ||||
-rw-r--r-- | gcc/config/m88k/sysv3.h | 6 | ||||
-rw-r--r-- | gcc/config/m88k/t-luna-gas | 2 | ||||
-rw-r--r-- | gcc/config/m88k/xm-sysv3.h | 6 |
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 |