BPF_LSH
case BPF_ALU | BPF_LSH | BPF_X:
case BPF_ALU | BPF_LSH | BPF_K:
case BPF_ALU64 | BPF_LSH | BPF_X:
case BPF_ALU64 | BPF_LSH | BPF_K:
case BPF_ALU | BPF_LSH | BPF_X:
case BPF_ALU | BPF_LSH | BPF_K:
case BPF_ALU64 | BPF_LSH | BPF_K:
case BPF_ALU64 | BPF_LSH | BPF_X:
case BPF_LSH:
case BPF_LSH:
case BPF_ALU | BPF_LSH | BPF_X:
case BPF_ALU64 | BPF_LSH | BPF_X:
case BPF_ALU | BPF_LSH | BPF_K:
case BPF_ALU64 | BPF_LSH | BPF_K:
case BPF_ALU | BPF_LSH | BPF_X:
case BPF_ALU64 | BPF_LSH | BPF_X:
case BPF_ALU | BPF_LSH | BPF_K:
case BPF_ALU64 | BPF_LSH | BPF_K:
case BPF_LSH:
case BPF_LSH:
op = BPF_LSH;
case BPF_LSH:
case BPF_LSH:
case BPF_ALU | BPF_LSH | BPF_K:
case BPF_ALU | BPF_LSH | BPF_X:
case BPF_ALU64 | BPF_LSH | BPF_K:
case BPF_ALU64 | BPF_LSH | BPF_X:
case BPF_LSH:
case BPF_LSH:
case BPF_LSH:
case BPF_LSH:
case BPF_ALU | BPF_LSH | BPF_K:
case BPF_ALU | BPF_LSH | BPF_X:
case BPF_ALU64 | BPF_LSH | BPF_K:
case BPF_ALU64 | BPF_LSH | BPF_X:
case BPF_ALU64 | BPF_LSH | BPF_X:
case BPF_ALU64 | BPF_LSH | BPF_K:
case BPF_ALU | BPF_LSH | BPF_X:
case BPF_ALU | BPF_LSH | BPF_K:
case BPF_LSH:
case BPF_LSH:
case BPF_LSH:
case BPF_LSH:
case BPF_ALU | BPF_LSH | BPF_X:
case BPF_ALU64 | BPF_LSH | BPF_X:
case BPF_ALU | BPF_LSH | BPF_K:
case BPF_ALU64 | BPF_LSH | BPF_K:
case BPF_ALU | BPF_LSH | BPF_X: /* (u32) dst <<= (u32) src */
case BPF_ALU64 | BPF_LSH | BPF_X: /* dst <<= src; */
case BPF_ALU | BPF_LSH | BPF_K: /* (u32) dst <<= (u32) imm */
case BPF_ALU64 | BPF_LSH | BPF_K: /* dst <<= imm */
case BPF_ALU | BPF_LSH | BPF_X: /* (u32) dst <<= (u32) src */
case BPF_ALU64 | BPF_LSH | BPF_X: /* dst <<= src; */
case BPF_ALU | BPF_LSH | BPF_K: /* (u32) dst <<== (u32) imm */
case BPF_ALU64 | BPF_LSH | BPF_K: /* dst <<== imm */
case BPF_ALU64 | BPF_LSH | BPF_K:
case BPF_ALU | BPF_LSH | BPF_X:
case BPF_ALU | BPF_LSH | BPF_K:
case BPF_LSH:
case BPF_LSH:
case BPF_LSH:
case BPF_LSH:
case BPF_ALU64 | BPF_LSH | BPF_X:
case BPF_ALU | BPF_LSH | BPF_X:
case BPF_ALU64 | BPF_LSH | BPF_X:
case BPF_ALU | BPF_LSH | BPF_K:
case BPF_ALU64 | BPF_LSH | BPF_K:
case BPF_ALU | BPF_LSH | BPF_X: /* dst = (u32) dst << (u32) src */
case BPF_ALU64 | BPF_LSH | BPF_X: /* dst = dst << src */
case BPF_ALU | BPF_LSH | BPF_K: /* dst = (u32) dst << (u32) imm */
case BPF_ALU64 | BPF_LSH | BPF_K: /* dst = dst << imm */
case BPF_ALU | BPF_LSH | BPF_X: /* A <<= X */
case BPF_ALU | BPF_LSH | BPF_K: /* A <<= K */
case BPF_ALU | BPF_LSH | BPF_K:
case BPF_ALU64 | BPF_LSH | BPF_K:
case BPF_ALU | BPF_LSH | BPF_X:
case BPF_ALU64 | BPF_LSH | BPF_X:
case BPF_ALU | BPF_LSH | BPF_K:
case BPF_ALU64 | BPF_LSH | BPF_K:
case BPF_ALU | BPF_LSH | BPF_X:
case BPF_ALU64 | BPF_LSH | BPF_X:
case BPF_LSH:
[BPF_LSH] = 0xE0,
case BPF_ALU | BPF_LSH | BPF_X:
case BPF_ALU | BPF_LSH | BPF_K:
case BPF_ALU64 | BPF_LSH | BPF_K:
case BPF_ALU64 | BPF_LSH | BPF_X:
case BPF_LSH:
[BPF_ALU64 | BPF_LSH | BPF_X] = shl_reg64,
[BPF_ALU64 | BPF_LSH | BPF_K] = shl_imm64,
[BPF_ALU | BPF_LSH | BPF_X] = shl_reg,
[BPF_ALU | BPF_LSH | BPF_K] = shl_imm,
if (!(next1.code == (BPF_LSH | BPF_K | BPF_ALU64) &&
next2.code == (BPF_LSH | BPF_K | BPF_ALU64)))
case BPF_ALU | BPF_LSH | BPF_K:
case BPF_ALU | BPF_LSH | BPF_X:
*insn++ = BPF_ALU64_IMM(BPF_LSH, ret, ilog2(elem_size));
*insn++ = BPF_ALU64_IMM(BPF_LSH, ret, ilog2(elem_size));
*insn++ = BPF_ALU64_IMM(BPF_LSH, BPF_REG_0, 3);
*to++ = BPF_ALU64_IMM(BPF_LSH, BPF_REG_AX, 32);
[BPF_LSH >> 4] = "<<=",
case BPF_LSH:
case BPF_LSH:
if ((opcode == BPF_LSH || opcode == BPF_RSH ||
rnd_hi32_patch[2] = BPF_ALU64_IMM(BPF_LSH, BPF_REG_AX, 32);
insn_buf[3] = BPF_ALU64_IMM(BPF_LSH, BPF_REG_0, 3);
insn_buf[cnt++] = BPF_ALU64_IMM(BPF_LSH, BPF_REG_2, 3);
insn_buf[2] = BPF_ALU64_IMM(BPF_LSH, BPF_REG_0, 3);
case BPF_ALU | BPF_LSH | BPF_K:
case BPF_ALU | BPF_LSH | BPF_X:
if (op == BPF_LSH || op == BPF_RSH || op == BPF_ARSH)
return __bpf_fill_alu_imm_regs(self, BPF_LSH, false);
return __bpf_fill_alu_imm_regs(self, BPF_LSH, true);
if (op == BPF_LSH || op == BPF_RSH || op == BPF_ARSH)
return __bpf_fill_alu_reg_pairs(self, BPF_LSH, false);
return __bpf_fill_alu_reg_pairs(self, BPF_LSH, true);
insn[i++] = BPF_ALU64_IMM(BPF_LSH, R3, 32);
insn[i++] = BPF_ALU64_IMM(BPF_LSH, R3, 32);
BPF_STMT(BPF_ALU | BPF_LSH | BPF_K, 27),
BPF_STMT(BPF_ALU | BPF_LSH | BPF_K, 2),
BPF_ALU64_IMM(BPF_LSH, R1, 32),
BPF_ALU64_REG(BPF_LSH, R0, R2),
BPF_ALU64_REG(BPF_LSH, R0, R4), /* R0 <= 46 */
BPF_ALU64_REG(BPF_LSH, R4, R2), /* R4 = 46 << 1 */
BPF_ALU64_REG(BPF_LSH, R4, R4), /* R4 = 4 << 4 */
BPF_ALU32_REG(BPF_LSH, R4, R4), /* R4 = 5 << 5 */
BPF_ALU64_IMM(BPF_LSH, R3, 32),
BPF_LSH, BPF_RSH, BPF_ARSH, BPF_ADD,
case BPF_LSH:
return __bpf_fill_alu_shift(self, BPF_LSH, BPF_K, false);
BPF_ALU32_REG(BPF_LSH, R0, R1),
BPF_ALU32_REG(BPF_LSH, R0, R1),
BPF_ALU32_REG(BPF_LSH, R0, R1),
BPF_ALU64_REG(BPF_LSH, R0, R1),
BPF_ALU64_REG(BPF_LSH, R0, R1),
BPF_ALU64_REG(BPF_LSH, R0, R1),
BPF_ALU64_REG(BPF_LSH, R0, R1),
BPF_ALU64_REG(BPF_LSH, R0, R1),
BPF_ALU64_REG(BPF_LSH, R0, R1),
return __bpf_fill_alu_shift(self, BPF_LSH, BPF_X, false);
BPF_ALU64_REG(BPF_LSH, R0, R1),
BPF_ALU64_REG(BPF_LSH, R0, R1),
BPF_ALU64_REG(BPF_LSH, R0, R1),
BPF_ALU64_REG(BPF_LSH, R0, R1),
BPF_ALU32_IMM(BPF_LSH, R0, 1),
BPF_ALU32_IMM(BPF_LSH, R0, 31),
BPF_ALU32_IMM(BPF_LSH, R0, 12),
BPF_ALU32_IMM(BPF_LSH, R0, 0),
BPF_ALU64_IMM(BPF_LSH, R0, 1),
BPF_ALU64_IMM(BPF_LSH, R0, 31),
BPF_ALU64_IMM(BPF_LSH, R0, 12),
BPF_ALU64_IMM(BPF_LSH, R0, 12),
BPF_ALU64_IMM(BPF_LSH, R0, 36),
return __bpf_fill_alu_shift(self, BPF_LSH, BPF_K, true);
BPF_ALU64_IMM(BPF_LSH, R0, 36),
BPF_ALU64_IMM(BPF_LSH, R0, 32),
BPF_ALU64_IMM(BPF_LSH, R0, 32),
BPF_ALU64_IMM(BPF_LSH, R0, 0),
return __bpf_fill_alu_shift(self, BPF_LSH, BPF_X, true);
return __bpf_fill_alu_shift_same_reg(self, BPF_LSH, false);
return __bpf_fill_alu_shift_same_reg(self, BPF_LSH, true);
*insn++ = BPF_ALU32_IMM(BPF_LSH, si->dst_reg, 16);
[BPF_ALU | BPF_LSH | BPF_K] = true,
[BPF_ALU | BPF_LSH | BPF_X] = true,
*insn++ = BPF_ALU32_IMM(BPF_LSH, si->dst_reg, 16);
case BPF_ALU | BPF_LSH | BPF_K:
*insn++ = BPF_ALU32_IMM(BPF_LSH, si->dst_reg, 16);
case BPF_ALU | BPF_LSH | BPF_X:
case BPF_ALU | BPF_LSH | BPF_K:
*insn++ = BPF_ALU32_IMM(BPF_LSH, BPF_REG_A, 2);
*insn++ = BPF_ALU64_IMM(BPF_LSH, ret, ilog2(sizeof(struct xsk_sock *)));
#define BPF_ALU_LSH (BPF_ALU | BPF_LSH)
bpf_set_curr_instr(BPF_ALU | BPF_LSH | BPF_K, 0, 0, $3); }
bpf_set_curr_instr(BPF_ALU | BPF_LSH | BPF_X, 0, 0, 0); }
bpf_set_curr_instr(BPF_ALU | BPF_LSH | BPF_X, 0, 0, 0); }
[BPF_LSH >> 4] = "<<=",
BPF_ALU64_IMM(BPF_LSH, BPF_REG_3, 1),
BPF_ALU64_IMM(BPF_LSH, BPF_REG_3, 1),
BPF_ALU64_IMM(BPF_LSH, BPF_REG_3, 1),
BPF_ALU64_IMM(BPF_LSH, BPF_REG_3, 1),
BPF_ALU64_IMM(BPF_LSH, BPF_REG_4, 5),
BPF_ALU64_IMM(BPF_LSH, BPF_REG_6, 2),
BPF_ALU64_IMM(BPF_LSH, BPF_REG_6, 2),
BPF_ALU64_IMM(BPF_LSH, BPF_REG_6, 2),
BPF_ALU64_IMM(BPF_LSH, BPF_REG_5, 2),
BPF_ALU64_IMM(BPF_LSH, BPF_REG_6, 2),
BPF_ALU64_IMM(BPF_LSH, BPF_REG_7, 2),
BPF_ALU64_IMM(BPF_LSH, BPF_REG_6, 2),
BPF_ALU64_IMM(BPF_LSH, BPF_REG_7, 2),
BPF_ALU64_IMM(BPF_LSH, BPF_REG_3, 1),
BPF_ALU64_IMM(BPF_LSH, BPF_REG_3, 1),
BPF_ALU64_IMM(BPF_LSH, BPF_REG_3, 1),
BPF_ALU64_IMM(BPF_LSH, BPF_REG_3, 1),
BPF_ALU64_IMM(BPF_LSH, BPF_REG_7, 33), \
BPF_ALU64_IMM(BPF_LSH, BPF_REG_7, 32), \
BPF_ALU64_IMM(BPF_LSH, BPF_REG_1, 32),
BPF_ALU64_IMM(BPF_LSH, BPF_REG_2, 32),
BPF_ALU64_REG(BPF_LSH, BPF_REG_1, BPF_REG_2),
BPF_ALU64_IMM(BPF_LSH, BPF_REG_2, 32),
BPF_ALU64_IMM(BPF_LSH, BPF_REG_1, 0),
BPF_ALU64_REG(BPF_LSH, BPF_REG_1, BPF_REG_0),
BPF_ALU32_REG(BPF_LSH, BPF_REG_1, BPF_REG_4),
BPF_ALU64_IMM(BPF_LSH, BPF_REG_1, 1),
BPF_ALU32_IMM(BPF_LSH, BPF_REG_1, 1),
BPF_ALU64_IMM(BPF_LSH, BPF_REG_6, 32),
BPF_ALU64_IMM(BPF_LSH, BPF_REG_6, 32),
BPF_ALU64_IMM(BPF_LSH, BPF_REG_6, 32),