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) \ 15void 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} \ 22EXPORT_SYMBOL_GPL(xor_##flavor##_2) 23 24#define MAKE_XOR_GLUE_3(flavor) \ 25void 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} \ 32EXPORT_SYMBOL_GPL(xor_##flavor##_3) 33 34#define MAKE_XOR_GLUE_4(flavor) \ 35void 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} \ 43EXPORT_SYMBOL_GPL(xor_##flavor##_4) 44 45#define MAKE_XOR_GLUE_5(flavor) \ 46void 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} \ 54EXPORT_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 63MAKE_XOR_GLUES(lsx); 64#endif 65 66#ifdef CONFIG_CPU_HAS_LASX 67MAKE_XOR_GLUES(lasx); 68#endif 69