162306a36Sopenharmony_ci{
262306a36Sopenharmony_ci	"jit: lsh, rsh, arsh by 1",
362306a36Sopenharmony_ci	.insns = {
462306a36Sopenharmony_ci	BPF_MOV64_IMM(BPF_REG_0, 1),
562306a36Sopenharmony_ci	BPF_MOV64_IMM(BPF_REG_1, 0xff),
662306a36Sopenharmony_ci	BPF_ALU64_IMM(BPF_LSH, BPF_REG_1, 1),
762306a36Sopenharmony_ci	BPF_ALU32_IMM(BPF_LSH, BPF_REG_1, 1),
862306a36Sopenharmony_ci	BPF_JMP_IMM(BPF_JEQ, BPF_REG_1, 0x3fc, 1),
962306a36Sopenharmony_ci	BPF_EXIT_INSN(),
1062306a36Sopenharmony_ci	BPF_ALU64_IMM(BPF_RSH, BPF_REG_1, 1),
1162306a36Sopenharmony_ci	BPF_ALU32_IMM(BPF_RSH, BPF_REG_1, 1),
1262306a36Sopenharmony_ci	BPF_JMP_IMM(BPF_JEQ, BPF_REG_1, 0xff, 1),
1362306a36Sopenharmony_ci	BPF_EXIT_INSN(),
1462306a36Sopenharmony_ci	BPF_ALU64_IMM(BPF_ARSH, BPF_REG_1, 1),
1562306a36Sopenharmony_ci	BPF_JMP_IMM(BPF_JEQ, BPF_REG_1, 0x7f, 1),
1662306a36Sopenharmony_ci	BPF_EXIT_INSN(),
1762306a36Sopenharmony_ci	BPF_MOV64_IMM(BPF_REG_0, 2),
1862306a36Sopenharmony_ci	BPF_EXIT_INSN(),
1962306a36Sopenharmony_ci	},
2062306a36Sopenharmony_ci	.result = ACCEPT,
2162306a36Sopenharmony_ci	.retval = 2,
2262306a36Sopenharmony_ci},
2362306a36Sopenharmony_ci{
2462306a36Sopenharmony_ci	"jit: lsh, rsh, arsh by reg",
2562306a36Sopenharmony_ci	.insns = {
2662306a36Sopenharmony_ci	BPF_MOV64_IMM(BPF_REG_0, 1),
2762306a36Sopenharmony_ci	BPF_MOV64_IMM(BPF_REG_4, 1),
2862306a36Sopenharmony_ci	BPF_MOV64_IMM(BPF_REG_1, 0xff),
2962306a36Sopenharmony_ci	BPF_ALU64_REG(BPF_LSH, BPF_REG_1, BPF_REG_0),
3062306a36Sopenharmony_ci	BPF_ALU32_REG(BPF_LSH, BPF_REG_1, BPF_REG_4),
3162306a36Sopenharmony_ci	BPF_JMP_IMM(BPF_JEQ, BPF_REG_1, 0x3fc, 1),
3262306a36Sopenharmony_ci	BPF_EXIT_INSN(),
3362306a36Sopenharmony_ci	BPF_ALU64_REG(BPF_RSH, BPF_REG_1, BPF_REG_4),
3462306a36Sopenharmony_ci	BPF_MOV64_REG(BPF_REG_4, BPF_REG_1),
3562306a36Sopenharmony_ci	BPF_ALU32_REG(BPF_RSH, BPF_REG_4, BPF_REG_0),
3662306a36Sopenharmony_ci	BPF_JMP_IMM(BPF_JEQ, BPF_REG_4, 0xff, 1),
3762306a36Sopenharmony_ci	BPF_EXIT_INSN(),
3862306a36Sopenharmony_ci	BPF_ALU64_REG(BPF_ARSH, BPF_REG_4, BPF_REG_4),
3962306a36Sopenharmony_ci	BPF_JMP_IMM(BPF_JEQ, BPF_REG_4, 0, 1),
4062306a36Sopenharmony_ci	BPF_EXIT_INSN(),
4162306a36Sopenharmony_ci	BPF_MOV64_IMM(BPF_REG_0, 2),
4262306a36Sopenharmony_ci	BPF_EXIT_INSN(),
4362306a36Sopenharmony_ci	},
4462306a36Sopenharmony_ci	.result = ACCEPT,
4562306a36Sopenharmony_ci	.retval = 2,
4662306a36Sopenharmony_ci},
4762306a36Sopenharmony_ci{
4862306a36Sopenharmony_ci	"jit: mov32 for ldimm64, 1",
4962306a36Sopenharmony_ci	.insns = {
5062306a36Sopenharmony_ci	BPF_MOV64_IMM(BPF_REG_0, 2),
5162306a36Sopenharmony_ci	BPF_LD_IMM64(BPF_REG_1, 0xfeffffffffffffffULL),
5262306a36Sopenharmony_ci	BPF_ALU64_IMM(BPF_RSH, BPF_REG_1, 32),
5362306a36Sopenharmony_ci	BPF_LD_IMM64(BPF_REG_2, 0xfeffffffULL),
5462306a36Sopenharmony_ci	BPF_JMP_REG(BPF_JEQ, BPF_REG_1, BPF_REG_2, 1),
5562306a36Sopenharmony_ci	BPF_MOV64_IMM(BPF_REG_0, 1),
5662306a36Sopenharmony_ci	BPF_EXIT_INSN(),
5762306a36Sopenharmony_ci	},
5862306a36Sopenharmony_ci	.result = ACCEPT,
5962306a36Sopenharmony_ci	.retval = 2,
6062306a36Sopenharmony_ci},
6162306a36Sopenharmony_ci{
6262306a36Sopenharmony_ci	"jit: mov32 for ldimm64, 2",
6362306a36Sopenharmony_ci	.insns = {
6462306a36Sopenharmony_ci	BPF_MOV64_IMM(BPF_REG_0, 1),
6562306a36Sopenharmony_ci	BPF_LD_IMM64(BPF_REG_1, 0x1ffffffffULL),
6662306a36Sopenharmony_ci	BPF_LD_IMM64(BPF_REG_2, 0xffffffffULL),
6762306a36Sopenharmony_ci	BPF_JMP_REG(BPF_JEQ, BPF_REG_1, BPF_REG_2, 1),
6862306a36Sopenharmony_ci	BPF_MOV64_IMM(BPF_REG_0, 2),
6962306a36Sopenharmony_ci	BPF_EXIT_INSN(),
7062306a36Sopenharmony_ci	},
7162306a36Sopenharmony_ci	.result = ACCEPT,
7262306a36Sopenharmony_ci	.retval = 2,
7362306a36Sopenharmony_ci},
7462306a36Sopenharmony_ci{
7562306a36Sopenharmony_ci	"jit: various mul tests",
7662306a36Sopenharmony_ci	.insns = {
7762306a36Sopenharmony_ci	BPF_LD_IMM64(BPF_REG_2, 0xeeff0d413122ULL),
7862306a36Sopenharmony_ci	BPF_LD_IMM64(BPF_REG_0, 0xfefefeULL),
7962306a36Sopenharmony_ci	BPF_LD_IMM64(BPF_REG_1, 0xefefefULL),
8062306a36Sopenharmony_ci	BPF_ALU64_REG(BPF_MUL, BPF_REG_0, BPF_REG_1),
8162306a36Sopenharmony_ci	BPF_JMP_REG(BPF_JEQ, BPF_REG_0, BPF_REG_2, 2),
8262306a36Sopenharmony_ci	BPF_MOV64_IMM(BPF_REG_0, 1),
8362306a36Sopenharmony_ci	BPF_EXIT_INSN(),
8462306a36Sopenharmony_ci	BPF_LD_IMM64(BPF_REG_3, 0xfefefeULL),
8562306a36Sopenharmony_ci	BPF_ALU64_REG(BPF_MUL, BPF_REG_3, BPF_REG_1),
8662306a36Sopenharmony_ci	BPF_JMP_REG(BPF_JEQ, BPF_REG_3, BPF_REG_2, 2),
8762306a36Sopenharmony_ci	BPF_MOV64_IMM(BPF_REG_0, 1),
8862306a36Sopenharmony_ci	BPF_EXIT_INSN(),
8962306a36Sopenharmony_ci	BPF_LD_IMM64(BPF_REG_3, 0xfefefeULL),
9062306a36Sopenharmony_ci	BPF_ALU64_IMM(BPF_MUL, BPF_REG_3, 0xefefef),
9162306a36Sopenharmony_ci	BPF_JMP_REG(BPF_JEQ, BPF_REG_3, BPF_REG_2, 2),
9262306a36Sopenharmony_ci	BPF_MOV64_IMM(BPF_REG_0, 1),
9362306a36Sopenharmony_ci	BPF_EXIT_INSN(),
9462306a36Sopenharmony_ci	BPF_MOV32_REG(BPF_REG_2, BPF_REG_2),
9562306a36Sopenharmony_ci	BPF_LD_IMM64(BPF_REG_0, 0xfefefeULL),
9662306a36Sopenharmony_ci	BPF_ALU32_REG(BPF_MUL, BPF_REG_0, BPF_REG_1),
9762306a36Sopenharmony_ci	BPF_JMP_REG(BPF_JEQ, BPF_REG_0, BPF_REG_2, 2),
9862306a36Sopenharmony_ci	BPF_MOV64_IMM(BPF_REG_0, 1),
9962306a36Sopenharmony_ci	BPF_EXIT_INSN(),
10062306a36Sopenharmony_ci	BPF_LD_IMM64(BPF_REG_3, 0xfefefeULL),
10162306a36Sopenharmony_ci	BPF_ALU32_REG(BPF_MUL, BPF_REG_3, BPF_REG_1),
10262306a36Sopenharmony_ci	BPF_JMP_REG(BPF_JEQ, BPF_REG_3, BPF_REG_2, 2),
10362306a36Sopenharmony_ci	BPF_MOV64_IMM(BPF_REG_0, 1),
10462306a36Sopenharmony_ci	BPF_EXIT_INSN(),
10562306a36Sopenharmony_ci	BPF_LD_IMM64(BPF_REG_3, 0xfefefeULL),
10662306a36Sopenharmony_ci	BPF_ALU32_IMM(BPF_MUL, BPF_REG_3, 0xefefef),
10762306a36Sopenharmony_ci	BPF_JMP_REG(BPF_JEQ, BPF_REG_3, BPF_REG_2, 2),
10862306a36Sopenharmony_ci	BPF_MOV64_IMM(BPF_REG_0, 1),
10962306a36Sopenharmony_ci	BPF_EXIT_INSN(),
11062306a36Sopenharmony_ci	BPF_LD_IMM64(BPF_REG_0, 0xfefefeULL),
11162306a36Sopenharmony_ci	BPF_LD_IMM64(BPF_REG_2, 0x2ad4d4aaULL),
11262306a36Sopenharmony_ci	BPF_ALU32_IMM(BPF_MUL, BPF_REG_0, 0x2b),
11362306a36Sopenharmony_ci	BPF_JMP_REG(BPF_JEQ, BPF_REG_0, BPF_REG_2, 2),
11462306a36Sopenharmony_ci	BPF_MOV64_IMM(BPF_REG_0, 1),
11562306a36Sopenharmony_ci	BPF_EXIT_INSN(),
11662306a36Sopenharmony_ci	BPF_LD_IMM64(BPF_REG_0, 0x952a7bbcULL),
11762306a36Sopenharmony_ci	BPF_LD_IMM64(BPF_REG_1, 0xfefefeULL),
11862306a36Sopenharmony_ci	BPF_LD_IMM64(BPF_REG_5, 0xeeff0d413122ULL),
11962306a36Sopenharmony_ci	BPF_ALU32_REG(BPF_MUL, BPF_REG_5, BPF_REG_1),
12062306a36Sopenharmony_ci	BPF_JMP_REG(BPF_JEQ, BPF_REG_5, BPF_REG_0, 2),
12162306a36Sopenharmony_ci	BPF_MOV64_IMM(BPF_REG_0, 1),
12262306a36Sopenharmony_ci	BPF_EXIT_INSN(),
12362306a36Sopenharmony_ci	BPF_MOV64_IMM(BPF_REG_0, 2),
12462306a36Sopenharmony_ci	BPF_EXIT_INSN(),
12562306a36Sopenharmony_ci	},
12662306a36Sopenharmony_ci	.result = ACCEPT,
12762306a36Sopenharmony_ci	.retval = 2,
12862306a36Sopenharmony_ci},
12962306a36Sopenharmony_ci{
13062306a36Sopenharmony_ci	"jit: various div tests",
13162306a36Sopenharmony_ci	.insns = {
13262306a36Sopenharmony_ci	BPF_LD_IMM64(BPF_REG_2, 0xefeffeULL),
13362306a36Sopenharmony_ci	BPF_LD_IMM64(BPF_REG_0, 0xeeff0d413122ULL),
13462306a36Sopenharmony_ci	BPF_LD_IMM64(BPF_REG_1, 0xfefeeeULL),
13562306a36Sopenharmony_ci	BPF_ALU64_REG(BPF_DIV, BPF_REG_0, BPF_REG_1),
13662306a36Sopenharmony_ci	BPF_JMP_REG(BPF_JEQ, BPF_REG_0, BPF_REG_2, 2),
13762306a36Sopenharmony_ci	BPF_MOV64_IMM(BPF_REG_0, 1),
13862306a36Sopenharmony_ci	BPF_EXIT_INSN(),
13962306a36Sopenharmony_ci	BPF_LD_IMM64(BPF_REG_3, 0xeeff0d413122ULL),
14062306a36Sopenharmony_ci	BPF_ALU64_IMM(BPF_DIV, BPF_REG_3, 0xfefeeeULL),
14162306a36Sopenharmony_ci	BPF_JMP_REG(BPF_JEQ, BPF_REG_3, BPF_REG_2, 2),
14262306a36Sopenharmony_ci	BPF_MOV64_IMM(BPF_REG_0, 1),
14362306a36Sopenharmony_ci	BPF_EXIT_INSN(),
14462306a36Sopenharmony_ci	BPF_LD_IMM64(BPF_REG_2, 0xaa93ULL),
14562306a36Sopenharmony_ci	BPF_ALU64_IMM(BPF_MOD, BPF_REG_1, 0xbeefULL),
14662306a36Sopenharmony_ci	BPF_JMP_REG(BPF_JEQ, BPF_REG_1, BPF_REG_2, 2),
14762306a36Sopenharmony_ci	BPF_MOV64_IMM(BPF_REG_0, 1),
14862306a36Sopenharmony_ci	BPF_EXIT_INSN(),
14962306a36Sopenharmony_ci	BPF_LD_IMM64(BPF_REG_1, 0xfefeeeULL),
15062306a36Sopenharmony_ci	BPF_LD_IMM64(BPF_REG_3, 0xbeefULL),
15162306a36Sopenharmony_ci	BPF_ALU64_REG(BPF_MOD, BPF_REG_1, BPF_REG_3),
15262306a36Sopenharmony_ci	BPF_JMP_REG(BPF_JEQ, BPF_REG_1, BPF_REG_2, 2),
15362306a36Sopenharmony_ci	BPF_MOV64_IMM(BPF_REG_0, 1),
15462306a36Sopenharmony_ci	BPF_EXIT_INSN(),
15562306a36Sopenharmony_ci	BPF_LD_IMM64(BPF_REG_2, 0x5ee1dULL),
15662306a36Sopenharmony_ci	BPF_LD_IMM64(BPF_REG_1, 0xfefeeeULL),
15762306a36Sopenharmony_ci	BPF_LD_IMM64(BPF_REG_3, 0x2bULL),
15862306a36Sopenharmony_ci	BPF_ALU32_REG(BPF_DIV, BPF_REG_1, BPF_REG_3),
15962306a36Sopenharmony_ci	BPF_JMP_REG(BPF_JEQ, BPF_REG_1, BPF_REG_2, 2),
16062306a36Sopenharmony_ci	BPF_MOV64_IMM(BPF_REG_0, 1),
16162306a36Sopenharmony_ci	BPF_EXIT_INSN(),
16262306a36Sopenharmony_ci	BPF_ALU32_REG(BPF_DIV, BPF_REG_1, BPF_REG_1),
16362306a36Sopenharmony_ci	BPF_JMP_IMM(BPF_JEQ, BPF_REG_1, 1, 2),
16462306a36Sopenharmony_ci	BPF_MOV64_IMM(BPF_REG_0, 1),
16562306a36Sopenharmony_ci	BPF_EXIT_INSN(),
16662306a36Sopenharmony_ci	BPF_ALU64_REG(BPF_MOD, BPF_REG_2, BPF_REG_2),
16762306a36Sopenharmony_ci	BPF_JMP_IMM(BPF_JEQ, BPF_REG_2, 0, 2),
16862306a36Sopenharmony_ci	BPF_MOV64_IMM(BPF_REG_0, 1),
16962306a36Sopenharmony_ci	BPF_EXIT_INSN(),
17062306a36Sopenharmony_ci	BPF_MOV64_IMM(BPF_REG_0, 2),
17162306a36Sopenharmony_ci	BPF_EXIT_INSN(),
17262306a36Sopenharmony_ci	},
17362306a36Sopenharmony_ci	.result = ACCEPT,
17462306a36Sopenharmony_ci	.retval = 2,
17562306a36Sopenharmony_ci},
17662306a36Sopenharmony_ci{
17762306a36Sopenharmony_ci	"jit: jsgt, jslt",
17862306a36Sopenharmony_ci	.insns = {
17962306a36Sopenharmony_ci	BPF_LD_IMM64(BPF_REG_1, 0x80000000ULL),
18062306a36Sopenharmony_ci	BPF_LD_IMM64(BPF_REG_2, 0x0ULL),
18162306a36Sopenharmony_ci	BPF_JMP_REG(BPF_JSGT, BPF_REG_1, BPF_REG_2, 2),
18262306a36Sopenharmony_ci	BPF_MOV64_IMM(BPF_REG_0, 1),
18362306a36Sopenharmony_ci	BPF_EXIT_INSN(),
18462306a36Sopenharmony_ci
18562306a36Sopenharmony_ci	BPF_JMP_REG(BPF_JSLT, BPF_REG_2, BPF_REG_1, 2),
18662306a36Sopenharmony_ci	BPF_MOV64_IMM(BPF_REG_0, 1),
18762306a36Sopenharmony_ci	BPF_EXIT_INSN(),
18862306a36Sopenharmony_ci
18962306a36Sopenharmony_ci	BPF_MOV64_IMM(BPF_REG_0, 2),
19062306a36Sopenharmony_ci	BPF_EXIT_INSN(),
19162306a36Sopenharmony_ci	},
19262306a36Sopenharmony_ci	.result = ACCEPT,
19362306a36Sopenharmony_ci	.retval = 2,
19462306a36Sopenharmony_ci},
19562306a36Sopenharmony_ci{
19662306a36Sopenharmony_ci	"jit: torturous jumps, imm8 nop jmp and pure jump padding",
19762306a36Sopenharmony_ci	.insns = { },
19862306a36Sopenharmony_ci	.fill_helper = bpf_fill_torturous_jumps,
19962306a36Sopenharmony_ci	.prog_type = BPF_PROG_TYPE_SCHED_CLS,
20062306a36Sopenharmony_ci	.result = ACCEPT,
20162306a36Sopenharmony_ci	.retval = 1,
20262306a36Sopenharmony_ci},
20362306a36Sopenharmony_ci{
20462306a36Sopenharmony_ci	"jit: torturous jumps, imm32 nop jmp and jmp_cond padding",
20562306a36Sopenharmony_ci	.insns = { },
20662306a36Sopenharmony_ci	.fill_helper = bpf_fill_torturous_jumps,
20762306a36Sopenharmony_ci	.prog_type = BPF_PROG_TYPE_SCHED_CLS,
20862306a36Sopenharmony_ci	.result = ACCEPT,
20962306a36Sopenharmony_ci	.retval = 2,
21062306a36Sopenharmony_ci},
21162306a36Sopenharmony_ci{
21262306a36Sopenharmony_ci	"jit: torturous jumps in subprog",
21362306a36Sopenharmony_ci	.insns = { },
21462306a36Sopenharmony_ci	.fill_helper = bpf_fill_torturous_jumps,
21562306a36Sopenharmony_ci	.prog_type = BPF_PROG_TYPE_SCHED_CLS,
21662306a36Sopenharmony_ci	.result = ACCEPT,
21762306a36Sopenharmony_ci	.retval = 3,
21862306a36Sopenharmony_ci},
219