alpha.md (beq): For registers and ints 0-255...

* alpha.md (beq): For registers and ints 0-255, use cmpeq+bne, since
        that pair will dual-issue on the 21164 and plus+beq won't.
        (bne): Likewise for cmpeq+beq.

From-SVN: r15814
This commit is contained in:
Richard Henderson 1997-09-30 22:04:30 -07:00 committed by Jeff Law
parent 3f34faec1a
commit e9d0757e5c
2 changed files with 30 additions and 10 deletions

View File

@ -1,3 +1,9 @@
Tue Sep 30 23:06:43 1997 Richard Henderson <rth@cygnus.com>
* alpha.md (beq): For registers and ints 0-255, use cmpeq+bne, since
that pair will dual-issue on the 21164 and plus+beq won't.
(bne): Likewise for cmpeq+beq.
Tue Sep 30 16:07:58 1997 Jim Wilson <wilson@cygnus.com>
* except.c (find_exception_handler_labels): Correct argument to free.

View File

@ -2478,16 +2478,23 @@
"
{
enum machine_mode mode;
enum rtx_code compare_code, branch_code;
enum rtx_code compare_code = EQ, branch_code = NE;
if (alpha_compare_fp_p)
mode = DFmode, compare_code = EQ, branch_code = NE;
mode = DFmode;
else
{
mode = DImode, compare_code = MINUS, branch_code = EQ;
if (GET_CODE (alpha_compare_op1) == CONST_INT)
mode = DImode;
/* We want to use cmpeq/bne when we can, since there is a zero-delay
bypass between logicals and br/cmov on the 21164. But we don't
want to force valid immediate constants into registers needlessly. */
if (GET_CODE (alpha_compare_op1) == CONST_INT
&& ((INTVAL (alpha_compare_op1) >= -0x8000
&& INTVAL (alpha_compare_op1) < 0)
|| (INTVAL (alpha_compare_op1) > 0xff
&& INTVAL (alpha_compare_op1) < 0x8000)))
{
compare_code = PLUS;
compare_code = PLUS, branch_code = EQ;
alpha_compare_op1 = GEN_INT (- INTVAL (alpha_compare_op1));
}
}
@ -2509,16 +2516,23 @@
"
{
enum machine_mode mode;
enum rtx_code compare_code, branch_code;
enum rtx_code compare_code = EQ, branch_code = EQ;
if (alpha_compare_fp_p)
mode = DFmode, compare_code = EQ, branch_code = EQ;
mode = DFmode;
else
{
mode = DImode, compare_code = MINUS, branch_code = NE;
if (GET_CODE (alpha_compare_op1) == CONST_INT)
mode = DImode;
/* We want to use cmpeq/bne when we can, since there is a zero-delay
bypass between logicals and br/cmov on the 21164. But we don't
want to force valid immediate constants into registers needlessly. */
if (GET_CODE (alpha_compare_op1) == CONST_INT
&& ((INTVAL (alpha_compare_op1) >= -0x8000
&& INTVAL (alpha_compare_op1) < 0)
|| (INTVAL (alpha_compare_op1) > 0xff
&& INTVAL (alpha_compare_op1) < 0x8000)))
{
compare_code = PLUS;
compare_code = PLUS, branch_code = NE;
alpha_compare_op1 = GEN_INT (- INTVAL (alpha_compare_op1));
}
}