mirror of
https://github.com/espressif/binutils-gdb.git
synced 2025-06-25 04:49:54 +08:00
gas/
2005-09-29 Jan Beulich <jbeulich@novell.com> * config/tc-ia64.c (parse_operands): Always parse first operand of alloc. gas/testsuite/ 2005-09-29 Jan Beulich <jbeulich@novell.com> * gas/ia64/alloc.[sl]: New. * gas/ia64/ia64.exp: Run new test.
This commit is contained in:
@ -1,3 +1,8 @@
|
|||||||
|
2005-09-29 Jan Beulich <jbeulich@novell.com>
|
||||||
|
|
||||||
|
* config/tc-ia64.c (parse_operands): Always parse first operand of
|
||||||
|
alloc.
|
||||||
|
|
||||||
2005-09-29 Arnold Metselaar <arnold.metselaar@planet.nl>
|
2005-09-29 Arnold Metselaar <arnold.metselaar@planet.nl>
|
||||||
Alan Modra <amodra@bigpond.net.au>
|
Alan Modra <amodra@bigpond.net.au>
|
||||||
|
|
||||||
|
@ -6278,34 +6278,38 @@ parse_operands (idesc)
|
|||||||
if (idesc->operands[2] == IA64_OPND_SOF
|
if (idesc->operands[2] == IA64_OPND_SOF
|
||||||
|| idesc->operands[1] == IA64_OPND_SOF)
|
|| idesc->operands[1] == IA64_OPND_SOF)
|
||||||
{
|
{
|
||||||
/* map alloc r1=ar.pfs,i,l,o,r to alloc r1=ar.pfs,(i+l+o),(i+l),r */
|
/* Map alloc r1=ar.pfs,i,l,o,r to alloc r1=ar.pfs,(i+l+o),(i+l),r.
|
||||||
|
Note, however, that due to that mapping operand numbers in error
|
||||||
|
messages for any of the constant operands will not be correct. */
|
||||||
know (strcmp (idesc->name, "alloc") == 0);
|
know (strcmp (idesc->name, "alloc") == 0);
|
||||||
i = (CURR_SLOT.opnd[1].X_op == O_register
|
/* The first operand hasn't been parsed/initialized, yet (but
|
||||||
&& CURR_SLOT.opnd[1].X_add_number == REG_AR + AR_PFS) ? 2 : 1;
|
num_operands intentionally doesn't account for that). */
|
||||||
if (num_operands == i + 3 /* first_arg not included in this count! */
|
i = num_operands > 4 ? 2 : 1;
|
||||||
&& CURR_SLOT.opnd[i].X_op == O_constant
|
#define FORCE_CONST(n) (CURR_SLOT.opnd[n].X_op == O_constant \
|
||||||
&& CURR_SLOT.opnd[i + 1].X_op == O_constant
|
? CURR_SLOT.opnd[n].X_add_number \
|
||||||
&& CURR_SLOT.opnd[i + 2].X_op == O_constant
|
: 0)
|
||||||
&& CURR_SLOT.opnd[i + 3].X_op == O_constant)
|
sof = set_regstack (FORCE_CONST(i),
|
||||||
{
|
FORCE_CONST(i + 1),
|
||||||
sof = set_regstack (CURR_SLOT.opnd[i].X_add_number,
|
FORCE_CONST(i + 2),
|
||||||
CURR_SLOT.opnd[i + 1].X_add_number,
|
FORCE_CONST(i + 3));
|
||||||
CURR_SLOT.opnd[i + 2].X_add_number,
|
#undef FORCE_CONST
|
||||||
CURR_SLOT.opnd[i + 3].X_add_number);
|
|
||||||
|
|
||||||
/* now we can parse the first arg: */
|
/* now we can parse the first arg: */
|
||||||
saved_input_pointer = input_line_pointer;
|
saved_input_pointer = input_line_pointer;
|
||||||
input_line_pointer = first_arg;
|
input_line_pointer = first_arg;
|
||||||
sep = parse_operand (CURR_SLOT.opnd + 0, '=');
|
sep = parse_operand (CURR_SLOT.opnd + 0, '=');
|
||||||
if (sep != '=')
|
if (sep != '=')
|
||||||
--num_outputs; /* force error */
|
--num_outputs; /* force error */
|
||||||
input_line_pointer = saved_input_pointer;
|
input_line_pointer = saved_input_pointer;
|
||||||
|
|
||||||
CURR_SLOT.opnd[i].X_add_number = sof;
|
CURR_SLOT.opnd[i].X_add_number = sof;
|
||||||
CURR_SLOT.opnd[i + 1].X_add_number
|
if (CURR_SLOT.opnd[i + 1].X_op == O_constant
|
||||||
= sof - CURR_SLOT.opnd[i + 2].X_add_number;
|
&& CURR_SLOT.opnd[i + 2].X_op == O_constant)
|
||||||
CURR_SLOT.opnd[i + 2] = CURR_SLOT.opnd[i + 3];
|
CURR_SLOT.opnd[i + 1].X_add_number
|
||||||
}
|
= sof - CURR_SLOT.opnd[i + 2].X_add_number;
|
||||||
|
else
|
||||||
|
CURR_SLOT.opnd[i + 1].X_op = O_illegal;
|
||||||
|
CURR_SLOT.opnd[i + 2] = CURR_SLOT.opnd[i + 3];
|
||||||
}
|
}
|
||||||
|
|
||||||
highest_unmatched_operand = -4;
|
highest_unmatched_operand = -4;
|
||||||
|
@ -1,3 +1,8 @@
|
|||||||
|
2005-09-29 Jan Beulich <jbeulich@novell.com>
|
||||||
|
|
||||||
|
* gas/ia64/alloc.[sl]: New.
|
||||||
|
* gas/ia64/ia64.exp: Run new test.
|
||||||
|
|
||||||
2005-09-28 Jan Beulich <jbeulich@novell.com>
|
2005-09-28 Jan Beulich <jbeulich@novell.com>
|
||||||
|
|
||||||
* gas/i386/x86-64-stack.s, gas/i386/x86-64-stack.d,
|
* gas/i386/x86-64-stack.s, gas/i386/x86-64-stack.d,
|
||||||
|
11
gas/testsuite/gas/ia64/alloc.l
Normal file
11
gas/testsuite/gas/ia64/alloc.l
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
# Currently in the error messages the operand numbers for the constants
|
||||||
|
# aren't correct, which is why the patterns only check for ranges.
|
||||||
|
.*: Assembler messages:
|
||||||
|
.*:7: Error: Operand [345] of .alloc. should be .*
|
||||||
|
.*:8: Error: Operand [345] of .alloc. should be .*
|
||||||
|
.*:9: Error: Operand [345] of .alloc. should be .*
|
||||||
|
.*:10: Error: Operand [56] of .alloc. should be .*
|
||||||
|
.*:11: Error: Operand [234] of .alloc. should be .*
|
||||||
|
.*:12: Error: Operand [234] of .alloc. should be .*
|
||||||
|
.*:13: Error: Operand [234] of .alloc. should be .*
|
||||||
|
.*:14: Error: Operand [45] of .alloc. should be .*
|
14
gas/testsuite/gas/ia64/alloc.s
Normal file
14
gas/testsuite/gas/ia64/alloc.s
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
// Make sure error messages on 'alloc' don't needlessly refer to operand 1
|
||||||
|
// (which gets parsed late) when only one of the other operands is wrong.
|
||||||
|
|
||||||
|
.text
|
||||||
|
|
||||||
|
alloc:
|
||||||
|
alloc r2 = ar.pfs, x, 0, 0, 0
|
||||||
|
alloc r2 = ar.pfs, 0, x, 0, 0
|
||||||
|
alloc r2 = ar.pfs, 0, 0, x, 0
|
||||||
|
alloc r2 = ar.pfs, 0, 0, 0, x
|
||||||
|
alloc r3 = x, 0, 0, 0
|
||||||
|
alloc r3 = 0, x, 0, 0
|
||||||
|
alloc r3 = 0, 0, x, 0
|
||||||
|
alloc r3 = 0, 0, 0, x
|
@ -76,6 +76,7 @@ if [istarget "ia64-*"] then {
|
|||||||
run_dump_test "group-2"
|
run_dump_test "group-2"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
run_list_test "alloc" ""
|
||||||
run_dump_test "bundling"
|
run_dump_test "bundling"
|
||||||
run_list_test "label" ""
|
run_list_test "label" ""
|
||||||
run_list_test "last" ""
|
run_list_test "last" ""
|
||||||
|
Reference in New Issue
Block a user