;;
(define_insn_reservation "x_int" 1
- (and (eq_attr "cpu" "z990,z9_109")
+ (and (eq_attr "cpu" "z990,z9_109,z9_ec")
(and (eq_attr "type" "integer")
(eq_attr "atype" "reg")))
"x-e1-st,x-wr-st")
(define_insn_reservation "x_agen" 1
- (and (eq_attr "cpu" "z990,z9_109")
+ (and (eq_attr "cpu" "z990,z9_109,z9_ec")
(and (eq_attr "type" "integer")
(eq_attr "atype" "agen")))
"x-e1-st,x-wr-st")
(define_insn_reservation "x_lr" 1
- (and (eq_attr "cpu" "z990,z9_109")
+ (and (eq_attr "cpu" "z990,z9_109,z9_ec")
(eq_attr "type" "lr"))
"x-e1-st,x-wr-st")
(define_insn_reservation "x_la" 1
- (and (eq_attr "cpu" "z990,z9_109")
+ (and (eq_attr "cpu" "z990,z9_109,z9_ec")
(eq_attr "type" "la"))
"x-e1-st,x-wr-st")
(define_insn_reservation "x_larl" 1
- (and (eq_attr "cpu" "z990,z9_109")
+ (and (eq_attr "cpu" "z990,z9_109,z9_ec")
(eq_attr "type" "larl"))
"x-e1-st,x-wr-st")
(define_insn_reservation "x_load" 1
- (and (eq_attr "cpu" "z990,z9_109")
+ (and (eq_attr "cpu" "z990,z9_109,z9_ec")
(eq_attr "type" "load"))
"x-e1-st+x-mem,x-wr-st")
(define_insn_reservation "x_store" 1
- (and (eq_attr "cpu" "z990,z9_109")
+ (and (eq_attr "cpu" "z990,z9_109,z9_ec")
(eq_attr "type" "store"))
"x-e1-st+x_store_tok,x-wr-st")
(define_insn_reservation "x_branch" 1
- (and (eq_attr "cpu" "z990,z9_109")
+ (and (eq_attr "cpu" "z990,z9_109,z9_ec")
(eq_attr "type" "branch"))
"x_e1_r,x_wr_r")
(define_insn_reservation "x_call" 5
- (and (eq_attr "cpu" "z990,z9_109")
+ (and (eq_attr "cpu" "z990,z9_109,z9_ec")
(eq_attr "type" "jsr"))
"x-e1-np*5,x-wr-np")
(define_insn_reservation "x_mul_hi" 2
- (and (eq_attr "cpu" "z990,z9_109")
+ (and (eq_attr "cpu" "z990,z9_109,z9_ec")
(eq_attr "type" "imulhi"))
"x-e1-np*2,x-wr-np")
(define_insn_reservation "x_mul_sidi" 4
- (and (eq_attr "cpu" "z990,z9_109")
+ (and (eq_attr "cpu" "z990,z9_109,z9_ec")
(eq_attr "type" "imulsi,imuldi"))
"x-e1-np*4,x-wr-np")
(define_insn_reservation "x_div" 10
- (and (eq_attr "cpu" "z990,z9_109")
+ (and (eq_attr "cpu" "z990,z9_109,z9_ec")
(eq_attr "type" "idiv"))
"x-e1-np*10,x-wr-np")
(define_insn_reservation "x_sem" 17
- (and (eq_attr "cpu" "z990,z9_109")
+ (and (eq_attr "cpu" "z990,z9_109,z9_ec")
(eq_attr "type" "sem"))
"x-e1-np+x-mem,x-e1-np*16,x-wr-st")
;;
(define_insn_reservation "x_cs" 1
- (and (eq_attr "cpu" "z990,z9_109")
+ (and (eq_attr "cpu" "z990,z9_109,z9_ec")
(eq_attr "type" "cs"))
"x-e1-np,x-wr-np")
(define_insn_reservation "x_vs" 1
- (and (eq_attr "cpu" "z990,z9_109")
+ (and (eq_attr "cpu" "z990,z9_109,z9_ec")
(eq_attr "type" "vs"))
"x-e1-np*10,x-wr-np")
(define_insn_reservation "x_stm" 1
- (and (eq_attr "cpu" "z990,z9_109")
+ (and (eq_attr "cpu" "z990,z9_109,z9_ec")
(eq_attr "type" "stm"))
"(x-e1-np+x_store_tok)*10,x-wr-np")
(define_insn_reservation "x_lm" 1
- (and (eq_attr "cpu" "z990,z9_109")
+ (and (eq_attr "cpu" "z990,z9_109,z9_ec")
(eq_attr "type" "lm"))
"x-e1-np*10,x-wr-np")
(define_insn_reservation "x_other" 1
- (and (eq_attr "cpu" "z990,z9_109")
+ (and (eq_attr "cpu" "z990,z9_109,z9_ec")
(eq_attr "type" "other"))
"x-e1-np,x-wr-np")
;;
(define_insn_reservation "x_fsimptf" 7
- (and (eq_attr "cpu" "z990,z9_109")
+ (and (eq_attr "cpu" "z990,z9_109,z9_ec")
(eq_attr "type" "fsimptf,fhex"))
"x_e1_t*2,x-wr-fp")
(define_insn_reservation "x_fsimpdf" 6
- (and (eq_attr "cpu" "z990,z9_109")
+ (and (eq_attr "cpu" "z990,z9_109,z9_ec")
(eq_attr "type" "fsimpdf,fmuldf,fmadddf,fhex"))
"x_e1_t,x-wr-fp")
(define_insn_reservation "x_fsimpsf" 6
- (and (eq_attr "cpu" "z990,z9_109")
+ (and (eq_attr "cpu" "z990,z9_109,z9_ec")
(eq_attr "type" "fsimpsf,fmulsf,fmaddsf,fhex"))
"x_e1_t,x-wr-fp")
(define_insn_reservation "x_fmultf" 33
- (and (eq_attr "cpu" "z990,z9_109")
+ (and (eq_attr "cpu" "z990,z9_109,z9_ec")
(eq_attr "type" "fmultf"))
"x_e1_t*27,x-wr-fp")
(define_insn_reservation "x_fdivtf" 82
- (and (eq_attr "cpu" "z990,z9_109")
+ (and (eq_attr "cpu" "z990,z9_109,z9_ec")
(eq_attr "type" "fdivtf,fsqrttf"))
"x_e1_t*76,x-wr-fp")
(define_insn_reservation "x_fdivdf" 36
- (and (eq_attr "cpu" "z990,z9_109")
+ (and (eq_attr "cpu" "z990,z9_109,z9_ec")
(eq_attr "type" "fdivdf,fsqrtdf"))
"x_e1_t*30,x-wr-fp")
(define_insn_reservation "x_fdivsf" 36
- (and (eq_attr "cpu" "z990,z9_109")
+ (and (eq_attr "cpu" "z990,z9_109,z9_ec")
(eq_attr "type" "fdivsf,fsqrtsf"))
"x_e1_t*30,x-wr-fp")
(define_insn_reservation "x_floadtf" 6
- (and (eq_attr "cpu" "z990,z9_109")
+ (and (eq_attr "cpu" "z990,z9_109,z9_ec")
(eq_attr "type" "floadtf"))
"x_e1_t,x-wr-fp")
(define_insn_reservation "x_floaddf" 6
- (and (eq_attr "cpu" "z990,z9_109")
+ (and (eq_attr "cpu" "z990,z9_109,z9_ec")
(eq_attr "type" "floaddf"))
"x_e1_t,x-wr-fp")
(define_insn_reservation "x_floadsf" 6
- (and (eq_attr "cpu" "z990,z9_109")
+ (and (eq_attr "cpu" "z990,z9_109,z9_ec")
(eq_attr "type" "floadsf"))
"x_e1_t,x-wr-fp")
(define_insn_reservation "x_fstoredf" 1
- (and (eq_attr "cpu" "z990,z9_109")
+ (and (eq_attr "cpu" "z990,z9_109,z9_ec")
(eq_attr "type" "fstoredf"))
"x_e1_t,x-wr-fp")
(define_insn_reservation "x_fstoresf" 1
- (and (eq_attr "cpu" "z990,z9_109")
+ (and (eq_attr "cpu" "z990,z9_109,z9_ec")
(eq_attr "type" "fstoresf"))
"x_e1_t,x-wr-fp")
(define_insn_reservation "x_ftrunctf" 16
- (and (eq_attr "cpu" "z990,z9_109")
+ (and (eq_attr "cpu" "z990,z9_109,z9_ec")
(eq_attr "type" "ftrunctf"))
"x_e1_t*10,x-wr-fp")
(define_insn_reservation "x_ftruncdf" 11
- (and (eq_attr "cpu" "z990,z9_109")
+ (and (eq_attr "cpu" "z990,z9_109,z9_ec")
(eq_attr "type" "ftruncdf"))
"x_e1_t*5,x-wr-fp")
(define_insn_reservation "x_ftoi" 1
- (and (eq_attr "cpu" "z990,z9_109")
+ (and (eq_attr "cpu" "z990,z9_109,z9_ec")
(eq_attr "type" "ftoi"))
"x_e1_t*3,x-wr-fp")
(define_insn_reservation "x_itof" 7
- (and (eq_attr "cpu" "z990,z9_109")
+ (and (eq_attr "cpu" "z990,z9_109,z9_ec")
(eq_attr "type" "itoftf,itofdf,itofsf"))
"x_e1_t*3,x-wr-fp")
#include "cfgloop.h"
#include "opts.h"
+static const int processor_flags_table[] =
+ {
+ /* g5 */ PF_IEEE_FLOAT,
+ /* g6 */ PF_IEEE_FLOAT,
+ /* z900 */ PF_IEEE_FLOAT | PF_ZARCH,
+ /* z990 */ PF_IEEE_FLOAT | PF_ZARCH | PF_LONG_DISPLACEMENT,
+ /* z9-109 */ PF_IEEE_FLOAT | PF_ZARCH | PF_LONG_DISPLACEMENT
+ | PF_EXTIMM,
+ /* z9-ec */ PF_IEEE_FLOAT | PF_ZARCH | PF_LONG_DISPLACEMENT
+ | PF_EXTIMM | PF_DFP,
+ /* z10 */ PF_IEEE_FLOAT | PF_ZARCH | PF_LONG_DISPLACEMENT
+ | PF_EXTIMM | PF_DFP | PF_Z10,
+ /* z196 */ PF_IEEE_FLOAT | PF_ZARCH | PF_LONG_DISPLACEMENT
+ | PF_EXTIMM | PF_DFP | PF_Z10 | PF_Z196
+ };
/* Define the specific costs for a given cpu. */
opts->x_flag_asynchronous_unwind_tables = 1;
}
-/* Set *TYPE and *FLAGS to the associated processor_type and
- processor_flags for processor ARCH. */
-
-static void
-s390_handle_arch_option (enum s390_arch_option arch,
- enum processor_type *type,
- int *flags)
-{
- /* This must match enum s390_arch_option in s390-opts.h. */
- static struct pta
- {
- const enum processor_type processor;
- const int flags; /* From enum processor_flags. */
- }
- const processor_alias_table[] =
- {
- {PROCESSOR_9672_G5, PF_IEEE_FLOAT},
- {PROCESSOR_9672_G6, PF_IEEE_FLOAT},
- {PROCESSOR_2064_Z900, PF_IEEE_FLOAT | PF_ZARCH},
- {PROCESSOR_2084_Z990, PF_IEEE_FLOAT | PF_ZARCH
- | PF_LONG_DISPLACEMENT},
- {PROCESSOR_2094_Z9_109, PF_IEEE_FLOAT | PF_ZARCH
- | PF_LONG_DISPLACEMENT | PF_EXTIMM},
- {PROCESSOR_2094_Z9_109, PF_IEEE_FLOAT | PF_ZARCH
- | PF_LONG_DISPLACEMENT | PF_EXTIMM | PF_DFP },
- {PROCESSOR_2097_Z10, PF_IEEE_FLOAT | PF_ZARCH
- | PF_LONG_DISPLACEMENT | PF_EXTIMM | PF_DFP | PF_Z10},
- {PROCESSOR_2817_Z196, PF_IEEE_FLOAT | PF_ZARCH
- | PF_LONG_DISPLACEMENT | PF_EXTIMM | PF_DFP | PF_Z10 | PF_Z196 },
- };
-
- *type = processor_alias_table[(int) arch].processor;
- *flags = processor_alias_table[(int) arch].flags;
-}
-
/* Implement TARGET_HANDLE_OPTION. */
static bool
s390_handle_option (struct gcc_options *opts,
struct gcc_options *opts_set ATTRIBUTE_UNUSED,
- const struct cl_decoded_option *decoded,
+ const struct cl_decoded_option *decoded,
location_t loc)
{
size_t code = decoded->opt_index;
switch (code)
{
case OPT_march_:
- s390_handle_arch_option ((enum s390_arch_option) value,
- &opts->x_s390_arch,
- &opts->x_s390_arch_flags);
+ opts->x_s390_arch_flags = processor_flags_table[value];
opts->x_s390_arch_string = arg;
return true;
return true;
case OPT_mtune_:
- s390_handle_arch_option ((enum s390_arch_option) value,
- &opts->x_s390_tune,
- &opts->x_s390_tune_flags);
+ opts->x_s390_tune_flags = processor_flags_table[value];
return true;
case OPT_mwarn_framesize_:
target_flags &= ~MASK_ZARCH;
}
- /* Determine processor architectural level. */
- if (!s390_arch_string)
+ /* Set the march default in case it hasn't been specified on
+ cmdline. */
+ if (s390_arch == PROCESSOR_max)
{
s390_arch_string = TARGET_ZARCH? "z900" : "g5";
- s390_handle_arch_option ((TARGET_ZARCH ? s390_arch_z900 : s390_arch_g5),
- &s390_arch, &s390_arch_flags);
+ s390_arch = TARGET_ZARCH ? PROCESSOR_2064_Z900 : PROCESSOR_9672_G5;
+ s390_arch_flags = processor_flags_table[(int)s390_arch];
}
- /* This check is triggered when the user specified a wrong -march=
- string and prevents subsequent error messages from being
- issued. */
- if (s390_arch == PROCESSOR_max)
- return;
-
/* Determine processor to tune for. */
if (s390_tune == PROCESSOR_max)
{
not match the test under mask pattern. */
if (stack_guard >= s390_stack_size)
{
- warning (0, "frame size of function %qs is "
- HOST_WIDE_INT_PRINT_DEC
+ warning (0, "frame size of function %qs is %wd"
" bytes which is more than half the stack size. "
"The dynamic check would not be reliable. "
"No check emitted for this function.",
if (s390_warn_framesize > 0
&& cfun_frame_layout.frame_size >= s390_warn_framesize)
- warning (0, "frame size of %qs is " HOST_WIDE_INT_PRINT_DEC " bytes",
+ warning (0, "frame size of %qs is %wd bytes",
current_function_name (), cfun_frame_layout.frame_size);
if (s390_warn_dynamicstack_p && cfun->calls_alloca)