This is the mail archive of the
gcc@gcc.gnu.org
mailing list for the GCC project.
RS6000 emitting sign extention for unsigned type
- From: kamlesh kumar <kamleshbhalui at gmail dot com>
- To: gcc at gcc dot gnu dot org
- Cc: jakub at redhat dot com
- Date: Tue, 15 Jan 2019 00:11:29 +0530
- Subject: 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