Seung Jae Lee
2006-Dec-20 05:59 UTC
[LLVMdev] Instruction sets requiring more than 3 operands
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
Evan Cheng
2006-Dec-20 23:09 UTC
[LLVMdev] Instruction sets requiring more than 3 operands
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