1033bee3eSChristoph Hellwig // SPDX-License-Identifier: GPL-2.0-or-later 2033bee3eSChristoph Hellwig /* 3033bee3eSChristoph Hellwig * LoongArch SIMD XOR operations 4033bee3eSChristoph Hellwig * 5033bee3eSChristoph Hellwig * Copyright (C) 2023 WANG Xuerui <git@xen0n.name> 6033bee3eSChristoph Hellwig */ 7033bee3eSChristoph Hellwig 8033bee3eSChristoph Hellwig #include <linux/sched.h> 9033bee3eSChristoph Hellwig #include <asm/fpu.h> 10e20043b4SChristoph Hellwig #include "xor_impl.h" 11e20043b4SChristoph Hellwig #include "xor_arch.h" 12033bee3eSChristoph Hellwig #include "xor_simd.h" 13033bee3eSChristoph Hellwig 14033bee3eSChristoph Hellwig #define MAKE_XOR_GLUES(flavor) \ 15*80dcf0a7SChristoph Hellwig DO_XOR_BLOCKS(flavor##_inner, __xor_##flavor##_2, __xor_##flavor##_3, \ 16*80dcf0a7SChristoph Hellwig __xor_##flavor##_4, __xor_##flavor##_5); \ 17*80dcf0a7SChristoph Hellwig \ 18*80dcf0a7SChristoph Hellwig static void xor_gen_##flavor(void *dest, void **srcs, unsigned int src_cnt, \ 19*80dcf0a7SChristoph Hellwig unsigned int bytes) \ 20*80dcf0a7SChristoph Hellwig { \ 21*80dcf0a7SChristoph Hellwig kernel_fpu_begin(); \ 22*80dcf0a7SChristoph Hellwig xor_gen_##flavor##_inner(dest, srcs, src_cnt, bytes); \ 23*80dcf0a7SChristoph Hellwig kernel_fpu_end(); \ 24*80dcf0a7SChristoph Hellwig } \ 25033bee3eSChristoph Hellwig \ 26033bee3eSChristoph Hellwig struct xor_block_template xor_block_##flavor = { \ 27033bee3eSChristoph Hellwig .name = __stringify(flavor), \ 28*80dcf0a7SChristoph Hellwig .xor_gen = xor_gen_##flavor \ 29033bee3eSChristoph Hellwig } 30033bee3eSChristoph Hellwig 31033bee3eSChristoph Hellwig #ifdef CONFIG_CPU_HAS_LSX 32033bee3eSChristoph Hellwig MAKE_XOR_GLUES(lsx); 33033bee3eSChristoph Hellwig #endif /* CONFIG_CPU_HAS_LSX */ 34033bee3eSChristoph Hellwig 35033bee3eSChristoph Hellwig #ifdef CONFIG_CPU_HAS_LASX 36033bee3eSChristoph Hellwig MAKE_XOR_GLUES(lasx); 37033bee3eSChristoph Hellwig #endif /* CONFIG_CPU_HAS_LASX */ 38