[v3,1/3] Revert "gas: drop scrubber states 14 and 15"

Message ID 20240812151251.2315001-2-hjl.tools@gmail.com
State Superseded
Headers
Series Restore the original macro behaviors |

Checks

Context Check Description
linaro-tcwg-bot/tcwg_binutils_build--master-arm fail Patch failed to apply
linaro-tcwg-bot/tcwg_binutils_build--master-aarch64 fail Patch failed to apply

Commit Message

H.J. Lu Aug. 12, 2024, 3:12 p.m. UTC
  This reverts commit 7dd0dfbde7ee31167a3b2e192a575493d26b7b0a.

This is a prerequisite for the PR gas/32073 fix.
---
 gas/app.c             | 29 +++++++++++++++++++++++++++++
 gas/config/tc-ia64.h  |  3 +++
 gas/config/tc-tic6x.h |  2 ++
 3 files changed, 34 insertions(+)
  

Patch

diff --git a/gas/app.c b/gas/app.c
index a47276e4816..b88b4c96137 100644
--- a/gas/app.c
+++ b/gas/app.c
@@ -485,6 +485,12 @@  do_scrub_chars (size_t (*get) (char *, size_t), char *tostart, size_t tolen,
 	 13: After seeing a vertical bar, looking for a second
 	     vertical bar as a parallel expression separator.
 #endif
+#ifdef TC_PREDICATE_START_CHAR
+	 14: After seeing a predicate start character at state 0, looking
+	     for a predicate end character as predicate.
+	 15: After seeing a predicate start character at state 1, looking
+	     for a predicate end character as predicate.
+#endif
 #ifdef TC_Z80
 	 16: After seeing an 'a' or an 'A' at the start of a symbol
 	 17: After seeing an 'f' or an 'F' in state 16
@@ -771,6 +777,29 @@  do_scrub_chars (size_t (*get) (char *, size_t), char *tostart, size_t tolen,
       /* flushchar: */
       ch = GET ();
 
+#ifdef TC_PREDICATE_START_CHAR
+      if (ch == TC_PREDICATE_START_CHAR && (state == 0 || state == 1))
+	{
+	  state += 14;
+	  PUT (ch);
+	  continue;
+	}
+      else if (state == 14 || state == 15)
+	{
+	  if (ch == TC_PREDICATE_END_CHAR)
+	    {
+	      state -= 14;
+	      PUT (ch);
+	      ch = GET ();
+	    }
+	  else
+	    {
+	      PUT (ch);
+	      continue;
+	    }
+	}
+#endif
+
     recycle:
 
 #if defined TC_ARM && defined OBJ_ELF
diff --git a/gas/config/tc-ia64.h b/gas/config/tc-ia64.h
index 665272adde3..8ab05373f6e 100644
--- a/gas/config/tc-ia64.h
+++ b/gas/config/tc-ia64.h
@@ -78,6 +78,9 @@  extern const char *ia64_target_format (void);
 #define LEX_QM		(LEX_NAME|LEX_BEGIN_NAME) /* allow `?' inside name */
 #define LEX_HASH	LEX_END_NAME	/* allow `#' ending a name */
 
+#define TC_PREDICATE_START_CHAR '('
+#define TC_PREDICATE_END_CHAR ')'
+
 extern const char ia64_symbol_chars[];
 #define tc_symbol_chars ia64_symbol_chars
 
diff --git a/gas/config/tc-tic6x.h b/gas/config/tc-tic6x.h
index f21673e2d36..0b4223961e9 100644
--- a/gas/config/tc-tic6x.h
+++ b/gas/config/tc-tic6x.h
@@ -24,6 +24,8 @@ 
 #define DOUBLEBAR_PARALLEL
 #define DWARF2_LINE_MIN_INSN_LENGTH 2
 #define MD_APPLY_SYM_VALUE(FIX) 0
+#define TC_PREDICATE_START_CHAR '['
+#define TC_PREDICATE_END_CHAR ']'
 /* For TI C6X, we keep spaces in what the preprocessor considers
    operands as they may separate functional unit specifiers from
    operands.  */