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