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]

assemble code and disassembled code in-consistency


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


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