[LLVMdev] Instruction sets requiring more than 3 operands
Evan Cheng
evan.cheng at apple.com
Wed Dec 20 15:09:11 PST 2006
You have to provide more information than that. Let's say your target
is called FOO, and assuming multiplexid is an i32 immediate. You want
to define something like this:
def DEMULTIPLEX : I<(ops i32imm:$id, variable_ops),
"demultiplex $id",
[(FOOMutex imm:$id)]>;
The auto-generated instruction selection function will check that
operand 0 is a 32-bit immediate and suck up all the other operands
(if any) trailing it to form a target specific node with 1 or more
operands. It will evetually be translated into a MachineInstr* with 1
or more operands.
If the assembly you are generating will actually print out the
additional operands. You need to define a custom operand with its own
asm printing method. e.g.
def demux_ops : Operand<i32> {
let PrintMethod = "printDemuxOps";
}
Add this method to the target's asm printer class. The method is
passed a MachineInstr* and OpNum. That allows you to know just
exactly how many operands there are and etc.
Hope this is enough information.
Evan
On Dec 19, 2006, at 9:59 PM, Seung Jae Lee wrote:
> Dear Mr. Cheng:
>
> Thank you for kind information.
> Can you tell me in more detail about that?
> For example, I am trying to implement 'demultiplex' instruction as
> follows:
>
> demultiplex <multiplexid,choose,branch0id,branch1id,
> …,otherwisebranchid>
>
> In this case, the number of branch#id is not definite. It can be 1,
> 2, 3...or any number.
>
> My question was about this. I am still not sure how to use
> CALLpcrel32 you mentioned for this.
> Thank you very much.
>
> Seung Jae Lee
>
> _______________________________________________
> LLVM Developers mailing list
> LLVMdev at cs.uiuc.edu http://llvm.cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev
More information about the llvm-dev
mailing list