Adding assembly instructions to LLVM


As part of a project I need to compile C code for a new architecture that is based on x86 with some new instructions. In my C code I’m going to use inline assembly, so the only thing I need from LLVM is to recognize the instruction and put it in the binary in the right place with correct input values/register addresses.

I tried to add a simple ADD instruction, following the instructions in and just duplicating everything I saw for the ADD instruction for my instruction. The problem is that this page doesn’t explain where I should add the opcode for my instruction.

I’ve been reading the documents and the source code for several days now and I feel kind of lost right now. I was hoping someone here could point me to the right direction.

Thank you

The expansion for add on x86 starts in
lib/Targets/X86/, line 1197 (defm ADD) and
involves somewhat complicated multiclassing to deal with various operand
combinations. A better starting point is likely the "test" family, line


If you already have an assembler that recognizes your new instruction, it may be easier to use the -no-integrated-as argument on the clang command line and have it use the assembler that supports the instruction. If there is no assembler that understands your new instructions, then enhancing LLVM’s code generator/internal assembler/internal disassembler is probably a good way to go. Regards, John Criswell