sh.md (insv): Use copy_addr_to_reg.
* sh.md (insv): Use copy_addr_to_reg. * final.c (insn_lengths_max_uid) New variable. (init_insn_lengths, shorten_branches): Set it. (get_attr_lengths): Test insn uid against insn_lengths_max_uid. From-SVN: r26676
This commit is contained in:
parent
f915e937d9
commit
ea3cbda501
@ -1,3 +1,11 @@
|
|||||||
|
Tue Apr 27 20:19:47 1999 J"orn Rennecke <amylaar@cygnus.co.uk>
|
||||||
|
|
||||||
|
* sh.md (insv): Use copy_addr_to_reg.
|
||||||
|
|
||||||
|
* final.c (insn_lengths_max_uid) New variable.
|
||||||
|
(init_insn_lengths, shorten_branches): Set it.
|
||||||
|
(get_attr_lengths): Test insn uid against insn_lengths_max_uid.
|
||||||
|
|
||||||
1999-04-27 08:32 -0400 Zack Weinberg <zack@rabi.columbia.edu>
|
1999-04-27 08:32 -0400 Zack Weinberg <zack@rabi.columbia.edu>
|
||||||
|
|
||||||
* expr.c (emit_move_insn_1): Abort if MODE argument is invalid.
|
* expr.c (emit_move_insn_1): Abort if MODE argument is invalid.
|
||||||
|
@ -4414,10 +4414,9 @@
|
|||||||
|
|
||||||
size /= 8;
|
size /= 8;
|
||||||
orig_address = XEXP (operands[0], 0);
|
orig_address = XEXP (operands[0], 0);
|
||||||
addr_target = gen_reg_rtx (SImode);
|
|
||||||
shift_reg = gen_reg_rtx (SImode);
|
shift_reg = gen_reg_rtx (SImode);
|
||||||
emit_insn (gen_movsi (shift_reg, operands[3]));
|
emit_insn (gen_movsi (shift_reg, operands[3]));
|
||||||
emit_insn (gen_addsi3 (addr_target, orig_address, GEN_INT (size - 1)));
|
addr_target = copy_addr_to_reg (plus_constant (orig_address, size - 1));
|
||||||
|
|
||||||
operands[0] = change_address (operands[0], QImode, addr_target);
|
operands[0] = change_address (operands[0], QImode, addr_target);
|
||||||
emit_insn (gen_movqi (operands[0], gen_rtx (SUBREG, QImode, shift_reg, 0)));
|
emit_insn (gen_movqi (operands[0], gen_rtx (SUBREG, QImode, shift_reg, 0)));
|
||||||
|
@ -627,6 +627,9 @@ dbr_sequence_length ()
|
|||||||
static short *insn_lengths;
|
static short *insn_lengths;
|
||||||
int *insn_addresses;
|
int *insn_addresses;
|
||||||
|
|
||||||
|
/* Max uid for which the above arrays are valid. */
|
||||||
|
static int insn_lengths_max_uid;
|
||||||
|
|
||||||
/* Address of insn being processed. Used by `insn_current_length'. */
|
/* Address of insn being processed. Used by `insn_current_length'. */
|
||||||
int insn_current_address;
|
int insn_current_address;
|
||||||
|
|
||||||
@ -673,6 +676,7 @@ init_insn_lengths ()
|
|||||||
{
|
{
|
||||||
free (insn_lengths);
|
free (insn_lengths);
|
||||||
insn_lengths = 0;
|
insn_lengths = 0;
|
||||||
|
insn_lengths_max_uid = 0;
|
||||||
}
|
}
|
||||||
if (insn_addresses)
|
if (insn_addresses)
|
||||||
{
|
{
|
||||||
@ -698,7 +702,7 @@ get_attr_length (insn)
|
|||||||
int i;
|
int i;
|
||||||
int length = 0;
|
int length = 0;
|
||||||
|
|
||||||
if (insn_lengths)
|
if (insn_lengths_max_uid > INSN_UID (insn))
|
||||||
return insn_lengths[INSN_UID (insn)];
|
return insn_lengths[INSN_UID (insn)];
|
||||||
else
|
else
|
||||||
switch (GET_CODE (insn))
|
switch (GET_CODE (insn))
|
||||||
@ -1128,6 +1132,7 @@ shorten_branches (first)
|
|||||||
/* Allocate the rest of the arrays. */
|
/* Allocate the rest of the arrays. */
|
||||||
insn_lengths = (short *) xmalloc (max_uid * sizeof (short));
|
insn_lengths = (short *) xmalloc (max_uid * sizeof (short));
|
||||||
insn_addresses = (int *) xmalloc (max_uid * sizeof (int));
|
insn_addresses = (int *) xmalloc (max_uid * sizeof (int));
|
||||||
|
insn_lengths_max_uid = max_uid;
|
||||||
/* Syntax errors can lead to labels being outside of the main insn stream.
|
/* Syntax errors can lead to labels being outside of the main insn stream.
|
||||||
Initialize insn_addresses, so that we get reproducible results. */
|
Initialize insn_addresses, so that we get reproducible results. */
|
||||||
bzero ((char *)insn_addresses, max_uid * sizeof *insn_addresses);
|
bzero ((char *)insn_addresses, max_uid * sizeof *insn_addresses);
|
||||||
|
Loading…
Reference in New Issue
Block a user