+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
-*- text -*-
+* New command line option -mtune=[itanium1|itanium2] for IA64 targets.
+
Changes in 2.16:
* Redefinition of macros now results in an error.
that are predicatable. */
expressionS qp;
+ /* Optimize for which CPU. */
+ enum
+ {
+ itanium1,
+ itanium2
+ } tune;
+
/* What to do when hint.b is used. */
enum
{
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;
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\
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
&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)
/* 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. */
[@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}]
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
+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
-# as: -xexplicit
+# as: -xexplicit -mtune=itanium1
# objdump: -d
# name ia64 dv-mutex
-# as: -xexplicit
+# as: -xexplicit -mtune=itanium1
# objdump: -d
# name ia64 dv-mutex
-# as: -xexplicit
+# as: -xexplicit -mtune=itanium1
# objdump: -d
# name ia64 dv-safe
-# as: -xauto
+# as: -xauto -mtune=itanium1
# objdump: -d
# name ia64 dv-srlz
+#as: -mtune=itanium1
#objdump: -dr
#name: ia64 ldxmov-1
-#as: -xnone -mhint.b=ok
+#as: -xnone -mhint.b=ok -mtune=itanium1
#objdump: -d
#name: ia64 opc-b
-# as: -xnone
+# as: -xnone -mtune=itanium1
# objdump: -d --disassemble-zeroes
# name: ia64 opc-f
-# as: -xnone
+# as: -xnone -mtune=itanium1
# objdump: -d
# name: ia64 opc-i
-# as: -xnone
+# as: -xnone -mtune=itanium1
# objdump: -d
# name: ia64 opc-m
-# as: -xnone
+# as: -xnone -mtune=itanium1
# objdump: -d --disassemble-zeroes
# name: ia64 operand-or
+#as: -mtune=itanium1
#objdump: -rs
#name: ia64 pcrel
-# as: -xnone
+# as: -xnone -mtune=itanium1
# objdump: -d
# name: ia64 pseudo-ops
-#as: -xnone
+#as: -xnone -mtune=itanium1
#objdump: -dr
#name: ia64 tls
+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
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"}