ppc/svp64: determine instruction Rc mode
authorDmitry Selyutin <ghostmansd@gmail.com>
Mon, 25 Jul 2022 19:22:15 +0000 (22:22 +0300)
committerDmitry Selyutin <ghostmansd@gmail.com>
Fri, 23 Sep 2022 17:11:54 +0000 (20:11 +0300)
gas/config/tc-ppc-svp64.c

index 7b43a37c1383484df47c8ad11a47ea82b003cfb0..21f6014d0048f3f9f08db5b05a71245d9a2c6101 100644 (file)
@@ -47,6 +47,7 @@ struct svp64_ctx {
   unsigned int crm : 1;
   unsigned int svm : 1;
   unsigned int type : 2;
+  unsigned int rc : 1;
 };
 
 #define SVP64_RC1_ACTIVE (1U << 3U)
@@ -713,6 +714,12 @@ svp64_is_bc(const char *str, size_t len)
   return SVP64_STR_MAP_CMP(str, len, table);
 }
 
+static inline bool
+svp64_is_rc (const char *str, size_t len)
+{
+  return (str[len - 1] == '.');
+}
+
 static void
 svp64_decode (char *str, struct svp64_ctx *svp64)
 {
@@ -731,6 +738,9 @@ svp64_decode (char *str, struct svp64_ctx *svp64)
   if (*str != '\0')
     *str++ = '\0';
 
+  if (svp64_is_rc (opc, opclen))
+    svp64->rc = 1;
+
   if (svp64_is_ld (opc, opclen))
     svp64->type = SVP64_TYPE_LD;
   else if (svp64_is_st (opc, opclen))