Package: binutils
Version: 2.15-6
Tags: sarge, patch
Severity: wishlist

   This is a backport of an optimization already in upstream.  Text of
original patch submission by H.J. Lu (source URL in dpatch below):

        Montecito supports the [EMAIL PROTECTED] on .i, .m, .f ports only.
        [EMAIL PROTECTED] on a b syllable decodes to a nop. Anticipated
        performance gains may not be realized for any [EMAIL PROTECTED]
        instruction.
        
        BTW, Montecito is the code name for the next Itanium processor.
        The 2.4 and 2.6 Linux kernels are OK with this patch.

I've tested kernel builds with Sarge binutils 2.15-6 with this patch
included using the option -Wa,-mhint.b=error.  No issues found.  Please
consider this patch for any post Sarge initial release rolls of
binutils.  The unstable branch already contains a binutils that includes
this.  Thanks,

        Alex

-- 
Alex Williamson                             HP Linux & Open Source Lab

#! /bin/sh -e
## 124_montecito_b_slot_hint.dpatch
##
## DP: Description: Disable hint in B unit for Montecito
## DP: Author: H. J. Lu
## DP: Upstream status: Committed to trunk.
## DP: Date: 2005-02-16
## DP: URL: http://sources.redhat.com/ml/binutils/2005-02/msg00367.html

if [ $# -lt 1 ]; then
    echo "`basename $0`: script expects -patch|-unpatch as argument" >&2
    exit 1
fi

[ -f debian/patches/00patch-opts ] && . debian/patches/00patch-opts
patch_opts="${patch_opts:--f --no-backup-if-mismatch} ${2:+-d $2}"

case "$1" in
    -patch) patch -p1 ${patch_opts} < $0;;
    -unpatch) patch -R -p1 ${patch_opts} < $0;;
    *)
        echo "`basename $0`: script expects -patch|-unpatch as argument" >&2
        exit 1;;
esac

exit 0

@DPATCH@
--- binutils/gas/doc/as.texinfo.orig    2004-01-08 19:34:04.000000000 -0700
+++ binutils/gas/doc/as.texinfo 2005-06-07 13:57:05.610782978 -0600
@@ -313,6 +313,7 @@
    [EMAIL PROTECTED]|@b{-mauto-pic}]
    [EMAIL PROTECTED]|@b{-milp64}|@b{-mlp64}|@b{-mp64}]
    [EMAIL PROTECTED]|@b{mbe}]
+   [EMAIL PROTECTED]|@b{-mhint.b=warning}|@b{-mhint.b=error}]
    [EMAIL PROTECTED]|@b{-xexplicit}] [EMAIL PROTECTED] [EMAIL PROTECTED]
 @end ifset
 @ifset IP2K
--- binutils/gas/doc/c-ia64.texi.orig   2003-10-26 11:12:03.000000000 -0700
+++ binutils/gas/doc/c-ia64.texi        2005-06-07 10:36:08.790618174 -0600
@@ -65,6 +65,15 @@
 byte order (default) and @code{-mbe} selects big-endian byte order.  Note that
 IA-64 machine code always uses little-endian byte order.
 
[EMAIL PROTECTED] -mhint.b=ok
[EMAIL PROTECTED] -mhint.b=warning
[EMAIL PROTECTED] -mhint.b=error
+These options control what assembler will do when the @samp{hint.b}
+instruction is used. @code{-mhint.b=ok} will make assembler to accept
[EMAIL PROTECTED]  @code{-mhint.b=warning} will make assembler to issue
+a warning when @samp{hint.b} is used.  @code{-mhint.b=error} will make
+assembler to treat @samp{hint.b} as an error, which is the default.
+
 @item -x
 @item -xexplicit
 These options turn on dependency violation checking.  This checking is turned 
on by
--- binutils/gas/testsuite/gas/ia64/hint.b-err.l.orig   2005-06-07 
10:36:08.790618174 -0600
+++ binutils/gas/testsuite/gas/ia64/hint.b-err.l        2005-06-07 
10:36:08.790618174 -0600
@@ -0,0 +1,3 @@
+.*: Assembler messages:
+.*:1: Error: hint.b shouldn't be used
+.*:2: Error: hint.b shouldn't be used
--- binutils/gas/testsuite/gas/ia64/hint.b-err.s.orig   2005-06-07 
10:36:08.791594737 -0600
+++ binutils/gas/testsuite/gas/ia64/hint.b-err.s        2005-06-07 
10:36:08.791594737 -0600
@@ -0,0 +1,2 @@
+       hint.b  @pause
+       hint.b  0x1ffff
--- binutils/gas/testsuite/gas/ia64/hint.b-warn.l.orig  2005-06-07 
10:36:08.791594737 -0600
+++ binutils/gas/testsuite/gas/ia64/hint.b-warn.l       2005-06-07 
10:36:08.791594737 -0600
@@ -0,0 +1,3 @@
+.*: Assembler messages:
+.*:1: Warning: hint.b may be treated as nop
+.*:2: Warning: hint.b may be treated as nop
--- binutils/gas/testsuite/gas/ia64/hint.b-warn.s.orig  2005-06-07 
10:36:08.792571299 -0600
+++ binutils/gas/testsuite/gas/ia64/hint.b-warn.s       2005-06-07 
10:36:08.792571299 -0600
@@ -0,0 +1,2 @@
+       hint.b  @pause
+       hint.b  0x1ffff
--- binutils/gas/testsuite/gas/ia64/ia64.exp.orig       2003-09-25 
21:54:09.000000000 -0600
+++ binutils/gas/testsuite/gas/ia64/ia64.exp    2005-06-07 14:13:24.325614739 
-0600
@@ -55,4 +55,6 @@
        run_dump_test "unwind"
        run_dump_test "alias"
     }
+    run_list_test "hint.b-err" ""
+    run_list_test "hint.b-warn" "-mhint.b=warning"
 }
--- binutils/gas/testsuite/gas/ia64/opc-b.d.orig        2003-09-25 
21:54:09.000000000 -0600
+++ binutils/gas/testsuite/gas/ia64/opc-b.d     2005-06-07 14:14:43.129324711 
-0600
@@ -1,3 +1,4 @@
+#as: -mhint.b=ok
 #objdump: -d
 #name: ia64 opc-b
 
--- binutils/gas/NEWS.orig      2004-05-17 13:36:07.000000000 -0600
+++ binutils/gas/NEWS   2005-06-07 14:15:38.543386532 -0600
@@ -1,5 +1,7 @@
 -*- text -*-
 
+* New command line option -mhint.b=[ok|warning|error] for IA64 targets.
+
 * The MIPS -membedded-pic option (Embedded-PIC code generation) is
   deprecated and will be removed in a future release.
 
--- binutils/gas/config/tc-ia64.c       2005-06-07 14:49:27.012111684 -0600
+++ binutils/gas/config/tc-ia64.c       2005-06-07 14:52:15.904687740 -0600
@@ -216,6 +216,14 @@
        that are predicatable.  */
     expressionS qp;
 
+    /* What to do when hint.b is used.  */
+    enum
+      {
+       hint_b_error,
+       hint_b_warning,
+       hint_b_ok
+      } hint_b;
+
     unsigned int
       manual_bundling : 1,
       debug_dv: 1,
@@ -6295,9 +6303,16 @@
       if (idesc->type == IA64_TYPE_DYN)
        {
          if ((strcmp (idesc->name, "nop") == 0)
-             || (strcmp (idesc->name, "hint") == 0)
              || (strcmp (idesc->name, "break") == 0))
            insn_unit = required_unit;
+         else if (strcmp (idesc->name, "hint") == 0)
+           {
+             if (required_unit == IA64_UNIT_B
+                 && md.hint_b != hint_b_ok)
+               insn_unit = IA64_UNIT_I;
+             else
+               insn_unit = required_unit;
+           }
          else if (strcmp (idesc->name, "chk.s") == 0)
            {
              insn_unit = IA64_UNIT_M;
@@ -6489,6 +6504,18 @@
        {
          md.flags |= EF_IA_64_BE;
        }
+      else if (strncmp (arg, "hint.b=", 7) == 0)
+       {
+         arg += 7;
+         if (strcmp (arg, "ok") == 0)
+           md.hint_b = hint_b_ok;
+         else if (strcmp (arg, "warning") == 0)
+           md.hint_b = hint_b_warning;
+         else if (strcmp (arg, "error") == 0)
+           md.hint_b = hint_b_error;
+         else
+           return 0;
+       }
       else
        return 0;
       break;
@@ -6592,6 +6619,8 @@
                          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\
+  -mhint.b=[ok|warning|error]\n\
+                         hint.b check (default -mhint.b=error)\n\
   -x | -xexplicit        turn on dependency violation checking (default)\n\
   -xauto                 automagically remove dependency violations\n\
   -xdebug                debug dependency violation checker\n"),
@@ -6937,6 +6966,7 @@
      char **argv ATTRIBUTE_UNUSED;
 {
   md.flags = MD_FLAGS_DEFAULT;
+  md.hint_b = hint_b_error;
 }
 
 /* Return a string for the target object file format.  */
@@ -10002,6 +10032,20 @@
            idesc = get_next_opcode (idesc);
        }
     }
+  else if (strcmp (idesc->name, "hint.b") == 0)
+    {
+      switch (md.hint_b)
+       {
+       case hint_b_ok:
+         break;
+       case hint_b_warning:
+         as_warn ("hint.b may be treated as nop");
+         break;
+       case hint_b_error:
+         as_bad ("hint.b shouldn't be used");
+         break;
+       }
+    }
 
   qp_regno = 0;
   if (md.qp.X_op == O_register)




-- 
To UNSUBSCRIBE, email to [EMAIL PROTECTED]
with a subject of "unsubscribe". Trouble? Contact [EMAIL PROTECTED]

Reply via email to