162306a36Sopenharmony_ci{ 262306a36Sopenharmony_ci "atomic exchange smoketest - 64bit", 362306a36Sopenharmony_ci .insns = { 462306a36Sopenharmony_ci /* val = 3; */ 562306a36Sopenharmony_ci BPF_ST_MEM(BPF_DW, BPF_REG_10, -8, 3), 662306a36Sopenharmony_ci /* old = atomic_xchg(&val, 4); */ 762306a36Sopenharmony_ci BPF_MOV64_IMM(BPF_REG_1, 4), 862306a36Sopenharmony_ci BPF_ATOMIC_OP(BPF_DW, BPF_XCHG, BPF_REG_10, BPF_REG_1, -8), 962306a36Sopenharmony_ci /* if (old != 3) exit(1); */ 1062306a36Sopenharmony_ci BPF_JMP_IMM(BPF_JEQ, BPF_REG_1, 3, 2), 1162306a36Sopenharmony_ci BPF_MOV64_IMM(BPF_REG_0, 1), 1262306a36Sopenharmony_ci BPF_EXIT_INSN(), 1362306a36Sopenharmony_ci /* if (val != 4) exit(2); */ 1462306a36Sopenharmony_ci BPF_LDX_MEM(BPF_DW, BPF_REG_0, BPF_REG_10, -8), 1562306a36Sopenharmony_ci BPF_JMP_IMM(BPF_JEQ, BPF_REG_0, 4, 2), 1662306a36Sopenharmony_ci BPF_MOV64_IMM(BPF_REG_0, 2), 1762306a36Sopenharmony_ci BPF_EXIT_INSN(), 1862306a36Sopenharmony_ci /* exit(0); */ 1962306a36Sopenharmony_ci BPF_MOV64_IMM(BPF_REG_0, 0), 2062306a36Sopenharmony_ci BPF_EXIT_INSN(), 2162306a36Sopenharmony_ci }, 2262306a36Sopenharmony_ci .result = ACCEPT, 2362306a36Sopenharmony_ci}, 2462306a36Sopenharmony_ci{ 2562306a36Sopenharmony_ci "atomic exchange smoketest - 32bit", 2662306a36Sopenharmony_ci .insns = { 2762306a36Sopenharmony_ci /* val = 3; */ 2862306a36Sopenharmony_ci BPF_ST_MEM(BPF_W, BPF_REG_10, -4, 3), 2962306a36Sopenharmony_ci /* old = atomic_xchg(&val, 4); */ 3062306a36Sopenharmony_ci BPF_MOV32_IMM(BPF_REG_1, 4), 3162306a36Sopenharmony_ci BPF_ATOMIC_OP(BPF_W, BPF_XCHG, BPF_REG_10, BPF_REG_1, -4), 3262306a36Sopenharmony_ci /* if (old != 3) exit(1); */ 3362306a36Sopenharmony_ci BPF_JMP32_IMM(BPF_JEQ, BPF_REG_1, 3, 2), 3462306a36Sopenharmony_ci BPF_MOV32_IMM(BPF_REG_0, 1), 3562306a36Sopenharmony_ci BPF_EXIT_INSN(), 3662306a36Sopenharmony_ci /* if (val != 4) exit(2); */ 3762306a36Sopenharmony_ci BPF_LDX_MEM(BPF_W, BPF_REG_0, BPF_REG_10, -4), 3862306a36Sopenharmony_ci BPF_JMP32_IMM(BPF_JEQ, BPF_REG_0, 4, 2), 3962306a36Sopenharmony_ci BPF_MOV32_IMM(BPF_REG_0, 2), 4062306a36Sopenharmony_ci BPF_EXIT_INSN(), 4162306a36Sopenharmony_ci /* exit(0); */ 4262306a36Sopenharmony_ci BPF_MOV32_IMM(BPF_REG_0, 0), 4362306a36Sopenharmony_ci BPF_EXIT_INSN(), 4462306a36Sopenharmony_ci }, 4562306a36Sopenharmony_ci .result = ACCEPT, 4662306a36Sopenharmony_ci}, 47