From 65d41fb015af0048347a25d0665bb1263eb982b0 Mon Sep 17 00:00:00 2001 From: "H.J. Lu" Date: Mon, 12 Aug 2024 08:43:20 -0700 Subject: [PATCH] Revert "gas: drop scrubber states 14 and 15" 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(+) 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. */ -- 2.39.5