Hi,

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?


Thanks
Haibin

Reply via email to