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