[llvm] r355127 - bpf: disassembler support for XADD under sub-register mode
Jiong Wang via llvm-commits
llvm-commits at lists.llvm.org
Thu Feb 28 11:22:35 PST 2019
Author: jiwang
Date: Thu Feb 28 11:22:34 2019
New Revision: 355127
URL: http://llvm.org/viewvc/llvm-project?rev=355127&view=rev
Log:
bpf: disassembler support for XADD under sub-register mode
Like the other load/store instructions, "w" register is preferred when
disassembling BPF_STX | BPF_W | BPF_XADD.
v1 -> v2:
- Updated testcase insn-unit.s (Yonghong)
Acked-by: Yonghong Song <yhs at fb.com>
Signed-off-by: Jiong Wang <jiong.wang at netronome.com>
Modified:
llvm/trunk/lib/Target/BPF/Disassembler/BPFDisassembler.cpp
llvm/trunk/test/MC/BPF/insn-unit.s
llvm/trunk/test/MC/BPF/load-store-32.s
Modified: llvm/trunk/lib/Target/BPF/Disassembler/BPFDisassembler.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/BPF/Disassembler/BPFDisassembler.cpp?rev=355127&r1=355126&r2=355127&view=diff
==============================================================================
--- llvm/trunk/lib/Target/BPF/Disassembler/BPFDisassembler.cpp (original)
+++ llvm/trunk/lib/Target/BPF/Disassembler/BPFDisassembler.cpp Thu Feb 28 11:22:34 2019
@@ -171,9 +171,10 @@ DecodeStatus BPFDisassembler::getInstruc
if (Result == MCDisassembler::Fail) return MCDisassembler::Fail;
uint8_t InstClass = getInstClass(Insn);
+ uint8_t InstMode = getInstMode(Insn);
if ((InstClass == BPF_LDX || InstClass == BPF_STX) &&
getInstSize(Insn) != BPF_DW &&
- getInstMode(Insn) == BPF_MEM &&
+ (InstMode == BPF_MEM || InstMode == BPF_XADD) &&
STI.getFeatureBits()[BPF::ALU32])
Result = decodeInstruction(DecoderTableBPFALU3264, Instr, Insn, Address,
this, STI);
Modified: llvm/trunk/test/MC/BPF/insn-unit.s
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/MC/BPF/insn-unit.s?rev=355127&r1=355126&r2=355127&view=diff
==============================================================================
--- llvm/trunk/test/MC/BPF/insn-unit.s (original)
+++ llvm/trunk/test/MC/BPF/insn-unit.s Thu Feb 28 11:22:34 2019
@@ -57,7 +57,8 @@
lock *(u32 *)(r2 + 16) += r9 // BPF_STX | BPF_W | BPF_XADD
lock *(u64 *)(r3 - 30) += r10 // BPF_STX | BPF_DW | BPF_XADD
-// CHECK: c3 92 10 00 00 00 00 00 lock *(u32 *)(r2 + 16) += r9
+// CHECK-64: c3 92 10 00 00 00 00 00 lock *(u32 *)(r2 + 16) += r9
+// CHECK-32: c3 92 10 00 00 00 00 00 lock *(u32 *)(r2 + 16) += w9
// CHECK: db a3 e2 ff 00 00 00 00 lock *(u64 *)(r3 - 30) += r10
// ======== BPF_JMP Class ========
Modified: llvm/trunk/test/MC/BPF/load-store-32.s
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/MC/BPF/load-store-32.s?rev=355127&r1=355126&r2=355127&view=diff
==============================================================================
--- llvm/trunk/test/MC/BPF/load-store-32.s (original)
+++ llvm/trunk/test/MC/BPF/load-store-32.s Thu Feb 28 11:22:34 2019
@@ -17,9 +17,12 @@
*(u8 *)(r0 + 0) = w7 // BPF_STX | BPF_B
*(u16 *)(r1 + 8) = w8 // BPF_STX | BPF_H
*(u32 *)(r2 + 16) = w9 // BPF_STX | BPF_W
+ lock *(u32 *)(r2 + 16) += w9 // BPF_STX | BPF_W | BPF_XADD
// CHECK-32: 73 70 00 00 00 00 00 00 *(u8 *)(r0 + 0) = w7
// CHECK-32: 6b 81 08 00 00 00 00 00 *(u16 *)(r1 + 8) = w8
// CHECK-32: 63 92 10 00 00 00 00 00 *(u32 *)(r2 + 16) = w9
+// CHECK-32: c3 92 10 00 00 00 00 00 lock *(u32 *)(r2 + 16) += w9
// CHECK: 73 70 00 00 00 00 00 00 *(u8 *)(r0 + 0) = r7
// CHECK: 6b 81 08 00 00 00 00 00 *(u16 *)(r1 + 8) = r8
// CHECK: 63 92 10 00 00 00 00 00 *(u32 *)(r2 + 16) = r9
+// CHECK: c3 92 10 00 00 00 00 00 lock *(u32 *)(r2 + 16) += r9
More information about the llvm-commits
mailing list