This is the mail archive of the binutils@sourceware.org mailing list for the binutils 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] |
On Fri, Jul 6, 2012 at 9:47 AM, H.J. Lu <hjl.tools@gmail.com> wrote:On Fri, Jul 6, 2012 at 9:27 AM, Feng LI <nemokingdom@gmail.com> wrote:Hi Peter, Andi, Mark,Hi folks,It is a binutils issue.
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.
For some reason, binutils encodes sal the same as shl. I'd like to fix it. Will it cause any problems?
Thanks.
SAL = SHL functionally. They are aliases. FWIW, XED does not even have SAL; I call them all SHL.
Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
---|---|---|
Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |