gas/
2005-02-15 Jan Beulich <jbeulich@novell.com> * config/tc-ia64.c: Include limits.h (if available). (gr_values[0]): Set path to INT_MAX. (dot_reg_val): Don't allow changing value of r0. Limit range of general registers at r127. (specify_resource): Default resource index is -1. Don't set resource index (in case IA64_RS_RSE) without setting the specific flag. (note_register_values): Check operand is O_constant before tracking input value of moves. Add tracking for dep.z with constant inputs. (print_dependency): Resource index of specific resource may be zero. (check_dependencies): Likewise. gas/testsuite/ 2005-02-15 Jan Beulich <jbeulich@novell.com> * gas/ia64/dv-raw-err.l: Expect specific resource for RAW violation on b0. * gas/ia64/regval.[ls]: New. * gas/ia64/ia64.exp: Run new test.
This commit is contained in:
parent
4b09e82862
commit
a66d2bb7bd
@ -1,3 +1,16 @@
|
||||
2005-02-15 Jan Beulich <jbeulich@novell.com>
|
||||
|
||||
* config/tc-ia64.c: Include limits.h (if available).
|
||||
(gr_values[0]): Set path to INT_MAX.
|
||||
(dot_reg_val): Don't allow changing value of r0. Limit range of
|
||||
general registers at r127.
|
||||
(specify_resource): Default resource index is -1. Don't set resource
|
||||
index (in case IA64_RS_RSE) without setting the specific flag.
|
||||
(note_register_values): Check operand is O_constant before tracking
|
||||
input value of moves. Add tracking for dep.z with constant inputs.
|
||||
(print_dependency): Resource index of specific resource may be zero.
|
||||
(check_dependencies): Likewise.
|
||||
|
||||
2005-02-15 Jan Beulich <jbeulich@novell.com>
|
||||
|
||||
* config/tc-ia64.c (parse_operands): New local variables reg1, reg2,
|
||||
|
@ -51,6 +51,10 @@
|
||||
|
||||
#include "elf/ia64.h"
|
||||
|
||||
#ifdef HAVE_LIMITS_H
|
||||
#include <limits.h>
|
||||
#endif
|
||||
|
||||
#define NELEMS(a) ((int) (sizeof (a)/sizeof ((a)[0])))
|
||||
#define MIN(a,b) ((a) < (b) ? (a) : (b))
|
||||
|
||||
@ -627,7 +631,17 @@ static struct gr {
|
||||
unsigned known:1;
|
||||
int path;
|
||||
valueT value;
|
||||
} gr_values[128] = {{ 1, 0, 0 }};
|
||||
} gr_values[128] = {
|
||||
{
|
||||
1,
|
||||
#ifdef INT_MAX
|
||||
INT_MAX,
|
||||
#else
|
||||
(((1 << (8 * sizeof(gr_values->path) - 2)) - 1) << 1) + 1,
|
||||
#endif
|
||||
0
|
||||
}
|
||||
};
|
||||
|
||||
/* Remember the alignment frag. */
|
||||
static fragS *align_frag;
|
||||
@ -4913,7 +4927,7 @@ dot_reg_val (dummy)
|
||||
{
|
||||
valueT value = get_absolute_expression ();
|
||||
int regno = reg.X_add_number;
|
||||
if (regno < REG_GR || regno > REG_GR + 128)
|
||||
if (regno <= REG_GR || regno > REG_GR + 127)
|
||||
as_warn (_("Register value annotation ignored"));
|
||||
else
|
||||
{
|
||||
@ -8060,7 +8074,7 @@ specify_resource (dep, idesc, type, specs, note, path)
|
||||
tmpl.link_to_qp_branch = 1;
|
||||
tmpl.mem_offset.hint = 0;
|
||||
tmpl.specific = 1;
|
||||
tmpl.index = 0;
|
||||
tmpl.index = -1;
|
||||
tmpl.cmp_type = CMP_NONE;
|
||||
|
||||
#define UNHANDLED \
|
||||
@ -9303,8 +9317,7 @@ dep->name, idesc->name, (rsrc_write?"write":"read"), note)
|
||||
if (idesc->operands[0] == IA64_OPND_AR3
|
||||
&& CURR_SLOT.opnd[0].X_add_number - REG_AR == AR_BSPSTORE)
|
||||
{
|
||||
specs[count] = tmpl;
|
||||
specs[count++].index = 0; /* IA64_RSE_BSPLOAD/RNATBITINDEX */
|
||||
specs[count++] = tmpl;
|
||||
}
|
||||
}
|
||||
else
|
||||
@ -9758,6 +9771,7 @@ note_register_values (idesc)
|
||||
else if (idesc->operands[0] == IA64_OPND_R1
|
||||
&& (idesc->operands[1] == IA64_OPND_IMM22
|
||||
|| idesc->operands[1] == IA64_OPND_IMMU64)
|
||||
&& CURR_SLOT.opnd[1].X_op == O_constant
|
||||
&& (strcmp (idesc->name, "mov") == 0
|
||||
|| strcmp (idesc->name, "movl") == 0))
|
||||
{
|
||||
@ -9775,6 +9789,30 @@ note_register_values (idesc)
|
||||
}
|
||||
}
|
||||
}
|
||||
/* Look for dep.z imm insns. */
|
||||
else if (idesc->operands[0] == IA64_OPND_R1
|
||||
&& idesc->operands[1] == IA64_OPND_IMM8
|
||||
&& strcmp (idesc->name, "dep.z") == 0)
|
||||
{
|
||||
int regno = CURR_SLOT.opnd[0].X_add_number - REG_GR;
|
||||
if (regno > 0 && regno < NELEMS (gr_values))
|
||||
{
|
||||
valueT value = CURR_SLOT.opnd[1].X_add_number;
|
||||
|
||||
if (CURR_SLOT.opnd[3].X_add_number < 64)
|
||||
value &= ((valueT)1 << CURR_SLOT.opnd[3].X_add_number) - 1;
|
||||
value <<= CURR_SLOT.opnd[2].X_add_number;
|
||||
gr_values[regno].known = 1;
|
||||
gr_values[regno].value = value;
|
||||
gr_values[regno].path = md.path;
|
||||
if (md.debug_dv)
|
||||
{
|
||||
fprintf (stderr, " Know gr%d = ", regno);
|
||||
fprintf_vma (stderr, gr_values[regno].value);
|
||||
fputs ("\n", stderr);
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
clear_qp_mutex (qp_changemask);
|
||||
@ -9995,7 +10033,7 @@ print_dependency (action, depind)
|
||||
fprintf (stderr, " %s %s '%s'",
|
||||
action, dv_mode[(regdeps[depind].dependency)->mode],
|
||||
(regdeps[depind].dependency)->name);
|
||||
if (regdeps[depind].specific && regdeps[depind].index != 0)
|
||||
if (regdeps[depind].specific && regdeps[depind].index >= 0)
|
||||
fprintf (stderr, " (%d)", regdeps[depind].index);
|
||||
if (regdeps[depind].mem_offset.hint)
|
||||
{
|
||||
@ -10193,7 +10231,7 @@ check_dependencies (idesc)
|
||||
if (path != 0)
|
||||
sprintf (pathmsg, " when entry is at label '%s'",
|
||||
md.entry_labels[path - 1]);
|
||||
if (rs->specific && rs->index != 0)
|
||||
if (matchtype == 1 && rs->index >= 0)
|
||||
sprintf (indexmsg, ", specific resource number is %d",
|
||||
rs->index);
|
||||
sprintf (msg, "Use of '%s' %s %s dependency '%s' (%s)%s%s",
|
||||
|
@ -1,3 +1,9 @@
|
||||
2005-02-15 Jan Beulich <jbeulich@novell.com>
|
||||
|
||||
* gas/ia64/dv-raw-err.l: Expect specific resource for RAW violation on b0.
|
||||
* gas/ia64/regval.[ls]: New.
|
||||
* gas/ia64/ia64.exp: Run new test.
|
||||
|
||||
2005-02-15 Jan Beulich <jbeulich@novell.com>
|
||||
|
||||
* gas/ia64/dv-raw-err.s: Don't use r0 or f0 as output operand.
|
||||
|
@ -51,7 +51,7 @@
|
||||
.*:98: Warning: This is the location of the conflicting usage
|
||||
.*:104: Warning: Use of 'ld8\.fill' .* RAW dependency 'AR\[UNAT\]{%}, % in 0 - 63' \(impliedf\)
|
||||
.*:103: Warning: This is the location of the conflicting usage
|
||||
.*:111: Warning: Use of 'mov' .* RAW dependency 'BR%, % in 0 - 7' \(impliedf\)
|
||||
.*:111: Warning: Use of 'mov' .* RAW dependency 'BR%, % in 0 - 7' \(impliedf\), specific resource number is 0
|
||||
.*:110: Warning: This is the location of the conflicting usage
|
||||
.*:116: Warning: Use of 'fadd' .* RAW dependency 'CFM' \(impliedf\)
|
||||
.*:115: Warning: This is the location of the conflicting usage
|
||||
|
@ -41,6 +41,7 @@ if [istarget "ia64-*"] then {
|
||||
gas_test "pred-rel.s" "" "" ".pred.rel alternative forms"
|
||||
run_dump_test "dv-safe"
|
||||
run_dump_test "dv-srlz"
|
||||
run_list_test "regval" ""
|
||||
run_dump_test "tls"
|
||||
run_dump_test "ldxmov-1"
|
||||
run_list_test "ldxmov-2" ""
|
||||
|
17
gas/testsuite/gas/ia64/regval.l
Normal file
17
gas/testsuite/gas/ia64/regval.l
Normal file
@ -0,0 +1,17 @@
|
||||
.*: Assembler messages:
|
||||
.*:11: Warning: Use of 'mov' .* WAW dependency 'RR#' \(impliedf\), specific resource number is 0
|
||||
.*:11: Warning: Only the first path encountering the conflict is reported
|
||||
.*:10: Warning: This is the location of the conflicting usage
|
||||
#...
|
||||
.*:25: Warning: Use of 'mov' .* WAW dependency 'RR#' \(impliedf\), specific resource number is 0
|
||||
.*:25: Warning: Only the first path encountering the conflict is reported
|
||||
.*:24: Warning: This is the location of the conflicting usage
|
||||
#...
|
||||
.*:32: Warning: Use of 'mov' .* WAW dependency 'RR#' \(impliedf\)
|
||||
.*:32: Warning: Only the first path encountering the conflict is reported
|
||||
.*:31: Warning: This is the location of the conflicting usage
|
||||
#...
|
||||
.*:46: Warning: Use of 'mov' .* WAW dependency 'RR#' \(impliedf\), specific resource number is 0
|
||||
.*:46: Warning: Only the first path encountering the conflict is reported
|
||||
.*:45: Warning: This is the location of the conflicting usage
|
||||
#pass
|
48
gas/testsuite/gas/ia64/regval.s
Normal file
48
gas/testsuite/gas/ia64/regval.s
Normal file
@ -0,0 +1,48 @@
|
||||
.explicit
|
||||
rr1:
|
||||
.reg.val r1, 0xE000000000000000
|
||||
mov rr[r0] = r0
|
||||
mov rr[r1] = r0
|
||||
br.ret.sptk rp
|
||||
;;
|
||||
rr2:
|
||||
.reg.val r1, 0
|
||||
mov rr[r0] = r0
|
||||
mov rr[r1] = r0
|
||||
br.ret.sptk rp
|
||||
;;
|
||||
rr3:
|
||||
movl r1 = 0xE000000000000000
|
||||
;;
|
||||
mov rr[r0] = r0
|
||||
mov rr[r1] = r0
|
||||
br.ret.sptk rp
|
||||
;;
|
||||
rr4:
|
||||
mov r1 = 0
|
||||
;;
|
||||
mov rr[r0] = r0
|
||||
mov rr[r1] = r0
|
||||
br.ret.sptk rp
|
||||
;;
|
||||
rr5:
|
||||
movl r1 = xyz+0xE000000000000000
|
||||
;;
|
||||
mov rr[r0] = r0
|
||||
mov rr[r1] = r0
|
||||
br.ret.sptk rp
|
||||
;;
|
||||
rr6:
|
||||
dep.z r1 = 1, 61, 3
|
||||
;;
|
||||
mov rr[r0] = r0
|
||||
mov rr[r1] = r0
|
||||
br.ret.sptk rp
|
||||
;;
|
||||
rr7:
|
||||
dep.z r1 = -1, 0, 61
|
||||
;;
|
||||
mov rr[r0] = r0
|
||||
mov rr[r1] = r0
|
||||
br.ret.sptk rp
|
||||
;;
|
Loading…
x
Reference in New Issue
Block a user