mirror of
https://github.com/espressif/binutils-gdb.git
synced 2025-09-23 06:04:21 +08:00
gas:
* config/tc-tic6x.h (tic6x_segment_info_type): Add field func_units_used. * config/tc-tic6x.c (tic6x_cons_align: Clear func_units_used. (md_assemble): Clear func_units_used for new execute packet. Check for duplicate functional units and update func_units_used for instructions using a functional unit. gas/testsuite: * gas/tic6x/resource-func-unit-1.d, gas/tic6x/resource-func-unit-1.l, gas/tic6x/resource-func-unit-1.s, gas/tic6x/resource-func-unit-2.d, gas/tic6x/resource-func-unit-2.l, gas/tic6x/resource-func-unit-2.s: New.
This commit is contained in:
@ -1,3 +1,12 @@
|
|||||||
|
2010-06-18 Joseph Myers <joseph@codesourcery.com>
|
||||||
|
|
||||||
|
* config/tc-tic6x.h (tic6x_segment_info_type): Add field
|
||||||
|
func_units_used.
|
||||||
|
* config/tc-tic6x.c (tic6x_cons_align: Clear func_units_used.
|
||||||
|
(md_assemble): Clear func_units_used for new execute packet.
|
||||||
|
Check for duplicate functional units and update func_units_used
|
||||||
|
for instructions using a functional unit.
|
||||||
|
|
||||||
2010-06-15 Joseph Myers <joseph@codesourcery.com>
|
2010-06-15 Joseph Myers <joseph@codesourcery.com>
|
||||||
|
|
||||||
* config/tc-tic6x.c: Include elf/tic6x.h.
|
* config/tc-tic6x.c: Include elf/tic6x.h.
|
||||||
|
@ -633,6 +633,7 @@ tic6x_cons_align (int n ATTRIBUTE_UNUSED)
|
|||||||
seginfo->tc_segment_info_data.execute_packet_frag = NULL;
|
seginfo->tc_segment_info_data.execute_packet_frag = NULL;
|
||||||
seginfo->tc_segment_info_data.last_insn_lsb = NULL;
|
seginfo->tc_segment_info_data.last_insn_lsb = NULL;
|
||||||
seginfo->tc_segment_info_data.spmask_addr = NULL;
|
seginfo->tc_segment_info_data.spmask_addr = NULL;
|
||||||
|
seginfo->tc_segment_info_data.func_units_used = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Handle an alignment directive. Return TRUE if the
|
/* Handle an alignment directive. Return TRUE if the
|
||||||
@ -3155,6 +3156,7 @@ md_assemble (char *str)
|
|||||||
tic6x_label_list *l;
|
tic6x_label_list *l;
|
||||||
|
|
||||||
seginfo->tc_segment_info_data.spmask_addr = NULL;
|
seginfo->tc_segment_info_data.spmask_addr = NULL;
|
||||||
|
seginfo->tc_segment_info_data.func_units_used = 0;
|
||||||
|
|
||||||
/* Start a new frag for this execute packet. */
|
/* Start a new frag for this execute packet. */
|
||||||
if (frag_now_fix () != 0)
|
if (frag_now_fix () != 0)
|
||||||
@ -3184,6 +3186,18 @@ md_assemble (char *str)
|
|||||||
= tic6x_can_cross_fp_boundary;
|
= tic6x_can_cross_fp_boundary;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (func_unit_base != tic6x_func_unit_nfu)
|
||||||
|
{
|
||||||
|
unsigned int func_unit_enc;
|
||||||
|
|
||||||
|
func_unit_enc = tic6x_encode_spmask (func_unit_base, func_unit_side);
|
||||||
|
|
||||||
|
if (seginfo->tc_segment_info_data.func_units_used & func_unit_enc)
|
||||||
|
as_bad (_("functional unit already used in this execute packet"));
|
||||||
|
|
||||||
|
seginfo->tc_segment_info_data.func_units_used |= func_unit_enc;
|
||||||
|
}
|
||||||
|
|
||||||
if (opct->flags & TIC6X_FLAG_SPLOOP)
|
if (opct->flags & TIC6X_FLAG_SPLOOP)
|
||||||
{
|
{
|
||||||
if (seginfo->tc_segment_info_data.sploop_ii)
|
if (seginfo->tc_segment_info_data.sploop_ii)
|
||||||
|
@ -67,6 +67,11 @@ typedef struct
|
|||||||
||^); otherwise NULL. */
|
||^); otherwise NULL. */
|
||||||
char *spmask_addr;
|
char *spmask_addr;
|
||||||
|
|
||||||
|
/* The functional units used in the current execute packet, recorded
|
||||||
|
by setting the same bits as would be set in the 32-bit SPMASK
|
||||||
|
instruction. */
|
||||||
|
unsigned int func_units_used;
|
||||||
|
|
||||||
/* If an SPLOOP-family instruction has been seen, and a following
|
/* If an SPLOOP-family instruction has been seen, and a following
|
||||||
SPKERNEL-family instruction has not yet been seen, the ii value
|
SPKERNEL-family instruction has not yet been seen, the ii value
|
||||||
from the SPLOOP instruction (in the range 1 to 14); otherwise
|
from the SPLOOP instruction (in the range 1 to 14); otherwise
|
||||||
|
@ -1,3 +1,12 @@
|
|||||||
|
2010-06-18 Joseph Myers <joseph@codesourcery.com>
|
||||||
|
|
||||||
|
* gas/tic6x/resource-func-unit-1.d,
|
||||||
|
gas/tic6x/resource-func-unit-1.l,
|
||||||
|
gas/tic6x/resource-func-unit-1.s,
|
||||||
|
gas/tic6x/resource-func-unit-2.d,
|
||||||
|
gas/tic6x/resource-func-unit-2.l,
|
||||||
|
gas/tic6x/resource-func-unit-2.s: New.
|
||||||
|
|
||||||
2010-06-16 Vincent Rivière <vincent.riviere@freesbee.fr>
|
2010-06-16 Vincent Rivière <vincent.riviere@freesbee.fr>
|
||||||
|
|
||||||
PR gas/11673
|
PR gas/11673
|
||||||
|
2
gas/testsuite/gas/tic6x/resource-func-unit-1.d
Normal file
2
gas/testsuite/gas/tic6x/resource-func-unit-1.d
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
#name: C6X parallel instructions on same functional unit
|
||||||
|
#error-output: resource-func-unit-1.l
|
2
gas/testsuite/gas/tic6x/resource-func-unit-1.l
Normal file
2
gas/testsuite/gas/tic6x/resource-func-unit-1.l
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
[^:]*: Assembler messages:
|
||||||
|
[^:]*:9: Error: functional unit already used in this execute packet
|
9
gas/testsuite/gas/tic6x/resource-func-unit-1.s
Normal file
9
gas/testsuite/gas/tic6x/resource-func-unit-1.s
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
# Test parallel instructions on same functional unit.
|
||||||
|
.text
|
||||||
|
.globl f
|
||||||
|
f:
|
||||||
|
add .L1 a1,a2,a3
|
||||||
|
nop
|
||||||
|
|| [b1] add .L1 a1,a2,a3
|
||||||
|
|| nop
|
||||||
|
|| [!b1] add .L1 a4,a5,a6
|
2
gas/testsuite/gas/tic6x/resource-func-unit-2.d
Normal file
2
gas/testsuite/gas/tic6x/resource-func-unit-2.d
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
#name: C6X parallel instructions on same functional unit, multiple sections
|
||||||
|
#error-output: resource-func-unit-2.l
|
3
gas/testsuite/gas/tic6x/resource-func-unit-2.l
Normal file
3
gas/testsuite/gas/tic6x/resource-func-unit-2.l
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
[^:]*: Assembler messages:
|
||||||
|
[^:]*:17: Error: functional unit already used in this execute packet
|
||||||
|
[^:]*:19: Error: functional unit already used in this execute packet
|
19
gas/testsuite/gas/tic6x/resource-func-unit-2.s
Normal file
19
gas/testsuite/gas/tic6x/resource-func-unit-2.s
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
# Test parallel instructions on same functional unit, with section switching.
|
||||||
|
.section .text.f1,"ax",%progbits
|
||||||
|
.globl f1
|
||||||
|
f1:
|
||||||
|
add .L1 a1,a2,a3
|
||||||
|
nop
|
||||||
|
|| [b1] add .L1 a1,a2,a3
|
||||||
|
.section .text.f2,"ax",%progbits
|
||||||
|
.globl f2
|
||||||
|
f2:
|
||||||
|
add .L2 b1,b2,b3
|
||||||
|
nop
|
||||||
|
|| [b1] add .L2 b1,b2,b3
|
||||||
|
|| nop
|
||||||
|
.section .text.f1,"ax",%progbits
|
||||||
|
|| nop
|
||||||
|
|| [!b1] add .L1 a4,a5,a6
|
||||||
|
.section .text.f2,"ax",%progbits
|
||||||
|
|| [!b1] add .L2 b4,b5,b6
|
Reference in New Issue
Block a user