Home | History | Annotate | Line # | Download | only in rs6000
rs6000-cpus.def revision 1.4
      1 /* IBM RS/6000 CPU names..
      2    Copyright (C) 1991-2016 Free Software Foundation, Inc.
      3    Contributed by Richard Kenner (kenner (at) vlsi1.ultra.nyu.edu)
      4 
      5    This file is part of GCC.
      6 
      7    GCC is free software; you can redistribute it and/or modify it
      8    under the terms of the GNU General Public License as published
      9    by the Free Software Foundation; either version 3, or (at your
     10    option) any later version.
     11 
     12    GCC is distributed in the hope that it will be useful, but WITHOUT
     13    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
     14    or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public
     15    License for more details.
     16 
     17    You should have received a copy of the GNU General Public License
     18    along with GCC; see the file COPYING3.  If not see
     19    <http://www.gnu.org/licenses/>.  */
     20 
     21 /* ISA masks.  */
     22 #ifndef ISA_2_1_MASKS
     23 #define ISA_2_1_MASKS		OPTION_MASK_MFCRF
     24 #define ISA_2_2_MASKS		(ISA_2_1_MASKS | OPTION_MASK_POPCNTB)
     25 #define ISA_2_4_MASKS		(ISA_2_2_MASKS | OPTION_MASK_FPRND)
     26 
     27   /* For ISA 2.05, do not add MFPGPR, since it isn't in ISA 2.06, and don't add
     28      ALTIVEC, since in general it isn't a win on power6.  In ISA 2.04, fsel,
     29      fre, fsqrt, etc. were no longer documented as optional.  Group masks by
     30      server and embedded. */
     31 #define ISA_2_5_MASKS_EMBEDDED	(ISA_2_4_MASKS				\
     32 				 | OPTION_MASK_CMPB			\
     33 				 | OPTION_MASK_RECIP_PRECISION		\
     34 				 | OPTION_MASK_PPC_GFXOPT		\
     35 				 | OPTION_MASK_PPC_GPOPT)
     36 
     37 #define ISA_2_5_MASKS_SERVER	(ISA_2_5_MASKS_EMBEDDED | OPTION_MASK_DFP)
     38 
     39   /* For ISA 2.06, don't add ISEL, since in general it isn't a win, but
     40      altivec is a win so enable it.  */
     41   /* OPTION_MASK_VSX_TIMODE should be set, but disable it for now until
     42      PR 58587 is fixed.  */
     43 #define ISA_2_6_MASKS_EMBEDDED	(ISA_2_5_MASKS_EMBEDDED | OPTION_MASK_POPCNTD)
     44 #define ISA_2_6_MASKS_SERVER	(ISA_2_5_MASKS_SERVER			\
     45 				 | OPTION_MASK_POPCNTD			\
     46 				 | OPTION_MASK_ALTIVEC			\
     47 				 | OPTION_MASK_VSX			\
     48 				 | OPTION_MASK_UPPER_REGS_DF)
     49 
     50 /* For now, don't provide an embedded version of ISA 2.07.  */
     51 #define ISA_2_7_MASKS_SERVER	(ISA_2_6_MASKS_SERVER			\
     52 				 | OPTION_MASK_P8_FUSION		\
     53 				 | OPTION_MASK_P8_VECTOR		\
     54 				 | OPTION_MASK_CRYPTO			\
     55 				 | OPTION_MASK_DIRECT_MOVE		\
     56 				 | OPTION_MASK_EFFICIENT_UNALIGNED_VSX	\
     57 				 | OPTION_MASK_HTM			\
     58 				 | OPTION_MASK_QUAD_MEMORY		\
     59   				 | OPTION_MASK_QUAD_MEMORY_ATOMIC	\
     60 				 | OPTION_MASK_UPPER_REGS_SF)
     61 
     62 /* Add ISEL back into ISA 3.0, since it is supposed to be a win.  Do not add
     63    P9_MINMAX until the hardware that supports it is available.  Do not add
     64    FLOAT128_HW here until we are ready to make -mfloat128 on by default.  */
     65 #define ISA_3_0_MASKS_SERVER	(ISA_2_7_MASKS_SERVER			\
     66 				 | OPTION_MASK_ISEL			\
     67 				 | OPTION_MASK_MODULO			\
     68 				 | OPTION_MASK_P9_FUSION		\
     69 				 | OPTION_MASK_P9_DFORM_SCALAR		\
     70 				 | OPTION_MASK_P9_DFORM_VECTOR		\
     71 				 | OPTION_MASK_P9_MISC			\
     72 				 | OPTION_MASK_P9_VECTOR)
     73 
     74 /* Support for the IEEE 128-bit floating point hardware requires a lot of the
     75    VSX instructions that are part of ISA 3.0.  */
     76 #define ISA_3_0_MASKS_IEEE	(OPTION_MASK_VSX			\
     77 				 | OPTION_MASK_P8_VECTOR		\
     78 				 | OPTION_MASK_P9_VECTOR		\
     79 				 | OPTION_MASK_DIRECT_MOVE		\
     80 				 | OPTION_MASK_UPPER_REGS_DF		\
     81 				 | OPTION_MASK_UPPER_REGS_SF)
     82 
     83 #define POWERPC_7400_MASK	(OPTION_MASK_PPC_GFXOPT | OPTION_MASK_ALTIVEC)
     84 
     85 /* Deal with ports that do not have -mstrict-align.  */
     86 #ifdef OPTION_MASK_STRICT_ALIGN
     87 #define OPTION_MASK_STRICT_ALIGN_OPTIONAL OPTION_MASK_STRICT_ALIGN
     88 #else
     89 #define OPTION_MASK_STRICT_ALIGN 0
     90 #define OPTION_MASK_STRICT_ALIGN_OPTIONAL 0
     91 #ifndef MASK_STRICT_ALIGN
     92 #define MASK_STRICT_ALIGN 0
     93 #endif
     94 #endif
     95 
     96 /* Mask of all options to set the default isa flags based on -mcpu=<xxx>.  */
     97 #define POWERPC_MASKS		(OPTION_MASK_ALTIVEC			\
     98 				 | OPTION_MASK_CMPB			\
     99 				 | OPTION_MASK_CRYPTO			\
    100 				 | OPTION_MASK_DFP			\
    101 				 | OPTION_MASK_DIRECT_MOVE		\
    102 				 | OPTION_MASK_DLMZB			\
    103 				 | OPTION_MASK_EFFICIENT_UNALIGNED_VSX	\
    104 				 | OPTION_MASK_FLOAT128			\
    105 				 | OPTION_MASK_FPRND			\
    106 				 | OPTION_MASK_HTM			\
    107 				 | OPTION_MASK_ISEL			\
    108 				 | OPTION_MASK_LRA			\
    109 				 | OPTION_MASK_MFCRF			\
    110 				 | OPTION_MASK_MFPGPR			\
    111 				 | OPTION_MASK_MODULO			\
    112 				 | OPTION_MASK_MULHW			\
    113 				 | OPTION_MASK_NO_UPDATE		\
    114 				 | OPTION_MASK_P8_FUSION		\
    115 				 | OPTION_MASK_P8_VECTOR		\
    116 				 | OPTION_MASK_P9_DFORM_SCALAR		\
    117 				 | OPTION_MASK_P9_DFORM_VECTOR		\
    118 				 | OPTION_MASK_P9_FUSION		\
    119 				 | OPTION_MASK_P9_MINMAX		\
    120 				 | OPTION_MASK_P9_MISC			\
    121 				 | OPTION_MASK_P9_VECTOR		\
    122 				 | OPTION_MASK_POPCNTB			\
    123 				 | OPTION_MASK_POPCNTD			\
    124 				 | OPTION_MASK_POWERPC64		\
    125 				 | OPTION_MASK_PPC_GFXOPT		\
    126 				 | OPTION_MASK_PPC_GPOPT		\
    127 				 | OPTION_MASK_QUAD_MEMORY		\
    128 				 | OPTION_MASK_QUAD_MEMORY_ATOMIC	\
    129 				 | OPTION_MASK_RECIP_PRECISION		\
    130 				 | OPTION_MASK_SOFT_FLOAT		\
    131 				 | OPTION_MASK_STRICT_ALIGN_OPTIONAL	\
    132 				 | OPTION_MASK_TOC_FUSION		\
    133 				 | OPTION_MASK_UPPER_REGS_DF		\
    134 				 | OPTION_MASK_UPPER_REGS_SF		\
    135 				 | OPTION_MASK_VSX			\
    136 				 | OPTION_MASK_VSX_TIMODE)
    137 
    138 #endif
    139 
    140 /* This table occasionally claims that a processor does not support a
    141    particular feature even though it does, but the feature is slower than the
    142    alternative.  Thus, it shouldn't be relied on as a complete description of
    143    the processor's support.
    144 
    145    Please keep this list in order, and don't forget to update the documentation
    146    in invoke.texi when adding a new processor or flag.
    147 
    148    Before including this file, define a macro:
    149 
    150    RS6000_CPU (NAME, CPU, FLAGS)
    151 
    152    where the arguments are the fields of struct rs6000_ptt.  */
    153 
    154 RS6000_CPU ("401", PROCESSOR_PPC403, MASK_SOFT_FLOAT)
    155 RS6000_CPU ("403", PROCESSOR_PPC403, MASK_SOFT_FLOAT | MASK_STRICT_ALIGN)
    156 RS6000_CPU ("405", PROCESSOR_PPC405, MASK_SOFT_FLOAT | MASK_MULHW | MASK_DLMZB)
    157 RS6000_CPU ("405fp", PROCESSOR_PPC405, MASK_MULHW | MASK_DLMZB)
    158 RS6000_CPU ("440", PROCESSOR_PPC440, MASK_SOFT_FLOAT | MASK_MULHW | MASK_DLMZB)
    159 RS6000_CPU ("440fp", PROCESSOR_PPC440, MASK_MULHW | MASK_DLMZB)
    160 RS6000_CPU ("464", PROCESSOR_PPC440, MASK_SOFT_FLOAT | MASK_MULHW | MASK_DLMZB)
    161 RS6000_CPU ("464fp", PROCESSOR_PPC440, MASK_MULHW | MASK_DLMZB)
    162 RS6000_CPU ("476", PROCESSOR_PPC476,
    163 	    MASK_SOFT_FLOAT | MASK_PPC_GFXOPT | MASK_MFCRF | MASK_POPCNTB
    164 	    | MASK_FPRND | MASK_CMPB | MASK_MULHW | MASK_DLMZB)
    165 RS6000_CPU ("476fp", PROCESSOR_PPC476,
    166 	    MASK_PPC_GFXOPT | MASK_MFCRF | MASK_POPCNTB | MASK_FPRND
    167 	    | MASK_CMPB | MASK_MULHW | MASK_DLMZB)
    168 RS6000_CPU ("505", PROCESSOR_MPCCORE, 0)
    169 RS6000_CPU ("601", PROCESSOR_PPC601, MASK_MULTIPLE | MASK_STRING)
    170 RS6000_CPU ("602", PROCESSOR_PPC603, MASK_PPC_GFXOPT)
    171 RS6000_CPU ("603", PROCESSOR_PPC603, MASK_PPC_GFXOPT)
    172 RS6000_CPU ("603e", PROCESSOR_PPC603, MASK_PPC_GFXOPT)
    173 RS6000_CPU ("604", PROCESSOR_PPC604, MASK_PPC_GFXOPT)
    174 RS6000_CPU ("604e", PROCESSOR_PPC604e, MASK_PPC_GFXOPT)
    175 RS6000_CPU ("620", PROCESSOR_PPC620, MASK_PPC_GFXOPT | MASK_POWERPC64)
    176 RS6000_CPU ("630", PROCESSOR_PPC630, MASK_PPC_GFXOPT | MASK_POWERPC64)
    177 RS6000_CPU ("740", PROCESSOR_PPC750, MASK_PPC_GFXOPT)
    178 RS6000_CPU ("7400", PROCESSOR_PPC7400, POWERPC_7400_MASK)
    179 RS6000_CPU ("7450", PROCESSOR_PPC7450, POWERPC_7400_MASK)
    180 RS6000_CPU ("750", PROCESSOR_PPC750, MASK_PPC_GFXOPT)
    181 RS6000_CPU ("801", PROCESSOR_MPCCORE, MASK_SOFT_FLOAT)
    182 RS6000_CPU ("821", PROCESSOR_MPCCORE, MASK_SOFT_FLOAT)
    183 RS6000_CPU ("823", PROCESSOR_MPCCORE, MASK_SOFT_FLOAT)
    184 RS6000_CPU ("8540", PROCESSOR_PPC8540, MASK_STRICT_ALIGN | MASK_ISEL)
    185 RS6000_CPU ("8548", PROCESSOR_PPC8548, MASK_STRICT_ALIGN | MASK_ISEL)
    186 RS6000_CPU ("a2", PROCESSOR_PPCA2,
    187 	    MASK_PPC_GFXOPT | MASK_POWERPC64 | MASK_POPCNTB | MASK_CMPB
    188 	    | MASK_NO_UPDATE)
    189 RS6000_CPU ("e300c2", PROCESSOR_PPCE300C2, MASK_SOFT_FLOAT)
    190 RS6000_CPU ("e300c3", PROCESSOR_PPCE300C3, 0)
    191 RS6000_CPU ("e500mc", PROCESSOR_PPCE500MC, MASK_PPC_GFXOPT | MASK_ISEL)
    192 RS6000_CPU ("e500mc64", PROCESSOR_PPCE500MC64,
    193 	    MASK_POWERPC64 | MASK_PPC_GFXOPT | MASK_ISEL)
    194 RS6000_CPU ("e5500", PROCESSOR_PPCE5500,
    195 	    MASK_POWERPC64 | MASK_PPC_GFXOPT | MASK_ISEL)
    196 RS6000_CPU ("e6500", PROCESSOR_PPCE6500, POWERPC_7400_MASK | MASK_POWERPC64
    197 	    | MASK_MFCRF | MASK_ISEL)
    198 RS6000_CPU ("860", PROCESSOR_MPCCORE, MASK_SOFT_FLOAT)
    199 RS6000_CPU ("970", PROCESSOR_POWER4,
    200 	    POWERPC_7400_MASK | MASK_PPC_GPOPT | MASK_MFCRF | MASK_POWERPC64)
    201 RS6000_CPU ("cell", PROCESSOR_CELL,
    202 	    POWERPC_7400_MASK  | MASK_PPC_GPOPT | MASK_MFCRF | MASK_POWERPC64)
    203 RS6000_CPU ("ec603e", PROCESSOR_PPC603, MASK_SOFT_FLOAT)
    204 RS6000_CPU ("G3", PROCESSOR_PPC750, MASK_PPC_GFXOPT)
    205 RS6000_CPU ("G4",  PROCESSOR_PPC7450, POWERPC_7400_MASK)
    206 RS6000_CPU ("G5", PROCESSOR_POWER4,
    207 	    POWERPC_7400_MASK | MASK_PPC_GPOPT | MASK_MFCRF | MASK_POWERPC64)
    208 RS6000_CPU ("titan", PROCESSOR_TITAN, MASK_MULHW | MASK_DLMZB)
    209 RS6000_CPU ("power3", PROCESSOR_PPC630, MASK_PPC_GFXOPT | MASK_POWERPC64)
    210 RS6000_CPU ("power4", PROCESSOR_POWER4, MASK_POWERPC64 | MASK_PPC_GPOPT
    211 	    | MASK_PPC_GFXOPT | MASK_MFCRF)
    212 RS6000_CPU ("power5", PROCESSOR_POWER5, MASK_POWERPC64 | MASK_PPC_GPOPT
    213 	    | MASK_PPC_GFXOPT | MASK_MFCRF | MASK_POPCNTB)
    214 RS6000_CPU ("power5+", PROCESSOR_POWER5, MASK_POWERPC64 | MASK_PPC_GPOPT
    215 	    | MASK_PPC_GFXOPT | MASK_MFCRF | MASK_POPCNTB | MASK_FPRND)
    216 RS6000_CPU ("power6", PROCESSOR_POWER6, MASK_POWERPC64 | MASK_PPC_GPOPT
    217 	    | MASK_PPC_GFXOPT | MASK_MFCRF | MASK_POPCNTB | MASK_FPRND
    218 	    | MASK_CMPB | MASK_DFP | MASK_RECIP_PRECISION)
    219 RS6000_CPU ("power6x", PROCESSOR_POWER6, MASK_POWERPC64 | MASK_PPC_GPOPT
    220 	    | MASK_PPC_GFXOPT | MASK_MFCRF | MASK_POPCNTB | MASK_FPRND
    221 	    | MASK_CMPB | MASK_DFP | MASK_MFPGPR | MASK_RECIP_PRECISION)
    222 RS6000_CPU ("power7", PROCESSOR_POWER7,   /* Don't add MASK_ISEL by default */
    223 	    POWERPC_7400_MASK | MASK_POWERPC64 | MASK_PPC_GPOPT | MASK_MFCRF
    224 	    | MASK_POPCNTB | MASK_FPRND | MASK_CMPB | MASK_DFP | MASK_POPCNTD
    225 	    | MASK_VSX | MASK_RECIP_PRECISION | OPTION_MASK_UPPER_REGS_DF)
    226 RS6000_CPU ("power8", PROCESSOR_POWER8, MASK_POWERPC64 | ISA_2_7_MASKS_SERVER)
    227 RS6000_CPU ("power9", PROCESSOR_POWER9, MASK_POWERPC64 | ISA_3_0_MASKS_SERVER)
    228 RS6000_CPU ("powerpc", PROCESSOR_POWERPC, 0)
    229 RS6000_CPU ("powerpc64", PROCESSOR_POWERPC64, MASK_PPC_GFXOPT | MASK_POWERPC64)
    230 RS6000_CPU ("powerpc64le", PROCESSOR_POWER8, MASK_POWERPC64 | ISA_2_7_MASKS_SERVER)
    231 RS6000_CPU ("rs64", PROCESSOR_RS64A, MASK_PPC_GFXOPT | MASK_POWERPC64)
    232