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));
}

In .s file, it has some codes like this

........
        mov     r4, zero
        movhi   r5, %hiadj(1072693248)
        addi    r5, r5, %lo(1072693248)
        mov     r16, r2
        mov     r17, r3
        call    atan
        mov     r5, r3
        mov     r4, r2
        mov     r6, zero
        movhi   r7, %hiadj(1074790400)
        addi    r7, r7, %lo(1074790400)
        call    __muldf3
        mov     r10, r2
        mov     r5, r17
        mov     r6, r10
        mov     r7, r3
        mov     r4, r16
............

In .c.26.flow2 file, 

(call_insn 23 19 28 0 0x0 (parallel [
            (set (reg:DF 2 r2)
                (call (mem:QI (symbol_ref:SI ("atan")) [0 S1 A8])
                    (const_int 0 [0x0])))
            (clobber (reg:SI 31 ra))
        ]) 44 {*call_value} (insn_list 21 (nil))
    (expr_list:REG_DEAD (reg:DF 4 r4)
        (expr_list:REG_UNUSED (reg:SI 31 ra)
            (nil)))
    (expr_list (use (reg:DF 4 r4))
        (nil)))

.....

(call_insn/u 31 30 36 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 27 (insn_list 29 (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))))

>From the RTL we can see that these two calls don't use r5, but why
here both assembly codes and rtl have some codes with r5, like

        movhi   r5, %hiadj(1072693248)
        addi    r5, r5, %lo(1072693248)        (move 32-bit constant into 
register)
and 
        mov     r5, r3

In nios2, r2 and r3 are for return value. r4, r5, r6, r7 are for
registre auruments

Does the following rtl implicitly indicate that r5 is used?

(expr_list (use (reg:DF 6 r6))
        (expr_list (use (reg:DF 4 r4))

Thanks.


Regards,
Haibin

Reply via email to