This is the mail archive of the
binutils@sourceware.org
mailing list for the binutils project.
[patch] misassembly of NEON logic ops
- From: Paul Brook <paul at codesourcery dot com>
- To: binutils at sourceware dot org
- Date: Wed, 6 Sep 2006 17:32:24 +0100
- Subject: [patch] misassembly of NEON logic ops
The attached patch fixes misassembly of some NEON logic ops.
vand d1, d2, d3
would be incorrectly encoded as
vand d1, d1, d3
The operand parsing routineparse two operands at once, but doesn't mark the
first as present. This means the encoding routine thinks we are dealing the
two-operand form.
Tested with cross to arm-none-eabi.
Ok?
Paul
2006-09-06 Paul Brook <paul@codesourcery.com>
gas/
* config/tc-arm.c (parse_operands): Mark operand as present.
gas/testsuite/
* gas/arm/neon-omit.s: Test three-argument variants.
* gas/arm/neon-omit.d: Update expected output.
Index: gas/config/tc-arm.c
===================================================================
RCS file: /var/cvsroot/src-cvs/src/gas/config/tc-arm.c,v
retrieving revision 1.250.2.29
diff -u -p -r1.250.2.29 tc-arm.c
--- gas/config/tc-arm.c 5 Sep 2006 20:23:46 -0000 1.250.2.29
+++ gas/config/tc-arm.c 6 Sep 2006 14:16:38 -0000
@@ -5565,6 +5565,7 @@ parse_operands (char *str, const unsigne
case OP_NILO:
{
po_reg_or_goto (REG_TYPE_NDQ, try_imm);
+ inst.operands[i].present = 1;
i++;
skip_past_comma (&str);
po_reg_or_goto (REG_TYPE_NDQ, one_reg_only);
Index: gas/testsuite/gas/arm/neon-omit.d
===================================================================
RCS file: /var/cvsroot/src-cvs/src/gas/testsuite/gas/arm/neon-omit.d,v
retrieving revision 1.1.2.2
diff -u -p -r1.1.2.2 neon-omit.d
--- gas/testsuite/gas/arm/neon-omit.d 5 Sep 2006 18:17:59 -0000 1.1.2.2
+++ gas/testsuite/gas/arm/neon-omit.d 6 Sep 2006 16:17:25 -0000
@@ -51,3 +51,45 @@ Disassembly of section .text:
0[0-9a-f]+ <[^>]+> f3954554 vsli\.16 q2, q2, #5
0[0-9a-f]+ <[^>]+> f3bff69f vqshlu\.s64 d15, d15, #63
0[0-9a-f]+ <[^>]+> f2b55306 vext\.8 d5, d5, d6, #3
+0[0-9a-f]+ <[^>]+> f3042746 vabd\.u8 q1, q2, q3
+0[0-9a-f]+ <[^>]+> f262c0c6 vhadd\.s32 q14, q9, q3
+0[0-9a-f]+ <[^>]+> f22a2144 vrhadd\.s32 q1, q5, q2
+0[0-9a-f]+ <[^>]+> f220a2ce vhsub\.s32 q5, q8, q7
+0[0-9a-f]+ <[^>]+> f318644a vshl\.u16 q3, q4, q5
+0[0-9a-f]+ <[^>]+> f32ca452 vqshl\.u32 q5, q6, q1
+0[0-9a-f]+ <[^>]+> f200e1dc vand q7, q8, q6
+0[0-9a-f]+ <[^>]+> f300e1dc veor q7, q8, q6
+0[0-9a-f]+ <[^>]+> f3b5a146 vceq\.i16 q5, q3, #0
+0[0-9a-f]+ <[^>]+> f316a85a vceq\.i16 q5, q3, q5
+0[0-9a-f]+ <[^>]+> f3b5a246 vclt\.s16 q5, q3, #0
+0[0-9a-f]+ <[^>]+> f2231a20 vpmax\.s32 d1, d3, d16
+0[0-9a-f]+ <[^>]+> f2275a34 vpmin\.s32 d5, d7, d20
+0[0-9a-f]+ <[^>]+> f3031f07 vpmax\.f32 d1, d3, d7
+0[0-9a-f]+ <[^>]+> f32c5f07 vpmin\.f32 d5, d12, d7
+0[0-9a-f]+ <[^>]+> f2162b60 vqdmulh\.s16 q1, q3, q8
+0[0-9a-f]+ <[^>]+> f3275b09 vqrdmulh\.s32 d5, d7, d9
+0[0-9a-f]+ <[^>]+> f39c2c6d vqdmulh\.s16 q1, q6, d5\[3\]
+0[0-9a-f]+ <[^>]+> f21620d6 vqadd\.s16 q1, q11, q3
+0[0-9a-f]+ <[^>]+> f227503f vqadd\.s32 d5, d7, d31
+0[0-9a-f]+ <[^>]+> f2242962 vmla\.i32 q1, q2, q9
+0[0-9a-f]+ <[^>]+> f21a3b94 vpadd\.i16 d3, d26, d4
+0[0-9a-f]+ <[^>]+> f328694a vmls\.i32 q3, q4, q5
+0[0-9a-f]+ <[^>]+> f3082e54 vacge\.f32 q1, q4, q2
+0[0-9a-f]+ <[^>]+> f3226e58 vacgt\.f32 q3, q1, q4
+0[0-9a-f]+ <[^>]+> f30cae72 vacge\.f32 q5, q6, q9
+0[0-9a-f]+ <[^>]+> f320eed2 vacgt\.f32 q7, q8, q1
+0[0-9a-f]+ <[^>]+> f320e3d6 vcge\.u32 q7, q8, q3
+0[0-9a-f]+ <[^>]+> f320e3c6 vcgt\.u32 q7, q8, q3
+0[0-9a-f]+ <[^>]+> f326e370 vcge\.u32 q7, q3, q8
+0[0-9a-f]+ <[^>]+> f326e360 vcgt\.u32 q7, q3, q8
+0[0-9a-f]+ <[^>]+> f3aa2102 vaddw\.u32 q1, q5, d2
+0[0-9a-f]+ <[^>]+> f2a26304 vsubw\.s32 q3, q1, d4
+0[0-9a-f]+ <[^>]+> f22648d6 vtst\.32 q2, q11, q3
+0[0-9a-f]+ <[^>]+> f20e1f92 vrecps\.f32 d1, d30, d2
+0[0-9a-f]+ <[^>]+> f29c207a vshr\.s16 q1, q13, #4
+0[0-9a-f]+ <[^>]+> f28b4272 vrshr\.s8 q2, q9, #5
+0[0-9a-f]+ <[^>]+> f39a6152 vsra\.u16 q3, q1, #6
+0[0-9a-f]+ <[^>]+> f3dae358 vrsra\.u16 q15, q4, #6
+0[0-9a-f]+ <[^>]+> f3954556 vsli\.16 q2, q3, #5
+0[0-9a-f]+ <[^>]+> f3bff6b7 vqshlu\.s64 d15, d23, #63
+0[0-9a-f]+ <[^>]+> f2b25386 vext\.8 d5, d18, d6, #3
Index: gas/testsuite/gas/arm/neon-omit.s
===================================================================
RCS file: /var/cvsroot/src-cvs/src/gas/testsuite/gas/arm/neon-omit.s,v
retrieving revision 1.1.2.2
diff -u -p -r1.1.2.2 neon-omit.s
--- gas/testsuite/gas/arm/neon-omit.s 5 Sep 2006 18:17:59 -0000 1.1.2.2
+++ gas/testsuite/gas/arm/neon-omit.s 6 Sep 2006 16:00:08 -0000
@@ -50,3 +50,48 @@
vsli.16 q2,#5
vqshlu.s64 d15,#63
vext.8 d5,d6,#3
+
+@ Also test three-argument forms without omitted arguments
+
+ vabd.u8 q1,q2,q3
+ vhadd.s32 q14,q9,q3
+ vrhadd.s32 q1,q5,q2
+ vhsub.s32 q5,q8,q7
+ vshl.u16 q3,q4,q5
+ vqshl.u32 q5,q6,q1
+ vand.64 q7,q8,q6
+ veor.64 q7,q8,q6
+ vceq.i16 q5,q3,#0
+ vceq.i16 q5,q3,q5
+ vclt.s16 q5,q3,#0
+ vpmax.s32 d1,d3,d16
+ vpmin.s32 d5,d7,d20
+ vpmax.f32 d1,d3,d7
+ vpmin.f32 d5,d12,d7
+ vqdmulh.s16 q1,q3,q8
+ vqrdmulh.s32 d5,d7,d9
+ vqdmulh.s16 q1,q6,d5[3]
+ vqadd.s16 q1,q11,q3
+ vqadd.s32 d5,d7,d31
+ vmla.i32 q1,q2,q9
+ vpadd.i16 d3,d26,d4
+ vmls.s32 q3,q4,q5
+ vacge.f q1,q4,q2
+ vacgt.f q3,q1,q4
+ vacle.f q5,q9,q6
+ vaclt.f q7,q1,q8
+ vcge.u32 q7,q8,q3
+ vcgt.u32 q7,q8,q3
+ vcle.u32 q7,q8,q3
+ vclt.u32 q7,q8,q3
+ vaddw.u32 q1,q5,d2
+ vsubw.s32 q3,q1,d4
+ vtst.i32 q2,q11,q3
+ vrecps.f d1,d30,d2
+ vshr.s16 q1,q13,#4
+ vrshr.s8 q2,q9,#5
+ vsra.u16 q3,q1,#6
+ vrsra.u16 q15,q4,#6
+ vsli.16 q2,q3,#5
+ vqshlu.s64 d15,d23,#63
+ vext.8 d5,d18,d6,#3