From b5f4d392b15ef8a38f3bc0922573025fb128af92 Mon Sep 17 00:00:00 2001 From: Dmitry Selyutin Date: Mon, 29 May 2023 01:04:56 +0300 Subject: [PATCH] ppc/svp64: support mr/mrr modes --- gas/config/tc-ppc-svp64.c | 37 +++++++++++++++++++++++++++++++++++++ 1 file changed, 37 insertions(+) diff --git a/gas/config/tc-ppc-svp64.c b/gas/config/tc-ppc-svp64.c index 0da55638c6a..2ee9dd5f965 100644 --- a/gas/config/tc-ppc-svp64.c +++ b/gas/config/tc-ppc-svp64.c @@ -44,6 +44,8 @@ struct svp64_ctx { unsigned int dz : 1; unsigned int sz : 1; unsigned int ff : 3 + 2; /* 3-bit plus RC1 */ + unsigned int mr : 1; + unsigned int RG : 1; }; #define SVP64_RC1_ACTIVE (1U << 3U) @@ -489,6 +491,39 @@ svp64_decode_ff (char *str, struct svp64_ctx *svp64) return iter; } +static char * +svp64_decode_mr (char *str, struct svp64_ctx *svp64) +{ + str += (sizeof ("mr") - 1); + if ( ! ISSPACE (*str) && *str != SVP64_SEP && *str != '\0') + return NULL; + + svp64->sv_mode_explicit = 1; + svp64->sv_mode = 0; + svp64->mr = 1; + + *str++ = '\0'; + + return str; +} + +static char * +svp64_decode_mrr (char *str, struct svp64_ctx *svp64) +{ + str += (sizeof ("mrr") - 1); + if ( ! ISSPACE (*str) && *str != SVP64_SEP && *str != '\0') + return NULL; + + svp64->sv_mode_explicit = 1; + svp64->sv_mode = 0; + svp64->mr = 1; + svp64->RG = 1; + + *str++ = '\0'; + + return str; +} + static char * svp64_decode_mode (char *str, struct svp64_ctx *svp64) { @@ -511,6 +546,8 @@ svp64_decode_mode (char *str, struct svp64_ctx *svp64) SVP64_DECODER ("dz" , svp64_decode_dz), SVP64_DECODER ("sz" , svp64_decode_sz), SVP64_DECODER ("ff=" , svp64_decode_ff), + SVP64_DECODER ("mrr" , svp64_decode_mrr), + SVP64_DECODER ("mr" , svp64_decode_mr), }; for (i = 0; i < sizeof (table) / sizeof (table[0]); ++i) -- 2.30.2