aboutsummaryrefslogtreecommitdiff
path: root/test/MC
diff options
context:
space:
mode:
authorYonghong Song <yhs@fb.com>2017-09-28 02:46:11 +0000
committerYonghong Song <yhs@fb.com>2017-09-28 02:46:11 +0000
commitdf6ca162269f9d756f8742bf4b658dcf690e3eb5 (patch)
tree4ff61916c7ea3dca267b05fc48b3e94c7741692d /test/MC
parente87cf87e451df1e4b22a690a12fc56de7834d25a (diff)
downloadllvm-df6ca162269f9d756f8742bf4b658dcf690e3eb5.tar.gz
bpf: add new insns for bswap_to_le and negation
This patch adds new insn, "reg = be16/be32/be64 reg", for bswap to little endian for big-endian target (bpfeb). It also adds new insn for negation "reg = -reg". Currently, for source code, e.g., b = -a LLVM still prefers to generate: b = 0 - a But "reg = -reg" format can be used in assembly code. Signed-off-by: Yonghong Song <yhs@fb.com> Acked-by: Alexei Starovoitov <ast@kernel.org> git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@314376 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'test/MC')
-rw-r--r--test/MC/BPF/insn-unit-32.s2
-rw-r--r--test/MC/BPF/insn-unit.s14
2 files changed, 10 insertions, 6 deletions
diff --git a/test/MC/BPF/insn-unit-32.s b/test/MC/BPF/insn-unit-32.s
index 956f5bcb07b..e5911f04cd0 100644
--- a/test/MC/BPF/insn-unit-32.s
+++ b/test/MC/BPF/insn-unit-32.s
@@ -2,10 +2,12 @@
# RUN: llvm-objdump -d -r %t | FileCheck %s
// ======== BPF_ALU Class ========
+ w1 = -w1 // BPF_NEG
w0 += w1 // BPF_ADD | BPF_X
w1 -= w2 // BPF_SUB | BPF_X
w2 *= w3 // BPF_MUL | BPF_X
w3 /= w4 // BPF_DIV | BPF_X
+// CHECK: 84 11 00 00 00 00 00 00 w1 = -w1
// CHECK: 0c 10 00 00 00 00 00 00 w0 += w1
// CHECK: 1c 21 00 00 00 00 00 00 w1 -= w2
// CHECK: 2c 32 00 00 00 00 00 00 w2 *= w3
diff --git a/test/MC/BPF/insn-unit.s b/test/MC/BPF/insn-unit.s
index e6b69cd8a83..68b646262ea 100644
--- a/test/MC/BPF/insn-unit.s
+++ b/test/MC/BPF/insn-unit.s
@@ -118,6 +118,7 @@
// CHECK: 3f 43 00 00 00 00 00 00 r3 /= r4
Llabel0 :
+ r0 = -r0 // BPF_NEG
r4 |= r5 // BPF_OR | BPF_X
r5 &= r6 // BPF_AND | BPF_X
r6 <<= r7 // BPF_LSH | BPF_X
@@ -126,6 +127,7 @@ Llabel0 :
r9 = r10 // BPF_MOV | BPF_X
r10 s>>= r0 // BPF_ARSH | BPF_X
// CHECK:Llabel0:
+// CHECK: 87 00 00 00 00 00 00 00 r0 = -r0
// CHECK: 4f 54 00 00 00 00 00 00 r4 |= r5
// CHECK: 5f 65 00 00 00 00 00 00 r5 &= r6
// CHECK: 6f 76 00 00 00 00 00 00 r6 <<= r7
@@ -134,12 +136,12 @@ Llabel0 :
// CHECK: bf a9 00 00 00 00 00 00 r9 = r10
// CHECK: cf 0a 00 00 00 00 00 00 r10 s>>= r0
- bswap16 r1 // BPF_END | BPF_TO_BE
- bswap32 r2 // BPF_END | BPF_TO_BE
- bswap64 r3 // BPF_END | BPF_TO_BE
-// CHECK: dc 01 00 00 10 00 00 00 bswap16 r1
-// CHECK: dc 02 00 00 20 00 00 00 bswap32 r2
-// CHECK: dc 03 00 00 40 00 00 00 bswap64 r3
+ r1 = be16 r1 // BPF_END | BPF_TO_BE
+ r2 = be32 r2 // BPF_END | BPF_TO_BE
+ r3 = be64 r3 // BPF_END | BPF_TO_BE
+// CHECK: dc 01 00 00 10 00 00 00 r1 = be16 r1
+// CHECK: dc 02 00 00 20 00 00 00 r2 = be32 r2
+// CHECK: dc 03 00 00 40 00 00 00 r3 = be64 r3
r0 += 1 // BPF_ADD | BPF_K
r1 -= 0x1 // BPF_SUB | BPF_K