public inbox for binutils@sourceware.org
 help / color / mirror / Atom feed
From: "H. J. Lu" <hjl@lucon.org>
To: James E Wilson <wilson@specifixinc.com>
Cc: binutils@sources.redhat.com
Subject: Re: PATCH: Disable hint in B unit for Montecito
Date: Thu, 17 Feb 2005 12:37:00 -0000	[thread overview]
Message-ID: <20050217020214.GA24401@lucon.org> (raw)
In-Reply-To: <1108597856.27293.70.camel@aretha.corp.specifixinc.com>

On Wed, Feb 16, 2005 at 03:50:56PM -0800, James E Wilson wrote:
> On Wed, 2005-02-16 at 09:02, H. J. Lu wrote:
> > +	  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;
> > +	    }
> 
> It isn't OK to change units like this.  This will lead to assembler
> errors when explicit mode is used.  This example for instance
>         .explicit
> {       .bbb
>         hint @pause
>         hint @pause
>         hint @pause
> }
> gives me
> aretha$ ./as-new tmp.s
> tmp.s: Assembler messages:
> tmp.s:3: Error: `hint.i' does not fit into BBB template
> which may be confusing to the end user.
> 
[...]
> Since b is always at the end of a template, or followed by another b,
> there are no unit changes we can make here.  The only thing we can do is
> emit a warning/error, same as in md_assemble, and then emit the hint.b
> instruction that the user asked for.
> 
> I don't know if this effects the linux kernel compilation.  If it does,
> then we might need to make this a warning instead of an error by
> default.

It shouldn't be a problem. We can change the kernel if needed.

> 
> +These options control what assembler will do when the @samp{hint.b}
> +instruction is used. @code{-mhint.b=ok} will make assembler to accept
> +@samp{hint.b}.  @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.
> 
> I'd suggest:
> 
> These options control what the assembler will do when the @samp{hint.b}
> instruction is used.  @code{-mhint.b=ok} will make the assembler accept
> @samp{hint.b}.  @code{-mint.b=warning} will make the assembler issue a
> warning when @samp{hint.b} is used.  @code{-mhint.b=error} will make the
> assembler treat @samp{hint.b} as an error, which is the default.
> 

Here is the updated patch. I am testing 2.4 and 2.6 kernel build now.
I will check it in if kernels are OK.

Thanks.


H.J.
----
gas/

2005-02-16  H.J. Lu  <hongjiu.lu@intel.com>

	* NEWS: Mention "-mhint.b=[ok|warning|error]".

	* config/tc-ia64.c (md): Add hint_b.
	(emit_one_bundle): Handle md.hint_b for "hint".
	(md_parse_option): Accepted "-mhint.b=[ok|warning|error]".
	(md_show_usage): Add "-mhint.b=[ok|warning|error]".
	(ia64_init): Set md.hint_b to error.
	(md_assemble): Handle md.hint_b for "hint.b".

	* doc/as.texinfo: Add "-mhint.b=[ok|warning|error]".
	* doc/c-ia64.texi: Likewise.

gas/testsuite/

2005-02-16  H.J. Lu  <hongjiu.lu@intel.com>

	* gas/ia64/hint.b-err.l: New file.
	* gas/ia64/hint.b-err.s: Likewise.
	* gas/ia64/hint.b-warn.l: Likewise.
	* gas/ia64/hint.b-warn.s: Likewise.

	* gas/ia64/ia64.exp: Run hint.b-err and hint.b-warn.

	* gas/ia64/opc-b.d: Pass -mhint.b=ok to as.

--- gas/NEWS.hint	2005-02-14 09:31:16.000000000 -0800
+++ gas/NEWS	2005-02-15 09:31:11.000000000 -0800
@@ -1,5 +1,7 @@
 -*- text -*-
 
+* New command line option -mhint.b=[ok|warning|error] for IA64 targets.
+
 * New command line option -munwind-check=[warning|error] for IA64
   targets.
 
--- gas/config/tc-ia64.c.hint	2005-02-15 09:30:25.000000000 -0800
+++ gas/config/tc-ia64.c	2005-02-16 17:47:46.773525858 -0800
@@ -229,6 +229,14 @@ static struct
        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,
@@ -6705,9 +6713,26 @@ emit_one_bundle ()
 	  enum ia64_opnd opnd1, opnd2;
 
 	  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)
+		{
+		  switch (md.hint_b)
+		    {
+		    case hint_b_ok:
+		      break;
+		    case hint_b_warning:
+		      as_warn ("hint in B unit may be treated as nop");
+		      break;
+		    case hint_b_error:
+		      as_bad ("hint in B unit can't be used");
+		      break;
+		    }
+		}
+	      insn_unit = required_unit;
+	    }
 	  else if (strcmp (idesc->name, "chk.s") == 0
 	      || strcmp (idesc->name, "mov") == 0)
 	    {
@@ -6916,6 +6941,18 @@ md_parse_option (c, arg)
 	  else
 	    return 0;
 	}
+      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;
@@ -7030,6 +7067,8 @@ IA-64 options:\n\
   -mle | -mbe		  select little- or big-endian byte order (default -mle)\n\
   -munwind-check=[warning|error]\n\
 			  unwind directive check (default -munwind-check=warning)\n\
+  -mhint.b=[ok|warning|error]\n\
+			  hint.b check (default -mhint.b=error)\n\
   -x | -xexplicit	  turn on dependency violation checking\n\
   -xauto		  automagically remove dependency violations (default)\n\
   -xnone		  turn off dependency violation checking\n\
@@ -7382,6 +7421,7 @@ ia64_init (argc, argv)
   md.detect_dv = 1;
   /* FIXME: We should change it to unwind_check_error someday.  */
   md.unwind_check = unwind_check_warning;
+  md.hint_b = hint_b_error;
 }
 
 /* Return a string for the target object file format.  */
@@ -10597,6 +10637,20 @@ md_assemble (str)
 		    TOUPPER (unit));
 	}
     }
+  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)
--- gas/doc/as.texinfo.hint	2005-02-11 13:18:37.000000000 -0800
+++ gas/doc/as.texinfo	2005-02-15 09:31:11.000000000 -0800
@@ -316,6 +316,7 @@ gcc(1), ld(1), and the Info entries for 
    [@b{-milp32}|@b{-milp64}|@b{-mlp64}|@b{-mp64}]
    [@b{-mle}|@b{mbe}]
    [@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}]
 @end ifset
 @ifset IP2K
--- gas/doc/c-ia64.texi.hint	2005-02-14 09:31:17.000000000 -0800
+++ gas/doc/c-ia64.texi	2005-02-16 17:32:58.012348846 -0800
@@ -73,6 +73,15 @@ will make the assembler issue a warning 
 fails.  This is the default.  @code{-munwind-check=error} will make the
 assembler issue an error when an unwind directive check fails.
 
+@item -mhint.b=ok
+@item -mhint.b=warning
+@item -mhint.b=error
+These options control what the assembler will do when the @samp{hint.b}
+instruction is used.  @code{-mhint.b=ok} will make the assembler accept
+@samp{hint.b}.  @code{-mint.b=warning} will make the assembler issue a
+warning when @samp{hint.b} is used.  @code{-mhint.b=error} will make
+the assembler treat @samp{hint.b} as an error, which is the default.
+
 @item -x
 @item -xexplicit
 These options turn on dependency violation checking.
--- gas/testsuite/gas/ia64/hint.b-err.l.hint	2005-02-15 09:31:11.000000000 -0800
+++ gas/testsuite/gas/ia64/hint.b-err.l	2005-02-15 09:31:11.000000000 -0800
@@ -0,0 +1,3 @@
+.*: Assembler messages:
+.*:1: Error: hint.b shouldn't be used
+.*:2: Error: hint.b shouldn't be used
--- gas/testsuite/gas/ia64/hint.b-err.s.hint	2005-02-15 09:31:11.000000000 -0800
+++ gas/testsuite/gas/ia64/hint.b-err.s	2005-02-15 09:31:11.000000000 -0800
@@ -0,0 +1,2 @@
+	hint.b	@pause
+	hint.b	0x1ffff
--- gas/testsuite/gas/ia64/hint.b-warn.l.hint	2005-02-15 09:31:11.000000000 -0800
+++ gas/testsuite/gas/ia64/hint.b-warn.l	2005-02-15 09:31:11.000000000 -0800
@@ -0,0 +1,3 @@
+.*: Assembler messages:
+.*:1: Warning: hint.b may be treated as nop
+.*:2: Warning: hint.b may be treated as nop
--- gas/testsuite/gas/ia64/hint.b-warn.s.hint	2005-02-15 09:31:11.000000000 -0800
+++ gas/testsuite/gas/ia64/hint.b-warn.s	2005-02-15 09:31:11.000000000 -0800
@@ -0,0 +1,2 @@
+	hint.b	@pause
+	hint.b	0x1ffff
--- gas/testsuite/gas/ia64/ia64.exp.hint	2005-02-15 09:30:35.000000000 -0800
+++ gas/testsuite/gas/ia64/ia64.exp	2005-02-15 09:31:11.000000000 -0800
@@ -78,4 +78,6 @@ if [istarget "ia64-*"] then {
     run_list_test "slot2" ""
     run_list_test "unwind-err" "-munwind-check=error"
     run_dump_test "operand-or"
+    run_list_test "hint.b-err" ""
+    run_list_test "hint.b-warn" "-mhint.b=warning"
 }
--- gas/testsuite/gas/ia64/opc-b.d.hint	2005-02-14 09:31:17.000000000 -0800
+++ gas/testsuite/gas/ia64/opc-b.d	2005-02-15 09:31:11.000000000 -0800
@@ -1,4 +1,4 @@
-#as: -xnone
+#as: -xnone -mhint.b=ok
 #objdump: -d
 #name: ia64 opc-b
 

  reply	other threads:[~2005-02-17  2:02 UTC|newest]

Thread overview: 9+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2005-02-17  0:10 H. J. Lu
2005-02-17  3:37 ` James E Wilson
2005-02-17 12:37   ` H. J. Lu [this message]
2005-02-17 13:05     ` H. J. Lu
2005-02-17 21:42       ` H. J. Lu
2005-02-17 21:47         ` H. J. Lu
2005-02-18  0:13         ` James E Wilson
2005-02-18  2:05           ` H. J. Lu
2005-02-18  4:43             ` James E Wilson

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20050217020214.GA24401@lucon.org \
    --to=hjl@lucon.org \
    --cc=binutils@sources.redhat.com \
    --cc=wilson@specifixinc.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).