1 /*
2  * tie-asm.h -- compile-time HAL assembler definitions dependent on CORE & TIE
3  *
4  *  NOTE:  This header file is not meant to be included directly.
5  */
6 
7 /* This header file contains assembly-language definitions (assembly
8    macros, etc.) for this specific Xtensa processor's TIE extensions
9    and options.  It is customized to this Xtensa processor configuration.
10 
11    Copyright (c) 1999-2022 Cadence Design Systems Inc.
12 
13    Permission is hereby granted, free of charge, to any person obtaining
14    a copy of this software and associated documentation files (the
15    "Software"), to deal in the Software without restriction, including
16    without limitation the rights to use, copy, modify, merge, publish,
17    distribute, sublicense, and/or sell copies of the Software, and to
18    permit persons to whom the Software is furnished to do so, subject to
19    the following conditions:
20 
21    The above copyright notice and this permission notice shall be included
22    in all copies or substantial portions of the Software.
23 
24    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
25    EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
26    MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
27    IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
28    CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
29    TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
30    SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.  */
31 
32 #ifndef _XTENSA_CORE_TIE_ASM_H
33 #define _XTENSA_CORE_TIE_ASM_H
34 
35 #define XT_ADDI_A 1
36 #include <xtensa/coreasm.h>
37 
38 /*  Selection parameter values for save-area save/restore macros:  */
39 /*  Option vs. TIE:  */
40 #define XTHAL_SAS_TIE	0x0001	/* custom extension or coprocessor */
41 #define XTHAL_SAS_OPT	0x0002	/* optional (and not a coprocessor) */
42 #define XTHAL_SAS_ANYOT	0x0003	/* both of the above */
43 /*  Whether used automatically by compiler:  */
44 #define XTHAL_SAS_NOCC	0x0004	/* not used by compiler w/o special opts/code */
45 #define XTHAL_SAS_CC	0x0008	/* used by compiler without special opts/code */
46 #define XTHAL_SAS_ANYCC	0x000C	/* both of the above */
47 /*  ABI handling across function calls:  */
48 #define XTHAL_SAS_CALR	0x0010	/* caller-saved */
49 #define XTHAL_SAS_CALE	0x0020	/* callee-saved */
50 #define XTHAL_SAS_GLOB	0x0040	/* global across function calls (in thread) */
51 #define XTHAL_SAS_ANYABI	0x0070	/* all of the above three */
52 /*  Misc  */
53 #define XTHAL_SAS_ALL	0xFFFF	/* include all default NCP contents */
54 #define XTHAL_SAS3(optie,ccuse,abi)	( ((optie) & XTHAL_SAS_ANYOT)  \
55 					| ((ccuse) & XTHAL_SAS_ANYCC)  \
56 					| ((abi)   & XTHAL_SAS_ANYABI) )
57 
58 
59     /*
60       *  Macro to store all non-coprocessor (extra) custom TIE and optional state
61       *  (not including zero-overhead loop registers).
62       *  Required parameters:
63       *      ptr         Save area pointer address register (clobbered)
64       *                  (register must contain a 4 byte aligned address).
65       *      at1..at4    Four temporary address registers (first XCHAL_NCP_NUM_ATMPS
66       *                  registers are clobbered, the remaining are unused).
67       *  Optional parameters:
68       *      continue    If macro invoked as part of a larger store sequence, set to 1
69       *                  if this is not the first in the sequence.  Defaults to 0.
70       *      ofs         Offset from start of larger sequence (from value of first ptr
71       *                  in sequence) at which to store.  Defaults to next available space
72       *                  (or 0 if <continue> is 0).
73       *      select      Select what category(ies) of registers to store, as a bitmask
74       *                  (see XTHAL_SAS_xxx constants).  Defaults to all registers.
75       *      alloc       Select what category(ies) of registers to allocate; if any
76       *                  category is selected here that is not in <select>, space for
77       *                  the corresponding registers is skipped without doing any store.
78       */
79     .macro xchal_ncp_store  ptr at1 at2 at3 at4  continue=0 ofs=-1 select=XTHAL_SAS_ALL alloc=0
80 	xchal_sa_start	\continue, \ofs
81 	// Optional global registers used by default by the compiler:
82 	.ifeq (XTHAL_SAS_OPT | XTHAL_SAS_CC | XTHAL_SAS_GLOB) & ~(\select)
83 	xchal_sa_align	\ptr, 0, 1016, 4, 4
84 	rur.threadptr	\at1		// threadptr option
85 	s32i	\at1, \ptr, .Lxchal_ofs_+0
86 	.set	.Lxchal_ofs_, .Lxchal_ofs_ + 4
87 	.elseif ((XTHAL_SAS_OPT | XTHAL_SAS_CC | XTHAL_SAS_GLOB) & ~(\alloc)) == 0
88 	xchal_sa_align	\ptr, 0, 1016, 4, 4
89 	.set	.Lxchal_ofs_, .Lxchal_ofs_ + 4
90 	.endif
91 	// Optional caller-saved registers used by default by the compiler:
92 	.ifeq (XTHAL_SAS_OPT | XTHAL_SAS_CC | XTHAL_SAS_CALR) & ~(\select)
93 	xchal_sa_align	\ptr, 0, 1012, 4, 4
94 	rsr.acclo	\at1		// MAC16 option
95 	s32i	\at1, \ptr, .Lxchal_ofs_+0
96 	rsr.acchi	\at1		// MAC16 option
97 	s32i	\at1, \ptr, .Lxchal_ofs_+4
98 	.set	.Lxchal_ofs_, .Lxchal_ofs_ + 8
99 	.elseif ((XTHAL_SAS_OPT | XTHAL_SAS_CC | XTHAL_SAS_CALR) & ~(\alloc)) == 0
100 	xchal_sa_align	\ptr, 0, 1012, 4, 4
101 	.set	.Lxchal_ofs_, .Lxchal_ofs_ + 8
102 	.endif
103 	// Optional caller-saved registers not used by default by the compiler:
104 	.ifeq (XTHAL_SAS_OPT | XTHAL_SAS_NOCC | XTHAL_SAS_CALR) & ~(\select)
105 	xchal_sa_align	\ptr, 0, 996, 4, 4
106 	rsr.br	\at1		// boolean option
107 	s32i	\at1, \ptr, .Lxchal_ofs_+0
108 	rsr.scompare1	\at1		// conditional store option
109 	s32i	\at1, \ptr, .Lxchal_ofs_+4
110 	rsr.m0	\at1		// MAC16 option
111 	s32i	\at1, \ptr, .Lxchal_ofs_+8
112 	rsr.m1	\at1		// MAC16 option
113 	s32i	\at1, \ptr, .Lxchal_ofs_+12
114 	rsr.m2	\at1		// MAC16 option
115 	s32i	\at1, \ptr, .Lxchal_ofs_+16
116 	rsr.m3	\at1		// MAC16 option
117 	s32i	\at1, \ptr, .Lxchal_ofs_+20
118 	.set	.Lxchal_ofs_, .Lxchal_ofs_ + 24
119 	.elseif ((XTHAL_SAS_OPT | XTHAL_SAS_NOCC | XTHAL_SAS_CALR) & ~(\alloc)) == 0
120 	xchal_sa_align	\ptr, 0, 996, 4, 4
121 	.set	.Lxchal_ofs_, .Lxchal_ofs_ + 24
122 	.endif
123 	// Custom caller-saved registers not used by default by the compiler:
124 	.ifeq (XTHAL_SAS_TIE | XTHAL_SAS_NOCC | XTHAL_SAS_CALR) & ~(\select)
125 	xchal_sa_align	\ptr, 0, 1008, 4, 4
126 	rur.f64r_lo	\at1		// ureg 234
127 	s32i	\at1, \ptr, .Lxchal_ofs_+0
128 	rur.f64r_hi	\at1		// ureg 235
129 	s32i	\at1, \ptr, .Lxchal_ofs_+4
130 	rur.f64s	\at1		// ureg 236
131 	s32i	\at1, \ptr, .Lxchal_ofs_+8
132 	.set	.Lxchal_ofs_, .Lxchal_ofs_ + 12
133 	.elseif ((XTHAL_SAS_TIE | XTHAL_SAS_NOCC | XTHAL_SAS_CALR) & ~(\alloc)) == 0
134 	xchal_sa_align	\ptr, 0, 1008, 4, 4
135 	.set	.Lxchal_ofs_, .Lxchal_ofs_ + 12
136 	.endif
137     .endm	// xchal_ncp_store
138 
139     /*
140       *  Macro to load all non-coprocessor (extra) custom TIE and optional state
141       *  (not including zero-overhead loop registers).
142       *  Required parameters:
143       *      ptr         Save area pointer address register (clobbered)
144       *                  (register must contain a 4 byte aligned address).
145       *      at1..at4    Four temporary address registers (first XCHAL_NCP_NUM_ATMPS
146       *                  registers are clobbered, the remaining are unused).
147       *  Optional parameters:
148       *      continue    If macro invoked as part of a larger load sequence, set to 1
149       *                  if this is not the first in the sequence.  Defaults to 0.
150       *      ofs         Offset from start of larger sequence (from value of first ptr
151       *                  in sequence) at which to load.  Defaults to next available space
152       *                  (or 0 if <continue> is 0).
153       *      select      Select what category(ies) of registers to load, as a bitmask
154       *                  (see XTHAL_SAS_xxx constants).  Defaults to all registers.
155       *      alloc       Select what category(ies) of registers to allocate; if any
156       *                  category is selected here that is not in <select>, space for
157       *                  the corresponding registers is skipped without doing any load.
158       */
159     .macro xchal_ncp_load  ptr at1 at2 at3 at4  continue=0 ofs=-1 select=XTHAL_SAS_ALL alloc=0
160 	xchal_sa_start	\continue, \ofs
161 	// Optional global registers used by default by the compiler:
162 	.ifeq (XTHAL_SAS_OPT | XTHAL_SAS_CC | XTHAL_SAS_GLOB) & ~(\select)
163 	xchal_sa_align	\ptr, 0, 1016, 4, 4
164 	l32i	\at1, \ptr, .Lxchal_ofs_+0
165 	wur.threadptr	\at1		// threadptr option
166 	.set	.Lxchal_ofs_, .Lxchal_ofs_ + 4
167 	.elseif ((XTHAL_SAS_OPT | XTHAL_SAS_CC | XTHAL_SAS_GLOB) & ~(\alloc)) == 0
168 	xchal_sa_align	\ptr, 0, 1016, 4, 4
169 	.set	.Lxchal_ofs_, .Lxchal_ofs_ + 4
170 	.endif
171 	// Optional caller-saved registers used by default by the compiler:
172 	.ifeq (XTHAL_SAS_OPT | XTHAL_SAS_CC | XTHAL_SAS_CALR) & ~(\select)
173 	xchal_sa_align	\ptr, 0, 1012, 4, 4
174 	l32i	\at1, \ptr, .Lxchal_ofs_+0
175 	wsr.acclo	\at1		// MAC16 option
176 	l32i	\at1, \ptr, .Lxchal_ofs_+4
177 	wsr.acchi	\at1		// MAC16 option
178 	.set	.Lxchal_ofs_, .Lxchal_ofs_ + 8
179 	.elseif ((XTHAL_SAS_OPT | XTHAL_SAS_CC | XTHAL_SAS_CALR) & ~(\alloc)) == 0
180 	xchal_sa_align	\ptr, 0, 1012, 4, 4
181 	.set	.Lxchal_ofs_, .Lxchal_ofs_ + 8
182 	.endif
183 	// Optional caller-saved registers not used by default by the compiler:
184 	.ifeq (XTHAL_SAS_OPT | XTHAL_SAS_NOCC | XTHAL_SAS_CALR) & ~(\select)
185 	xchal_sa_align	\ptr, 0, 996, 4, 4
186 	l32i	\at1, \ptr, .Lxchal_ofs_+0
187 	wsr.br	\at1		// boolean option
188 	l32i	\at1, \ptr, .Lxchal_ofs_+4
189 	wsr.scompare1	\at1		// conditional store option
190 	l32i	\at1, \ptr, .Lxchal_ofs_+8
191 	wsr.m0	\at1		// MAC16 option
192 	l32i	\at1, \ptr, .Lxchal_ofs_+12
193 	wsr.m1	\at1		// MAC16 option
194 	l32i	\at1, \ptr, .Lxchal_ofs_+16
195 	wsr.m2	\at1		// MAC16 option
196 	l32i	\at1, \ptr, .Lxchal_ofs_+20
197 	wsr.m3	\at1		// MAC16 option
198 	.set	.Lxchal_ofs_, .Lxchal_ofs_ + 24
199 	.elseif ((XTHAL_SAS_OPT | XTHAL_SAS_NOCC | XTHAL_SAS_CALR) & ~(\alloc)) == 0
200 	xchal_sa_align	\ptr, 0, 996, 4, 4
201 	.set	.Lxchal_ofs_, .Lxchal_ofs_ + 24
202 	.endif
203 	// Custom caller-saved registers not used by default by the compiler:
204 	.ifeq (XTHAL_SAS_TIE | XTHAL_SAS_NOCC | XTHAL_SAS_CALR) & ~(\select)
205 	xchal_sa_align	\ptr, 0, 1008, 4, 4
206 	l32i	\at1, \ptr, .Lxchal_ofs_+0
207 	wur.f64r_lo	\at1		// ureg 234
208 	l32i	\at1, \ptr, .Lxchal_ofs_+4
209 	wur.f64r_hi	\at1		// ureg 235
210 	l32i	\at1, \ptr, .Lxchal_ofs_+8
211 	wur.f64s	\at1		// ureg 236
212 	.set	.Lxchal_ofs_, .Lxchal_ofs_ + 12
213 	.elseif ((XTHAL_SAS_TIE | XTHAL_SAS_NOCC | XTHAL_SAS_CALR) & ~(\alloc)) == 0
214 	xchal_sa_align	\ptr, 0, 1008, 4, 4
215 	.set	.Lxchal_ofs_, .Lxchal_ofs_ + 12
216 	.endif
217     .endm	// xchal_ncp_load
218 
219 
220 #define XCHAL_NCP_NUM_ATMPS	1
221 
222     /*
223      *  Macro to store the state of TIE coprocessor AudioEngineLX.
224      *  Required parameters:
225      *      ptr         Save area pointer address register (clobbered)
226      *                  (register must contain a 8 byte aligned address).
227      *      at1..at4    Four temporary address registers (first XCHAL_CP1_NUM_ATMPS
228      *                  registers are clobbered, the remaining are unused).
229      *  Optional parameters are the same as for xchal_ncp_store.
230      */
231 #define xchal_cp_AudioEngineLX_store	xchal_cp1_store
232     .macro	xchal_cp1_store  ptr at1 at2 at3 at4  continue=0 ofs=-1 select=XTHAL_SAS_ALL alloc=0
233 	xchal_sa_start \continue, \ofs
234 	// Custom caller-saved registers not used by default by the compiler:
235 	.ifeq (XTHAL_SAS_TIE | XTHAL_SAS_NOCC | XTHAL_SAS_CALR) & ~(\select)
236 	xchal_sa_align	\ptr, 0, 0, 8, 8
237 	ae_s64.i	aed0, \ptr, .Lxchal_ofs_+40
238 	ae_s64.i	aed1, \ptr, .Lxchal_ofs_+48
239 	ae_s64.i	aed2, \ptr, .Lxchal_ofs_+56
240 	addi	\ptr, \ptr, 64
241 	ae_s64.i	aed3, \ptr, .Lxchal_ofs_+0
242 	ae_s64.i	aed4, \ptr, .Lxchal_ofs_+8
243 	ae_s64.i	aed5, \ptr, .Lxchal_ofs_+16
244 	ae_s64.i	aed6, \ptr, .Lxchal_ofs_+24
245 	ae_s64.i	aed7, \ptr, .Lxchal_ofs_+32
246 	ae_s64.i	aed8, \ptr, .Lxchal_ofs_+40
247 	ae_s64.i	aed9, \ptr, .Lxchal_ofs_+48
248 	ae_s64.i	aed10, \ptr, .Lxchal_ofs_+56
249 	addi	\ptr, \ptr, 64
250 	ae_s64.i	aed11, \ptr, .Lxchal_ofs_+0
251 	ae_s64.i	aed12, \ptr, .Lxchal_ofs_+8
252 	ae_s64.i	aed13, \ptr, .Lxchal_ofs_+16
253 	ae_s64.i	aed14, \ptr, .Lxchal_ofs_+24
254 	ae_s64.i	aed15, \ptr, .Lxchal_ofs_+32
255 	ae_movae	\at1, aep0
256 	s8i	\at1, \ptr, .Lxchal_ofs_+40
257 	ae_movae	\at1, aep1
258 	s8i	\at1, \ptr, .Lxchal_ofs_+41
259 	ae_movae	\at1, aep2
260 	s8i	\at1, \ptr, .Lxchal_ofs_+42
261 	ae_movae	\at1, aep3
262 	s8i	\at1, \ptr, .Lxchal_ofs_+43
263 	ae_salign64.i	u0, \ptr, .Lxchal_ofs_+48
264 	ae_salign64.i	u1, \ptr, .Lxchal_ofs_+56
265 	addi	\ptr, \ptr, 64
266 	ae_salign64.i	u2, \ptr, .Lxchal_ofs_+0
267 	ae_salign64.i	u3, \ptr, .Lxchal_ofs_+8
268 	addi	\ptr, \ptr, -192
269 	ae_movvfcrfsr	aed0		// ureg FCR_FSR
270 	ae_s64.i	aed0, \ptr, .Lxchal_ofs_+0 + 0
271 	rur.ae_ovf_sar	\at1		// ureg 240
272 	s32i	\at1, \ptr, .Lxchal_ofs_+8
273 	rur.ae_bithead	\at1		// ureg 241
274 	s32i	\at1, \ptr, .Lxchal_ofs_+12
275 	rur.ae_ts_fts_bu_bp	\at1		// ureg 242
276 	s32i	\at1, \ptr, .Lxchal_ofs_+16
277 	rur.ae_cw_sd_no	\at1		// ureg 243
278 	s32i	\at1, \ptr, .Lxchal_ofs_+20
279 	rur.ae_cbegin0	\at1		// ureg 246
280 	s32i	\at1, \ptr, .Lxchal_ofs_+24
281 	rur.ae_cend0	\at1		// ureg 247
282 	s32i	\at1, \ptr, .Lxchal_ofs_+28
283 	rur.ae_cbegin1	\at1		// ureg 248
284 	s32i	\at1, \ptr, .Lxchal_ofs_+32
285 	rur.ae_cend1	\at1		// ureg 249
286 	s32i	\at1, \ptr, .Lxchal_ofs_+36
287 	.set	.Lxchal_ofs_, .Lxchal_ofs_ + 208
288 	.elseif ((XTHAL_SAS_TIE | XTHAL_SAS_NOCC | XTHAL_SAS_CALR) & ~(\alloc)) == 0
289 	xchal_sa_align	\ptr, 0, 0, 8, 8
290 	.set	.Lxchal_ofs_, .Lxchal_ofs_ + 208
291 	.endif
292     .endm	// xchal_cp1_store
293 
294     /*
295      *  Macro to load the state of TIE coprocessor AudioEngineLX.
296      *  Required parameters:
297      *      ptr         Save area pointer address register (clobbered)
298      *                  (register must contain a 8 byte aligned address).
299      *      at1..at4    Four temporary address registers (first XCHAL_CP1_NUM_ATMPS
300      *                  registers are clobbered, the remaining are unused).
301      *  Optional parameters are the same as for xchal_ncp_load.
302      */
303 #define xchal_cp_AudioEngineLX_load	xchal_cp1_load
304     .macro	xchal_cp1_load  ptr at1 at2 at3 at4  continue=0 ofs=-1 select=XTHAL_SAS_ALL alloc=0
305 	xchal_sa_start \continue, \ofs
306 	// Custom caller-saved registers not used by default by the compiler:
307 	.ifeq (XTHAL_SAS_TIE | XTHAL_SAS_NOCC | XTHAL_SAS_CALR) & ~(\select)
308 	xchal_sa_align	\ptr, 0, 0, 8, 8
309 	ae_l64.i	aed0, \ptr, .Lxchal_ofs_+0 + 0		// ureg FCR_FSR
310 	ae_movfcrfsrv	aed0
311 	l32i	\at1, \ptr, .Lxchal_ofs_+8
312 	wur.ae_ovf_sar	\at1		// ureg 240
313 	l32i	\at1, \ptr, .Lxchal_ofs_+12
314 	wur.ae_bithead	\at1		// ureg 241
315 	l32i	\at1, \ptr, .Lxchal_ofs_+16
316 	wur.ae_ts_fts_bu_bp	\at1		// ureg 242
317 	l32i	\at1, \ptr, .Lxchal_ofs_+20
318 	wur.ae_cw_sd_no	\at1		// ureg 243
319 	l32i	\at1, \ptr, .Lxchal_ofs_+24
320 	wur.ae_cbegin0	\at1		// ureg 246
321 	l32i	\at1, \ptr, .Lxchal_ofs_+28
322 	wur.ae_cend0	\at1		// ureg 247
323 	l32i	\at1, \ptr, .Lxchal_ofs_+32
324 	wur.ae_cbegin1	\at1		// ureg 248
325 	l32i	\at1, \ptr, .Lxchal_ofs_+36
326 	wur.ae_cend1	\at1		// ureg 249
327 	ae_l64.i	aed0, \ptr, .Lxchal_ofs_+40
328 	ae_l64.i	aed1, \ptr, .Lxchal_ofs_+48
329 	ae_l64.i	aed2, \ptr, .Lxchal_ofs_+56
330 	addi	\ptr, \ptr, 64
331 	ae_l64.i	aed3, \ptr, .Lxchal_ofs_+0
332 	ae_l64.i	aed4, \ptr, .Lxchal_ofs_+8
333 	ae_l64.i	aed5, \ptr, .Lxchal_ofs_+16
334 	ae_l64.i	aed6, \ptr, .Lxchal_ofs_+24
335 	ae_l64.i	aed7, \ptr, .Lxchal_ofs_+32
336 	ae_l64.i	aed8, \ptr, .Lxchal_ofs_+40
337 	ae_l64.i	aed9, \ptr, .Lxchal_ofs_+48
338 	ae_l64.i	aed10, \ptr, .Lxchal_ofs_+56
339 	addi	\ptr, \ptr, 64
340 	ae_l64.i	aed11, \ptr, .Lxchal_ofs_+0
341 	ae_l64.i	aed12, \ptr, .Lxchal_ofs_+8
342 	ae_l64.i	aed13, \ptr, .Lxchal_ofs_+16
343 	ae_l64.i	aed14, \ptr, .Lxchal_ofs_+24
344 	ae_l64.i	aed15, \ptr, .Lxchal_ofs_+32
345 	addi	\ptr, \ptr, 40
346 	l8ui	\at1, \ptr, .Lxchal_ofs_+0
347 	ae_movea	aep0, \at1
348 	l8ui	\at1, \ptr, .Lxchal_ofs_+1
349 	ae_movea	aep1, \at1
350 	l8ui	\at1, \ptr, .Lxchal_ofs_+2
351 	ae_movea	aep2, \at1
352 	l8ui	\at1, \ptr, .Lxchal_ofs_+3
353 	ae_movea	aep3, \at1
354 	addi	\ptr, \ptr, 8
355 	ae_lalign64.i	u0, \ptr, .Lxchal_ofs_+0
356 	ae_lalign64.i	u1, \ptr, .Lxchal_ofs_+8
357 	ae_lalign64.i	u2, \ptr, .Lxchal_ofs_+16
358 	ae_lalign64.i	u3, \ptr, .Lxchal_ofs_+24
359 	.set	.Lxchal_pofs_, .Lxchal_pofs_ + 176
360 	.set	.Lxchal_ofs_, .Lxchal_ofs_ + 32
361 	.elseif ((XTHAL_SAS_TIE | XTHAL_SAS_NOCC | XTHAL_SAS_CALR) & ~(\alloc)) == 0
362 	xchal_sa_align	\ptr, 0, 0, 8, 8
363 	.set	.Lxchal_ofs_, .Lxchal_ofs_ + 208
364 	.endif
365     .endm	// xchal_cp1_load
366 
367 #define XCHAL_CP1_NUM_ATMPS	1
368 #define XCHAL_SA_NUM_ATMPS	1
369 
370 	/*  Empty macros for unconfigured coprocessors:  */
371 	.macro xchal_cp0_store	p a b c d continue=0 ofs=-1 select=-1 ; .endm
372 	.macro xchal_cp0_load	p a b c d continue=0 ofs=-1 select=-1 ; .endm
373 	.macro xchal_cp2_store	p a b c d continue=0 ofs=-1 select=-1 ; .endm
374 	.macro xchal_cp2_load	p a b c d continue=0 ofs=-1 select=-1 ; .endm
375 	.macro xchal_cp3_store	p a b c d continue=0 ofs=-1 select=-1 ; .endm
376 	.macro xchal_cp3_load	p a b c d continue=0 ofs=-1 select=-1 ; .endm
377 	.macro xchal_cp4_store	p a b c d continue=0 ofs=-1 select=-1 ; .endm
378 	.macro xchal_cp4_load	p a b c d continue=0 ofs=-1 select=-1 ; .endm
379 	.macro xchal_cp5_store	p a b c d continue=0 ofs=-1 select=-1 ; .endm
380 	.macro xchal_cp5_load	p a b c d continue=0 ofs=-1 select=-1 ; .endm
381 	.macro xchal_cp6_store	p a b c d continue=0 ofs=-1 select=-1 ; .endm
382 	.macro xchal_cp6_load	p a b c d continue=0 ofs=-1 select=-1 ; .endm
383 	.macro xchal_cp7_store	p a b c d continue=0 ofs=-1 select=-1 ; .endm
384 	.macro xchal_cp7_load	p a b c d continue=0 ofs=-1 select=-1 ; .endm
385 
386 #endif /*_XTENSA_CORE_TIE_ASM_H*/
387 
388