The BYTEOP2M parser incorrectly calls BYTEOP2P to generate the opcode.
Once we've fixed that, it's easy to see that the disassembler also likes
to decode this insn incorrectly. So fix that and then add some tests.
Signed-off-by: Mike Frysinger <vapier@gentoo.org>
+2010-10-15 Mike Frysinger <vapier@gentoo.org>
+
+ * config/bfin-parse.y (BYTEOP2M): Call BYTEOP2M().
+
2010-10-14 H.J. Lu <hongjiu.lu@intel.com>
* config/tc-i386.c (match_template): Check checkregsize
return yyerror ("Bad dreg pair");
else
{
- notethat ("dsp32alu: dregs = BYTEOP2P (dregs_pair , dregs_pair ) (rnd_op)\n");
- $$ = DSP32ALU (22, $13.r0, 0, &$1, &$5, &$9, $13.s0, 0, $13.x0);
+ notethat ("dsp32alu: dregs = BYTEOP2M (dregs_pair , dregs_pair ) (rnd_op)\n");
+ $$ = DSP32ALU (22, $13.r0, 0, &$1, &$5, &$9, $13.s0, $13.x0, $13.aop + 2);
}
}
+2010-10-15 Mike Frysinger <vapier@gentoo.org>
+
+ * gas/bfin/video.s: Add BYTEOP2M insns.
+ * gas/bfin/video.d, gas/bfin/video2.s, gas/bfin/video2.d: Likewise.
+
2010-10-15 Mike Frysinger <vapier@gentoo.org>
* gas/bfin/video.d: Change addresses to regexps.
[ 0-9a-f]+: 16 c4 02 6c R6 = BYTEOP2P \(R1:0, R3:2\) \(TL, R\);
[ 0-9a-f]+: 36 c4 02 6e R7 = BYTEOP2P \(R1:0, R3:2\) \(TH, R\);
+[0-9a-f]+ <byteop2m>:
+[ 0-9a-f]+: 16 c4 02 80 R0 = BYTEOP2M \(R1:0, R3:2\) \(RNDL\);
+[ 0-9a-f]+: 36 c4 02 82 R1 = BYTEOP2M \(R1:0, R3:2\) \(RNDH\);
+[ 0-9a-f]+: 16 c4 02 c4 R2 = BYTEOP2M \(R1:0, R3:2\) \(TL\);
+[ 0-9a-f]+: 36 c4 02 c6 R3 = BYTEOP2M \(R1:0, R3:2\) \(TH\);
+[ 0-9a-f]+: 16 c4 02 a8 R4 = BYTEOP2M \(R1:0, R3:2\) \(RNDL, R\);
+[ 0-9a-f]+: 36 c4 02 aa R5 = BYTEOP2M \(R1:0, R3:2\) \(RNDH, R\);
+[ 0-9a-f]+: 16 c4 02 ec R6 = BYTEOP2M \(R1:0, R3:2\) \(TL, R\);
+[ 0-9a-f]+: 36 c4 02 ee R7 = BYTEOP2M \(R1:0, R3:2\) \(TH, R\);
+
[0-9a-f]+ <bytepack>:
[ 0-9a-f]+: 18 c4 03 0a R5 = BYTEPACK \(R0, R3\);
r6 = BYTEop2p (r1:0, r3:2) (tl, R);
R7 = byteop2p (r1:0, R3:2) (TH, r);
+ .text
+ .global byteop2m
+byteop2m:
+ R0 = BYTEOP2M (R1:0, R3:2) (RNDL);
+ r1 = byteop2m (r1:0, r3:2) (rndh);
+ R2 = Byteop2m (R1:0, R3:2) (tL);
+ R3 = Byteop2m (r1:0, r3:2) (TH);
+ r4 = ByTEOP2M (r1:0, R3:2) (Rndl, R);
+ R5 = byTeOp2m (R1:0, r3:2) (rndH, r);
+ r6 = BYTEop2m (r1:0, r3:2) (tl, R);
+ R7 = byteop2m (r1:0, R3:2) (TH, r);
+
.text
.global bytepack
bytepack:
[ 0-9a-f]+: 36 c4 12 2a R5 = BYTEOP2P \(R3:2, R3:2\) \(RNDH, R\);
[ 0-9a-f]+: 16 c4 12 6c R6 = BYTEOP2P \(R3:2, R3:2\) \(TL, R\);
[ 0-9a-f]+: 36 c4 12 6e R7 = BYTEOP2P \(R3:2, R3:2\) \(TH, R\);
+[ 0-9a-f]+: 16 c4 02 86 R3 = BYTEOP2M \(R1:0, R3:2\) \(RNDL\);
+[ 0-9a-f]+: 36 c4 02 86 R3 = BYTEOP2M \(R1:0, R3:2\) \(RNDH\);
+[ 0-9a-f]+: 16 c4 02 c6 R3 = BYTEOP2M \(R1:0, R3:2\) \(TL\);
+[ 0-9a-f]+: 36 c4 02 c6 R3 = BYTEOP2M \(R1:0, R3:2\) \(TH\);
+[ 0-9a-f]+: 16 c4 02 a6 R3 = BYTEOP2M \(R1:0, R3:2\) \(RNDL, R\);
+[ 0-9a-f]+: 36 c4 02 a6 R3 = BYTEOP2M \(R1:0, R3:2\) \(RNDH, R\);
+[ 0-9a-f]+: 16 c4 02 e6 R3 = BYTEOP2M \(R1:0, R3:2\) \(TL, R\);
+[ 0-9a-f]+: 36 c4 02 e6 R3 = BYTEOP2M \(R1:0, R3:2\) \(TH, R\);
+[ 0-9a-f]+: 16 c4 02 80 R0 = BYTEOP2M \(R1:0, R3:2\) \(RNDL\);
+[ 0-9a-f]+: 36 c4 02 82 R1 = BYTEOP2M \(R1:0, R3:2\) \(RNDH\);
+[ 0-9a-f]+: 16 c4 02 c4 R2 = BYTEOP2M \(R1:0, R3:2\) \(TL\);
+[ 0-9a-f]+: 36 c4 02 c6 R3 = BYTEOP2M \(R1:0, R3:2\) \(TH\);
+[ 0-9a-f]+: 16 c4 02 a8 R4 = BYTEOP2M \(R1:0, R3:2\) \(RNDL, R\);
+[ 0-9a-f]+: 36 c4 02 aa R5 = BYTEOP2M \(R1:0, R3:2\) \(RNDH, R\);
+[ 0-9a-f]+: 16 c4 02 ec R6 = BYTEOP2M \(R1:0, R3:2\) \(TL, R\);
+[ 0-9a-f]+: 36 c4 02 ee R7 = BYTEOP2M \(R1:0, R3:2\) \(TH, R\);
+[ 0-9a-f]+: 16 c4 12 80 R0 = BYTEOP2M \(R3:2, R3:2\) \(RNDL\);
+[ 0-9a-f]+: 36 c4 12 82 R1 = BYTEOP2M \(R3:2, R3:2\) \(RNDH\);
+[ 0-9a-f]+: 16 c4 12 c4 R2 = BYTEOP2M \(R3:2, R3:2\) \(TL\);
+[ 0-9a-f]+: 36 c4 12 c6 R3 = BYTEOP2M \(R3:2, R3:2\) \(TH\);
+[ 0-9a-f]+: 16 c4 12 a8 R4 = BYTEOP2M \(R3:2, R3:2\) \(RNDL, R\);
+[ 0-9a-f]+: 36 c4 12 aa R5 = BYTEOP2M \(R3:2, R3:2\) \(RNDH, R\);
+[ 0-9a-f]+: 16 c4 12 ec R6 = BYTEOP2M \(R3:2, R3:2\) \(TL, R\);
+[ 0-9a-f]+: 36 c4 12 ee R7 = BYTEOP2M \(R3:2, R3:2\) \(TH, R\);
[ 0-9a-f]+: 18 c4 00 00 R0 = BYTEPACK \(R0, R0\);
[ 0-9a-f]+: 18 c4 13 02 R1 = BYTEPACK \(R2, R3\);
[ 0-9a-f]+: 18 c4 2e 08 R4 = BYTEPACK \(R5, R6\);
r6 = byteop2p (r3:2, r3:2) (tl, r) ;
r7 = byteop2p (r3:2, r3:2) (th, r) ;
+/* forward byte order operands */
+//Dreg = BYTEOP2M (Dreg_pair, Dreg_pair) (RNDL) ;
+/* round into low bytes (b) */
+//Dreg = BYTEOP2M (Dreg_pair, Dreg_pair) (RNDH) ;
+/* round into high bytes (b) */
+//Dreg = BYTEOP2M (Dreg_pair, Dreg_pair) (TL) ;
+/* truncate into low bytes (b) */
+//Dreg = BYTEOP2M (Dreg_pair, Dreg_pair) (TH) ;
+/* truncate into high bytes (b) */
+/* reverse byte order operands */
+//Dreg = BYTEOP2M (Dreg_pair, Dreg_pair) (RNDL, R) ;
+/* round into low bytes (b) */
+//Dreg = BYTEOP2M (Dreg_pair, Dreg_pair) (RNDH, R) ;
+/* round into high bytes (b) */
+//Dreg = BYTEOP2M (Dreg_pair, Dreg_pair) (TL, R) ;
+/* truncate into low bytes (b) */
+//Dreg = BYTEOP2M (Dreg_pair, Dreg_pair) (TH, R) ;
+/* truncate into high bytes (b) */
+
+r3 = byteop2m (r1:0, r3:2) (rndl) ;
+r3 = byteop2m (r1:0, r3:2) (rndh) ;
+r3 = byteop2m (r1:0, r3:2) (tl) ;
+r3 = byteop2m (r1:0, r3:2) (th) ;
+r3 = byteop2m (r1:0, r3:2) (rndl, r) ;
+r3 = byteop2m (r1:0, r3:2) (rndh, r) ;
+r3 = byteop2m (r1:0, r3:2) (tl, r) ;
+r3 = byteop2m (r1:0, r3:2) (th, r) ;
+
+r0 = byteop2m (r1:0, r3:2) (rndl) ;
+r1 = byteop2m (r1:0, r3:2) (rndh) ;
+r2 = byteop2m (r1:0, r3:2) (tl) ;
+r3 = byteop2m (r1:0, r3:2) (th) ;
+r4 = byteop2m (r1:0, r3:2) (rndl, r) ;
+r5 = byteop2m (r1:0, r3:2) (rndh, r) ;
+r6 = byteop2m (r1:0, r3:2) (tl, r) ;
+r7 = byteop2m (r1:0, r3:2) (th, r) ;
+
+r0 = byteop2m (r3:2, r3:2) (rndl) ;
+r1 = byteop2m (r3:2, r3:2) (rndh) ;
+r2 = byteop2m (r3:2, r3:2) (tl) ;
+r3 = byteop2m (r3:2, r3:2) (th) ;
+r4 = byteop2m (r3:2, r3:2) (rndl, r) ;
+r5 = byteop2m (r3:2, r3:2) (rndh, r) ;
+r6 = byteop2m (r3:2, r3:2) (tl, r) ;
+r7 = byteop2m (r3:2, r3:2) (th, r) ;
+
//Dreg = BYTEPACK ( Dreg, Dreg ) ; /* (b) */
r0 = bytepack (r0,r0) ;
r1 = bytepack (r2,r3) ;
+2010-10-15 Mike Frysinger <vapier@gentoo.org>
+
+ * bfin-dis.c (decode_dsp32alu_0): Call imm5d() for BYTEOP2M.
+
2010-10-14 H.J. Lu <hongjiu.lu@intel.com>
* i386-opc.tbl: Remove CheckRegSize from movq.
OUTS (outf, " = BYTEOP2M (");
OUTS (outf, dregs (src0 + 1));
OUTS (outf, ":");
- OUTS (outf, imm5 (src0));
+ OUTS (outf, imm5d (src0));
OUTS (outf, ", ");
OUTS (outf, dregs (src1 + 1));
OUTS (outf, ":");
- OUTS (outf, imm5 (src1));
+ OUTS (outf, imm5d (src1));
OUTS (outf, ") (TH");
if (s == 1)
OUTS (outf, ", R)");
OUTS (outf, " = BYTEOP2M (");
OUTS (outf, dregs (src0 + 1));
OUTS (outf, ":");
- OUTS (outf, imm5 (src0));
+ OUTS (outf, imm5d (src0));
OUTS (outf, ", ");
OUTS (outf, dregs (src1 + 1));
OUTS (outf, ":");
- OUTS (outf, imm5 (src1));
+ OUTS (outf, imm5d (src1));
OUTS (outf, ") (TL");
if (s == 1)
OUTS (outf, ", R)");
OUTS (outf, " = BYTEOP2M (");
OUTS (outf, dregs (src0 + 1));
OUTS (outf, ":");
- OUTS (outf, imm5 (src0));
+ OUTS (outf, imm5d (src0));
OUTS (outf, ", ");
OUTS (outf, dregs (src1 + 1));
OUTS (outf, ":");
- OUTS (outf, imm5 (src1));
+ OUTS (outf, imm5d (src1));
OUTS (outf, ") (RNDH");
if (s == 1)
OUTS (outf, ", R)");
OUTS (outf, " = BYTEOP2M (");
OUTS (outf, dregs (src0 + 1));
OUTS (outf, ":");
- OUTS (outf, imm5 (src0));
+ OUTS (outf, imm5d (src0));
OUTS (outf, ", ");
OUTS (outf, dregs (src1 + 1));
OUTS (outf, ":");
- OUTS (outf, imm5 (src1));
+ OUTS (outf, imm5d (src1));
OUTS (outf, ") (RNDL");
if (s == 1)
OUTS (outf, ", R)");