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