Source-Changes-HG archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

[src/trunk]: src/external/gpl3/gcc/dist/gcc/config/rs6000 merge our changes i...



details:   https://anonhg.NetBSD.org/src/rev/42e106a04c8a
branches:  trunk
changeset: 378394:42e106a04c8a
user:      mrg <mrg%NetBSD.org@localhost>
date:      Mon Apr 12 07:23:06 2021 +0000

description:
merge our changes into GCC 10.  parts of the rs6000.c file were
split into separate files, and an old change to rs6000.c now
belongs in rs6000-logue.c.

diffstat:

 external/gpl3/gcc/dist/gcc/config/rs6000/rs6000-logue.c |      6 +-
 external/gpl3/gcc/dist/gcc/config/rs6000/rs6000.c       |  17360 +------------
 2 files changed, 2259 insertions(+), 15107 deletions(-)

diffs (truncated from 19158 to 300 lines):

diff -r eca6ea91b376 -r 42e106a04c8a external/gpl3/gcc/dist/gcc/config/rs6000/rs6000-logue.c
--- a/external/gpl3/gcc/dist/gcc/config/rs6000/rs6000-logue.c   Mon Apr 12 06:08:30 2021 +0000
+++ b/external/gpl3/gcc/dist/gcc/config/rs6000/rs6000-logue.c   Mon Apr 12 07:23:06 2021 +0000
@@ -2249,7 +2249,8 @@ rs6000_savres_routine_name (int regno, i
     }
   else if (DEFAULT_ABI == ABI_AIX || DEFAULT_ABI == ABI_ELFv2)
     {
-#if !defined (POWERPC_LINUX) && !defined (POWERPC_FREEBSD)
+#if !defined (POWERPC_LINUX) && !defined (POWERPC_FREEBSD) \
+    && !defined(POWERPC_NETBSD)
       /* No out-of-line save/restore routines for GPRs on AIX.  */
       gcc_assert (!TARGET_AIX || (sel & SAVRES_REG) != SAVRES_GPR);
 #endif
@@ -2261,7 +2262,8 @@ rs6000_savres_routine_name (int regno, i
                  : ((sel & SAVRES_LR) ? "_restgpr0_" : "_restgpr1_"));
       else if ((sel & SAVRES_REG) == SAVRES_FPR)
        {
-#if defined (POWERPC_LINUX) || defined (POWERPC_FREEBSD)
+#if defined (POWERPC_LINUX) || defined (POWERPC_FREEBSD) \
+    || defined(POWERPC_NETBSD)
          if ((sel & SAVRES_LR))
            prefix = ((sel & SAVRES_SAVE) ? "_savefpr_" : "_restfpr_");
          else
diff -r eca6ea91b376 -r 42e106a04c8a external/gpl3/gcc/dist/gcc/config/rs6000/rs6000.c
--- a/external/gpl3/gcc/dist/gcc/config/rs6000/rs6000.c Mon Apr 12 06:08:30 2021 +0000
+++ b/external/gpl3/gcc/dist/gcc/config/rs6000/rs6000.c Mon Apr 12 07:23:06 2021 +0000
@@ -1,5 +1,5 @@
 /* Subroutines used for code generation on IBM RS/6000.
-   Copyright (C) 1991-2019 Free Software Foundation, Inc.
+   Copyright (C) 1991-2020 Free Software Foundation, Inc.
    Contributed by Richard Kenner (kenner%vlsi1.ultra.nyu.edu@localhost)
 
    This file is part of GCC.
@@ -52,7 +52,6 @@
 #include "explow.h"
 #include "expr.h"
 #include "output.h"
-#include "dbxout.h"
 #include "common/common-target.h"
 #include "langhooks.h"
 #include "reload.h"
@@ -63,7 +62,6 @@
 #include "gimple-ssa.h"
 #include "gimple-walk.h"
 #include "intl.h"
-#include "params.h"
 #include "tm-constrs.h"
 #include "tree-vectorizer.h"
 #include "target-globals.h"
@@ -75,22 +73,17 @@
 #if TARGET_XCOFF
 #include "xcoffout.h"  /* get declarations of xcoff_*_section_name */
 #endif
-#if TARGET_MACHO
-#include "gstab.h"  /* for N_SLINE */
-#endif
 #include "case-cfn-macros.h"
 #include "ppc-auxv.h"
 #include "tree-ssa-propagate.h"
 #include "tree-vrp.h"
 #include "tree-ssanames.h"
+#include "rs6000-internal.h"
+#include "opts.h"
 
 /* This file should be included last.  */
 #include "target-def.h"
 
-#ifndef TARGET_NO_PROTOTYPE
-#define TARGET_NO_PROTOTYPE 0
-#endif
-
   /* Set -mabi=ieeelongdouble on some old targets.  In the future, power server
      systems will also set long double to be IEEE 128-bit.  AIX and Darwin
      explicitly redefine TARGET_IEEEQUAD and TARGET_IEEEQUAD_DEFAULT to 0, so
@@ -98,93 +91,20 @@
      of the include files, so that POWERPC_LINUX and POWERPC_FREEBSD are
      properly defined.  */
 #ifndef TARGET_IEEEQUAD_DEFAULT
-#if !defined (POWERPC_LINUX) && !defined (POWERPC_FREEBSD)
+#if !defined (POWERPC_LINUX) && !defined (POWERPC_FREEBSD) && !defined(POWERPC_NETBSD)
 #define TARGET_IEEEQUAD_DEFAULT 1
 #else
 #define TARGET_IEEEQUAD_DEFAULT 0
 #endif
 #endif
 
-static pad_direction rs6000_function_arg_padding (machine_mode, const_tree);
-
-/* Structure used to define the rs6000 stack */
-typedef struct rs6000_stack {
-  int reload_completed;                /* stack info won't change from here on */
-  int first_gp_reg_save;       /* first callee saved GP register used */
-  int first_fp_reg_save;       /* first callee saved FP register used */
-  int first_altivec_reg_save;  /* first callee saved AltiVec register used */
-  int lr_save_p;               /* true if the link reg needs to be saved */
-  int cr_save_p;               /* true if the CR reg needs to be saved */
-  unsigned int vrsave_mask;    /* mask of vec registers to save */
-  int push_p;                  /* true if we need to allocate stack space */
-  int calls_p;                 /* true if the function makes any calls */
-  int world_save_p;            /* true if we're saving *everything*:
-                                  r13-r31, cr, f14-f31, vrsave, v20-v31  */
-  enum rs6000_abi abi;         /* which ABI to use */
-  int gp_save_offset;          /* offset to save GP regs from initial SP */
-  int fp_save_offset;          /* offset to save FP regs from initial SP */
-  int altivec_save_offset;     /* offset to save AltiVec regs from initial SP */
-  int lr_save_offset;          /* offset to save LR from initial SP */
-  int cr_save_offset;          /* offset to save CR from initial SP */
-  int vrsave_save_offset;      /* offset to save VRSAVE from initial SP */
-  int varargs_save_offset;     /* offset to save the varargs registers */
-  int ehrd_offset;             /* offset to EH return data */
-  int ehcr_offset;             /* offset to EH CR field data */
-  int reg_size;                        /* register size (4 or 8) */
-  HOST_WIDE_INT vars_size;     /* variable save area size */
-  int parm_size;               /* outgoing parameter size */
-  int save_size;               /* save area size */
-  int fixed_size;              /* fixed size of stack frame */
-  int gp_size;                 /* size of saved GP registers */
-  int fp_size;                 /* size of saved FP registers */
-  int altivec_size;            /* size of saved AltiVec registers */
-  int cr_size;                 /* size to hold CR if not in fixed area */
-  int vrsave_size;             /* size to hold VRSAVE */
-  int altivec_padding_size;    /* size of altivec alignment padding */
-  HOST_WIDE_INT total_size;    /* total bytes allocated for stack */
-  int savres_strategy;
-} rs6000_stack_t;
-
-/* A C structure for machine-specific, per-function data.
-   This is added to the cfun structure.  */
-typedef struct GTY(()) machine_function
-{
-  /* Flags if __builtin_return_address (n) with n >= 1 was used.  */
-  int ra_needs_full_frame;
-  /* Flags if __builtin_return_address (0) was used.  */
-  int ra_need_lr;
-  /* Cache lr_save_p after expansion of builtin_eh_return.  */
-  int lr_save_state;
-  /* Whether we need to save the TOC to the reserved stack location in the
-     function prologue.  */
-  bool save_toc_in_prologue;
-  /* Offset from virtual_stack_vars_rtx to the start of the ABI_V4
-     varargs save area.  */
-  HOST_WIDE_INT varargs_save_offset;
-  /* Alternative internal arg pointer for -fsplit-stack.  */
-  rtx split_stack_arg_pointer;
-  bool split_stack_argp_used;
-  /* Flag if r2 setup is needed with ELFv2 ABI.  */
-  bool r2_setup_needed;
-  /* The number of components we use for separate shrink-wrapping.  */
-  int n_components;
-  /* The components already handled by separate shrink-wrapping, which should
-     not be considered by the prologue and epilogue.  */
-  bool gpr_is_wrapped_separately[32];
-  bool fpr_is_wrapped_separately[32];
-  bool lr_is_wrapped_separately;
-  bool toc_is_wrapped_separately;
-} machine_function;
+/* Don't enable PC-relative addressing if the target does not support it.  */
+#ifndef PCREL_SUPPORTED_BY_OS
+#define PCREL_SUPPORTED_BY_OS  0
+#endif
 
 /* Support targetm.vectorize.builtin_mask_for_load.  */
-static GTY(()) tree altivec_builtin_mask_for_load;
-
-/* Set to nonzero once AIX common-mode calls have been defined.  */
-static GTY(()) int common_mode_defined;
-
-/* Label number of label created for -mrelocatable, to call to so we can
-   get the address of the GOT section */
-static int rs6000_pic_labelno;
+tree altivec_builtin_mask_for_load;
 
 #ifdef USING_ELFOS_H
 /* Counter for labels which are to be placed in .fixup.  */
@@ -205,7 +125,7 @@ scalar_int_mode rs6000_pmode;
    floating point.  We changed the default C++ mangling for these types and we
    may want to generate a weak alias of the old mangling (U10__float128) to the
    new mangling (u9__ieee128).  */
-static bool rs6000_passes_ieee128;
+bool rs6000_passes_ieee128 = false;
 #endif
 
 /* Generate the manged name (i.e. U10__float128) used in GCC 8.1, and not the
@@ -224,12 +144,12 @@ unsigned rs6000_pointer_size;
    Tag_GNU_Power_ABI_FP .gnu.attributes value this flag controls
    should be set for soft-float values passed in gprs and ieee128
    values passed in vsx registers.  */
-static bool rs6000_passes_float;
-static bool rs6000_passes_long_double;
+bool rs6000_passes_float = false;
+bool rs6000_passes_long_double = false;
 /* Flag whether vector values have been passed/returned.  */
-static bool rs6000_passes_vector;
+bool rs6000_passes_vector = false;
 /* Flag whether small (<= 8 byte) structures have been returned.  */
-static bool rs6000_returns_struct;
+bool rs6000_returns_struct = false;
 #endif
 
 /* Value is TRUE if register/mode pair is acceptable.  */
@@ -265,15 +185,8 @@ static GTY(()) section *tls_data_section
 static GTY(()) section *tls_private_data_section;
 static GTY(()) section *read_only_private_data_section;
 static GTY(()) section *sdata2_section;
-static GTY(()) section *toc_section;
-
-struct builtin_description
-{
-  const HOST_WIDE_INT mask;
-  const enum insn_code icode;
-  const char *const name;
-  const enum rs6000_builtins code;
-};
+
+section *toc_section = 0;
 
 /* Describe the vector unit used for modes.  */
 enum rs6000_vector rs6000_vector_unit[NUM_MACHINE_MODES];
@@ -287,7 +200,7 @@ enum reg_class rs6000_constraints[RS6000
 int rs6000_vector_align[NUM_MACHINE_MODES];
 
 /* Map selected modes to types for builtins.  */
-static GTY(()) tree builtin_mode_to_type[MAX_MACHINE_MODE][2];
+tree builtin_mode_to_type[MAX_MACHINE_MODE][2];
 
 /* What modes to automatically generate reciprocal divide estimate (fre) and
    reciprocal sqrt (frsqrte) for.  */
@@ -337,82 +250,6 @@ static struct
   { "rsqrtd",   (RECIP_DF_RSQRT | RECIP_V2DF_RSQRT) },
 };
 
-/* Used by __builtin_cpu_is(), mapping from PLATFORM names to values.  */
-static const struct
-{
-  const char *cpu;
-  unsigned int cpuid;
-} cpu_is_info[] = {
-  { "power9",     PPC_PLATFORM_POWER9 },
-  { "power8",     PPC_PLATFORM_POWER8 },
-  { "power7",     PPC_PLATFORM_POWER7 },
-  { "power6x",    PPC_PLATFORM_POWER6X },
-  { "power6",     PPC_PLATFORM_POWER6 },
-  { "power5+",    PPC_PLATFORM_POWER5_PLUS },
-  { "power5",     PPC_PLATFORM_POWER5 },
-  { "ppc970",     PPC_PLATFORM_PPC970 },
-  { "power4",     PPC_PLATFORM_POWER4 },
-  { "ppca2",      PPC_PLATFORM_PPCA2 },
-  { "ppc476",     PPC_PLATFORM_PPC476 },
-  { "ppc464",     PPC_PLATFORM_PPC464 },
-  { "ppc440",     PPC_PLATFORM_PPC440 },
-  { "ppc405",     PPC_PLATFORM_PPC405 },
-  { "ppc-cell-be", PPC_PLATFORM_CELL_BE }
-};
-
-/* Used by __builtin_cpu_supports(), mapping from HWCAP names to masks.  */
-static const struct
-{
-  const char *hwcap;
-  int mask;
-  unsigned int id;
-} cpu_supports_info[] = {
-  /* AT_HWCAP masks.  */
-  { "4xxmac",          PPC_FEATURE_HAS_4xxMAC,         0 },
-  { "altivec",         PPC_FEATURE_HAS_ALTIVEC,        0 },
-  { "arch_2_05",       PPC_FEATURE_ARCH_2_05,          0 },
-  { "arch_2_06",       PPC_FEATURE_ARCH_2_06,          0 },
-  { "archpmu",         PPC_FEATURE_PERFMON_COMPAT,     0 },
-  { "booke",           PPC_FEATURE_BOOKE,              0 },
-  { "cellbe",          PPC_FEATURE_CELL_BE,            0 },
-  { "dfp",             PPC_FEATURE_HAS_DFP,            0 },
-  { "efpdouble",       PPC_FEATURE_HAS_EFP_DOUBLE,     0 },
-  { "efpsingle",       PPC_FEATURE_HAS_EFP_SINGLE,     0 },
-  { "fpu",             PPC_FEATURE_HAS_FPU,            0 },
-  { "ic_snoop",                PPC_FEATURE_ICACHE_SNOOP,       0 },
-  { "mmu",             PPC_FEATURE_HAS_MMU,            0 },
-  { "notb",            PPC_FEATURE_NO_TB,              0 },
-  { "pa6t",            PPC_FEATURE_PA6T,               0 },
-  { "power4",          PPC_FEATURE_POWER4,             0 },
-  { "power5",          PPC_FEATURE_POWER5,             0 },
-  { "power5+",         PPC_FEATURE_POWER5_PLUS,        0 },
-  { "power6x",         PPC_FEATURE_POWER6_EXT,         0 },
-  { "ppc32",           PPC_FEATURE_32,                 0 },
-  { "ppc601",          PPC_FEATURE_601_INSTR,          0 },
-  { "ppc64",           PPC_FEATURE_64,                 0 },
-  { "ppcle",           PPC_FEATURE_PPC_LE,             0 },
-  { "smt",             PPC_FEATURE_SMT,                0 },
-  { "spe",             PPC_FEATURE_HAS_SPE,            0 },
-  { "true_le",         PPC_FEATURE_TRUE_LE,            0 },
-  { "ucache",          PPC_FEATURE_UNIFIED_CACHE,      0 },
-  { "vsx",             PPC_FEATURE_HAS_VSX,            0 },
-
-  /* AT_HWCAP2 masks.  */
-  { "arch_2_07",       PPC_FEATURE2_ARCH_2_07,         1 },
-  { "dscr",            PPC_FEATURE2_HAS_DSCR,          1 },
-  { "ebb",             PPC_FEATURE2_HAS_EBB,           1 },
-  { "htm",             PPC_FEATURE2_HAS_HTM,           1 },
-  { "htm-nosc",                PPC_FEATURE2_HTM_NOSC,          1 },
-  { "htm-no-suspend",  PPC_FEATURE2_HTM_NO_SUSPEND,    1 },
-  { "isel",            PPC_FEATURE2_HAS_ISEL,          1 },
-  { "tar",             PPC_FEATURE2_HAS_TAR,           1 },



Home | Main Index | Thread Index | Old Index