Commit 93538e8e by Andreas Krebbel Committed by Andreas Krebbel

s390.c (z10_cost): New cost function for z10.

2008-05-28  Andreas Krebbel  <krebbel1@de.ibm.com>

	* config/s390/s390.c (z10_cost): New cost function for z10.
	(s390_handle_arch_option, override_options): Support
	-march=z10 switch.
	(s390_issue_rate): Adjust issue rate for z10.
	* config/s390/s390.h (processor_type): Add PROCESSOR_2097_Z10.
	(processor_flags): Add PF_Z10.
	(TARGET_CPU_Z10, TARGET_Z10): New macro definitions.
	* config/s390/s390.md (cpu, cpu_facility attributes): Add z10.
	* gcc/config.gcc: Add z10.

From-SVN: r136097
parent 540f6bda
2008-05-28 Andreas Krebbel <krebbel1@de.ibm.com>
* config/s390/s390.c (z10_cost): New cost function for z10.
(s390_handle_arch_option, override_options): Support
-march=z10 switch.
(s390_issue_rate): Adjust issue rate for z10.
* config/s390/s390.h (processor_type): Add PROCESSOR_2097_Z10.
(processor_flags): Add PF_Z10.
(TARGET_CPU_Z10, TARGET_Z10): New macro definitions.
* config/s390/s390.md (cpu, cpu_facility attributes): Add z10.
* gcc/config.gcc: Add z10.
2008-05-28 Richard Guenther <rguenther@suse.de> 2008-05-28 Richard Guenther <rguenther@suse.de>
PR tree-optimization/36291 PR tree-optimization/36291
......
...@@ -3182,7 +3182,7 @@ case "${target}" in ...@@ -3182,7 +3182,7 @@ case "${target}" in
for which in arch tune; do for which in arch tune; do
eval "val=\$with_$which" eval "val=\$with_$which"
case ${val} in case ${val} in
"" | g5 | g6 | z900 | z990 | z9-109 | z9-ec) "" | g5 | g6 | z900 | z990 | z9-109 | z9-ec | z10)
# OK # OK
;; ;;
*) *)
......
...@@ -188,6 +188,38 @@ struct processor_costs z9_109_cost = ...@@ -188,6 +188,38 @@ struct processor_costs z9_109_cost =
COSTS_N_INSNS (24), /* DSGR */ COSTS_N_INSNS (24), /* DSGR */
}; };
static const
struct processor_costs z10_cost =
{
COSTS_N_INSNS (4), /* M */
COSTS_N_INSNS (2), /* MGHI */
COSTS_N_INSNS (2), /* MH */
COSTS_N_INSNS (2), /* MHI */
COSTS_N_INSNS (4), /* ML */
COSTS_N_INSNS (4), /* MR */
COSTS_N_INSNS (5), /* MS */
COSTS_N_INSNS (6), /* MSG */
COSTS_N_INSNS (4), /* MSGF */
COSTS_N_INSNS (4), /* MSGFR */
COSTS_N_INSNS (4), /* MSGR */
COSTS_N_INSNS (4), /* MSR */
COSTS_N_INSNS (1), /* multiplication in DFmode */
COSTS_N_INSNS (28), /* MXBR */
COSTS_N_INSNS (130), /* SQXBR */
COSTS_N_INSNS (66), /* SQDBR */
COSTS_N_INSNS (38), /* SQEBR */
COSTS_N_INSNS (1), /* MADBR */
COSTS_N_INSNS (1), /* MAEBR */
COSTS_N_INSNS (60), /* DXBR */
COSTS_N_INSNS (40), /* DDBR */
COSTS_N_INSNS (26), /* DEBR */
COSTS_N_INSNS (30), /* DLGR */
COSTS_N_INSNS (23), /* DLR */
COSTS_N_INSNS (23), /* DR */
COSTS_N_INSNS (24), /* DSGFR */
COSTS_N_INSNS (24), /* DSGR */
};
extern int reload_completed; extern int reload_completed;
/* Save information from a "cmpxx" operation until the branch or scc is /* Save information from a "cmpxx" operation until the branch or scc is
...@@ -1365,6 +1397,8 @@ s390_handle_arch_option (const char *arg, ...@@ -1365,6 +1397,8 @@ s390_handle_arch_option (const char *arg,
| PF_LONG_DISPLACEMENT | PF_EXTIMM}, | PF_LONG_DISPLACEMENT | PF_EXTIMM},
{"z9-ec", PROCESSOR_2094_Z9_109, PF_IEEE_FLOAT | PF_ZARCH {"z9-ec", PROCESSOR_2094_Z9_109, PF_IEEE_FLOAT | PF_ZARCH
| PF_LONG_DISPLACEMENT | PF_EXTIMM | PF_DFP }, | PF_LONG_DISPLACEMENT | PF_EXTIMM | PF_DFP },
{"z10", PROCESSOR_2097_Z10, PF_IEEE_FLOAT | PF_ZARCH
| PF_LONG_DISPLACEMENT | PF_EXTIMM | PF_DFP | PF_Z10},
}; };
size_t i; size_t i;
...@@ -1472,12 +1506,20 @@ override_options (void) ...@@ -1472,12 +1506,20 @@ override_options (void)
} }
/* Set processor cost function. */ /* Set processor cost function. */
if (s390_tune == PROCESSOR_2094_Z9_109) switch (s390_tune)
s390_cost = &z9_109_cost; {
else if (s390_tune == PROCESSOR_2084_Z990) case PROCESSOR_2084_Z990:
s390_cost = &z990_cost; s390_cost = &z990_cost;
else break;
case PROCESSOR_2094_Z9_109:
s390_cost = &z9_109_cost;
break;
case PROCESSOR_2097_Z10:
s390_cost = &z10_cost;
break;
default:
s390_cost = &z900_cost; s390_cost = &z900_cost;
}
if (TARGET_BACKCHAIN && TARGET_PACKED_STACK && TARGET_HARD_FLOAT) if (TARGET_BACKCHAIN && TARGET_PACKED_STACK && TARGET_HARD_FLOAT)
error ("-mbackchain -mpacked-stack -mhard-float are not supported " error ("-mbackchain -mpacked-stack -mhard-float are not supported "
...@@ -4930,10 +4972,16 @@ s390_adjust_priority (rtx insn ATTRIBUTE_UNUSED, int priority) ...@@ -4930,10 +4972,16 @@ s390_adjust_priority (rtx insn ATTRIBUTE_UNUSED, int priority)
static int static int
s390_issue_rate (void) s390_issue_rate (void)
{ {
if (s390_tune == PROCESSOR_2084_Z990 switch (s390_tune)
|| s390_tune == PROCESSOR_2094_Z9_109) {
case PROCESSOR_2084_Z990:
case PROCESSOR_2094_Z9_109:
return 3; return 3;
case PROCESSOR_2097_Z10:
return 2;
default:
return 1; return 1;
}
} }
static int static int
......
...@@ -40,6 +40,7 @@ enum processor_type ...@@ -40,6 +40,7 @@ enum processor_type
PROCESSOR_2064_Z900, PROCESSOR_2064_Z900,
PROCESSOR_2084_Z990, PROCESSOR_2084_Z990,
PROCESSOR_2094_Z9_109, PROCESSOR_2094_Z9_109,
PROCESSOR_2097_Z10,
PROCESSOR_max PROCESSOR_max
}; };
...@@ -51,7 +52,8 @@ enum processor_flags ...@@ -51,7 +52,8 @@ enum processor_flags
PF_ZARCH = 2, PF_ZARCH = 2,
PF_LONG_DISPLACEMENT = 4, PF_LONG_DISPLACEMENT = 4,
PF_EXTIMM = 8, PF_EXTIMM = 8,
PF_DFP = 16 PF_DFP = 16,
PF_Z10 = 32
}; };
extern enum processor_type s390_tune; extern enum processor_type s390_tune;
...@@ -70,6 +72,8 @@ extern enum processor_flags s390_arch_flags; ...@@ -70,6 +72,8 @@ extern enum processor_flags s390_arch_flags;
(s390_arch_flags & PF_EXTIMM) (s390_arch_flags & PF_EXTIMM)
#define TARGET_CPU_DFP \ #define TARGET_CPU_DFP \
(s390_arch_flags & PF_DFP) (s390_arch_flags & PF_DFP)
#define TARGET_CPU_Z10 \
(s390_arch_flags & PF_Z10)
#define TARGET_LONG_DISPLACEMENT \ #define TARGET_LONG_DISPLACEMENT \
(TARGET_ZARCH && TARGET_CPU_LONG_DISPLACEMENT) (TARGET_ZARCH && TARGET_CPU_LONG_DISPLACEMENT)
...@@ -77,6 +81,8 @@ extern enum processor_flags s390_arch_flags; ...@@ -77,6 +81,8 @@ extern enum processor_flags s390_arch_flags;
(TARGET_ZARCH && TARGET_CPU_EXTIMM) (TARGET_ZARCH && TARGET_CPU_EXTIMM)
#define TARGET_DFP \ #define TARGET_DFP \
(TARGET_ZARCH && TARGET_CPU_DFP) (TARGET_ZARCH && TARGET_CPU_DFP)
#define TARGET_Z10 \
(TARGET_ZARCH && TARGET_CPU_Z10)
/* Run-time target specification. */ /* Run-time target specification. */
......
...@@ -228,10 +228,10 @@ ...@@ -228,10 +228,10 @@
;; distinguish between g5 and g6, but there are differences between the two ;; distinguish between g5 and g6, but there are differences between the two
;; CPUs could in theory be modeled. ;; CPUs could in theory be modeled.
(define_attr "cpu" "g5,g6,z900,z990,z9_109" (define_attr "cpu" "g5,g6,z900,z990,z9_109,z10"
(const (symbol_ref "s390_tune"))) (const (symbol_ref "s390_tune")))
(define_attr "cpu_facility" "standard,ieee,zarch,longdisp,extimm,dfp" (define_attr "cpu_facility" "standard,ieee,zarch,longdisp,extimm,dfp,z10"
(const_string "standard")) (const_string "standard"))
(define_attr "enabled" "" (define_attr "enabled" ""
...@@ -256,6 +256,10 @@ ...@@ -256,6 +256,10 @@
(and (eq_attr "cpu_facility" "dfp") (and (eq_attr "cpu_facility" "dfp")
(ne (symbol_ref "TARGET_DFP") (const_int 0))) (ne (symbol_ref "TARGET_DFP") (const_int 0)))
(const_int 1)
(and (eq_attr "cpu_facility" "z10")
(ne (symbol_ref "TARGET_Z10") (const_int 0)))
(const_int 1)] (const_int 1)]
(const_int 0))) (const_int 0)))
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment