mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git
synced 2025-01-12 08:48:48 +00:00
arm64: bpf: add 'store immediate' instruction
aarch64 doesn't have native store immediate instruction, such operation has to be implemented by the below instruction sequence: Load immediate to register Store register Signed-off-by: Yang Shi <yang.shi@linaro.org> CC: Zi Shen Lim <zlim.lnx@gmail.com> CC: Xi Wang <xi.wang@gmail.com> Reviewed-by: Zi Shen Lim <zlim.lnx@gmail.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
6bd4f355df
commit
df849ba3a8
@ -590,7 +590,25 @@ emit_cond_jmp:
|
||||
case BPF_ST | BPF_MEM | BPF_H:
|
||||
case BPF_ST | BPF_MEM | BPF_B:
|
||||
case BPF_ST | BPF_MEM | BPF_DW:
|
||||
goto notyet;
|
||||
/* Load imm to a register then store it */
|
||||
ctx->tmp_used = 1;
|
||||
emit_a64_mov_i(1, tmp2, off, ctx);
|
||||
emit_a64_mov_i(1, tmp, imm, ctx);
|
||||
switch (BPF_SIZE(code)) {
|
||||
case BPF_W:
|
||||
emit(A64_STR32(tmp, dst, tmp2), ctx);
|
||||
break;
|
||||
case BPF_H:
|
||||
emit(A64_STRH(tmp, dst, tmp2), ctx);
|
||||
break;
|
||||
case BPF_B:
|
||||
emit(A64_STRB(tmp, dst, tmp2), ctx);
|
||||
break;
|
||||
case BPF_DW:
|
||||
emit(A64_STR64(tmp, dst, tmp2), ctx);
|
||||
break;
|
||||
}
|
||||
break;
|
||||
|
||||
/* STX: *(size *)(dst + off) = src */
|
||||
case BPF_STX | BPF_MEM | BPF_W:
|
||||
|
Loading…
x
Reference in New Issue
Block a user