Fix parsing of 'vmov Q<n>.F32,Q<n>.F32' instruction.
parse_qfloat_immediate() accidentaly parses register with size qualifier as immediate constant (It takes '<n>.' substring as valid floating point constant). Due to this, slightly reorder cases in parse_neon_mov() and move parsing of vmov with immediate constant to last place. MFC after: 2 weeks
This commit is contained in:
parent
679ea09441
commit
7f20e1614f
@ -5211,12 +5211,6 @@ parse_neon_mov (char **str, int *which_operand)
|
||||
inst.operands[i].present = 1;
|
||||
}
|
||||
}
|
||||
else if (parse_qfloat_immediate (&ptr, &inst.operands[i].imm) == SUCCESS)
|
||||
/* Case 2: VMOV<c><q>.<dt> <Qd>, #<float-imm>
|
||||
Case 3: VMOV<c><q>.<dt> <Dd>, #<float-imm>
|
||||
Case 10: VMOV.F32 <Sd>, #<imm>
|
||||
Case 11: VMOV.F64 <Dd>, #<imm> */
|
||||
inst.operands[i].immisfloat = 1;
|
||||
else if ((val = arm_typed_reg_parse (&ptr, REG_TYPE_NSDQ, &rtype,
|
||||
&optype)) != FAIL)
|
||||
{
|
||||
@ -5253,9 +5247,15 @@ parse_neon_mov (char **str, int *which_operand)
|
||||
|
||||
inst.operands[i].reg = val;
|
||||
inst.operands[i].isreg = 1;
|
||||
inst.operands[i++].present = 1;
|
||||
inst.operands[i].present = 1;
|
||||
}
|
||||
}
|
||||
else if (parse_qfloat_immediate (&ptr, &inst.operands[i].imm) == SUCCESS)
|
||||
/* Case 2: VMOV<c><q>.<dt> <Qd>, #<float-imm>
|
||||
Case 3: VMOV<c><q>.<dt> <Dd>, #<float-imm>
|
||||
Case 10: VMOV.F32 <Sd>, #<imm>
|
||||
Case 11: VMOV.F64 <Dd>, #<imm> */
|
||||
inst.operands[i].immisfloat = 1;
|
||||
else if (parse_big_immediate (&ptr, i) == SUCCESS)
|
||||
/* Case 2: VMOV<c><q>.<dt> <Qd>, #<imm>
|
||||
Case 3: VMOV<c><q>.<dt> <Dd>, #<imm> */
|
||||
@ -5337,7 +5337,7 @@ parse_neon_mov (char **str, int *which_operand)
|
||||
inst.operands[i].isvec = 1;
|
||||
inst.operands[i].issingle = 1;
|
||||
inst.operands[i].vectype = optype;
|
||||
inst.operands[i++].present = 1;
|
||||
inst.operands[i].present = 1;
|
||||
}
|
||||
}
|
||||
else
|
||||
|
Loading…
Reference in New Issue
Block a user