This is the mail archive of the gcc@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: arguements used in .c.26.flow2 are not used in assembly codes


Liu Haibin <liu.haibin@gmail.com> writes:

> I compiled the following code using nios gcc -da -O3 (gcc version 3.3.3)
> 
> #include <math.h>
> #define PI         (4*atan(1))
> 
> double rad2deg(double rad)
> {
>      return (180.0 * rad / (PI));
> }
> 
> The begining of the .s file is
> rad2deg:
> 	addi	sp, sp, -16
> 	stw	fp, 8(sp)
> 	mov	r6, zero
> 	mov	fp, sp
> 	movhi	r7, %hiadj(1080459264)
> 	addi	r7, r7, %lo(1080459264)
> 	stw	ra, 12(sp)
> 	stw	r16, 4(sp)
> 	stw	r17, 0(sp)
> 	call	__muldf3
> 	mov	r4, zero
> 	movhi	r5, %hiadj(1072693248)
> 	addi	r5, r5, %lo(1072693248)
> 	mov	r16, r2
> 	mov	r17, r3
> 	call	atan
> ......
> 
> The corresponding rtl to "call __muldf3" in .c.26.flow2 file is
> 
> (call_insn/u 17 16 21 0 0x0 (parallel [
>             (set (reg:DF 2 r2)
>                 (call (mem:QI (symbol_ref:SI ("__muldf3")) [0 S1 A8])
>                     (const_int 0 [0x0])))
>             (clobber (reg:SI 31 ra))
>         ]) 44 {*call_value} (insn_list 15 (nil))
>     (expr_list:REG_DEAD (reg:DF 4 r4)
>         (expr_list:REG_DEAD (reg:DF 6 r6)
>             (expr_list:REG_UNUSED (reg:SI 31 ra)
>                 (expr_list:REG_EH_REGION (const_int -1 [0xffffffff])
>                     (nil)))))
>     (expr_list (use (reg:DF 6 r6))
>         (expr_list (use (reg:DF 4 r4))
>             (nil))))
> 
> According to the rtl, it uses r4, r5, r6 and r7 as arguements. But the
> assemble codes show no r4 or r5 is ever used before "call __muldf3".
> Any idea why it is so?

Presumably r4 and r5 hold the value of rad which was passed into the
function.  The compiler loads 180.0 into r6 and r7, and calls muldf3
to multiply rad (in r4/r5) by 180.0 (in r6/r7).

Ian


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]