0001 {
0002 "atomic exchange smoketest - 64bit",
0003 .insns = {
0004
0005 BPF_ST_MEM(BPF_DW, BPF_REG_10, -8, 3),
0006
0007 BPF_MOV64_IMM(BPF_REG_1, 4),
0008 BPF_ATOMIC_OP(BPF_DW, BPF_XCHG, BPF_REG_10, BPF_REG_1, -8),
0009
0010 BPF_JMP_IMM(BPF_JEQ, BPF_REG_1, 3, 2),
0011 BPF_MOV64_IMM(BPF_REG_0, 1),
0012 BPF_EXIT_INSN(),
0013
0014 BPF_LDX_MEM(BPF_DW, BPF_REG_0, BPF_REG_10, -8),
0015 BPF_JMP_IMM(BPF_JEQ, BPF_REG_0, 4, 2),
0016 BPF_MOV64_IMM(BPF_REG_0, 2),
0017 BPF_EXIT_INSN(),
0018
0019 BPF_MOV64_IMM(BPF_REG_0, 0),
0020 BPF_EXIT_INSN(),
0021 },
0022 .result = ACCEPT,
0023 },
0024 {
0025 "atomic exchange smoketest - 32bit",
0026 .insns = {
0027
0028 BPF_ST_MEM(BPF_W, BPF_REG_10, -4, 3),
0029
0030 BPF_MOV32_IMM(BPF_REG_1, 4),
0031 BPF_ATOMIC_OP(BPF_W, BPF_XCHG, BPF_REG_10, BPF_REG_1, -4),
0032
0033 BPF_JMP32_IMM(BPF_JEQ, BPF_REG_1, 3, 2),
0034 BPF_MOV32_IMM(BPF_REG_0, 1),
0035 BPF_EXIT_INSN(),
0036
0037 BPF_LDX_MEM(BPF_W, BPF_REG_0, BPF_REG_10, -4),
0038 BPF_JMP32_IMM(BPF_JEQ, BPF_REG_0, 4, 2),
0039 BPF_MOV32_IMM(BPF_REG_0, 2),
0040 BPF_EXIT_INSN(),
0041
0042 BPF_MOV32_IMM(BPF_REG_0, 0),
0043 BPF_EXIT_INSN(),
0044 },
0045 .result = ACCEPT,
0046 },