18c2ecf20Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0 */
28c2ecf20Sopenharmony_ci/*
38c2ecf20Sopenharmony_ci * arch/sparc64/lib/xor.S
48c2ecf20Sopenharmony_ci *
58c2ecf20Sopenharmony_ci * High speed xor_block operation for RAID4/5 utilizing the
68c2ecf20Sopenharmony_ci * UltraSparc Visual Instruction Set and Niagara store-init/twin-load.
78c2ecf20Sopenharmony_ci *
88c2ecf20Sopenharmony_ci * Copyright (C) 1997, 1999 Jakub Jelinek (jj@ultra.linux.cz)
98c2ecf20Sopenharmony_ci * Copyright (C) 2006 David S. Miller <davem@davemloft.net>
108c2ecf20Sopenharmony_ci */
118c2ecf20Sopenharmony_ci
128c2ecf20Sopenharmony_ci#include <linux/linkage.h>
138c2ecf20Sopenharmony_ci#include <asm/visasm.h>
148c2ecf20Sopenharmony_ci#include <asm/asi.h>
158c2ecf20Sopenharmony_ci#include <asm/dcu.h>
168c2ecf20Sopenharmony_ci#include <asm/spitfire.h>
178c2ecf20Sopenharmony_ci#include <asm/export.h>
188c2ecf20Sopenharmony_ci
198c2ecf20Sopenharmony_ci/*
208c2ecf20Sopenharmony_ci *	Requirements:
218c2ecf20Sopenharmony_ci *	!(((long)dest | (long)sourceN) & (64 - 1)) &&
228c2ecf20Sopenharmony_ci *	!(len & 127) && len >= 256
238c2ecf20Sopenharmony_ci */
248c2ecf20Sopenharmony_ci	.text
258c2ecf20Sopenharmony_ci
268c2ecf20Sopenharmony_ci	/* VIS versions. */
278c2ecf20Sopenharmony_ciENTRY(xor_vis_2)
288c2ecf20Sopenharmony_ci	rd	%fprs, %o5
298c2ecf20Sopenharmony_ci	andcc	%o5, FPRS_FEF|FPRS_DU, %g0
308c2ecf20Sopenharmony_ci	be,pt	%icc, 0f
318c2ecf20Sopenharmony_ci	 sethi	%hi(VISenter), %g1
328c2ecf20Sopenharmony_ci	jmpl	%g1 + %lo(VISenter), %g7
338c2ecf20Sopenharmony_ci	 add	%g7, 8, %g7
348c2ecf20Sopenharmony_ci0:	wr	%g0, FPRS_FEF, %fprs
358c2ecf20Sopenharmony_ci	rd	%asi, %g1
368c2ecf20Sopenharmony_ci	wr	%g0, ASI_BLK_P, %asi
378c2ecf20Sopenharmony_ci	membar	#LoadStore|#StoreLoad|#StoreStore
388c2ecf20Sopenharmony_ci	sub	%o0, 128, %o0
398c2ecf20Sopenharmony_ci	ldda	[%o1] %asi, %f0
408c2ecf20Sopenharmony_ci	ldda	[%o2] %asi, %f16
418c2ecf20Sopenharmony_ci
428c2ecf20Sopenharmony_ci2:	ldda	[%o1 + 64] %asi, %f32
438c2ecf20Sopenharmony_ci	fxor	%f0, %f16, %f16
448c2ecf20Sopenharmony_ci	fxor	%f2, %f18, %f18
458c2ecf20Sopenharmony_ci	fxor	%f4, %f20, %f20
468c2ecf20Sopenharmony_ci	fxor	%f6, %f22, %f22
478c2ecf20Sopenharmony_ci	fxor	%f8, %f24, %f24
488c2ecf20Sopenharmony_ci	fxor	%f10, %f26, %f26
498c2ecf20Sopenharmony_ci	fxor	%f12, %f28, %f28
508c2ecf20Sopenharmony_ci	fxor	%f14, %f30, %f30
518c2ecf20Sopenharmony_ci	stda	%f16, [%o1] %asi
528c2ecf20Sopenharmony_ci	ldda	[%o2 + 64] %asi, %f48
538c2ecf20Sopenharmony_ci	ldda	[%o1 + 128] %asi, %f0
548c2ecf20Sopenharmony_ci	fxor	%f32, %f48, %f48
558c2ecf20Sopenharmony_ci	fxor	%f34, %f50, %f50
568c2ecf20Sopenharmony_ci	add	%o1, 128, %o1
578c2ecf20Sopenharmony_ci	fxor	%f36, %f52, %f52
588c2ecf20Sopenharmony_ci	add	%o2, 128, %o2
598c2ecf20Sopenharmony_ci	fxor	%f38, %f54, %f54
608c2ecf20Sopenharmony_ci	subcc	%o0, 128, %o0
618c2ecf20Sopenharmony_ci	fxor	%f40, %f56, %f56
628c2ecf20Sopenharmony_ci	fxor	%f42, %f58, %f58
638c2ecf20Sopenharmony_ci	fxor	%f44, %f60, %f60
648c2ecf20Sopenharmony_ci	fxor	%f46, %f62, %f62
658c2ecf20Sopenharmony_ci	stda	%f48, [%o1 - 64] %asi
668c2ecf20Sopenharmony_ci	bne,pt	%xcc, 2b
678c2ecf20Sopenharmony_ci	 ldda	[%o2] %asi, %f16
688c2ecf20Sopenharmony_ci
698c2ecf20Sopenharmony_ci	ldda	[%o1 + 64] %asi, %f32
708c2ecf20Sopenharmony_ci	fxor	%f0, %f16, %f16
718c2ecf20Sopenharmony_ci	fxor	%f2, %f18, %f18
728c2ecf20Sopenharmony_ci	fxor	%f4, %f20, %f20
738c2ecf20Sopenharmony_ci	fxor	%f6, %f22, %f22
748c2ecf20Sopenharmony_ci	fxor	%f8, %f24, %f24
758c2ecf20Sopenharmony_ci	fxor	%f10, %f26, %f26
768c2ecf20Sopenharmony_ci	fxor	%f12, %f28, %f28
778c2ecf20Sopenharmony_ci	fxor	%f14, %f30, %f30
788c2ecf20Sopenharmony_ci	stda	%f16, [%o1] %asi
798c2ecf20Sopenharmony_ci	ldda	[%o2 + 64] %asi, %f48
808c2ecf20Sopenharmony_ci	membar	#Sync
818c2ecf20Sopenharmony_ci	fxor	%f32, %f48, %f48
828c2ecf20Sopenharmony_ci	fxor	%f34, %f50, %f50
838c2ecf20Sopenharmony_ci	fxor	%f36, %f52, %f52
848c2ecf20Sopenharmony_ci	fxor	%f38, %f54, %f54
858c2ecf20Sopenharmony_ci	fxor	%f40, %f56, %f56
868c2ecf20Sopenharmony_ci	fxor	%f42, %f58, %f58
878c2ecf20Sopenharmony_ci	fxor	%f44, %f60, %f60
888c2ecf20Sopenharmony_ci	fxor	%f46, %f62, %f62
898c2ecf20Sopenharmony_ci	stda	%f48, [%o1 + 64] %asi
908c2ecf20Sopenharmony_ci	membar	#Sync|#StoreStore|#StoreLoad
918c2ecf20Sopenharmony_ci	wr	%g1, %g0, %asi
928c2ecf20Sopenharmony_ci	retl
938c2ecf20Sopenharmony_ci	  wr	%g0, 0, %fprs
948c2ecf20Sopenharmony_ciENDPROC(xor_vis_2)
958c2ecf20Sopenharmony_ciEXPORT_SYMBOL(xor_vis_2)
968c2ecf20Sopenharmony_ci
978c2ecf20Sopenharmony_ciENTRY(xor_vis_3)
988c2ecf20Sopenharmony_ci	rd	%fprs, %o5
998c2ecf20Sopenharmony_ci	andcc	%o5, FPRS_FEF|FPRS_DU, %g0
1008c2ecf20Sopenharmony_ci	be,pt	%icc, 0f
1018c2ecf20Sopenharmony_ci	 sethi	%hi(VISenter), %g1
1028c2ecf20Sopenharmony_ci	jmpl	%g1 + %lo(VISenter), %g7
1038c2ecf20Sopenharmony_ci	 add	%g7, 8, %g7
1048c2ecf20Sopenharmony_ci0:	wr	%g0, FPRS_FEF, %fprs
1058c2ecf20Sopenharmony_ci	rd	%asi, %g1
1068c2ecf20Sopenharmony_ci	wr	%g0, ASI_BLK_P, %asi
1078c2ecf20Sopenharmony_ci	membar	#LoadStore|#StoreLoad|#StoreStore
1088c2ecf20Sopenharmony_ci	sub	%o0, 64, %o0
1098c2ecf20Sopenharmony_ci	ldda	[%o1] %asi, %f0
1108c2ecf20Sopenharmony_ci	ldda	[%o2] %asi, %f16
1118c2ecf20Sopenharmony_ci
1128c2ecf20Sopenharmony_ci3:	ldda	[%o3] %asi, %f32
1138c2ecf20Sopenharmony_ci	fxor	%f0, %f16, %f48
1148c2ecf20Sopenharmony_ci	fxor	%f2, %f18, %f50
1158c2ecf20Sopenharmony_ci	add	%o1, 64, %o1
1168c2ecf20Sopenharmony_ci	fxor	%f4, %f20, %f52
1178c2ecf20Sopenharmony_ci	fxor	%f6, %f22, %f54
1188c2ecf20Sopenharmony_ci	add	%o2, 64, %o2
1198c2ecf20Sopenharmony_ci	fxor	%f8, %f24, %f56
1208c2ecf20Sopenharmony_ci	fxor	%f10, %f26, %f58
1218c2ecf20Sopenharmony_ci	fxor	%f12, %f28, %f60
1228c2ecf20Sopenharmony_ci	fxor	%f14, %f30, %f62
1238c2ecf20Sopenharmony_ci	ldda	[%o1] %asi, %f0
1248c2ecf20Sopenharmony_ci	fxor	%f48, %f32, %f48
1258c2ecf20Sopenharmony_ci	fxor	%f50, %f34, %f50
1268c2ecf20Sopenharmony_ci	fxor	%f52, %f36, %f52
1278c2ecf20Sopenharmony_ci	fxor	%f54, %f38, %f54
1288c2ecf20Sopenharmony_ci	add	%o3, 64, %o3
1298c2ecf20Sopenharmony_ci	fxor	%f56, %f40, %f56
1308c2ecf20Sopenharmony_ci	fxor	%f58, %f42, %f58
1318c2ecf20Sopenharmony_ci	subcc	%o0, 64, %o0
1328c2ecf20Sopenharmony_ci	fxor	%f60, %f44, %f60
1338c2ecf20Sopenharmony_ci	fxor	%f62, %f46, %f62
1348c2ecf20Sopenharmony_ci	stda	%f48, [%o1 - 64] %asi
1358c2ecf20Sopenharmony_ci	bne,pt	%xcc, 3b
1368c2ecf20Sopenharmony_ci	 ldda	[%o2] %asi, %f16
1378c2ecf20Sopenharmony_ci
1388c2ecf20Sopenharmony_ci	ldda	[%o3] %asi, %f32
1398c2ecf20Sopenharmony_ci	fxor	%f0, %f16, %f48
1408c2ecf20Sopenharmony_ci	fxor	%f2, %f18, %f50
1418c2ecf20Sopenharmony_ci	fxor	%f4, %f20, %f52
1428c2ecf20Sopenharmony_ci	fxor	%f6, %f22, %f54
1438c2ecf20Sopenharmony_ci	fxor	%f8, %f24, %f56
1448c2ecf20Sopenharmony_ci	fxor	%f10, %f26, %f58
1458c2ecf20Sopenharmony_ci	fxor	%f12, %f28, %f60
1468c2ecf20Sopenharmony_ci	fxor	%f14, %f30, %f62
1478c2ecf20Sopenharmony_ci	membar	#Sync
1488c2ecf20Sopenharmony_ci	fxor	%f48, %f32, %f48
1498c2ecf20Sopenharmony_ci	fxor	%f50, %f34, %f50
1508c2ecf20Sopenharmony_ci	fxor	%f52, %f36, %f52
1518c2ecf20Sopenharmony_ci	fxor	%f54, %f38, %f54
1528c2ecf20Sopenharmony_ci	fxor	%f56, %f40, %f56
1538c2ecf20Sopenharmony_ci	fxor	%f58, %f42, %f58
1548c2ecf20Sopenharmony_ci	fxor	%f60, %f44, %f60
1558c2ecf20Sopenharmony_ci	fxor	%f62, %f46, %f62
1568c2ecf20Sopenharmony_ci	stda	%f48, [%o1] %asi
1578c2ecf20Sopenharmony_ci	membar	#Sync|#StoreStore|#StoreLoad
1588c2ecf20Sopenharmony_ci	wr	%g1, %g0, %asi
1598c2ecf20Sopenharmony_ci	retl
1608c2ecf20Sopenharmony_ci	 wr	%g0, 0, %fprs
1618c2ecf20Sopenharmony_ciENDPROC(xor_vis_3)
1628c2ecf20Sopenharmony_ciEXPORT_SYMBOL(xor_vis_3)
1638c2ecf20Sopenharmony_ci
1648c2ecf20Sopenharmony_ciENTRY(xor_vis_4)
1658c2ecf20Sopenharmony_ci	rd	%fprs, %o5
1668c2ecf20Sopenharmony_ci	andcc	%o5, FPRS_FEF|FPRS_DU, %g0
1678c2ecf20Sopenharmony_ci	be,pt	%icc, 0f
1688c2ecf20Sopenharmony_ci	 sethi	%hi(VISenter), %g1
1698c2ecf20Sopenharmony_ci	jmpl	%g1 + %lo(VISenter), %g7
1708c2ecf20Sopenharmony_ci	 add	%g7, 8, %g7
1718c2ecf20Sopenharmony_ci0:	wr	%g0, FPRS_FEF, %fprs
1728c2ecf20Sopenharmony_ci	rd	%asi, %g1
1738c2ecf20Sopenharmony_ci	wr	%g0, ASI_BLK_P, %asi
1748c2ecf20Sopenharmony_ci	membar	#LoadStore|#StoreLoad|#StoreStore
1758c2ecf20Sopenharmony_ci	sub	%o0, 64, %o0
1768c2ecf20Sopenharmony_ci	ldda	[%o1] %asi, %f0
1778c2ecf20Sopenharmony_ci	ldda	[%o2] %asi, %f16
1788c2ecf20Sopenharmony_ci
1798c2ecf20Sopenharmony_ci4:	ldda	[%o3] %asi, %f32
1808c2ecf20Sopenharmony_ci	fxor	%f0, %f16, %f16
1818c2ecf20Sopenharmony_ci	fxor	%f2, %f18, %f18
1828c2ecf20Sopenharmony_ci	add	%o1, 64, %o1
1838c2ecf20Sopenharmony_ci	fxor	%f4, %f20, %f20
1848c2ecf20Sopenharmony_ci	fxor	%f6, %f22, %f22
1858c2ecf20Sopenharmony_ci	add	%o2, 64, %o2
1868c2ecf20Sopenharmony_ci	fxor	%f8, %f24, %f24
1878c2ecf20Sopenharmony_ci	fxor	%f10, %f26, %f26
1888c2ecf20Sopenharmony_ci	fxor	%f12, %f28, %f28
1898c2ecf20Sopenharmony_ci	fxor	%f14, %f30, %f30
1908c2ecf20Sopenharmony_ci	ldda	[%o4] %asi, %f48
1918c2ecf20Sopenharmony_ci	fxor	%f16, %f32, %f32
1928c2ecf20Sopenharmony_ci	fxor	%f18, %f34, %f34
1938c2ecf20Sopenharmony_ci	fxor	%f20, %f36, %f36
1948c2ecf20Sopenharmony_ci	fxor	%f22, %f38, %f38
1958c2ecf20Sopenharmony_ci	add	%o3, 64, %o3
1968c2ecf20Sopenharmony_ci	fxor	%f24, %f40, %f40
1978c2ecf20Sopenharmony_ci	fxor	%f26, %f42, %f42
1988c2ecf20Sopenharmony_ci	fxor	%f28, %f44, %f44
1998c2ecf20Sopenharmony_ci	fxor	%f30, %f46, %f46
2008c2ecf20Sopenharmony_ci	ldda	[%o1] %asi, %f0
2018c2ecf20Sopenharmony_ci	fxor	%f32, %f48, %f48
2028c2ecf20Sopenharmony_ci	fxor	%f34, %f50, %f50
2038c2ecf20Sopenharmony_ci	fxor	%f36, %f52, %f52
2048c2ecf20Sopenharmony_ci	add	%o4, 64, %o4
2058c2ecf20Sopenharmony_ci	fxor	%f38, %f54, %f54
2068c2ecf20Sopenharmony_ci	fxor	%f40, %f56, %f56
2078c2ecf20Sopenharmony_ci	fxor	%f42, %f58, %f58
2088c2ecf20Sopenharmony_ci	subcc	%o0, 64, %o0
2098c2ecf20Sopenharmony_ci	fxor	%f44, %f60, %f60
2108c2ecf20Sopenharmony_ci	fxor	%f46, %f62, %f62
2118c2ecf20Sopenharmony_ci	stda	%f48, [%o1 - 64] %asi
2128c2ecf20Sopenharmony_ci	bne,pt	%xcc, 4b
2138c2ecf20Sopenharmony_ci	 ldda	[%o2] %asi, %f16
2148c2ecf20Sopenharmony_ci
2158c2ecf20Sopenharmony_ci	ldda	[%o3] %asi, %f32
2168c2ecf20Sopenharmony_ci	fxor	%f0, %f16, %f16
2178c2ecf20Sopenharmony_ci	fxor	%f2, %f18, %f18
2188c2ecf20Sopenharmony_ci	fxor	%f4, %f20, %f20
2198c2ecf20Sopenharmony_ci	fxor	%f6, %f22, %f22
2208c2ecf20Sopenharmony_ci	fxor	%f8, %f24, %f24
2218c2ecf20Sopenharmony_ci	fxor	%f10, %f26, %f26
2228c2ecf20Sopenharmony_ci	fxor	%f12, %f28, %f28
2238c2ecf20Sopenharmony_ci	fxor	%f14, %f30, %f30
2248c2ecf20Sopenharmony_ci	ldda	[%o4] %asi, %f48
2258c2ecf20Sopenharmony_ci	fxor	%f16, %f32, %f32
2268c2ecf20Sopenharmony_ci	fxor	%f18, %f34, %f34
2278c2ecf20Sopenharmony_ci	fxor	%f20, %f36, %f36
2288c2ecf20Sopenharmony_ci	fxor	%f22, %f38, %f38
2298c2ecf20Sopenharmony_ci	fxor	%f24, %f40, %f40
2308c2ecf20Sopenharmony_ci	fxor	%f26, %f42, %f42
2318c2ecf20Sopenharmony_ci	fxor	%f28, %f44, %f44
2328c2ecf20Sopenharmony_ci	fxor	%f30, %f46, %f46
2338c2ecf20Sopenharmony_ci	membar	#Sync
2348c2ecf20Sopenharmony_ci	fxor	%f32, %f48, %f48
2358c2ecf20Sopenharmony_ci	fxor	%f34, %f50, %f50
2368c2ecf20Sopenharmony_ci	fxor	%f36, %f52, %f52
2378c2ecf20Sopenharmony_ci	fxor	%f38, %f54, %f54
2388c2ecf20Sopenharmony_ci	fxor	%f40, %f56, %f56
2398c2ecf20Sopenharmony_ci	fxor	%f42, %f58, %f58
2408c2ecf20Sopenharmony_ci	fxor	%f44, %f60, %f60
2418c2ecf20Sopenharmony_ci	fxor	%f46, %f62, %f62
2428c2ecf20Sopenharmony_ci	stda	%f48, [%o1] %asi
2438c2ecf20Sopenharmony_ci	membar	#Sync|#StoreStore|#StoreLoad
2448c2ecf20Sopenharmony_ci	wr	%g1, %g0, %asi
2458c2ecf20Sopenharmony_ci	retl
2468c2ecf20Sopenharmony_ci	 wr	%g0, 0, %fprs
2478c2ecf20Sopenharmony_ciENDPROC(xor_vis_4)
2488c2ecf20Sopenharmony_ciEXPORT_SYMBOL(xor_vis_4)
2498c2ecf20Sopenharmony_ci
2508c2ecf20Sopenharmony_ciENTRY(xor_vis_5)
2518c2ecf20Sopenharmony_ci	save	%sp, -192, %sp
2528c2ecf20Sopenharmony_ci	rd	%fprs, %o5
2538c2ecf20Sopenharmony_ci	andcc	%o5, FPRS_FEF|FPRS_DU, %g0
2548c2ecf20Sopenharmony_ci	be,pt	%icc, 0f
2558c2ecf20Sopenharmony_ci	 sethi	%hi(VISenter), %g1
2568c2ecf20Sopenharmony_ci	jmpl	%g1 + %lo(VISenter), %g7
2578c2ecf20Sopenharmony_ci	 add	%g7, 8, %g7
2588c2ecf20Sopenharmony_ci0:	wr	%g0, FPRS_FEF, %fprs
2598c2ecf20Sopenharmony_ci	rd	%asi, %g1
2608c2ecf20Sopenharmony_ci	wr	%g0, ASI_BLK_P, %asi
2618c2ecf20Sopenharmony_ci	membar	#LoadStore|#StoreLoad|#StoreStore
2628c2ecf20Sopenharmony_ci	sub	%i0, 64, %i0
2638c2ecf20Sopenharmony_ci	ldda	[%i1] %asi, %f0
2648c2ecf20Sopenharmony_ci	ldda	[%i2] %asi, %f16
2658c2ecf20Sopenharmony_ci
2668c2ecf20Sopenharmony_ci5:	ldda	[%i3] %asi, %f32
2678c2ecf20Sopenharmony_ci	fxor	%f0, %f16, %f48
2688c2ecf20Sopenharmony_ci	fxor	%f2, %f18, %f50
2698c2ecf20Sopenharmony_ci	add	%i1, 64, %i1
2708c2ecf20Sopenharmony_ci	fxor	%f4, %f20, %f52
2718c2ecf20Sopenharmony_ci	fxor	%f6, %f22, %f54
2728c2ecf20Sopenharmony_ci	add	%i2, 64, %i2
2738c2ecf20Sopenharmony_ci	fxor	%f8, %f24, %f56
2748c2ecf20Sopenharmony_ci	fxor	%f10, %f26, %f58
2758c2ecf20Sopenharmony_ci	fxor	%f12, %f28, %f60
2768c2ecf20Sopenharmony_ci	fxor	%f14, %f30, %f62
2778c2ecf20Sopenharmony_ci	ldda	[%i4] %asi, %f16
2788c2ecf20Sopenharmony_ci	fxor	%f48, %f32, %f48
2798c2ecf20Sopenharmony_ci	fxor	%f50, %f34, %f50
2808c2ecf20Sopenharmony_ci	fxor	%f52, %f36, %f52
2818c2ecf20Sopenharmony_ci	fxor	%f54, %f38, %f54
2828c2ecf20Sopenharmony_ci	add	%i3, 64, %i3
2838c2ecf20Sopenharmony_ci	fxor	%f56, %f40, %f56
2848c2ecf20Sopenharmony_ci	fxor	%f58, %f42, %f58
2858c2ecf20Sopenharmony_ci	fxor	%f60, %f44, %f60
2868c2ecf20Sopenharmony_ci	fxor	%f62, %f46, %f62
2878c2ecf20Sopenharmony_ci	ldda	[%i5] %asi, %f32
2888c2ecf20Sopenharmony_ci	fxor	%f48, %f16, %f48
2898c2ecf20Sopenharmony_ci	fxor	%f50, %f18, %f50
2908c2ecf20Sopenharmony_ci	add	%i4, 64, %i4
2918c2ecf20Sopenharmony_ci	fxor	%f52, %f20, %f52
2928c2ecf20Sopenharmony_ci	fxor	%f54, %f22, %f54
2938c2ecf20Sopenharmony_ci	add	%i5, 64, %i5
2948c2ecf20Sopenharmony_ci	fxor	%f56, %f24, %f56
2958c2ecf20Sopenharmony_ci	fxor	%f58, %f26, %f58
2968c2ecf20Sopenharmony_ci	fxor	%f60, %f28, %f60
2978c2ecf20Sopenharmony_ci	fxor	%f62, %f30, %f62
2988c2ecf20Sopenharmony_ci	ldda	[%i1] %asi, %f0
2998c2ecf20Sopenharmony_ci	fxor	%f48, %f32, %f48
3008c2ecf20Sopenharmony_ci	fxor	%f50, %f34, %f50
3018c2ecf20Sopenharmony_ci	fxor	%f52, %f36, %f52
3028c2ecf20Sopenharmony_ci	fxor	%f54, %f38, %f54
3038c2ecf20Sopenharmony_ci	fxor	%f56, %f40, %f56
3048c2ecf20Sopenharmony_ci	fxor	%f58, %f42, %f58
3058c2ecf20Sopenharmony_ci	subcc	%i0, 64, %i0
3068c2ecf20Sopenharmony_ci	fxor	%f60, %f44, %f60
3078c2ecf20Sopenharmony_ci	fxor	%f62, %f46, %f62
3088c2ecf20Sopenharmony_ci	stda	%f48, [%i1 - 64] %asi
3098c2ecf20Sopenharmony_ci	bne,pt	%xcc, 5b
3108c2ecf20Sopenharmony_ci	 ldda	[%i2] %asi, %f16
3118c2ecf20Sopenharmony_ci
3128c2ecf20Sopenharmony_ci	ldda	[%i3] %asi, %f32
3138c2ecf20Sopenharmony_ci	fxor	%f0, %f16, %f48
3148c2ecf20Sopenharmony_ci	fxor	%f2, %f18, %f50
3158c2ecf20Sopenharmony_ci	fxor	%f4, %f20, %f52
3168c2ecf20Sopenharmony_ci	fxor	%f6, %f22, %f54
3178c2ecf20Sopenharmony_ci	fxor	%f8, %f24, %f56
3188c2ecf20Sopenharmony_ci	fxor	%f10, %f26, %f58
3198c2ecf20Sopenharmony_ci	fxor	%f12, %f28, %f60
3208c2ecf20Sopenharmony_ci	fxor	%f14, %f30, %f62
3218c2ecf20Sopenharmony_ci	ldda	[%i4] %asi, %f16
3228c2ecf20Sopenharmony_ci	fxor	%f48, %f32, %f48
3238c2ecf20Sopenharmony_ci	fxor	%f50, %f34, %f50
3248c2ecf20Sopenharmony_ci	fxor	%f52, %f36, %f52
3258c2ecf20Sopenharmony_ci	fxor	%f54, %f38, %f54
3268c2ecf20Sopenharmony_ci	fxor	%f56, %f40, %f56
3278c2ecf20Sopenharmony_ci	fxor	%f58, %f42, %f58
3288c2ecf20Sopenharmony_ci	fxor	%f60, %f44, %f60
3298c2ecf20Sopenharmony_ci	fxor	%f62, %f46, %f62
3308c2ecf20Sopenharmony_ci	ldda	[%i5] %asi, %f32
3318c2ecf20Sopenharmony_ci	fxor	%f48, %f16, %f48
3328c2ecf20Sopenharmony_ci	fxor	%f50, %f18, %f50
3338c2ecf20Sopenharmony_ci	fxor	%f52, %f20, %f52
3348c2ecf20Sopenharmony_ci	fxor	%f54, %f22, %f54
3358c2ecf20Sopenharmony_ci	fxor	%f56, %f24, %f56
3368c2ecf20Sopenharmony_ci	fxor	%f58, %f26, %f58
3378c2ecf20Sopenharmony_ci	fxor	%f60, %f28, %f60
3388c2ecf20Sopenharmony_ci	fxor	%f62, %f30, %f62
3398c2ecf20Sopenharmony_ci	membar	#Sync
3408c2ecf20Sopenharmony_ci	fxor	%f48, %f32, %f48
3418c2ecf20Sopenharmony_ci	fxor	%f50, %f34, %f50
3428c2ecf20Sopenharmony_ci	fxor	%f52, %f36, %f52
3438c2ecf20Sopenharmony_ci	fxor	%f54, %f38, %f54
3448c2ecf20Sopenharmony_ci	fxor	%f56, %f40, %f56
3458c2ecf20Sopenharmony_ci	fxor	%f58, %f42, %f58
3468c2ecf20Sopenharmony_ci	fxor	%f60, %f44, %f60
3478c2ecf20Sopenharmony_ci	fxor	%f62, %f46, %f62
3488c2ecf20Sopenharmony_ci	stda	%f48, [%i1] %asi
3498c2ecf20Sopenharmony_ci	membar	#Sync|#StoreStore|#StoreLoad
3508c2ecf20Sopenharmony_ci	wr	%g1, %g0, %asi
3518c2ecf20Sopenharmony_ci	wr	%g0, 0, %fprs
3528c2ecf20Sopenharmony_ci	ret
3538c2ecf20Sopenharmony_ci	 restore
3548c2ecf20Sopenharmony_ciENDPROC(xor_vis_5)
3558c2ecf20Sopenharmony_ciEXPORT_SYMBOL(xor_vis_5)
3568c2ecf20Sopenharmony_ci
3578c2ecf20Sopenharmony_ci	/* Niagara versions. */
3588c2ecf20Sopenharmony_ciENTRY(xor_niagara_2) /* %o0=bytes, %o1=dest, %o2=src */
3598c2ecf20Sopenharmony_ci	save		%sp, -192, %sp
3608c2ecf20Sopenharmony_ci	prefetch	[%i1], #n_writes
3618c2ecf20Sopenharmony_ci	prefetch	[%i2], #one_read
3628c2ecf20Sopenharmony_ci	rd		%asi, %g7
3638c2ecf20Sopenharmony_ci	wr		%g0, ASI_BLK_INIT_QUAD_LDD_P, %asi
3648c2ecf20Sopenharmony_ci	srlx		%i0, 6, %g1
3658c2ecf20Sopenharmony_ci	mov		%i1, %i0
3668c2ecf20Sopenharmony_ci	mov		%i2, %i1
3678c2ecf20Sopenharmony_ci1:	ldda		[%i1 + 0x00] %asi, %i2	/* %i2/%i3 = src  + 0x00 */
3688c2ecf20Sopenharmony_ci	ldda		[%i1 + 0x10] %asi, %i4	/* %i4/%i5 = src  + 0x10 */
3698c2ecf20Sopenharmony_ci	ldda		[%i1 + 0x20] %asi, %g2	/* %g2/%g3 = src  + 0x20 */
3708c2ecf20Sopenharmony_ci	ldda		[%i1 + 0x30] %asi, %l0	/* %l0/%l1 = src  + 0x30 */
3718c2ecf20Sopenharmony_ci	prefetch	[%i1 + 0x40], #one_read
3728c2ecf20Sopenharmony_ci	ldda		[%i0 + 0x00] %asi, %o0  /* %o0/%o1 = dest + 0x00 */
3738c2ecf20Sopenharmony_ci	ldda		[%i0 + 0x10] %asi, %o2  /* %o2/%o3 = dest + 0x10 */
3748c2ecf20Sopenharmony_ci	ldda		[%i0 + 0x20] %asi, %o4  /* %o4/%o5 = dest + 0x20 */
3758c2ecf20Sopenharmony_ci	ldda		[%i0 + 0x30] %asi, %l2  /* %l2/%l3 = dest + 0x30 */
3768c2ecf20Sopenharmony_ci	prefetch	[%i0 + 0x40], #n_writes
3778c2ecf20Sopenharmony_ci	xor		%o0, %i2, %o0
3788c2ecf20Sopenharmony_ci	xor		%o1, %i3, %o1
3798c2ecf20Sopenharmony_ci	stxa		%o0, [%i0 + 0x00] %asi
3808c2ecf20Sopenharmony_ci	stxa		%o1, [%i0 + 0x08] %asi
3818c2ecf20Sopenharmony_ci	xor		%o2, %i4, %o2
3828c2ecf20Sopenharmony_ci	xor		%o3, %i5, %o3
3838c2ecf20Sopenharmony_ci	stxa		%o2, [%i0 + 0x10] %asi
3848c2ecf20Sopenharmony_ci	stxa		%o3, [%i0 + 0x18] %asi
3858c2ecf20Sopenharmony_ci	xor		%o4, %g2, %o4
3868c2ecf20Sopenharmony_ci	xor		%o5, %g3, %o5
3878c2ecf20Sopenharmony_ci	stxa		%o4, [%i0 + 0x20] %asi
3888c2ecf20Sopenharmony_ci	stxa		%o5, [%i0 + 0x28] %asi
3898c2ecf20Sopenharmony_ci	xor		%l2, %l0, %l2
3908c2ecf20Sopenharmony_ci	xor		%l3, %l1, %l3
3918c2ecf20Sopenharmony_ci	stxa		%l2, [%i0 + 0x30] %asi
3928c2ecf20Sopenharmony_ci	stxa		%l3, [%i0 + 0x38] %asi
3938c2ecf20Sopenharmony_ci	add		%i0, 0x40, %i0
3948c2ecf20Sopenharmony_ci	subcc		%g1, 1, %g1
3958c2ecf20Sopenharmony_ci	bne,pt		%xcc, 1b
3968c2ecf20Sopenharmony_ci	 add		%i1, 0x40, %i1
3978c2ecf20Sopenharmony_ci	membar		#Sync
3988c2ecf20Sopenharmony_ci	wr		%g7, 0x0, %asi
3998c2ecf20Sopenharmony_ci	ret
4008c2ecf20Sopenharmony_ci	 restore
4018c2ecf20Sopenharmony_ciENDPROC(xor_niagara_2)
4028c2ecf20Sopenharmony_ciEXPORT_SYMBOL(xor_niagara_2)
4038c2ecf20Sopenharmony_ci
4048c2ecf20Sopenharmony_ciENTRY(xor_niagara_3) /* %o0=bytes, %o1=dest, %o2=src1, %o3=src2 */
4058c2ecf20Sopenharmony_ci	save		%sp, -192, %sp
4068c2ecf20Sopenharmony_ci	prefetch	[%i1], #n_writes
4078c2ecf20Sopenharmony_ci	prefetch	[%i2], #one_read
4088c2ecf20Sopenharmony_ci	prefetch	[%i3], #one_read
4098c2ecf20Sopenharmony_ci	rd		%asi, %g7
4108c2ecf20Sopenharmony_ci	wr		%g0, ASI_BLK_INIT_QUAD_LDD_P, %asi
4118c2ecf20Sopenharmony_ci	srlx		%i0, 6, %g1
4128c2ecf20Sopenharmony_ci	mov		%i1, %i0
4138c2ecf20Sopenharmony_ci	mov		%i2, %i1
4148c2ecf20Sopenharmony_ci	mov		%i3, %l7
4158c2ecf20Sopenharmony_ci1:	ldda		[%i1 + 0x00] %asi, %i2	/* %i2/%i3 = src1 + 0x00 */
4168c2ecf20Sopenharmony_ci	ldda		[%i1 + 0x10] %asi, %i4	/* %i4/%i5 = src1 + 0x10 */
4178c2ecf20Sopenharmony_ci	ldda		[%l7 + 0x00] %asi, %g2	/* %g2/%g3 = src2 + 0x00 */
4188c2ecf20Sopenharmony_ci	ldda		[%l7 + 0x10] %asi, %l0	/* %l0/%l1 = src2 + 0x10 */
4198c2ecf20Sopenharmony_ci	ldda		[%i0 + 0x00] %asi, %o0  /* %o0/%o1 = dest + 0x00 */
4208c2ecf20Sopenharmony_ci	ldda		[%i0 + 0x10] %asi, %o2  /* %o2/%o3 = dest + 0x10 */
4218c2ecf20Sopenharmony_ci	xor		%g2, %i2, %g2
4228c2ecf20Sopenharmony_ci	xor		%g3, %i3, %g3
4238c2ecf20Sopenharmony_ci	xor		%o0, %g2, %o0
4248c2ecf20Sopenharmony_ci	xor		%o1, %g3, %o1
4258c2ecf20Sopenharmony_ci	stxa		%o0, [%i0 + 0x00] %asi
4268c2ecf20Sopenharmony_ci	stxa		%o1, [%i0 + 0x08] %asi
4278c2ecf20Sopenharmony_ci	ldda		[%i1 + 0x20] %asi, %i2	/* %i2/%i3 = src1 + 0x20 */
4288c2ecf20Sopenharmony_ci	ldda		[%l7 + 0x20] %asi, %g2	/* %g2/%g3 = src2 + 0x20 */
4298c2ecf20Sopenharmony_ci	ldda		[%i0 + 0x20] %asi, %o0	/* %o0/%o1 = dest + 0x20 */
4308c2ecf20Sopenharmony_ci	xor		%l0, %i4, %l0
4318c2ecf20Sopenharmony_ci	xor		%l1, %i5, %l1
4328c2ecf20Sopenharmony_ci	xor		%o2, %l0, %o2
4338c2ecf20Sopenharmony_ci	xor		%o3, %l1, %o3
4348c2ecf20Sopenharmony_ci	stxa		%o2, [%i0 + 0x10] %asi
4358c2ecf20Sopenharmony_ci	stxa		%o3, [%i0 + 0x18] %asi
4368c2ecf20Sopenharmony_ci	ldda		[%i1 + 0x30] %asi, %i4	/* %i4/%i5 = src1 + 0x30 */
4378c2ecf20Sopenharmony_ci	ldda		[%l7 + 0x30] %asi, %l0	/* %l0/%l1 = src2 + 0x30 */
4388c2ecf20Sopenharmony_ci	ldda		[%i0 + 0x30] %asi, %o2	/* %o2/%o3 = dest + 0x30 */
4398c2ecf20Sopenharmony_ci	prefetch	[%i1 + 0x40], #one_read
4408c2ecf20Sopenharmony_ci	prefetch	[%l7 + 0x40], #one_read
4418c2ecf20Sopenharmony_ci	prefetch	[%i0 + 0x40], #n_writes
4428c2ecf20Sopenharmony_ci	xor		%g2, %i2, %g2
4438c2ecf20Sopenharmony_ci	xor		%g3, %i3, %g3
4448c2ecf20Sopenharmony_ci	xor		%o0, %g2, %o0
4458c2ecf20Sopenharmony_ci	xor		%o1, %g3, %o1
4468c2ecf20Sopenharmony_ci	stxa		%o0, [%i0 + 0x20] %asi
4478c2ecf20Sopenharmony_ci	stxa		%o1, [%i0 + 0x28] %asi
4488c2ecf20Sopenharmony_ci	xor		%l0, %i4, %l0
4498c2ecf20Sopenharmony_ci	xor		%l1, %i5, %l1
4508c2ecf20Sopenharmony_ci	xor		%o2, %l0, %o2
4518c2ecf20Sopenharmony_ci	xor		%o3, %l1, %o3
4528c2ecf20Sopenharmony_ci	stxa		%o2, [%i0 + 0x30] %asi
4538c2ecf20Sopenharmony_ci	stxa		%o3, [%i0 + 0x38] %asi
4548c2ecf20Sopenharmony_ci	add		%i0, 0x40, %i0
4558c2ecf20Sopenharmony_ci	add		%i1, 0x40, %i1
4568c2ecf20Sopenharmony_ci	subcc		%g1, 1, %g1
4578c2ecf20Sopenharmony_ci	bne,pt		%xcc, 1b
4588c2ecf20Sopenharmony_ci	 add		%l7, 0x40, %l7
4598c2ecf20Sopenharmony_ci	membar		#Sync
4608c2ecf20Sopenharmony_ci	wr		%g7, 0x0, %asi
4618c2ecf20Sopenharmony_ci	ret
4628c2ecf20Sopenharmony_ci	 restore
4638c2ecf20Sopenharmony_ciENDPROC(xor_niagara_3)
4648c2ecf20Sopenharmony_ciEXPORT_SYMBOL(xor_niagara_3)
4658c2ecf20Sopenharmony_ci
4668c2ecf20Sopenharmony_ciENTRY(xor_niagara_4) /* %o0=bytes, %o1=dest, %o2=src1, %o3=src2, %o4=src3 */
4678c2ecf20Sopenharmony_ci	save		%sp, -192, %sp
4688c2ecf20Sopenharmony_ci	prefetch	[%i1], #n_writes
4698c2ecf20Sopenharmony_ci	prefetch	[%i2], #one_read
4708c2ecf20Sopenharmony_ci	prefetch	[%i3], #one_read
4718c2ecf20Sopenharmony_ci	prefetch	[%i4], #one_read
4728c2ecf20Sopenharmony_ci	rd		%asi, %g7
4738c2ecf20Sopenharmony_ci	wr		%g0, ASI_BLK_INIT_QUAD_LDD_P, %asi
4748c2ecf20Sopenharmony_ci	srlx		%i0, 6, %g1
4758c2ecf20Sopenharmony_ci	mov		%i1, %i0
4768c2ecf20Sopenharmony_ci	mov		%i2, %i1
4778c2ecf20Sopenharmony_ci	mov		%i3, %l7
4788c2ecf20Sopenharmony_ci	mov		%i4, %l6
4798c2ecf20Sopenharmony_ci1:	ldda		[%i1 + 0x00] %asi, %i2	/* %i2/%i3 = src1 + 0x00 */
4808c2ecf20Sopenharmony_ci	ldda		[%l7 + 0x00] %asi, %i4	/* %i4/%i5 = src2 + 0x00 */
4818c2ecf20Sopenharmony_ci	ldda		[%l6 + 0x00] %asi, %g2	/* %g2/%g3 = src3 + 0x00 */
4828c2ecf20Sopenharmony_ci	ldda		[%i0 + 0x00] %asi, %l0	/* %l0/%l1 = dest + 0x00 */
4838c2ecf20Sopenharmony_ci	xor		%i4, %i2, %i4
4848c2ecf20Sopenharmony_ci	xor		%i5, %i3, %i5
4858c2ecf20Sopenharmony_ci	ldda		[%i1 + 0x10] %asi, %i2	/* %i2/%i3 = src1 + 0x10 */
4868c2ecf20Sopenharmony_ci	xor		%g2, %i4, %g2
4878c2ecf20Sopenharmony_ci	xor		%g3, %i5, %g3
4888c2ecf20Sopenharmony_ci	ldda		[%l7 + 0x10] %asi, %i4	/* %i4/%i5 = src2 + 0x10 */
4898c2ecf20Sopenharmony_ci	xor		%l0, %g2, %l0
4908c2ecf20Sopenharmony_ci	xor		%l1, %g3, %l1
4918c2ecf20Sopenharmony_ci	stxa		%l0, [%i0 + 0x00] %asi
4928c2ecf20Sopenharmony_ci	stxa		%l1, [%i0 + 0x08] %asi
4938c2ecf20Sopenharmony_ci	ldda		[%l6 + 0x10] %asi, %g2	/* %g2/%g3 = src3 + 0x10 */
4948c2ecf20Sopenharmony_ci	ldda		[%i0 + 0x10] %asi, %l0	/* %l0/%l1 = dest + 0x10 */
4958c2ecf20Sopenharmony_ci
4968c2ecf20Sopenharmony_ci	xor		%i4, %i2, %i4
4978c2ecf20Sopenharmony_ci	xor		%i5, %i3, %i5
4988c2ecf20Sopenharmony_ci	ldda		[%i1 + 0x20] %asi, %i2	/* %i2/%i3 = src1 + 0x20 */
4998c2ecf20Sopenharmony_ci	xor		%g2, %i4, %g2
5008c2ecf20Sopenharmony_ci	xor		%g3, %i5, %g3
5018c2ecf20Sopenharmony_ci	ldda		[%l7 + 0x20] %asi, %i4	/* %i4/%i5 = src2 + 0x20 */
5028c2ecf20Sopenharmony_ci	xor		%l0, %g2, %l0
5038c2ecf20Sopenharmony_ci	xor		%l1, %g3, %l1
5048c2ecf20Sopenharmony_ci	stxa		%l0, [%i0 + 0x10] %asi
5058c2ecf20Sopenharmony_ci	stxa		%l1, [%i0 + 0x18] %asi
5068c2ecf20Sopenharmony_ci	ldda		[%l6 + 0x20] %asi, %g2	/* %g2/%g3 = src3 + 0x20 */
5078c2ecf20Sopenharmony_ci	ldda		[%i0 + 0x20] %asi, %l0	/* %l0/%l1 = dest + 0x20 */
5088c2ecf20Sopenharmony_ci
5098c2ecf20Sopenharmony_ci	xor		%i4, %i2, %i4
5108c2ecf20Sopenharmony_ci	xor		%i5, %i3, %i5
5118c2ecf20Sopenharmony_ci	ldda		[%i1 + 0x30] %asi, %i2	/* %i2/%i3 = src1 + 0x30 */
5128c2ecf20Sopenharmony_ci	xor		%g2, %i4, %g2
5138c2ecf20Sopenharmony_ci	xor		%g3, %i5, %g3
5148c2ecf20Sopenharmony_ci	ldda		[%l7 + 0x30] %asi, %i4	/* %i4/%i5 = src2 + 0x30 */
5158c2ecf20Sopenharmony_ci	xor		%l0, %g2, %l0
5168c2ecf20Sopenharmony_ci	xor		%l1, %g3, %l1
5178c2ecf20Sopenharmony_ci	stxa		%l0, [%i0 + 0x20] %asi
5188c2ecf20Sopenharmony_ci	stxa		%l1, [%i0 + 0x28] %asi
5198c2ecf20Sopenharmony_ci	ldda		[%l6 + 0x30] %asi, %g2	/* %g2/%g3 = src3 + 0x30 */
5208c2ecf20Sopenharmony_ci	ldda		[%i0 + 0x30] %asi, %l0	/* %l0/%l1 = dest + 0x30 */
5218c2ecf20Sopenharmony_ci
5228c2ecf20Sopenharmony_ci	prefetch	[%i1 + 0x40], #one_read
5238c2ecf20Sopenharmony_ci	prefetch	[%l7 + 0x40], #one_read
5248c2ecf20Sopenharmony_ci	prefetch	[%l6 + 0x40], #one_read
5258c2ecf20Sopenharmony_ci	prefetch	[%i0 + 0x40], #n_writes
5268c2ecf20Sopenharmony_ci
5278c2ecf20Sopenharmony_ci	xor		%i4, %i2, %i4
5288c2ecf20Sopenharmony_ci	xor		%i5, %i3, %i5
5298c2ecf20Sopenharmony_ci	xor		%g2, %i4, %g2
5308c2ecf20Sopenharmony_ci	xor		%g3, %i5, %g3
5318c2ecf20Sopenharmony_ci	xor		%l0, %g2, %l0
5328c2ecf20Sopenharmony_ci	xor		%l1, %g3, %l1
5338c2ecf20Sopenharmony_ci	stxa		%l0, [%i0 + 0x30] %asi
5348c2ecf20Sopenharmony_ci	stxa		%l1, [%i0 + 0x38] %asi
5358c2ecf20Sopenharmony_ci
5368c2ecf20Sopenharmony_ci	add		%i0, 0x40, %i0
5378c2ecf20Sopenharmony_ci	add		%i1, 0x40, %i1
5388c2ecf20Sopenharmony_ci	add		%l7, 0x40, %l7
5398c2ecf20Sopenharmony_ci	subcc		%g1, 1, %g1
5408c2ecf20Sopenharmony_ci	bne,pt		%xcc, 1b
5418c2ecf20Sopenharmony_ci	 add		%l6, 0x40, %l6
5428c2ecf20Sopenharmony_ci	membar		#Sync
5438c2ecf20Sopenharmony_ci	wr		%g7, 0x0, %asi
5448c2ecf20Sopenharmony_ci	ret
5458c2ecf20Sopenharmony_ci	 restore
5468c2ecf20Sopenharmony_ciENDPROC(xor_niagara_4)
5478c2ecf20Sopenharmony_ciEXPORT_SYMBOL(xor_niagara_4)
5488c2ecf20Sopenharmony_ci
5498c2ecf20Sopenharmony_ciENTRY(xor_niagara_5) /* %o0=bytes, %o1=dest, %o2=src1, %o3=src2, %o4=src3, %o5=src4 */
5508c2ecf20Sopenharmony_ci	save		%sp, -192, %sp
5518c2ecf20Sopenharmony_ci	prefetch	[%i1], #n_writes
5528c2ecf20Sopenharmony_ci	prefetch	[%i2], #one_read
5538c2ecf20Sopenharmony_ci	prefetch	[%i3], #one_read
5548c2ecf20Sopenharmony_ci	prefetch	[%i4], #one_read
5558c2ecf20Sopenharmony_ci	prefetch	[%i5], #one_read
5568c2ecf20Sopenharmony_ci	rd		%asi, %g7
5578c2ecf20Sopenharmony_ci	wr		%g0, ASI_BLK_INIT_QUAD_LDD_P, %asi
5588c2ecf20Sopenharmony_ci	srlx		%i0, 6, %g1
5598c2ecf20Sopenharmony_ci	mov		%i1, %i0
5608c2ecf20Sopenharmony_ci	mov		%i2, %i1
5618c2ecf20Sopenharmony_ci	mov		%i3, %l7
5628c2ecf20Sopenharmony_ci	mov		%i4, %l6
5638c2ecf20Sopenharmony_ci	mov		%i5, %l5
5648c2ecf20Sopenharmony_ci1:	ldda		[%i1 + 0x00] %asi, %i2	/* %i2/%i3 = src1 + 0x00 */
5658c2ecf20Sopenharmony_ci	ldda		[%l7 + 0x00] %asi, %i4	/* %i4/%i5 = src2 + 0x00 */
5668c2ecf20Sopenharmony_ci	ldda		[%l6 + 0x00] %asi, %g2	/* %g2/%g3 = src3 + 0x00 */
5678c2ecf20Sopenharmony_ci	ldda		[%l5 + 0x00] %asi, %l0	/* %l0/%l1 = src4 + 0x00 */
5688c2ecf20Sopenharmony_ci	ldda		[%i0 + 0x00] %asi, %l2	/* %l2/%l3 = dest + 0x00 */
5698c2ecf20Sopenharmony_ci	xor		%i4, %i2, %i4
5708c2ecf20Sopenharmony_ci	xor		%i5, %i3, %i5
5718c2ecf20Sopenharmony_ci	ldda		[%i1 + 0x10] %asi, %i2	/* %i2/%i3 = src1 + 0x10 */
5728c2ecf20Sopenharmony_ci	xor		%g2, %i4, %g2
5738c2ecf20Sopenharmony_ci	xor		%g3, %i5, %g3
5748c2ecf20Sopenharmony_ci	ldda		[%l7 + 0x10] %asi, %i4	/* %i4/%i5 = src2 + 0x10 */
5758c2ecf20Sopenharmony_ci	xor		%l0, %g2, %l0
5768c2ecf20Sopenharmony_ci	xor		%l1, %g3, %l1
5778c2ecf20Sopenharmony_ci	ldda		[%l6 + 0x10] %asi, %g2	/* %g2/%g3 = src3 + 0x10 */
5788c2ecf20Sopenharmony_ci	xor		%l2, %l0, %l2
5798c2ecf20Sopenharmony_ci	xor		%l3, %l1, %l3
5808c2ecf20Sopenharmony_ci	stxa		%l2, [%i0 + 0x00] %asi
5818c2ecf20Sopenharmony_ci	stxa		%l3, [%i0 + 0x08] %asi
5828c2ecf20Sopenharmony_ci	ldda		[%l5 + 0x10] %asi, %l0	/* %l0/%l1 = src4 + 0x10 */
5838c2ecf20Sopenharmony_ci	ldda		[%i0 + 0x10] %asi, %l2	/* %l2/%l3 = dest + 0x10 */
5848c2ecf20Sopenharmony_ci
5858c2ecf20Sopenharmony_ci	xor		%i4, %i2, %i4
5868c2ecf20Sopenharmony_ci	xor		%i5, %i3, %i5
5878c2ecf20Sopenharmony_ci	ldda		[%i1 + 0x20] %asi, %i2	/* %i2/%i3 = src1 + 0x20 */
5888c2ecf20Sopenharmony_ci	xor		%g2, %i4, %g2
5898c2ecf20Sopenharmony_ci	xor		%g3, %i5, %g3
5908c2ecf20Sopenharmony_ci	ldda		[%l7 + 0x20] %asi, %i4	/* %i4/%i5 = src2 + 0x20 */
5918c2ecf20Sopenharmony_ci	xor		%l0, %g2, %l0
5928c2ecf20Sopenharmony_ci	xor		%l1, %g3, %l1
5938c2ecf20Sopenharmony_ci	ldda		[%l6 + 0x20] %asi, %g2	/* %g2/%g3 = src3 + 0x20 */
5948c2ecf20Sopenharmony_ci	xor		%l2, %l0, %l2
5958c2ecf20Sopenharmony_ci	xor		%l3, %l1, %l3
5968c2ecf20Sopenharmony_ci	stxa		%l2, [%i0 + 0x10] %asi
5978c2ecf20Sopenharmony_ci	stxa		%l3, [%i0 + 0x18] %asi
5988c2ecf20Sopenharmony_ci	ldda		[%l5 + 0x20] %asi, %l0	/* %l0/%l1 = src4 + 0x20 */
5998c2ecf20Sopenharmony_ci	ldda		[%i0 + 0x20] %asi, %l2	/* %l2/%l3 = dest + 0x20 */
6008c2ecf20Sopenharmony_ci
6018c2ecf20Sopenharmony_ci	xor		%i4, %i2, %i4
6028c2ecf20Sopenharmony_ci	xor		%i5, %i3, %i5
6038c2ecf20Sopenharmony_ci	ldda		[%i1 + 0x30] %asi, %i2	/* %i2/%i3 = src1 + 0x30 */
6048c2ecf20Sopenharmony_ci	xor		%g2, %i4, %g2
6058c2ecf20Sopenharmony_ci	xor		%g3, %i5, %g3
6068c2ecf20Sopenharmony_ci	ldda		[%l7 + 0x30] %asi, %i4	/* %i4/%i5 = src2 + 0x30 */
6078c2ecf20Sopenharmony_ci	xor		%l0, %g2, %l0
6088c2ecf20Sopenharmony_ci	xor		%l1, %g3, %l1
6098c2ecf20Sopenharmony_ci	ldda		[%l6 + 0x30] %asi, %g2	/* %g2/%g3 = src3 + 0x30 */
6108c2ecf20Sopenharmony_ci	xor		%l2, %l0, %l2
6118c2ecf20Sopenharmony_ci	xor		%l3, %l1, %l3
6128c2ecf20Sopenharmony_ci	stxa		%l2, [%i0 + 0x20] %asi
6138c2ecf20Sopenharmony_ci	stxa		%l3, [%i0 + 0x28] %asi
6148c2ecf20Sopenharmony_ci	ldda		[%l5 + 0x30] %asi, %l0	/* %l0/%l1 = src4 + 0x30 */
6158c2ecf20Sopenharmony_ci	ldda		[%i0 + 0x30] %asi, %l2	/* %l2/%l3 = dest + 0x30 */
6168c2ecf20Sopenharmony_ci
6178c2ecf20Sopenharmony_ci	prefetch	[%i1 + 0x40], #one_read
6188c2ecf20Sopenharmony_ci	prefetch	[%l7 + 0x40], #one_read
6198c2ecf20Sopenharmony_ci	prefetch	[%l6 + 0x40], #one_read
6208c2ecf20Sopenharmony_ci	prefetch	[%l5 + 0x40], #one_read
6218c2ecf20Sopenharmony_ci	prefetch	[%i0 + 0x40], #n_writes
6228c2ecf20Sopenharmony_ci
6238c2ecf20Sopenharmony_ci	xor		%i4, %i2, %i4
6248c2ecf20Sopenharmony_ci	xor		%i5, %i3, %i5
6258c2ecf20Sopenharmony_ci	xor		%g2, %i4, %g2
6268c2ecf20Sopenharmony_ci	xor		%g3, %i5, %g3
6278c2ecf20Sopenharmony_ci	xor		%l0, %g2, %l0
6288c2ecf20Sopenharmony_ci	xor		%l1, %g3, %l1
6298c2ecf20Sopenharmony_ci	xor		%l2, %l0, %l2
6308c2ecf20Sopenharmony_ci	xor		%l3, %l1, %l3
6318c2ecf20Sopenharmony_ci	stxa		%l2, [%i0 + 0x30] %asi
6328c2ecf20Sopenharmony_ci	stxa		%l3, [%i0 + 0x38] %asi
6338c2ecf20Sopenharmony_ci
6348c2ecf20Sopenharmony_ci	add		%i0, 0x40, %i0
6358c2ecf20Sopenharmony_ci	add		%i1, 0x40, %i1
6368c2ecf20Sopenharmony_ci	add		%l7, 0x40, %l7
6378c2ecf20Sopenharmony_ci	add		%l6, 0x40, %l6
6388c2ecf20Sopenharmony_ci	subcc		%g1, 1, %g1
6398c2ecf20Sopenharmony_ci	bne,pt		%xcc, 1b
6408c2ecf20Sopenharmony_ci	 add		%l5, 0x40, %l5
6418c2ecf20Sopenharmony_ci	membar		#Sync
6428c2ecf20Sopenharmony_ci	wr		%g7, 0x0, %asi
6438c2ecf20Sopenharmony_ci	ret
6448c2ecf20Sopenharmony_ci	 restore
6458c2ecf20Sopenharmony_ciENDPROC(xor_niagara_5)
6468c2ecf20Sopenharmony_ciEXPORT_SYMBOL(xor_niagara_5)
647