This is the mail archive of the
mailing list for the binutils project.
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.
- From: Rinat Zelig <rinat at mellanox dot com>
- To: Claudiu Zissulescu <Claudiu dot Zissulescu at synopsys dot com>, "binutils at sourceware dot org" <binutils at sourceware dot org>
- Cc: "Cupertino dot Miranda at synopsys dot com" <Cupertino dot Miranda at synopsys dot com>, "Noam Camus" <noamca at mellanox dot com>, Andrew Burgess <andrew dot burgess at embecosm dot com>, Rinat Zelig <rinat at mellanox dot com>
- Date: Sun, 12 Mar 2017 12:37:23 +0000
- Subject: 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.
- Authentication-results: sourceware.org; auth=none
- Authentication-results: synopsys.com; dkim=none (message not signed) header.d=none;synopsys.com; dmarc=none action=none header.from=mellanox.com;
- References: <firstname.lastname@example.org>
- Spamdiagnosticmetadata: NSPM
- Spamdiagnosticoutput: 1:99
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.
* config/tc-arc.c (assemble_insn): Only handle ".t" and ".nt"
specially for ARCv2.
Signed-off-by: rinat zelig <email@example.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
@@ -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. */