|
@@ -701,7 +701,7 @@ static inline void emit_a32_arsh_r64(const u8 dst[], const u8 src[], bool dstk,
|
|
|
}
|
|
|
|
|
|
/* dst = dst >> src */
|
|
|
-static inline void emit_a32_lsr_r64(const u8 dst[], const u8 src[], bool dstk,
|
|
|
+static inline void emit_a32_rsh_r64(const u8 dst[], const u8 src[], bool dstk,
|
|
|
bool sstk, struct jit_ctx *ctx) {
|
|
|
const u8 *tmp = bpf2a32[TMP_REG_1];
|
|
|
const u8 *tmp2 = bpf2a32[TMP_REG_2];
|
|
@@ -717,7 +717,7 @@ static inline void emit_a32_lsr_r64(const u8 dst[], const u8 src[], bool dstk,
|
|
|
emit(ARM_LDR_I(rm, ARM_SP, STACK_VAR(dst_hi)), ctx);
|
|
|
}
|
|
|
|
|
|
- /* Do LSH operation */
|
|
|
+ /* Do RSH operation */
|
|
|
emit(ARM_RSB_I(ARM_IP, rt, 32), ctx);
|
|
|
emit(ARM_SUBS_I(tmp2[0], rt, 32), ctx);
|
|
|
emit(ARM_MOV_SR(ARM_LR, rd, SRTYPE_LSR, rt), ctx);
|
|
@@ -767,7 +767,7 @@ static inline void emit_a32_lsh_i64(const u8 dst[], bool dstk,
|
|
|
}
|
|
|
|
|
|
/* dst = dst >> val */
|
|
|
-static inline void emit_a32_lsr_i64(const u8 dst[], bool dstk,
|
|
|
+static inline void emit_a32_rsh_i64(const u8 dst[], bool dstk,
|
|
|
const u32 val, struct jit_ctx *ctx) {
|
|
|
const u8 *tmp = bpf2a32[TMP_REG_1];
|
|
|
const u8 *tmp2 = bpf2a32[TMP_REG_2];
|
|
@@ -1323,7 +1323,7 @@ static int build_insn(const struct bpf_insn *insn, struct jit_ctx *ctx)
|
|
|
case BPF_ALU64 | BPF_RSH | BPF_K:
|
|
|
if (unlikely(imm > 63))
|
|
|
return -EINVAL;
|
|
|
- emit_a32_lsr_i64(dst, dstk, imm, ctx);
|
|
|
+ emit_a32_rsh_i64(dst, dstk, imm, ctx);
|
|
|
break;
|
|
|
/* dst = dst << src */
|
|
|
case BPF_ALU64 | BPF_LSH | BPF_X:
|
|
@@ -1331,7 +1331,7 @@ static int build_insn(const struct bpf_insn *insn, struct jit_ctx *ctx)
|
|
|
break;
|
|
|
/* dst = dst >> src */
|
|
|
case BPF_ALU64 | BPF_RSH | BPF_X:
|
|
|
- emit_a32_lsr_r64(dst, src, dstk, sstk, ctx);
|
|
|
+ emit_a32_rsh_r64(dst, src, dstk, sstk, ctx);
|
|
|
break;
|
|
|
/* dst = dst >> src (signed) */
|
|
|
case BPF_ALU64 | BPF_ARSH | BPF_X:
|