[4.7] Avoid global state in s390_handle_option

Andreas Krebbel krebbel@linux.vnet.ibm.com
Wed Mar 23 11:59:00 GMT 2011


Hi Joseph,

sorry for the late reply to your patch.  I would like to propose a few
changes as implemented with the attached patch:

- The options mapped to an enum type seem to always need an
  initialization value.  Otherwise there is a warning when compiling
  options.c:

error: enum conversion in initialization is invalid in C++ [-Werror=c++-compat]

- I've merged s390_arch_option and processor_type enums.  Both only
  differ for z9-ec which in turn is only relevant for the pipeline
  description. The patch adjusts the pipeline description accordingly.
  With that change several other things could be simplified.

- I've also fixed two more warning statements using
  HOST_WIDE_INT_PRINT_DEC.

Tested on s390x.

What do you think?

Bye,

-Andreas-


2011-03-23  Andreas Krebbel  <Andreas.Krebbel@de.ibm.com>

	* config/s390/2084.md: Enable all insn reservations also for z9_ec
	cpu attribute value.
	* config/s390/s390-opts.h (enum s390_arch_option): Remove.
	(enum processor_type): Add PROCESSOR_2094_Z9_EC.
	* config/s390/s390.c (processor_flags_table): New constant array.
	(s390_handle_arch_option): Remove.
	(s390_handle_option): Remove s390_handle_arch_option invocations
	and OPT_mwarn_framesize_ handling.
	(s390_option_override): Remove s390_handle_arch_option invocation.
	(s390_emit_prologue): Remove use of HOST_WIDE_INT_PRINT_DEC in
	warnings.
	* config/s390/s390.md (cpu attribute): Add z9_ec value.
	* config/s390/s390.opt (s390_tune, s390_arch)
	(march=): Replace s390_arch_option enum and values with
	processor_type.  Set variable name to s390_arch.  Set
	initialization value.
	(mtune=): Replace s390_arch_option with processor_type.  Set
	variable name to s390_tune.  Set initialization value.


Index: gcc/config/s390/2084.md
===================================================================
*** gcc/config/s390/2084.md.orig
--- gcc/config/s390/2084.md
***************
*** 62,130 ****
  ;;
  
  (define_insn_reservation "x_int" 1
!   (and (eq_attr "cpu" "z990,z9_109")
         (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 "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")
         (eq_attr "type" "lr"))
    "x-e1-st,x-wr-st")
  
  (define_insn_reservation "x_la" 1
!   (and (eq_attr "cpu" "z990,z9_109")
         (eq_attr "type" "la"))
    "x-e1-st,x-wr-st")
  
  (define_insn_reservation "x_larl" 1
!   (and (eq_attr "cpu" "z990,z9_109")
         (eq_attr "type" "larl"))
    "x-e1-st,x-wr-st")
  
  (define_insn_reservation "x_load" 1
!   (and (eq_attr "cpu" "z990,z9_109")
         (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")
         (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")
         (eq_attr "type" "branch"))
    "x_e1_r,x_wr_r")
  
  (define_insn_reservation "x_call" 5
!   (and (eq_attr "cpu" "z990,z9_109")
         (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")
         (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")
         (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")
         (eq_attr "type" "idiv"))
    "x-e1-np*10,x-wr-np")
  
  (define_insn_reservation "x_sem" 17
!   (and (eq_attr "cpu" "z990,z9_109")
         (eq_attr "type" "sem"))
    "x-e1-np+x-mem,x-e1-np*16,x-wr-st")
  
--- 62,130 ----
  ;;
  
  (define_insn_reservation "x_int" 1
!   (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,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,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,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,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,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,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,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,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,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,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,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,z9_ec")
         (eq_attr "type" "sem"))
    "x-e1-np+x-mem,x-e1-np*16,x-wr-st")
  
***************
*** 133,159 ****
  ;;
  
  (define_insn_reservation "x_cs" 1
!   (and (eq_attr "cpu" "z990,z9_109")
         (eq_attr "type" "cs"))
    "x-e1-np,x-wr-np")
  
  (define_insn_reservation "x_vs" 1
!   (and (eq_attr "cpu" "z990,z9_109")
         (eq_attr "type" "vs"))
    "x-e1-np*10,x-wr-np")
  
  (define_insn_reservation "x_stm" 1
!   (and (eq_attr "cpu" "z990,z9_109")
         (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")
         (eq_attr "type" "lm"))
    "x-e1-np*10,x-wr-np")
  
  (define_insn_reservation "x_other" 1
!   (and (eq_attr "cpu" "z990,z9_109")
         (eq_attr "type" "other"))
    "x-e1-np,x-wr-np")
  
--- 133,159 ----
  ;;
  
  (define_insn_reservation "x_cs" 1
!   (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,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,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,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,z9_ec")
         (eq_attr "type" "other"))
    "x-e1-np,x-wr-np")
  
***************
*** 162,249 ****
  ;;
  
  (define_insn_reservation "x_fsimptf" 7
!   (and (eq_attr "cpu" "z990,z9_109")
         (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")
         (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")
         (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")
         (eq_attr "type" "fmultf"))
    "x_e1_t*27,x-wr-fp")
  
  
  (define_insn_reservation "x_fdivtf" 82
!   (and (eq_attr "cpu" "z990,z9_109")
         (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")
         (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")
         (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")
         (eq_attr "type" "floadtf"))
    "x_e1_t,x-wr-fp")
  
  (define_insn_reservation "x_floaddf" 6
!   (and (eq_attr "cpu" "z990,z9_109")
         (eq_attr "type" "floaddf"))
    "x_e1_t,x-wr-fp")
  
  (define_insn_reservation "x_floadsf" 6
!   (and (eq_attr "cpu" "z990,z9_109")
         (eq_attr "type" "floadsf"))
    "x_e1_t,x-wr-fp")
  
  
  (define_insn_reservation "x_fstoredf" 1
!   (and (eq_attr "cpu" "z990,z9_109")
         (eq_attr "type" "fstoredf"))
    "x_e1_t,x-wr-fp")
  
  (define_insn_reservation "x_fstoresf" 1
!   (and (eq_attr "cpu" "z990,z9_109")
         (eq_attr "type" "fstoresf"))
    "x_e1_t,x-wr-fp")
  
  
  (define_insn_reservation "x_ftrunctf" 16
!   (and (eq_attr "cpu" "z990,z9_109")
         (eq_attr "type" "ftrunctf"))
    "x_e1_t*10,x-wr-fp")
  
  (define_insn_reservation "x_ftruncdf" 11
!   (and (eq_attr "cpu" "z990,z9_109")
         (eq_attr "type" "ftruncdf"))
    "x_e1_t*5,x-wr-fp")
  
  
  (define_insn_reservation "x_ftoi" 1
!   (and (eq_attr "cpu" "z990,z9_109")
         (eq_attr "type" "ftoi"))
    "x_e1_t*3,x-wr-fp")
  
  (define_insn_reservation "x_itof" 7
!   (and (eq_attr "cpu" "z990,z9_109")
         (eq_attr "type" "itoftf,itofdf,itofsf"))
    "x_e1_t*3,x-wr-fp")
  
--- 162,249 ----
  ;;
  
  (define_insn_reservation "x_fsimptf" 7
!   (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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,z9_ec")
         (eq_attr "type" "itoftf,itofdf,itofsf"))
    "x_e1_t*3,x-wr-fp")
  
Index: gcc/config/s390/s390-opts.h
===================================================================
*** gcc/config/s390/s390-opts.h.orig
--- gcc/config/s390/s390-opts.h
*************** enum processor_type
*** 32,57 ****
    PROCESSOR_2064_Z900,
    PROCESSOR_2084_Z990,
    PROCESSOR_2094_Z9_109,
    PROCESSOR_2097_Z10,
    PROCESSOR_2817_Z196,
    PROCESSOR_max
  };
  
- /* This enumeration must match processor_alias_table in
-    s390_handle_arch_option.  It is different from enum processor_type
-    because some processors differ for option handling but not for
-    scheduling.  */
- 
- enum s390_arch_option
- {
-   s390_arch_g5,
-   s390_arch_g6,
-   s390_arch_z900,
-   s390_arch_z990,
-   s390_arch_z9_109,
-   s390_arch_z9_ec,
-   s390_arch_z10,
-   s390_arch_z196
- };
- 
  #endif
--- 32,41 ----
    PROCESSOR_2064_Z900,
    PROCESSOR_2084_Z990,
    PROCESSOR_2094_Z9_109,
+   PROCESSOR_2094_Z9_EC,
    PROCESSOR_2097_Z10,
    PROCESSOR_2817_Z196,
    PROCESSOR_max
  };
  
  #endif
Index: gcc/config/s390/s390.c
===================================================================
*** gcc/config/s390/s390.c.orig
--- gcc/config/s390/s390.c
*************** along with GCC; see the file COPYING3.  
*** 55,60 ****
--- 55,75 ----
  #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.  */
  
*************** s390_option_init_struct (struct gcc_opti
*** 1530,1576 ****
    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,
  		    location_t loc)
  {
    size_t code = decoded->opt_index;
--- 1545,1556 ----
    opts->x_flag_asynchronous_unwind_tables = 1;
  }
  
  /* 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,
  		    location_t loc)
  {
    size_t code = decoded->opt_index;
*************** s390_handle_option (struct gcc_options *
*** 1580,1588 ****
    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_string = arg;
        return true;
  
--- 1560,1566 ----
    switch (code)
      {
      case OPT_march_:
!       opts->x_s390_arch_flags = processor_flags_table[value];
        opts->x_s390_arch_string = arg;
        return true;
  
*************** s390_handle_option (struct gcc_options *
*** 1597,1605 ****
        return true;
  
      case OPT_mtune_:
!       s390_handle_arch_option ((enum s390_arch_option) value,
! 			       &opts->x_s390_tune,
! 			       &opts->x_s390_tune_flags);
        return true;
  
      case OPT_mwarn_framesize_:
--- 1575,1581 ----
        return true;
  
      case OPT_mtune_:
!       opts->x_s390_tune_flags = processor_flags_table[value];
        return true;
  
      case OPT_mwarn_framesize_:
*************** s390_option_override (void)
*** 1626,1645 ****
  	target_flags &= ~MASK_ZARCH;
      }
  
!   /* Determine processor architectural level.  */
!   if (!s390_arch_string)
      {
        s390_arch_string = TARGET_ZARCH? "z900" : "g5";
!       s390_handle_arch_option ((TARGET_ZARCH ? s390_arch_z900 : s390_arch_g5),
! 			       &s390_arch, &s390_arch_flags);
      }
  
-   /* 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)
      {
--- 1602,1616 ----
  	target_flags &= ~MASK_ZARCH;
      }
  
!   /* 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_arch = TARGET_ZARCH ? PROCESSOR_2064_Z900 : PROCESSOR_9672_G5;
!       s390_arch_flags = processor_flags_table[(int)s390_arch];
      }
  
    /* Determine processor to tune for.  */
    if (s390_tune == PROCESSOR_max)
      {
*************** s390_emit_prologue (void)
*** 8160,8167 ****
  		 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
  			   " bytes which is more than half the stack size. "
  			   "The dynamic check would not be reliable. "
  			   "No check emitted for this function.",
--- 8131,8137 ----
  		 not match the test under mask pattern.  */
  	      if (stack_guard >= s390_stack_size)
  		{
! 		  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.",
*************** s390_emit_prologue (void)
*** 8189,8195 ****
  
        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",
  		 current_function_name (), cfun_frame_layout.frame_size);
  
        if (s390_warn_dynamicstack_p && cfun->calls_alloca)
--- 8159,8165 ----
  
        if (s390_warn_framesize > 0
  	  && cfun_frame_layout.frame_size >= s390_warn_framesize)
! 	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)
Index: gcc/config/s390/s390.md
===================================================================
*** gcc/config/s390/s390.md.orig
--- gcc/config/s390/s390.md
***************
*** 272,278 ****
  ;; distinguish between g5 and g6, but there are differences between the two
  ;; CPUs could in theory be modeled.
  
! (define_attr "cpu" "g5,g6,z900,z990,z9_109,z10,z196"
    (const (symbol_ref "s390_tune_attr")))
  
  (define_attr "cpu_facility" "standard,ieee,zarch,longdisp,extimm,dfp,z10,z196"
--- 272,278 ----
  ;; distinguish between g5 and g6, but there are differences between the two
  ;; CPUs could in theory be modeled.
  
! (define_attr "cpu" "g5,g6,z900,z990,z9_109,z9_ec,z10,z196"
    (const (symbol_ref "s390_tune_attr")))
  
  (define_attr "cpu_facility" "standard,ieee,zarch,longdisp,extimm,dfp,z10,z196"
Index: gcc/config/s390/s390.opt
===================================================================
*** gcc/config/s390/s390.opt.orig
--- gcc/config/s390/s390.opt
*************** config/s390/s390-opts.h
*** 25,41 ****
  Variable
  const char *s390_arch_string
  
- ; Which cpu are we tuning for.
- Variable
- enum processor_type s390_tune = PROCESSOR_max
- 
  Variable
  int s390_tune_flags
  
- ; Which instruction set architecture to use.
- Variable
- enum processor_type s390_arch
- 
  Variable
  int s390_arch_flags
  
--- 25,33 ----
*************** Target Report RejectNegative Negative(m3
*** 51,85 ****
  64 bit ABI
  
  march=
! Target RejectNegative Joined Enum(s390_arch_option)
  Generate code for given CPU
  
  Enum
! Name(s390_arch_option) Type(enum s390_arch_option)
  
  EnumValue
! Enum(s390_arch_option) String(g5) Value(s390_arch_g5)
  
  EnumValue
! Enum(s390_arch_option) String(g6) Value(s390_arch_g6)
  
  EnumValue
! Enum(s390_arch_option) String(z900) Value(s390_arch_z900)
  
  EnumValue
! Enum(s390_arch_option) String(z990) Value(s390_arch_z990)
  
  EnumValue
! Enum(s390_arch_option) String(z9-109) Value(s390_arch_z9_109)
  
  EnumValue
! Enum(s390_arch_option) String(z9-ec) Value(s390_arch_z9_ec)
  
  EnumValue
! Enum(s390_arch_option) String(z10) Value(s390_arch_z10)
  
  EnumValue
! Enum(s390_arch_option) String(z196) Value(s390_arch_z196)
  
  mbackchain
  Target Report Mask(BACKCHAIN)
--- 43,77 ----
  64 bit ABI
  
  march=
! Target RejectNegative Joined Enum(processor_type) Var(s390_arch) Init(PROCESSOR_max)
  Generate code for given CPU
  
  Enum
! Name(processor_type) Type(enum processor_type)
  
  EnumValue
! Enum(processor_type) String(g5) Value(PROCESSOR_9672_G5)
  
  EnumValue
! Enum(processor_type) String(g6) Value(PROCESSOR_9672_G6)
  
  EnumValue
! Enum(processor_type) String(z900) Value(PROCESSOR_2064_Z900)
  
  EnumValue
! Enum(processor_type) String(z990) Value(PROCESSOR_2084_Z990)
  
  EnumValue
! Enum(processor_type) String(z9-109) Value(PROCESSOR_2094_Z9_109)
  
  EnumValue
! Enum(processor_type) String(z9-ec) Value(PROCESSOR_2094_Z9_EC)
  
  EnumValue
! Enum(processor_type) String(z10) Value(PROCESSOR_2097_Z10)
  
  EnumValue
! Enum(processor_type) String(z196) Value(PROCESSOR_2817_Z196)
  
  mbackchain
  Target Report Mask(BACKCHAIN)
*************** Target RejectNegative Joined UInteger Va
*** 130,136 ****
  Emit extra code in the function prologue in order to trap if the stack size exceeds the given limit
  
  mtune=
! Target RejectNegative Joined Enum(s390_arch_option)
  Schedule code for given CPU
  
  mmvcle
--- 122,128 ----
  Emit extra code in the function prologue in order to trap if the stack size exceeds the given limit
  
  mtune=
! Target RejectNegative Joined Enum(processor_type) Var(s390_tune) Init(PROCESSOR_max)
  Schedule code for given CPU
  
  mmvcle



More information about the Gcc-patches mailing list