[llvm-dev] Encoding an X86 format with long operands
Gus Smith via llvm-dev
llvm-dev at lists.llvm.org
Tue Mar 20 09:48:38 PDT 2018
Hi all.
tl;dr: I would like to add a long x86 instruction which doesn't conform to
any existing format that I know; I'm not sure where to start.
I am attempting to add an instruction into X86, to be simulated in gem5.
I've already added a simple, opcode-only instruction which I can
successfully decode and run in gem5, so I am roughly familiar with .td
files and how backends are built out of them.
My goal now is to make a more complex instruction -- specifically, I need
to add large operands. The format would look something like this:
- 1 byte opcode (0x06, which I hijacked from PUSHES, which isn't
implemented in gem5)
- n byte destination (memory location)
- n byte source (memory location)
- n byte source (memory location or immediate)
If n=4, then the total opcode length is 13 bytes, which is under the 15
byte x86 limit.
As far as I know, this doesn't conform to any existing x86 format. Because
that's the case, I'm not sure how to go about encoding an instruction like
this; presumably, I can't use the existing I<..> class, which is what I'd
used previously.
Can anyone point me in the general direction of what I will need to do to
encode this rather arbitrary instruction format? Should I look into
implementing a new Instruction class? Is there an easier way?
Thanks,
Gus Smith, PSU
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20180320/51644ca0/attachment.html>
More information about the llvm-dev
mailing list