gas/
authorBernd Schmidt <bernds@codesourcery.com>
Thu, 7 Oct 2010 11:28:49 +0000 (11:28 +0000)
committerBernd Schmidt <bernds@codesourcery.com>
Thu, 7 Oct 2010 11:28:49 +0000 (11:28 +0000)
* config/tc-tic6x.c (tic6x_try_encode): Correct encoding of fstg field
in SPKERNEL instructions.

opcodes/
* tic6x-dis.c (print_insn_tic6x): Correct decoding of fstg field
in SPKERNEL instructions.

gas/testsuite/
* gas/tic6x/insns-c674x-sploop.d: Add two more sploop/spkernel tests.
* gas/tic6x/insns-c674x-sploop.s: Likewise.

gas/ChangeLog
gas/config/tc-tic6x.c
gas/testsuite/ChangeLog
gas/testsuite/gas/tic6x/insns-c674x-sploop.d
gas/testsuite/gas/tic6x/insns-c674x-sploop.s
opcodes/ChangeLog
opcodes/tic6x-dis.c

index 6031f59536c5326f6fb1d0226550d0da2c8755ed..ad16b9e3a630a5a8ad3ce02247ab5cb7c7b476a3 100644 (file)
@@ -1,3 +1,8 @@
+2010-10-07  Bernd Schmidt  <bernds@codesourcery.com>
+
+       * config/tc-tic6x.c (tic6x_try_encode): Correct encoding of fstg field
+       in SPKERNEL instructions.
+
 2010-10-06  Nathan Sidwell  <nathan@codesourcery.com>
 
        * config/tc-arm.c (encode_branch): Remove superfluous braces.
index f1c28d0d3c1d07df13528c3d013857c02dab04e7..c706158bd787f084c03cab95eaafc64d6ceb7a29 100644 (file)
@@ -2503,6 +2503,7 @@ tic6x_try_encode (tic6x_opcode_id id, tic6x_operand *operands,
 
          if (opct->variable_fields[fld].coding_method == tic6x_coding_fstg)
            {
+             int i, t;
              if (operands[opno].value.exp.X_add_number < 0
                  || (operands[opno].value.exp.X_add_number
                      >= (1 << (fldd->width - fcyc_bits))))
@@ -2513,7 +2514,13 @@ tic6x_try_encode (tic6x_opcode_id id, tic6x_operand *operands,
                  *ok = FALSE;
                  return 0;
                }
-             value = operands[opno].value.exp.X_add_number << fcyc_bits;
+             value = operands[opno].value.exp.X_add_number;
+             for (t = 0, i = fcyc_bits; i < fldd->width; i++)
+               {
+                 t = (t << 1) | (value & 1);
+                 value >>= 1;
+               }
+             value = t << fcyc_bits;
            }
          else
            {
index 8d2f8527e64d3cea95e17649d899518ac745c637..3bed86b5e75552b3466ab692132585423657bc5d 100644 (file)
@@ -1,3 +1,8 @@
+2010-10-07  Bernd Schmidt  <bernds@codesourcery.com>
+
+       * gas/tic6x/insns-c674x-sploop.d: Add two more sploop/spkernel tests.
+       * gas/tic6x/insns-c674x-sploop.s: Likewise.
+
 2010-10-04  David Daney  <ddaney@caviumnetworks.com>
 
        * gas/mips/mips.exp (octeon-pref): Run the new test.
index cd383b647896eab902283a85475bcf7bf40ba391..63e4fb1eefbfbd3b6d04cf1d8b56b3c4262dda1c 100644 (file)
@@ -77,4 +77,10 @@ Disassembly of section \.text:
 [0-9a-f]+[048c] <[^>]*> 06838000[ \t]+sploop 14
 [0-9a-f]+[048c] <[^>]*> 00000000[ \t]+nop 1
 [0-9a-f]+[048c] <[^>]*> 0f434000[ \t]+spkernel 3,13
+[0-9a-f]+[048c] <[^>]*> 00038000[ \t]+sploop 1
+[0-9a-f]+[048c] <[^>]*> 00000000[ \t]+nop 1
+[0-9a-f]+[048c] <[^>]*> 01034000[ \t]+spkernel 8,0
+[0-9a-f]+[048c] <[^>]*> 00838000[ \t]+sploop 2
 [0-9a-f]+[048c] <[^>]*> 00000000[ \t]+nop 1
+[0-9a-f]+[048c] <[^>]*> 06034000[ \t]+spkernel 6,0
+[ \t]*\.\.\.
index 95a674528736c4de04536e481783a972505f1f5d..85bd6a45f0405a045a9f1e4492b8e3ca932c7606 100644 (file)
@@ -77,3 +77,9 @@ f:
        sploop 14
        nop
        spkernel 3,13
+       sploop 1
+       nop
+       spkernel 8,0
+       sploop 2
+       nop
+       spkernel 6,0
index 5c964ed9c8178093d8c21910f09cee4382058354..fe700ede4778685d40b482dd7449a7dd78b419c8 100644 (file)
@@ -1,3 +1,8 @@
+2010-10-07  Bernd Schmidt  <bernds@codesourcery.com>
+
+       * tic6x-dis.c (print_insn_tic6x): Correct decoding of fstg field
+       in SPKERNEL instructions.
+
 2010-10-02  H.J. Lu  <hongjiu.lu@intel.com>
 
        PR binutils/12076
index 80320848770e8ce649ad092eab54749ae87175b4..86505ac54d19ff054cc4b08c51b1fa0ae1e3ba35 100644 (file)
@@ -882,9 +882,11 @@ print_insn_tic6x (bfd_vma addr, struct disassemble_info *info)
                    abort ();
                  if (enc->coding_method == tic6x_coding_fstg)
                    {
+                     int i, t;
+                     for (t = 0, i = fcyc_bits; i < 6; i++)
+                       t = (t << 1) | ((fld_val >> i) & 1);
                      operands_text[op_num] = TRUE;
-                     snprintf (operands[op_num], 24, "%u",
-                               fld_val >> fcyc_bits);
+                     snprintf (operands[op_num], 24, "%u", t);
                    }
                  else
                    {