ppc/svp64: support vec2/vec3/vec4 modes
authorDmitry Selyutin <ghostmansd@gmail.com>
Sun, 10 Jul 2022 06:30:03 +0000 (09:30 +0300)
committerDmitry Selyutin <ghostmansd@gmail.com>
Fri, 23 Sep 2022 17:11:54 +0000 (20:11 +0300)
gas/config/tc-ppc-svp64.c

index b83dbc881f84acd07da3dde73a971f4361f503b7..cae359f1f003083e1fe71a59595d5d499c5d7987 100644 (file)
@@ -209,6 +209,39 @@ svp64_decode_sm (char *str, struct svp64_ctx *svp64)
   return iter;
 }
 
+static char *
+svp64_decode_vec (char *str, struct svp64_ctx *svp64)
+{
+  char *subvl;
+
+  str += (sizeof ("vec") - 1);
+  if ( ISSPACE (*str) || *str == SVP64_SEP || *str == '\0')
+    return NULL;
+
+  subvl = str++;
+  if ( ! ISSPACE (*str) && *str != SVP64_SEP && *str != '\0')
+    return NULL;
+
+  switch (*subvl)
+    {
+    case '2':
+      svp64->subvl = 1;
+      break;
+    case '3':
+      svp64->subvl = 2;
+      break;
+    case '4':
+      svp64->subvl = 3;
+      break;
+    default:
+      return NULL;
+    }
+
+  *str++ = '\0';
+
+  return str;
+}
+
 static char *
 svp64_decode_mode (char *str, struct svp64_ctx *svp64)
 {
@@ -217,6 +250,9 @@ svp64_decode_mode (char *str, struct svp64_ctx *svp64)
     SVP64_DECODER ("m="  , svp64_decode_m),
     SVP64_DECODER ("dm=" , svp64_decode_dm),
     SVP64_DECODER ("sm=" , svp64_decode_sm),
+    SVP64_DECODER ("vec2", svp64_decode_vec),
+    SVP64_DECODER ("vec3", svp64_decode_vec),
+    SVP64_DECODER ("vec4", svp64_decode_vec),
   };
 
   for (i = 0; i < sizeof (table) / sizeof (table[0]); ++i)