summaryrefslogtreecommitdiffstats
path: root/contrib/binutils
diff options
context:
space:
mode:
authorandrew <andrew@FreeBSD.org>2013-03-18 07:41:08 +0000
committerandrew <andrew@FreeBSD.org>2013-03-18 07:41:08 +0000
commite0722a1284e9361c5be0754fbb14d19b7e6335ae (patch)
treecc3b6d3fc1c2af4df647f85fc8eccf6f7db9ca91 /contrib/binutils
parent77164fe10d3ee7bf872f7b2a726b6b200c25a3d2 (diff)
downloadFreeBSD-src-e0722a1284e9361c5be0754fbb14d19b7e6335ae.zip
FreeBSD-src-e0722a1284e9361c5be0754fbb14d19b7e6335ae.tar.gz
Some ARM vmov similar to 'vmov.f32 s1, s2' will incorrectly have the second
register added to the symbol table by the assembler. On further investigation it was found the problem was with the my_get_expression function. This is called by parse_big_immediate. Fix this by moving the call to parse_big_immediate to the end of the if, else if, ..., else block.
Diffstat (limited to 'contrib/binutils')
-rw-r--r--contrib/binutils/gas/config/tc-arm.c8
1 files changed, 4 insertions, 4 deletions
diff --git a/contrib/binutils/gas/config/tc-arm.c b/contrib/binutils/gas/config/tc-arm.c
index daaae00..83e5433 100644
--- a/contrib/binutils/gas/config/tc-arm.c
+++ b/contrib/binutils/gas/config/tc-arm.c
@@ -5164,10 +5164,6 @@ parse_neon_mov (char **str, int *which_operand)
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> */
- ;
else if ((val = arm_typed_reg_parse (&ptr, REG_TYPE_NSDQ, &rtype,
&optype)) != FAIL)
{
@@ -5207,6 +5203,10 @@ parse_neon_mov (char **str, int *which_operand)
inst.operands[i++].present = 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> */
+ ;
else
{
first_error (_("expected <Rm> or <Dm> or <Qm> operand"));
OpenPOWER on IntegriCloud