------- Comment #18 from burnus at gcc dot gnu dot org 2009-09-11 22:07 ------- I looked at the assembler and the result is the following (non volatile vs. volatile) [which is essentially the same with REAL(8) and REAL(4)]:
@@ -9,7 +9,7 @@ movl %esp, %ebp subl $392, %esp movl $.LC0, -360(%ebp) - movl $9, -356(%ebp) + movl $8, -356(%ebp) movl $128, -368(%ebp) movl $5, -364(%ebp) leal -368(%ebp), %eax @@ -33,16 +33,16 @@ flds -24(%ebp) flds -24(%ebp) fmulp %st, %st(1) - fstps -12(%ebp) + fstps -16(%ebp) flds -28(%ebp) flds -28(%ebp) fmulp %st, %st(1) - fstps -16(%ebp) - flds -12(%ebp) - fsubs -16(%ebp) + fstps -12(%ebp) + flds -16(%ebp) + fsubs -12(%ebp) fstps -20(%ebp) movl $.LC0, -360(%ebp) - movl $16, -356(%ebp) + movl $15, -356(%ebp) movl $128, -368(%ebp) movl $6, -364(%ebp) leal -368(%ebp), %eax -- http://gcc.gnu.org/bugzilla/show_bug.cgi?id=41335