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]

RS6000 emitting sign extention for unsigned type


Hi devs,
consider below testcase:
$cat test.c
void foo(){
unsigned int x=-1;
double d=x;
}
$./cc1 test.c -msoft-float -m64
$cat test.s

.foo:
.LFB0:
        mflr 0
        std 0,16(1)
        stdu 1,-128(1)
.LCFI0:
        li 9,-1
        stw 9,112(1)
        lwa 9,112(1)
        mr 3,9
        bl .__floatunsidf
        nop
        mr 9,3
        std 9,120(1)
        nop
        addi 1,1,128
.LCFI1:
        ld 0,16(1)
        mtlr 0
        blr
        .long 0
        .byte 0,0,0,1,128,0,0,1

Here, you can see sign extension before calling the __floatunsidf routine.
As per my understanding it should emit zero extension here because
__floatunsidf  has  it argument as unsigned type.

Like to know ,  Reason behind doing  sign extension here , rather than zero
extension.
or if this is a bug?
is there Any work around or hook?
Even you can point me to the right direction in the source? where we need
to do modification?

Thanks
~Kamlesh


Thanks !
Kamlesh


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