| 1 | // SPDX-License-Identifier: GPL-2.0 |
| 2 | |
| 3 | #include <linux/linkage.h> |
| 4 | #include <asm/assembler.h> |
| 5 | |
| 6 | .irp b, 0, 1, 2, 3, 4, 5, 6, 7, 8 |
| 7 | .set .Lv\b\().4s, \b |
| 8 | .endr |
| 9 | |
| 10 | .macro sm4e, rd, rn |
| 11 | .inst 0xcec08400 | .L\rd | (.L\rn << 5) |
| 12 | .endm |
| 13 | |
| 14 | /* |
| 15 | * void sm4_ce_do_crypt(const u32 *rk, u32 *out, const u32 *in); |
| 16 | */ |
| 17 | .text |
| 18 | SYM_FUNC_START(sm4_ce_do_crypt) |
| 19 | ld1 {v8.4s}, [x2] |
| 20 | ld1 {v0.4s-v3.4s}, [x0], #64 |
| 21 | CPU_LE( rev32 v8.16b, v8.16b ) |
| 22 | ld1 {v4.4s-v7.4s}, [x0] |
| 23 | sm4e v8.4s, v0.4s |
| 24 | sm4e v8.4s, v1.4s |
| 25 | sm4e v8.4s, v2.4s |
| 26 | sm4e v8.4s, v3.4s |
| 27 | sm4e v8.4s, v4.4s |
| 28 | sm4e v8.4s, v5.4s |
| 29 | sm4e v8.4s, v6.4s |
| 30 | sm4e v8.4s, v7.4s |
| 31 | rev64 v8.4s, v8.4s |
| 32 | ext v8.16b, v8.16b, v8.16b, #8 |
| 33 | CPU_LE( rev32 v8.16b, v8.16b ) |
| 34 | st1 {v8.4s}, [x1] |
| 35 | ret |
| 36 | SYM_FUNC_END(sm4_ce_do_crypt) |
| 37 | |