summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gas/ChangeLog18
-rw-r--r--gas/NEWS2
-rw-r--r--gas/config/tc-ia64.c56
-rw-r--r--gas/doc/as.texinfo1
-rw-r--r--gas/doc/c-ia64.texi5
-rw-r--r--gas/testsuite/ChangeLog17
-rw-r--r--gas/testsuite/gas/ia64/dv-imply.d2
-rw-r--r--gas/testsuite/gas/ia64/dv-mutex.d2
-rw-r--r--gas/testsuite/gas/ia64/dv-safe.d2
-rw-r--r--gas/testsuite/gas/ia64/dv-srlz.d2
-rw-r--r--gas/testsuite/gas/ia64/ldxmov-1.d1
-rw-r--r--gas/testsuite/gas/ia64/opc-b.d2
-rw-r--r--gas/testsuite/gas/ia64/opc-f.d2
-rw-r--r--gas/testsuite/gas/ia64/opc-i.d2
-rw-r--r--gas/testsuite/gas/ia64/opc-m.d2
-rw-r--r--gas/testsuite/gas/ia64/operand-or.d2
-rw-r--r--gas/testsuite/gas/ia64/pcrel.d1
-rw-r--r--gas/testsuite/gas/ia64/pseudo.d2
-rw-r--r--gas/testsuite/gas/ia64/tls.d2
-rw-r--r--ld/testsuite/ChangeLog5
-rw-r--r--ld/testsuite/ld-ia64/ia64.exp4
21 files changed, 110 insertions, 22 deletions
diff --git a/gas/ChangeLog b/gas/ChangeLog
index d8d85e20d3..3fef8debb5 100644
--- a/gas/ChangeLog
+++ b/gas/ChangeLog
@@ -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
diff --git a/gas/NEWS b/gas/NEWS
index 5f483b988f..a0aa088645 100644
--- 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.
diff --git a/gas/config/tc-ia64.c b/gas/config/tc-ia64.c
index b959cdcf91..d96d6f613e 100644
--- a/gas/config/tc-ia64.c
+++ b/gas/config/tc-ia64.c
@@ -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. */
diff --git a/gas/doc/as.texinfo b/gas/doc/as.texinfo
index 124419c969..a3164511e7 100644
--- a/gas/doc/as.texinfo
+++ b/gas/doc/as.texinfo
@@ -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}]
diff --git a/gas/doc/c-ia64.texi b/gas/doc/c-ia64.texi
index e548911a77..6b0f3a9515 100644
--- a/gas/doc/c-ia64.texi
+++ b/gas/doc/c-ia64.texi
@@ -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
diff --git a/gas/testsuite/ChangeLog b/gas/testsuite/ChangeLog
index 54b6472922..bef8501a4f 100644
--- a/gas/testsuite/ChangeLog
+++ b/gas/testsuite/ChangeLog
@@ -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
diff --git a/gas/testsuite/gas/ia64/dv-imply.d b/gas/testsuite/gas/ia64/dv-imply.d
index 27dca39a1c..30ae379672 100644
--- a/gas/testsuite/gas/ia64/dv-imply.d
+++ b/gas/testsuite/gas/ia64/dv-imply.d
@@ -1,4 +1,4 @@
-# as: -xexplicit
+# as: -xexplicit -mtune=itanium1
# objdump: -d
# name ia64 dv-mutex
diff --git a/gas/testsuite/gas/ia64/dv-mutex.d b/gas/testsuite/gas/ia64/dv-mutex.d
index 7b59a65101..66ea0fd03d 100644
--- a/gas/testsuite/gas/ia64/dv-mutex.d
+++ b/gas/testsuite/gas/ia64/dv-mutex.d
@@ -1,4 +1,4 @@
-# as: -xexplicit
+# as: -xexplicit -mtune=itanium1
# objdump: -d
# name ia64 dv-mutex
diff --git a/gas/testsuite/gas/ia64/dv-safe.d b/gas/testsuite/gas/ia64/dv-safe.d
index 82609657aa..c1da4a4c30 100644
--- a/gas/testsuite/gas/ia64/dv-safe.d
+++ b/gas/testsuite/gas/ia64/dv-safe.d
@@ -1,4 +1,4 @@
-# as: -xexplicit
+# as: -xexplicit -mtune=itanium1
# objdump: -d
# name ia64 dv-safe
diff --git a/gas/testsuite/gas/ia64/dv-srlz.d b/gas/testsuite/gas/ia64/dv-srlz.d
index bd12b51f40..bf9caa48e6 100644
--- a/gas/testsuite/gas/ia64/dv-srlz.d
+++ b/gas/testsuite/gas/ia64/dv-srlz.d
@@ -1,4 +1,4 @@
-# as: -xauto
+# as: -xauto -mtune=itanium1
# objdump: -d
# name ia64 dv-srlz
diff --git a/gas/testsuite/gas/ia64/ldxmov-1.d b/gas/testsuite/gas/ia64/ldxmov-1.d
index 93dd2dfe30..0676d10cdd 100644
--- a/gas/testsuite/gas/ia64/ldxmov-1.d
+++ b/gas/testsuite/gas/ia64/ldxmov-1.d
@@ -1,3 +1,4 @@
+#as: -mtune=itanium1
#objdump: -dr
#name: ia64 ldxmov-1
diff --git a/gas/testsuite/gas/ia64/opc-b.d b/gas/testsuite/gas/ia64/opc-b.d
index cb0973c971..c2d47821c2 100644
--- a/gas/testsuite/gas/ia64/opc-b.d
+++ b/gas/testsuite/gas/ia64/opc-b.d
@@ -1,4 +1,4 @@
-#as: -xnone -mhint.b=ok
+#as: -xnone -mhint.b=ok -mtune=itanium1
#objdump: -d
#name: ia64 opc-b
diff --git a/gas/testsuite/gas/ia64/opc-f.d b/gas/testsuite/gas/ia64/opc-f.d
index fa531169aa..0dfa8811cd 100644
--- a/gas/testsuite/gas/ia64/opc-f.d
+++ b/gas/testsuite/gas/ia64/opc-f.d
@@ -1,4 +1,4 @@
-# as: -xnone
+# as: -xnone -mtune=itanium1
# objdump: -d --disassemble-zeroes
# name: ia64 opc-f
diff --git a/gas/testsuite/gas/ia64/opc-i.d b/gas/testsuite/gas/ia64/opc-i.d
index 5c2bf0c399..0bbc2e1296 100644
--- a/gas/testsuite/gas/ia64/opc-i.d
+++ b/gas/testsuite/gas/ia64/opc-i.d
@@ -1,4 +1,4 @@
-# as: -xnone
+# as: -xnone -mtune=itanium1
# objdump: -d
# name: ia64 opc-i
diff --git a/gas/testsuite/gas/ia64/opc-m.d b/gas/testsuite/gas/ia64/opc-m.d
index dcd0195986..7ec2a4274c 100644
--- a/gas/testsuite/gas/ia64/opc-m.d
+++ b/gas/testsuite/gas/ia64/opc-m.d
@@ -1,4 +1,4 @@
-# as: -xnone
+# as: -xnone -mtune=itanium1
# objdump: -d
# name: ia64 opc-m
diff --git a/gas/testsuite/gas/ia64/operand-or.d b/gas/testsuite/gas/ia64/operand-or.d
index f72793a645..a40087a853 100644
--- a/gas/testsuite/gas/ia64/operand-or.d
+++ b/gas/testsuite/gas/ia64/operand-or.d
@@ -1,4 +1,4 @@
-# as: -xnone
+# as: -xnone -mtune=itanium1
# objdump: -d --disassemble-zeroes
# name: ia64 operand-or
diff --git a/gas/testsuite/gas/ia64/pcrel.d b/gas/testsuite/gas/ia64/pcrel.d
index 384ad6a5b1..674060d8bf 100644
--- a/gas/testsuite/gas/ia64/pcrel.d
+++ b/gas/testsuite/gas/ia64/pcrel.d
@@ -1,3 +1,4 @@
+#as: -mtune=itanium1
#objdump: -rs
#name: ia64 pcrel
diff --git a/gas/testsuite/gas/ia64/pseudo.d b/gas/testsuite/gas/ia64/pseudo.d
index 67a1103557..d18159564f 100644
--- a/gas/testsuite/gas/ia64/pseudo.d
+++ b/gas/testsuite/gas/ia64/pseudo.d
@@ -1,4 +1,4 @@
-# as: -xnone
+# as: -xnone -mtune=itanium1
# objdump: -d
# name: ia64 pseudo-ops
diff --git a/gas/testsuite/gas/ia64/tls.d b/gas/testsuite/gas/ia64/tls.d
index f067e05e63..3f03b25291 100644
--- a/gas/testsuite/gas/ia64/tls.d
+++ b/gas/testsuite/gas/ia64/tls.d
@@ -1,4 +1,4 @@
-#as: -xnone
+#as: -xnone -mtune=itanium1
#objdump: -dr
#name: ia64 tls
diff --git a/ld/testsuite/ChangeLog b/ld/testsuite/ChangeLog
index 9833bf26c4..9ae7391003 100644
--- a/ld/testsuite/ChangeLog
+++ b/ld/testsuite/ChangeLog
@@ -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
diff --git a/ld/testsuite/ld-ia64/ia64.exp b/ld/testsuite/ld-ia64/ia64.exp
index 0af0436927..310bffd6eb 100644
--- a/ld/testsuite/ld-ia64/ia64.exp
+++ b/ld/testsuite/ld-ia64/ia64.exp
@@ -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"}