[LLVMdev] Alternate instruction encoding for subtargets

Jim Grosbach grosbach at apple.com
Mon Oct 15 10:49:02 PDT 2012


If it's something that can be done programmatically (i.e., transform one encoding to the other, consider the use of a PostEncoderMethod). ARM uses this for VFP and NEON instruction encodings for Thumb2 vs. ARM mode encodings.


-Jim

On Oct 15, 2012, at 8:46 AM, Jaroslav Sýkora <jaroslav.sykora at gmail.com> wrote:

> Hello,
> 
> I have a compiler in LLVM 2.9 for the KCPM3 processor. I'd like to
> create a subtarget for the new cpu version called KCPSM6. Besides a
> couple of new instructions which are not important at the moment, the
> KCPSM6 cpu has different instruction opcodes. Semantically the
> instructions are the same, hence I'd like to keep all the lowering and
> pattern matching stuff unmodified
> 
> For example, the ADD sX, sY instruction in KCPSM3 is:
> Inst{17-12} = 0b011000;
> Inst{11-8} = sx;
> Inst{7-4} = sy;
> Inst{3-0} = 0;
> 
> While in KCPSM6 the same instruction is encoded:
> Inst{17-12} = 0b010000;
> Inst{11-8} = sx;
> Inst{7-4} = sy;
> Inst{3-0} = 0;
> 
> They even mostly kept the instruction formats!
> Can I tell tablegen to have two encodings and switch between them
> using a predicate?
> I do not want to create new instructions (e.g. ADD_KCPSM3 and ADD_KCPSM6).
> If that is not possible I will just dump the tablegen's
> *GenCodeEmitter.inc file with the getBinaryCodeForInstr() and write it
> by hand. I guess this is the only place where opcodes are used? (I do
> not use LLVM's MC disassembler.)
> 
> Cheers,
> Jara
> 
> -- 
> Space--the final frontier!
> http://linkedin.com/in/jaroslavsykora
> _______________________________________________
> 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