1 // SPDX-License-Identifier: GPL-2.0-or-later 2 /* 3 * LoongArch SIMD XOR operations 4 * 5 * Copyright (C) 2023 WANG Xuerui <git@xen0n.name> 6 */ 7 8 #include <linux/export.h> 9 #include <linux/sched.h> 10 #include <asm/fpu.h> 11 #include <asm/xor_simd.h> 12 #include "xor_simd.h" 13 14 #define MAKE_XOR_GLUE_2(flavor) \ 15 void xor_##flavor##_2(unsigned long bytes, unsigned long *p1, \ 16 unsigned long *p2) \ 17 { \ 18 kernel_fpu_begin(); \ 19 __xor_##flavor##_2(bytes, p1, p2); \ 20 kernel_fpu_end(); \ 21 } \ 22 EXPORT_SYMBOL_GPL(xor_##flavor##_2) 23 24 #define MAKE_XOR_GLUE_3(flavor) \ 25 void xor_##flavor##_3(unsigned long bytes, unsigned long *p1, \ 26 unsigned long *p2, unsigned long *p3) \ 27 { \ 28 kernel_fpu_begin(); \ 29 __xor_##flavor##_3(bytes, p1, p2, p3); \ 30 kernel_fpu_end(); \ 31 } \ 32 EXPORT_SYMBOL_GPL(xor_##flavor##_3) 33 34 #define MAKE_XOR_GLUE_4(flavor) \ 35 void xor_##flavor##_4(unsigned long bytes, unsigned long *p1, \ 36 unsigned long *p2, unsigned long *p3, \ 37 unsigned long *p4) \ 38 { \ 39 kernel_fpu_begin(); \ 40 __xor_##flavor##_4(bytes, p1, p2, p3, p4); \ 41 kernel_fpu_end(); \ 42 } \ 43 EXPORT_SYMBOL_GPL(xor_##flavor##_4) 44 45 #define MAKE_XOR_GLUE_5(flavor) \ 46 void xor_##flavor##_5(unsigned long bytes, unsigned long *p1, \ 47 unsigned long *p2, unsigned long *p3, \ 48 unsigned long *p4, unsigned long *p5) \ 49 { \ 50 kernel_fpu_begin(); \ 51 __xor_##flavor##_5(bytes, p1, p2, p3, p4, p5); \ 52 kernel_fpu_end(); \ 53 } \ 54 EXPORT_SYMBOL_GPL(xor_##flavor##_5) 55 56 #define MAKE_XOR_GLUES(flavor) \ 57 MAKE_XOR_GLUE_2(flavor); \ 58 MAKE_XOR_GLUE_3(flavor); \ 59 MAKE_XOR_GLUE_4(flavor); \ 60 MAKE_XOR_GLUE_5(flavor) 61 62 #ifdef CONFIG_CPU_HAS_LSX 63 MAKE_XOR_GLUES(lsx); 64 #endif 65 66 #ifdef CONFIG_CPU_HAS_LASX 67 MAKE_XOR_GLUES(lasx); 68 #endif 69