1 /* SPDX-License-Identifier: GPL-2.0 */
6 #include <asm/asm-offsets.h>
8 #ifdef CONFIG_SHADOW_CALL_STACK
10 /* Load init_shadow_call_stack to gp. */
11 .macro scs_load_init_stack
12 la gp
, init_shadow_call_stack
16 /* Load the per-CPU IRQ shadow call stack to gp. */
17 .macro scs_load_irq_stack tmp
18 load_per_cpu gp
, irq_shadow_call_stack_ptr
, \tmp
21 /* Load task_scs_sp(current) to gp. */
22 .macro scs_load_current
23 REG_L gp
, TASK_TI_SCS_SP(tp
)
26 /* Load task_scs_sp(current) to gp, but only if tp has changed. */
27 .macro scs_load_current_if_task_changed prev
28 beq \prev
, tp
, _skip_scs
33 /* Save gp to task_scs_sp(current). */
34 .macro scs_save_current
35 REG_S gp
, TASK_TI_SCS_SP(tp
)
38 #else /* CONFIG_SHADOW_CALL_STACK */
40 .macro scs_load_init_stack
42 .macro scs_load_irq_stack tmp
44 .macro scs_load_current
46 .macro scs_load_current_if_task_changed prev
48 .macro scs_save_current
51 #endif /* CONFIG_SHADOW_CALL_STACK */
52 #endif /* __ASSEMBLY__ */
54 #endif /* _ASM_SCS_H */