FW: [PATCH 1/2] In the ARC assembler we have some special flag handling for the ".t" and ".nt" flags which only really applies to ARCv2, though currently the check is performed for all architectures.

Rinat Zelig rinat@mellanox.com
Sun Mar 12 12:37:00 GMT 2017


Hi,

In a later commit I'll be adding a new version of the ".nt" flag for an
ARC700 extension (NPS400) which does not require this same special handling.

In this commit I have restricted the special flag handling to only apply if we are assembling for ARCv2.  This is a restructuring commit, and there should be no user visible changes after this commit.

gas/ChangeLog:

	* config/tc-arc.c (assemble_insn): Only handle ".t" and ".nt"
	specially for ARCv2.

Signed-off-by: rinat zelig <rinat@mellanox.com>
---
 gas/config/tc-arc.c |   18 +++++++++++++-----
 1 files changed, 13 insertions(+), 5 deletions(-)

diff --git a/gas/config/tc-arc.c b/gas/config/tc-arc.c index 9a3b26b..13b4f4b 100644
--- a/gas/config/tc-arc.c
+++ b/gas/config/tc-arc.c
@@ -3992,11 +3992,19 @@ assemble_insn (const struct arc_opcode *opcode,
       if (!strcmp (flg_operand->name, "d"))
 	has_delay_slot = TRUE;
 
-      /* There is an exceptional case when we cannot insert a flag
-	 just as it is.  The .T flag must be handled in relation with
-	 the relative address.  */
-      if (!strcmp (flg_operand->name, "t")
-	  || !strcmp (flg_operand->name, "nt"))
+      /* There is an exceptional case when we cannot insert a flag just as
+	 it is.  On ARCv2 the '.t' and '.nt' flags must be handled in
+	 relation with the relative address.  Unfortunately, some of the
+	 ARC700 extensions (NPS400) also have a '.nt' flag that should be
+	 handled in the normal way.
+
+	 Flag operands don't have an architecture field, so we can't
+	 directly validate that FLAG_OPERAND is valid for the current
+	 architecture, what we do instead is just validate that we're
+	 assembling for an ARCv2 architecture.   */
+      if ((selected_cpu.flags & (ARC_OPCODE_ARCv2EM | ARC_OPCODE_ARCv2HS))
+	  && (!strcmp (flg_operand->name, "t")
+	      || !strcmp (flg_operand->name, "nt")))
 	{
 	  unsigned bitYoperand = 0;
 	  /* FIXME! move selection bbit/brcc in arc-opc.c.  */
--
1.7.1



More information about the Binutils mailing list