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