ppc/svp64: reuse md_parse_name in md_operand
authorDmitry Selyutin <ghostmansd@gmail.com>
Sun, 24 Jul 2022 19:04:32 +0000 (22:04 +0300)
committerDmitry Selyutin <ghostmansd@gmail.com>
Fri, 23 Sep 2022 18:13:32 +0000 (21:13 +0300)
gas/config/tc-ppc-svp64.c
gas/config/tc-ppc.c

index b5e16bb9abbeabfc13a22f9fb331b671c10b47b0..ec0fda793c8a15834a4c0fced5bb98ce7a5c51c5 100644 (file)
@@ -299,7 +299,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 5aa4722c9c7dab5391b9d99ef3ec832447a96c45..02d7f844f64756605eabbdf02643333c8b598359 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
@@ -829,23 +829,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
@@ -890,14 +882,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)
     {
@@ -945,7 +937,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));
 }