18c2ecf20Sopenharmony_ci! SPDX-License-Identifier: GPL-2.0 28c2ecf20Sopenharmony_ci! entry.S macro define 38c2ecf20Sopenharmony_ci 48c2ecf20Sopenharmony_ci .macro cli 58c2ecf20Sopenharmony_ci stc sr, r0 68c2ecf20Sopenharmony_ci or #0xf0, r0 78c2ecf20Sopenharmony_ci ldc r0, sr 88c2ecf20Sopenharmony_ci .endm 98c2ecf20Sopenharmony_ci 108c2ecf20Sopenharmony_ci .macro sti 118c2ecf20Sopenharmony_ci mov #0xfffffff0, r11 128c2ecf20Sopenharmony_ci extu.b r11, r11 138c2ecf20Sopenharmony_ci not r11, r11 148c2ecf20Sopenharmony_ci stc sr, r10 158c2ecf20Sopenharmony_ci and r11, r10 168c2ecf20Sopenharmony_ci#ifdef CONFIG_CPU_HAS_SR_RB 178c2ecf20Sopenharmony_ci stc k_g_imask, r11 188c2ecf20Sopenharmony_ci or r11, r10 198c2ecf20Sopenharmony_ci#endif 208c2ecf20Sopenharmony_ci ldc r10, sr 218c2ecf20Sopenharmony_ci .endm 228c2ecf20Sopenharmony_ci 238c2ecf20Sopenharmony_ci .macro get_current_thread_info, ti, tmp 248c2ecf20Sopenharmony_ci#ifdef CONFIG_CPU_HAS_SR_RB 258c2ecf20Sopenharmony_ci stc r7_bank, \ti 268c2ecf20Sopenharmony_ci#else 278c2ecf20Sopenharmony_ci mov #((THREAD_SIZE - 1) >> 10) ^ 0xff, \tmp 288c2ecf20Sopenharmony_ci shll8 \tmp 298c2ecf20Sopenharmony_ci shll2 \tmp 308c2ecf20Sopenharmony_ci mov r15, \ti 318c2ecf20Sopenharmony_ci and \tmp, \ti 328c2ecf20Sopenharmony_ci#endif 338c2ecf20Sopenharmony_ci .endm 348c2ecf20Sopenharmony_ci 358c2ecf20Sopenharmony_ci#ifdef CONFIG_TRACE_IRQFLAGS 368c2ecf20Sopenharmony_ci 378c2ecf20Sopenharmony_ci .macro TRACE_IRQS_ON 388c2ecf20Sopenharmony_ci mov.l r0, @-r15 398c2ecf20Sopenharmony_ci mov.l r1, @-r15 408c2ecf20Sopenharmony_ci mov.l r2, @-r15 418c2ecf20Sopenharmony_ci mov.l r3, @-r15 428c2ecf20Sopenharmony_ci mov.l r4, @-r15 438c2ecf20Sopenharmony_ci mov.l r5, @-r15 448c2ecf20Sopenharmony_ci mov.l r6, @-r15 458c2ecf20Sopenharmony_ci mov.l r7, @-r15 468c2ecf20Sopenharmony_ci 478c2ecf20Sopenharmony_ci mov.l 7834f, r0 488c2ecf20Sopenharmony_ci jsr @r0 498c2ecf20Sopenharmony_ci nop 508c2ecf20Sopenharmony_ci 518c2ecf20Sopenharmony_ci mov.l @r15+, r7 528c2ecf20Sopenharmony_ci mov.l @r15+, r6 538c2ecf20Sopenharmony_ci mov.l @r15+, r5 548c2ecf20Sopenharmony_ci mov.l @r15+, r4 558c2ecf20Sopenharmony_ci mov.l @r15+, r3 568c2ecf20Sopenharmony_ci mov.l @r15+, r2 578c2ecf20Sopenharmony_ci mov.l @r15+, r1 588c2ecf20Sopenharmony_ci mov.l @r15+, r0 598c2ecf20Sopenharmony_ci mov.l 7834f, r0 608c2ecf20Sopenharmony_ci 618c2ecf20Sopenharmony_ci bra 7835f 628c2ecf20Sopenharmony_ci nop 638c2ecf20Sopenharmony_ci .balign 4 648c2ecf20Sopenharmony_ci7834: .long trace_hardirqs_on 658c2ecf20Sopenharmony_ci7835: 668c2ecf20Sopenharmony_ci .endm 678c2ecf20Sopenharmony_ci .macro TRACE_IRQS_OFF 688c2ecf20Sopenharmony_ci 698c2ecf20Sopenharmony_ci mov.l r0, @-r15 708c2ecf20Sopenharmony_ci mov.l r1, @-r15 718c2ecf20Sopenharmony_ci mov.l r2, @-r15 728c2ecf20Sopenharmony_ci mov.l r3, @-r15 738c2ecf20Sopenharmony_ci mov.l r4, @-r15 748c2ecf20Sopenharmony_ci mov.l r5, @-r15 758c2ecf20Sopenharmony_ci mov.l r6, @-r15 768c2ecf20Sopenharmony_ci mov.l r7, @-r15 778c2ecf20Sopenharmony_ci 788c2ecf20Sopenharmony_ci mov.l 7834f, r0 798c2ecf20Sopenharmony_ci jsr @r0 808c2ecf20Sopenharmony_ci nop 818c2ecf20Sopenharmony_ci 828c2ecf20Sopenharmony_ci mov.l @r15+, r7 838c2ecf20Sopenharmony_ci mov.l @r15+, r6 848c2ecf20Sopenharmony_ci mov.l @r15+, r5 858c2ecf20Sopenharmony_ci mov.l @r15+, r4 868c2ecf20Sopenharmony_ci mov.l @r15+, r3 878c2ecf20Sopenharmony_ci mov.l @r15+, r2 888c2ecf20Sopenharmony_ci mov.l @r15+, r1 898c2ecf20Sopenharmony_ci mov.l @r15+, r0 908c2ecf20Sopenharmony_ci mov.l 7834f, r0 918c2ecf20Sopenharmony_ci 928c2ecf20Sopenharmony_ci bra 7835f 938c2ecf20Sopenharmony_ci nop 948c2ecf20Sopenharmony_ci .balign 4 958c2ecf20Sopenharmony_ci7834: .long trace_hardirqs_off 968c2ecf20Sopenharmony_ci7835: 978c2ecf20Sopenharmony_ci .endm 988c2ecf20Sopenharmony_ci 998c2ecf20Sopenharmony_ci#else 1008c2ecf20Sopenharmony_ci .macro TRACE_IRQS_ON 1018c2ecf20Sopenharmony_ci .endm 1028c2ecf20Sopenharmony_ci 1038c2ecf20Sopenharmony_ci .macro TRACE_IRQS_OFF 1048c2ecf20Sopenharmony_ci .endm 1058c2ecf20Sopenharmony_ci#endif 1068c2ecf20Sopenharmony_ci 1078c2ecf20Sopenharmony_ci#if defined(CONFIG_CPU_SH2A) || defined(CONFIG_CPU_SH4) 1088c2ecf20Sopenharmony_ci# define PREF(x) pref @x 1098c2ecf20Sopenharmony_ci#else 1108c2ecf20Sopenharmony_ci# define PREF(x) nop 1118c2ecf20Sopenharmony_ci#endif 1128c2ecf20Sopenharmony_ci 1138c2ecf20Sopenharmony_ci /* 1148c2ecf20Sopenharmony_ci * Macro for use within assembly. Because the DWARF unwinder 1158c2ecf20Sopenharmony_ci * needs to use the frame register to unwind the stack, we 1168c2ecf20Sopenharmony_ci * need to setup r14 with the value of the stack pointer as 1178c2ecf20Sopenharmony_ci * the return address is usually on the stack somewhere. 1188c2ecf20Sopenharmony_ci */ 1198c2ecf20Sopenharmony_ci .macro setup_frame_reg 1208c2ecf20Sopenharmony_ci#ifdef CONFIG_DWARF_UNWINDER 1218c2ecf20Sopenharmony_ci mov r15, r14 1228c2ecf20Sopenharmony_ci#endif 1238c2ecf20Sopenharmony_ci .endm 124