ppc/svp64: reuse md_parse_name in md_operand
authorDmitry Selyutin <ghostmansd@gmail.com>
Sun, 28 May 2023 22:04:56 +0000 (01:04 +0300)
committerDmitry Selyutin <ghostmansd@gmail.com>
Tue, 14 Nov 2023 19:53:35 +0000 (22:53 +0300)
gas/config/tc-ppc-svp64.c
gas/config/tc-ppc.c

index bf49d38f0a91d229100748080d4f5e37611e2636..6065204bf689537e283ecc932a81232907179fa7 100644 (file)
@@ -313,7 +313,7 @@ svp64_parse_name (const char *name, expressionS *exp, enum expr_mode mode)
 
   if ((svp64_parse_predicate_cr (name, exp)
       || svp64_parse_predicate_RC1 (name, exp)) == 0)
-    ppc_parse_name_common (name, exp, mode, svp64_regs, svp64_num_regs);
+    ppc_parse_name_common (name, exp, mode, false, svp64_regs, svp64_num_regs);
 }
 
 static char *
index 06aff47890d07d98a2ff3e1d2720e2033d7c94b2..6cddf0f007c8ba673b9dd4ec0eaa7c03dedb4e22 100644 (file)
@@ -49,7 +49,7 @@ ppc_operand_common (expressionS *expressionP,
 
 static void
 ppc_parse_name_common (const char *name,
-    expressionS *exp, enum expr_mode mode,
+    expressionS *exp, enum expr_mode mode, bool operand,
     const struct powerpc_pd_reg *regs, size_t num);
 
 static void
@@ -839,23 +839,15 @@ reg_name_search (const struct powerpc_pd_reg *regs, int regcount, const char *na
 /* Called for a non-symbol, non-number operand.  Handles %reg.  */
 
 static void
-ppc_operand_common (expressionS *expressionP,
+ppc_operand_common (expressionS *exp,
     const struct powerpc_pd_reg *regs, size_t num)
 {
   char endc;
   char *name;
-  const struct powerpc_pd_reg *reg;
 
   endc = get_symbol_name (&name);
-  reg = reg_name_search (regs, num, name);
+  ppc_parse_name_common (name, exp, expr_normal, true, regs, num);
   restore_line_pointer (endc);
-
-  if (reg != NULL)
-    {
-      expressionP->X_op = O_register;
-      expressionP->X_add_number = reg->value;
-      expressionP->X_md = reg->flags;
-    }
 }
 
 static void
@@ -900,14 +892,14 @@ static const struct powerpc_pd_reg cr_cond[] =
 
 static void
 ppc_parse_name_common (const char *name,
-    expressionS *exp, enum expr_mode mode,
+    expressionS *exp, enum expr_mode mode, bool operand,
     const struct powerpc_pd_reg *regs, size_t num)
 {
   const struct powerpc_pd_reg *reg = NULL;
 
   if (cr_operand)
     reg = reg_name_search (cr_cond, ARRAY_SIZE (cr_cond), name);
-  if (reg == NULL && (cr_operand || reg_names_p))
+  if (reg == NULL && (operand || cr_operand || reg_names_p))
     reg = reg_name_search (regs, num, name);
   if (reg != NULL)
     {
@@ -955,7 +947,7 @@ ppc_parse_name_common (const char *name,
 static void
 ppc_parse_name_default (const char *name, expressionS *exp, enum expr_mode mode)
 {
-  ppc_parse_name_common (name, exp, mode,
+  ppc_parse_name_common (name, exp, mode, false,
     pre_defined_registers, ARRAY_SIZE (pre_defined_registers));
 }