1 // SPDX-License-Identifier: GPL-2.0-or-later 2 /* 3 * High speed xor_block operation for RAID4/5 utilizing the 4 * UltraSparc Visual Instruction Set and Niagara block-init 5 * twin-load instructions. 6 * 7 * Copyright (C) 1997, 1999 Jakub Jelinek (jj@ultra.linux.cz) 8 * Copyright (C) 2006 David S. Miller <davem@davemloft.net> 9 */ 10 11 #include "xor_impl.h" 12 #include "xor_arch.h" 13 14 void xor_vis_2(unsigned long bytes, unsigned long * __restrict p1, 15 const unsigned long * __restrict p2); 16 void xor_vis_3(unsigned long bytes, unsigned long * __restrict p1, 17 const unsigned long * __restrict p2, 18 const unsigned long * __restrict p3); 19 void xor_vis_4(unsigned long bytes, unsigned long * __restrict p1, 20 const unsigned long * __restrict p2, 21 const unsigned long * __restrict p3, 22 const unsigned long * __restrict p4); 23 void xor_vis_5(unsigned long bytes, unsigned long * __restrict p1, 24 const unsigned long * __restrict p2, 25 const unsigned long * __restrict p3, 26 const unsigned long * __restrict p4, 27 const unsigned long * __restrict p5); 28 29 /* XXX Ugh, write cheetah versions... -DaveM */ 30 31 DO_XOR_BLOCKS(vis, xor_vis_2, xor_vis_3, xor_vis_4, xor_vis_5); 32 33 struct xor_block_template xor_block_VIS = { 34 .name = "VIS", 35 .xor_gen = xor_gen_vis, 36 }; 37 38 void xor_niagara_2(unsigned long bytes, unsigned long * __restrict p1, 39 const unsigned long * __restrict p2); 40 void xor_niagara_3(unsigned long bytes, unsigned long * __restrict p1, 41 const unsigned long * __restrict p2, 42 const unsigned long * __restrict p3); 43 void xor_niagara_4(unsigned long bytes, unsigned long * __restrict p1, 44 const unsigned long * __restrict p2, 45 const unsigned long * __restrict p3, 46 const unsigned long * __restrict p4); 47 void xor_niagara_5(unsigned long bytes, unsigned long * __restrict p1, 48 const unsigned long * __restrict p2, 49 const unsigned long * __restrict p3, 50 const unsigned long * __restrict p4, 51 const unsigned long * __restrict p5); 52 53 DO_XOR_BLOCKS(niagara, xor_niagara_2, xor_niagara_3, xor_niagara_4, 54 xor_niagara_5); 55 56 struct xor_block_template xor_block_niagara = { 57 .name = "Niagara", 58 .xor_gen = xor_gen_niagara, 59 }; 60