162306a36Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0-or-later */ 262306a36Sopenharmony_ci/* 362306a36Sopenharmony_ci * SM4 helper macros for Crypto Extensions 462306a36Sopenharmony_ci * Copyright (C) 2022 Tianjia Zhang <tianjia.zhang@linux.alibaba.com> 562306a36Sopenharmony_ci */ 662306a36Sopenharmony_ci 762306a36Sopenharmony_ci#define SM4_PREPARE(ptr) \ 862306a36Sopenharmony_ci ld1 {v24.16b-v27.16b}, [ptr], #64; \ 962306a36Sopenharmony_ci ld1 {v28.16b-v31.16b}, [ptr]; 1062306a36Sopenharmony_ci 1162306a36Sopenharmony_ci#define SM4_CRYPT_BLK_BE(b0) \ 1262306a36Sopenharmony_ci sm4e b0.4s, v24.4s; \ 1362306a36Sopenharmony_ci sm4e b0.4s, v25.4s; \ 1462306a36Sopenharmony_ci sm4e b0.4s, v26.4s; \ 1562306a36Sopenharmony_ci sm4e b0.4s, v27.4s; \ 1662306a36Sopenharmony_ci sm4e b0.4s, v28.4s; \ 1762306a36Sopenharmony_ci sm4e b0.4s, v29.4s; \ 1862306a36Sopenharmony_ci sm4e b0.4s, v30.4s; \ 1962306a36Sopenharmony_ci sm4e b0.4s, v31.4s; \ 2062306a36Sopenharmony_ci rev64 b0.4s, b0.4s; \ 2162306a36Sopenharmony_ci ext b0.16b, b0.16b, b0.16b, #8; \ 2262306a36Sopenharmony_ci rev32 b0.16b, b0.16b; 2362306a36Sopenharmony_ci 2462306a36Sopenharmony_ci#define SM4_CRYPT_BLK(b0) \ 2562306a36Sopenharmony_ci rev32 b0.16b, b0.16b; \ 2662306a36Sopenharmony_ci SM4_CRYPT_BLK_BE(b0); 2762306a36Sopenharmony_ci 2862306a36Sopenharmony_ci#define SM4_CRYPT_BLK2_BE(b0, b1) \ 2962306a36Sopenharmony_ci sm4e b0.4s, v24.4s; \ 3062306a36Sopenharmony_ci sm4e b1.4s, v24.4s; \ 3162306a36Sopenharmony_ci sm4e b0.4s, v25.4s; \ 3262306a36Sopenharmony_ci sm4e b1.4s, v25.4s; \ 3362306a36Sopenharmony_ci sm4e b0.4s, v26.4s; \ 3462306a36Sopenharmony_ci sm4e b1.4s, v26.4s; \ 3562306a36Sopenharmony_ci sm4e b0.4s, v27.4s; \ 3662306a36Sopenharmony_ci sm4e b1.4s, v27.4s; \ 3762306a36Sopenharmony_ci sm4e b0.4s, v28.4s; \ 3862306a36Sopenharmony_ci sm4e b1.4s, v28.4s; \ 3962306a36Sopenharmony_ci sm4e b0.4s, v29.4s; \ 4062306a36Sopenharmony_ci sm4e b1.4s, v29.4s; \ 4162306a36Sopenharmony_ci sm4e b0.4s, v30.4s; \ 4262306a36Sopenharmony_ci sm4e b1.4s, v30.4s; \ 4362306a36Sopenharmony_ci sm4e b0.4s, v31.4s; \ 4462306a36Sopenharmony_ci sm4e b1.4s, v31.4s; \ 4562306a36Sopenharmony_ci rev64 b0.4s, b0.4s; \ 4662306a36Sopenharmony_ci rev64 b1.4s, b1.4s; \ 4762306a36Sopenharmony_ci ext b0.16b, b0.16b, b0.16b, #8; \ 4862306a36Sopenharmony_ci ext b1.16b, b1.16b, b1.16b, #8; \ 4962306a36Sopenharmony_ci rev32 b0.16b, b0.16b; \ 5062306a36Sopenharmony_ci rev32 b1.16b, b1.16b; \ 5162306a36Sopenharmony_ci 5262306a36Sopenharmony_ci#define SM4_CRYPT_BLK2(b0, b1) \ 5362306a36Sopenharmony_ci rev32 b0.16b, b0.16b; \ 5462306a36Sopenharmony_ci rev32 b1.16b, b1.16b; \ 5562306a36Sopenharmony_ci SM4_CRYPT_BLK2_BE(b0, b1); 5662306a36Sopenharmony_ci 5762306a36Sopenharmony_ci#define SM4_CRYPT_BLK4_BE(b0, b1, b2, b3) \ 5862306a36Sopenharmony_ci sm4e b0.4s, v24.4s; \ 5962306a36Sopenharmony_ci sm4e b1.4s, v24.4s; \ 6062306a36Sopenharmony_ci sm4e b2.4s, v24.4s; \ 6162306a36Sopenharmony_ci sm4e b3.4s, v24.4s; \ 6262306a36Sopenharmony_ci sm4e b0.4s, v25.4s; \ 6362306a36Sopenharmony_ci sm4e b1.4s, v25.4s; \ 6462306a36Sopenharmony_ci sm4e b2.4s, v25.4s; \ 6562306a36Sopenharmony_ci sm4e b3.4s, v25.4s; \ 6662306a36Sopenharmony_ci sm4e b0.4s, v26.4s; \ 6762306a36Sopenharmony_ci sm4e b1.4s, v26.4s; \ 6862306a36Sopenharmony_ci sm4e b2.4s, v26.4s; \ 6962306a36Sopenharmony_ci sm4e b3.4s, v26.4s; \ 7062306a36Sopenharmony_ci sm4e b0.4s, v27.4s; \ 7162306a36Sopenharmony_ci sm4e b1.4s, v27.4s; \ 7262306a36Sopenharmony_ci sm4e b2.4s, v27.4s; \ 7362306a36Sopenharmony_ci sm4e b3.4s, v27.4s; \ 7462306a36Sopenharmony_ci sm4e b0.4s, v28.4s; \ 7562306a36Sopenharmony_ci sm4e b1.4s, v28.4s; \ 7662306a36Sopenharmony_ci sm4e b2.4s, v28.4s; \ 7762306a36Sopenharmony_ci sm4e b3.4s, v28.4s; \ 7862306a36Sopenharmony_ci sm4e b0.4s, v29.4s; \ 7962306a36Sopenharmony_ci sm4e b1.4s, v29.4s; \ 8062306a36Sopenharmony_ci sm4e b2.4s, v29.4s; \ 8162306a36Sopenharmony_ci sm4e b3.4s, v29.4s; \ 8262306a36Sopenharmony_ci sm4e b0.4s, v30.4s; \ 8362306a36Sopenharmony_ci sm4e b1.4s, v30.4s; \ 8462306a36Sopenharmony_ci sm4e b2.4s, v30.4s; \ 8562306a36Sopenharmony_ci sm4e b3.4s, v30.4s; \ 8662306a36Sopenharmony_ci sm4e b0.4s, v31.4s; \ 8762306a36Sopenharmony_ci sm4e b1.4s, v31.4s; \ 8862306a36Sopenharmony_ci sm4e b2.4s, v31.4s; \ 8962306a36Sopenharmony_ci sm4e b3.4s, v31.4s; \ 9062306a36Sopenharmony_ci rev64 b0.4s, b0.4s; \ 9162306a36Sopenharmony_ci rev64 b1.4s, b1.4s; \ 9262306a36Sopenharmony_ci rev64 b2.4s, b2.4s; \ 9362306a36Sopenharmony_ci rev64 b3.4s, b3.4s; \ 9462306a36Sopenharmony_ci ext b0.16b, b0.16b, b0.16b, #8; \ 9562306a36Sopenharmony_ci ext b1.16b, b1.16b, b1.16b, #8; \ 9662306a36Sopenharmony_ci ext b2.16b, b2.16b, b2.16b, #8; \ 9762306a36Sopenharmony_ci ext b3.16b, b3.16b, b3.16b, #8; \ 9862306a36Sopenharmony_ci rev32 b0.16b, b0.16b; \ 9962306a36Sopenharmony_ci rev32 b1.16b, b1.16b; \ 10062306a36Sopenharmony_ci rev32 b2.16b, b2.16b; \ 10162306a36Sopenharmony_ci rev32 b3.16b, b3.16b; 10262306a36Sopenharmony_ci 10362306a36Sopenharmony_ci#define SM4_CRYPT_BLK4(b0, b1, b2, b3) \ 10462306a36Sopenharmony_ci rev32 b0.16b, b0.16b; \ 10562306a36Sopenharmony_ci rev32 b1.16b, b1.16b; \ 10662306a36Sopenharmony_ci rev32 b2.16b, b2.16b; \ 10762306a36Sopenharmony_ci rev32 b3.16b, b3.16b; \ 10862306a36Sopenharmony_ci SM4_CRYPT_BLK4_BE(b0, b1, b2, b3); 10962306a36Sopenharmony_ci 11062306a36Sopenharmony_ci#define SM4_CRYPT_BLK8_BE(b0, b1, b2, b3, b4, b5, b6, b7) \ 11162306a36Sopenharmony_ci sm4e b0.4s, v24.4s; \ 11262306a36Sopenharmony_ci sm4e b1.4s, v24.4s; \ 11362306a36Sopenharmony_ci sm4e b2.4s, v24.4s; \ 11462306a36Sopenharmony_ci sm4e b3.4s, v24.4s; \ 11562306a36Sopenharmony_ci sm4e b4.4s, v24.4s; \ 11662306a36Sopenharmony_ci sm4e b5.4s, v24.4s; \ 11762306a36Sopenharmony_ci sm4e b6.4s, v24.4s; \ 11862306a36Sopenharmony_ci sm4e b7.4s, v24.4s; \ 11962306a36Sopenharmony_ci sm4e b0.4s, v25.4s; \ 12062306a36Sopenharmony_ci sm4e b1.4s, v25.4s; \ 12162306a36Sopenharmony_ci sm4e b2.4s, v25.4s; \ 12262306a36Sopenharmony_ci sm4e b3.4s, v25.4s; \ 12362306a36Sopenharmony_ci sm4e b4.4s, v25.4s; \ 12462306a36Sopenharmony_ci sm4e b5.4s, v25.4s; \ 12562306a36Sopenharmony_ci sm4e b6.4s, v25.4s; \ 12662306a36Sopenharmony_ci sm4e b7.4s, v25.4s; \ 12762306a36Sopenharmony_ci sm4e b0.4s, v26.4s; \ 12862306a36Sopenharmony_ci sm4e b1.4s, v26.4s; \ 12962306a36Sopenharmony_ci sm4e b2.4s, v26.4s; \ 13062306a36Sopenharmony_ci sm4e b3.4s, v26.4s; \ 13162306a36Sopenharmony_ci sm4e b4.4s, v26.4s; \ 13262306a36Sopenharmony_ci sm4e b5.4s, v26.4s; \ 13362306a36Sopenharmony_ci sm4e b6.4s, v26.4s; \ 13462306a36Sopenharmony_ci sm4e b7.4s, v26.4s; \ 13562306a36Sopenharmony_ci sm4e b0.4s, v27.4s; \ 13662306a36Sopenharmony_ci sm4e b1.4s, v27.4s; \ 13762306a36Sopenharmony_ci sm4e b2.4s, v27.4s; \ 13862306a36Sopenharmony_ci sm4e b3.4s, v27.4s; \ 13962306a36Sopenharmony_ci sm4e b4.4s, v27.4s; \ 14062306a36Sopenharmony_ci sm4e b5.4s, v27.4s; \ 14162306a36Sopenharmony_ci sm4e b6.4s, v27.4s; \ 14262306a36Sopenharmony_ci sm4e b7.4s, v27.4s; \ 14362306a36Sopenharmony_ci sm4e b0.4s, v28.4s; \ 14462306a36Sopenharmony_ci sm4e b1.4s, v28.4s; \ 14562306a36Sopenharmony_ci sm4e b2.4s, v28.4s; \ 14662306a36Sopenharmony_ci sm4e b3.4s, v28.4s; \ 14762306a36Sopenharmony_ci sm4e b4.4s, v28.4s; \ 14862306a36Sopenharmony_ci sm4e b5.4s, v28.4s; \ 14962306a36Sopenharmony_ci sm4e b6.4s, v28.4s; \ 15062306a36Sopenharmony_ci sm4e b7.4s, v28.4s; \ 15162306a36Sopenharmony_ci sm4e b0.4s, v29.4s; \ 15262306a36Sopenharmony_ci sm4e b1.4s, v29.4s; \ 15362306a36Sopenharmony_ci sm4e b2.4s, v29.4s; \ 15462306a36Sopenharmony_ci sm4e b3.4s, v29.4s; \ 15562306a36Sopenharmony_ci sm4e b4.4s, v29.4s; \ 15662306a36Sopenharmony_ci sm4e b5.4s, v29.4s; \ 15762306a36Sopenharmony_ci sm4e b6.4s, v29.4s; \ 15862306a36Sopenharmony_ci sm4e b7.4s, v29.4s; \ 15962306a36Sopenharmony_ci sm4e b0.4s, v30.4s; \ 16062306a36Sopenharmony_ci sm4e b1.4s, v30.4s; \ 16162306a36Sopenharmony_ci sm4e b2.4s, v30.4s; \ 16262306a36Sopenharmony_ci sm4e b3.4s, v30.4s; \ 16362306a36Sopenharmony_ci sm4e b4.4s, v30.4s; \ 16462306a36Sopenharmony_ci sm4e b5.4s, v30.4s; \ 16562306a36Sopenharmony_ci sm4e b6.4s, v30.4s; \ 16662306a36Sopenharmony_ci sm4e b7.4s, v30.4s; \ 16762306a36Sopenharmony_ci sm4e b0.4s, v31.4s; \ 16862306a36Sopenharmony_ci sm4e b1.4s, v31.4s; \ 16962306a36Sopenharmony_ci sm4e b2.4s, v31.4s; \ 17062306a36Sopenharmony_ci sm4e b3.4s, v31.4s; \ 17162306a36Sopenharmony_ci sm4e b4.4s, v31.4s; \ 17262306a36Sopenharmony_ci sm4e b5.4s, v31.4s; \ 17362306a36Sopenharmony_ci sm4e b6.4s, v31.4s; \ 17462306a36Sopenharmony_ci sm4e b7.4s, v31.4s; \ 17562306a36Sopenharmony_ci rev64 b0.4s, b0.4s; \ 17662306a36Sopenharmony_ci rev64 b1.4s, b1.4s; \ 17762306a36Sopenharmony_ci rev64 b2.4s, b2.4s; \ 17862306a36Sopenharmony_ci rev64 b3.4s, b3.4s; \ 17962306a36Sopenharmony_ci rev64 b4.4s, b4.4s; \ 18062306a36Sopenharmony_ci rev64 b5.4s, b5.4s; \ 18162306a36Sopenharmony_ci rev64 b6.4s, b6.4s; \ 18262306a36Sopenharmony_ci rev64 b7.4s, b7.4s; \ 18362306a36Sopenharmony_ci ext b0.16b, b0.16b, b0.16b, #8; \ 18462306a36Sopenharmony_ci ext b1.16b, b1.16b, b1.16b, #8; \ 18562306a36Sopenharmony_ci ext b2.16b, b2.16b, b2.16b, #8; \ 18662306a36Sopenharmony_ci ext b3.16b, b3.16b, b3.16b, #8; \ 18762306a36Sopenharmony_ci ext b4.16b, b4.16b, b4.16b, #8; \ 18862306a36Sopenharmony_ci ext b5.16b, b5.16b, b5.16b, #8; \ 18962306a36Sopenharmony_ci ext b6.16b, b6.16b, b6.16b, #8; \ 19062306a36Sopenharmony_ci ext b7.16b, b7.16b, b7.16b, #8; \ 19162306a36Sopenharmony_ci rev32 b0.16b, b0.16b; \ 19262306a36Sopenharmony_ci rev32 b1.16b, b1.16b; \ 19362306a36Sopenharmony_ci rev32 b2.16b, b2.16b; \ 19462306a36Sopenharmony_ci rev32 b3.16b, b3.16b; \ 19562306a36Sopenharmony_ci rev32 b4.16b, b4.16b; \ 19662306a36Sopenharmony_ci rev32 b5.16b, b5.16b; \ 19762306a36Sopenharmony_ci rev32 b6.16b, b6.16b; \ 19862306a36Sopenharmony_ci rev32 b7.16b, b7.16b; 19962306a36Sopenharmony_ci 20062306a36Sopenharmony_ci#define SM4_CRYPT_BLK8(b0, b1, b2, b3, b4, b5, b6, b7) \ 20162306a36Sopenharmony_ci rev32 b0.16b, b0.16b; \ 20262306a36Sopenharmony_ci rev32 b1.16b, b1.16b; \ 20362306a36Sopenharmony_ci rev32 b2.16b, b2.16b; \ 20462306a36Sopenharmony_ci rev32 b3.16b, b3.16b; \ 20562306a36Sopenharmony_ci rev32 b4.16b, b4.16b; \ 20662306a36Sopenharmony_ci rev32 b5.16b, b5.16b; \ 20762306a36Sopenharmony_ci rev32 b6.16b, b6.16b; \ 20862306a36Sopenharmony_ci rev32 b7.16b, b7.16b; \ 20962306a36Sopenharmony_ci SM4_CRYPT_BLK8_BE(b0, b1, b2, b3, b4, b5, b6, b7); 210