gas/arc: Limit special handling of t/nt flag to ARCv2
authorRinat Zelig <rinat@mellanox.com>
Thu, 16 Mar 2017 10:05:22 +0000 (10:05 +0000)
committerAndrew Burgess <andrew.burgess@embecosm.com>
Thu, 16 Mar 2017 10:07:22 +0000 (10:07 +0000)
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.

gas/ChangeLog
gas/config/tc-arc.c

index 58a732728bbc78e5f512bc8fb42a3e646be6e2bb..cf5166718fdeb9026801c5d4b634ea213cb09877 100644 (file)
@@ -1,3 +1,8 @@
+2017-03-16  Rinat Zelig  <rinat@mellanox.com>
+
+       * config/tc-arc.c (assemble_insn): Only handle ".t" and ".nt"
+       specially for ARCv2.
+
 2017-03-14  Kito Cheng  <kito.cheng@gmail.com>
 
        * config/tc-riscv.c (validate_riscv_insn): Add 'o' RVC immediate
index a1fd71d7f6cd05d39497c045bc002ffd0aef38c3..f806ca3f8aa663ee2d996cfa565a4fd95419ffdf 100644 (file)
@@ -4010,11 +4010,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_ARCV2)
+         && (!strcmp (flg_operand->name, "t")
+             || !strcmp (flg_operand->name, "nt")))
        {
          unsigned bitYoperand = 0;
          /* FIXME! move selection bbit/brcc in arc-opc.c.  */