[llvm-dev] BPF tablegen+codegen question
Chris Sears via llvm-dev
llvm-dev at lists.llvm.org
Tue May 12 14:23:02 PDT 2020
In BPF, an ADD instruction is defined as a 2 register instruction:
0x0f. add dst, src. dst += src
In BPFInstrInfo.td this kind of ALU instruction is defined with:
def _rr : ALU_RR<BPF_ALU64, Opc,
(outs GPR:$dst),
(ins GPR:$src2, GPR:$src),
"$dst "#OpcodeStr#" $src",
[(set GPR:$dst, (OpNode i64:$src2, i64:$src))]>;
How does tablegen+codegen ensure that dst and src2 are the same register? I
see that the assembly/disassembly string assumes this is the case.
Also, it uses i64:$src which is an i64 and not a GPR. What is the
distinction there? X86 does this differently. src1 and src2 are GR64
registers.
def IMUL64rr : RI<0xAF, MRMSrcReg, (outs GR64:$dst),
(ins GR64:$src1, GR64:$src2),
"imul{q}\t{$src2, $dst|$dst, $src2}",
[(set GR64:$dst, EFLAGS,
(X86smul_flag GR64:$src1, GR64:$src2))]>,
Sched<[WriteIMul64Reg]>, TB;
Chris
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20200512/41742dbd/attachment.html>
More information about the llvm-dev
mailing list