1/* Do not modify. This file is auto-generated from sm4-armv8.pl. */ 2// Copyright 2022-2025 The OpenSSL Project Authors. All Rights Reserved. 3// 4// Licensed under the Apache License 2.0 (the "License"). You may not use 5// this file except in compliance with the License. You can obtain a copy 6// in the file LICENSE in the source distribution or at 7// https://www.openssl.org/source/license.html 8 9// 10// This module implements support for SM4 hw support on aarch64 11// Oct 2021 12// 13 14// $output is the last argument if it looks like a file (it has an extension) 15// $flavour is the first argument if it doesn't look like a file 16#include "arm_arch.h" 17.arch armv8-a+crypto 18.text 19 20.section .rodata 21.type _sm4_v8_consts,%object 22.align 6 23_sm4_v8_consts: 24.Lck: 25.long 0x00070E15, 0x1C232A31, 0x383F464D, 0x545B6269 26.long 0x70777E85, 0x8C939AA1, 0xA8AFB6BD, 0xC4CBD2D9 27.long 0xE0E7EEF5, 0xFC030A11, 0x181F262D, 0x343B4249 28.long 0x50575E65, 0x6C737A81, 0x888F969D, 0xA4ABB2B9 29.long 0xC0C7CED5, 0xDCE3EAF1, 0xF8FF060D, 0x141B2229 30.long 0x30373E45, 0x4C535A61, 0x686F767D, 0x848B9299 31.long 0xA0A7AEB5, 0xBCC3CAD1, 0xD8DFE6ED, 0xF4FB0209 32.long 0x10171E25, 0x2C333A41, 0x484F565D, 0x646B7279 33.Lfk: 34.long 0xa3b1bac6, 0x56aa3350, 0x677d9197, 0xb27022dc 35.size _sm4_v8_consts,.-_sm4_v8_consts 36.previous 37 38.globl sm4_v8_set_encrypt_key 39.type sm4_v8_set_encrypt_key,%function 40.align 5 41sm4_v8_set_encrypt_key: 42 AARCH64_VALID_CALL_TARGET 43 ld1 {v0.4s},[x0] 44 adrp x2,.Lfk 45 add x2,x2,#:lo12:.Lfk 46 ld1 {v24.4s},[x2] 47 adrp x2,.Lck 48 add x2,x2,#:lo12:.Lck 49 ld1 {v16.4s,v17.4s,v18.4s,v19.4s},[x2],64 50#ifndef __AARCH64EB__ 51 rev32 v0.16b,v0.16b 52#endif 53 ld1 {v20.4s,v21.4s,v22.4s,v23.4s},[x2] 54 eor v0.16b,v0.16b,v24.16b; 55.inst 0xce70c800 //sm4ekey v0.4S,v0.4S,v16.4S 56.inst 0xce71c801 //sm4ekey v1.4S,v0.4S,v17.4S 57.inst 0xce72c822 //sm4ekey v2.4S,v1.4S,v18.4S 58.inst 0xce73c843 //sm4ekey v3.4S,v2.4S,v19.4S 59.inst 0xce74c864 //sm4ekey v4.4S,v3.4S,v20.4S 60 st1 {v0.4s,v1.4s,v2.4s,v3.4s},[x1],64 61.inst 0xce75c885 //sm4ekey v5.4S,v4.4S,v21.4S 62.inst 0xce76c8a6 //sm4ekey v6.4S,v5.4S,v22.4S 63.inst 0xce77c8c7 //sm4ekey v7.4S,v6.4S,v23.4S 64 st1 {v4.4s,v5.4s,v6.4s,v7.4s},[x1] 65 ret 66.size sm4_v8_set_encrypt_key,.-sm4_v8_set_encrypt_key 67.globl sm4_v8_set_decrypt_key 68.type sm4_v8_set_decrypt_key,%function 69.align 5 70sm4_v8_set_decrypt_key: 71 AARCH64_VALID_CALL_TARGET 72 ld1 {v7.4s},[x0] 73 adrp x2,.Lfk 74 add x2,x2,#:lo12:.Lfk 75 ld1 {v24.4s},[x2] 76 adrp x2,.Lck 77 add x2,x2,#:lo12:.Lck 78 ld1 {v16.4s,v17.4s,v18.4s,v19.4s},[x2],64 79#ifndef __AARCH64EB__ 80 rev32 v7.16b,v7.16b 81#endif 82 ld1 {v20.4s,v21.4s,v22.4s,v23.4s},[x2] 83 eor v7.16b, v7.16b,v24.16b; 84.inst 0xce70c8e7 //sm4ekey v7.4S,v7.4S,v16.4S 85.inst 0xce71c8e6 //sm4ekey v6.4S,v7.4S,v17.4S 86.inst 0xce72c8c5 //sm4ekey v5.4S,v6.4S,v18.4S 87 rev64 v7.4s,v7.4s 88 rev64 v6.4s,v6.4s 89 ext v7.16b,v7.16b,v7.16b,#8 90 ext v6.16b,v6.16b,v6.16b,#8 91.inst 0xce73c8a4 //sm4ekey v4.4S,v5.4S,v19.4S 92.inst 0xce74c883 //sm4ekey v3.4S,v4.4S,v20.4S 93 rev64 v5.4s,v5.4s 94 rev64 v4.4s,v4.4s 95 ext v5.16b,v5.16b,v5.16b,#8 96 ext v4.16b,v4.16b,v4.16b,#8 97.inst 0xce75c862 //sm4ekey v2.4S,v3.4S,v21.4S 98.inst 0xce76c841 //sm4ekey v1.4S,v2.4S,v22.4S 99 rev64 v3.4s,v3.4s 100 rev64 v2.4s,v2.4s 101 ext v3.16b,v3.16b,v3.16b,#8 102 ext v2.16b,v2.16b,v2.16b,#8 103.inst 0xce77c820 //sm4ekey v0.4S,v1.4S,v23.4S 104 rev64 v1.4s, v1.4s 105 rev64 v0.4s, v0.4s 106 ext v1.16b,v1.16b,v1.16b,#8 107 ext v0.16b,v0.16b,v0.16b,#8 108 st1 {v0.4s,v1.4s,v2.4s,v3.4s},[x1],64 109 st1 {v4.4s,v5.4s,v6.4s,v7.4s},[x1] 110 ret 111.size sm4_v8_set_decrypt_key,.-sm4_v8_set_decrypt_key 112.globl sm4_v8_encrypt 113.type sm4_v8_encrypt,%function 114.align 5 115sm4_v8_encrypt: 116 AARCH64_VALID_CALL_TARGET 117 ld1 {v16.4s},[x0] 118 ld1 {v0.4s,v1.4s,v2.4s,v3.4s},[x2],64 119 ld1 {v4.4s,v5.4s,v6.4s,v7.4s},[x2] 120#ifndef __AARCH64EB__ 121 rev32 v16.16b,v16.16b 122#endif 123.inst 0xcec08410 //sm4e v16.4s,v0.4s 124.inst 0xcec08430 //sm4e v16.4s,v1.4s 125.inst 0xcec08450 //sm4e v16.4s,v2.4s 126.inst 0xcec08470 //sm4e v16.4s,v3.4s 127.inst 0xcec08490 //sm4e v16.4s,v4.4s 128.inst 0xcec084b0 //sm4e v16.4s,v5.4s 129.inst 0xcec084d0 //sm4e v16.4s,v6.4s 130.inst 0xcec084f0 //sm4e v16.4s,v7.4s 131 rev64 v16.4S,v16.4S 132 ext v16.16b,v16.16b,v16.16b,#8 133#ifndef __AARCH64EB__ 134 rev32 v16.16b,v16.16b 135#endif 136 st1 {v16.4s},[x1] 137 ret 138.size sm4_v8_encrypt,.-sm4_v8_encrypt 139.globl sm4_v8_decrypt 140.type sm4_v8_decrypt,%function 141.align 5 142sm4_v8_decrypt: 143 AARCH64_VALID_CALL_TARGET 144 ld1 {v16.4s},[x0] 145 ld1 {v0.4s,v1.4s,v2.4s,v3.4s},[x2],64 146 ld1 {v4.4s,v5.4s,v6.4s,v7.4s},[x2] 147#ifndef __AARCH64EB__ 148 rev32 v16.16b,v16.16b 149#endif 150.inst 0xcec08410 //sm4e v16.4s,v0.4s 151.inst 0xcec08430 //sm4e v16.4s,v1.4s 152.inst 0xcec08450 //sm4e v16.4s,v2.4s 153.inst 0xcec08470 //sm4e v16.4s,v3.4s 154.inst 0xcec08490 //sm4e v16.4s,v4.4s 155.inst 0xcec084b0 //sm4e v16.4s,v5.4s 156.inst 0xcec084d0 //sm4e v16.4s,v6.4s 157.inst 0xcec084f0 //sm4e v16.4s,v7.4s 158 rev64 v16.4S,v16.4S 159 ext v16.16b,v16.16b,v16.16b,#8 160#ifndef __AARCH64EB__ 161 rev32 v16.16b,v16.16b 162#endif 163 st1 {v16.4s},[x1] 164 ret 165.size sm4_v8_decrypt,.-sm4_v8_decrypt 166.globl sm4_v8_ecb_encrypt 167.type sm4_v8_ecb_encrypt,%function 168.align 5 169sm4_v8_ecb_encrypt: 170 AARCH64_VALID_CALL_TARGET 171 ld1 {v0.4s,v1.4s,v2.4s,v3.4s},[x3],#64 172 ld1 {v4.4s,v5.4s,v6.4s,v7.4s},[x3] 1731: 174 cmp x2,#64 175 b.lt 1f 176 ld1 {v16.4s,v17.4s,v18.4s,v19.4s},[x0],#64 177 cmp x2,#128 178 b.lt 2f 179 ld1 {v20.4s,v21.4s,v22.4s,v23.4s},[x0],#64 180 // 8 blocks 181#ifndef __AARCH64EB__ 182 rev32 v16.16b,v16.16b 183#endif 184#ifndef __AARCH64EB__ 185 rev32 v17.16b,v17.16b 186#endif 187#ifndef __AARCH64EB__ 188 rev32 v18.16b,v18.16b 189#endif 190#ifndef __AARCH64EB__ 191 rev32 v19.16b,v19.16b 192#endif 193#ifndef __AARCH64EB__ 194 rev32 v20.16b,v20.16b 195#endif 196#ifndef __AARCH64EB__ 197 rev32 v21.16b,v21.16b 198#endif 199#ifndef __AARCH64EB__ 200 rev32 v22.16b,v22.16b 201#endif 202#ifndef __AARCH64EB__ 203 rev32 v23.16b,v23.16b 204#endif 205.inst 0xcec08410 //sm4e v16.4s,v0.4s 206.inst 0xcec08411 //sm4e v17.4s,v0.4s 207.inst 0xcec08412 //sm4e v18.4s,v0.4s 208.inst 0xcec08413 //sm4e v19.4s,v0.4s 209 210.inst 0xcec08430 //sm4e v16.4s,v1.4s 211.inst 0xcec08431 //sm4e v17.4s,v1.4s 212.inst 0xcec08432 //sm4e v18.4s,v1.4s 213.inst 0xcec08433 //sm4e v19.4s,v1.4s 214 215.inst 0xcec08450 //sm4e v16.4s,v2.4s 216.inst 0xcec08451 //sm4e v17.4s,v2.4s 217.inst 0xcec08452 //sm4e v18.4s,v2.4s 218.inst 0xcec08453 //sm4e v19.4s,v2.4s 219 220.inst 0xcec08470 //sm4e v16.4s,v3.4s 221.inst 0xcec08471 //sm4e v17.4s,v3.4s 222.inst 0xcec08472 //sm4e v18.4s,v3.4s 223.inst 0xcec08473 //sm4e v19.4s,v3.4s 224 225.inst 0xcec08490 //sm4e v16.4s,v4.4s 226.inst 0xcec08491 //sm4e v17.4s,v4.4s 227.inst 0xcec08492 //sm4e v18.4s,v4.4s 228.inst 0xcec08493 //sm4e v19.4s,v4.4s 229 230.inst 0xcec084b0 //sm4e v16.4s,v5.4s 231.inst 0xcec084b1 //sm4e v17.4s,v5.4s 232.inst 0xcec084b2 //sm4e v18.4s,v5.4s 233.inst 0xcec084b3 //sm4e v19.4s,v5.4s 234 235.inst 0xcec084d0 //sm4e v16.4s,v6.4s 236.inst 0xcec084d1 //sm4e v17.4s,v6.4s 237.inst 0xcec084d2 //sm4e v18.4s,v6.4s 238.inst 0xcec084d3 //sm4e v19.4s,v6.4s 239 240.inst 0xcec084f0 //sm4e v16.4s,v7.4s 241 rev64 v16.4S,v16.4S 242.inst 0xcec084f1 //sm4e v17.4s,v7.4s 243 ext v16.16b,v16.16b,v16.16b,#8 244 rev64 v17.4S,v17.4S 245.inst 0xcec084f2 //sm4e v18.4s,v7.4s 246 ext v17.16b,v17.16b,v17.16b,#8 247 rev64 v18.4S,v18.4S 248.inst 0xcec084f3 //sm4e v19.4s,v7.4s 249 ext v18.16b,v18.16b,v18.16b,#8 250 rev64 v19.4S,v19.4S 251 ext v19.16b,v19.16b,v19.16b,#8 252.inst 0xcec08414 //sm4e v20.4s,v0.4s 253.inst 0xcec08415 //sm4e v21.4s,v0.4s 254.inst 0xcec08416 //sm4e v22.4s,v0.4s 255.inst 0xcec08417 //sm4e v23.4s,v0.4s 256 257.inst 0xcec08434 //sm4e v20.4s,v1.4s 258.inst 0xcec08435 //sm4e v21.4s,v1.4s 259.inst 0xcec08436 //sm4e v22.4s,v1.4s 260.inst 0xcec08437 //sm4e v23.4s,v1.4s 261 262.inst 0xcec08454 //sm4e v20.4s,v2.4s 263.inst 0xcec08455 //sm4e v21.4s,v2.4s 264.inst 0xcec08456 //sm4e v22.4s,v2.4s 265.inst 0xcec08457 //sm4e v23.4s,v2.4s 266 267.inst 0xcec08474 //sm4e v20.4s,v3.4s 268.inst 0xcec08475 //sm4e v21.4s,v3.4s 269.inst 0xcec08476 //sm4e v22.4s,v3.4s 270.inst 0xcec08477 //sm4e v23.4s,v3.4s 271 272.inst 0xcec08494 //sm4e v20.4s,v4.4s 273.inst 0xcec08495 //sm4e v21.4s,v4.4s 274.inst 0xcec08496 //sm4e v22.4s,v4.4s 275.inst 0xcec08497 //sm4e v23.4s,v4.4s 276 277.inst 0xcec084b4 //sm4e v20.4s,v5.4s 278.inst 0xcec084b5 //sm4e v21.4s,v5.4s 279.inst 0xcec084b6 //sm4e v22.4s,v5.4s 280.inst 0xcec084b7 //sm4e v23.4s,v5.4s 281 282.inst 0xcec084d4 //sm4e v20.4s,v6.4s 283.inst 0xcec084d5 //sm4e v21.4s,v6.4s 284.inst 0xcec084d6 //sm4e v22.4s,v6.4s 285.inst 0xcec084d7 //sm4e v23.4s,v6.4s 286 287.inst 0xcec084f4 //sm4e v20.4s,v7.4s 288 rev64 v20.4S,v20.4S 289.inst 0xcec084f5 //sm4e v21.4s,v7.4s 290 ext v20.16b,v20.16b,v20.16b,#8 291 rev64 v21.4S,v21.4S 292.inst 0xcec084f6 //sm4e v22.4s,v7.4s 293 ext v21.16b,v21.16b,v21.16b,#8 294 rev64 v22.4S,v22.4S 295.inst 0xcec084f7 //sm4e v23.4s,v7.4s 296 ext v22.16b,v22.16b,v22.16b,#8 297 rev64 v23.4S,v23.4S 298 ext v23.16b,v23.16b,v23.16b,#8 299#ifndef __AARCH64EB__ 300 rev32 v16.16b,v16.16b 301#endif 302#ifndef __AARCH64EB__ 303 rev32 v17.16b,v17.16b 304#endif 305#ifndef __AARCH64EB__ 306 rev32 v18.16b,v18.16b 307#endif 308#ifndef __AARCH64EB__ 309 rev32 v19.16b,v19.16b 310#endif 311#ifndef __AARCH64EB__ 312 rev32 v20.16b,v20.16b 313#endif 314#ifndef __AARCH64EB__ 315 rev32 v21.16b,v21.16b 316#endif 317 st1 {v16.4s,v17.4s,v18.4s,v19.4s},[x1],#64 318#ifndef __AARCH64EB__ 319 rev32 v22.16b,v22.16b 320#endif 321#ifndef __AARCH64EB__ 322 rev32 v23.16b,v23.16b 323#endif 324 st1 {v20.4s,v21.4s,v22.4s,v23.4s},[x1],#64 325 subs x2,x2,#128 326 b.gt 1b 327 ret 328 // 4 blocks 3292: 330#ifndef __AARCH64EB__ 331 rev32 v16.16b,v16.16b 332#endif 333#ifndef __AARCH64EB__ 334 rev32 v17.16b,v17.16b 335#endif 336#ifndef __AARCH64EB__ 337 rev32 v18.16b,v18.16b 338#endif 339#ifndef __AARCH64EB__ 340 rev32 v19.16b,v19.16b 341#endif 342.inst 0xcec08410 //sm4e v16.4s,v0.4s 343.inst 0xcec08411 //sm4e v17.4s,v0.4s 344.inst 0xcec08412 //sm4e v18.4s,v0.4s 345.inst 0xcec08413 //sm4e v19.4s,v0.4s 346 347.inst 0xcec08430 //sm4e v16.4s,v1.4s 348.inst 0xcec08431 //sm4e v17.4s,v1.4s 349.inst 0xcec08432 //sm4e v18.4s,v1.4s 350.inst 0xcec08433 //sm4e v19.4s,v1.4s 351 352.inst 0xcec08450 //sm4e v16.4s,v2.4s 353.inst 0xcec08451 //sm4e v17.4s,v2.4s 354.inst 0xcec08452 //sm4e v18.4s,v2.4s 355.inst 0xcec08453 //sm4e v19.4s,v2.4s 356 357.inst 0xcec08470 //sm4e v16.4s,v3.4s 358.inst 0xcec08471 //sm4e v17.4s,v3.4s 359.inst 0xcec08472 //sm4e v18.4s,v3.4s 360.inst 0xcec08473 //sm4e v19.4s,v3.4s 361 362.inst 0xcec08490 //sm4e v16.4s,v4.4s 363.inst 0xcec08491 //sm4e v17.4s,v4.4s 364.inst 0xcec08492 //sm4e v18.4s,v4.4s 365.inst 0xcec08493 //sm4e v19.4s,v4.4s 366 367.inst 0xcec084b0 //sm4e v16.4s,v5.4s 368.inst 0xcec084b1 //sm4e v17.4s,v5.4s 369.inst 0xcec084b2 //sm4e v18.4s,v5.4s 370.inst 0xcec084b3 //sm4e v19.4s,v5.4s 371 372.inst 0xcec084d0 //sm4e v16.4s,v6.4s 373.inst 0xcec084d1 //sm4e v17.4s,v6.4s 374.inst 0xcec084d2 //sm4e v18.4s,v6.4s 375.inst 0xcec084d3 //sm4e v19.4s,v6.4s 376 377.inst 0xcec084f0 //sm4e v16.4s,v7.4s 378 rev64 v16.4S,v16.4S 379.inst 0xcec084f1 //sm4e v17.4s,v7.4s 380 ext v16.16b,v16.16b,v16.16b,#8 381 rev64 v17.4S,v17.4S 382.inst 0xcec084f2 //sm4e v18.4s,v7.4s 383 ext v17.16b,v17.16b,v17.16b,#8 384 rev64 v18.4S,v18.4S 385.inst 0xcec084f3 //sm4e v19.4s,v7.4s 386 ext v18.16b,v18.16b,v18.16b,#8 387 rev64 v19.4S,v19.4S 388 ext v19.16b,v19.16b,v19.16b,#8 389#ifndef __AARCH64EB__ 390 rev32 v16.16b,v16.16b 391#endif 392#ifndef __AARCH64EB__ 393 rev32 v17.16b,v17.16b 394#endif 395#ifndef __AARCH64EB__ 396 rev32 v18.16b,v18.16b 397#endif 398#ifndef __AARCH64EB__ 399 rev32 v19.16b,v19.16b 400#endif 401 st1 {v16.4s,v17.4s,v18.4s,v19.4s},[x1],#64 402 subs x2,x2,#64 403 b.gt 1b 4041: 405 subs x2,x2,#16 406 b.lt 1f 407 ld1 {v16.4s},[x0],#16 408#ifndef __AARCH64EB__ 409 rev32 v16.16b,v16.16b 410#endif 411.inst 0xcec08410 //sm4e v16.4s,v0.4s 412.inst 0xcec08430 //sm4e v16.4s,v1.4s 413.inst 0xcec08450 //sm4e v16.4s,v2.4s 414.inst 0xcec08470 //sm4e v16.4s,v3.4s 415.inst 0xcec08490 //sm4e v16.4s,v4.4s 416.inst 0xcec084b0 //sm4e v16.4s,v5.4s 417.inst 0xcec084d0 //sm4e v16.4s,v6.4s 418.inst 0xcec084f0 //sm4e v16.4s,v7.4s 419 rev64 v16.4S,v16.4S 420 ext v16.16b,v16.16b,v16.16b,#8 421#ifndef __AARCH64EB__ 422 rev32 v16.16b,v16.16b 423#endif 424 st1 {v16.4s},[x1],#16 425 b.ne 1b 4261: 427 ret 428.size sm4_v8_ecb_encrypt,.-sm4_v8_ecb_encrypt 429.globl sm4_v8_cbc_encrypt 430.type sm4_v8_cbc_encrypt,%function 431.align 5 432sm4_v8_cbc_encrypt: 433 AARCH64_VALID_CALL_TARGET 434 stp d8,d9,[sp, #-16]! 435 436 ld1 {v0.4s,v1.4s,v2.4s,v3.4s},[x3],#64 437 ld1 {v4.4s,v5.4s,v6.4s,v7.4s},[x3] 438 ld1 {v8.4s},[x4] 439 cmp w5,#0 440 b.eq .Ldec 4411: 442 cmp x2, #64 443 b.lt 1f 444 ld1 {v16.4s,v17.4s,v18.4s,v19.4s},[x0],#64 445 eor v16.16b,v16.16b,v8.16b 446#ifndef __AARCH64EB__ 447 rev32 v17.16b,v17.16b 448#endif 449#ifndef __AARCH64EB__ 450 rev32 v16.16b,v16.16b 451#endif 452#ifndef __AARCH64EB__ 453 rev32 v18.16b,v18.16b 454#endif 455#ifndef __AARCH64EB__ 456 rev32 v19.16b,v19.16b 457#endif 458.inst 0xcec08410 //sm4e v16.4s,v0.4s 459.inst 0xcec08430 //sm4e v16.4s,v1.4s 460.inst 0xcec08450 //sm4e v16.4s,v2.4s 461.inst 0xcec08470 //sm4e v16.4s,v3.4s 462.inst 0xcec08490 //sm4e v16.4s,v4.4s 463.inst 0xcec084b0 //sm4e v16.4s,v5.4s 464.inst 0xcec084d0 //sm4e v16.4s,v6.4s 465.inst 0xcec084f0 //sm4e v16.4s,v7.4s 466 rev64 v16.4S,v16.4S 467 ext v16.16b,v16.16b,v16.16b,#8 468 eor v17.16b,v17.16b,v16.16b 469.inst 0xcec08411 //sm4e v17.4s,v0.4s 470.inst 0xcec08431 //sm4e v17.4s,v1.4s 471.inst 0xcec08451 //sm4e v17.4s,v2.4s 472.inst 0xcec08471 //sm4e v17.4s,v3.4s 473.inst 0xcec08491 //sm4e v17.4s,v4.4s 474.inst 0xcec084b1 //sm4e v17.4s,v5.4s 475.inst 0xcec084d1 //sm4e v17.4s,v6.4s 476.inst 0xcec084f1 //sm4e v17.4s,v7.4s 477 rev64 v17.4S,v17.4S 478 ext v17.16b,v17.16b,v17.16b,#8 479#ifndef __AARCH64EB__ 480 rev32 v16.16b,v16.16b 481#endif 482 eor v18.16b,v18.16b,v17.16b 483.inst 0xcec08412 //sm4e v18.4s,v0.4s 484.inst 0xcec08432 //sm4e v18.4s,v1.4s 485.inst 0xcec08452 //sm4e v18.4s,v2.4s 486.inst 0xcec08472 //sm4e v18.4s,v3.4s 487.inst 0xcec08492 //sm4e v18.4s,v4.4s 488.inst 0xcec084b2 //sm4e v18.4s,v5.4s 489.inst 0xcec084d2 //sm4e v18.4s,v6.4s 490.inst 0xcec084f2 //sm4e v18.4s,v7.4s 491 rev64 v18.4S,v18.4S 492 ext v18.16b,v18.16b,v18.16b,#8 493#ifndef __AARCH64EB__ 494 rev32 v17.16b,v17.16b 495#endif 496 eor v19.16b,v19.16b,v18.16b 497.inst 0xcec08413 //sm4e v19.4s,v0.4s 498.inst 0xcec08433 //sm4e v19.4s,v1.4s 499.inst 0xcec08453 //sm4e v19.4s,v2.4s 500.inst 0xcec08473 //sm4e v19.4s,v3.4s 501.inst 0xcec08493 //sm4e v19.4s,v4.4s 502.inst 0xcec084b3 //sm4e v19.4s,v5.4s 503.inst 0xcec084d3 //sm4e v19.4s,v6.4s 504.inst 0xcec084f3 //sm4e v19.4s,v7.4s 505 rev64 v19.4S,v19.4S 506 ext v19.16b,v19.16b,v19.16b,#8 507#ifndef __AARCH64EB__ 508 rev32 v18.16b,v18.16b 509#endif 510#ifndef __AARCH64EB__ 511 rev32 v19.16b,v19.16b 512#endif 513 mov v8.16b,v19.16b 514 st1 {v16.4s,v17.4s,v18.4s,v19.4s},[x1],#64 515 subs x2,x2,#64 516 b.ne 1b 5171: 518 subs x2,x2,#16 519 b.lt 3f 520 ld1 {v16.4s},[x0],#16 521 eor v8.16b,v8.16b,v16.16b 522#ifndef __AARCH64EB__ 523 rev32 v8.16b,v8.16b 524#endif 525.inst 0xcec08408 //sm4e v8.4s,v0.4s 526.inst 0xcec08428 //sm4e v8.4s,v1.4s 527.inst 0xcec08448 //sm4e v8.4s,v2.4s 528.inst 0xcec08468 //sm4e v8.4s,v3.4s 529.inst 0xcec08488 //sm4e v8.4s,v4.4s 530.inst 0xcec084a8 //sm4e v8.4s,v5.4s 531.inst 0xcec084c8 //sm4e v8.4s,v6.4s 532.inst 0xcec084e8 //sm4e v8.4s,v7.4s 533 rev64 v8.4S,v8.4S 534 ext v8.16b,v8.16b,v8.16b,#8 535#ifndef __AARCH64EB__ 536 rev32 v8.16b,v8.16b 537#endif 538 st1 {v8.4s},[x1],#16 539 b.ne 1b 540 b 3f 541.Ldec: 5421: 543 cmp x2, #64 544 b.lt 1f 545 ld1 {v16.4s,v17.4s,v18.4s,v19.4s},[x0] 546 ld1 {v24.4s,v25.4s,v26.4s,v27.4s},[x0],#64 547 cmp x2,#128 548 b.lt 2f 549 // 8 blocks mode 550 ld1 {v20.4s,v21.4s,v22.4s,v23.4s},[x0] 551 ld1 {v28.4s,v29.4s,v30.4s,v31.4s},[x0],#64 552#ifndef __AARCH64EB__ 553 rev32 v16.16b,v16.16b 554#endif 555#ifndef __AARCH64EB__ 556 rev32 v17.16b,v17.16b 557#endif 558#ifndef __AARCH64EB__ 559 rev32 v18.16b,v18.16b 560#endif 561#ifndef __AARCH64EB__ 562 rev32 v19.16b,v19.16b 563#endif 564#ifndef __AARCH64EB__ 565 rev32 v20.16b,v20.16b 566#endif 567#ifndef __AARCH64EB__ 568 rev32 v21.16b,v21.16b 569#endif 570#ifndef __AARCH64EB__ 571 rev32 v22.16b,v22.16b 572#endif 573#ifndef __AARCH64EB__ 574 rev32 v23.16b,v23.16b 575#endif 576.inst 0xcec08410 //sm4e v16.4s,v0.4s 577.inst 0xcec08411 //sm4e v17.4s,v0.4s 578.inst 0xcec08412 //sm4e v18.4s,v0.4s 579.inst 0xcec08413 //sm4e v19.4s,v0.4s 580 581.inst 0xcec08430 //sm4e v16.4s,v1.4s 582.inst 0xcec08431 //sm4e v17.4s,v1.4s 583.inst 0xcec08432 //sm4e v18.4s,v1.4s 584.inst 0xcec08433 //sm4e v19.4s,v1.4s 585 586.inst 0xcec08450 //sm4e v16.4s,v2.4s 587.inst 0xcec08451 //sm4e v17.4s,v2.4s 588.inst 0xcec08452 //sm4e v18.4s,v2.4s 589.inst 0xcec08453 //sm4e v19.4s,v2.4s 590 591.inst 0xcec08470 //sm4e v16.4s,v3.4s 592.inst 0xcec08471 //sm4e v17.4s,v3.4s 593.inst 0xcec08472 //sm4e v18.4s,v3.4s 594.inst 0xcec08473 //sm4e v19.4s,v3.4s 595 596.inst 0xcec08490 //sm4e v16.4s,v4.4s 597.inst 0xcec08491 //sm4e v17.4s,v4.4s 598.inst 0xcec08492 //sm4e v18.4s,v4.4s 599.inst 0xcec08493 //sm4e v19.4s,v4.4s 600 601.inst 0xcec084b0 //sm4e v16.4s,v5.4s 602.inst 0xcec084b1 //sm4e v17.4s,v5.4s 603.inst 0xcec084b2 //sm4e v18.4s,v5.4s 604.inst 0xcec084b3 //sm4e v19.4s,v5.4s 605 606.inst 0xcec084d0 //sm4e v16.4s,v6.4s 607.inst 0xcec084d1 //sm4e v17.4s,v6.4s 608.inst 0xcec084d2 //sm4e v18.4s,v6.4s 609.inst 0xcec084d3 //sm4e v19.4s,v6.4s 610 611.inst 0xcec084f0 //sm4e v16.4s,v7.4s 612 rev64 v16.4S,v16.4S 613.inst 0xcec084f1 //sm4e v17.4s,v7.4s 614 ext v16.16b,v16.16b,v16.16b,#8 615 rev64 v17.4S,v17.4S 616.inst 0xcec084f2 //sm4e v18.4s,v7.4s 617 ext v17.16b,v17.16b,v17.16b,#8 618 rev64 v18.4S,v18.4S 619.inst 0xcec084f3 //sm4e v19.4s,v7.4s 620 ext v18.16b,v18.16b,v18.16b,#8 621 rev64 v19.4S,v19.4S 622 ext v19.16b,v19.16b,v19.16b,#8 623.inst 0xcec08414 //sm4e v20.4s,v0.4s 624.inst 0xcec08415 //sm4e v21.4s,v0.4s 625.inst 0xcec08416 //sm4e v22.4s,v0.4s 626.inst 0xcec08417 //sm4e v23.4s,v0.4s 627 628.inst 0xcec08434 //sm4e v20.4s,v1.4s 629.inst 0xcec08435 //sm4e v21.4s,v1.4s 630.inst 0xcec08436 //sm4e v22.4s,v1.4s 631.inst 0xcec08437 //sm4e v23.4s,v1.4s 632 633.inst 0xcec08454 //sm4e v20.4s,v2.4s 634.inst 0xcec08455 //sm4e v21.4s,v2.4s 635.inst 0xcec08456 //sm4e v22.4s,v2.4s 636.inst 0xcec08457 //sm4e v23.4s,v2.4s 637 638.inst 0xcec08474 //sm4e v20.4s,v3.4s 639.inst 0xcec08475 //sm4e v21.4s,v3.4s 640.inst 0xcec08476 //sm4e v22.4s,v3.4s 641.inst 0xcec08477 //sm4e v23.4s,v3.4s 642 643.inst 0xcec08494 //sm4e v20.4s,v4.4s 644.inst 0xcec08495 //sm4e v21.4s,v4.4s 645.inst 0xcec08496 //sm4e v22.4s,v4.4s 646.inst 0xcec08497 //sm4e v23.4s,v4.4s 647 648.inst 0xcec084b4 //sm4e v20.4s,v5.4s 649.inst 0xcec084b5 //sm4e v21.4s,v5.4s 650.inst 0xcec084b6 //sm4e v22.4s,v5.4s 651.inst 0xcec084b7 //sm4e v23.4s,v5.4s 652 653.inst 0xcec084d4 //sm4e v20.4s,v6.4s 654.inst 0xcec084d5 //sm4e v21.4s,v6.4s 655.inst 0xcec084d6 //sm4e v22.4s,v6.4s 656.inst 0xcec084d7 //sm4e v23.4s,v6.4s 657 658.inst 0xcec084f4 //sm4e v20.4s,v7.4s 659 rev64 v20.4S,v20.4S 660.inst 0xcec084f5 //sm4e v21.4s,v7.4s 661 ext v20.16b,v20.16b,v20.16b,#8 662 rev64 v21.4S,v21.4S 663.inst 0xcec084f6 //sm4e v22.4s,v7.4s 664 ext v21.16b,v21.16b,v21.16b,#8 665 rev64 v22.4S,v22.4S 666.inst 0xcec084f7 //sm4e v23.4s,v7.4s 667 ext v22.16b,v22.16b,v22.16b,#8 668 rev64 v23.4S,v23.4S 669 ext v23.16b,v23.16b,v23.16b,#8 670#ifndef __AARCH64EB__ 671 rev32 v16.16b,v16.16b 672#endif 673#ifndef __AARCH64EB__ 674 rev32 v17.16b,v17.16b 675#endif 676#ifndef __AARCH64EB__ 677 rev32 v18.16b,v18.16b 678#endif 679#ifndef __AARCH64EB__ 680 rev32 v19.16b,v19.16b 681#endif 682#ifndef __AARCH64EB__ 683 rev32 v20.16b,v20.16b 684#endif 685#ifndef __AARCH64EB__ 686 rev32 v21.16b,v21.16b 687#endif 688#ifndef __AARCH64EB__ 689 rev32 v22.16b,v22.16b 690#endif 691#ifndef __AARCH64EB__ 692 rev32 v23.16b,v23.16b 693#endif 694 eor v16.16b,v16.16b,v8.16b 695 eor v17.16b,v17.16b,v24.16b 696 eor v18.16b,v18.16b,v25.16b 697 mov v8.16b,v31.16b 698 eor v19.16b,v19.16b,v26.16b 699 eor v20.16b,v20.16b,v27.16b 700 eor v21.16b,v21.16b,v28.16b 701 eor v22.16b,v22.16b,v29.16b 702 eor v23.16b,v23.16b,v30.16b 703 st1 {v16.4s,v17.4s,v18.4s,v19.4s},[x1],#64 704 st1 {v20.4s,v21.4s,v22.4s,v23.4s},[x1],#64 705 subs x2,x2,128 706 b.gt 1b 707 b 3f 708 // 4 blocks mode 7092: 710#ifndef __AARCH64EB__ 711 rev32 v16.16b,v16.16b 712#endif 713#ifndef __AARCH64EB__ 714 rev32 v17.16b,v17.16b 715#endif 716#ifndef __AARCH64EB__ 717 rev32 v18.16b,v18.16b 718#endif 719#ifndef __AARCH64EB__ 720 rev32 v19.16b,v19.16b 721#endif 722.inst 0xcec08410 //sm4e v16.4s,v0.4s 723.inst 0xcec08411 //sm4e v17.4s,v0.4s 724.inst 0xcec08412 //sm4e v18.4s,v0.4s 725.inst 0xcec08413 //sm4e v19.4s,v0.4s 726 727.inst 0xcec08430 //sm4e v16.4s,v1.4s 728.inst 0xcec08431 //sm4e v17.4s,v1.4s 729.inst 0xcec08432 //sm4e v18.4s,v1.4s 730.inst 0xcec08433 //sm4e v19.4s,v1.4s 731 732.inst 0xcec08450 //sm4e v16.4s,v2.4s 733.inst 0xcec08451 //sm4e v17.4s,v2.4s 734.inst 0xcec08452 //sm4e v18.4s,v2.4s 735.inst 0xcec08453 //sm4e v19.4s,v2.4s 736 737.inst 0xcec08470 //sm4e v16.4s,v3.4s 738.inst 0xcec08471 //sm4e v17.4s,v3.4s 739.inst 0xcec08472 //sm4e v18.4s,v3.4s 740.inst 0xcec08473 //sm4e v19.4s,v3.4s 741 742.inst 0xcec08490 //sm4e v16.4s,v4.4s 743.inst 0xcec08491 //sm4e v17.4s,v4.4s 744.inst 0xcec08492 //sm4e v18.4s,v4.4s 745.inst 0xcec08493 //sm4e v19.4s,v4.4s 746 747.inst 0xcec084b0 //sm4e v16.4s,v5.4s 748.inst 0xcec084b1 //sm4e v17.4s,v5.4s 749.inst 0xcec084b2 //sm4e v18.4s,v5.4s 750.inst 0xcec084b3 //sm4e v19.4s,v5.4s 751 752.inst 0xcec084d0 //sm4e v16.4s,v6.4s 753.inst 0xcec084d1 //sm4e v17.4s,v6.4s 754.inst 0xcec084d2 //sm4e v18.4s,v6.4s 755.inst 0xcec084d3 //sm4e v19.4s,v6.4s 756 757.inst 0xcec084f0 //sm4e v16.4s,v7.4s 758 rev64 v16.4S,v16.4S 759.inst 0xcec084f1 //sm4e v17.4s,v7.4s 760 ext v16.16b,v16.16b,v16.16b,#8 761 rev64 v17.4S,v17.4S 762.inst 0xcec084f2 //sm4e v18.4s,v7.4s 763 ext v17.16b,v17.16b,v17.16b,#8 764 rev64 v18.4S,v18.4S 765.inst 0xcec084f3 //sm4e v19.4s,v7.4s 766 ext v18.16b,v18.16b,v18.16b,#8 767 rev64 v19.4S,v19.4S 768 ext v19.16b,v19.16b,v19.16b,#8 769#ifndef __AARCH64EB__ 770 rev32 v16.16b,v16.16b 771#endif 772#ifndef __AARCH64EB__ 773 rev32 v17.16b,v17.16b 774#endif 775#ifndef __AARCH64EB__ 776 rev32 v18.16b,v18.16b 777#endif 778#ifndef __AARCH64EB__ 779 rev32 v19.16b,v19.16b 780#endif 781 eor v16.16b,v16.16b,v8.16b 782 eor v17.16b,v17.16b,v24.16b 783 mov v8.16b,v27.16b 784 eor v18.16b,v18.16b,v25.16b 785 eor v19.16b,v19.16b,v26.16b 786 st1 {v16.4s,v17.4s,v18.4s,v19.4s},[x1],#64 787 subs x2,x2,#64 788 b.gt 1b 7891: 790 subs x2,x2,#16 791 b.lt 3f 792 ld1 {v16.4s},[x0],#16 793 mov v24.16b,v16.16b 794#ifndef __AARCH64EB__ 795 rev32 v16.16b,v16.16b 796#endif 797.inst 0xcec08410 //sm4e v16.4s,v0.4s 798.inst 0xcec08430 //sm4e v16.4s,v1.4s 799.inst 0xcec08450 //sm4e v16.4s,v2.4s 800.inst 0xcec08470 //sm4e v16.4s,v3.4s 801.inst 0xcec08490 //sm4e v16.4s,v4.4s 802.inst 0xcec084b0 //sm4e v16.4s,v5.4s 803.inst 0xcec084d0 //sm4e v16.4s,v6.4s 804.inst 0xcec084f0 //sm4e v16.4s,v7.4s 805 rev64 v16.4S,v16.4S 806 ext v16.16b,v16.16b,v16.16b,#8 807#ifndef __AARCH64EB__ 808 rev32 v16.16b,v16.16b 809#endif 810 eor v16.16b,v16.16b,v8.16b 811 mov v8.16b,v24.16b 812 st1 {v16.4s},[x1],#16 813 b.ne 1b 8143: 815 // save back IV 816 st1 {v8.4s},[x4] 817 ldp d8,d9,[sp],#16 818 ret 819.size sm4_v8_cbc_encrypt,.-sm4_v8_cbc_encrypt 820.globl sm4_v8_ctr32_encrypt_blocks 821.type sm4_v8_ctr32_encrypt_blocks,%function 822.align 5 823sm4_v8_ctr32_encrypt_blocks: 824 AARCH64_VALID_CALL_TARGET 825 stp d8,d9,[sp, #-16]! 826 827 ld1 {v8.4s},[x4] 828 ld1 {v0.4s,v1.4s,v2.4s,v3.4s},[x3],64 829 ld1 {v4.4s,v5.4s,v6.4s,v7.4s},[x3] 830#ifndef __AARCH64EB__ 831 rev32 v8.16b,v8.16b 832#endif 833 mov w5,v8.s[3] 8341: 835 cmp x2,#4 836 b.lt 1f 837 ld1 {v24.4s,v25.4s,v26.4s,v27.4s},[x0],#64 838 mov v16.16b,v8.16b 839 mov v17.16b,v8.16b 840 mov v18.16b,v8.16b 841 mov v19.16b,v8.16b 842 add w5,w5,#1 843 mov v17.s[3],w5 844 add w5,w5,#1 845 mov v18.s[3],w5 846 add w5,w5,#1 847 mov v19.s[3],w5 848 cmp x2,#8 849 b.lt 2f 850 ld1 {v28.4s,v29.4s,v30.4s,v31.4s},[x0],#64 851 mov v20.16b,v8.16b 852 mov v21.16b,v8.16b 853 mov v22.16b,v8.16b 854 mov v23.16b,v8.16b 855 add w5,w5,#1 856 mov v20.s[3],w5 857 add w5,w5,#1 858 mov v21.s[3],w5 859 add w5,w5,#1 860 mov v22.s[3],w5 861 add w5,w5,#1 862 mov v23.s[3],w5 863.inst 0xcec08410 //sm4e v16.4s,v0.4s 864.inst 0xcec08411 //sm4e v17.4s,v0.4s 865.inst 0xcec08412 //sm4e v18.4s,v0.4s 866.inst 0xcec08413 //sm4e v19.4s,v0.4s 867 868.inst 0xcec08430 //sm4e v16.4s,v1.4s 869.inst 0xcec08431 //sm4e v17.4s,v1.4s 870.inst 0xcec08432 //sm4e v18.4s,v1.4s 871.inst 0xcec08433 //sm4e v19.4s,v1.4s 872 873.inst 0xcec08450 //sm4e v16.4s,v2.4s 874.inst 0xcec08451 //sm4e v17.4s,v2.4s 875.inst 0xcec08452 //sm4e v18.4s,v2.4s 876.inst 0xcec08453 //sm4e v19.4s,v2.4s 877 878.inst 0xcec08470 //sm4e v16.4s,v3.4s 879.inst 0xcec08471 //sm4e v17.4s,v3.4s 880.inst 0xcec08472 //sm4e v18.4s,v3.4s 881.inst 0xcec08473 //sm4e v19.4s,v3.4s 882 883.inst 0xcec08490 //sm4e v16.4s,v4.4s 884.inst 0xcec08491 //sm4e v17.4s,v4.4s 885.inst 0xcec08492 //sm4e v18.4s,v4.4s 886.inst 0xcec08493 //sm4e v19.4s,v4.4s 887 888.inst 0xcec084b0 //sm4e v16.4s,v5.4s 889.inst 0xcec084b1 //sm4e v17.4s,v5.4s 890.inst 0xcec084b2 //sm4e v18.4s,v5.4s 891.inst 0xcec084b3 //sm4e v19.4s,v5.4s 892 893.inst 0xcec084d0 //sm4e v16.4s,v6.4s 894.inst 0xcec084d1 //sm4e v17.4s,v6.4s 895.inst 0xcec084d2 //sm4e v18.4s,v6.4s 896.inst 0xcec084d3 //sm4e v19.4s,v6.4s 897 898.inst 0xcec084f0 //sm4e v16.4s,v7.4s 899 rev64 v16.4S,v16.4S 900.inst 0xcec084f1 //sm4e v17.4s,v7.4s 901 ext v16.16b,v16.16b,v16.16b,#8 902 rev64 v17.4S,v17.4S 903.inst 0xcec084f2 //sm4e v18.4s,v7.4s 904 ext v17.16b,v17.16b,v17.16b,#8 905 rev64 v18.4S,v18.4S 906.inst 0xcec084f3 //sm4e v19.4s,v7.4s 907 ext v18.16b,v18.16b,v18.16b,#8 908 rev64 v19.4S,v19.4S 909 ext v19.16b,v19.16b,v19.16b,#8 910.inst 0xcec08414 //sm4e v20.4s,v0.4s 911.inst 0xcec08415 //sm4e v21.4s,v0.4s 912.inst 0xcec08416 //sm4e v22.4s,v0.4s 913.inst 0xcec08417 //sm4e v23.4s,v0.4s 914 915.inst 0xcec08434 //sm4e v20.4s,v1.4s 916.inst 0xcec08435 //sm4e v21.4s,v1.4s 917.inst 0xcec08436 //sm4e v22.4s,v1.4s 918.inst 0xcec08437 //sm4e v23.4s,v1.4s 919 920.inst 0xcec08454 //sm4e v20.4s,v2.4s 921.inst 0xcec08455 //sm4e v21.4s,v2.4s 922.inst 0xcec08456 //sm4e v22.4s,v2.4s 923.inst 0xcec08457 //sm4e v23.4s,v2.4s 924 925.inst 0xcec08474 //sm4e v20.4s,v3.4s 926.inst 0xcec08475 //sm4e v21.4s,v3.4s 927.inst 0xcec08476 //sm4e v22.4s,v3.4s 928.inst 0xcec08477 //sm4e v23.4s,v3.4s 929 930.inst 0xcec08494 //sm4e v20.4s,v4.4s 931.inst 0xcec08495 //sm4e v21.4s,v4.4s 932.inst 0xcec08496 //sm4e v22.4s,v4.4s 933.inst 0xcec08497 //sm4e v23.4s,v4.4s 934 935.inst 0xcec084b4 //sm4e v20.4s,v5.4s 936.inst 0xcec084b5 //sm4e v21.4s,v5.4s 937.inst 0xcec084b6 //sm4e v22.4s,v5.4s 938.inst 0xcec084b7 //sm4e v23.4s,v5.4s 939 940.inst 0xcec084d4 //sm4e v20.4s,v6.4s 941.inst 0xcec084d5 //sm4e v21.4s,v6.4s 942.inst 0xcec084d6 //sm4e v22.4s,v6.4s 943.inst 0xcec084d7 //sm4e v23.4s,v6.4s 944 945.inst 0xcec084f4 //sm4e v20.4s,v7.4s 946 rev64 v20.4S,v20.4S 947.inst 0xcec084f5 //sm4e v21.4s,v7.4s 948 ext v20.16b,v20.16b,v20.16b,#8 949 rev64 v21.4S,v21.4S 950.inst 0xcec084f6 //sm4e v22.4s,v7.4s 951 ext v21.16b,v21.16b,v21.16b,#8 952 rev64 v22.4S,v22.4S 953.inst 0xcec084f7 //sm4e v23.4s,v7.4s 954 ext v22.16b,v22.16b,v22.16b,#8 955 rev64 v23.4S,v23.4S 956 ext v23.16b,v23.16b,v23.16b,#8 957#ifndef __AARCH64EB__ 958 rev32 v16.16b,v16.16b 959#endif 960#ifndef __AARCH64EB__ 961 rev32 v17.16b,v17.16b 962#endif 963#ifndef __AARCH64EB__ 964 rev32 v18.16b,v18.16b 965#endif 966#ifndef __AARCH64EB__ 967 rev32 v19.16b,v19.16b 968#endif 969#ifndef __AARCH64EB__ 970 rev32 v20.16b,v20.16b 971#endif 972#ifndef __AARCH64EB__ 973 rev32 v21.16b,v21.16b 974#endif 975#ifndef __AARCH64EB__ 976 rev32 v22.16b,v22.16b 977#endif 978#ifndef __AARCH64EB__ 979 rev32 v23.16b,v23.16b 980#endif 981 eor v16.16b,v16.16b,v24.16b 982 eor v17.16b,v17.16b,v25.16b 983 eor v18.16b,v18.16b,v26.16b 984 eor v19.16b,v19.16b,v27.16b 985 eor v20.16b,v20.16b,v28.16b 986 eor v21.16b,v21.16b,v29.16b 987 eor v22.16b,v22.16b,v30.16b 988 eor v23.16b,v23.16b,v31.16b 989 st1 {v16.4s,v17.4s,v18.4s,v19.4s},[x1],#64 990 st1 {v20.4s,v21.4s,v22.4s,v23.4s},[x1],#64 991 subs x2,x2,#8 992 b.eq 3f 993 add w5,w5,#1 994 mov v8.s[3],w5 995 b 1b 9962: 997.inst 0xcec08410 //sm4e v16.4s,v0.4s 998.inst 0xcec08411 //sm4e v17.4s,v0.4s 999.inst 0xcec08412 //sm4e v18.4s,v0.4s 1000.inst 0xcec08413 //sm4e v19.4s,v0.4s 1001 1002.inst 0xcec08430 //sm4e v16.4s,v1.4s 1003.inst 0xcec08431 //sm4e v17.4s,v1.4s 1004.inst 0xcec08432 //sm4e v18.4s,v1.4s 1005.inst 0xcec08433 //sm4e v19.4s,v1.4s 1006 1007.inst 0xcec08450 //sm4e v16.4s,v2.4s 1008.inst 0xcec08451 //sm4e v17.4s,v2.4s 1009.inst 0xcec08452 //sm4e v18.4s,v2.4s 1010.inst 0xcec08453 //sm4e v19.4s,v2.4s 1011 1012.inst 0xcec08470 //sm4e v16.4s,v3.4s 1013.inst 0xcec08471 //sm4e v17.4s,v3.4s 1014.inst 0xcec08472 //sm4e v18.4s,v3.4s 1015.inst 0xcec08473 //sm4e v19.4s,v3.4s 1016 1017.inst 0xcec08490 //sm4e v16.4s,v4.4s 1018.inst 0xcec08491 //sm4e v17.4s,v4.4s 1019.inst 0xcec08492 //sm4e v18.4s,v4.4s 1020.inst 0xcec08493 //sm4e v19.4s,v4.4s 1021 1022.inst 0xcec084b0 //sm4e v16.4s,v5.4s 1023.inst 0xcec084b1 //sm4e v17.4s,v5.4s 1024.inst 0xcec084b2 //sm4e v18.4s,v5.4s 1025.inst 0xcec084b3 //sm4e v19.4s,v5.4s 1026 1027.inst 0xcec084d0 //sm4e v16.4s,v6.4s 1028.inst 0xcec084d1 //sm4e v17.4s,v6.4s 1029.inst 0xcec084d2 //sm4e v18.4s,v6.4s 1030.inst 0xcec084d3 //sm4e v19.4s,v6.4s 1031 1032.inst 0xcec084f0 //sm4e v16.4s,v7.4s 1033 rev64 v16.4S,v16.4S 1034.inst 0xcec084f1 //sm4e v17.4s,v7.4s 1035 ext v16.16b,v16.16b,v16.16b,#8 1036 rev64 v17.4S,v17.4S 1037.inst 0xcec084f2 //sm4e v18.4s,v7.4s 1038 ext v17.16b,v17.16b,v17.16b,#8 1039 rev64 v18.4S,v18.4S 1040.inst 0xcec084f3 //sm4e v19.4s,v7.4s 1041 ext v18.16b,v18.16b,v18.16b,#8 1042 rev64 v19.4S,v19.4S 1043 ext v19.16b,v19.16b,v19.16b,#8 1044#ifndef __AARCH64EB__ 1045 rev32 v16.16b,v16.16b 1046#endif 1047#ifndef __AARCH64EB__ 1048 rev32 v17.16b,v17.16b 1049#endif 1050#ifndef __AARCH64EB__ 1051 rev32 v18.16b,v18.16b 1052#endif 1053#ifndef __AARCH64EB__ 1054 rev32 v19.16b,v19.16b 1055#endif 1056 eor v16.16b,v16.16b,v24.16b 1057 eor v17.16b,v17.16b,v25.16b 1058 eor v18.16b,v18.16b,v26.16b 1059 eor v19.16b,v19.16b,v27.16b 1060 st1 {v16.4s,v17.4s,v18.4s,v19.4s},[x1],#64 1061 subs x2,x2,#4 1062 b.eq 3f 1063 add w5,w5,#1 1064 mov v8.s[3],w5 1065 b 1b 10661: 1067 subs x2,x2,#1 1068 b.lt 3f 1069 mov v16.16b,v8.16b 1070 ld1 {v24.4s},[x0],#16 1071.inst 0xcec08410 //sm4e v16.4s,v0.4s 1072.inst 0xcec08430 //sm4e v16.4s,v1.4s 1073.inst 0xcec08450 //sm4e v16.4s,v2.4s 1074.inst 0xcec08470 //sm4e v16.4s,v3.4s 1075.inst 0xcec08490 //sm4e v16.4s,v4.4s 1076.inst 0xcec084b0 //sm4e v16.4s,v5.4s 1077.inst 0xcec084d0 //sm4e v16.4s,v6.4s 1078.inst 0xcec084f0 //sm4e v16.4s,v7.4s 1079 rev64 v16.4S,v16.4S 1080 ext v16.16b,v16.16b,v16.16b,#8 1081#ifndef __AARCH64EB__ 1082 rev32 v16.16b,v16.16b 1083#endif 1084 eor v16.16b,v16.16b,v24.16b 1085 st1 {v16.4s},[x1],#16 1086 b.eq 3f 1087 add w5,w5,#1 1088 mov v8.s[3],w5 1089 b 1b 10903: 1091 ldp d8,d9,[sp],#16 1092 ret 1093.size sm4_v8_ctr32_encrypt_blocks,.-sm4_v8_ctr32_encrypt_blocks 1094