// This macro corrupts x0-x3. It is the caller's duty
        // to save/restore them if required.
-       .macro  apply_ssbd, state, targ, tmp1, tmp2
+       .macro  apply_ssbd, state, tmp1, tmp2
 #ifdef CONFIG_ARM64_SSBD
 alternative_cb arm64_enable_wa2_handling
-       b       \targ
+       b       .L__asm_ssbd_skip\@
 alternative_cb_end
        ldr_this_cpu    \tmp2, arm64_ssbd_callback_required, \tmp1
-       cbz     \tmp2, \targ
+       cbz     \tmp2,  .L__asm_ssbd_skip\@
        ldr     \tmp2, [tsk, #TSK_TI_FLAGS]
-       tbnz    \tmp2, #TIF_SSBD, \targ
+       tbnz    \tmp2, #TIF_SSBD, .L__asm_ssbd_skip\@
        mov     w0, #ARM_SMCCC_ARCH_WORKAROUND_2
        mov     w1, #\state
 alternative_cb arm64_update_smccc_conduit
        nop                                     // Patched to SMC/HVC #0
 alternative_cb_end
+.L__asm_ssbd_skip\@:
 #endif
        .endm
 
        ldr     x19, [tsk, #TSK_TI_FLAGS]       // since we can unmask debug
        disable_step_tsk x19, x20               // exceptions when scheduling.
 
-       apply_ssbd 1, 1f, x22, x23
-
-#ifdef CONFIG_ARM64_SSBD
-       ldp     x0, x1, [sp, #16 * 0]
-       ldp     x2, x3, [sp, #16 * 1]
-#endif
-1:
+       apply_ssbd 1, x22, x23
 
        mov     x29, xzr                        // fp pointed to user-space
        .else
 alternative_else_nop_endif
 #endif
 3:
-       apply_ssbd 0, 5f, x0, x1
-5:
+       apply_ssbd 0, x0, x1
        .endif
 
        msr     elr_el1, x21                    // set up the return data