ppc/svp64: reuse md_parse_name in md_operand
authorDmitry Selyutin <ghostmansd@gmail.com>
Tue, 11 Apr 2023 18:27:25 +0000 (21:27 +0300)
committerDmitry Selyutin <ghostmansd@gmail.com>
Wed, 26 Apr 2023 16:47:42 +0000 (19:47 +0300)
gas/config/tc-ppc-svp64.c
gas/config/tc-ppc.c

index 733c1f95cc925fff9161c1eb6a6218839c68273f..fe79618d8876452c17f88b6c11f29e944ae4558b 100644 (file)
@@ -289,7 +289,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 1d3d12571f015cf3cd7f0d5fc44b64edd22576fe..ff0b4d35b08b5a7ff0856527b1625a1851148225 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));
 }