Hi folks,
I have a backend hook (x86_64) for builtin function expansion, so
I have this:
expand_simple_binop (DImode, ASHIFT, op0,
GEN_INT (32),op0,1,OPTAB_DIRECT);
to generate op0 = op0<<32 (op0 is the first argument of this builtin
function, with type SIZE_T)
The thing goes well in the assemble code, where I got:
movq 104(%rbx), %rax
salq $32, %rax
addq 80(%rbx), %rax
as expected.
But at execution time, it gives me a strange behavior,
So I disassemble the code,
401135: 48 8b 43 68 mov 0x68(%rbx),%rax
401140: 48 c1 e0 20 shl $0x20,%rax
401144: 48 03 43 50 add 0x50(%rbx),%rax
and it turns out salq are changed to shl which leads to the
strange behavior. shl only allows shift less or equal than 31.
Not sure why and how to fix this...
Thanks,
Feng