diff options
author | Yonghong Song <yhs@fb.com> | 2017-09-28 02:46:11 +0000 |
---|---|---|
committer | Yonghong Song <yhs@fb.com> | 2017-09-28 02:46:11 +0000 |
commit | df6ca162269f9d756f8742bf4b658dcf690e3eb5 (patch) | |
tree | 4ff61916c7ea3dca267b05fc48b3e94c7741692d /test/MC | |
parent | e87cf87e451df1e4b22a690a12fc56de7834d25a (diff) | |
download | llvm-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.s | 2 | ||||
-rw-r--r-- | test/MC/BPF/insn-unit.s | 14 |
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 |