static void
svp64_operand (expressionS *exp)
{
+ bool caret = false;
bool vector = false;
bool compat = false;
char *origin = input_line_pointer;
else
++input_line_pointer;
}
+ else if (input_line_pointer[0] == '^')
+ {
+ caret = true;
+ ++input_line_pointer;
+ }
if (!vector && !compat && !reg_names_p &&
(input_line_pointer[0] != '%' || !ISALPHA (input_line_pointer[1])))
if (exp->X_op == O_absent)
input_line_pointer = origin;
- else if (vector &&
- ((exp->X_op == O_register) || (exp->X_op == O_constant)))
+ else if (exp->X_op == O_register)
+ {
+ if (caret)
+ {
+ if (exp->X_add_number == 3)
+ {
+ exp->X_op = O_predicate;
+ exp->X_add_number = SVP64_PREDICATE_1BIT_R3;
+ }
+ else
+ exp->X_op = O_illegal;
+ }
+ else if (vector)
+ exp->X_op = O_vector;
+ }
+ else if ((exp->X_op == O_constant) && vector)
exp->X_op = O_vector;
if (compat)