mirror of
https://github.com/torvalds/linux.git
synced 2026-07-27 17:47:41 +02:00
bpf, arm64: Fix redundant MOV and clarify stack arg comments
emit_stack_arg_store_imm() materializes the immediate into tmp and then moves tmp to the target register (x5-x7). Emit the immediate directly into the target register to avoid the redundant MOV. While here, qualify the bare "FP" in the stack-layout ASCII art as "A64_FP" so it is not confused with BPF_FP, and note that incoming stack arguments sit above the FP/LR pair pushed by the callee prologue. Suggested-by: Will Deacon <will@kernel.org> Signed-off-by: Puranjay Mohan <puranjay@kernel.org> Link: https://lore.kernel.org/r/20260528161750.1900674-2-puranjay@kernel.org Signed-off-by: Alexei Starovoitov <ast@kernel.org>
This commit is contained in:
parent
41300d032a
commit
12a585e607
|
|
@ -546,7 +546,8 @@ static int build_prologue(struct jit_ctx *ctx, bool ebpf_from_cbpf)
|
|||
* low
|
||||
*
|
||||
* Stack args 6-8 are passed in x5-x7, args 9+ at [SP].
|
||||
* Incoming args 9+ are at [FP + 16], [FP + 24], ...
|
||||
* Incoming args 9+ are at [A64_FP + 16], [A64_FP + 24], ...
|
||||
* (above the saved FP/LR pair pushed in the callee prologue).
|
||||
*/
|
||||
|
||||
emit_kcfi(is_main_prog ? cfi_bpf_hash : cfi_bpf_subprog_hash, ctx);
|
||||
|
|
@ -1235,11 +1236,12 @@ static void emit_stack_arg_store_imm(s32 imm, s16 bpf_off, const u8 tmp, struct
|
|||
{
|
||||
int idx = -bpf_off / sizeof(u64) - 1;
|
||||
|
||||
emit_a64_mov_i(1, tmp, imm, ctx);
|
||||
if (idx < NR_STACK_ARG_REGS)
|
||||
emit(A64_MOV(1, stack_arg_reg[idx], tmp), ctx);
|
||||
else
|
||||
if (idx < NR_STACK_ARG_REGS) {
|
||||
emit_a64_mov_i(1, stack_arg_reg[idx], imm, ctx);
|
||||
} else {
|
||||
emit_a64_mov_i(1, tmp, imm, ctx);
|
||||
emit(A64_STR64I(tmp, A64_SP, (idx - NR_STACK_ARG_REGS) * sizeof(u64)), ctx);
|
||||
}
|
||||
}
|
||||
|
||||
/* JITs an eBPF instruction.
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user