------- Comment #14 from dje at watson dot ibm dot com 2006-07-13 20:36 -------
Subject: Re: [4.1/4.2 Regression] returning constant double
What, exactly, is your testcase foo.c? The example at the top of
PR 28287?
$ cat foo.c
double f (void) { return 0; }
$ ./xgcc -B./ -O2 -S foo.c
$ ./xgcc -B./ -v
Reading specs from ./specs
Target: powerpc-unknown-linux-gnuspe
Configured with: /farm/dje/src/src/configure
--target=powerpc-unknown-linux-gnuspe --enable-e500_double --enable-languages=c
Thread model: posix
gcc version 4.2.0 20060713 (experimental)
$ cat foo.s
.file "foo.c"
.section ".text"
.align 2
.globl f
.type f, @function
f:
lis 9,[EMAIL PROTECTED]
la 9,[EMAIL PROTECTED](9)
lwz 3,0(9)
lwz 4,4(9)
blr
.size f, .-f
.section .rodata
.align 3
.set .LANCHOR0,. + 0
.LC0:
.4byte 0
.4byte 0
.ident "GCC: (GNU) 4.2.0 20060713 (experimental)"
.section .note.GNU-stack,"",@progbits
$ cd ...src...
$ svn diff spe.md
Index: spe.md
===================================================================
--- spe.md (revision 115408)
+++ spe.md (working copy)
@@ -2211,11 +2211,13 @@
[(set_attr "length" "8")])
(define_insn "*frob_di_df_2"
- [(set (subreg:DF (match_operand:DI 0 "register_operand" "=&r") 0)
- (match_operand:DF 1 "register_operand" "r"))]
+ [(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"
- [(set_attr "length" "8")])
+ "@
+ evmergehi %H0,%1,%1\;evmergelo %L0,%1,%1
+ evldd%X1 %0,%y1"
+ [(set_attr "length" "8,*")])
(define_insn "*mov_sidf_e500_subreg0"
[(set (subreg:SI (match_operand:DF 0 "register_operand" "+r") 0)
--
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=27287