1eff35af9c0c83a24376a67ff88c65679c25c7a51Johannes Weiner/*
2eff35af9c0c83a24376a67ff88c65679c25c7a51Johannes Weiner * This header file contains assembly-language definitions (assembly
3eff35af9c0c83a24376a67ff88c65679c25c7a51Johannes Weiner * macros, etc.) for this specific Xtensa processor's TIE extensions
4eff35af9c0c83a24376a67ff88c65679c25c7a51Johannes Weiner * and options.  It is customized to this Xtensa processor configuration.
5eff35af9c0c83a24376a67ff88c65679c25c7a51Johannes Weiner *
6eff35af9c0c83a24376a67ff88c65679c25c7a51Johannes Weiner * This file is subject to the terms and conditions of the GNU General Public
7eff35af9c0c83a24376a67ff88c65679c25c7a51Johannes Weiner * License.  See the file "COPYING" in the main directory of this archive
8eff35af9c0c83a24376a67ff88c65679c25c7a51Johannes Weiner * for more details.
9eff35af9c0c83a24376a67ff88c65679c25c7a51Johannes Weiner *
10eff35af9c0c83a24376a67ff88c65679c25c7a51Johannes Weiner * Copyright (C) 1999-2008 Tensilica Inc.
11eff35af9c0c83a24376a67ff88c65679c25c7a51Johannes Weiner */
12eff35af9c0c83a24376a67ff88c65679c25c7a51Johannes Weiner
13eff35af9c0c83a24376a67ff88c65679c25c7a51Johannes Weiner#ifndef _XTENSA_CORE_TIE_ASM_H
14eff35af9c0c83a24376a67ff88c65679c25c7a51Johannes Weiner#define _XTENSA_CORE_TIE_ASM_H
15eff35af9c0c83a24376a67ff88c65679c25c7a51Johannes Weiner
16eff35af9c0c83a24376a67ff88c65679c25c7a51Johannes Weiner/*  Selection parameter values for save-area save/restore macros:  */
17eff35af9c0c83a24376a67ff88c65679c25c7a51Johannes Weiner/*  Option vs. TIE:  */
18eff35af9c0c83a24376a67ff88c65679c25c7a51Johannes Weiner#define XTHAL_SAS_TIE	0x0001	/* custom extension or coprocessor */
19eff35af9c0c83a24376a67ff88c65679c25c7a51Johannes Weiner#define XTHAL_SAS_OPT	0x0002	/* optional (and not a coprocessor) */
20eff35af9c0c83a24376a67ff88c65679c25c7a51Johannes Weiner/*  Whether used automatically by compiler:  */
21eff35af9c0c83a24376a67ff88c65679c25c7a51Johannes Weiner#define XTHAL_SAS_NOCC	0x0004	/* not used by compiler w/o special opts/code */
22eff35af9c0c83a24376a67ff88c65679c25c7a51Johannes Weiner#define XTHAL_SAS_CC	0x0008	/* used by compiler without special opts/code */
23eff35af9c0c83a24376a67ff88c65679c25c7a51Johannes Weiner/*  ABI handling across function calls:  */
24eff35af9c0c83a24376a67ff88c65679c25c7a51Johannes Weiner#define XTHAL_SAS_CALR	0x0010	/* caller-saved */
25eff35af9c0c83a24376a67ff88c65679c25c7a51Johannes Weiner#define XTHAL_SAS_CALE	0x0020	/* callee-saved */
26eff35af9c0c83a24376a67ff88c65679c25c7a51Johannes Weiner#define XTHAL_SAS_GLOB	0x0040	/* global across function calls (in thread) */
27eff35af9c0c83a24376a67ff88c65679c25c7a51Johannes Weiner/*  Misc  */
28eff35af9c0c83a24376a67ff88c65679c25c7a51Johannes Weiner#define XTHAL_SAS_ALL	0xFFFF	/* include all default NCP contents */
29eff35af9c0c83a24376a67ff88c65679c25c7a51Johannes Weiner
30eff35af9c0c83a24376a67ff88c65679c25c7a51Johannes Weiner
31eff35af9c0c83a24376a67ff88c65679c25c7a51Johannes Weiner
32eff35af9c0c83a24376a67ff88c65679c25c7a51Johannes Weiner/* Macro to save all non-coprocessor (extra) custom TIE and optional state
33eff35af9c0c83a24376a67ff88c65679c25c7a51Johannes Weiner * (not including zero-overhead loop registers).
34eff35af9c0c83a24376a67ff88c65679c25c7a51Johannes Weiner * Save area ptr (clobbered):  ptr  (16 byte aligned)
35eff35af9c0c83a24376a67ff88c65679c25c7a51Johannes Weiner * Scratch regs  (clobbered):  at1..at4  (only first XCHAL_NCP_NUM_ATMPS needed)
36eff35af9c0c83a24376a67ff88c65679c25c7a51Johannes Weiner */
37eff35af9c0c83a24376a67ff88c65679c25c7a51Johannes Weiner	.macro xchal_ncp_store  ptr at1 at2 at3 at4  continue=0 ofs=-1 select=XTHAL_SAS_ALL
38eff35af9c0c83a24376a67ff88c65679c25c7a51Johannes Weiner	xchal_sa_start	\continue, \ofs
39eff35af9c0c83a24376a67ff88c65679c25c7a51Johannes Weiner	.ifeq (XTHAL_SAS_OPT | XTHAL_SAS_NOCC | XTHAL_SAS_CALR) & ~\select
40eff35af9c0c83a24376a67ff88c65679c25c7a51Johannes Weiner	xchal_sa_align	\ptr, 0, 1024-4, 4, 4
41eff35af9c0c83a24376a67ff88c65679c25c7a51Johannes Weiner	rsr	\at1, BR		// boolean option
42eff35af9c0c83a24376a67ff88c65679c25c7a51Johannes Weiner	s32i	\at1, \ptr, .Lxchal_ofs_ + 0
43eff35af9c0c83a24376a67ff88c65679c25c7a51Johannes Weiner	.set	.Lxchal_ofs_, .Lxchal_ofs_ + 4
44eff35af9c0c83a24376a67ff88c65679c25c7a51Johannes Weiner	.endif
45eff35af9c0c83a24376a67ff88c65679c25c7a51Johannes Weiner	.endm	// xchal_ncp_store
46eff35af9c0c83a24376a67ff88c65679c25c7a51Johannes Weiner
47eff35af9c0c83a24376a67ff88c65679c25c7a51Johannes Weiner/* Macro to save all non-coprocessor (extra) custom TIE and optional state
48eff35af9c0c83a24376a67ff88c65679c25c7a51Johannes Weiner * (not including zero-overhead loop registers).
49eff35af9c0c83a24376a67ff88c65679c25c7a51Johannes Weiner * Save area ptr (clobbered):  ptr  (16 byte aligned)
50eff35af9c0c83a24376a67ff88c65679c25c7a51Johannes Weiner * Scratch regs  (clobbered):  at1..at4  (only first XCHAL_NCP_NUM_ATMPS needed)
51eff35af9c0c83a24376a67ff88c65679c25c7a51Johannes Weiner */
52eff35af9c0c83a24376a67ff88c65679c25c7a51Johannes Weiner	.macro xchal_ncp_load  ptr at1 at2 at3 at4  continue=0 ofs=-1 select=XTHAL_SAS_ALL
53eff35af9c0c83a24376a67ff88c65679c25c7a51Johannes Weiner	xchal_sa_start	\continue, \ofs
54eff35af9c0c83a24376a67ff88c65679c25c7a51Johannes Weiner	.ifeq (XTHAL_SAS_OPT | XTHAL_SAS_NOCC | XTHAL_SAS_CALR) & ~\select
55eff35af9c0c83a24376a67ff88c65679c25c7a51Johannes Weiner	xchal_sa_align	\ptr, 0, 1024-4, 4, 4
56eff35af9c0c83a24376a67ff88c65679c25c7a51Johannes Weiner	l32i	\at1, \ptr, .Lxchal_ofs_ + 0
57eff35af9c0c83a24376a67ff88c65679c25c7a51Johannes Weiner	wsr	\at1, BR		// boolean option
58eff35af9c0c83a24376a67ff88c65679c25c7a51Johannes Weiner	.set	.Lxchal_ofs_, .Lxchal_ofs_ + 4
59eff35af9c0c83a24376a67ff88c65679c25c7a51Johannes Weiner	.endif
60eff35af9c0c83a24376a67ff88c65679c25c7a51Johannes Weiner	.endm	// xchal_ncp_load
61eff35af9c0c83a24376a67ff88c65679c25c7a51Johannes Weiner
62eff35af9c0c83a24376a67ff88c65679c25c7a51Johannes Weiner
63eff35af9c0c83a24376a67ff88c65679c25c7a51Johannes Weiner
64eff35af9c0c83a24376a67ff88c65679c25c7a51Johannes Weiner#define XCHAL_NCP_NUM_ATMPS	1
65eff35af9c0c83a24376a67ff88c65679c25c7a51Johannes Weiner
66eff35af9c0c83a24376a67ff88c65679c25c7a51Johannes Weiner
67eff35af9c0c83a24376a67ff88c65679c25c7a51Johannes Weiner
68eff35af9c0c83a24376a67ff88c65679c25c7a51Johannes Weiner/* Macro to save the state of TIE coprocessor FPU.
69eff35af9c0c83a24376a67ff88c65679c25c7a51Johannes Weiner * Save area ptr (clobbered):  ptr  (16 byte aligned)
70eff35af9c0c83a24376a67ff88c65679c25c7a51Johannes Weiner * Scratch regs  (clobbered):  at1..at4  (only first XCHAL_CP0_NUM_ATMPS needed)
71eff35af9c0c83a24376a67ff88c65679c25c7a51Johannes Weiner */
72eff35af9c0c83a24376a67ff88c65679c25c7a51Johannes Weiner#define xchal_cp_FPU_store	xchal_cp0_store
73eff35af9c0c83a24376a67ff88c65679c25c7a51Johannes Weiner/* #define xchal_cp_FPU_store_a2	xchal_cp0_store a2 a3 a4 a5 a6 */
74eff35af9c0c83a24376a67ff88c65679c25c7a51Johannes Weiner	.macro	xchal_cp0_store  ptr at1 at2 at3 at4  continue=0 ofs=-1 select=XTHAL_SAS_ALL
75eff35af9c0c83a24376a67ff88c65679c25c7a51Johannes Weiner	xchal_sa_start \continue, \ofs
76eff35af9c0c83a24376a67ff88c65679c25c7a51Johannes Weiner	.ifeq (XTHAL_SAS_TIE | XTHAL_SAS_NOCC | XTHAL_SAS_CALR) & ~\select
77eff35af9c0c83a24376a67ff88c65679c25c7a51Johannes Weiner	xchal_sa_align	\ptr, 0, 0, 1, 16
78eff35af9c0c83a24376a67ff88c65679c25c7a51Johannes Weiner	rur232	\at1		// FCR
79eff35af9c0c83a24376a67ff88c65679c25c7a51Johannes Weiner	s32i	\at1, \ptr, 0
80eff35af9c0c83a24376a67ff88c65679c25c7a51Johannes Weiner	rur233	\at1		// FSR
81eff35af9c0c83a24376a67ff88c65679c25c7a51Johannes Weiner	s32i	\at1, \ptr, 4
82eff35af9c0c83a24376a67ff88c65679c25c7a51Johannes Weiner	SSI f0, \ptr,  8
83eff35af9c0c83a24376a67ff88c65679c25c7a51Johannes Weiner	SSI f1, \ptr,  12
84eff35af9c0c83a24376a67ff88c65679c25c7a51Johannes Weiner	SSI f2, \ptr,  16
85eff35af9c0c83a24376a67ff88c65679c25c7a51Johannes Weiner	SSI f3, \ptr,  20
86eff35af9c0c83a24376a67ff88c65679c25c7a51Johannes Weiner	SSI f4, \ptr,  24
87eff35af9c0c83a24376a67ff88c65679c25c7a51Johannes Weiner	SSI f5, \ptr,  28
88eff35af9c0c83a24376a67ff88c65679c25c7a51Johannes Weiner	SSI f6, \ptr,  32
89eff35af9c0c83a24376a67ff88c65679c25c7a51Johannes Weiner	SSI f7, \ptr,  36
90eff35af9c0c83a24376a67ff88c65679c25c7a51Johannes Weiner	SSI f8, \ptr,  40
91eff35af9c0c83a24376a67ff88c65679c25c7a51Johannes Weiner	SSI f9, \ptr,  44
92eff35af9c0c83a24376a67ff88c65679c25c7a51Johannes Weiner	SSI f10, \ptr,  48
93eff35af9c0c83a24376a67ff88c65679c25c7a51Johannes Weiner	SSI f11, \ptr,  52
94eff35af9c0c83a24376a67ff88c65679c25c7a51Johannes Weiner	SSI f12, \ptr,  56
95eff35af9c0c83a24376a67ff88c65679c25c7a51Johannes Weiner	SSI f13, \ptr,  60
96eff35af9c0c83a24376a67ff88c65679c25c7a51Johannes Weiner	SSI f14, \ptr,  64
97eff35af9c0c83a24376a67ff88c65679c25c7a51Johannes Weiner	SSI f15, \ptr,  68
98eff35af9c0c83a24376a67ff88c65679c25c7a51Johannes Weiner	.set	.Lxchal_ofs_, .Lxchal_ofs_ + 72
99eff35af9c0c83a24376a67ff88c65679c25c7a51Johannes Weiner	.endif
100eff35af9c0c83a24376a67ff88c65679c25c7a51Johannes Weiner	.endm	// xchal_cp0_store
101eff35af9c0c83a24376a67ff88c65679c25c7a51Johannes Weiner
102eff35af9c0c83a24376a67ff88c65679c25c7a51Johannes Weiner/* Macro to restore the state of TIE coprocessor FPU.
103eff35af9c0c83a24376a67ff88c65679c25c7a51Johannes Weiner * Save area ptr (clobbered):  ptr  (16 byte aligned)
104eff35af9c0c83a24376a67ff88c65679c25c7a51Johannes Weiner * Scratch regs  (clobbered):  at1..at4  (only first XCHAL_CP0_NUM_ATMPS needed)
105eff35af9c0c83a24376a67ff88c65679c25c7a51Johannes Weiner */
106eff35af9c0c83a24376a67ff88c65679c25c7a51Johannes Weiner#define xchal_cp_FPU_load	xchal_cp0_load
107eff35af9c0c83a24376a67ff88c65679c25c7a51Johannes Weiner/* #define xchal_cp_FPU_load_a2	xchal_cp0_load a2 a3 a4 a5 a6 */
108eff35af9c0c83a24376a67ff88c65679c25c7a51Johannes Weiner	.macro	xchal_cp0_load  ptr at1 at2 at3 at4  continue=0 ofs=-1 select=XTHAL_SAS_ALL
109eff35af9c0c83a24376a67ff88c65679c25c7a51Johannes Weiner	xchal_sa_start \continue, \ofs
110eff35af9c0c83a24376a67ff88c65679c25c7a51Johannes Weiner	.ifeq (XTHAL_SAS_TIE | XTHAL_SAS_NOCC | XTHAL_SAS_CALR) & ~\select
111eff35af9c0c83a24376a67ff88c65679c25c7a51Johannes Weiner	xchal_sa_align	\ptr, 0, 0, 1, 16
112eff35af9c0c83a24376a67ff88c65679c25c7a51Johannes Weiner	l32i	\at1, \ptr, 0
113eff35af9c0c83a24376a67ff88c65679c25c7a51Johannes Weiner	wur232	\at1		// FCR
114eff35af9c0c83a24376a67ff88c65679c25c7a51Johannes Weiner	l32i	\at1, \ptr, 4
115eff35af9c0c83a24376a67ff88c65679c25c7a51Johannes Weiner	wur233	\at1		// FSR
116eff35af9c0c83a24376a67ff88c65679c25c7a51Johannes Weiner	LSI f0, \ptr,  8
117eff35af9c0c83a24376a67ff88c65679c25c7a51Johannes Weiner	LSI f1, \ptr,  12
118eff35af9c0c83a24376a67ff88c65679c25c7a51Johannes Weiner	LSI f2, \ptr,  16
119eff35af9c0c83a24376a67ff88c65679c25c7a51Johannes Weiner	LSI f3, \ptr,  20
120eff35af9c0c83a24376a67ff88c65679c25c7a51Johannes Weiner	LSI f4, \ptr,  24
121eff35af9c0c83a24376a67ff88c65679c25c7a51Johannes Weiner	LSI f5, \ptr,  28
122eff35af9c0c83a24376a67ff88c65679c25c7a51Johannes Weiner	LSI f6, \ptr,  32
123eff35af9c0c83a24376a67ff88c65679c25c7a51Johannes Weiner	LSI f7, \ptr,  36
124eff35af9c0c83a24376a67ff88c65679c25c7a51Johannes Weiner	LSI f8, \ptr,  40
125eff35af9c0c83a24376a67ff88c65679c25c7a51Johannes Weiner	LSI f9, \ptr,  44
126eff35af9c0c83a24376a67ff88c65679c25c7a51Johannes Weiner	LSI f10, \ptr,  48
127eff35af9c0c83a24376a67ff88c65679c25c7a51Johannes Weiner	LSI f11, \ptr,  52
128eff35af9c0c83a24376a67ff88c65679c25c7a51Johannes Weiner	LSI f12, \ptr,  56
129eff35af9c0c83a24376a67ff88c65679c25c7a51Johannes Weiner	LSI f13, \ptr,  60
130eff35af9c0c83a24376a67ff88c65679c25c7a51Johannes Weiner	LSI f14, \ptr,  64
131eff35af9c0c83a24376a67ff88c65679c25c7a51Johannes Weiner	LSI f15, \ptr,  68
132eff35af9c0c83a24376a67ff88c65679c25c7a51Johannes Weiner	.set	.Lxchal_ofs_, .Lxchal_ofs_ + 72
133eff35af9c0c83a24376a67ff88c65679c25c7a51Johannes Weiner	.endif
134eff35af9c0c83a24376a67ff88c65679c25c7a51Johannes Weiner	.endm	// xchal_cp0_load
135eff35af9c0c83a24376a67ff88c65679c25c7a51Johannes Weiner
136eff35af9c0c83a24376a67ff88c65679c25c7a51Johannes Weiner#define XCHAL_CP0_NUM_ATMPS	1
137eff35af9c0c83a24376a67ff88c65679c25c7a51Johannes Weiner
138eff35af9c0c83a24376a67ff88c65679c25c7a51Johannes Weiner/* Macro to save the state of TIE coprocessor XAD.
139eff35af9c0c83a24376a67ff88c65679c25c7a51Johannes Weiner * Save area ptr (clobbered):  ptr  (16 byte aligned)
140eff35af9c0c83a24376a67ff88c65679c25c7a51Johannes Weiner * Scratch regs  (clobbered):  at1..at4  (only first XCHAL_CP6_NUM_ATMPS needed)
141eff35af9c0c83a24376a67ff88c65679c25c7a51Johannes Weiner */
142eff35af9c0c83a24376a67ff88c65679c25c7a51Johannes Weiner#define xchal_cp_XAD_store	xchal_cp6_store
143eff35af9c0c83a24376a67ff88c65679c25c7a51Johannes Weiner/* #define xchal_cp_XAD_store_a2	xchal_cp6_store a2 a3 a4 a5 a6 */
144eff35af9c0c83a24376a67ff88c65679c25c7a51Johannes Weiner	.macro	xchal_cp6_store  ptr at1 at2 at3 at4  continue=0 ofs=-1 select=XTHAL_SAS_ALL
145eff35af9c0c83a24376a67ff88c65679c25c7a51Johannes Weiner	xchal_sa_start \continue, \ofs
146eff35af9c0c83a24376a67ff88c65679c25c7a51Johannes Weiner	.ifeq (XTHAL_SAS_TIE | XTHAL_SAS_NOCC | XTHAL_SAS_CALR) & ~\select
147eff35af9c0c83a24376a67ff88c65679c25c7a51Johannes Weiner	xchal_sa_align	\ptr, 0, 0, 1, 16
148eff35af9c0c83a24376a67ff88c65679c25c7a51Johannes Weiner	rur0	\at1		// LDCBHI
149eff35af9c0c83a24376a67ff88c65679c25c7a51Johannes Weiner	s32i	\at1, \ptr, 0
150eff35af9c0c83a24376a67ff88c65679c25c7a51Johannes Weiner	rur1	\at1		// LDCBLO
151eff35af9c0c83a24376a67ff88c65679c25c7a51Johannes Weiner	s32i	\at1, \ptr, 4
152eff35af9c0c83a24376a67ff88c65679c25c7a51Johannes Weiner	rur2	\at1		// STCBHI
153eff35af9c0c83a24376a67ff88c65679c25c7a51Johannes Weiner	s32i	\at1, \ptr, 8
154eff35af9c0c83a24376a67ff88c65679c25c7a51Johannes Weiner	rur3	\at1		// STCBLO
155eff35af9c0c83a24376a67ff88c65679c25c7a51Johannes Weiner	s32i	\at1, \ptr, 12
156eff35af9c0c83a24376a67ff88c65679c25c7a51Johannes Weiner	rur8	\at1		// LDBRBASE
157eff35af9c0c83a24376a67ff88c65679c25c7a51Johannes Weiner	s32i	\at1, \ptr, 16
158eff35af9c0c83a24376a67ff88c65679c25c7a51Johannes Weiner	rur9	\at1		// LDBROFF
159eff35af9c0c83a24376a67ff88c65679c25c7a51Johannes Weiner	s32i	\at1, \ptr, 20
160eff35af9c0c83a24376a67ff88c65679c25c7a51Johannes Weiner	rur10	\at1		// LDBRINC
161eff35af9c0c83a24376a67ff88c65679c25c7a51Johannes Weiner	s32i	\at1, \ptr, 24
162eff35af9c0c83a24376a67ff88c65679c25c7a51Johannes Weiner	rur11	\at1		// STBRBASE
163eff35af9c0c83a24376a67ff88c65679c25c7a51Johannes Weiner	s32i	\at1, \ptr, 28
164eff35af9c0c83a24376a67ff88c65679c25c7a51Johannes Weiner	rur12	\at1		// STBROFF
165eff35af9c0c83a24376a67ff88c65679c25c7a51Johannes Weiner	s32i	\at1, \ptr, 32
166eff35af9c0c83a24376a67ff88c65679c25c7a51Johannes Weiner	rur13	\at1		// STBRINC
167eff35af9c0c83a24376a67ff88c65679c25c7a51Johannes Weiner	s32i	\at1, \ptr, 36
168eff35af9c0c83a24376a67ff88c65679c25c7a51Johannes Weiner	rur24	\at1		// SCRATCH0
169eff35af9c0c83a24376a67ff88c65679c25c7a51Johannes Weiner	s32i	\at1, \ptr, 40
170eff35af9c0c83a24376a67ff88c65679c25c7a51Johannes Weiner	rur25	\at1		// SCRATCH1
171eff35af9c0c83a24376a67ff88c65679c25c7a51Johannes Weiner	s32i	\at1, \ptr, 44
172eff35af9c0c83a24376a67ff88c65679c25c7a51Johannes Weiner	rur26	\at1		// SCRATCH2
173eff35af9c0c83a24376a67ff88c65679c25c7a51Johannes Weiner	s32i	\at1, \ptr, 48
174eff35af9c0c83a24376a67ff88c65679c25c7a51Johannes Weiner	rur27	\at1		// SCRATCH3
175eff35af9c0c83a24376a67ff88c65679c25c7a51Johannes Weiner	s32i	\at1, \ptr, 52
176eff35af9c0c83a24376a67ff88c65679c25c7a51Johannes Weiner	WRAS128I wra0, \ptr,  64
177eff35af9c0c83a24376a67ff88c65679c25c7a51Johannes Weiner	WRAS128I wra1, \ptr,  80
178eff35af9c0c83a24376a67ff88c65679c25c7a51Johannes Weiner	WRAS128I wra2, \ptr,  96
179eff35af9c0c83a24376a67ff88c65679c25c7a51Johannes Weiner	WRAS128I wra3, \ptr,  112
180eff35af9c0c83a24376a67ff88c65679c25c7a51Johannes Weiner	WRAS128I wra4, \ptr,  128
181eff35af9c0c83a24376a67ff88c65679c25c7a51Johannes Weiner	WRAS128I wra5, \ptr,  144
182eff35af9c0c83a24376a67ff88c65679c25c7a51Johannes Weiner	WRAS128I wra6, \ptr,  160
183eff35af9c0c83a24376a67ff88c65679c25c7a51Johannes Weiner	WRAS128I wra7, \ptr,  176
184eff35af9c0c83a24376a67ff88c65679c25c7a51Johannes Weiner	WRAS128I wra8, \ptr,  192
185eff35af9c0c83a24376a67ff88c65679c25c7a51Johannes Weiner	WRAS128I wra9, \ptr,  208
186eff35af9c0c83a24376a67ff88c65679c25c7a51Johannes Weiner	WRAS128I wra10, \ptr,  224
187eff35af9c0c83a24376a67ff88c65679c25c7a51Johannes Weiner	WRAS128I wra11, \ptr,  240
188eff35af9c0c83a24376a67ff88c65679c25c7a51Johannes Weiner	WRAS128I wra12, \ptr,  256
189eff35af9c0c83a24376a67ff88c65679c25c7a51Johannes Weiner	WRAS128I wra13, \ptr,  272
190eff35af9c0c83a24376a67ff88c65679c25c7a51Johannes Weiner	WRAS128I wra14, \ptr,  288
191eff35af9c0c83a24376a67ff88c65679c25c7a51Johannes Weiner	WRAS128I wra15, \ptr,  304
192eff35af9c0c83a24376a67ff88c65679c25c7a51Johannes Weiner	WRBS128I wrb0, \ptr,  320
193eff35af9c0c83a24376a67ff88c65679c25c7a51Johannes Weiner	WRBS128I wrb1, \ptr,  336
194eff35af9c0c83a24376a67ff88c65679c25c7a51Johannes Weiner	WRBS128I wrb2, \ptr,  352
195eff35af9c0c83a24376a67ff88c65679c25c7a51Johannes Weiner	WRBS128I wrb3, \ptr,  368
196eff35af9c0c83a24376a67ff88c65679c25c7a51Johannes Weiner	WRBS128I wrb4, \ptr,  384
197eff35af9c0c83a24376a67ff88c65679c25c7a51Johannes Weiner	WRBS128I wrb5, \ptr,  400
198eff35af9c0c83a24376a67ff88c65679c25c7a51Johannes Weiner	WRBS128I wrb6, \ptr,  416
199eff35af9c0c83a24376a67ff88c65679c25c7a51Johannes Weiner	WRBS128I wrb7, \ptr,  432
200eff35af9c0c83a24376a67ff88c65679c25c7a51Johannes Weiner	WRBS128I wrb8, \ptr,  448
201eff35af9c0c83a24376a67ff88c65679c25c7a51Johannes Weiner	WRBS128I wrb9, \ptr,  464
202eff35af9c0c83a24376a67ff88c65679c25c7a51Johannes Weiner	WRBS128I wrb10, \ptr,  480
203eff35af9c0c83a24376a67ff88c65679c25c7a51Johannes Weiner	WRBS128I wrb11, \ptr,  496
204eff35af9c0c83a24376a67ff88c65679c25c7a51Johannes Weiner	WRBS128I wrb12, \ptr,  512
205eff35af9c0c83a24376a67ff88c65679c25c7a51Johannes Weiner	WRBS128I wrb13, \ptr,  528
206eff35af9c0c83a24376a67ff88c65679c25c7a51Johannes Weiner	WRBS128I wrb14, \ptr,  544
207eff35af9c0c83a24376a67ff88c65679c25c7a51Johannes Weiner	WRBS128I wrb15, \ptr,  560
208eff35af9c0c83a24376a67ff88c65679c25c7a51Johannes Weiner	.set	.Lxchal_ofs_, .Lxchal_ofs_ + 576
209eff35af9c0c83a24376a67ff88c65679c25c7a51Johannes Weiner	.endif
210eff35af9c0c83a24376a67ff88c65679c25c7a51Johannes Weiner	.endm	// xchal_cp6_store
211eff35af9c0c83a24376a67ff88c65679c25c7a51Johannes Weiner
212eff35af9c0c83a24376a67ff88c65679c25c7a51Johannes Weiner/* Macro to restore the state of TIE coprocessor XAD.
213eff35af9c0c83a24376a67ff88c65679c25c7a51Johannes Weiner * Save area ptr (clobbered):  ptr  (16 byte aligned)
214eff35af9c0c83a24376a67ff88c65679c25c7a51Johannes Weiner * Scratch regs  (clobbered):  at1..at4  (only first XCHAL_CP6_NUM_ATMPS needed)
215eff35af9c0c83a24376a67ff88c65679c25c7a51Johannes Weiner */
216eff35af9c0c83a24376a67ff88c65679c25c7a51Johannes Weiner#define xchal_cp_XAD_load	xchal_cp6_load
217eff35af9c0c83a24376a67ff88c65679c25c7a51Johannes Weiner/* #define xchal_cp_XAD_load_a2	xchal_cp6_load a2 a3 a4 a5 a6 */
218eff35af9c0c83a24376a67ff88c65679c25c7a51Johannes Weiner	.macro	xchal_cp6_load  ptr at1 at2 at3 at4  continue=0 ofs=-1 select=XTHAL_SAS_ALL
219eff35af9c0c83a24376a67ff88c65679c25c7a51Johannes Weiner	xchal_sa_start \continue, \ofs
220eff35af9c0c83a24376a67ff88c65679c25c7a51Johannes Weiner	.ifeq (XTHAL_SAS_TIE | XTHAL_SAS_NOCC | XTHAL_SAS_CALR) & ~\select
221eff35af9c0c83a24376a67ff88c65679c25c7a51Johannes Weiner	xchal_sa_align	\ptr, 0, 0, 1, 16
222eff35af9c0c83a24376a67ff88c65679c25c7a51Johannes Weiner	l32i	\at1, \ptr, 0
223eff35af9c0c83a24376a67ff88c65679c25c7a51Johannes Weiner	wur0	\at1		// LDCBHI
224eff35af9c0c83a24376a67ff88c65679c25c7a51Johannes Weiner	l32i	\at1, \ptr, 4
225eff35af9c0c83a24376a67ff88c65679c25c7a51Johannes Weiner	wur1	\at1		// LDCBLO
226eff35af9c0c83a24376a67ff88c65679c25c7a51Johannes Weiner	l32i	\at1, \ptr, 8
227eff35af9c0c83a24376a67ff88c65679c25c7a51Johannes Weiner	wur2	\at1		// STCBHI
228eff35af9c0c83a24376a67ff88c65679c25c7a51Johannes Weiner	l32i	\at1, \ptr, 12
229eff35af9c0c83a24376a67ff88c65679c25c7a51Johannes Weiner	wur3	\at1		// STCBLO
230eff35af9c0c83a24376a67ff88c65679c25c7a51Johannes Weiner	l32i	\at1, \ptr, 16
231eff35af9c0c83a24376a67ff88c65679c25c7a51Johannes Weiner	wur8	\at1		// LDBRBASE
232eff35af9c0c83a24376a67ff88c65679c25c7a51Johannes Weiner	l32i	\at1, \ptr, 20
233eff35af9c0c83a24376a67ff88c65679c25c7a51Johannes Weiner	wur9	\at1		// LDBROFF
234eff35af9c0c83a24376a67ff88c65679c25c7a51Johannes Weiner	l32i	\at1, \ptr, 24
235eff35af9c0c83a24376a67ff88c65679c25c7a51Johannes Weiner	wur10	\at1		// LDBRINC
236eff35af9c0c83a24376a67ff88c65679c25c7a51Johannes Weiner	l32i	\at1, \ptr, 28
237eff35af9c0c83a24376a67ff88c65679c25c7a51Johannes Weiner	wur11	\at1		// STBRBASE
238eff35af9c0c83a24376a67ff88c65679c25c7a51Johannes Weiner	l32i	\at1, \ptr, 32
239eff35af9c0c83a24376a67ff88c65679c25c7a51Johannes Weiner	wur12	\at1		// STBROFF
240eff35af9c0c83a24376a67ff88c65679c25c7a51Johannes Weiner	l32i	\at1, \ptr, 36
241eff35af9c0c83a24376a67ff88c65679c25c7a51Johannes Weiner	wur13	\at1		// STBRINC
242eff35af9c0c83a24376a67ff88c65679c25c7a51Johannes Weiner	l32i	\at1, \ptr, 40
243eff35af9c0c83a24376a67ff88c65679c25c7a51Johannes Weiner	wur24	\at1		// SCRATCH0
244eff35af9c0c83a24376a67ff88c65679c25c7a51Johannes Weiner	l32i	\at1, \ptr, 44
245eff35af9c0c83a24376a67ff88c65679c25c7a51Johannes Weiner	wur25	\at1		// SCRATCH1
246eff35af9c0c83a24376a67ff88c65679c25c7a51Johannes Weiner	l32i	\at1, \ptr, 48
247eff35af9c0c83a24376a67ff88c65679c25c7a51Johannes Weiner	wur26	\at1		// SCRATCH2
248eff35af9c0c83a24376a67ff88c65679c25c7a51Johannes Weiner	l32i	\at1, \ptr, 52
249eff35af9c0c83a24376a67ff88c65679c25c7a51Johannes Weiner	wur27	\at1		// SCRATCH3
250eff35af9c0c83a24376a67ff88c65679c25c7a51Johannes Weiner	WRBL128I wrb0, \ptr,  320
251eff35af9c0c83a24376a67ff88c65679c25c7a51Johannes Weiner	WRBL128I wrb1, \ptr,  336
252eff35af9c0c83a24376a67ff88c65679c25c7a51Johannes Weiner	WRBL128I wrb2, \ptr,  352
253eff35af9c0c83a24376a67ff88c65679c25c7a51Johannes Weiner	WRBL128I wrb3, \ptr,  368
254eff35af9c0c83a24376a67ff88c65679c25c7a51Johannes Weiner	WRBL128I wrb4, \ptr,  384
255eff35af9c0c83a24376a67ff88c65679c25c7a51Johannes Weiner	WRBL128I wrb5, \ptr,  400
256eff35af9c0c83a24376a67ff88c65679c25c7a51Johannes Weiner	WRBL128I wrb6, \ptr,  416
257eff35af9c0c83a24376a67ff88c65679c25c7a51Johannes Weiner	WRBL128I wrb7, \ptr,  432
258eff35af9c0c83a24376a67ff88c65679c25c7a51Johannes Weiner	WRBL128I wrb8, \ptr,  448
259eff35af9c0c83a24376a67ff88c65679c25c7a51Johannes Weiner	WRBL128I wrb9, \ptr,  464
260eff35af9c0c83a24376a67ff88c65679c25c7a51Johannes Weiner	WRBL128I wrb10, \ptr,  480
261eff35af9c0c83a24376a67ff88c65679c25c7a51Johannes Weiner	WRBL128I wrb11, \ptr,  496
262eff35af9c0c83a24376a67ff88c65679c25c7a51Johannes Weiner	WRBL128I wrb12, \ptr,  512
263eff35af9c0c83a24376a67ff88c65679c25c7a51Johannes Weiner	WRBL128I wrb13, \ptr,  528
264eff35af9c0c83a24376a67ff88c65679c25c7a51Johannes Weiner	WRBL128I wrb14, \ptr,  544
265eff35af9c0c83a24376a67ff88c65679c25c7a51Johannes Weiner	WRBL128I wrb15, \ptr,  560
266eff35af9c0c83a24376a67ff88c65679c25c7a51Johannes Weiner	WRAL128I wra0, \ptr,  64
267eff35af9c0c83a24376a67ff88c65679c25c7a51Johannes Weiner	WRAL128I wra1, \ptr,  80
268eff35af9c0c83a24376a67ff88c65679c25c7a51Johannes Weiner	WRAL128I wra2, \ptr,  96
269eff35af9c0c83a24376a67ff88c65679c25c7a51Johannes Weiner	WRAL128I wra3, \ptr,  112
270eff35af9c0c83a24376a67ff88c65679c25c7a51Johannes Weiner	WRAL128I wra4, \ptr,  128
271eff35af9c0c83a24376a67ff88c65679c25c7a51Johannes Weiner	WRAL128I wra5, \ptr,  144
272eff35af9c0c83a24376a67ff88c65679c25c7a51Johannes Weiner	WRAL128I wra6, \ptr,  160
273eff35af9c0c83a24376a67ff88c65679c25c7a51Johannes Weiner	WRAL128I wra7, \ptr,  176
274eff35af9c0c83a24376a67ff88c65679c25c7a51Johannes Weiner	WRAL128I wra8, \ptr,  192
275eff35af9c0c83a24376a67ff88c65679c25c7a51Johannes Weiner	WRAL128I wra9, \ptr,  208
276eff35af9c0c83a24376a67ff88c65679c25c7a51Johannes Weiner	WRAL128I wra10, \ptr,  224
277eff35af9c0c83a24376a67ff88c65679c25c7a51Johannes Weiner	WRAL128I wra11, \ptr,  240
278eff35af9c0c83a24376a67ff88c65679c25c7a51Johannes Weiner	WRAL128I wra12, \ptr,  256
279eff35af9c0c83a24376a67ff88c65679c25c7a51Johannes Weiner	WRAL128I wra13, \ptr,  272
280eff35af9c0c83a24376a67ff88c65679c25c7a51Johannes Weiner	WRAL128I wra14, \ptr,  288
281eff35af9c0c83a24376a67ff88c65679c25c7a51Johannes Weiner	WRAL128I wra15, \ptr,  304
282eff35af9c0c83a24376a67ff88c65679c25c7a51Johannes Weiner	.set	.Lxchal_ofs_, .Lxchal_ofs_ + 576
283eff35af9c0c83a24376a67ff88c65679c25c7a51Johannes Weiner	.endif
284eff35af9c0c83a24376a67ff88c65679c25c7a51Johannes Weiner	.endm	// xchal_cp6_load
285eff35af9c0c83a24376a67ff88c65679c25c7a51Johannes Weiner
286eff35af9c0c83a24376a67ff88c65679c25c7a51Johannes Weiner#define XCHAL_CP6_NUM_ATMPS	1
287eff35af9c0c83a24376a67ff88c65679c25c7a51Johannes Weiner#define XCHAL_SA_NUM_ATMPS	1
288eff35af9c0c83a24376a67ff88c65679c25c7a51Johannes Weiner
289eff35af9c0c83a24376a67ff88c65679c25c7a51Johannes Weiner	/*  Empty macros for unconfigured coprocessors:  */
290eff35af9c0c83a24376a67ff88c65679c25c7a51Johannes Weiner	.macro xchal_cp1_store	p a b c d continue=0 ofs=-1 select=-1 ; .endm
291eff35af9c0c83a24376a67ff88c65679c25c7a51Johannes Weiner	.macro xchal_cp1_load	p a b c d continue=0 ofs=-1 select=-1 ; .endm
292eff35af9c0c83a24376a67ff88c65679c25c7a51Johannes Weiner	.macro xchal_cp2_store	p a b c d continue=0 ofs=-1 select=-1 ; .endm
293eff35af9c0c83a24376a67ff88c65679c25c7a51Johannes Weiner	.macro xchal_cp2_load	p a b c d continue=0 ofs=-1 select=-1 ; .endm
294eff35af9c0c83a24376a67ff88c65679c25c7a51Johannes Weiner	.macro xchal_cp3_store	p a b c d continue=0 ofs=-1 select=-1 ; .endm
295eff35af9c0c83a24376a67ff88c65679c25c7a51Johannes Weiner	.macro xchal_cp3_load	p a b c d continue=0 ofs=-1 select=-1 ; .endm
296eff35af9c0c83a24376a67ff88c65679c25c7a51Johannes Weiner	.macro xchal_cp4_store	p a b c d continue=0 ofs=-1 select=-1 ; .endm
297eff35af9c0c83a24376a67ff88c65679c25c7a51Johannes Weiner	.macro xchal_cp4_load	p a b c d continue=0 ofs=-1 select=-1 ; .endm
298eff35af9c0c83a24376a67ff88c65679c25c7a51Johannes Weiner	.macro xchal_cp5_store	p a b c d continue=0 ofs=-1 select=-1 ; .endm
299eff35af9c0c83a24376a67ff88c65679c25c7a51Johannes Weiner	.macro xchal_cp5_load	p a b c d continue=0 ofs=-1 select=-1 ; .endm
300eff35af9c0c83a24376a67ff88c65679c25c7a51Johannes Weiner	.macro xchal_cp7_store	p a b c d continue=0 ofs=-1 select=-1 ; .endm
301eff35af9c0c83a24376a67ff88c65679c25c7a51Johannes Weiner	.macro xchal_cp7_load	p a b c d continue=0 ofs=-1 select=-1 ; .endm
302eff35af9c0c83a24376a67ff88c65679c25c7a51Johannes Weiner
303eff35af9c0c83a24376a67ff88c65679c25c7a51Johannes Weiner#endif /*_XTENSA_CORE_TIE_ASM_H*/
304eff35af9c0c83a24376a67ff88c65679c25c7a51Johannes Weiner
305