This is an automated email from the git hooks/post-receive script.

Git pushed a commit to branch master
in repository ffmpeg.

commit bba42ce036aa68da2f91e1c9f1ae19e8ab78f1e0
Author:     Rémi Denis-Courmont <[email protected]>
AuthorDate: Tue Dec 30 21:26:46 2025 +0200
Commit:     Rémi Denis-Courmont <[email protected]>
CommitDate: Sat Jan 10 17:20:07 2026 +0200

    checkasm/riscv: add call checks for riscv32
---
 tests/checkasm/checkasm.h       |   2 +-
 tests/checkasm/riscv/checkasm.S | 126 ++++++++++++++++++++++++----------------
 2 files changed, 78 insertions(+), 50 deletions(-)

diff --git a/tests/checkasm/checkasm.h b/tests/checkasm/checkasm.h
index 1798547f93..e3addec21e 100644
--- a/tests/checkasm/checkasm.h
+++ b/tests/checkasm/checkasm.h
@@ -309,7 +309,7 @@ void checkasm_checked_call(void *func, ...);
 void checkasm_set_function(void *);
 void *checkasm_get_wrapper(void);
 
-#if HAVE_RV && (__riscv_xlen == 64)
+#if HAVE_RV
 #define declare_new(ret, ...) \
     ret (*checked_call)(__VA_ARGS__) = checkasm_get_wrapper();
 #define checkasm_call_checked(func, ...) \
diff --git a/tests/checkasm/riscv/checkasm.S b/tests/checkasm/riscv/checkasm.S
index 5a9f0c649f..44f32e440b 100644
--- a/tests/checkasm/riscv/checkasm.S
+++ b/tests/checkasm/riscv/checkasm.S
@@ -20,6 +20,38 @@
 
 #include "libavutil/riscv/asm.S"
 
+#if (__riscv_xlen == 32)
+.macro  lx      rd, addr
+        lw      \rd, \addr
+.endm
+
+.macro  sx      rs, addr
+        sw      \rs, \addr
+.endm
+#define REG_MAGIC 0xdeadbeef
+#elif (__riscv_xlen == 64)
+.macro  lx      rd, addr
+        ld      \rd, \addr
+.endm
+
+.macro  sx      rs, addr
+        sd      \rs, \addr
+.endm
+#define REG_MAGIC 0xdeadbeef0badf00d
+#else
+.macro  lx      rd, addr
+        lq      \rd, \addr
+.endm
+
+.macro  sx      rs, addr
+        sq      \rs, \addr
+.endm
+#define REG_MAGIC 0xdeadbeef0badf00daaaabbbbccccdddd
+#endif
+#define XSZ             (__riscv_xlen / 8)
+#define STACK_ALIGN     16
+#define STACK_SPACE(sz) (((sz) + (STACK_ALIGN - 1)) & -STACK_ALIGN)
+
 #if defined(__riscv_float_abi_soft)
 .macro  flf     rd, addr
 .endm
@@ -54,38 +86,33 @@
 #error "Unknown float ABI"
 #endif
 
-#if (__riscv_xlen == 64)
-
         .pushsection .tbss, "waT"
-        .align  3
-        .hidden checked_func
-
-checked_func:
-        .quad   0
-
-        .align  3
+        .align  4
+.Lchecked_func:
+        .fill   1, XSZ, 0
+        .align  4
 .Lsaved_xregs:
-        .fill   4 + 12, 8, 0 // RA, SP, GP, TP, S0-S11
+        .fill   4 + 12, XSZ, 0 // RA, SP, GP, TP, S0-S11
         .align  4
 .Lsaved_fregs:
         .fill   12, FSZ, 0 // FS0-FS11
-        .fill   1, 8, 0 // RA
+        .fill   1, XSZ, 0 // RA
         .popsection
 
 func checkasm_set_function
         lpad    0
-        la.tls.ie t0, checked_func
+        la.tls.ie t0, .Lchecked_func
         add     t0, tp, t0
-        sd      a0, (t0)
+        sx      a0, (t0)
         ret
 endfunc
 
 func checkasm_get_wrapper, v
         lpad    0
-        addi    sp, sp, -16
-        sd      fp,  (sp)
-        sd      ra, 8(sp)
-        addi    fp, sp, 16
+        addi    sp, sp, -STACK_SPACE(2 * XSZ)
+        sx      fp,     (sp)
+        sx      ra, XSZ(sp)
+        addi    fp, sp, STACK_SPACE(2 * XSZ)
 
         call    av_get_cpu_flags
         andi    t0, a0, 8 /* AV_CPU_FLAG_RVV_I32 */
@@ -101,8 +128,8 @@ func checkasm_get_wrapper, v
 #endif
         lla     a0, checkasm_checked_call_ifv
 1:
-        ld      ra, 8(sp)
-        ld      fp,  (sp)
+        lx      ra, XSZ(sp)
+        lx      fp,    (sp)
         addi    sp, sp, 16
         ret
 endfunc
@@ -135,44 +162,46 @@ func checkasm_checked_call_i
         /* Save RA, unallocatable and callee-saved registers */
         la.tls.ie t0, .Lsaved_xregs
         add     t0, tp, t0
-        sd      ra,   (t0)
-        sd      sp,  8(t0)
-        sd      gp, 16(t0)
-        sd      tp, 24(t0)
+        sx      ra,        (t0)
+        sx      sp, 1 * XSZ(t0)
+        sx      gp, 2 * XSZ(t0)
+        sx      tp, 3 * XSZ(t0)
         .irp    n, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11
-        sd      s\n, (32 + (8 * \n))(t0)
+        sx      s\n, (4 + \n) * XSZ(t0)
         .endr
 
         /* Clobber the stack space right below SP */
-        li      t0, 0xdeadbeef1badf00d
-        .rept   16
-        addi    sp, sp, -16
-        sd      t0,  (sp)
-        sd      t0, 8(sp)
-        .endr
-        addi    sp, sp, 256
+        li      t1, REG_MAGIC
+        li      t0, 16
+1:
+        addi    sp, sp, -XSZ
+        addi    t0, t0, -1
+        sx      t1, (sp)
+        bnez    t0, 1b
 
-        /* Clobber the saved and temporary registers */
+        addi    sp, sp, 16 * XSZ
+        # Clobber temporary registers (except T2, FE-CFI label)
+        .irp    n, 0, 1, 3, 4, 5, 6
+        mv      t\n, t1
+        .endr
+        # Clobber the saved registers
         .irp    n, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11
-        .if (\n > 1 && \n < 7)
-        mv      t\n, t0
-        .endif
-        mv      s\n, t0
+        mv      s\n, t1
         .endr
 
         /* Call the tested function */
-        la.tls.ie t0, checked_func
+        la.tls.ie t0, .Lchecked_func
         add     t0, tp, t0
-        ld      t3, (t0)
-        sd      zero, (t0)
+        lx      t3, (t0)
+        sx      zero, (t0)
         jalr    t3
 
         /* Check special register values */
         la.tls.ie t0, .Lsaved_xregs
         add     t0, tp, t0
-        ld      t2,  8(t0) // SP
-        ld      t3, 16(t0) // GP
-        ld      t4, 24(t0) // TP
+        lx      t2, 1 * XSZ(t0) // SP
+        lx      t3, 2 * XSZ(t0) // GP
+        lx      t4, 3 * XSZ(t0) // TP
         li      t1, 'S'
         bne     t2, sp, .Lfail_xp
         li      t1, 'G'
@@ -181,7 +210,7 @@ func checkasm_checked_call_i
         bne     t4, tp, .Lfail_xp
 
         /* Check value of saved registers */
-        li      t0, 0xdeadbeef1badf00d
+        li      t0, REG_MAGIC
         .irp    n, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11
         li      t1, \n
         bne     t0, s\n, .Lfail_s
@@ -191,17 +220,17 @@ func checkasm_checked_call_i
         /* Restore RA and saved registers */
         la.tls.ie t0, .Lsaved_xregs
         add     t0, tp, t0
-        ld      ra,   (t0)
+        lx      ra, (t0)
         .irp    n, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11
-        ld      s\n, (32 + (8 * \n))(t0)
+        lx      s\n, (4 + \n) * XSZ(t0)
         .endr
         ret
 
 .Lfail_xp:
         # checkasm_fail_func() needs valid SP, GP and TP. Restore them.
-        ld      sp,  8(t0)
-        ld      gp, 16(t0)
-        ld      tp, 24(t0)
+        lx      sp, 1 * XSZ(t0)
+        lx      gp, 2 * XSZ(t0)
+        lx      tp, 3 * XSZ(t0)
         lla     a0, .Lfail_rsvd_reg
         mv      a1, t1
         call    checkasm_fail_func
@@ -306,4 +335,3 @@ func checkasm_checked_call_ifv, zve32x
         csrwi   vxsat, 1     /* Saturation:    encountered */
         jr      t0
 endfunc
-#endif

_______________________________________________
ffmpeg-cvslog mailing list -- [email protected]
To unsubscribe send an email to [email protected]

Reply via email to