[PATCH] D144829: [BPF] Add a few new insns under cpu=v4
Yonghong Song via Phabricator via cfe-commits
cfe-commits at lists.llvm.org
Mon Jul 24 00:19:44 PDT 2023
yonghong-song added a comment.
In D144829#4519036 <https://reviews.llvm.org/D144829#4519036>, @eddyz87 wrote:
> I tried adding a test similar to `assemble-disassemble.ll`:
>
> // RUN: llvm-mc -triple bpfel --mcpu=v4 --assemble --filetype=obj %s \
> // RUN: | llvm-objdump -d --mattr=+alu32 - \
> // RUN: | FileCheck %s
>
> // CHECK: d7 01 00 00 10 00 00 00 r1 = bswap16 r1
> // CHECK: d7 02 00 00 20 00 00 00 r2 = bswap32 r2
> // CHECK: d7 03 00 00 40 00 00 00 r3 = bswap64 r3
> r1 = bswap16 r1
> r2 = bswap32 r2
> r3 = bswap64 r3
>
> // CHECK: 91 41 00 00 00 00 00 00 r1 = *(s8 *)(r4 + 0x0)
> // CHECK: 89 52 04 00 00 00 00 00 r2 = *(s16 *)(r5 + 0x4)
> // CHECK: 81 63 08 00 00 00 00 00 r3 = *(s32 *)(r6 + 0x8)
> r1 = *(s8 *)(r4 + 0)
> r2 = *(s16 *)(r5 + 4)
> r3 = *(s32 *)(r6 + 8)
>
> // CHECK: 91 41 00 00 00 00 00 00 w1 = *(s8 *)(r4 + 0x0)
> // CHECK: 89 52 04 00 00 00 00 00 w2 = *(s16 *)(r5 + 0x4)
> w1 = *(s8 *)(r4 + 0)
> w2 = *(s16 *)(r5 + 4)
>
> // CHECK: bf 41 08 00 00 00 00 00 r1 = (s8)r4
> // CHECK: bf 52 10 00 00 00 00 00 r2 = (s16)r5
> // CHECK: bf 63 20 00 00 00 00 00 r3 = (s32)w6
> r1 = (s8)r4
> r2 = (s16)r5
> r3 = (s32)w6
> // Should this work as well: r3 = (s32)r6 ?
>
> // CHECK: bc 31 08 00 00 00 00 00 w1 = (s8)w3
> // CHECK: bc 42 10 00 00 00 00 00 w2 = (s16)w4
> w1 = (s8)w3
> w2 = (s16)w4
>
> // CHECK: 3f 31 01 00 00 00 00 00 r1 s/= r3
> // CHECK: 9f 42 01 00 00 00 00 00 r2 s%= r4
> r1 s/= r3
> r2 s%= r4
>
> // CHECK: 3c 31 01 00 00 00 00 00 w1 s/= w3
> // CHECK: 9c 42 01 00 00 00 00 00 w2 s%= w4
> w1 s/= w3
> w2 s%= w4
>
> And it looks like some instructions are not printed correctly:
>
> $ llvm-mc -triple bpfel --mcpu=v4 --assemble --filetype=obj /home/eddy/work/llvm-project/llvm/test/CodeGen/BPF/assembler-disassembler-v4.s | llvm-objdump -d --mattr=+alu32 -
>
> <stdin>: file format elf64-bpf
>
> Disassembly of section .text:
>
> 0000000000000000 <.text>:
> 0: d7 01 00 00 10 00 00 00 r1 = bswap16 r1
> 1: d7 02 00 00 20 00 00 00 r2 = bswap32 r2
> 2: d7 03 00 00 40 00 00 00 r3 = bswap64 r3
> 3: 91 41 00 00 00 00 00 00 w1 = *(s8 *)(r4 + 0x0)
> 4: 89 52 04 00 00 00 00 00 w2 = *(s16 *)(r5 + 0x4)
> 5: 81 63 08 00 00 00 00 00 <unknown>
> 6: 91 41 00 00 00 00 00 00 w1 = *(s8 *)(r4 + 0x0)
> 7: 89 52 04 00 00 00 00 00 w2 = *(s16 *)(r5 + 0x4)
> 8: bf 41 08 00 00 00 00 00 r1 = (s8)r4
> 9: bf 52 10 00 00 00 00 00 r2 = (s16)r5
> 10: bf 63 20 00 00 00 00 00 r3 = (s32)w6
> 11: bc 31 08 00 00 00 00 00 w1 = (s8)w3
> 12: bc 42 10 00 00 00 00 00 w2 = (s16)w4
> 13: 3f 31 01 00 00 00 00 00 r1 s/= r3
> 14: 9f 42 01 00 00 00 00 00 r2 s%= r4
> 15: 3c 31 01 00 00 00 00 00 w1 s/= w3
> 16: 9c 42 01 00 00 00 00 00 w2 s%= w4
>
> I'm not sure if this is an issue with disassembler or some additional `--mattr` options are needed.
There is a problem in the td file for 32-bit signed load. Current definition is not quite right since it is supposed to sign-extension all the way to 64bit. I will fix it in the next revision.
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D144829/new/
https://reviews.llvm.org/D144829
More information about the cfe-commits
mailing list