Linux Audio

Check our new training course

Loading...
  1! SPDX-License-Identifier: GPL-2.0
  2! entry.S macro define
  3	
  4	.macro	cli
  5	stc	sr, r0
  6	or	#0xf0, r0
  7	ldc	r0, sr
  8	.endm
  9
 10	.macro	sti
 11	mov	#0xfffffff0, r11
 12	extu.b	r11, r11
 13	not	r11, r11
 14	stc	sr, r10
 15	and	r11, r10
 16#ifdef CONFIG_CPU_HAS_SR_RB
 17	stc	k_g_imask, r11
 18	or	r11, r10
 19#endif
 20	ldc	r10, sr
 21	.endm
 22
 23	.macro	get_current_thread_info, ti, tmp
 24#ifdef CONFIG_CPU_HAS_SR_RB
 25	stc	r7_bank, \ti
 26#else
 27	mov	#((THREAD_SIZE - 1) >> 10) ^ 0xff, \tmp
 28	shll8	\tmp
 29	shll2	\tmp
 30	mov	r15, \ti
 31	and	\tmp, \ti
 32#endif	
 33	.endm
 34
 35#ifdef CONFIG_TRACE_IRQFLAGS
 36
 37	.macro	TRACE_IRQS_ON
 38	mov.l	r0, @-r15
 39	mov.l	r1, @-r15
 40	mov.l	r2, @-r15
 41	mov.l	r3, @-r15
 42	mov.l	r4, @-r15
 43	mov.l	r5, @-r15
 44	mov.l	r6, @-r15
 45	mov.l	r7, @-r15
 46
 47	mov.l   7834f, r0
 48	jsr	@r0
 49	 nop
 50
 51	mov.l	@r15+, r7
 52	mov.l	@r15+, r6
 53	mov.l	@r15+, r5
 54	mov.l	@r15+, r4
 55	mov.l	@r15+, r3
 56	mov.l	@r15+, r2
 57	mov.l	@r15+, r1
 58	mov.l	@r15+, r0
 59	mov.l	7834f, r0
 60
 61	bra	7835f
 62	 nop
 63	.balign	4
 647834:	.long	trace_hardirqs_on
 657835:
 66	.endm
 67	.macro	TRACE_IRQS_OFF
 68
 69	mov.l	r0, @-r15
 70	mov.l	r1, @-r15
 71	mov.l	r2, @-r15
 72	mov.l	r3, @-r15
 73	mov.l	r4, @-r15
 74	mov.l	r5, @-r15
 75	mov.l	r6, @-r15
 76	mov.l	r7, @-r15
 77
 78	mov.l	7834f, r0
 79	jsr	@r0
 80	 nop
 81
 82	mov.l	@r15+, r7
 83	mov.l	@r15+, r6
 84	mov.l	@r15+, r5
 85	mov.l	@r15+, r4
 86	mov.l	@r15+, r3
 87	mov.l	@r15+, r2
 88	mov.l	@r15+, r1
 89	mov.l	@r15+, r0
 90	mov.l	7834f, r0
 91
 92	bra	7835f
 93	 nop
 94	.balign	4
 957834:	.long	trace_hardirqs_off
 967835:
 97	.endm
 98
 99#else
100	.macro	TRACE_IRQS_ON
101	.endm
102
103	.macro	TRACE_IRQS_OFF
104	.endm
105#endif
106
107#if defined(CONFIG_CPU_SH2A) || defined(CONFIG_CPU_SH4)
108# define PREF(x)	pref	@x
109#else
110# define PREF(x)	nop
111#endif
112
113	/*
114	 * Macro for use within assembly. Because the DWARF unwinder
115	 * needs to use the frame register to unwind the stack, we
116	 * need to setup r14 with the value of the stack pointer as
117	 * the return address is usually on the stack somewhere.
118	 */
119	.macro	setup_frame_reg
120#ifdef CONFIG_DWARF_UNWINDER
121	mov	r15, r14
122#endif
123	.endm