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