diff options
author | Hengqi Chen <hengqi.chen@gmail.com> | 2023-11-08 14:12:16 +0800 |
---|---|---|
committer | Huacai Chen <chenhuacai@loongson.cn> | 2023-11-08 14:12:16 +0800 |
commit | f48012f161508c743e1b39c3521a2b285d19c6aa (patch) | |
tree | 6d4bf02ae640bc5891dc391018229a71deca31b0 /arch | |
parent | 7111afe8fb5f15e11b8eff90d7aed1c58e3b1167 (diff) | |
download | lwn-f48012f161508c743e1b39c3521a2b285d19c6aa.tar.gz lwn-f48012f161508c743e1b39c3521a2b285d19c6aa.zip |
LoongArch: BPF: Support sign-extension mov instructions
Add support for sign-extension mov instructions.
Signed-off-by: Hengqi Chen <hengqi.chen@gmail.com>
Signed-off-by: Huacai Chen <chenhuacai@loongson.cn>
Diffstat (limited to 'arch')
-rw-r--r-- | arch/loongarch/net/bpf_jit.c | 19 |
1 files changed, 17 insertions, 2 deletions
diff --git a/arch/loongarch/net/bpf_jit.c b/arch/loongarch/net/bpf_jit.c index 0c2bbca527ef..ac9edf02675c 100644 --- a/arch/loongarch/net/bpf_jit.c +++ b/arch/loongarch/net/bpf_jit.c @@ -472,8 +472,23 @@ static int build_insn(const struct bpf_insn *insn, struct jit_ctx *ctx, bool ext /* dst = src */ case BPF_ALU | BPF_MOV | BPF_X: case BPF_ALU64 | BPF_MOV | BPF_X: - move_reg(ctx, dst, src); - emit_zext_32(ctx, dst, is32); + switch (off) { + case 0: + move_reg(ctx, dst, src); + emit_zext_32(ctx, dst, is32); + break; + case 8: + move_reg(ctx, t1, src); + emit_insn(ctx, extwb, dst, t1); + break; + case 16: + move_reg(ctx, t1, src); + emit_insn(ctx, extwh, dst, t1); + break; + case 32: + emit_insn(ctx, addw, dst, src, LOONGARCH_GPR_ZERO); + break; + } break; /* dst = imm */ |