ppc/svp64: allow predicate macro expansion
[binutils-gdb.git] / gas / config / tc-ppc.c
index f3d3f04054d3d56a78839a945464ec650dae2a8d..5aa4722c9c7dab5391b9d99ef3ec832447a96c45 100644 (file)
@@ -961,8 +961,11 @@ ppc_resolve_symbol (symbolS *sym ATTRIBUTE_UNUSED,
     case O_vector:
       *seg = reg_section;
       break;
+    case O_predicate:
+      *seg = absolute_section;
+      break;
     default:
-      abort ();
+      abort();
     }
 
   return true;
@@ -1015,6 +1018,16 @@ ppc_optimize_expr (expressionS *left, operatorT op, expressionS *right)
     {
       if (op == O_add && left->X_op == O_constant)
        left->X_md = right->X_md;
+      else if ((ppc_cpu & PPC_OPCODE_SVP64)
+         && (op == O_left_shift)
+         && (left->X_op == O_constant)
+         && (left->X_add_number == 1)
+         && (right->X_add_number == 3)) /* 1<<r3 */
+       {
+         left->X_op = O_predicate;
+         left->X_add_number = SVP64_PREDICATE_1BIT_R3;
+         return 1;
+       }
       else
        as_warn (_("invalid register expression"));
     }