OSDN Git Service

xtensa: get rid of stack frame in coprocessor_flush
authorMax Filippov <jcmvbkbc@gmail.com>
Mon, 18 Apr 2022 07:14:00 +0000 (00:14 -0700)
committerMax Filippov <jcmvbkbc@gmail.com>
Mon, 2 May 2022 02:51:23 +0000 (19:51 -0700)
coprocessor_flush is an ordinary function, it can use all registers.
Don't reserve stack frame for it and use a7 to preserve a0 around the
context saving call.

Signed-off-by: Max Filippov <jcmvbkbc@gmail.com>
arch/xtensa/kernel/coprocessor.S

index af11dda..9541240 100644 (file)
@@ -216,10 +216,8 @@ ENDPROC(fast_coprocessor)
 
 ENTRY(coprocessor_flush)
 
-       /* reserve 4 bytes on stack to save a0 */
-       abi_entry(4)
+       abi_entry_default
 
-       s32i    a0, a1, 0
        movi    a4, .Lcp_regs_jump_table
        addx8   a4, a3, a4
        addx4   a3, a3, a4
@@ -227,10 +225,11 @@ ENTRY(coprocessor_flush)
        beqz    a4, 1f
        l32i    a3, a3, CP_REGS_TAB_OFFSET
        add     a2, a2, a3
+       mov     a7, a0
        callx0  a4
-1:     l32i    a0, a1, 0
-
-       abi_ret(4)
+       mov     a0, a7
+1:
+       abi_ret_default
 
 ENDPROC(coprocessor_flush)