aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gas/ChangeLog9
-rw-r--r--gas/config/tc-xtensa.c20
2 files changed, 29 insertions, 0 deletions
diff --git a/gas/ChangeLog b/gas/ChangeLog
index 69e117c..f47deba 100644
--- a/gas/ChangeLog
+++ b/gas/ChangeLog
@@ -1,3 +1,12 @@
+2020-04-29 Max Filippov <jcmvbkbc@gmail.com>
+
+ * config/tc-xtensa.c (XTENSA_MARCH_EARLIEST): Define macro as 0
+ if it's not defined.
+ (microarch_earliest): New static variable.
+ (xg_translate_idioms): Translate "simcall" to "simcall 0" when
+ simcall opcode has mandatory parameter.
+ (xg_init_global_config): Initialize microarch_earliest.
+
2020-04-29 Nick Clifton <nickc@redhat.com>
PR 22699
diff --git a/gas/config/tc-xtensa.c b/gas/config/tc-xtensa.c
index ee75c13..14a5a2a 100644
--- a/gas/config/tc-xtensa.c
+++ b/gas/config/tc-xtensa.c
@@ -35,6 +35,10 @@
#define XSHAL_ABI 0
#endif
+#ifndef XTENSA_MARCH_EARLIEST
+#define XTENSA_MARCH_EARLIEST 0
+#endif
+
#ifndef uint32
#define uint32 unsigned int
#endif
@@ -74,6 +78,8 @@ const char FLT_CHARS[] = "rRsSfFdDxXpP";
bfd_boolean density_supported;
bfd_boolean absolute_literals_supported;
+static unsigned microarch_earliest;
+
static vliw_insn cur_vinsn;
unsigned xtensa_num_pipe_stages;
@@ -2502,6 +2508,18 @@ xg_translate_idioms (char **popname, int *pnum_args, char **arg_strings)
return 0;
}
+ /* Without an operand, this is given a default immediate operand of 0. */
+ if ((strcmp (opname, "simcall") == 0 && microarch_earliest >= 280000))
+ {
+ if (*pnum_args == 0)
+ {
+ arg_strings[0] = (char *) xmalloc (2);
+ strcpy (arg_strings[0], "0");
+ *pnum_args = 1;
+ }
+ return 0;
+ }
+
if (strcmp (opname, "bbsi.l") == 0)
{
if (xg_check_num_args (pnum_args, 3, opname, arg_strings))
@@ -5236,6 +5254,8 @@ xg_init_global_config (void)
directive_state[directive_density] = XCHAL_HAVE_DENSITY;
directive_state[directive_absolute_literals] = XSHAL_USE_ABSOLUTE_LITERALS;
+
+ microarch_earliest = XTENSA_MARCH_EARLIEST;
}
void