re PR target/27287 (returning constant double)

2006-09-11  Guenter Roeck  <guenter@roeck-us.net>
            David Edelsohn  <edelsohn@gnu.org>

        PR target/27287
        * config/rs6000/spe.md (frob_df_di): Remove %H.
        (frob_di_df): Remove %H.  Change evmergelo to mr.
        (frob_di_df_2): Remove %H.  Change evldd to two loads.

Co-Authored-By: David Edelsohn <edelsohn@gnu.org>

From-SVN: r116850
This commit is contained in:
Guenter Roeck 2006-09-11 17:05:15 +00:00 committed by David Edelsohn
parent 0c387be360
commit d295200882
2 changed files with 32 additions and 7 deletions

View file

@ -1,3 +1,11 @@
2006-09-11 Guenter Roeck <guenter@roeck-us.net>
David Edelsohn <edelsohn@gnu.org>
PR target/27287
* config/rs6000/spe.md (frob_df_di): Remove %H.
(frob_di_df): Remove %H. Change evmergelo to mr.
(frob_di_df_2): Remove %H. Change evldd to two loads.
2006-09-11 Hideki Iwamoto <h-iwamoto@kit.hi-ho.ne.jp>
* doc/cpp.texi: Fix names of charset options.

View file

@ -2200,24 +2200,41 @@
(subreg:DF (match_operand:DI 1 "input_operand" "r,m") 0))]
"TARGET_E500_DOUBLE"
"@
evmergelo %0,%H1,%L1
evmergelo %0,%1,%L1
evldd%X1 %0,%y1")
(define_insn "*frob_di_df"
[(set (match_operand:DI 0 "nonimmediate_operand" "=&r")
(subreg:DI (match_operand:DF 1 "input_operand" "r") 0))]
"TARGET_E500_DOUBLE" /*one of these can be an mr */
"evmergehi %H0,%1,%1\;evmergelo %L0,%1,%1"
"TARGET_E500_DOUBLE"
"evmergehi %0,%1,%1\;mr %L0,%1"
[(set_attr "length" "8")])
(define_insn "*frob_di_df_2"
[(set (subreg:DF (match_operand:DI 0 "register_operand" "=&r,r") 0)
(match_operand:DF 1 "input_operand" "r,m"))]
"TARGET_E500_DOUBLE"
"@
evmergehi %H0,%1,%1\;evmergelo %L0,%1,%1
evldd%X1 %0,%y1"
[(set_attr "length" "8,4")])
"*
{
switch (which_alternative)
{
default:
gcc_unreachable ();
case 0:
return \"evmergehi %0,%1,%1\;mr %L0,%1\";
case 1:
/* If the low-address word is used in the address, we must load
it last. Otherwise, load it first. Note that we cannot have
auto-increment in that case since the address register is
known to be dead. */
if (refers_to_regno_p (REGNO (operands[0]), REGNO (operands[0]) + 1,
operands[1], 0))
return \"{l|lwz} %L0,%L1\;{l|lwz} %0,%1\";
else
return \"{l%U1%X1|lwz%U1%X1} %0,%1\;{l|lwz} %L0,%L1\";
}
}"
[(set_attr "length" "8,8")])
(define_insn "*mov_sidf_e500_subreg0"
[(set (subreg:SI (match_operand:DF 0 "register_operand" "+r") 0)