1/*
2 * SPARC assembly matrix code.
3 */
4
5#ifndef _SPARC_MATRIX_H
6#define _SPARC_MATRIX_H
7
8#ifdef __arch64__
9#define LDPTR		ldx
10#define MAT_M		0x00
11#define MAT_INV		0x08
12#define V4F_DATA	0x00
13#define V4F_START	0x08
14#define V4F_COUNT	0x10
15#define V4F_STRIDE	0x14
16#define V4F_SIZE	0x18
17#define V4F_FLAGS	0x1c
18#else
19#define LDPTR		ld
20#define MAT_M		0x00
21#define MAT_INV		0x04
22#define V4F_DATA	0x00
23#define V4F_START	0x04
24#define V4F_COUNT	0x08
25#define V4F_STRIDE	0x0c
26#define V4F_SIZE	0x10
27#define V4F_FLAGS	0x14
28#endif
29
30#define VEC_SIZE_1   	1
31#define VEC_SIZE_2   	3
32#define VEC_SIZE_3   	7
33#define VEC_SIZE_4   	15
34
35#define M0		%f16
36#define M1		%f17
37#define M2		%f18
38#define M3		%f19
39#define M4		%f20
40#define M5		%f21
41#define M6		%f22
42#define M7		%f23
43#define M8		%f24
44#define M9		%f25
45#define M10		%f26
46#define M11		%f27
47#define M12		%f28
48#define M13		%f29
49#define M14		%f30
50#define M15		%f31
51
52#define LDMATRIX_0_1_2_3_12_13_14_15(BASE)	\
53	ldd	[BASE + ( 0 * 0x4)], M0;	\
54	ldd	[BASE + ( 2 * 0x4)], M2;	\
55	ldd	[BASE + (12 * 0x4)], M12;	\
56	ldd	[BASE + (14 * 0x4)], M14
57
58#define LDMATRIX_0_1_12_13(BASE)		\
59	ldd	[BASE + ( 0 * 0x4)], M0;	\
60	ldd	[BASE + (12 * 0x4)], M12
61
62#define LDMATRIX_0_12_13(BASE)			\
63	ld	[BASE + ( 0 * 0x4)], M0;	\
64	ldd	[BASE + (12 * 0x4)], M12
65
66#define LDMATRIX_0_1_2_12_13_14(BASE)		\
67	ldd	[BASE + ( 0 * 0x4)], M0;	\
68	ld	[BASE + ( 2 * 0x4)], M2;	\
69	ldd	[BASE + (12 * 0x4)], M12;	\
70	ld	[BASE + (14 * 0x4)], M14
71
72#define LDMATRIX_0_12_13_14(BASE)		\
73	ld	[BASE + ( 0 * 0x4)], M0;	\
74	ldd	[BASE + (12 * 0x4)], M12;	\
75	ld	[BASE + (14 * 0x4)], M14
76
77#define LDMATRIX_0_14(BASE)			\
78	ld	[BASE + ( 0 * 0x4)], M0;	\
79	ld	[BASE + (14 * 0x4)], M14
80
81#define LDMATRIX_0_1_2_3_4_5_6_7_12_13_14_15(BASE) \
82	ldd	[BASE + ( 0 * 0x4)], M0;	\
83	ldd	[BASE + ( 2 * 0x4)], M2;	\
84	ldd	[BASE + ( 4 * 0x4)], M4;	\
85	ldd	[BASE + ( 6 * 0x4)], M6;	\
86	ldd	[BASE + (12 * 0x4)], M12;	\
87	ldd	[BASE + (14 * 0x4)], M14
88
89#define LDMATRIX_0_5_12_13(BASE) 		\
90	ld	[BASE + ( 0 * 0x4)], M0;	\
91	ld	[BASE + ( 5 * 0x4)], M5;	\
92	ldd	[BASE + (12 * 0x4)], M12
93
94#define LDMATRIX_0_1_2_3_4_5_6_12_13_14(BASE)	\
95	ldd	[BASE + ( 0 * 0x4)], M0;	\
96	ldd	[BASE + ( 2 * 0x4)], M2;	\
97	ldd	[BASE + ( 4 * 0x4)], M4;	\
98	ld	[BASE + ( 6 * 0x4)], M6;	\
99	ldd	[BASE + (12 * 0x4)], M12;	\
100	ld	[BASE + (14 * 0x4)], M14
101
102#define LDMATRIX_0_5_12_13_14(BASE)		\
103	ld	[BASE + ( 0 * 0x4)], M0;	\
104	ld	[BASE + ( 5 * 0x4)], M5;	\
105	ldd	[BASE + (12 * 0x4)], M12;	\
106	ld	[BASE + (14 * 0x4)], M14
107
108#define LDMATRIX_0_5_14(BASE)			\
109	ld	[BASE + ( 0 * 0x4)], M0;	\
110	ld	[BASE + ( 5 * 0x4)], M5;	\
111	ld	[BASE + (14 * 0x4)], M14
112
113#define LDMATRIX_0_1_2_3_4_5_6_7_8_9_10_11_12_13_14_15(BASE) \
114	ldd	[BASE + ( 0 * 0x4)], M0;	\
115	ldd	[BASE + ( 2 * 0x4)], M2;	\
116	ldd	[BASE + ( 4 * 0x4)], M4;	\
117	ldd	[BASE + ( 6 * 0x4)], M6;	\
118	ldd	[BASE + ( 8 * 0x4)], M8;	\
119	ldd	[BASE + (10 * 0x4)], M10;	\
120	ldd	[BASE + (12 * 0x4)], M12;	\
121	ldd	[BASE + (14 * 0x4)], M14
122
123#define LDMATRIX_0_1_4_5_12_13(BASE) 		\
124	ldd	[BASE + ( 0 * 0x4)], M0;	\
125	ldd	[BASE + ( 4 * 0x4)], M4;	\
126	ldd	[BASE + (12 * 0x4)], M12
127
128#define LDMATRIX_0_5_12_13(BASE) 		\
129	ld	[BASE + ( 0 * 0x4)], M0;	\
130	ld	[BASE + ( 5 * 0x4)], M5;	\
131	ldd	[BASE + (12 * 0x4)], M12
132
133#define LDMATRIX_0_1_2_4_5_6_8_9_10(BASE) \
134	ldd	[BASE + ( 0 * 0x4)], M0;	\
135	ld	[BASE + ( 2 * 0x4)], M2;	\
136	ldd	[BASE + ( 4 * 0x4)], M4;	\
137	ld	[BASE + ( 6 * 0x4)], M6;	\
138	ldd	[BASE + ( 8 * 0x4)], M8;	\
139	ld	[BASE + (10 * 0x4)], M10
140
141#define LDMATRIX_0_1_2_4_5_6_8_9_10_12_13_14(BASE) \
142	ldd	[BASE + ( 0 * 0x4)], M0;	\
143	ld	[BASE + ( 2 * 0x4)], M2;	\
144	ldd	[BASE + ( 4 * 0x4)], M4;	\
145	ld	[BASE + ( 6 * 0x4)], M6;	\
146	ldd	[BASE + ( 8 * 0x4)], M8;	\
147	ld	[BASE + (10 * 0x4)], M10;	\
148	ldd	[BASE + (12 * 0x4)], M12;	\
149	ld	[BASE + (14 * 0x4)], M14
150
151#define LDMATRIX_0_5_10(BASE) 			\
152	ld	[BASE + ( 0 * 0x4)], M0;	\
153	ld	[BASE + ( 5 * 0x4)], M5;	\
154	ld	[BASE + (10 * 0x4)], M10;	\
155
156#define LDMATRIX_0_5_10_12_13_14(BASE) 		\
157	ld	[BASE + ( 0 * 0x4)], M0;	\
158	ld	[BASE + ( 5 * 0x4)], M5;	\
159	ld	[BASE + (10 * 0x4)], M10;	\
160	ldd	[BASE + (12 * 0x4)], M12;	\
161	ld	[BASE + (14 * 0x4)], M14
162
163#define LDMATRIX_0_5_8_9_10_14(BASE) 		\
164	ld	[BASE + ( 0 * 0x4)], M0;	\
165	ld	[BASE + ( 5 * 0x4)], M5;	\
166	ldd	[BASE + ( 8 * 0x4)], M8;	\
167	ld	[BASE + (10 * 0x4)], M10;	\
168	ld	[BASE + (14 * 0x4)], M14
169
170#endif /* !(_SPARC_MATRIX_H) */
171