gas/
authorH.J. Lu <hjl.tools@gmail.com>
Mon, 28 Mar 2005 22:34:20 +0000 (22:34 +0000)
committerH.J. Lu <hjl.tools@gmail.com>
Mon, 28 Mar 2005 22:34:20 +0000 (22:34 +0000)
2005-03-28  David Mosberger  <davidm@hpl.hp.com>
    H.J. Lu  <hongjiu.lu@intel.com>

PR 803
NEWS: Mention "-mtune=[itanium1|itanium2]".

* config/tc-ia64.c (md): Add tune.
(md_parse_option): Accepted "-mtune=[itanium1|itanium2]".
(md_show_usage): Add "-mtune=[itanium1|itanium2]".
(extra_goodness): Prefer M- and I-unit NOPs for itanium2. F and
B unit NOPs are discouraged for McKinley-derived cores.
(md_begin): Don't hardcode the "extra_goodness()" function in
the comment...
(ia64_init): Set md.tune to itanium2.

* doc/as.texinfo: Add -mtune=[itanium1|itanium2]".
* doc/c-ia64.texi: Likewise.

gas/testsuite/

2005-03-28  H.J. Lu  <hongjiu.lu@intel.com>

PR 803
* gas/ia64/dv-imply.d: Pass -mtune=itanium1 to as.
* gas/ia64/dv-mutex.d : Likewise.
* gas/ia64/dv-safe.d: Likewise.
* gas/ia64/dv-srlz.d.nop: Likewise.
* gas/ia64/ldxmov-1.d: Likewise.
* gas/ia64/opc-b.d: Likewise.
* gas/ia64/opc-f.d: Likewise.
* gas/ia64/opc-i.d: Likewise.
* gas/ia64/opc-m.d: Likewise.
* gas/ia64/operand-or.d: Likewise.
* gas/ia64/pcrel.d: Likewise.
* gas/ia64/pseudo.d: Likewise.
* gas/ia64/tls.d: Likewise.

ld/testsuite/

2005-03-28  H.J. Lu  <hongjiu.lu@intel.com>

PR 803
* ld-ia64/ia64.exp: Pass -mtune=itanium1 to as.

21 files changed:
gas/ChangeLog
gas/NEWS
gas/config/tc-ia64.c
gas/doc/as.texinfo
gas/doc/c-ia64.texi
gas/testsuite/ChangeLog
gas/testsuite/gas/ia64/dv-imply.d
gas/testsuite/gas/ia64/dv-mutex.d
gas/testsuite/gas/ia64/dv-safe.d
gas/testsuite/gas/ia64/dv-srlz.d
gas/testsuite/gas/ia64/ldxmov-1.d
gas/testsuite/gas/ia64/opc-b.d
gas/testsuite/gas/ia64/opc-f.d
gas/testsuite/gas/ia64/opc-i.d
gas/testsuite/gas/ia64/opc-m.d
gas/testsuite/gas/ia64/operand-or.d
gas/testsuite/gas/ia64/pcrel.d
gas/testsuite/gas/ia64/pseudo.d
gas/testsuite/gas/ia64/tls.d
ld/testsuite/ChangeLog
ld/testsuite/ld-ia64/ia64.exp

index d8d85e20d31bd80689928c750622afabbeb189b7..3fef8debb58643fa8cab9e583467e395fcc9abd4 100644 (file)
@@ -1,3 +1,21 @@
+2005-03-28  David Mosberger  <davidm@hpl.hp.com>
+           H.J. Lu  <hongjiu.lu@intel.com>
+
+       PR 803
+       NEWS: Mention "-mtune=[itanium1|itanium2]".
+
+       * config/tc-ia64.c (md): Add tune.
+       (md_parse_option): Accepted "-mtune=[itanium1|itanium2]".
+       (md_show_usage): Add "-mtune=[itanium1|itanium2]".
+       (extra_goodness): Prefer M- and I-unit NOPs for itanium2. F and
+       B unit NOPs are discouraged for McKinley-derived cores.
+       (md_begin): Don't hardcode the "extra_goodness()" function in
+       the comment...
+       (ia64_init): Set md.tune to itanium2.
+
+       * doc/as.texinfo: Add -mtune=[itanium1|itanium2]".
+       * doc/c-ia64.texi: Likewise.
+
 2005-03-27  Ian Lance Taylor  <ian@airs.com>
 
        * config/obj-coff.c (coff_frob_symbol): When crashing because of a
index 5f483b988f93d368a5e30cac2814877803d699e5..a0aa0886452b2f21236ed27f3674ef173831f737 100644 (file)
--- a/gas/NEWS
+++ b/gas/NEWS
@@ -1,5 +1,7 @@
 -*- text -*-
 
+* New command line option -mtune=[itanium1|itanium2] for IA64 targets.
+
 Changes in 2.16:
 
 * Redefinition of macros now results in an error.
index b959cdcf9197f7bd3f062bc0f73426ce51d2f71b..d96d6f613e72d24b1efe71a503294ba60a993e9e 100644 (file)
@@ -229,6 +229,13 @@ static struct
        that are predicatable.  */
     expressionS qp;
 
+    /* Optimize for which CPU.  */
+    enum
+      {
+       itanium1,
+       itanium2
+      } tune;
+
     /* What to do when hint.b is used.  */
     enum
       {
@@ -6957,6 +6964,16 @@ md_parse_option (c, arg)
          else
            return 0;
        }
+      else if (strncmp (arg, "tune=", 5) == 0)
+       {
+         arg += 5;
+         if (strcmp (arg, "itanium1") == 0)
+           md.tune = itanium1;
+         else if (strcmp (arg, "itanium2") == 0)
+           md.tune = itanium2;
+         else
+           return 0;
+       }
       else
        return 0;
       break;
@@ -7069,6 +7086,8 @@ IA-64 options:\n\
                          EF_IA_64_NOFUNCDESC_CONS_GP)\n\
   -milp32|-milp64|-mlp64|-mp64 select data model (default -mlp64)\n\
   -mle | -mbe            select little- or big-endian byte order (default -mle)\n\
+  -mtune=[itanium1|itanium2]\n\
+                         tune for a specific CPU (default -mtune=itanium2)\n\
   -munwind-check=[warning|error]\n\
                          unwind directive check (default -munwind-check=warning)\n\
   -mhint.b=[ok|warning|error]\n\
@@ -7122,11 +7141,30 @@ match (int templ, int type, int slot)
 static inline int
 extra_goodness (int templ, int slot)
 {
-  if (slot == 1 && match (templ, IA64_TYPE_F, slot))
-    return 2;
-  if (slot == 2 && match (templ, IA64_TYPE_B, slot))
-    return 1;
-  return 0;
+  switch (md.tune)
+    {
+    case itanium1:
+      if (slot == 1 && match (templ, IA64_TYPE_F, slot))
+       return 2;
+      else if (slot == 2 && match (templ, IA64_TYPE_B, slot))
+       return 1;
+      else
+       return 0;
+      break;
+    case itanium2:
+      if (match (templ, IA64_TYPE_M, slot)
+         || match (templ, IA64_TYPE_I, slot))
+       /* Favor M- and I-unit NOPs.  We definitely want to avoid
+          F-unit and B-unit may cause split-issue or less-than-optimal
+          branch-prediction.  */
+       return 2;
+      else
+       return 0;
+      break;
+    default:
+      abort ();
+      return 0;
+    }
 }
 
 /* This function is called once, at assembler startup time.  It sets
@@ -7222,10 +7260,9 @@ md_begin ()
                &zero_address_frag);
 
   /* Compute the table of best templates.  We compute goodness as a
-     base 4 value, in which each match counts for 3, each F counts
-     for 2, each B counts for 1.  This should maximize the number of
-     F and B nops in the chosen bundles, which is good because these
-     pipelines are least likely to be overcommitted.  */
+     base 4 value, in which each match counts for 3.  Match-failures
+     result in NOPs and we use extra_goodness() to pick the execution
+     units that are best suited for issuing the NOP.  */
   for (i = 0; i < IA64_NUM_TYPES; ++i)
     for (j = 0; j < IA64_NUM_TYPES; ++j)
       for (k = 0; k < IA64_NUM_TYPES; ++k)
@@ -7426,6 +7463,7 @@ ia64_init (argc, argv)
   /* FIXME: We should change it to unwind_check_error someday.  */
   md.unwind_check = unwind_check_warning;
   md.hint_b = hint_b_error;
+  md.tune = itanium2;
 }
 
 /* Return a string for the target object file format.  */
index 124419c96937ee3e5e0610b51f8504206466d68d..a3164511e73ea75a837112c0b2e9845c940e1dba 100644 (file)
@@ -315,6 +315,7 @@ gcc(1), ld(1), and the Info entries for @file{binutils} and @file{ld}.
    [@b{-mconstant-gp}|@b{-mauto-pic}]
    [@b{-milp32}|@b{-milp64}|@b{-mlp64}|@b{-mp64}]
    [@b{-mle}|@b{mbe}]
+   [@b{-mtune=itanium1}|@b{-mtune=itanium2}]
    [@b{-munwind-check=warning}|@b{-munwind-check=error}]
    [@b{-mhint.b=ok}|@b{-mhint.b=warning}|@b{-mhint.b=error}]
    [@b{-x}|@b{-xexplicit}] [@b{-xauto}] [@b{-xdebug}]
index e548911a7708e9377619066d14e97290c826112c..6b0f3a9515d7a1654f8d44199ff67eb0b73cdcf3 100644 (file)
@@ -65,6 +65,11 @@ These options select the byte order.  The @code{-mle} option selects little-endi
 byte order (default) and @code{-mbe} selects big-endian byte order.  Note that
 IA-64 machine code always uses little-endian byte order.
 
+@item -mtune=itanium1
+@item -mtune=itanium2
+Tune for a particular IA-64 CPU, @var{itanium1} or @var{itanium2}. The
+default is @var{itanium2}.
+
 @item -munwind-check=warning
 @item -munwind-check=error
 These options control what the assembler will do when performing
index 54b64729224fa3e65a1963a3c6d953b3704bc85d..bef8501a4f0e6ddd806c7b7cacaec8992a1ff726 100644 (file)
@@ -1,3 +1,20 @@
+2005-03-28  H.J. Lu  <hongjiu.lu@intel.com>
+
+       PR 803
+       * gas/ia64/dv-imply.d: Pass -mtune=itanium1 to as.
+       * gas/ia64/dv-mutex.d : Likewise.
+       * gas/ia64/dv-safe.d: Likewise.
+       * gas/ia64/dv-srlz.d.nop: Likewise.
+       * gas/ia64/ldxmov-1.d: Likewise.
+       * gas/ia64/opc-b.d: Likewise.
+       * gas/ia64/opc-f.d: Likewise.
+       * gas/ia64/opc-i.d: Likewise.
+       * gas/ia64/opc-m.d: Likewise.
+       * gas/ia64/operand-or.d: Likewise.
+       * gas/ia64/pcrel.d: Likewise.
+       * gas/ia64/pseudo.d: Likewise.
+       * gas/ia64/tls.d: Likewise.
+
 2005-03-24  Hans-Peter Nilsson  <hp@axis.com>
 
        * gas/cris/range-err-1.s: Adjust expected messages for hosts with
index 27dca39a1c4903b58116b670a3e783f92df6d08f..30ae379672f0e91ac0797675a23efcc3b5357cd4 100644 (file)
@@ -1,4 +1,4 @@
-# as: -xexplicit
+# as: -xexplicit -mtune=itanium1
 # objdump: -d
 # name ia64 dv-mutex
 
index 7b59a65101dfe25dffa8dca689f8131f298a6293..66ea0fd03d8bef56612587f4ab34a6155ecb7948 100644 (file)
@@ -1,4 +1,4 @@
-# as: -xexplicit
+# as: -xexplicit -mtune=itanium1
 # objdump: -d
 # name ia64 dv-mutex
 
index 82609657aaec28e800f21a320eb87dadc6a94e68..c1da4a4c30897487829940e940e2396e13d21781 100644 (file)
@@ -1,4 +1,4 @@
-# as: -xexplicit
+# as: -xexplicit -mtune=itanium1
 # objdump: -d
 # name ia64 dv-safe
 
index bd12b51f40d1e00163bec2777159c46249dc243b..bf9caa48e6f6aaf96487167aec4120043ae17964 100644 (file)
@@ -1,4 +1,4 @@
-# as: -xauto
+# as: -xauto -mtune=itanium1
 # objdump: -d
 # name ia64 dv-srlz
 
index 93dd2dfe30b708b744bbb359ef8f71720b2152a1..0676d10cdd8204d910888cdbeb2272f24786c32f 100644 (file)
@@ -1,3 +1,4 @@
+#as: -mtune=itanium1
 #objdump: -dr
 #name: ia64 ldxmov-1
 
index cb0973c9718844504c3222a2748df59960b4dbd8..c2d47821c2ace6ff9677b0aa5020379dba1fee2c 100644 (file)
@@ -1,4 +1,4 @@
-#as: -xnone -mhint.b=ok
+#as: -xnone -mhint.b=ok -mtune=itanium1
 #objdump: -d
 #name: ia64 opc-b
 
index fa531169aa61c4ba6b1364d5c61ca1a364b3fcb8..0dfa8811cd11c1e6732749304d4e2f9c3494ba17 100644 (file)
@@ -1,4 +1,4 @@
-# as: -xnone
+# as: -xnone -mtune=itanium1
 # objdump: -d --disassemble-zeroes
 # name: ia64 opc-f
 
index 5c2bf0c399bcbe5b7706f4243076935eb811229c..0bbc2e12969dfff370367324d04037ea748181b9 100644 (file)
@@ -1,4 +1,4 @@
-# as: -xnone
+# as: -xnone -mtune=itanium1
 # objdump: -d
 # name: ia64 opc-i
 
index dcd0195986596894cf04875d359630ddd628c890..7ec2a4274ce852c924bc2295b45d7a7b0e4952c8 100644 (file)
@@ -1,4 +1,4 @@
-# as: -xnone
+# as: -xnone -mtune=itanium1
 # objdump: -d
 # name: ia64 opc-m
 
index f72793a645112c32179da0197cc677bc0ccf56cf..a40087a853ac59e459b05d835d5a0cab6f0fce84 100644 (file)
@@ -1,4 +1,4 @@
-# as: -xnone
+# as: -xnone -mtune=itanium1
 # objdump: -d --disassemble-zeroes
 # name: ia64 operand-or
 
index 384ad6a5b10907f1f7df93d6107c8b57a1ddcff0..674060d8bf30bfb4491dda844dbe82a6848d004e 100644 (file)
@@ -1,3 +1,4 @@
+#as: -mtune=itanium1
 #objdump: -rs
 #name: ia64 pcrel
 
index 67a1103557b55b533aed23a2068d94f25870dcfd..d18159564fdf6bc17b9320466030e621f2fa3137 100644 (file)
@@ -1,4 +1,4 @@
-# as: -xnone
+# as: -xnone -mtune=itanium1
 # objdump: -d
 # name: ia64 pseudo-ops
 
index f067e05e630e1985db6566249fa02b63b959bc86..3f03b25291b6f43385df8a851e8994da16a94537 100644 (file)
@@ -1,4 +1,4 @@
-#as: -xnone
+#as: -xnone -mtune=itanium1
 #objdump: -dr
 #name: ia64 tls
 
index 9833bf26c4995cdb002621b80151a6cc22c801f0..9ae7391003a1f9caf3449b54c5eb221e66e68df4 100644 (file)
@@ -1,3 +1,8 @@
+2005-03-28  H.J. Lu  <hongjiu.lu@intel.com>
+
+       PR 803
+       * ld-ia64/ia64.exp: Pass -mtune=itanium1 to as.
+
 2005-03-24  Mark Mitchell  <mark@codesourcery.com>
 
        * config/default.exp: Do not load libpath.exp if it does not
index 0af0436927417824674bc020051425997867de5d..310bffd6ebb8639ed0c36d5a574ba557375b794f 100644 (file)
@@ -35,14 +35,14 @@ if { !([istarget "ia64-*-elf*"]
 
 set ia64tests {
     {"TLS -fpic -shared" "-shared"
-     "" {tlspic1.s tlspic2.s}
+     "-mtune=itanium1" {tlspic1.s tlspic2.s}
      {{readelf -WSsrl tlspic.rd} {objdump -drj.text tlspic.dd}
       {objdump -sj.got tlspic.sd} {objdump -sj.tdata tlspic.td}}
       "libtlspic.so"}
     {"Helper shared library" "-shared"
      "" {tlslib.s} {} "libtlslib.so"}
     {"TLS -fpic and -fno-pic exec"
-     "tmpdir/libtlslib.so" "" {tlsbinpic.s tlsbin.s}
+     "tmpdir/libtlslib.so" "-mtune=itanium1" {tlsbinpic.s tlsbin.s}
      {{readelf -WSsrl tlsbin.rd} {objdump -drj.text tlsbin.dd}
       {objdump -sj.got tlsbin.sd} {objdump -sj.tdata tlsbin.td}}
       "tlsbin"}