Mercurial > hg > CbC > CbC_gcc
diff gcc/config/m68k/m68k.h @ 111:04ced10e8804
gcc 7
author | kono |
---|---|
date | Fri, 27 Oct 2017 22:46:09 +0900 |
parents | f6334be47118 |
children | 84e7813d76e9 |
line wrap: on
line diff
--- a/gcc/config/m68k/m68k.h Sun Aug 21 07:07:55 2011 +0900 +++ b/gcc/config/m68k/m68k.h Fri Oct 27 22:46:09 2017 +0900 @@ -1,7 +1,5 @@ /* Definitions of target machine for GCC for Motorola 680x0/ColdFire. - Copyright (C) 1987, 1988, 1993, 1994, 1995, 1996, 1997, 1998, 1999, - 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010 - Free Software Foundation, Inc. + Copyright (C) 1987-2017 Free Software Foundation, Inc. This file is part of GCC. @@ -24,18 +22,14 @@ for both the MOTOROLA and MIT code paths. We do rely on the host compiler to optimize away all constant tests. */ #if MOTOROLA /* Use the Motorola assembly syntax. */ -# define TARGET_VERSION fprintf (stderr, " (68k, Motorola syntax)") #else # define MOTOROLA 0 /* Use the MIT assembly syntax. */ -# define TARGET_VERSION fprintf (stderr, " (68k, MIT syntax)") #endif /* Handle --with-cpu default option from configure script. */ #define OPTION_DEFAULT_SPECS \ - { "cpu", "%{!mc68000:%{!m68000:%{!m68302:%{!m68010:%{!mc68020:%{!m68020:\ -%{!m68030:%{!m68040:%{!m68020-40:%{!m68020-60:%{!m68060:%{!mcpu32:\ -%{!m68332:%{!m5200:%{!m5206e:%{!m528x:%{!m5307:%{!m5407:%{!mcfv4e:\ -%{!mcpu=*:%{!march=*:-%(VALUE)}}}}}}}}}}}}}}}}}}}}}" }, + { "cpu", "%{!m68020-40:%{!m68020-60:\ +%{!mcpu=*:%{!march=*:-%(VALUE)}}}}" }, /* Pass flags to gas indicating which type of processor we have. This can be simplified when we can rely on the assembler supporting .cpu @@ -43,12 +37,11 @@ #define ASM_CPU_SPEC "\ %{m68851}%{mno-68851} %{m68881}%{mno-68881} %{msoft-float:-mno-float} \ -%{m68000}%{m68302}%{mc68000}%{m68010}%{m68020}%{mc68020}%{m68030}\ -%{m68040}%{m68020-40:-m68040}%{m68020-60:-m68040}\ -%{m68060}%{mcpu32}%{m68332}%{m5200}%{m5206e}%{m528x}%{m5307}%{m5407}%{mcfv4e}\ +%{m68020-40:-m68040}%{m68020-60:-m68040}\ %{mcpu=*:-mcpu=%*}%{march=*:-march=%*}\ " -#define ASM_PCREL_SPEC "%{fPIC|fpic|mpcrel:--pcrel} \ +#define ASM_PCREL_SPEC "%{" FPIE_OR_FPIC_SPEC ":--pcrel} \ + %{mpcrel:%{" NO_FPIE_AND_FPIC_SPEC ":--pcrel}} \ %{msep-data|mid-shared-library:--pcrel} \ " @@ -232,6 +225,7 @@ #define FL_ISA_B (1 << 15) #define FL_ISA_C (1 << 16) #define FL_FIDOA (1 << 17) +#define FL_CAS (1 << 18) /* Support cas insn. */ #define FL_MMU 0 /* Used by multilib machinery. */ #define FL_UCLINUX 0 /* Used by multilib machinery. */ @@ -242,6 +236,7 @@ #define TARGET_COLDFIRE_FPU (m68k_fpu == FPUTYPE_COLDFIRE) #define TARGET_68881 (m68k_fpu == FPUTYPE_68881) #define TARGET_FIDOA ((m68k_cpu_flags & FL_FIDOA) != 0) +#define TARGET_CAS ((m68k_cpu_flags & FL_CAS) != 0) /* Size (in bytes) of FPU registers. */ #define TARGET_FP_REG_SIZE (TARGET_COLDFIRE ? 8 : 12) @@ -253,6 +248,7 @@ /* Some instructions are common to more than one ISA. */ #define ISA_HAS_MVS_MVZ (TARGET_ISAB || TARGET_ISAC) #define ISA_HAS_FF1 (TARGET_ISAAPLUS || TARGET_ISAC) +#define ISA_HAS_TAS (!TARGET_COLDFIRE || TARGET_ISAB || TARGET_ISAC) #define TUNE_68000 (m68k_tune == u68000) #define TUNE_68010 (m68k_tune == u68010) @@ -285,19 +281,6 @@ #define LONG_DOUBLE_TYPE_SIZE \ ((TARGET_COLDFIRE || TARGET_FIDOA) ? 64 : 80) -/* We need to know the size of long double at compile-time in libgcc2. */ - -#if defined(__mcoldfire__) || defined(__mfido__) -#define LIBGCC2_LONG_DOUBLE_TYPE_SIZE 64 -#else -#define LIBGCC2_LONG_DOUBLE_TYPE_SIZE 80 -#endif - -/* Set the value of FLT_EVAL_METHOD in float.h. When using 68040 fp - instructions, we get proper intermediate rounding, otherwise we - get extended precision results. */ -#define TARGET_FLT_EVAL_METHOD ((TARGET_68040 || ! TARGET_68881) ? 0 : 2) - #define BITS_BIG_ENDIAN 1 #define BYTES_BIG_ENDIAN 1 #define WORDS_BIG_ENDIAN 1 @@ -398,32 +381,15 @@ } -/* On the m68k, ordinary registers hold 32 bits worth; - for the 68881 registers, a single register is always enough for - anything that can be stored in them at all. */ -#define HARD_REGNO_NREGS(REGNO, MODE) \ - ((REGNO) >= 16 ? GET_MODE_NUNITS (MODE) \ - : ((GET_MODE_SIZE (MODE) + UNITS_PER_WORD - 1) / UNITS_PER_WORD)) - /* A C expression that is nonzero if hard register NEW_REG can be considered for use as a rename register for OLD_REG register. */ #define HARD_REGNO_RENAME_OK(OLD_REG, NEW_REG) \ m68k_hard_regno_rename_ok (OLD_REG, NEW_REG) -#define HARD_REGNO_MODE_OK(REGNO, MODE) \ - m68k_regno_mode_ok ((REGNO), (MODE)) - #define SECONDARY_RELOAD_CLASS(CLASS, MODE, X) \ m68k_secondary_reload_class (CLASS, MODE, X) -#define MODES_TIEABLE_P(MODE1, MODE2) \ - (! TARGET_HARD_FLOAT \ - || ((GET_MODE_CLASS (MODE1) == MODE_FLOAT \ - || GET_MODE_CLASS (MODE1) == MODE_COMPLEX_FLOAT) \ - == (GET_MODE_CLASS (MODE2) == MODE_FLOAT \ - || GET_MODE_CLASS (MODE2) == MODE_COMPLEX_FLOAT))) - /* Specify the registers used for certain standard purposes. The values of these macros are register numbers. */ @@ -496,16 +462,11 @@ #define REGISTER_MOVE_COST(MODE, CLASS1, CLASS2) \ ((((CLASS1) == FP_REGS) != ((CLASS2) == FP_REGS)) ? 4 : 2) -#define IRA_COVER_CLASSES \ -{ \ - ALL_REGS, LIM_REG_CLASSES \ -} /* Stack layout; function entry, exit and calling. */ #define STACK_GROWS_DOWNWARD 1 #define FRAME_GROWS_DOWNWARD 1 -#define STARTING_FRAME_OFFSET 0 /* On the 680x0, sp@- in a byte insn really pushes a word. On the ColdFire, sp@- in a byte insn pushes just a byte. */ @@ -674,13 +635,7 @@ ((GET_CODE (X) == LABEL_REF || GET_CODE (X) == SYMBOL_REF \ || GET_CODE (X) == CONST_INT || GET_CODE (X) == CONST \ || GET_CODE (X) == HIGH) \ - && LEGITIMATE_CONSTANT_P (X)) - -/* Nonzero if the constant value X is a legitimate general operand. - It is given that X satisfies CONSTANT_P or is a CONST_DOUBLE. */ -#define LEGITIMATE_CONSTANT_P(X) \ - (GET_MODE (X) != XFmode \ - && !m68k_illegitimate_symbolic_constant_p (X)) + && m68k_legitimate_constant_p (Pmode, X)) #ifndef REG_OK_STRICT #define REG_STRICT_P 0 @@ -702,16 +657,14 @@ /* This address is OK as it stands. */ #define PIC_CASE_VECTOR_ADDRESS(index) index -#define CASE_VECTOR_MODE HImode +#define CASE_VECTOR_MODE (TARGET_LONG_JUMP_TABLE_OFFSETS ? SImode : HImode) #define CASE_VECTOR_PC_RELATIVE 1 #define DEFAULT_SIGNED_CHAR 1 #define MOVE_MAX 4 #define SLOW_BYTE_ACCESS 0 -#define TRULY_NOOP_TRUNCATION(OUTPREC, INPREC) 1 - -/* The ColdFire FF1 instruction returns 32 for zero. */ +/* The 68020 BFFFO and ColdFire FF1 instructions return 32 for zero. */ #define CLZ_DEFINED_VALUE_AT_ZERO(MODE, VALUE) ((VALUE) = 32, 1) #define STORE_FLAG_VALUE (-1) @@ -790,13 +743,14 @@ /* Before the prologue, RA is at 0(%sp). */ #define INCOMING_RETURN_ADDR_RTX \ - gen_rtx_MEM (VOIDmode, gen_rtx_REG (VOIDmode, STACK_POINTER_REGNUM)) + gen_rtx_MEM (Pmode, gen_rtx_REG (Pmode, STACK_POINTER_REGNUM)) /* After the prologue, RA is at 4(AP) in the current frame. */ #define RETURN_ADDR_RTX(COUNT, FRAME) \ ((COUNT) == 0 \ - ? gen_rtx_MEM (Pmode, plus_constant (arg_pointer_rtx, UNITS_PER_WORD)) \ - : gen_rtx_MEM (Pmode, plus_constant (FRAME, UNITS_PER_WORD))) + ? gen_rtx_MEM (Pmode, plus_constant (Pmode, arg_pointer_rtx, \ + UNITS_PER_WORD)) \ + : gen_rtx_MEM (Pmode, plus_constant (Pmode, FRAME, UNITS_PER_WORD))) /* We must not use the DBX register numbers for the DWARF 2 CFA column numbers because that maps to numbers beyond FIRST_PSEUDO_REGISTER. @@ -814,11 +768,7 @@ /* Before the prologue, the top of the frame is at 4(%sp). */ #define INCOMING_FRAME_SP_OFFSET 4 -/* All registers are live on exit from an interrupt routine. */ -#define EPILOGUE_USES(REGNO) \ - (reload_completed \ - && (m68k_get_function_kind (current_function_decl) \ - == m68k_fk_interrupt_handler)) +#define EPILOGUE_USES(REGNO) m68k_epilogue_uses (REGNO) /* Describe how we implement __builtin_eh_return. */ #define EH_RETURN_DATA_REGNO(N) \ @@ -827,7 +777,7 @@ #define EH_RETURN_HANDLER_RTX \ gen_rtx_MEM (Pmode, \ gen_rtx_PLUS (Pmode, arg_pointer_rtx, \ - plus_constant (EH_RETURN_STACKADJ_RTX, \ + plus_constant (Pmode, EH_RETURN_STACKADJ_RTX, \ UNITS_PER_WORD))) /* Select a format to encode pointers in exception handling data. CODE @@ -887,7 +837,11 @@ asm_fprintf (FILE, "\t.long %LL%d\n", VALUE) #define ASM_OUTPUT_ADDR_DIFF_ELT(FILE, BODY, VALUE, REL) \ - asm_fprintf (FILE, "\t.word %LL%d-%LL%d\n", VALUE, REL) + asm_fprintf (FILE, \ + TARGET_LONG_JUMP_TABLE_OFFSETS \ + ? "\t.long %LL%d-%LL%d\n" \ + : "\t.word %LL%d-%LL%d\n", \ + VALUE, REL) /* We don't have a way to align to more than a two-byte boundary, so do the best we can and don't complain. */ @@ -951,42 +905,7 @@ #define PRINT_OPERAND_ADDRESS(FILE, ADDR) print_operand_address (FILE, ADDR) -#define OUTPUT_ADDR_CONST_EXTRA(FILE, X, FAIL) \ -do { \ - if (! m68k_output_addr_const_extra (FILE, (X))) \ - goto FAIL; \ -} while (0); - -/* Values used in the MICROARCH argument to M68K_DEVICE. */ -enum uarch_type -{ - u68000, - u68010, - u68020, - u68020_40, - u68020_60, - u68030, - u68040, - u68060, - ucpu32, - ucfv1, - ucfv2, - ucfv3, - ucfv4, - ucfv4e, - ucfv5, - unk_arch -}; - -/* An enumeration of all supported target devices. */ -enum target_device -{ -#define M68K_DEVICE(NAME,ENUM_VALUE,FAMILY,MULTILIB,MICROARCH,ISA,FLAGS) \ - ENUM_VALUE, -#include "m68k-devices.def" -#undef M68K_DEVICE - unk_device -}; +#include "config/m68k/m68k-opts.h" enum fpu_type { @@ -1003,7 +922,6 @@ }; /* Variables in m68k.c; see there for details. */ -extern const char *m68k_library_id_string; extern enum target_device m68k_cpu; extern enum uarch_type m68k_tune; extern enum fpu_type m68k_fpu; @@ -1028,7 +946,7 @@ extern void m68k_emit_move_double (rtx [2]); -extern int m68k_sched_address_bypass_p (rtx, rtx); -extern int m68k_sched_indexed_address_bypass_p (rtx, rtx); +extern int m68k_sched_address_bypass_p (rtx_insn *, rtx_insn *); +extern int m68k_sched_indexed_address_bypass_p (rtx_insn *, rtx_insn *); #define CPU_UNITS_QUERY 1