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