re PR target/27405 (gcc.c-torture/execute/960209-1.c ICEs on sh64-* with -O3)

PR target/27405
	* config/sh/sh.md (cmp{eq,gt,gtu}{si,di}_media): Remove.
	(cmpsi{eq,gt,gtu}{si,di}_media): Rename to
	cmp{eq,gt,gtu}{si,di}_media.
	(*cmpne0si_media): Remove.
	(*movsicc_umin): Adjust gen_cmp*_media call.
	(unordered): Change the mode of unordered and operands[1] to
	SImode.
	(seq): Adjust gen_cmp*_media calls.  Make the mode of
	a temporary result of compare SImode if needed.  If the mode
	of operands[0] is DImode, extend the temporary result to DImode.
	(slt, sle, sgt, sge, sgtu, sltu, sleu, sgue, sne): Likewise.
	(sunorderd): Change the mode of match_operand and unorderd to
	SImode.
	(cmpeq{sf,df}_media): Remove.
	(cmpsieq{sf,df}_media): Rename to cmpeq{sf,df}_media.
	(cmp{gt,ge,un}{sf,df}_media): Change the mode of match_operand
	and compare operation to SImode.

From-SVN: r118435
This commit is contained in:
Kaz Kojima 2006-11-02 22:57:13 +00:00
parent a6f07cc35d
commit 537426e7ad
2 changed files with 169 additions and 153 deletions

View File

@ -1,3 +1,24 @@
2006-11-02 Kaz Kojima <kkojima@gcc.gnu.org>
PR target/27405
* config/sh/sh.md (cmp{eq,gt,gtu}{si,di}_media): Remove.
(cmpsi{eq,gt,gtu}{si,di}_media): Rename to
cmp{eq,gt,gtu}{si,di}_media.
(*cmpne0si_media): Remove.
(*movsicc_umin): Adjust gen_cmp*_media call.
(unordered): Change the mode of unordered and operands[1] to
SImode.
(seq): Adjust gen_cmp*_media calls. Make the mode of
a temporary result of compare SImode if needed. If the mode
of operands[0] is DImode, extend the temporary result to DImode.
(slt, sle, sgt, sge, sgtu, sltu, sleu, sgue, sne): Likewise.
(sunorderd): Change the mode of match_operand and unorderd to
SImode.
(cmpeq{sf,df}_media): Remove.
(cmpsieq{sf,df}_media): Rename to cmpeq{sf,df}_media.
(cmp{gt,ge,un}{sf,df}_media): Change the mode of match_operand
and compare operation to SImode.
2006-11-02 Eric Botcazou <ebotcazou@libertysurf.fr>
* doc/install.texi (sparc-sun-solaris2*): Update GMP/MPFR build

View File

@ -751,54 +751,6 @@
(set_attr "type" "arith3")])
(define_insn "cmpeqsi_media"
[(set (match_operand:DI 0 "register_operand" "=r")
(eq:DI (match_operand:SI 1 "logical_operand" "%r")
(match_operand:SI 2 "cmp_operand" "Nr")))]
"TARGET_SHMEDIA"
"cmpeq %1, %N2, %0"
[(set_attr "type" "cmp_media")])
(define_insn "cmpeqdi_media"
[(set (match_operand:DI 0 "register_operand" "=r")
(eq:DI (match_operand:DI 1 "register_operand" "%r")
(match_operand:DI 2 "cmp_operand" "Nr")))]
"TARGET_SHMEDIA"
"cmpeq %1, %N2, %0"
[(set_attr "type" "cmp_media")])
(define_insn "cmpgtsi_media"
[(set (match_operand:DI 0 "register_operand" "=r")
(gt:DI (match_operand:SI 1 "cmp_operand" "Nr")
(match_operand:SI 2 "cmp_operand" "rN")))]
"TARGET_SHMEDIA"
"cmpgt %N1, %N2, %0"
[(set_attr "type" "cmp_media")])
(define_insn "cmpgtdi_media"
[(set (match_operand:DI 0 "register_operand" "=r")
(gt:DI (match_operand:DI 1 "arith_reg_or_0_operand" "Nr")
(match_operand:DI 2 "arith_reg_or_0_operand" "rN")))]
"TARGET_SHMEDIA"
"cmpgt %N1, %N2, %0"
[(set_attr "type" "cmp_media")])
(define_insn "cmpgtusi_media"
[(set (match_operand:DI 0 "register_operand" "=r")
(gtu:DI (match_operand:SI 1 "cmp_operand" "Nr")
(match_operand:SI 2 "cmp_operand" "rN")))]
"TARGET_SHMEDIA"
"cmpgtu %N1, %N2, %0"
[(set_attr "type" "cmp_media")])
(define_insn "cmpgtudi_media"
[(set (match_operand:DI 0 "register_operand" "=r")
(gtu:DI (match_operand:DI 1 "arith_reg_or_0_operand" "Nr")
(match_operand:DI 2 "arith_reg_or_0_operand" "rN")))]
"TARGET_SHMEDIA"
"cmpgtu %N1, %N2, %0"
[(set_attr "type" "cmp_media")])
(define_insn "cmpsieqsi_media"
[(set (match_operand:SI 0 "register_operand" "=r")
(eq:SI (match_operand:SI 1 "logical_operand" "%r")
(match_operand:SI 2 "cmp_operand" "Nr")))]
@ -806,7 +758,7 @@
"cmpeq %1, %N2, %0"
[(set_attr "type" "cmp_media")])
(define_insn "cmpsieqdi_media"
(define_insn "cmpeqdi_media"
[(set (match_operand:SI 0 "register_operand" "=r")
(eq:SI (match_operand:DI 1 "register_operand" "%r")
(match_operand:DI 2 "cmp_operand" "Nr")))]
@ -814,7 +766,7 @@
"cmpeq %1, %N2, %0"
[(set_attr "type" "cmp_media")])
(define_insn "cmpsigtsi_media"
(define_insn "cmpgtsi_media"
[(set (match_operand:SI 0 "register_operand" "=r")
(gt:SI (match_operand:SI 1 "cmp_operand" "Nr")
(match_operand:SI 2 "cmp_operand" "rN")))]
@ -822,7 +774,7 @@
"cmpgt %N1, %N2, %0"
[(set_attr "type" "cmp_media")])
(define_insn "cmpsigtdi_media"
(define_insn "cmpgtdi_media"
[(set (match_operand:SI 0 "register_operand" "=r")
(gt:SI (match_operand:DI 1 "arith_reg_or_0_operand" "Nr")
(match_operand:DI 2 "arith_reg_or_0_operand" "rN")))]
@ -830,7 +782,7 @@
"cmpgt %N1, %N2, %0"
[(set_attr "type" "cmp_media")])
(define_insn "cmpsigtusi_media"
(define_insn "cmpgtusi_media"
[(set (match_operand:SI 0 "register_operand" "=r")
(gtu:SI (match_operand:SI 1 "cmp_operand" "Nr")
(match_operand:SI 2 "cmp_operand" "rN")))]
@ -838,7 +790,7 @@
"cmpgtu %N1, %N2, %0"
[(set_attr "type" "cmp_media")])
(define_insn "cmpsigtudi_media"
(define_insn "cmpgtudi_media"
[(set (match_operand:SI 0 "register_operand" "=r")
(gtu:SI (match_operand:DI 1 "arith_reg_or_0_operand" "Nr")
(match_operand:DI 2 "arith_reg_or_0_operand" "rN")))]
@ -847,13 +799,6 @@
[(set_attr "type" "cmp_media")])
; These two patterns are for combine.
(define_insn "*cmpne0si_media"
[(set (match_operand:DI 0 "register_operand" "=r")
(ne:DI (match_operand:SI 1 "arith_reg_operand" "r") (const_int 0)))]
"TARGET_SHMEDIA"
"cmpgtu %1,r63,%0"
[(set_attr "type" "cmp_media")])
(define_insn "*cmpne0sisi_media"
[(set (match_operand:SI 0 "register_operand" "=r")
(ne:SI (match_operand:SI 1 "arith_reg_operand" "r") (const_int 0)))]
@ -1178,7 +1123,7 @@
{
emit_insn (gen_movsicc_false (operands[0], operands[1], operands[2],
operands[3]));
emit_insn (gen_cmpsigtusi_media (operands[5], operands[4], operands[0]));
emit_insn (gen_cmpgtusi_media (operands[5], operands[4], operands[0]));
emit_insn (gen_movsicc_false (operands[0], operands[5], operands[4],
operands[0]));
DONE;
@ -7201,7 +7146,7 @@ label:
}")
(define_expand "bunordered"
[(set (match_dup 1) (unordered:DI (match_dup 2) (match_dup 3)))
[(set (match_dup 1) (unordered:SI (match_dup 2) (match_dup 3)))
(set (pc)
(if_then_else (ne (match_dup 1) (const_int 0))
(match_operand 0 "" "")
@ -7210,7 +7155,7 @@ label:
"
{
operands[0] = gen_rtx_LABEL_REF (Pmode, operands[0]);
operands[1] = gen_reg_rtx (DImode);
operands[1] = gen_reg_rtx (SImode);
operands[2] = force_reg (GET_MODE (sh_compare_op0), sh_compare_op0);
operands[3] = force_reg (GET_MODE (sh_compare_op1), sh_compare_op1);
}")
@ -9113,6 +9058,8 @@ mov.l\\t1f,r0\\n\\
{
if (TARGET_SHMEDIA)
{
rtx reg;
sh_compare_op0 = force_reg (GET_MODE (sh_compare_op0), sh_compare_op0);
if (sh_compare_op1 != const0_rtx)
sh_compare_op1 = force_reg (GET_MODE (sh_compare_op1) == VOIDmode
@ -9127,26 +9074,26 @@ mov.l\\t1f,r0\\n\\
switch (GET_MODE (sh_compare_op0))
{
case SImode:
emit_insn (gen_cmpsieqsi_media (operands[0],
emit_insn (gen_cmpeqsi_media (operands[0],
sh_compare_op0, sh_compare_op1));
break;
case DImode:
emit_insn (gen_cmpsieqdi_media (operands[0],
emit_insn (gen_cmpeqdi_media (operands[0],
sh_compare_op0, sh_compare_op1));
break;
case SFmode:
if (! TARGET_SHMEDIA_FPU)
FAIL;
emit_insn (gen_cmpsieqsf_media (operands[0],
emit_insn (gen_cmpeqsf_media (operands[0],
sh_compare_op0, sh_compare_op1));
break;
case DFmode:
if (! TARGET_SHMEDIA_FPU)
FAIL;
emit_insn (gen_cmpsieqdf_media (operands[0],
emit_insn (gen_cmpeqdf_media (operands[0],
sh_compare_op0, sh_compare_op1));
break;
@ -9156,38 +9103,44 @@ mov.l\\t1f,r0\\n\\
DONE;
}
if (GET_MODE (operands[0]) != DImode)
operands[0] = gen_rtx_SUBREG (DImode, operands[0], 0);
reg = operands[0];
if (GET_MODE (operands[0]) != SImode)
reg = no_new_pseudos ? gen_rtx_SUBREG (SImode, operands[0], 0)
: gen_reg_rtx (SImode);
switch (GET_MODE (sh_compare_op0))
{
case SImode:
emit_insn (gen_cmpeqsi_media (operands[0],
emit_insn (gen_cmpeqsi_media (reg,
sh_compare_op0, sh_compare_op1));
break;
case DImode:
emit_insn (gen_cmpeqdi_media (operands[0],
emit_insn (gen_cmpeqdi_media (reg,
sh_compare_op0, sh_compare_op1));
break;
case SFmode:
if (! TARGET_SHMEDIA_FPU)
FAIL;
emit_insn (gen_cmpeqsf_media (operands[0],
emit_insn (gen_cmpeqsf_media (reg,
sh_compare_op0, sh_compare_op1));
break;
case DFmode:
if (! TARGET_SHMEDIA_FPU)
FAIL;
emit_insn (gen_cmpeqdf_media (operands[0],
emit_insn (gen_cmpeqdf_media (reg,
sh_compare_op0, sh_compare_op1));
break;
default:
FAIL;
}
if (GET_MODE (operands[0]) == DImode)
emit_insn (gen_extendsidi2 (operands[0], reg));
DONE;
}
if (sh_expand_t_scc (EQ, operands[0]))
@ -9205,8 +9158,8 @@ mov.l\\t1f,r0\\n\\
{
if (TARGET_SHMEDIA)
{
if (GET_MODE (operands[0]) != DImode)
operands[0] = gen_rtx_SUBREG (DImode, operands[0], 0);
rtx reg;
sh_compare_op0 = force_reg (GET_MODE (sh_compare_op0), sh_compare_op0);
if (sh_compare_op1 != const0_rtx)
sh_compare_op1 = force_reg (GET_MODE (sh_compare_op1) == VOIDmode
@ -9214,35 +9167,44 @@ mov.l\\t1f,r0\\n\\
: GET_MODE (sh_compare_op1),
sh_compare_op1);
reg = operands[0];
if (GET_MODE (operands[0]) != SImode)
reg = no_new_pseudos ? gen_rtx_SUBREG (SImode, operands[0], 0)
: gen_reg_rtx (SImode);
switch (GET_MODE (sh_compare_op0))
{
case SImode:
emit_insn (gen_cmpgtsi_media (operands[0],
emit_insn (gen_cmpgtsi_media (reg,
sh_compare_op1, sh_compare_op0));
break;
case DImode:
emit_insn (gen_cmpgtdi_media (operands[0],
emit_insn (gen_cmpgtdi_media (reg,
sh_compare_op1, sh_compare_op0));
break;
case SFmode:
if (! TARGET_SHMEDIA_FPU)
FAIL;
emit_insn (gen_cmpgtsf_media (operands[0],
emit_insn (gen_cmpgtsf_media (reg,
sh_compare_op1, sh_compare_op0));
break;
case DFmode:
if (! TARGET_SHMEDIA_FPU)
FAIL;
emit_insn (gen_cmpgtdf_media (operands[0],
emit_insn (gen_cmpgtdf_media (reg,
sh_compare_op1, sh_compare_op0));
break;
default:
FAIL;
}
if (GET_MODE (operands[0]) == DImode)
emit_insn (gen_extendsidi2 (operands[0], reg));
DONE;
}
if (! currently_expanding_to_rtl)
@ -9259,8 +9221,8 @@ mov.l\\t1f,r0\\n\\
if (TARGET_SHMEDIA)
{
if (GET_MODE (operands[0]) != DImode)
operands[0] = gen_rtx_SUBREG (DImode, operands[0], 0);
rtx reg;
sh_compare_op0 = force_reg (GET_MODE (sh_compare_op0), sh_compare_op0);
if (sh_compare_op1 != const0_rtx)
sh_compare_op1 = force_reg (GET_MODE (sh_compare_op1) == VOIDmode
@ -9268,45 +9230,54 @@ mov.l\\t1f,r0\\n\\
: GET_MODE (sh_compare_op1),
sh_compare_op1);
reg = operands[0];
if (GET_MODE (operands[0]) != SImode)
reg = no_new_pseudos ? gen_rtx_SUBREG (SImode, operands[0], 0)
: gen_reg_rtx (SImode);
switch (GET_MODE (sh_compare_op0))
{
case SImode:
{
tmp = no_new_pseudos ? operands[0] : gen_reg_rtx (DImode);
tmp = no_new_pseudos ? reg : gen_reg_rtx (SImode);
emit_insn (gen_cmpgtsi_media (tmp,
sh_compare_op0, sh_compare_op1));
emit_insn (gen_cmpeqdi_media (operands[0], tmp, const0_rtx));
emit_insn (gen_cmpeqdi_media (reg, tmp, const0_rtx));
break;
}
case DImode:
{
tmp = no_new_pseudos ? operands[0] : gen_reg_rtx (DImode);
tmp = no_new_pseudos ? reg : gen_reg_rtx (SImode);
emit_insn (gen_cmpgtdi_media (tmp,
sh_compare_op0, sh_compare_op1));
emit_insn (gen_cmpeqdi_media (operands[0], tmp, const0_rtx));
emit_insn (gen_cmpeqdi_media (reg, tmp, const0_rtx));
break;
}
case SFmode:
if (! TARGET_SHMEDIA_FPU)
FAIL;
emit_insn (gen_cmpgesf_media (operands[0],
emit_insn (gen_cmpgesf_media (reg,
sh_compare_op1, sh_compare_op0));
break;
case DFmode:
if (! TARGET_SHMEDIA_FPU)
FAIL;
emit_insn (gen_cmpgedf_media (operands[0],
emit_insn (gen_cmpgedf_media (reg,
sh_compare_op1, sh_compare_op0));
break;
default:
FAIL;
}
if (GET_MODE (operands[0]) == DImode)
emit_insn (gen_extendsidi2 (operands[0], reg));
DONE;
}
@ -9324,8 +9295,12 @@ mov.l\\t1f,r0\\n\\
{
if (TARGET_SHMEDIA)
{
if (GET_MODE (operands[0]) != DImode)
operands[0] = gen_rtx_SUBREG (DImode, operands[0], 0);
rtx reg;
reg = operands[0];
if (GET_MODE (operands[0]) != SImode)
reg = no_new_pseudos ? gen_rtx_SUBREG (SImode, operands[0], 0)
: gen_reg_rtx (SImode);
sh_compare_op0 = force_reg (GET_MODE (sh_compare_op0), sh_compare_op0);
if (sh_compare_op1 != const0_rtx)
sh_compare_op1 = force_reg (GET_MODE (sh_compare_op1) == VOIDmode
@ -9336,32 +9311,36 @@ mov.l\\t1f,r0\\n\\
switch (GET_MODE (sh_compare_op0))
{
case SImode:
emit_insn (gen_cmpgtsi_media (operands[0],
emit_insn (gen_cmpgtsi_media (reg,
sh_compare_op0, sh_compare_op1));
break;
case DImode:
emit_insn (gen_cmpgtdi_media (operands[0],
emit_insn (gen_cmpgtdi_media (reg,
sh_compare_op0, sh_compare_op1));
break;
case SFmode:
if (! TARGET_SHMEDIA_FPU)
FAIL;
emit_insn (gen_cmpgtsf_media (operands[0],
emit_insn (gen_cmpgtsf_media (reg,
sh_compare_op0, sh_compare_op1));
break;
case DFmode:
if (! TARGET_SHMEDIA_FPU)
FAIL;
emit_insn (gen_cmpgtdf_media (operands[0],
emit_insn (gen_cmpgtdf_media (reg,
sh_compare_op0, sh_compare_op1));
break;
default:
FAIL;
}
if (GET_MODE (operands[0]) == DImode)
emit_insn (gen_extendsidi2 (operands[0], reg));
DONE;
}
if (! currently_expanding_to_rtl)
@ -9377,12 +9356,15 @@ mov.l\\t1f,r0\\n\\
{
if (TARGET_SHMEDIA)
{
rtx reg;
enum machine_mode mode = GET_MODE (sh_compare_op0);
if ((mode) == VOIDmode)
mode = GET_MODE (sh_compare_op1);
if (GET_MODE (operands[0]) != DImode)
operands[0] = gen_rtx_SUBREG (DImode, operands[0], 0);
reg = operands[0];
if (GET_MODE (operands[0]) != SImode)
reg = no_new_pseudos ? gen_rtx_SUBREG (SImode, operands[0], 0)
: gen_reg_rtx (SImode);
sh_compare_op0 = force_reg (mode, sh_compare_op0);
if (sh_compare_op1 != const0_rtx)
sh_compare_op1 = force_reg (mode, sh_compare_op1);
@ -9391,41 +9373,45 @@ mov.l\\t1f,r0\\n\\
{
case SImode:
{
rtx tmp = no_new_pseudos ? operands[0] : gen_reg_rtx (DImode);
rtx tmp = no_new_pseudos ? reg : gen_reg_rtx (SImode);
emit_insn (gen_cmpgtsi_media (tmp,
sh_compare_op1, sh_compare_op0));
emit_insn (gen_cmpeqdi_media (operands[0], tmp, const0_rtx));
emit_insn (gen_cmpeqdi_media (reg, tmp, const0_rtx));
break;
}
case DImode:
{
rtx tmp = no_new_pseudos ? operands[0] : gen_reg_rtx (DImode);
rtx tmp = no_new_pseudos ? reg : gen_reg_rtx (SImode);
emit_insn (gen_cmpgtdi_media (tmp,
sh_compare_op1, sh_compare_op0));
emit_insn (gen_cmpeqdi_media (operands[0], tmp, const0_rtx));
emit_insn (gen_cmpeqdi_media (reg, tmp, const0_rtx));
break;
}
case SFmode:
if (! TARGET_SHMEDIA_FPU)
FAIL;
emit_insn (gen_cmpgesf_media (operands[0],
emit_insn (gen_cmpgesf_media (reg,
sh_compare_op0, sh_compare_op1));
break;
case DFmode:
if (! TARGET_SHMEDIA_FPU)
FAIL;
emit_insn (gen_cmpgedf_media (operands[0],
emit_insn (gen_cmpgedf_media (reg,
sh_compare_op0, sh_compare_op1));
break;
default:
FAIL;
}
if (GET_MODE (operands[0]) == DImode)
emit_insn (gen_extendsidi2 (operands[0], reg));
DONE;
}
@ -9457,8 +9443,12 @@ mov.l\\t1f,r0\\n\\
{
if (TARGET_SHMEDIA)
{
if (GET_MODE (operands[0]) != DImode)
operands[0] = gen_rtx_SUBREG (DImode, operands[0], 0);
rtx reg;
reg = operands[0];
if (GET_MODE (operands[0]) == DImode)
reg = no_new_pseudos ? gen_rtx_SUBREG (SImode, operands[0], 0)
: gen_reg_rtx (SImode);
sh_compare_op0 = force_reg (GET_MODE (sh_compare_op0), sh_compare_op0);
if (sh_compare_op1 != const0_rtx)
sh_compare_op1 = force_reg (GET_MODE (sh_compare_op1) == VOIDmode
@ -9466,8 +9456,11 @@ mov.l\\t1f,r0\\n\\
: GET_MODE (sh_compare_op1),
sh_compare_op1);
emit_insn (gen_cmpgtudi_media (operands[0],
emit_insn (gen_cmpgtudi_media (reg,
sh_compare_op0, sh_compare_op1));
if (GET_MODE (operands[0]) == DImode)
emit_insn (gen_extendsidi2 (operands[0], reg));
DONE;
}
if (! currently_expanding_to_rtl)
@ -9483,8 +9476,12 @@ mov.l\\t1f,r0\\n\\
{
if (TARGET_SHMEDIA)
{
if (GET_MODE (operands[0]) != DImode)
operands[0] = gen_rtx_SUBREG (DImode, operands[0], 0);
rtx reg;
reg = operands[0];
if (GET_MODE (operands[0]) == DImode)
reg = no_new_pseudos ? gen_rtx_SUBREG (SImode, operands[0], 0)
: gen_reg_rtx (SImode);
sh_compare_op0 = force_reg (GET_MODE (sh_compare_op0), sh_compare_op0);
if (sh_compare_op1 != const0_rtx)
sh_compare_op1 = force_reg (GET_MODE (sh_compare_op1) == VOIDmode
@ -9492,8 +9489,11 @@ mov.l\\t1f,r0\\n\\
: GET_MODE (sh_compare_op1),
sh_compare_op1);
emit_insn (gen_cmpgtudi_media (operands[0],
emit_insn (gen_cmpgtudi_media (reg,
sh_compare_op1, sh_compare_op0));
if (GET_MODE (operands[0]) == DImode)
emit_insn (gen_extendsidi2 (operands[0], reg));
DONE;
}
if (! currently_expanding_to_rtl)
@ -9509,10 +9509,12 @@ mov.l\\t1f,r0\\n\\
{
if (TARGET_SHMEDIA)
{
rtx tmp;
rtx tmp, reg;
if (GET_MODE (operands[0]) != DImode)
operands[0] = gen_rtx_SUBREG (DImode, operands[0], 0);
reg = operands[0];
if (GET_MODE (operands[0]) != SImode)
reg = no_new_pseudos ? gen_rtx_SUBREG (SImode, operands[0], 0)
: gen_reg_rtx (SImode);
sh_compare_op0 = force_reg (GET_MODE (sh_compare_op0), sh_compare_op0);
if (sh_compare_op1 != const0_rtx)
sh_compare_op1 = force_reg (GET_MODE (sh_compare_op1) == VOIDmode
@ -9520,10 +9522,12 @@ mov.l\\t1f,r0\\n\\
: GET_MODE (sh_compare_op1),
sh_compare_op1);
tmp = no_new_pseudos ? operands[0] : gen_reg_rtx (DImode);
tmp = no_new_pseudos ? reg : gen_reg_rtx (SImode);
emit_insn (gen_cmpgtudi_media (tmp, sh_compare_op0, sh_compare_op1));
emit_insn (gen_cmpeqdi_media (operands[0], tmp, const0_rtx));
emit_insn (gen_cmpeqdi_media (reg, tmp, const0_rtx));
if (GET_MODE (operands[0]) == DImode)
emit_insn (gen_extendsidi2 (operands[0], reg));
DONE;
}
@ -9540,10 +9544,12 @@ mov.l\\t1f,r0\\n\\
{
if (TARGET_SHMEDIA)
{
rtx tmp;
rtx tmp, reg;
if (GET_MODE (operands[0]) != DImode)
operands[0] = gen_rtx_SUBREG (DImode, operands[0], 0);
reg = operands[0];
if (GET_MODE (operands[0]) != SImode)
reg = no_new_pseudos ? gen_rtx_SUBREG (SImode, operands[0], 0)
: gen_reg_rtx (SImode);
sh_compare_op0 = force_reg (GET_MODE (sh_compare_op0), sh_compare_op0);
if (sh_compare_op1 != const0_rtx)
sh_compare_op1 = force_reg (GET_MODE (sh_compare_op1) == VOIDmode
@ -9551,10 +9557,12 @@ mov.l\\t1f,r0\\n\\
: GET_MODE (sh_compare_op1),
sh_compare_op1);
tmp = no_new_pseudos ? operands[0] : gen_reg_rtx (DImode);
tmp = no_new_pseudos ? operands[0] : gen_reg_rtx (SImode);
emit_insn (gen_cmpgtudi_media (tmp, sh_compare_op1, sh_compare_op0));
emit_insn (gen_cmpeqdi_media (operands[0], tmp, const0_rtx));
emit_insn (gen_cmpeqdi_media (reg, tmp, const0_rtx));
if (GET_MODE (operands[0]) == DImode)
emit_insn (gen_extendsidi2 (operands[0], reg));
DONE;
}
@ -9585,11 +9593,12 @@ mov.l\\t1f,r0\\n\\
{
if (TARGET_SHMEDIA)
{
rtx tmp;
if (GET_MODE (operands[0]) != DImode)
operands[0] = gen_rtx_SUBREG (DImode, operands[0], 0);
rtx tmp, reg;
reg = operands[0];
if (GET_MODE (operands[0]) != SImode)
reg = no_new_pseudos ? gen_rtx_SUBREG (SImode, operands[0], 0)
: gen_reg_rtx (SImode);
if (! TARGET_SHMEDIA_FPU
&& GET_MODE (sh_compare_op0) != DImode
&& GET_MODE (sh_compare_op0) != SImode)
@ -9602,10 +9611,12 @@ mov.l\\t1f,r0\\n\\
: GET_MODE (sh_compare_op1),
sh_compare_op1);
tmp = no_new_pseudos ? operands[0] : gen_reg_rtx (DImode);
tmp = no_new_pseudos ? reg : gen_reg_rtx (SImode);
emit_insn (gen_seq (tmp));
emit_insn (gen_cmpeqdi_media (operands[0], tmp, const0_rtx));
emit_insn (gen_cmpeqdi_media (reg, tmp, const0_rtx));
if (GET_MODE (operands[0]) == DImode)
emit_insn (gen_extendsidi2 (operands[0], reg));
DONE;
}
@ -9619,8 +9630,8 @@ mov.l\\t1f,r0\\n\\
}")
(define_expand "sunordered"
[(set (match_operand:DI 0 "arith_reg_operand" "")
(unordered:DI (match_dup 1) (match_dup 2)))]
[(set (match_operand:SI 0 "arith_reg_operand" "")
(unordered:SI (match_dup 1) (match_dup 2)))]
"TARGET_SHMEDIA_FPU"
"
{
@ -10379,14 +10390,6 @@ mov.l\\t1f,r0\\n\\
(set_attr "fp_mode" "single")])
(define_insn "cmpeqsf_media"
[(set (match_operand:DI 0 "register_operand" "=r")
(eq:DI (match_operand:SF 1 "fp_arith_reg_operand" "f")
(match_operand:SF 2 "fp_arith_reg_operand" "f")))]
"TARGET_SHMEDIA_FPU"
"fcmpeq.s %1, %2, %0"
[(set_attr "type" "fcmp_media")])
(define_insn "cmpsieqsf_media"
[(set (match_operand:SI 0 "register_operand" "=r")
(eq:SI (match_operand:SF 1 "fp_arith_reg_operand" "f")
(match_operand:SF 2 "fp_arith_reg_operand" "f")))]
@ -10395,24 +10398,24 @@ mov.l\\t1f,r0\\n\\
[(set_attr "type" "fcmp_media")])
(define_insn "cmpgtsf_media"
[(set (match_operand:DI 0 "register_operand" "=r")
(gt:DI (match_operand:SF 1 "fp_arith_reg_operand" "f")
[(set (match_operand:SI 0 "register_operand" "=r")
(gt:SI (match_operand:SF 1 "fp_arith_reg_operand" "f")
(match_operand:SF 2 "fp_arith_reg_operand" "f")))]
"TARGET_SHMEDIA_FPU"
"fcmpgt.s %1, %2, %0"
[(set_attr "type" "fcmp_media")])
(define_insn "cmpgesf_media"
[(set (match_operand:DI 0 "register_operand" "=r")
(ge:DI (match_operand:SF 1 "fp_arith_reg_operand" "f")
[(set (match_operand:SI 0 "register_operand" "=r")
(ge:SI (match_operand:SF 1 "fp_arith_reg_operand" "f")
(match_operand:SF 2 "fp_arith_reg_operand" "f")))]
"TARGET_SHMEDIA_FPU"
"fcmpge.s %1, %2, %0"
[(set_attr "type" "fcmp_media")])
(define_insn "cmpunsf_media"
[(set (match_operand:DI 0 "register_operand" "=r")
(unordered:DI (match_operand:SF 1 "fp_arith_reg_operand" "f")
[(set (match_operand:SI 0 "register_operand" "=r")
(unordered:SI (match_operand:SF 1 "fp_arith_reg_operand" "f")
(match_operand:SF 2 "fp_arith_reg_operand" "f")))]
"TARGET_SHMEDIA_FPU"
"fcmpun.s %1, %2, %0"
@ -10885,14 +10888,6 @@ mov.l\\t1f,r0\\n\\
(set_attr "fp_mode" "double")])
(define_insn "cmpeqdf_media"
[(set (match_operand:DI 0 "register_operand" "=r")
(eq:DI (match_operand:DF 1 "fp_arith_reg_operand" "f")
(match_operand:DF 2 "fp_arith_reg_operand" "f")))]
"TARGET_SHMEDIA_FPU"
"fcmpeq.d %1,%2,%0"
[(set_attr "type" "fcmp_media")])
(define_insn "cmpsieqdf_media"
[(set (match_operand:SI 0 "register_operand" "=r")
(eq:SI (match_operand:DF 1 "fp_arith_reg_operand" "f")
(match_operand:DF 2 "fp_arith_reg_operand" "f")))]
@ -10901,24 +10896,24 @@ mov.l\\t1f,r0\\n\\
[(set_attr "type" "fcmp_media")])
(define_insn "cmpgtdf_media"
[(set (match_operand:DI 0 "register_operand" "=r")
(gt:DI (match_operand:DF 1 "fp_arith_reg_operand" "f")
[(set (match_operand:SI 0 "register_operand" "=r")
(gt:SI (match_operand:DF 1 "fp_arith_reg_operand" "f")
(match_operand:DF 2 "fp_arith_reg_operand" "f")))]
"TARGET_SHMEDIA_FPU"
"fcmpgt.d %1,%2,%0"
[(set_attr "type" "fcmp_media")])
(define_insn "cmpgedf_media"
[(set (match_operand:DI 0 "register_operand" "=r")
(ge:DI (match_operand:DF 1 "fp_arith_reg_operand" "f")
[(set (match_operand:SI 0 "register_operand" "=r")
(ge:SI (match_operand:DF 1 "fp_arith_reg_operand" "f")
(match_operand:DF 2 "fp_arith_reg_operand" "f")))]
"TARGET_SHMEDIA_FPU"
"fcmpge.d %1,%2,%0"
[(set_attr "type" "fcmp_media")])
(define_insn "cmpundf_media"
[(set (match_operand:DI 0 "register_operand" "=r")
(unordered:DI (match_operand:DF 1 "fp_arith_reg_operand" "f")
[(set (match_operand:SI 0 "register_operand" "=r")
(unordered:SI (match_operand:DF 1 "fp_arith_reg_operand" "f")
(match_operand:DF 2 "fp_arith_reg_operand" "f")))]
"TARGET_SHMEDIA_FPU"
"fcmpun.d %1,%2,%0"