Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
torvalds
GitHub Repository: torvalds/linux
Path: blob/master/arch/sh/include/asm/entry-macros.S
26493 views
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
64
7834: .long trace_hardirqs_on
65
7835:
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
95
7834: .long trace_hardirqs_off
96
7835:
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
124
125