gas: blackfin: fix encoding of BYTEOP2M insn
authorMike Frysinger <vapier@gentoo.org>
Fri, 15 Oct 2010 20:44:46 +0000 (20:44 +0000)
committerMike Frysinger <vapier@gentoo.org>
Fri, 15 Oct 2010 20:44:46 +0000 (20:44 +0000)
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>
gas/ChangeLog
gas/config/bfin-parse.y
gas/testsuite/ChangeLog
gas/testsuite/gas/bfin/video.d
gas/testsuite/gas/bfin/video.s
gas/testsuite/gas/bfin/video2.d
gas/testsuite/gas/bfin/video2.s
opcodes/ChangeLog
opcodes/bfin-dis.c

index d85deb6b5e66e213138d1f46812efc1d7a26ec6c..8271f9116c5beabfa8c8e3b8f43d1a49bac6d323 100644 (file)
@@ -1,3 +1,7 @@
+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
index c34e84c2100b4c6fe2814d9799e237fe427aada2..fa7ca345321e03df657ff4bea4476d16c1cb00e1 100644 (file)
@@ -1064,8 +1064,8 @@ asm_1:
            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);
            }
        }
 
index 3000ee6eef9044072d71e5f9251f1fdfbe7ade7f..96152a3e3b77df0a0e0c5e5548988eab9720679f 100644 (file)
@@ -1,3 +1,8 @@
+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.
index 0fafc06587b38583896efb5128906e1b80ac358d..ce7362d55e3ea280a0ce065073d3b2df39eeec25 100644 (file)
@@ -40,6 +40,16 @@ Disassembly of section .text:
 [ 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\);
 
index b53eb6c231e72bb7f34090bade5e823724cfab9d..a3f34c01f32e863b20943d0168ddc7edf0072910 100644 (file)
@@ -48,6 +48,18 @@ byteop2p:
        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:
index b9830d9e8cece5345dfff4fdc8c4ffdccf7b02f7..ed5d2fd1d2b16741336109e4eb933187207fc385 100644 (file)
@@ -103,6 +103,30 @@ Disassembly of section .text:
 [ 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\);
index 22fb50f3e5979aca660b07f1bf0475a73fb74f73..1d27c56cf3b6c16ffb6295d56c7a554644ffc22c 100755 (executable)
@@ -159,6 +159,52 @@ r5 = byteop2p (r3:2, r3:2) (rndh, r) ;
 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) ;
index 668eeb712467c448d25a9fe24e32af6945e96835..98dedc3248ae8c048e0c1aa6531e56adc4884245 100644 (file)
@@ -1,3 +1,7 @@
+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.
index 0aec087c8330a9da9904cbf656b7a8f169fec1c5..ebacd4618f9604dece3900f78ab3c1810cbcc648 100644 (file)
@@ -3388,11 +3388,11 @@ decode_dsp32alu_0 (TIword iw0, TIword iw1, disassemble_info *outf)
       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)");
@@ -3405,11 +3405,11 @@ decode_dsp32alu_0 (TIword iw0, TIword iw1, disassemble_info *outf)
       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)");
@@ -3422,11 +3422,11 @@ decode_dsp32alu_0 (TIword iw0, TIword iw1, disassemble_info *outf)
       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)");
@@ -3439,11 +3439,11 @@ decode_dsp32alu_0 (TIword iw0, TIword iw1, disassemble_info *outf)
       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)");