13a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org/*
23a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org * SPARC assembly matrix code.
33a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org */
43a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org
53a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org#ifndef _SPARC_MATRIX_H
63a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org#define _SPARC_MATRIX_H
73a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org
83a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org#ifdef __arch64__
93a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org#define LDPTR		ldx
103a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org#define MAT_M		0x00
113a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org#define MAT_INV		0x08
123a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org#define V4F_DATA	0x00
133a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org#define V4F_START	0x08
143a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org#define V4F_COUNT	0x10
153a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org#define V4F_STRIDE	0x14
163a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org#define V4F_SIZE	0x18
173a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org#define V4F_FLAGS	0x1c
183a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org#else
193a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org#define LDPTR		ld
203a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org#define MAT_M		0x00
213a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org#define MAT_INV		0x04
223a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org#define V4F_DATA	0x00
233a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org#define V4F_START	0x04
243a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org#define V4F_COUNT	0x08
253a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org#define V4F_STRIDE	0x0c
263a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org#define V4F_SIZE	0x10
273a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org#define V4F_FLAGS	0x14
283a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org#endif
293a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org
303a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org#define VEC_SIZE_1   	1
313a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org#define VEC_SIZE_2   	3
323a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org#define VEC_SIZE_3   	7
333a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org#define VEC_SIZE_4   	15
343a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org
353a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org#define M0		%f16
363a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org#define M1		%f17
373a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org#define M2		%f18
383a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org#define M3		%f19
393a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org#define M4		%f20
403a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org#define M5		%f21
413a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org#define M6		%f22
423a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org#define M7		%f23
433a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org#define M8		%f24
443a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org#define M9		%f25
453a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org#define M10		%f26
463a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org#define M11		%f27
473a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org#define M12		%f28
483a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org#define M13		%f29
493a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org#define M14		%f30
503a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org#define M15		%f31
513a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org
523a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org#define LDMATRIX_0_1_2_3_12_13_14_15(BASE)	\
533a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org	ldd	[BASE + ( 0 * 0x4)], M0;	\
543a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org	ldd	[BASE + ( 2 * 0x4)], M2;	\
553a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org	ldd	[BASE + (12 * 0x4)], M12;	\
563a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org	ldd	[BASE + (14 * 0x4)], M14
573a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org
583a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org#define LDMATRIX_0_1_12_13(BASE)		\
593a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org	ldd	[BASE + ( 0 * 0x4)], M0;	\
603a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org	ldd	[BASE + (12 * 0x4)], M12
613a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org
623a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org#define LDMATRIX_0_12_13(BASE)			\
633a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org	ld	[BASE + ( 0 * 0x4)], M0;	\
643a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org	ldd	[BASE + (12 * 0x4)], M12
653a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org
663a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org#define LDMATRIX_0_1_2_12_13_14(BASE)		\
673a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org	ldd	[BASE + ( 0 * 0x4)], M0;	\
683a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org	ld	[BASE + ( 2 * 0x4)], M2;	\
693a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org	ldd	[BASE + (12 * 0x4)], M12;	\
703a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org	ld	[BASE + (14 * 0x4)], M14
713a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org
723a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org#define LDMATRIX_0_12_13_14(BASE)		\
733a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org	ld	[BASE + ( 0 * 0x4)], M0;	\
743a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org	ldd	[BASE + (12 * 0x4)], M12;	\
753a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org	ld	[BASE + (14 * 0x4)], M14
763a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org
773a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org#define LDMATRIX_0_14(BASE)			\
783a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org	ld	[BASE + ( 0 * 0x4)], M0;	\
793a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org	ld	[BASE + (14 * 0x4)], M14
803a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org
813a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org#define LDMATRIX_0_1_2_3_4_5_6_7_12_13_14_15(BASE) \
823a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org	ldd	[BASE + ( 0 * 0x4)], M0;	\
833a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org	ldd	[BASE + ( 2 * 0x4)], M2;	\
843a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org	ldd	[BASE + ( 4 * 0x4)], M4;	\
853a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org	ldd	[BASE + ( 6 * 0x4)], M6;	\
863a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org	ldd	[BASE + (12 * 0x4)], M12;	\
873a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org	ldd	[BASE + (14 * 0x4)], M14
883a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org
893a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org#define LDMATRIX_0_5_12_13(BASE) 		\
903a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org	ld	[BASE + ( 0 * 0x4)], M0;	\
913a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org	ld	[BASE + ( 5 * 0x4)], M5;	\
923a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org	ldd	[BASE + (12 * 0x4)], M12
933a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org
943a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org#define LDMATRIX_0_1_2_3_4_5_6_12_13_14(BASE)	\
953a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org	ldd	[BASE + ( 0 * 0x4)], M0;	\
963a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org	ldd	[BASE + ( 2 * 0x4)], M2;	\
973a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org	ldd	[BASE + ( 4 * 0x4)], M4;	\
983a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org	ld	[BASE + ( 6 * 0x4)], M6;	\
993a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org	ldd	[BASE + (12 * 0x4)], M12;	\
1003a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org	ld	[BASE + (14 * 0x4)], M14
1013a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org
1023a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org#define LDMATRIX_0_5_12_13_14(BASE)		\
1033a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org	ld	[BASE + ( 0 * 0x4)], M0;	\
1043a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org	ld	[BASE + ( 5 * 0x4)], M5;	\
1053a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org	ldd	[BASE + (12 * 0x4)], M12;	\
1063a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org	ld	[BASE + (14 * 0x4)], M14
1073a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org
1083a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org#define LDMATRIX_0_5_14(BASE)			\
1093a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org	ld	[BASE + ( 0 * 0x4)], M0;	\
1103a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org	ld	[BASE + ( 5 * 0x4)], M5;	\
1113a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org	ld	[BASE + (14 * 0x4)], M14
1123a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org
1133a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org#define LDMATRIX_0_1_2_3_4_5_6_7_8_9_10_11_12_13_14_15(BASE) \
1143a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org	ldd	[BASE + ( 0 * 0x4)], M0;	\
1153a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org	ldd	[BASE + ( 2 * 0x4)], M2;	\
1163a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org	ldd	[BASE + ( 4 * 0x4)], M4;	\
1173a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org	ldd	[BASE + ( 6 * 0x4)], M6;	\
1183a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org	ldd	[BASE + ( 8 * 0x4)], M8;	\
1193a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org	ldd	[BASE + (10 * 0x4)], M10;	\
1203a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org	ldd	[BASE + (12 * 0x4)], M12;	\
1213a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org	ldd	[BASE + (14 * 0x4)], M14
1223a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org
1233a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org#define LDMATRIX_0_1_4_5_12_13(BASE) 		\
1243a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org	ldd	[BASE + ( 0 * 0x4)], M0;	\
1253a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org	ldd	[BASE + ( 4 * 0x4)], M4;	\
1263a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org	ldd	[BASE + (12 * 0x4)], M12
1273a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org
1283a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org#define LDMATRIX_0_5_12_13(BASE) 		\
1293a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org	ld	[BASE + ( 0 * 0x4)], M0;	\
1303a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org	ld	[BASE + ( 5 * 0x4)], M5;	\
1313a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org	ldd	[BASE + (12 * 0x4)], M12
1323a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org
1333a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org#define LDMATRIX_0_1_2_4_5_6_8_9_10(BASE) \
1343a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org	ldd	[BASE + ( 0 * 0x4)], M0;	\
1353a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org	ld	[BASE + ( 2 * 0x4)], M2;	\
1363a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org	ldd	[BASE + ( 4 * 0x4)], M4;	\
1373a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org	ld	[BASE + ( 6 * 0x4)], M6;	\
1383a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org	ldd	[BASE + ( 8 * 0x4)], M8;	\
1393a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org	ld	[BASE + (10 * 0x4)], M10
1403a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org
1413a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org#define LDMATRIX_0_1_2_4_5_6_8_9_10_12_13_14(BASE) \
1423a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org	ldd	[BASE + ( 0 * 0x4)], M0;	\
1433a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org	ld	[BASE + ( 2 * 0x4)], M2;	\
1443a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org	ldd	[BASE + ( 4 * 0x4)], M4;	\
1453a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org	ld	[BASE + ( 6 * 0x4)], M6;	\
1463a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org	ldd	[BASE + ( 8 * 0x4)], M8;	\
1473a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org	ld	[BASE + (10 * 0x4)], M10;	\
1483a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org	ldd	[BASE + (12 * 0x4)], M12;	\
1493a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org	ld	[BASE + (14 * 0x4)], M14
1503a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org
1513a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org#define LDMATRIX_0_5_10(BASE) 			\
1523a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org	ld	[BASE + ( 0 * 0x4)], M0;	\
1533a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org	ld	[BASE + ( 5 * 0x4)], M5;	\
1543a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org	ld	[BASE + (10 * 0x4)], M10;	\
1553a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org
1563a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org#define LDMATRIX_0_5_10_12_13_14(BASE) 		\
1573a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org	ld	[BASE + ( 0 * 0x4)], M0;	\
1583a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org	ld	[BASE + ( 5 * 0x4)], M5;	\
1593a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org	ld	[BASE + (10 * 0x4)], M10;	\
1603a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org	ldd	[BASE + (12 * 0x4)], M12;	\
1613a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org	ld	[BASE + (14 * 0x4)], M14
1623a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org
1633a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org#define LDMATRIX_0_5_8_9_10_14(BASE) 		\
1643a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org	ld	[BASE + ( 0 * 0x4)], M0;	\
1653a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org	ld	[BASE + ( 5 * 0x4)], M5;	\
1663a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org	ldd	[BASE + ( 8 * 0x4)], M8;	\
1673a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org	ld	[BASE + (10 * 0x4)], M10;	\
1683a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org	ld	[BASE + (14 * 0x4)], M14
1693a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org
1703a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org#endif /* !(_SPARC_MATRIX_H) */
171