xtensa: gas: support optional immediate simcall parameter

Message ID 20200428121250.32141-1-jcmvbkbc@gmail.com
State New
Headers show
Series
  • xtensa: gas: support optional immediate simcall parameter
Related show

Commit Message

Alan Modra via Binutils April 28, 2020, 12:12 p.m.
Starting with RH.0 release Xtensa ISA adds immediate parameter to
simcall opcode. For assembly source compatibility treat "simcall"
instruction without parameter as "simcall 0" when parameter is required.

2020-04-28  Max Filippov  <jcmvbkbc@gmail.com>
gas/
	* 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.
---
 gas/config/tc-xtensa.c | 20 ++++++++++++++++++++
 1 file changed, 20 insertions(+)

-- 
2.20.1

Patch

diff --git a/gas/config/tc-xtensa.c b/gas/config/tc-xtensa.c
index ee75c13548ff..14a5a2a9497e 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