jackmanb added inline comments.
================ Comment at: llvm/lib/Target/BPF/BPFInstrInfo.td:684 + let Inst{47-32} = addr{15-0}; // offset + let Inst{11-8} = val; + let Inst{7-4} = Opc.Value; ---------------- jackmanb wrote: > Sorry I'm a beginner with the LLVM code, could you explain what `val` does? I > didn't notice this when I looked through here before. > > To try and get a clue I tried just removing this line and then compiling the > following code: > > ```C > // SPDX-License-Identifier: GPL-2.0 > #include <stdatomic.h> > > #include <linux/bpf.h> > #include <bpf/bpf_helpers.h> > #include <bpf/bpf_tracing.h> > > __u64 test_data_64 = 0; > __u64 test1_result = 0; > > SEC("fentry/bpf_fentry_test1") > int BPF_PROG(test1, int a) > { > /* atomic_fetch_add(&test_data_64, 1); */ > test1_result = __sync_fetch_and_add(&test_data_64, 1); > return 0; > } > ``` > > And I was able to load and run the program, with the kernel on my WIP branch: > https://github.com/bjackman/linux-bpf/tree/wips/bpf-atomics-v0 > > The result looks like this: > > ```shell > $ llvm-objdump -d atomics_test.o > > atomics_test.o: file format elf64-bpf > > > Disassembly of section fentry/bpf_fentry_test1: > > 0000000000000000 <test1>: > 0: b7 01 00 00 01 00 00 00 r1 = 1 > 1: 18 02 00 00 00 00 00 00 00 00 00 00 00 00 00 00 r2 = 0 ll > 3: db 12 00 00 01 00 00 00 r1 = atomic_fetch_add((u64 *)(r2 + > 0), PLEASE submit a bug report to https://bugs.llvm.org/ and include the > crash backtrace. > Stack dump: > 0. Program arguments: llvm-objdump -d atomics_test.o > Segmentation fault > ``` > > Aside from the fact that llvm-objdump crashed, the encoding `db 12 00 00 01 > 00 00 00` seems correct to me. If I add the `let Inst{11-8} = val` back in I > get `db 12 00 00 01 01 00 00` which I don't understand. Ah wait, I guess this is adding a 3rd operand register? In my example it's unclear because it is R1 which is also the dst operand. I was envisaging we just have semantics like `src = atomic_fetch_add(dst+off, src)` but you are instead proposing `dst = atomic_fetch_add(dst+off, val)`? Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D72184/new/ https://reviews.llvm.org/D72184 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits