summaryrefslogtreecommitdiffstats
path: root/llvm/lib/Target/BPF/Disassembler
diff options
context:
space:
mode:
authorYonghong Song <yhs@fb.com>2017-09-22 04:36:36 +0000
committerYonghong Song <yhs@fb.com>2017-09-22 04:36:36 +0000
commitd2e0d1fa11ab51da2e859eea6eba594eb44e5542 (patch)
tree06a8ccde564f75bec55d89c8dcd0d3602863dcbb /llvm/lib/Target/BPF/Disassembler
parent3c63b101deb53ba28f7074be49416d289b98d9ee (diff)
downloadbcm5719-llvm-d2e0d1fa11ab51da2e859eea6eba594eb44e5542.tar.gz
bcm5719-llvm-d2e0d1fa11ab51da2e859eea6eba594eb44e5542.zip
bpf: initial 32-bit ALU encoding support in assembler
This patch adds instruction patterns for operations in BPF_ALU. After this, assembler could recognize some 32-bit ALU statement. For example, those listed int the unit test file. Separate MOV patterns are unnecessary as MOV is ALU operation that could reuse ALU encoding infrastructure, this patch removed those redundant patterns. Acked-by: Jakub Kicinski <jakub.kicinski@netronome.com> Signed-off-by: Jiong Wang <jiong.wang@netronome.com> Reviewed-by: Yonghong Song <yhs@fb.com> llvm-svn: 313961
Diffstat (limited to 'llvm/lib/Target/BPF/Disassembler')
-rw-r--r--llvm/lib/Target/BPF/Disassembler/BPFDisassembler.cpp15
1 files changed, 15 insertions, 0 deletions
diff --git a/llvm/lib/Target/BPF/Disassembler/BPFDisassembler.cpp b/llvm/lib/Target/BPF/Disassembler/BPFDisassembler.cpp
index a1d732c339e..f5b621f9f8f 100644
--- a/llvm/lib/Target/BPF/Disassembler/BPFDisassembler.cpp
+++ b/llvm/lib/Target/BPF/Disassembler/BPFDisassembler.cpp
@@ -79,6 +79,21 @@ static DecodeStatus DecodeGPRRegisterClass(MCInst &Inst, unsigned RegNo,
return MCDisassembler::Success;
}
+static const unsigned GPR32DecoderTable[] = {
+ BPF::W0, BPF::W1, BPF::W2, BPF::W3, BPF::W4, BPF::W5,
+ BPF::W6, BPF::W7, BPF::W8, BPF::W9, BPF::W10, BPF::W11};
+
+static DecodeStatus DecodeGPR32RegisterClass(MCInst &Inst, unsigned RegNo,
+ uint64_t /*Address*/,
+ const void * /*Decoder*/) {
+ if (RegNo > 11)
+ return MCDisassembler::Fail;
+
+ unsigned Reg = GPR32DecoderTable[RegNo];
+ Inst.addOperand(MCOperand::createReg(Reg));
+ return MCDisassembler::Success;
+}
+
static DecodeStatus decodeMemoryOpValue(MCInst &Inst, unsigned Insn,
uint64_t Address, const void *Decoder) {
unsigned Register = (Insn >> 16) & 0xf;
OpenPOWER on IntegriCloud