Skip to content

Commit e45d4bf

Browse files
committed
xtensa: merge SAVE_CP_REGS_TAB and LOAD_CP_REGS_TAB
Both tables share the same offset field but the different function pointers. Merge them into single table with 3-element entries to reduce code and data duplication. Signed-off-by: Max Filippov <jcmvbkbc@gmail.com>
1 parent dedfe25 commit e45d4bf

1 file changed

Lines changed: 37 additions & 48 deletions

File tree

arch/xtensa/kernel/coprocessor.S

Lines changed: 37 additions & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -33,15 +33,6 @@
3333
ret; \
3434
.endif
3535

36-
#define SAVE_CP_REGS_TAB(x) \
37-
.if XTENSA_HAVE_COPROCESSOR(x); \
38-
.long .Lsave_cp_regs_cp##x; \
39-
.else; \
40-
.long 0; \
41-
.endif; \
42-
.long THREAD_XTREGS_CP##x
43-
44-
4536
#define LOAD_CP_REGS(x) \
4637
.if XTENSA_HAVE_COPROCESSOR(x); \
4738
.align 4; \
@@ -50,14 +41,19 @@
5041
ret; \
5142
.endif
5243

53-
#define LOAD_CP_REGS_TAB(x) \
44+
#define CP_REGS_TAB(x) \
5445
.if XTENSA_HAVE_COPROCESSOR(x); \
46+
.long .Lsave_cp_regs_cp##x; \
5547
.long .Lload_cp_regs_cp##x; \
5648
.else; \
57-
.long 0; \
49+
.long 0, 0; \
5850
.endif; \
5951
.long THREAD_XTREGS_CP##x
6052

53+
#define CP_REGS_TAB_SAVE 0
54+
#define CP_REGS_TAB_LOAD 4
55+
#define CP_REGS_TAB_OFFSET 8
56+
6157
__XTENSA_HANDLER
6258

6359
SAVE_CP_REGS(0)
@@ -79,25 +75,15 @@
7975
LOAD_CP_REGS(7)
8076

8177
.align 4
82-
.Lsave_cp_regs_jump_table:
83-
SAVE_CP_REGS_TAB(0)
84-
SAVE_CP_REGS_TAB(1)
85-
SAVE_CP_REGS_TAB(2)
86-
SAVE_CP_REGS_TAB(3)
87-
SAVE_CP_REGS_TAB(4)
88-
SAVE_CP_REGS_TAB(5)
89-
SAVE_CP_REGS_TAB(6)
90-
SAVE_CP_REGS_TAB(7)
91-
92-
.Lload_cp_regs_jump_table:
93-
LOAD_CP_REGS_TAB(0)
94-
LOAD_CP_REGS_TAB(1)
95-
LOAD_CP_REGS_TAB(2)
96-
LOAD_CP_REGS_TAB(3)
97-
LOAD_CP_REGS_TAB(4)
98-
LOAD_CP_REGS_TAB(5)
99-
LOAD_CP_REGS_TAB(6)
100-
LOAD_CP_REGS_TAB(7)
78+
.Lcp_regs_jump_table:
79+
CP_REGS_TAB(0)
80+
CP_REGS_TAB(1)
81+
CP_REGS_TAB(2)
82+
CP_REGS_TAB(3)
83+
CP_REGS_TAB(4)
84+
CP_REGS_TAB(5)
85+
CP_REGS_TAB(6)
86+
CP_REGS_TAB(7)
10187

10288
/*
10389
* Entry condition:
@@ -125,13 +111,12 @@ ENTRY(fast_coprocessor)
125111
rsr a2, depc
126112
s32i a2, a1, PT_AREG2
127113

128-
/*
129-
* The hal macros require up to 4 temporary registers. We use a3..a6.
130-
*/
114+
/* The hal macros require up to 4 temporary registers. We use a3..a6. */
131115

132116
s32i a4, a1, PT_AREG4
133117
s32i a5, a1, PT_AREG5
134118
s32i a6, a1, PT_AREG6
119+
s32i a7, a1, PT_AREG7
135120

136121
/* Find coprocessor number. Subtract first CP EXCCAUSE from EXCCAUSE */
137122

@@ -148,6 +133,12 @@ ENTRY(fast_coprocessor)
148133
wsr a0, cpenable
149134
rsync
150135

136+
/* Get coprocessor save/load table entry (a7). */
137+
138+
movi a7, .Lcp_regs_jump_table
139+
addx8 a7, a3, a7
140+
addx4 a7, a3, a7
141+
151142
/* Retrieve previous owner. (a3 still holds CP number) */
152143

153144
movi a0, coprocessor_owner # list of owners
@@ -167,10 +158,8 @@ ENTRY(fast_coprocessor)
167158
* (a4 still holds previous owner (thread_info), a3 CP number)
168159
*/
169160

170-
movi a5, .Lsave_cp_regs_jump_table
171-
addx8 a3, a3, a5 # a3: coprocessor number
172-
l32i a2, a3, 4 # a2: xtregs offset
173-
l32i a3, a3, 0 # a3: jump address
161+
l32i a2, a7, CP_REGS_TAB_OFFSET
162+
l32i a3, a7, CP_REGS_TAB_SAVE
174163
add a2, a2, a4
175164
callx0 a3
176165

@@ -188,15 +177,14 @@ ENTRY(fast_coprocessor)
188177

189178
/* Get context save area and call load routine. */
190179

191-
movi a5, .Lload_cp_regs_jump_table
192-
addx8 a3, a3, a5
193-
l32i a2, a3, 4 # a2: xtregs offset
194-
l32i a3, a3, 0 # a3: jump address
180+
l32i a2, a7, CP_REGS_TAB_OFFSET
181+
l32i a3, a7, CP_REGS_TAB_LOAD
195182
add a2, a2, a4
196183
callx0 a3
197184

198185
/* Restore all registers and return from exception handler. */
199186

187+
l32i a7, a1, PT_AREG7
200188
l32i a6, a1, PT_AREG6
201189
l32i a5, a1, PT_AREG5
202190
l32i a4, a1, PT_AREG4
@@ -232,13 +220,14 @@ ENTRY(coprocessor_flush)
232220
abi_entry(4)
233221

234222
s32i a0, a1, 0
235-
movi a0, .Lsave_cp_regs_jump_table
236-
addx8 a3, a3, a0
237-
l32i a4, a3, 4
238-
l32i a3, a3, 0
239-
add a2, a2, a4
240-
beqz a3, 1f
241-
callx0 a3
223+
movi a4, .Lcp_regs_jump_table
224+
addx8 a4, a3, a4
225+
addx4 a3, a3, a4
226+
l32i a4, a3, CP_REGS_TAB_SAVE
227+
beqz a4, 1f
228+
l32i a3, a3, CP_REGS_TAB_OFFSET
229+
add a2, a2, a3
230+
callx0 a4
242231
1: l32i a0, a1, 0
243232

244233
abi_ret(4)

0 commit comments

Comments
 (0)