diff options
author | Joseph Myers <joseph@codesourcery.com> | 2010-06-18 22:44:20 +0000 |
---|---|---|
committer | Joseph Myers <joseph@codesourcery.com> | 2010-06-18 22:44:20 +0000 |
commit | 38bd8d09ffe9e298c29172609b358c34cfd7e11b (patch) | |
tree | e039928ad43fe500786d05e483c762399922b626 /gas/config/tc-tic6x.c | |
parent | 6aed2dbcba548376cdc0b98231fb9b174f9ca978 (diff) | |
download | gdb-38bd8d09ffe9e298c29172609b358c34cfd7e11b.zip gdb-38bd8d09ffe9e298c29172609b358c34cfd7e11b.tar.gz gdb-38bd8d09ffe9e298c29172609b358c34cfd7e11b.tar.bz2 |
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.
Diffstat (limited to 'gas/config/tc-tic6x.c')
-rw-r--r-- | gas/config/tc-tic6x.c | 14 |
1 files changed, 14 insertions, 0 deletions
diff --git a/gas/config/tc-tic6x.c b/gas/config/tc-tic6x.c index 9c40c15..ea750ba 100644 --- a/gas/config/tc-tic6x.c +++ b/gas/config/tc-tic6x.c @@ -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.last_insn_lsb = 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 @@ -3155,6 +3156,7 @@ md_assemble (char *str) tic6x_label_list *l; 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. */ if (frag_now_fix () != 0) @@ -3184,6 +3186,18 @@ md_assemble (char *str) = 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 (seginfo->tc_segment_info_data.sploop_ii) |