Fix disassembling of TIC6X parallel instructions where the previous fetch packet ended with a 32-bit insn.

PR 21056
opcodes	* tic6x-dis.c (print_insn_tic6x): Correct displaying of parallel
	instructions when the previous fetch packet ends with a 32-bit
	instruction.

gas	* testsuite/gas/tic6x/insns16-parallel.s: New test case.
	* testsuite/gas/tic6x/insns16-parallel.d: New test driver.
This commit is contained in:
Alexis Deruell 2017-01-27 12:00:55 +00:00 committed by Nick Clifton
parent 0348d4be16
commit 8ec5cf65a8
5 changed files with 109 additions and 2 deletions

View File

@ -1,3 +1,9 @@
2017-01-27 Alexis Deruell <alexis.deruelle@gmail.com>
PR 21056
* testsuite/gas/tic6x/insns16-parallel.s: New test case.
* testsuite/gas/tic6x/insns16-parallel.d: New test driver.
2017-01-25 Sebastian Huber <sebastian.huber@embedded-brains.de>
* configure.tgt (aarch64*-*-rtems*): Remove.

View File

@ -0,0 +1,43 @@
#objdump: -dr --prefix-addresses --show-raw-insn
#name:
#as: -march=c64x+ -mlittle-endian
.*: *file format elf32-tic6x-le
Disassembly of section .text:
[ \t]*\.\.\.
[0-9a-f]+[02468ace] <[^>]*> 00008000[ \t]+nop 5
[0-9a-f]+[02468ace] <[^>]*> 00008000[ \t]+nop 5
[0-9a-f]+[02468ace] <[^>]*> 00008000[ \t]+nop 5
[0-9a-f]+[02468ace] <[^>]*> 00008000[ \t]+nop 5
[0-9a-f]+[02468ace] <[^>]*> 00008000[ \t]+nop 5
[0-9a-f]+[02468ace] <[^>]*> 00008000[ \t]+nop 5
[0-9a-f]+[02468ace] <[^>]*> 00008000[ \t]+nop 5
[0-9a-f]+[02468ace] <[^>]*> 00008001[ \t]+nop 5
[0-9a-f]+[02468ace] <[^>]*> 00008000[ \t]+\|\|[ \t]+nop 5
[0-9a-f]+[02468ace] <[^>]*> 00008000[ \t]+nop 5
[0-9a-f]+[02468ace] <[^>]*> 00008000[ \t]+nop 5
[0-9a-f]+[02468ace] <[^>]*> 00008000[ \t]+nop 5
[0-9a-f]+[02468ace] <[^>]*> 00008000[ \t]+nop 5
[0-9a-f]+[02468ace] <[^>]*> 00008000[ \t]+nop 5
[0-9a-f]+[02468ace] <[^>]*> 8c6e[ \t]+nop 5
[0-9a-f]+[02468ace] <[^>]*> 8c6e[ \t]+nop 5
[0-9a-f]+[02468ace] <[^>]*> e8002000[ \t]+<fetch packet header 0xe8002000>
[0-9a-f]+[02468ace] <[^>]*> 00008000[ \t]+\|\|[ \t]+nop 5
[0-9a-f]+[02468ace] <[^>]*> 00008000[ \t]+nop 5
[0-9a-f]+[02468ace] <[^>]*> 00008000[ \t]+nop 5
[0-9a-f]+[02468ace] <[^>]*> 00008000[ \t]+nop 5
[0-9a-f]+[02468ace] <[^>]*> 00008000[ \t]+nop 5
[0-9a-f]+[02468ace] <[^>]*> 00008000[ \t]+nop 5
[0-9a-f]+[02468ace] <[^>]*> 00008001[ \t]+nop 5
[0-9a-f]+[02468ace] <[^>]*> e0000000[ \t]+<fetch packet header 0xe0000000>
[0-9a-f]+[02468ace] <[^>]*> 00008000[ \t]+\|\|[ \t]+nop 5
[0-9a-f]+[02468ace] <[^>]*> 00008000[ \t]+nop 5
[0-9a-f]+[02468ace] <[^>]*> 00008000[ \t]+nop 5
[0-9a-f]+[02468ace] <[^>]*> 00008000[ \t]+nop 5
[0-9a-f]+[02468ace] <[^>]*> 00008000[ \t]+nop 5
[0-9a-f]+[02468ace] <[^>]*> 00008000[ \t]+nop 5
[0-9a-f]+[02468ace] <[^>]*> 00008000[ \t]+nop 5
[0-9a-f]+[02468ace] <[^>]*> 00008000[ \t]+nop 5
[ \t]*\.\.\.

View File

@ -0,0 +1,42 @@
.text
nop
.align 16
nop
.align 16
FP0:
.word 0x00008000
.word 0x00008000
.word 0x00008000
.word 0x00008000
.word 0x00008000
.word 0x00008000
.word 0x00008000
.word 0x00008001
FP1:
.word 0x00008000
.word 0x00008000
.word 0x00008000
.word 0x00008000
.word 0x00008000
.word 0x00008000
.short 0x8c6e
.short 0x8c6e
.word 0xe8002000
FP2:
.word 0x00008000
.word 0x00008000
.word 0x00008000
.word 0x00008000
.word 0x00008000
.word 0x00008000
.word 0x00008001
.word 0xe0000000
FP3:
.word 0x00008000
.word 0x00008000
.word 0x00008000
.word 0x00008000
.word 0x00008000
.word 0x00008000
.word 0x00008000
.word 0x00008000

View File

@ -1,3 +1,10 @@
2017-01-27 Alexis Deruell <alexis.deruelle@gmail.com>
PR 21056
* tic6x-dis.c (print_insn_tic6x): Correct displaying of parallel
instructions when the previous fetch packet ends with a 32-bit
instruction.
2017-01-24 Dimitar Dimitrov <dimitar@dinux.eu>
* pru-opc.c: Remove vague reference to a future GDB port.

View File

@ -510,8 +510,17 @@ print_insn_tic6x (bfd_vma addr, struct disassemble_info *info)
prev_header_based
= tic6x_check_fetch_packet_header (fp_prev, &prev_header, info);
if (prev_header_based && prev_header.word_compact[6])
p_bit = prev_header.p_bits[13];
if (prev_header_based)
{
if (prev_header.word_compact[6])
p_bit = prev_header.p_bits[13];
else
{
unsigned int prev_opcode = tic6x_extract_32 (fp_prev + 24,
info);
p_bit = (prev_opcode & 0x1) ? TRUE : FALSE;
}
}
else
{
unsigned int prev_opcode = tic6x_extract_32 (fp_prev + 28,