This is an automated email from the git hooks/post-receive script. Git pushed a commit to branch master in repository ffmpeg.
commit 90a8749bf35b25e7e61b9413db4c3a9ef67d4c92 Author: Ramiro Polla <[email protected]> AuthorDate: Sat Jul 11 19:26:43 2026 +0200 Commit: Ramiro Polla <[email protected]> CommitDate: Wed Jul 22 14:07:37 2026 +0000 swscale/aarch64/ops_asmgen: split cps code out of asmgen_process() The asmgen_process() function is now more generic, which will allow us to use it from the JIT compiler. The naming of the function, along with the setup code and main loop, are moved to asmgen_process_cps(). Sponsored-by: Sovereign Tech Fund Signed-off-by: Ramiro Polla <[email protected]> --- libswscale/aarch64/ops_asmgen.c | 50 ++++++++++++++++++++++++++++------------- 1 file changed, 35 insertions(+), 15 deletions(-) diff --git a/libswscale/aarch64/ops_asmgen.c b/libswscale/aarch64/ops_asmgen.c index 7a8e9af7e8..5ab4c0cf25 100644 --- a/libswscale/aarch64/ops_asmgen.c +++ b/libswscale/aarch64/ops_asmgen.c @@ -164,6 +164,10 @@ typedef struct SwsAArch64Context { RasmOp in_bump[4]; RasmOp out_bump[4]; + /* Process function. */ + RasmNode *setup; + RasmNode *loop; + /* Vector register dimensions. */ size_t el_size; size_t el_count; @@ -298,7 +302,6 @@ static unsigned clobbered_gprs(const SwsAArch64Context *s, static void asmgen_process(SwsAArch64Context *s, SwsCompMask mask) { RasmContext *r = s->rctx; - char func_name[128]; char buf[64]; /** @@ -306,19 +309,14 @@ static void asmgen_process(SwsAArch64Context *s, SwsCompMask mask) * The description in x86/ops_include.asm mostly holds as well here. */ - snprintf(func_name, sizeof(func_name), "ff_sws_process_%04x_neon", nibble_mask(mask)); - - rasm_func_begin(r, func_name, true, false); - /* Function prologue */ RasmOp saved_regs[MAX_SAVED_REGS]; unsigned nsaved = clobbered_gprs(s, mask, saved_regs); if (nsaved) asmgen_prologue(s, saved_regs, nsaved); - /* Load values from impl. */ - i_ldr(r, s->op0_func, a64op_off(s->impl, offsetof_impl_cont)); CMT("SwsFuncPtr op0_func = impl->cont;"); - i_add(r, s->op1_impl, s->impl, IMM(sizeof_impl)); CMT("SwsOpImpl *op1_impl = impl + 1;"); + /* Setup. */ + s->setup = rasm_get_current_node(r); /* Load values from exec. */ LOOP(mask, i) { @@ -354,10 +352,9 @@ static void asmgen_process(SwsAArch64Context *s, SwsCompMask mask) rasm_add_label(r, first_row); CMT("first_row:"); i_mov(r, s->bx, s->bx_start); CMT("bx = bx_start;"); - /* Reset impl and call first kernel. */ + /* Main loop. */ rasm_add_label(r, next_block); CMT("next_block:"); - i_mov(r, s->impl, s->op1_impl); CMT("impl = op1_impl;"); - i_blr(r, s->op0_func); CMT("op0_func();"); + s->loop = rasm_get_current_node(r); /* Perform horizontal loop. */ i_add(r, s->bx, s->bx, IMM(1)); CMT("bx += 1;"); @@ -1389,6 +1386,29 @@ static void asmgen_op_dither(SwsAArch64Context *s, const SwsAArch64OpImplParams } } +/*********************************************************************/ +static void asmgen_process_cps(SwsAArch64Context *s, SwsCompMask mask) +{ + RasmContext *r = s->rctx; + char func_name[128]; + + snprintf(func_name, sizeof(func_name), "ff_sws_process_%04x_neon", nibble_mask(mask)); + rasm_func_begin(r, func_name, true, false); + + asmgen_process(s, mask); + + /* Load values from impl. */ + rasm_set_current_node(r, s->setup); + RasmOp impl_cont = a64op_off(s->impl, offsetof_impl_cont); + i_ldr(r, s->op0_func, impl_cont); CMT("SwsFuncPtr op0_func = impl->cont;"); + i_add(r, s->op1_impl, s->impl, IMM(sizeof_impl)); CMT("SwsOpImpl *op1_impl = impl + 1;"); + + /* Reset impl and call first kernel. */ + rasm_set_current_node(r, s->loop); + i_mov(r, s->impl, s->op1_impl); CMT("impl = op1_impl;"); + i_blr(r, s->op0_func); CMT("op0_func();"); +} + /*********************************************************************/ static void asmgen_op_cps(SwsAArch64Context *s, const SwsAArch64OpEntry *entry) { @@ -1590,10 +1610,10 @@ static int asmgen(void) s.out_bump[3] = a64op_gpx(27); /* Generate all process functions using rasm. */ - asmgen_process(&s, SWS_COMP_ELEMS(1)); - asmgen_process(&s, SWS_COMP_ELEMS(2)); - asmgen_process(&s, SWS_COMP_ELEMS(3)); - asmgen_process(&s, SWS_COMP_ELEMS(4)); + asmgen_process_cps(&s, SWS_COMP_ELEMS(1)); + asmgen_process_cps(&s, SWS_COMP_ELEMS(2)); + asmgen_process_cps(&s, SWS_COMP_ELEMS(3)); + asmgen_process_cps(&s, SWS_COMP_ELEMS(4)); /* Generate all functions from ops_entries.c using rasm. */ const SwsAArch64OpEntry *entries = ops_entries; _______________________________________________ ffmpeg-cvslog mailing list -- [email protected] To unsubscribe send an email to [email protected]
