| /* SPDX-License-Identifier: GPL-2.0-or-later */ | |
| /* | |
| * Copyright (C) 2021 SiFive | |
| */ | |
| #include <linux/linkage.h> | |
| #include <linux/export.h> | |
| #include <asm/asm.h> | |
| SYM_FUNC_START(xor_regs_2_) | |
| vsetvli a3, a0, e8, m8, ta, ma | |
| vle8.v v0, (a1) | |
| vle8.v v8, (a2) | |
| sub a0, a0, a3 | |
| vxor.vv v16, v0, v8 | |
| add a2, a2, a3 | |
| vse8.v v16, (a1) | |
| add a1, a1, a3 | |
| bnez a0, xor_regs_2_ | |
| ret | |
| SYM_FUNC_END(xor_regs_2_) | |
| EXPORT_SYMBOL(xor_regs_2_) | |
| SYM_FUNC_START(xor_regs_3_) | |
| vsetvli a4, a0, e8, m8, ta, ma | |
| vle8.v v0, (a1) | |
| vle8.v v8, (a2) | |
| sub a0, a0, a4 | |
| vxor.vv v0, v0, v8 | |
| vle8.v v16, (a3) | |
| add a2, a2, a4 | |
| vxor.vv v16, v0, v16 | |
| add a3, a3, a4 | |
| vse8.v v16, (a1) | |
| add a1, a1, a4 | |
| bnez a0, xor_regs_3_ | |
| ret | |
| SYM_FUNC_END(xor_regs_3_) | |
| EXPORT_SYMBOL(xor_regs_3_) | |
| SYM_FUNC_START(xor_regs_4_) | |
| vsetvli a5, a0, e8, m8, ta, ma | |
| vle8.v v0, (a1) | |
| vle8.v v8, (a2) | |
| sub a0, a0, a5 | |
| vxor.vv v0, v0, v8 | |
| vle8.v v16, (a3) | |
| add a2, a2, a5 | |
| vxor.vv v0, v0, v16 | |
| vle8.v v24, (a4) | |
| add a3, a3, a5 | |
| vxor.vv v16, v0, v24 | |
| add a4, a4, a5 | |
| vse8.v v16, (a1) | |
| add a1, a1, a5 | |
| bnez a0, xor_regs_4_ | |
| ret | |
| SYM_FUNC_END(xor_regs_4_) | |
| EXPORT_SYMBOL(xor_regs_4_) | |
| SYM_FUNC_START(xor_regs_5_) | |
| vsetvli a6, a0, e8, m8, ta, ma | |
| vle8.v v0, (a1) | |
| vle8.v v8, (a2) | |
| sub a0, a0, a6 | |
| vxor.vv v0, v0, v8 | |
| vle8.v v16, (a3) | |
| add a2, a2, a6 | |
| vxor.vv v0, v0, v16 | |
| vle8.v v24, (a4) | |
| add a3, a3, a6 | |
| vxor.vv v0, v0, v24 | |
| vle8.v v8, (a5) | |
| add a4, a4, a6 | |
| vxor.vv v16, v0, v8 | |
| add a5, a5, a6 | |
| vse8.v v16, (a1) | |
| add a1, a1, a6 | |
| bnez a0, xor_regs_5_ | |
| ret | |
| SYM_FUNC_END(xor_regs_5_) | |
| EXPORT_SYMBOL(xor_regs_5_) |