[llvm-dev] llvm-3.6 MCAsmParser x64 Error "invalid operand for instruction" when msb set

Garba, Peter via llvm-dev llvm-dev at lists.llvm.org
Fri Dec 18 01:28:06 PST 2015


Hi Roman,

in the mode you want to use the opcodes both immediate are defined as signed values.

Imm32 is defined in the range −2.147.483.648 to 2.147.483.647

In your case 0x80000000 will interpreted by the assembler as the unsigned value 2.147.483.648 which is bigger than 2.147.483.647

If you want to assemble that specific Imm in hex representation then you have to assemble:

“add rax, 0x80000000” as “add rax, -2147483648”
“add rax, 0xfffffffff” as “add rax, -1”
“imul rbx, rsi, 0x80000000” as “imul rbx, rsi, -2147483648”
“imul rbx, rsi, 0xffffffff” as “imul rbx, rsi, 0xffffffff”

Best regards,
Peter Garba


>From the Intel Manuel:
ADD r/m64, imm32 MI Valid N.E. Add imm32 sign-extended to 64-bits to r/m64.

IMUL—Signed Multiply:
IMUL r32, r/m32, imm32 RMI Valid Valid doubleword register ← r/m32 ∗ immediate doubleword.


From: llvm-dev [mailto:llvm-dev-bounces at lists.llvm.org] On Behalf Of Rohleder, Roman (Contractor) via llvm-dev
Sent: Donnerstag, 17. Dezember 2015 11:15
To: llvm-dev at lists.llvm.org
Subject: [llvm-dev] llvm-3.6 MCAsmParser x64 Error "invalid operand for instruction" when msb set

Hello,

I am experiencing problems, when trying to assemble these two x86-64 Opcodes
“add r64, imm32”
“imul r64, r64, imm32”

When having the most significant bit set for imm32, for example:
“add rax, 0x80000000”, “add rax, 0xffffffff”, …
“imul rbx, rsi, 0x80000000”, “imul rbx, rsi, 0xffffffff”, …

The Error Message I receive is the following:
„Instruction:1:1: error: invalid operand for instruction“

I was using the MCAsmParser, with the RelaxAll Flag set to true, for the MCStreamer.

Can someone clarify, as to why this is happening, or what I am missing?
Thank you in advance.

Kind regards
Roman



________________________________
________________________________________________

SFNT Germany GmbH
Registered office: Gabriele-Muenter-Str. 1
D-82110 Germering, Germany
Managing director (Geschäftsführer): Ansgar Dodt and Gary Clark
Company Registration number: Amtsgericht Muenchen HRB 171025
________________________________________________

______________________________________________________________

The information contained in this electronic mail transmission
may be privileged and confidential, and therefore, protected
from disclosure. If you have received this communication in
error, please notify us immediately by replying to this
message and deleting it from your computer without copying
or disclosing it.
______________________________________________________________

________________________________
________________________________________________

SFNT Germany GmbH
Registered office: Gabriele-Muenter-Str. 1
D-82110 Germering, Germany
Managing director (Geschäftsführer): Ansgar Dodt and Gary Clark
Company Registration number: Amtsgericht Muenchen HRB 171025
________________________________________________

-- 
The information contained in this electronic mail transmission 
may be privileged and confidential, and therefore, protected 
from disclosure. If you have received this communication in 
error, please notify us immediately by replying to this 
message and deleting it from your computer without copying 
or disclosing it.

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20151218/a8032906/attachment.html>


More information about the llvm-dev mailing list