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