[PATCH] [ARC] Don't check extAuxRegister second argument for sign.
Claudiu Zissulescu
Claudiu.Zissulescu@synopsys.com
Mon Dec 5 12:49:00 GMT 2016
In the original implementation, we check for the sign of the second
parsed argument regardless of the purpose, which is wrong for
extAuxRegister pseudo-op. Fix it and add a couple of tests.
Ok to apply?
Claudiu
gas/
2016-12-01 Claudiu Zissulescu <claziss@synopsys.com>
* testsuite/gas/arc/textauxregister-1.d: New file.
* testsuite/gas/arc/textauxregister-1.s: Likewise.
* testsuite/gas/arc/textcondcode-err.s: Likewise.
* testsuite/gas/arc/textcoreregister-err.s: Likewise.
* config/tc-arc.c (tokenize_extregister): Return bfd_boolean,
don't check second argument of extension auxiliary register for
signess.
(arc_extcorereg): Consider the return of tokenize_extregister
function call.
---
gas/config/tc-arc.c | 27 ++++++++++++++++-----------
gas/testsuite/gas/arc/textauxregister-1.d | 10 ++++++++++
gas/testsuite/gas/arc/textauxregister-1.s | 5 +++++
gas/testsuite/gas/arc/textcondcode-err.s | 2 ++
gas/testsuite/gas/arc/textcoreregister-err.s | 2 ++
5 files changed, 35 insertions(+), 11 deletions(-)
create mode 100644 gas/testsuite/gas/arc/textauxregister-1.d
create mode 100644 gas/testsuite/gas/arc/textauxregister-1.s
create mode 100644 gas/testsuite/gas/arc/textcondcode-err.s
create mode 100644 gas/testsuite/gas/arc/textcoreregister-err.s
diff --git a/gas/config/tc-arc.c b/gas/config/tc-arc.c
index a1577de..a03ba5f 100644
--- a/gas/config/tc-arc.c
+++ b/gas/config/tc-arc.c
@@ -4596,7 +4596,7 @@ arc_extinsn (int ignore ATTRIBUTE_UNUSED)
create_extinst_section (&einsn);
}
-static void
+static bfd_boolean
tokenize_extregister (extRegister_t *ereg, int opertype)
{
char *name;
@@ -4621,20 +4621,23 @@ tokenize_extregister (extRegister_t *ereg, int opertype)
if (*input_line_pointer != ',')
{
- as_bad (_("expected comma after register name"));
+ as_bad (_("expected comma after name"));
ignore_rest_of_line ();
free (name);
- return;
+ return FALSE;
}
input_line_pointer++;
number = get_absolute_expression ();
- if (number < 0)
+ if ((number < 0)
+ && (opertype != EXT_AUX_REGISTER))
{
- as_bad (_("negative operand number %d"), number);
+ as_bad (_("%s second argument cannot be a negative number %d"),
+ isCore_p ? "extCoreRegister's" : "extCondCode's",
+ number);
ignore_rest_of_line ();
free (name);
- return;
+ return FALSE;
}
if (isReg_p)
@@ -4647,7 +4650,7 @@ tokenize_extregister (extRegister_t *ereg, int opertype)
as_bad (_("expected comma after register number"));
ignore_rest_of_line ();
free (name);
- return;
+ return FALSE;
}
input_line_pointer++;
@@ -4668,7 +4671,7 @@ tokenize_extregister (extRegister_t *ereg, int opertype)
as_bad (_("invalid mode"));
ignore_rest_of_line ();
free (name);
- return;
+ return FALSE;
}
else
{
@@ -4686,7 +4689,7 @@ tokenize_extregister (extRegister_t *ereg, int opertype)
as_bad (_("expected comma after register mode"));
ignore_rest_of_line ();
free (name);
- return;
+ return FALSE;
}
input_line_pointer++;
@@ -4701,7 +4704,7 @@ tokenize_extregister (extRegister_t *ereg, int opertype)
as_bad (_("shortcut designator invalid"));
ignore_rest_of_line ();
free (name);
- return;
+ return FALSE;
}
else
{
@@ -4713,6 +4716,7 @@ tokenize_extregister (extRegister_t *ereg, int opertype)
ereg->name = name;
ereg->number = number;
ereg->imode = imode;
+ return TRUE;
}
/* Create an extension register/condition description in the arc
@@ -4788,7 +4792,8 @@ arc_extcorereg (int opertype)
struct arc_flag_operand *ccode;
memset (&ereg, 0, sizeof (ereg));
- tokenize_extregister (&ereg, opertype);
+ if (!tokenize_extregister (&ereg, opertype))
+ return;
switch (opertype)
{
diff --git a/gas/testsuite/gas/arc/textauxregister-1.d b/gas/testsuite/gas/arc/textauxregister-1.d
new file mode 100644
index 0000000..ce8e52e
--- /dev/null
+++ b/gas/testsuite/gas/arc/textauxregister-1.d
@@ -0,0 +1,10 @@
+#objdump: -dr
+
+.*: +file format .*arc.*
+
+
+Disassembly of section .text:
+
+[0-9a-f]+ <.text>:
+\s+0:\s+222a 0f80 8001 8000\s+lr\s+r2,\[myreg1\]
+\s+8:\s+21aa 003c\s+lr\s+r1,\[myreg2\]
diff --git a/gas/testsuite/gas/arc/textauxregister-1.s b/gas/testsuite/gas/arc/textauxregister-1.s
new file mode 100644
index 0000000..b4c5ead
--- /dev/null
+++ b/gas/testsuite/gas/arc/textauxregister-1.s
@@ -0,0 +1,5 @@
+ .extAuxRegister myreg1, 0x80018000, r|w
+ .extAuxRegister myreg2, -256, r|w
+
+ lr r2, [myreg1]
+ lr r1, [myreg2]
diff --git a/gas/testsuite/gas/arc/textcondcode-err.s b/gas/testsuite/gas/arc/textcondcode-err.s
new file mode 100644
index 0000000..0a0a954
--- /dev/null
+++ b/gas/testsuite/gas/arc/textcondcode-err.s
@@ -0,0 +1,2 @@
+; { dg-do assemble { target arc*-*-* } }
+ .extCondCode cctst, -12 ; { dg-error "Error: extCondCode's second argument cannot be a negative number -12" }
diff --git a/gas/testsuite/gas/arc/textcoreregister-err.s b/gas/testsuite/gas/arc/textcoreregister-err.s
new file mode 100644
index 0000000..2b7d918
--- /dev/null
+++ b/gas/testsuite/gas/arc/textcoreregister-err.s
@@ -0,0 +1,2 @@
+; { dg-do assemble { target arc*-*-* } }
+ .extCoreRegister r32c, -32, r|w, can_shortcut ; { dg-error "Error: extCoreRegister's second argument cannot be a negative number -32" }
--
1.9.1
More information about the Binutils
mailing list