1 1.1 christos #include "arm_asm.h" 2 1.1 christos // Copyright 2020-2025 The OpenSSL Project Authors. All Rights Reserved. 3 1.1 christos // 4 1.1 christos // Licensed under the Apache License 2.0 (the "License"). You may not use 5 1.1 christos // this file except in compliance with the License. You can obtain a copy 6 1.1 christos // in the file LICENSE in the source distribution or at 7 1.1 christos // https://www.openssl.org/source/license.html 8 1.1 christos 9 1.1 christos // 10 1.1 christos // This module implements SM4 with ASIMD on aarch64 11 1.1 christos // 12 1.1 christos // Feb 2022 13 1.1 christos // 14 1.1 christos 15 1.1 christos // $output is the last argument if it looks like a file (it has an extension) 16 1.1 christos // $flavour is the first argument if it doesn't look like a file 17 1.1 christos #include "arm_arch.h" 18 1.1 christos .arch armv8-a 19 1.1 christos .text 20 1.1 christos 21 1.1 christos .section .rodata 22 1.1 christos .type _vpsm4_consts,%object 23 1.1 christos .align 7 24 1.1 christos _vpsm4_consts: 25 1.1 christos .Lsbox: 26 1.1 christos .byte 0xD6,0x90,0xE9,0xFE,0xCC,0xE1,0x3D,0xB7,0x16,0xB6,0x14,0xC2,0x28,0xFB,0x2C,0x05 27 1.1 christos .byte 0x2B,0x67,0x9A,0x76,0x2A,0xBE,0x04,0xC3,0xAA,0x44,0x13,0x26,0x49,0x86,0x06,0x99 28 1.1 christos .byte 0x9C,0x42,0x50,0xF4,0x91,0xEF,0x98,0x7A,0x33,0x54,0x0B,0x43,0xED,0xCF,0xAC,0x62 29 1.1 christos .byte 0xE4,0xB3,0x1C,0xA9,0xC9,0x08,0xE8,0x95,0x80,0xDF,0x94,0xFA,0x75,0x8F,0x3F,0xA6 30 1.1 christos .byte 0x47,0x07,0xA7,0xFC,0xF3,0x73,0x17,0xBA,0x83,0x59,0x3C,0x19,0xE6,0x85,0x4F,0xA8 31 1.1 christos .byte 0x68,0x6B,0x81,0xB2,0x71,0x64,0xDA,0x8B,0xF8,0xEB,0x0F,0x4B,0x70,0x56,0x9D,0x35 32 1.1 christos .byte 0x1E,0x24,0x0E,0x5E,0x63,0x58,0xD1,0xA2,0x25,0x22,0x7C,0x3B,0x01,0x21,0x78,0x87 33 1.1 christos .byte 0xD4,0x00,0x46,0x57,0x9F,0xD3,0x27,0x52,0x4C,0x36,0x02,0xE7,0xA0,0xC4,0xC8,0x9E 34 1.1 christos .byte 0xEA,0xBF,0x8A,0xD2,0x40,0xC7,0x38,0xB5,0xA3,0xF7,0xF2,0xCE,0xF9,0x61,0x15,0xA1 35 1.1 christos .byte 0xE0,0xAE,0x5D,0xA4,0x9B,0x34,0x1A,0x55,0xAD,0x93,0x32,0x30,0xF5,0x8C,0xB1,0xE3 36 1.1 christos .byte 0x1D,0xF6,0xE2,0x2E,0x82,0x66,0xCA,0x60,0xC0,0x29,0x23,0xAB,0x0D,0x53,0x4E,0x6F 37 1.1 christos .byte 0xD5,0xDB,0x37,0x45,0xDE,0xFD,0x8E,0x2F,0x03,0xFF,0x6A,0x72,0x6D,0x6C,0x5B,0x51 38 1.1 christos .byte 0x8D,0x1B,0xAF,0x92,0xBB,0xDD,0xBC,0x7F,0x11,0xD9,0x5C,0x41,0x1F,0x10,0x5A,0xD8 39 1.1 christos .byte 0x0A,0xC1,0x31,0x88,0xA5,0xCD,0x7B,0xBD,0x2D,0x74,0xD0,0x12,0xB8,0xE5,0xB4,0xB0 40 1.1 christos .byte 0x89,0x69,0x97,0x4A,0x0C,0x96,0x77,0x7E,0x65,0xB9,0xF1,0x09,0xC5,0x6E,0xC6,0x84 41 1.1 christos .byte 0x18,0xF0,0x7D,0xEC,0x3A,0xDC,0x4D,0x20,0x79,0xEE,0x5F,0x3E,0xD7,0xCB,0x39,0x48 42 1.1 christos .Lck: 43 1.1 christos .long 0x00070E15, 0x1C232A31, 0x383F464D, 0x545B6269 44 1.1 christos .long 0x70777E85, 0x8C939AA1, 0xA8AFB6BD, 0xC4CBD2D9 45 1.1 christos .long 0xE0E7EEF5, 0xFC030A11, 0x181F262D, 0x343B4249 46 1.1 christos .long 0x50575E65, 0x6C737A81, 0x888F969D, 0xA4ABB2B9 47 1.1 christos .long 0xC0C7CED5, 0xDCE3EAF1, 0xF8FF060D, 0x141B2229 48 1.1 christos .long 0x30373E45, 0x4C535A61, 0x686F767D, 0x848B9299 49 1.1 christos .long 0xA0A7AEB5, 0xBCC3CAD1, 0xD8DFE6ED, 0xF4FB0209 50 1.1 christos .long 0x10171E25, 0x2C333A41, 0x484F565D, 0x646B7279 51 1.1 christos .Lfk: 52 1.1 christos .quad 0x56aa3350a3b1bac6,0xb27022dc677d9197 53 1.1 christos .Lshuffles: 54 1.1 christos .quad 0x0B0A090807060504,0x030201000F0E0D0C 55 1.1 christos .Lxts_magic: 56 1.1 christos .quad 0x0101010101010187,0x0101010101010101 57 1.1 christos 58 1.1 christos .size _vpsm4_consts,.-_vpsm4_consts 59 1.1 christos 60 1.1 christos .previous 61 1.1 christos 62 1.1 christos .type _vpsm4_set_key,%function 63 1.1 christos .align 4 64 1.1 christos _vpsm4_set_key: 65 1.1 christos AARCH64_VALID_CALL_TARGET 66 1.1 christos ld1 {v5.4s},[x0] 67 1.1 christos adrp x10,.Lsbox 68 1.1 christos add x10,x10,#:lo12:.Lsbox 69 1.1 christos ld1 {v16.16b,v17.16b,v18.16b,v19.16b},[x10],#64 70 1.1 christos ld1 {v20.16b,v21.16b,v22.16b,v23.16b},[x10],#64 71 1.1 christos ld1 {v24.16b,v25.16b,v26.16b,v27.16b},[x10],#64 72 1.1 christos ld1 {v28.16b,v29.16b,v30.16b,v31.16b},[x10] 73 1.1 christos #ifndef __AARCH64EB__ 74 1.1 christos rev32 v5.16b,v5.16b 75 1.1 christos #endif 76 1.1 christos adrp x5,.Lshuffles 77 1.1 christos add x5,x5,#:lo12:.Lshuffles 78 1.1 christos ld1 {v7.2d},[x5] 79 1.1 christos adrp x5,.Lfk 80 1.1 christos add x5,x5,#:lo12:.Lfk 81 1.1 christos ld1 {v6.2d},[x5] 82 1.1 christos eor v5.16b,v5.16b,v6.16b 83 1.1 christos mov x6,#32 84 1.1 christos adrp x5,.Lck 85 1.1 christos add x5,x5,#:lo12:.Lck 86 1.1 christos movi v0.16b,#64 87 1.1 christos cbnz w2,1f 88 1.1 christos add x1,x1,124 89 1.1 christos 1: 90 1.1 christos mov w7,v5.s[1] 91 1.1 christos ldr w8,[x5],#4 92 1.1 christos eor w8,w8,w7 93 1.1 christos mov w7,v5.s[2] 94 1.1 christos eor w8,w8,w7 95 1.1 christos mov w7,v5.s[3] 96 1.1 christos eor w8,w8,w7 97 1.1 christos // sbox lookup 98 1.1 christos mov v4.s[0],w8 99 1.1 christos tbl v1.16b,{v16.16b,v17.16b,v18.16b,v19.16b},v4.16b 100 1.1 christos sub v4.16b,v4.16b,v0.16b 101 1.1 christos tbx v1.16b,{v20.16b,v21.16b,v22.16b,v23.16b},v4.16b 102 1.1 christos sub v4.16b,v4.16b,v0.16b 103 1.1 christos tbx v1.16b,{v24.16b,v25.16b,v26.16b,v27.16b},v4.16b 104 1.1 christos sub v4.16b,v4.16b,v0.16b 105 1.1 christos tbx v1.16b,{v28.16b,v29.16b,v30.16b,v31.16b},v4.16b 106 1.1 christos mov w7,v1.s[0] 107 1.1 christos eor w8,w7,w7,ror #19 108 1.1 christos eor w8,w8,w7,ror #9 109 1.1 christos mov w7,v5.s[0] 110 1.1 christos eor w8,w8,w7 111 1.1 christos mov v5.s[0],w8 112 1.1 christos cbz w2,2f 113 1.1 christos str w8,[x1],#4 114 1.1 christos b 3f 115 1.1 christos 2: 116 1.1 christos str w8,[x1],#-4 117 1.1 christos 3: 118 1.1 christos tbl v5.16b,{v5.16b},v7.16b 119 1.1 christos subs x6,x6,#1 120 1.1 christos b.ne 1b 121 1.1 christos ret 122 1.1 christos .size _vpsm4_set_key,.-_vpsm4_set_key 123 1.1 christos .type _vpsm4_enc_4blks,%function 124 1.1 christos .align 4 125 1.1 christos _vpsm4_enc_4blks: 126 1.1 christos AARCH64_VALID_CALL_TARGET 127 1.1 christos mov x10,x3 128 1.1 christos mov w11,#8 129 1.1 christos 10: 130 1.1 christos ldp w7,w8,[x10],8 131 1.1 christos dup v12.4s,w7 132 1.1 christos dup v13.4s,w8 133 1.1 christos 134 1.1 christos // B0 ^= SBOX(B1 ^ B2 ^ B3 ^ RK0) 135 1.1 christos eor v14.16b,v6.16b,v7.16b 136 1.1 christos eor v12.16b,v5.16b,v12.16b 137 1.1 christos eor v12.16b,v14.16b,v12.16b 138 1.1 christos movi v0.16b,#64 139 1.1 christos movi v1.16b,#128 140 1.1 christos movi v2.16b,#192 141 1.1 christos sub v0.16b,v12.16b,v0.16b 142 1.1 christos sub v1.16b,v12.16b,v1.16b 143 1.1 christos sub v2.16b,v12.16b,v2.16b 144 1.1 christos tbl v12.16b,{v16.16b,v17.16b,v18.16b,v19.16b},v12.16b 145 1.1 christos tbl v0.16b,{v20.16b,v21.16b,v22.16b,v23.16b},v0.16b 146 1.1 christos tbl v1.16b,{v24.16b,v25.16b,v26.16b,v27.16b},v1.16b 147 1.1 christos tbl v2.16b,{v28.16b,v29.16b,v30.16b,v31.16b},v2.16b 148 1.1 christos add v0.2d,v0.2d,v1.2d 149 1.1 christos add v2.2d,v2.2d,v12.2d 150 1.1 christos add v12.2d,v0.2d,v2.2d 151 1.1 christos 152 1.1 christos ushr v0.4s,v12.4s,32-2 153 1.1 christos sli v0.4s,v12.4s,2 154 1.1 christos ushr v2.4s,v12.4s,32-10 155 1.1 christos eor v1.16b,v0.16b,v12.16b 156 1.1 christos sli v2.4s,v12.4s,10 157 1.1 christos eor v1.16b,v2.16b,v1.16b 158 1.1 christos ushr v0.4s,v12.4s,32-18 159 1.1 christos sli v0.4s,v12.4s,18 160 1.1 christos ushr v2.4s,v12.4s,32-24 161 1.1 christos eor v1.16b,v0.16b,v1.16b 162 1.1 christos sli v2.4s,v12.4s,24 163 1.1 christos eor v12.16b,v2.16b,v1.16b 164 1.1 christos eor v4.16b,v4.16b,v12.16b 165 1.1 christos 166 1.1 christos // B1 ^= SBOX(B0 ^ B2 ^ B3 ^ RK1) 167 1.1 christos eor v14.16b,v14.16b,v4.16b 168 1.1 christos eor v13.16b,v14.16b,v13.16b 169 1.1 christos movi v0.16b,#64 170 1.1 christos movi v1.16b,#128 171 1.1 christos movi v2.16b,#192 172 1.1 christos sub v0.16b,v13.16b,v0.16b 173 1.1 christos sub v1.16b,v13.16b,v1.16b 174 1.1 christos sub v2.16b,v13.16b,v2.16b 175 1.1 christos tbl v13.16b,{v16.16b,v17.16b,v18.16b,v19.16b},v13.16b 176 1.1 christos tbl v0.16b,{v20.16b,v21.16b,v22.16b,v23.16b},v0.16b 177 1.1 christos tbl v1.16b,{v24.16b,v25.16b,v26.16b,v27.16b},v1.16b 178 1.1 christos tbl v2.16b,{v28.16b,v29.16b,v30.16b,v31.16b},v2.16b 179 1.1 christos add v0.2d,v0.2d,v1.2d 180 1.1 christos add v2.2d,v2.2d,v13.2d 181 1.1 christos add v13.2d,v0.2d,v2.2d 182 1.1 christos 183 1.1 christos ushr v0.4s,v13.4s,32-2 184 1.1 christos sli v0.4s,v13.4s,2 185 1.1 christos ushr v2.4s,v13.4s,32-10 186 1.1 christos eor v1.16b,v0.16b,v13.16b 187 1.1 christos sli v2.4s,v13.4s,10 188 1.1 christos eor v1.16b,v2.16b,v1.16b 189 1.1 christos ushr v0.4s,v13.4s,32-18 190 1.1 christos sli v0.4s,v13.4s,18 191 1.1 christos ushr v2.4s,v13.4s,32-24 192 1.1 christos eor v1.16b,v0.16b,v1.16b 193 1.1 christos sli v2.4s,v13.4s,24 194 1.1 christos eor v13.16b,v2.16b,v1.16b 195 1.1 christos ldp w7,w8,[x10],8 196 1.1 christos eor v5.16b,v5.16b,v13.16b 197 1.1 christos 198 1.1 christos dup v12.4s,w7 199 1.1 christos dup v13.4s,w8 200 1.1 christos 201 1.1 christos // B2 ^= SBOX(B0 ^ B1 ^ B3 ^ RK2) 202 1.1 christos eor v14.16b,v4.16b,v5.16b 203 1.1 christos eor v12.16b,v7.16b,v12.16b 204 1.1 christos eor v12.16b,v14.16b,v12.16b 205 1.1 christos movi v0.16b,#64 206 1.1 christos movi v1.16b,#128 207 1.1 christos movi v2.16b,#192 208 1.1 christos sub v0.16b,v12.16b,v0.16b 209 1.1 christos sub v1.16b,v12.16b,v1.16b 210 1.1 christos sub v2.16b,v12.16b,v2.16b 211 1.1 christos tbl v12.16b,{v16.16b,v17.16b,v18.16b,v19.16b},v12.16b 212 1.1 christos tbl v0.16b,{v20.16b,v21.16b,v22.16b,v23.16b},v0.16b 213 1.1 christos tbl v1.16b,{v24.16b,v25.16b,v26.16b,v27.16b},v1.16b 214 1.1 christos tbl v2.16b,{v28.16b,v29.16b,v30.16b,v31.16b},v2.16b 215 1.1 christos add v0.2d,v0.2d,v1.2d 216 1.1 christos add v2.2d,v2.2d,v12.2d 217 1.1 christos add v12.2d,v0.2d,v2.2d 218 1.1 christos 219 1.1 christos ushr v0.4s,v12.4s,32-2 220 1.1 christos sli v0.4s,v12.4s,2 221 1.1 christos ushr v2.4s,v12.4s,32-10 222 1.1 christos eor v1.16b,v0.16b,v12.16b 223 1.1 christos sli v2.4s,v12.4s,10 224 1.1 christos eor v1.16b,v2.16b,v1.16b 225 1.1 christos ushr v0.4s,v12.4s,32-18 226 1.1 christos sli v0.4s,v12.4s,18 227 1.1 christos ushr v2.4s,v12.4s,32-24 228 1.1 christos eor v1.16b,v0.16b,v1.16b 229 1.1 christos sli v2.4s,v12.4s,24 230 1.1 christos eor v12.16b,v2.16b,v1.16b 231 1.1 christos eor v6.16b,v6.16b,v12.16b 232 1.1 christos 233 1.1 christos // B3 ^= SBOX(B0 ^ B1 ^ B2 ^ RK3) 234 1.1 christos eor v14.16b,v14.16b,v6.16b 235 1.1 christos eor v13.16b,v14.16b,v13.16b 236 1.1 christos movi v0.16b,#64 237 1.1 christos movi v1.16b,#128 238 1.1 christos movi v2.16b,#192 239 1.1 christos sub v0.16b,v13.16b,v0.16b 240 1.1 christos sub v1.16b,v13.16b,v1.16b 241 1.1 christos sub v2.16b,v13.16b,v2.16b 242 1.1 christos tbl v13.16b,{v16.16b,v17.16b,v18.16b,v19.16b},v13.16b 243 1.1 christos tbl v0.16b,{v20.16b,v21.16b,v22.16b,v23.16b},v0.16b 244 1.1 christos tbl v1.16b,{v24.16b,v25.16b,v26.16b,v27.16b},v1.16b 245 1.1 christos tbl v2.16b,{v28.16b,v29.16b,v30.16b,v31.16b},v2.16b 246 1.1 christos add v0.2d,v0.2d,v1.2d 247 1.1 christos add v2.2d,v2.2d,v13.2d 248 1.1 christos add v13.2d,v0.2d,v2.2d 249 1.1 christos 250 1.1 christos ushr v0.4s,v13.4s,32-2 251 1.1 christos sli v0.4s,v13.4s,2 252 1.1 christos ushr v2.4s,v13.4s,32-10 253 1.1 christos eor v1.16b,v0.16b,v13.16b 254 1.1 christos sli v2.4s,v13.4s,10 255 1.1 christos eor v1.16b,v2.16b,v1.16b 256 1.1 christos ushr v0.4s,v13.4s,32-18 257 1.1 christos sli v0.4s,v13.4s,18 258 1.1 christos ushr v2.4s,v13.4s,32-24 259 1.1 christos eor v1.16b,v0.16b,v1.16b 260 1.1 christos sli v2.4s,v13.4s,24 261 1.1 christos eor v13.16b,v2.16b,v1.16b 262 1.1 christos eor v7.16b,v7.16b,v13.16b 263 1.1 christos subs w11,w11,#1 264 1.1 christos b.ne 10b 265 1.1 christos #ifndef __AARCH64EB__ 266 1.1 christos rev32 v3.16b,v4.16b 267 1.1 christos #else 268 1.1 christos mov v3.16b,v4.16b 269 1.1 christos #endif 270 1.1 christos #ifndef __AARCH64EB__ 271 1.1 christos rev32 v2.16b,v5.16b 272 1.1 christos #else 273 1.1 christos mov v2.16b,v5.16b 274 1.1 christos #endif 275 1.1 christos #ifndef __AARCH64EB__ 276 1.1 christos rev32 v1.16b,v6.16b 277 1.1 christos #else 278 1.1 christos mov v1.16b,v6.16b 279 1.1 christos #endif 280 1.1 christos #ifndef __AARCH64EB__ 281 1.1 christos rev32 v0.16b,v7.16b 282 1.1 christos #else 283 1.1 christos mov v0.16b,v7.16b 284 1.1 christos #endif 285 1.1 christos ret 286 1.1 christos .size _vpsm4_enc_4blks,.-_vpsm4_enc_4blks 287 1.1 christos .type _vpsm4_enc_8blks,%function 288 1.1 christos .align 4 289 1.1 christos _vpsm4_enc_8blks: 290 1.1 christos AARCH64_VALID_CALL_TARGET 291 1.1 christos mov x10,x3 292 1.1 christos mov w11,#8 293 1.1 christos 10: 294 1.1 christos ldp w7,w8,[x10],8 295 1.1 christos // B0 ^= SBOX(B1 ^ B2 ^ B3 ^ RK0) 296 1.1 christos dup v12.4s,w7 297 1.1 christos eor v14.16b,v6.16b,v7.16b 298 1.1 christos eor v15.16b,v10.16b,v11.16b 299 1.1 christos eor v0.16b,v5.16b,v12.16b 300 1.1 christos eor v1.16b,v9.16b,v12.16b 301 1.1 christos eor v12.16b,v14.16b,v0.16b 302 1.1 christos eor v13.16b,v15.16b,v1.16b 303 1.1 christos movi v3.16b,#64 304 1.1 christos sub v0.16b,v12.16b,v3.16b 305 1.1 christos sub v1.16b,v0.16b,v3.16b 306 1.1 christos sub v2.16b,v1.16b,v3.16b 307 1.1 christos tbl v12.16b,{v16.16b,v17.16b,v18.16b,v19.16b},v12.16b 308 1.1 christos tbl v0.16b,{v20.16b,v21.16b,v22.16b,v23.16b},v0.16b 309 1.1 christos tbl v1.16b,{v24.16b,v25.16b,v26.16b,v27.16b},v1.16b 310 1.1 christos tbl v2.16b,{v28.16b,v29.16b,v30.16b,v31.16b},v2.16b 311 1.1 christos add v1.2d,v0.2d,v1.2d 312 1.1 christos add v12.2d,v2.2d,v12.2d 313 1.1 christos add v12.2d,v1.2d,v12.2d 314 1.1 christos 315 1.1 christos sub v0.16b,v13.16b,v3.16b 316 1.1 christos sub v1.16b,v0.16b,v3.16b 317 1.1 christos sub v2.16b,v1.16b,v3.16b 318 1.1 christos tbl v13.16b,{v16.16b,v17.16b,v18.16b,v19.16b},v13.16b 319 1.1 christos tbl v0.16b,{v20.16b,v21.16b,v22.16b,v23.16b},v0.16b 320 1.1 christos tbl v1.16b,{v24.16b,v25.16b,v26.16b,v27.16b},v1.16b 321 1.1 christos tbl v2.16b,{v28.16b,v29.16b,v30.16b,v31.16b},v2.16b 322 1.1 christos add v1.2d,v0.2d,v1.2d 323 1.1 christos add v13.2d,v2.2d,v13.2d 324 1.1 christos add v13.2d,v1.2d,v13.2d 325 1.1 christos 326 1.1 christos ushr v0.4s,v12.4s,32-2 327 1.1 christos sli v0.4s,v12.4s,2 328 1.1 christos ushr v2.4s,v13.4s,32-2 329 1.1 christos eor v1.16b,v0.16b,v12.16b 330 1.1 christos sli v2.4s,v13.4s,2 331 1.1 christos 332 1.1 christos ushr v0.4s,v12.4s,32-10 333 1.1 christos eor v3.16b,v2.16b,v13.16b 334 1.1 christos sli v0.4s,v12.4s,10 335 1.1 christos ushr v2.4s,v13.4s,32-10 336 1.1 christos eor v1.16b,v0.16b,v1.16b 337 1.1 christos sli v2.4s,v13.4s,10 338 1.1 christos 339 1.1 christos ushr v0.4s,v12.4s,32-18 340 1.1 christos eor v3.16b,v2.16b,v3.16b 341 1.1 christos sli v0.4s,v12.4s,18 342 1.1 christos ushr v2.4s,v13.4s,32-18 343 1.1 christos eor v1.16b,v0.16b,v1.16b 344 1.1 christos sli v2.4s,v13.4s,18 345 1.1 christos 346 1.1 christos ushr v0.4s,v12.4s,32-24 347 1.1 christos eor v3.16b,v2.16b,v3.16b 348 1.1 christos sli v0.4s,v12.4s,24 349 1.1 christos ushr v2.4s,v13.4s,32-24 350 1.1 christos eor v12.16b,v0.16b,v1.16b 351 1.1 christos sli v2.4s,v13.4s,24 352 1.1 christos eor v13.16b,v2.16b,v3.16b 353 1.1 christos eor v4.16b,v4.16b,v12.16b 354 1.1 christos eor v8.16b,v8.16b,v13.16b 355 1.1 christos 356 1.1 christos // B1 ^= SBOX(B0 ^ B2 ^ B3 ^ RK1) 357 1.1 christos dup v13.4s,w8 358 1.1 christos eor v14.16b,v14.16b,v4.16b 359 1.1 christos eor v15.16b,v15.16b,v8.16b 360 1.1 christos eor v12.16b,v14.16b,v13.16b 361 1.1 christos eor v13.16b,v15.16b,v13.16b 362 1.1 christos movi v3.16b,#64 363 1.1 christos sub v0.16b,v12.16b,v3.16b 364 1.1 christos sub v1.16b,v0.16b,v3.16b 365 1.1 christos sub v2.16b,v1.16b,v3.16b 366 1.1 christos tbl v12.16b,{v16.16b,v17.16b,v18.16b,v19.16b},v12.16b 367 1.1 christos tbl v0.16b,{v20.16b,v21.16b,v22.16b,v23.16b},v0.16b 368 1.1 christos tbl v1.16b,{v24.16b,v25.16b,v26.16b,v27.16b},v1.16b 369 1.1 christos tbl v2.16b,{v28.16b,v29.16b,v30.16b,v31.16b},v2.16b 370 1.1 christos add v1.2d,v0.2d,v1.2d 371 1.1 christos add v12.2d,v2.2d,v12.2d 372 1.1 christos add v12.2d,v1.2d,v12.2d 373 1.1 christos 374 1.1 christos sub v0.16b,v13.16b,v3.16b 375 1.1 christos sub v1.16b,v0.16b,v3.16b 376 1.1 christos sub v2.16b,v1.16b,v3.16b 377 1.1 christos tbl v13.16b,{v16.16b,v17.16b,v18.16b,v19.16b},v13.16b 378 1.1 christos tbl v0.16b,{v20.16b,v21.16b,v22.16b,v23.16b},v0.16b 379 1.1 christos tbl v1.16b,{v24.16b,v25.16b,v26.16b,v27.16b},v1.16b 380 1.1 christos tbl v2.16b,{v28.16b,v29.16b,v30.16b,v31.16b},v2.16b 381 1.1 christos add v1.2d,v0.2d,v1.2d 382 1.1 christos add v13.2d,v2.2d,v13.2d 383 1.1 christos add v13.2d,v1.2d,v13.2d 384 1.1 christos 385 1.1 christos ushr v0.4s,v12.4s,32-2 386 1.1 christos sli v0.4s,v12.4s,2 387 1.1 christos ushr v2.4s,v13.4s,32-2 388 1.1 christos eor v1.16b,v0.16b,v12.16b 389 1.1 christos sli v2.4s,v13.4s,2 390 1.1 christos 391 1.1 christos ushr v0.4s,v12.4s,32-10 392 1.1 christos eor v3.16b,v2.16b,v13.16b 393 1.1 christos sli v0.4s,v12.4s,10 394 1.1 christos ushr v2.4s,v13.4s,32-10 395 1.1 christos eor v1.16b,v0.16b,v1.16b 396 1.1 christos sli v2.4s,v13.4s,10 397 1.1 christos 398 1.1 christos ushr v0.4s,v12.4s,32-18 399 1.1 christos eor v3.16b,v2.16b,v3.16b 400 1.1 christos sli v0.4s,v12.4s,18 401 1.1 christos ushr v2.4s,v13.4s,32-18 402 1.1 christos eor v1.16b,v0.16b,v1.16b 403 1.1 christos sli v2.4s,v13.4s,18 404 1.1 christos 405 1.1 christos ushr v0.4s,v12.4s,32-24 406 1.1 christos eor v3.16b,v2.16b,v3.16b 407 1.1 christos sli v0.4s,v12.4s,24 408 1.1 christos ushr v2.4s,v13.4s,32-24 409 1.1 christos eor v12.16b,v0.16b,v1.16b 410 1.1 christos sli v2.4s,v13.4s,24 411 1.1 christos eor v13.16b,v2.16b,v3.16b 412 1.1 christos ldp w7,w8,[x10],8 413 1.1 christos eor v5.16b,v5.16b,v12.16b 414 1.1 christos eor v9.16b,v9.16b,v13.16b 415 1.1 christos 416 1.1 christos // B2 ^= SBOX(B0 ^ B1 ^ B3 ^ RK2) 417 1.1 christos dup v12.4s,w7 418 1.1 christos eor v14.16b,v4.16b,v5.16b 419 1.1 christos eor v15.16b,v8.16b,v9.16b 420 1.1 christos eor v0.16b,v7.16b,v12.16b 421 1.1 christos eor v1.16b,v11.16b,v12.16b 422 1.1 christos eor v12.16b,v14.16b,v0.16b 423 1.1 christos eor v13.16b,v15.16b,v1.16b 424 1.1 christos movi v3.16b,#64 425 1.1 christos sub v0.16b,v12.16b,v3.16b 426 1.1 christos sub v1.16b,v0.16b,v3.16b 427 1.1 christos sub v2.16b,v1.16b,v3.16b 428 1.1 christos tbl v12.16b,{v16.16b,v17.16b,v18.16b,v19.16b},v12.16b 429 1.1 christos tbl v0.16b,{v20.16b,v21.16b,v22.16b,v23.16b},v0.16b 430 1.1 christos tbl v1.16b,{v24.16b,v25.16b,v26.16b,v27.16b},v1.16b 431 1.1 christos tbl v2.16b,{v28.16b,v29.16b,v30.16b,v31.16b},v2.16b 432 1.1 christos add v1.2d,v0.2d,v1.2d 433 1.1 christos add v12.2d,v2.2d,v12.2d 434 1.1 christos add v12.2d,v1.2d,v12.2d 435 1.1 christos 436 1.1 christos sub v0.16b,v13.16b,v3.16b 437 1.1 christos sub v1.16b,v0.16b,v3.16b 438 1.1 christos sub v2.16b,v1.16b,v3.16b 439 1.1 christos tbl v13.16b,{v16.16b,v17.16b,v18.16b,v19.16b},v13.16b 440 1.1 christos tbl v0.16b,{v20.16b,v21.16b,v22.16b,v23.16b},v0.16b 441 1.1 christos tbl v1.16b,{v24.16b,v25.16b,v26.16b,v27.16b},v1.16b 442 1.1 christos tbl v2.16b,{v28.16b,v29.16b,v30.16b,v31.16b},v2.16b 443 1.1 christos add v1.2d,v0.2d,v1.2d 444 1.1 christos add v13.2d,v2.2d,v13.2d 445 1.1 christos add v13.2d,v1.2d,v13.2d 446 1.1 christos 447 1.1 christos ushr v0.4s,v12.4s,32-2 448 1.1 christos sli v0.4s,v12.4s,2 449 1.1 christos ushr v2.4s,v13.4s,32-2 450 1.1 christos eor v1.16b,v0.16b,v12.16b 451 1.1 christos sli v2.4s,v13.4s,2 452 1.1 christos 453 1.1 christos ushr v0.4s,v12.4s,32-10 454 1.1 christos eor v3.16b,v2.16b,v13.16b 455 1.1 christos sli v0.4s,v12.4s,10 456 1.1 christos ushr v2.4s,v13.4s,32-10 457 1.1 christos eor v1.16b,v0.16b,v1.16b 458 1.1 christos sli v2.4s,v13.4s,10 459 1.1 christos 460 1.1 christos ushr v0.4s,v12.4s,32-18 461 1.1 christos eor v3.16b,v2.16b,v3.16b 462 1.1 christos sli v0.4s,v12.4s,18 463 1.1 christos ushr v2.4s,v13.4s,32-18 464 1.1 christos eor v1.16b,v0.16b,v1.16b 465 1.1 christos sli v2.4s,v13.4s,18 466 1.1 christos 467 1.1 christos ushr v0.4s,v12.4s,32-24 468 1.1 christos eor v3.16b,v2.16b,v3.16b 469 1.1 christos sli v0.4s,v12.4s,24 470 1.1 christos ushr v2.4s,v13.4s,32-24 471 1.1 christos eor v12.16b,v0.16b,v1.16b 472 1.1 christos sli v2.4s,v13.4s,24 473 1.1 christos eor v13.16b,v2.16b,v3.16b 474 1.1 christos eor v6.16b,v6.16b,v12.16b 475 1.1 christos eor v10.16b,v10.16b,v13.16b 476 1.1 christos 477 1.1 christos // B3 ^= SBOX(B0 ^ B1 ^ B2 ^ RK3) 478 1.1 christos dup v13.4s,w8 479 1.1 christos eor v14.16b,v14.16b,v6.16b 480 1.1 christos eor v15.16b,v15.16b,v10.16b 481 1.1 christos eor v12.16b,v14.16b,v13.16b 482 1.1 christos eor v13.16b,v15.16b,v13.16b 483 1.1 christos movi v3.16b,#64 484 1.1 christos sub v0.16b,v12.16b,v3.16b 485 1.1 christos sub v1.16b,v0.16b,v3.16b 486 1.1 christos sub v2.16b,v1.16b,v3.16b 487 1.1 christos tbl v12.16b,{v16.16b,v17.16b,v18.16b,v19.16b},v12.16b 488 1.1 christos tbl v0.16b,{v20.16b,v21.16b,v22.16b,v23.16b},v0.16b 489 1.1 christos tbl v1.16b,{v24.16b,v25.16b,v26.16b,v27.16b},v1.16b 490 1.1 christos tbl v2.16b,{v28.16b,v29.16b,v30.16b,v31.16b},v2.16b 491 1.1 christos add v1.2d,v0.2d,v1.2d 492 1.1 christos add v12.2d,v2.2d,v12.2d 493 1.1 christos add v12.2d,v1.2d,v12.2d 494 1.1 christos 495 1.1 christos sub v0.16b,v13.16b,v3.16b 496 1.1 christos sub v1.16b,v0.16b,v3.16b 497 1.1 christos sub v2.16b,v1.16b,v3.16b 498 1.1 christos tbl v13.16b,{v16.16b,v17.16b,v18.16b,v19.16b},v13.16b 499 1.1 christos tbl v0.16b,{v20.16b,v21.16b,v22.16b,v23.16b},v0.16b 500 1.1 christos tbl v1.16b,{v24.16b,v25.16b,v26.16b,v27.16b},v1.16b 501 1.1 christos tbl v2.16b,{v28.16b,v29.16b,v30.16b,v31.16b},v2.16b 502 1.1 christos add v1.2d,v0.2d,v1.2d 503 1.1 christos add v13.2d,v2.2d,v13.2d 504 1.1 christos add v13.2d,v1.2d,v13.2d 505 1.1 christos 506 1.1 christos ushr v0.4s,v12.4s,32-2 507 1.1 christos sli v0.4s,v12.4s,2 508 1.1 christos ushr v2.4s,v13.4s,32-2 509 1.1 christos eor v1.16b,v0.16b,v12.16b 510 1.1 christos sli v2.4s,v13.4s,2 511 1.1 christos 512 1.1 christos ushr v0.4s,v12.4s,32-10 513 1.1 christos eor v3.16b,v2.16b,v13.16b 514 1.1 christos sli v0.4s,v12.4s,10 515 1.1 christos ushr v2.4s,v13.4s,32-10 516 1.1 christos eor v1.16b,v0.16b,v1.16b 517 1.1 christos sli v2.4s,v13.4s,10 518 1.1 christos 519 1.1 christos ushr v0.4s,v12.4s,32-18 520 1.1 christos eor v3.16b,v2.16b,v3.16b 521 1.1 christos sli v0.4s,v12.4s,18 522 1.1 christos ushr v2.4s,v13.4s,32-18 523 1.1 christos eor v1.16b,v0.16b,v1.16b 524 1.1 christos sli v2.4s,v13.4s,18 525 1.1 christos 526 1.1 christos ushr v0.4s,v12.4s,32-24 527 1.1 christos eor v3.16b,v2.16b,v3.16b 528 1.1 christos sli v0.4s,v12.4s,24 529 1.1 christos ushr v2.4s,v13.4s,32-24 530 1.1 christos eor v12.16b,v0.16b,v1.16b 531 1.1 christos sli v2.4s,v13.4s,24 532 1.1 christos eor v13.16b,v2.16b,v3.16b 533 1.1 christos eor v7.16b,v7.16b,v12.16b 534 1.1 christos eor v11.16b,v11.16b,v13.16b 535 1.1 christos subs w11,w11,#1 536 1.1 christos b.ne 10b 537 1.1 christos #ifndef __AARCH64EB__ 538 1.1 christos rev32 v3.16b,v4.16b 539 1.1 christos #else 540 1.1 christos mov v3.16b,v4.16b 541 1.1 christos #endif 542 1.1 christos #ifndef __AARCH64EB__ 543 1.1 christos rev32 v2.16b,v5.16b 544 1.1 christos #else 545 1.1 christos mov v2.16b,v5.16b 546 1.1 christos #endif 547 1.1 christos #ifndef __AARCH64EB__ 548 1.1 christos rev32 v1.16b,v6.16b 549 1.1 christos #else 550 1.1 christos mov v1.16b,v6.16b 551 1.1 christos #endif 552 1.1 christos #ifndef __AARCH64EB__ 553 1.1 christos rev32 v0.16b,v7.16b 554 1.1 christos #else 555 1.1 christos mov v0.16b,v7.16b 556 1.1 christos #endif 557 1.1 christos #ifndef __AARCH64EB__ 558 1.1 christos rev32 v7.16b,v8.16b 559 1.1 christos #else 560 1.1 christos mov v7.16b,v8.16b 561 1.1 christos #endif 562 1.1 christos #ifndef __AARCH64EB__ 563 1.1 christos rev32 v6.16b,v9.16b 564 1.1 christos #else 565 1.1 christos mov v6.16b,v9.16b 566 1.1 christos #endif 567 1.1 christos #ifndef __AARCH64EB__ 568 1.1 christos rev32 v5.16b,v10.16b 569 1.1 christos #else 570 1.1 christos mov v5.16b,v10.16b 571 1.1 christos #endif 572 1.1 christos #ifndef __AARCH64EB__ 573 1.1 christos rev32 v4.16b,v11.16b 574 1.1 christos #else 575 1.1 christos mov v4.16b,v11.16b 576 1.1 christos #endif 577 1.1 christos ret 578 1.1 christos .size _vpsm4_enc_8blks,.-_vpsm4_enc_8blks 579 1.1 christos .globl vpsm4_set_encrypt_key 580 1.1 christos .type vpsm4_set_encrypt_key,%function 581 1.1 christos .align 5 582 1.1 christos vpsm4_set_encrypt_key: 583 1.1 christos AARCH64_SIGN_LINK_REGISTER 584 1.1 christos stp x29,x30,[sp,#-16]! 585 1.1 christos mov w2,1 586 1.1 christos bl _vpsm4_set_key 587 1.1 christos ldp x29,x30,[sp],#16 588 1.1 christos AARCH64_VALIDATE_LINK_REGISTER 589 1.1 christos ret 590 1.1 christos .size vpsm4_set_encrypt_key,.-vpsm4_set_encrypt_key 591 1.1 christos .globl vpsm4_set_decrypt_key 592 1.1 christos .type vpsm4_set_decrypt_key,%function 593 1.1 christos .align 5 594 1.1 christos vpsm4_set_decrypt_key: 595 1.1 christos AARCH64_SIGN_LINK_REGISTER 596 1.1 christos stp x29,x30,[sp,#-16]! 597 1.1 christos mov w2,0 598 1.1 christos bl _vpsm4_set_key 599 1.1 christos ldp x29,x30,[sp],#16 600 1.1 christos AARCH64_VALIDATE_LINK_REGISTER 601 1.1 christos ret 602 1.1 christos .size vpsm4_set_decrypt_key,.-vpsm4_set_decrypt_key 603 1.1 christos .globl vpsm4_encrypt 604 1.1 christos .type vpsm4_encrypt,%function 605 1.1 christos .align 5 606 1.1 christos vpsm4_encrypt: 607 1.1 christos AARCH64_VALID_CALL_TARGET 608 1.1 christos ld1 {v4.4s},[x0] 609 1.1 christos adrp x10,.Lsbox 610 1.1 christos add x10,x10,#:lo12:.Lsbox 611 1.1 christos ld1 {v16.16b,v17.16b,v18.16b,v19.16b},[x10],#64 612 1.1 christos ld1 {v20.16b,v21.16b,v22.16b,v23.16b},[x10],#64 613 1.1 christos ld1 {v24.16b,v25.16b,v26.16b,v27.16b},[x10],#64 614 1.1 christos ld1 {v28.16b,v29.16b,v30.16b,v31.16b},[x10] 615 1.1 christos #ifndef __AARCH64EB__ 616 1.1 christos rev32 v4.16b,v4.16b 617 1.1 christos #endif 618 1.1 christos mov x3,x2 619 1.1 christos mov x10,x3 620 1.1 christos mov w11,#8 621 1.1 christos mov w12,v4.s[0] 622 1.1 christos mov w13,v4.s[1] 623 1.1 christos mov w14,v4.s[2] 624 1.1 christos mov w15,v4.s[3] 625 1.1 christos 10: 626 1.1 christos ldp w7,w8,[x10],8 627 1.1 christos // B0 ^= SBOX(B1 ^ B2 ^ B3 ^ RK0) 628 1.1 christos eor w6,w14,w15 629 1.1 christos eor w9,w7,w13 630 1.1 christos eor w6,w6,w9 631 1.1 christos movi v1.16b,#64 632 1.1 christos movi v2.16b,#128 633 1.1 christos movi v3.16b,#192 634 1.1 christos mov v0.s[0],w6 635 1.1 christos 636 1.1 christos sub v1.16b,v0.16b,v1.16b 637 1.1 christos sub v2.16b,v0.16b,v2.16b 638 1.1 christos sub v3.16b,v0.16b,v3.16b 639 1.1 christos 640 1.1 christos tbl v0.16b,{v16.16b,v17.16b,v18.16b,v19.16b},v0.16b 641 1.1 christos tbl v1.16b,{v20.16b,v21.16b,v22.16b,v23.16b},v1.16b 642 1.1 christos tbl v2.16b,{v24.16b,v25.16b,v26.16b,v27.16b},v2.16b 643 1.1 christos tbl v3.16b,{v28.16b,v29.16b,v30.16b,v31.16b},v3.16b 644 1.1 christos 645 1.1 christos mov w6,v0.s[0] 646 1.1 christos mov w7,v1.s[0] 647 1.1 christos mov w9,v2.s[0] 648 1.1 christos add w7,w6,w7 649 1.1 christos mov w6,v3.s[0] 650 1.1 christos add w7,w7,w9 651 1.1 christos add w7,w7,w6 652 1.1 christos 653 1.1 christos eor w6,w7,w7,ror #32-2 654 1.1 christos eor w6,w6,w7,ror #32-10 655 1.1 christos eor w6,w6,w7,ror #32-18 656 1.1 christos eor w6,w6,w7,ror #32-24 657 1.1 christos eor w12,w12,w6 658 1.1 christos // B1 ^= SBOX(B0 ^ B2 ^ B3 ^ RK1) 659 1.1 christos eor w6,w14,w15 660 1.1 christos eor w9,w12,w8 661 1.1 christos eor w6,w6,w9 662 1.1 christos movi v1.16b,#64 663 1.1 christos movi v2.16b,#128 664 1.1 christos movi v3.16b,#192 665 1.1 christos mov v0.s[0],w6 666 1.1 christos 667 1.1 christos sub v1.16b,v0.16b,v1.16b 668 1.1 christos sub v2.16b,v0.16b,v2.16b 669 1.1 christos sub v3.16b,v0.16b,v3.16b 670 1.1 christos 671 1.1 christos tbl v0.16b,{v16.16b,v17.16b,v18.16b,v19.16b},v0.16b 672 1.1 christos tbl v1.16b,{v20.16b,v21.16b,v22.16b,v23.16b},v1.16b 673 1.1 christos tbl v2.16b,{v24.16b,v25.16b,v26.16b,v27.16b},v2.16b 674 1.1 christos tbl v3.16b,{v28.16b,v29.16b,v30.16b,v31.16b},v3.16b 675 1.1 christos 676 1.1 christos mov w6,v0.s[0] 677 1.1 christos mov w7,v1.s[0] 678 1.1 christos mov w9,v2.s[0] 679 1.1 christos add w7,w6,w7 680 1.1 christos mov w6,v3.s[0] 681 1.1 christos add w7,w7,w9 682 1.1 christos add w7,w7,w6 683 1.1 christos 684 1.1 christos eor w6,w7,w7,ror #32-2 685 1.1 christos eor w6,w6,w7,ror #32-10 686 1.1 christos eor w6,w6,w7,ror #32-18 687 1.1 christos eor w6,w6,w7,ror #32-24 688 1.1 christos ldp w7,w8,[x10],8 689 1.1 christos eor w13,w13,w6 690 1.1 christos // B2 ^= SBOX(B0 ^ B1 ^ B3 ^ RK2) 691 1.1 christos eor w6,w12,w13 692 1.1 christos eor w9,w7,w15 693 1.1 christos eor w6,w6,w9 694 1.1 christos movi v1.16b,#64 695 1.1 christos movi v2.16b,#128 696 1.1 christos movi v3.16b,#192 697 1.1 christos mov v0.s[0],w6 698 1.1 christos 699 1.1 christos sub v1.16b,v0.16b,v1.16b 700 1.1 christos sub v2.16b,v0.16b,v2.16b 701 1.1 christos sub v3.16b,v0.16b,v3.16b 702 1.1 christos 703 1.1 christos tbl v0.16b,{v16.16b,v17.16b,v18.16b,v19.16b},v0.16b 704 1.1 christos tbl v1.16b,{v20.16b,v21.16b,v22.16b,v23.16b},v1.16b 705 1.1 christos tbl v2.16b,{v24.16b,v25.16b,v26.16b,v27.16b},v2.16b 706 1.1 christos tbl v3.16b,{v28.16b,v29.16b,v30.16b,v31.16b},v3.16b 707 1.1 christos 708 1.1 christos mov w6,v0.s[0] 709 1.1 christos mov w7,v1.s[0] 710 1.1 christos mov w9,v2.s[0] 711 1.1 christos add w7,w6,w7 712 1.1 christos mov w6,v3.s[0] 713 1.1 christos add w7,w7,w9 714 1.1 christos add w7,w7,w6 715 1.1 christos 716 1.1 christos eor w6,w7,w7,ror #32-2 717 1.1 christos eor w6,w6,w7,ror #32-10 718 1.1 christos eor w6,w6,w7,ror #32-18 719 1.1 christos eor w6,w6,w7,ror #32-24 720 1.1 christos eor w14,w14,w6 721 1.1 christos // B3 ^= SBOX(B0 ^ B1 ^ B2 ^ RK3) 722 1.1 christos eor w6,w12,w13 723 1.1 christos eor w9,w14,w8 724 1.1 christos eor w6,w6,w9 725 1.1 christos movi v1.16b,#64 726 1.1 christos movi v2.16b,#128 727 1.1 christos movi v3.16b,#192 728 1.1 christos mov v0.s[0],w6 729 1.1 christos 730 1.1 christos sub v1.16b,v0.16b,v1.16b 731 1.1 christos sub v2.16b,v0.16b,v2.16b 732 1.1 christos sub v3.16b,v0.16b,v3.16b 733 1.1 christos 734 1.1 christos tbl v0.16b,{v16.16b,v17.16b,v18.16b,v19.16b},v0.16b 735 1.1 christos tbl v1.16b,{v20.16b,v21.16b,v22.16b,v23.16b},v1.16b 736 1.1 christos tbl v2.16b,{v24.16b,v25.16b,v26.16b,v27.16b},v2.16b 737 1.1 christos tbl v3.16b,{v28.16b,v29.16b,v30.16b,v31.16b},v3.16b 738 1.1 christos 739 1.1 christos mov w6,v0.s[0] 740 1.1 christos mov w7,v1.s[0] 741 1.1 christos mov w9,v2.s[0] 742 1.1 christos add w7,w6,w7 743 1.1 christos mov w6,v3.s[0] 744 1.1 christos add w7,w7,w9 745 1.1 christos add w7,w7,w6 746 1.1 christos 747 1.1 christos eor w6,w7,w7,ror #32-2 748 1.1 christos eor w6,w6,w7,ror #32-10 749 1.1 christos eor w6,w6,w7,ror #32-18 750 1.1 christos eor w6,w6,w7,ror #32-24 751 1.1 christos eor w15,w15,w6 752 1.1 christos subs w11,w11,#1 753 1.1 christos b.ne 10b 754 1.1 christos mov v4.s[0],w15 755 1.1 christos mov v4.s[1],w14 756 1.1 christos mov v4.s[2],w13 757 1.1 christos mov v4.s[3],w12 758 1.1 christos #ifndef __AARCH64EB__ 759 1.1 christos rev32 v4.16b,v4.16b 760 1.1 christos #endif 761 1.1 christos st1 {v4.4s},[x1] 762 1.1 christos ret 763 1.1 christos .size vpsm4_encrypt,.-vpsm4_encrypt 764 1.1 christos .globl vpsm4_decrypt 765 1.1 christos .type vpsm4_decrypt,%function 766 1.1 christos .align 5 767 1.1 christos vpsm4_decrypt: 768 1.1 christos AARCH64_VALID_CALL_TARGET 769 1.1 christos ld1 {v4.4s},[x0] 770 1.1 christos adrp x10,.Lsbox 771 1.1 christos add x10,x10,#:lo12:.Lsbox 772 1.1 christos ld1 {v16.16b,v17.16b,v18.16b,v19.16b},[x10],#64 773 1.1 christos ld1 {v20.16b,v21.16b,v22.16b,v23.16b},[x10],#64 774 1.1 christos ld1 {v24.16b,v25.16b,v26.16b,v27.16b},[x10],#64 775 1.1 christos ld1 {v28.16b,v29.16b,v30.16b,v31.16b},[x10] 776 1.1 christos #ifndef __AARCH64EB__ 777 1.1 christos rev32 v4.16b,v4.16b 778 1.1 christos #endif 779 1.1 christos mov x3,x2 780 1.1 christos mov x10,x3 781 1.1 christos mov w11,#8 782 1.1 christos mov w12,v4.s[0] 783 1.1 christos mov w13,v4.s[1] 784 1.1 christos mov w14,v4.s[2] 785 1.1 christos mov w15,v4.s[3] 786 1.1 christos 10: 787 1.1 christos ldp w7,w8,[x10],8 788 1.1 christos // B0 ^= SBOX(B1 ^ B2 ^ B3 ^ RK0) 789 1.1 christos eor w6,w14,w15 790 1.1 christos eor w9,w7,w13 791 1.1 christos eor w6,w6,w9 792 1.1 christos movi v1.16b,#64 793 1.1 christos movi v2.16b,#128 794 1.1 christos movi v3.16b,#192 795 1.1 christos mov v0.s[0],w6 796 1.1 christos 797 1.1 christos sub v1.16b,v0.16b,v1.16b 798 1.1 christos sub v2.16b,v0.16b,v2.16b 799 1.1 christos sub v3.16b,v0.16b,v3.16b 800 1.1 christos 801 1.1 christos tbl v0.16b,{v16.16b,v17.16b,v18.16b,v19.16b},v0.16b 802 1.1 christos tbl v1.16b,{v20.16b,v21.16b,v22.16b,v23.16b},v1.16b 803 1.1 christos tbl v2.16b,{v24.16b,v25.16b,v26.16b,v27.16b},v2.16b 804 1.1 christos tbl v3.16b,{v28.16b,v29.16b,v30.16b,v31.16b},v3.16b 805 1.1 christos 806 1.1 christos mov w6,v0.s[0] 807 1.1 christos mov w7,v1.s[0] 808 1.1 christos mov w9,v2.s[0] 809 1.1 christos add w7,w6,w7 810 1.1 christos mov w6,v3.s[0] 811 1.1 christos add w7,w7,w9 812 1.1 christos add w7,w7,w6 813 1.1 christos 814 1.1 christos eor w6,w7,w7,ror #32-2 815 1.1 christos eor w6,w6,w7,ror #32-10 816 1.1 christos eor w6,w6,w7,ror #32-18 817 1.1 christos eor w6,w6,w7,ror #32-24 818 1.1 christos eor w12,w12,w6 819 1.1 christos // B1 ^= SBOX(B0 ^ B2 ^ B3 ^ RK1) 820 1.1 christos eor w6,w14,w15 821 1.1 christos eor w9,w12,w8 822 1.1 christos eor w6,w6,w9 823 1.1 christos movi v1.16b,#64 824 1.1 christos movi v2.16b,#128 825 1.1 christos movi v3.16b,#192 826 1.1 christos mov v0.s[0],w6 827 1.1 christos 828 1.1 christos sub v1.16b,v0.16b,v1.16b 829 1.1 christos sub v2.16b,v0.16b,v2.16b 830 1.1 christos sub v3.16b,v0.16b,v3.16b 831 1.1 christos 832 1.1 christos tbl v0.16b,{v16.16b,v17.16b,v18.16b,v19.16b},v0.16b 833 1.1 christos tbl v1.16b,{v20.16b,v21.16b,v22.16b,v23.16b},v1.16b 834 1.1 christos tbl v2.16b,{v24.16b,v25.16b,v26.16b,v27.16b},v2.16b 835 1.1 christos tbl v3.16b,{v28.16b,v29.16b,v30.16b,v31.16b},v3.16b 836 1.1 christos 837 1.1 christos mov w6,v0.s[0] 838 1.1 christos mov w7,v1.s[0] 839 1.1 christos mov w9,v2.s[0] 840 1.1 christos add w7,w6,w7 841 1.1 christos mov w6,v3.s[0] 842 1.1 christos add w7,w7,w9 843 1.1 christos add w7,w7,w6 844 1.1 christos 845 1.1 christos eor w6,w7,w7,ror #32-2 846 1.1 christos eor w6,w6,w7,ror #32-10 847 1.1 christos eor w6,w6,w7,ror #32-18 848 1.1 christos eor w6,w6,w7,ror #32-24 849 1.1 christos ldp w7,w8,[x10],8 850 1.1 christos eor w13,w13,w6 851 1.1 christos // B2 ^= SBOX(B0 ^ B1 ^ B3 ^ RK2) 852 1.1 christos eor w6,w12,w13 853 1.1 christos eor w9,w7,w15 854 1.1 christos eor w6,w6,w9 855 1.1 christos movi v1.16b,#64 856 1.1 christos movi v2.16b,#128 857 1.1 christos movi v3.16b,#192 858 1.1 christos mov v0.s[0],w6 859 1.1 christos 860 1.1 christos sub v1.16b,v0.16b,v1.16b 861 1.1 christos sub v2.16b,v0.16b,v2.16b 862 1.1 christos sub v3.16b,v0.16b,v3.16b 863 1.1 christos 864 1.1 christos tbl v0.16b,{v16.16b,v17.16b,v18.16b,v19.16b},v0.16b 865 1.1 christos tbl v1.16b,{v20.16b,v21.16b,v22.16b,v23.16b},v1.16b 866 1.1 christos tbl v2.16b,{v24.16b,v25.16b,v26.16b,v27.16b},v2.16b 867 1.1 christos tbl v3.16b,{v28.16b,v29.16b,v30.16b,v31.16b},v3.16b 868 1.1 christos 869 1.1 christos mov w6,v0.s[0] 870 1.1 christos mov w7,v1.s[0] 871 1.1 christos mov w9,v2.s[0] 872 1.1 christos add w7,w6,w7 873 1.1 christos mov w6,v3.s[0] 874 1.1 christos add w7,w7,w9 875 1.1 christos add w7,w7,w6 876 1.1 christos 877 1.1 christos eor w6,w7,w7,ror #32-2 878 1.1 christos eor w6,w6,w7,ror #32-10 879 1.1 christos eor w6,w6,w7,ror #32-18 880 1.1 christos eor w6,w6,w7,ror #32-24 881 1.1 christos eor w14,w14,w6 882 1.1 christos // B3 ^= SBOX(B0 ^ B1 ^ B2 ^ RK3) 883 1.1 christos eor w6,w12,w13 884 1.1 christos eor w9,w14,w8 885 1.1 christos eor w6,w6,w9 886 1.1 christos movi v1.16b,#64 887 1.1 christos movi v2.16b,#128 888 1.1 christos movi v3.16b,#192 889 1.1 christos mov v0.s[0],w6 890 1.1 christos 891 1.1 christos sub v1.16b,v0.16b,v1.16b 892 1.1 christos sub v2.16b,v0.16b,v2.16b 893 1.1 christos sub v3.16b,v0.16b,v3.16b 894 1.1 christos 895 1.1 christos tbl v0.16b,{v16.16b,v17.16b,v18.16b,v19.16b},v0.16b 896 1.1 christos tbl v1.16b,{v20.16b,v21.16b,v22.16b,v23.16b},v1.16b 897 1.1 christos tbl v2.16b,{v24.16b,v25.16b,v26.16b,v27.16b},v2.16b 898 1.1 christos tbl v3.16b,{v28.16b,v29.16b,v30.16b,v31.16b},v3.16b 899 1.1 christos 900 1.1 christos mov w6,v0.s[0] 901 1.1 christos mov w7,v1.s[0] 902 1.1 christos mov w9,v2.s[0] 903 1.1 christos add w7,w6,w7 904 1.1 christos mov w6,v3.s[0] 905 1.1 christos add w7,w7,w9 906 1.1 christos add w7,w7,w6 907 1.1 christos 908 1.1 christos eor w6,w7,w7,ror #32-2 909 1.1 christos eor w6,w6,w7,ror #32-10 910 1.1 christos eor w6,w6,w7,ror #32-18 911 1.1 christos eor w6,w6,w7,ror #32-24 912 1.1 christos eor w15,w15,w6 913 1.1 christos subs w11,w11,#1 914 1.1 christos b.ne 10b 915 1.1 christos mov v4.s[0],w15 916 1.1 christos mov v4.s[1],w14 917 1.1 christos mov v4.s[2],w13 918 1.1 christos mov v4.s[3],w12 919 1.1 christos #ifndef __AARCH64EB__ 920 1.1 christos rev32 v4.16b,v4.16b 921 1.1 christos #endif 922 1.1 christos st1 {v4.4s},[x1] 923 1.1 christos ret 924 1.1 christos .size vpsm4_decrypt,.-vpsm4_decrypt 925 1.1 christos .globl vpsm4_ecb_encrypt 926 1.1 christos .type vpsm4_ecb_encrypt,%function 927 1.1 christos .align 5 928 1.1 christos vpsm4_ecb_encrypt: 929 1.1 christos AARCH64_SIGN_LINK_REGISTER 930 1.1 christos // convert length into blocks 931 1.1 christos lsr x2,x2,4 932 1.1 christos stp d8,d9,[sp,#-80]! 933 1.1 christos stp d10,d11,[sp,#16] 934 1.1 christos stp d12,d13,[sp,#32] 935 1.1 christos stp d14,d15,[sp,#48] 936 1.1 christos stp x29,x30,[sp,#64] 937 1.1 christos adrp x10,.Lsbox 938 1.1 christos add x10,x10,#:lo12:.Lsbox 939 1.1 christos ld1 {v16.16b,v17.16b,v18.16b,v19.16b},[x10],#64 940 1.1 christos ld1 {v20.16b,v21.16b,v22.16b,v23.16b},[x10],#64 941 1.1 christos ld1 {v24.16b,v25.16b,v26.16b,v27.16b},[x10],#64 942 1.1 christos ld1 {v28.16b,v29.16b,v30.16b,v31.16b},[x10] 943 1.1 christos .Lecb_8_blocks_process: 944 1.1 christos cmp w2,#8 945 1.1 christos b.lt .Lecb_4_blocks_process 946 1.1 christos ld4 {v4.4s,v5.4s,v6.4s,v7.4s},[x0],#64 947 1.1 christos ld4 {v8.4s,v9.4s,v10.4s,v11.4s},[x0],#64 948 1.1 christos #ifndef __AARCH64EB__ 949 1.1 christos rev32 v4.16b,v4.16b 950 1.1 christos #endif 951 1.1 christos #ifndef __AARCH64EB__ 952 1.1 christos rev32 v5.16b,v5.16b 953 1.1 christos #endif 954 1.1 christos #ifndef __AARCH64EB__ 955 1.1 christos rev32 v6.16b,v6.16b 956 1.1 christos #endif 957 1.1 christos #ifndef __AARCH64EB__ 958 1.1 christos rev32 v7.16b,v7.16b 959 1.1 christos #endif 960 1.1 christos #ifndef __AARCH64EB__ 961 1.1 christos rev32 v8.16b,v8.16b 962 1.1 christos #endif 963 1.1 christos #ifndef __AARCH64EB__ 964 1.1 christos rev32 v9.16b,v9.16b 965 1.1 christos #endif 966 1.1 christos #ifndef __AARCH64EB__ 967 1.1 christos rev32 v10.16b,v10.16b 968 1.1 christos #endif 969 1.1 christos #ifndef __AARCH64EB__ 970 1.1 christos rev32 v11.16b,v11.16b 971 1.1 christos #endif 972 1.1 christos bl _vpsm4_enc_8blks 973 1.1 christos st4 {v0.4s,v1.4s,v2.4s,v3.4s},[x1],#64 974 1.1 christos st4 {v4.4s,v5.4s,v6.4s,v7.4s},[x1],#64 975 1.1 christos subs w2,w2,#8 976 1.1 christos b.gt .Lecb_8_blocks_process 977 1.1 christos b 100f 978 1.1 christos .Lecb_4_blocks_process: 979 1.1 christos cmp w2,#4 980 1.1 christos b.lt 1f 981 1.1 christos ld4 {v4.4s,v5.4s,v6.4s,v7.4s},[x0],#64 982 1.1 christos #ifndef __AARCH64EB__ 983 1.1 christos rev32 v4.16b,v4.16b 984 1.1 christos #endif 985 1.1 christos #ifndef __AARCH64EB__ 986 1.1 christos rev32 v5.16b,v5.16b 987 1.1 christos #endif 988 1.1 christos #ifndef __AARCH64EB__ 989 1.1 christos rev32 v6.16b,v6.16b 990 1.1 christos #endif 991 1.1 christos #ifndef __AARCH64EB__ 992 1.1 christos rev32 v7.16b,v7.16b 993 1.1 christos #endif 994 1.1 christos bl _vpsm4_enc_4blks 995 1.1 christos st4 {v0.4s,v1.4s,v2.4s,v3.4s},[x1],#64 996 1.1 christos sub w2,w2,#4 997 1.1 christos 1: 998 1.1 christos // process last block 999 1.1 christos cmp w2,#1 1000 1.1 christos b.lt 100f 1001 1.1 christos b.gt 1f 1002 1.1 christos ld1 {v4.4s},[x0] 1003 1.1 christos #ifndef __AARCH64EB__ 1004 1.1 christos rev32 v4.16b,v4.16b 1005 1.1 christos #endif 1006 1.1 christos mov x10,x3 1007 1.1 christos mov w11,#8 1008 1.1 christos mov w12,v4.s[0] 1009 1.1 christos mov w13,v4.s[1] 1010 1.1 christos mov w14,v4.s[2] 1011 1.1 christos mov w15,v4.s[3] 1012 1.1 christos 10: 1013 1.1 christos ldp w7,w8,[x10],8 1014 1.1 christos // B0 ^= SBOX(B1 ^ B2 ^ B3 ^ RK0) 1015 1.1 christos eor w6,w14,w15 1016 1.1 christos eor w9,w7,w13 1017 1.1 christos eor w6,w6,w9 1018 1.1 christos movi v1.16b,#64 1019 1.1 christos movi v2.16b,#128 1020 1.1 christos movi v3.16b,#192 1021 1.1 christos mov v0.s[0],w6 1022 1.1 christos 1023 1.1 christos sub v1.16b,v0.16b,v1.16b 1024 1.1 christos sub v2.16b,v0.16b,v2.16b 1025 1.1 christos sub v3.16b,v0.16b,v3.16b 1026 1.1 christos 1027 1.1 christos tbl v0.16b,{v16.16b,v17.16b,v18.16b,v19.16b},v0.16b 1028 1.1 christos tbl v1.16b,{v20.16b,v21.16b,v22.16b,v23.16b},v1.16b 1029 1.1 christos tbl v2.16b,{v24.16b,v25.16b,v26.16b,v27.16b},v2.16b 1030 1.1 christos tbl v3.16b,{v28.16b,v29.16b,v30.16b,v31.16b},v3.16b 1031 1.1 christos 1032 1.1 christos mov w6,v0.s[0] 1033 1.1 christos mov w7,v1.s[0] 1034 1.1 christos mov w9,v2.s[0] 1035 1.1 christos add w7,w6,w7 1036 1.1 christos mov w6,v3.s[0] 1037 1.1 christos add w7,w7,w9 1038 1.1 christos add w7,w7,w6 1039 1.1 christos 1040 1.1 christos eor w6,w7,w7,ror #32-2 1041 1.1 christos eor w6,w6,w7,ror #32-10 1042 1.1 christos eor w6,w6,w7,ror #32-18 1043 1.1 christos eor w6,w6,w7,ror #32-24 1044 1.1 christos eor w12,w12,w6 1045 1.1 christos // B1 ^= SBOX(B0 ^ B2 ^ B3 ^ RK1) 1046 1.1 christos eor w6,w14,w15 1047 1.1 christos eor w9,w12,w8 1048 1.1 christos eor w6,w6,w9 1049 1.1 christos movi v1.16b,#64 1050 1.1 christos movi v2.16b,#128 1051 1.1 christos movi v3.16b,#192 1052 1.1 christos mov v0.s[0],w6 1053 1.1 christos 1054 1.1 christos sub v1.16b,v0.16b,v1.16b 1055 1.1 christos sub v2.16b,v0.16b,v2.16b 1056 1.1 christos sub v3.16b,v0.16b,v3.16b 1057 1.1 christos 1058 1.1 christos tbl v0.16b,{v16.16b,v17.16b,v18.16b,v19.16b},v0.16b 1059 1.1 christos tbl v1.16b,{v20.16b,v21.16b,v22.16b,v23.16b},v1.16b 1060 1.1 christos tbl v2.16b,{v24.16b,v25.16b,v26.16b,v27.16b},v2.16b 1061 1.1 christos tbl v3.16b,{v28.16b,v29.16b,v30.16b,v31.16b},v3.16b 1062 1.1 christos 1063 1.1 christos mov w6,v0.s[0] 1064 1.1 christos mov w7,v1.s[0] 1065 1.1 christos mov w9,v2.s[0] 1066 1.1 christos add w7,w6,w7 1067 1.1 christos mov w6,v3.s[0] 1068 1.1 christos add w7,w7,w9 1069 1.1 christos add w7,w7,w6 1070 1.1 christos 1071 1.1 christos eor w6,w7,w7,ror #32-2 1072 1.1 christos eor w6,w6,w7,ror #32-10 1073 1.1 christos eor w6,w6,w7,ror #32-18 1074 1.1 christos eor w6,w6,w7,ror #32-24 1075 1.1 christos ldp w7,w8,[x10],8 1076 1.1 christos eor w13,w13,w6 1077 1.1 christos // B2 ^= SBOX(B0 ^ B1 ^ B3 ^ RK2) 1078 1.1 christos eor w6,w12,w13 1079 1.1 christos eor w9,w7,w15 1080 1.1 christos eor w6,w6,w9 1081 1.1 christos movi v1.16b,#64 1082 1.1 christos movi v2.16b,#128 1083 1.1 christos movi v3.16b,#192 1084 1.1 christos mov v0.s[0],w6 1085 1.1 christos 1086 1.1 christos sub v1.16b,v0.16b,v1.16b 1087 1.1 christos sub v2.16b,v0.16b,v2.16b 1088 1.1 christos sub v3.16b,v0.16b,v3.16b 1089 1.1 christos 1090 1.1 christos tbl v0.16b,{v16.16b,v17.16b,v18.16b,v19.16b},v0.16b 1091 1.1 christos tbl v1.16b,{v20.16b,v21.16b,v22.16b,v23.16b},v1.16b 1092 1.1 christos tbl v2.16b,{v24.16b,v25.16b,v26.16b,v27.16b},v2.16b 1093 1.1 christos tbl v3.16b,{v28.16b,v29.16b,v30.16b,v31.16b},v3.16b 1094 1.1 christos 1095 1.1 christos mov w6,v0.s[0] 1096 1.1 christos mov w7,v1.s[0] 1097 1.1 christos mov w9,v2.s[0] 1098 1.1 christos add w7,w6,w7 1099 1.1 christos mov w6,v3.s[0] 1100 1.1 christos add w7,w7,w9 1101 1.1 christos add w7,w7,w6 1102 1.1 christos 1103 1.1 christos eor w6,w7,w7,ror #32-2 1104 1.1 christos eor w6,w6,w7,ror #32-10 1105 1.1 christos eor w6,w6,w7,ror #32-18 1106 1.1 christos eor w6,w6,w7,ror #32-24 1107 1.1 christos eor w14,w14,w6 1108 1.1 christos // B3 ^= SBOX(B0 ^ B1 ^ B2 ^ RK3) 1109 1.1 christos eor w6,w12,w13 1110 1.1 christos eor w9,w14,w8 1111 1.1 christos eor w6,w6,w9 1112 1.1 christos movi v1.16b,#64 1113 1.1 christos movi v2.16b,#128 1114 1.1 christos movi v3.16b,#192 1115 1.1 christos mov v0.s[0],w6 1116 1.1 christos 1117 1.1 christos sub v1.16b,v0.16b,v1.16b 1118 1.1 christos sub v2.16b,v0.16b,v2.16b 1119 1.1 christos sub v3.16b,v0.16b,v3.16b 1120 1.1 christos 1121 1.1 christos tbl v0.16b,{v16.16b,v17.16b,v18.16b,v19.16b},v0.16b 1122 1.1 christos tbl v1.16b,{v20.16b,v21.16b,v22.16b,v23.16b},v1.16b 1123 1.1 christos tbl v2.16b,{v24.16b,v25.16b,v26.16b,v27.16b},v2.16b 1124 1.1 christos tbl v3.16b,{v28.16b,v29.16b,v30.16b,v31.16b},v3.16b 1125 1.1 christos 1126 1.1 christos mov w6,v0.s[0] 1127 1.1 christos mov w7,v1.s[0] 1128 1.1 christos mov w9,v2.s[0] 1129 1.1 christos add w7,w6,w7 1130 1.1 christos mov w6,v3.s[0] 1131 1.1 christos add w7,w7,w9 1132 1.1 christos add w7,w7,w6 1133 1.1 christos 1134 1.1 christos eor w6,w7,w7,ror #32-2 1135 1.1 christos eor w6,w6,w7,ror #32-10 1136 1.1 christos eor w6,w6,w7,ror #32-18 1137 1.1 christos eor w6,w6,w7,ror #32-24 1138 1.1 christos eor w15,w15,w6 1139 1.1 christos subs w11,w11,#1 1140 1.1 christos b.ne 10b 1141 1.1 christos mov v4.s[0],w15 1142 1.1 christos mov v4.s[1],w14 1143 1.1 christos mov v4.s[2],w13 1144 1.1 christos mov v4.s[3],w12 1145 1.1 christos #ifndef __AARCH64EB__ 1146 1.1 christos rev32 v4.16b,v4.16b 1147 1.1 christos #endif 1148 1.1 christos st1 {v4.4s},[x1] 1149 1.1 christos b 100f 1150 1.1 christos 1: // process last 2 blocks 1151 1.1 christos ld4 {v4.s,v5.s,v6.s,v7.s}[0],[x0],#16 1152 1.1 christos ld4 {v4.s,v5.s,v6.s,v7.s}[1],[x0],#16 1153 1.1 christos cmp w2,#2 1154 1.1 christos b.gt 1f 1155 1.1 christos #ifndef __AARCH64EB__ 1156 1.1 christos rev32 v4.16b,v4.16b 1157 1.1 christos #endif 1158 1.1 christos #ifndef __AARCH64EB__ 1159 1.1 christos rev32 v5.16b,v5.16b 1160 1.1 christos #endif 1161 1.1 christos #ifndef __AARCH64EB__ 1162 1.1 christos rev32 v6.16b,v6.16b 1163 1.1 christos #endif 1164 1.1 christos #ifndef __AARCH64EB__ 1165 1.1 christos rev32 v7.16b,v7.16b 1166 1.1 christos #endif 1167 1.1 christos bl _vpsm4_enc_4blks 1168 1.1 christos st4 {v0.s,v1.s,v2.s,v3.s}[0],[x1],#16 1169 1.1 christos st4 {v0.s,v1.s,v2.s,v3.s}[1],[x1] 1170 1.1 christos b 100f 1171 1.1 christos 1: // process last 3 blocks 1172 1.1 christos ld4 {v4.s,v5.s,v6.s,v7.s}[2],[x0],#16 1173 1.1 christos #ifndef __AARCH64EB__ 1174 1.1 christos rev32 v4.16b,v4.16b 1175 1.1 christos #endif 1176 1.1 christos #ifndef __AARCH64EB__ 1177 1.1 christos rev32 v5.16b,v5.16b 1178 1.1 christos #endif 1179 1.1 christos #ifndef __AARCH64EB__ 1180 1.1 christos rev32 v6.16b,v6.16b 1181 1.1 christos #endif 1182 1.1 christos #ifndef __AARCH64EB__ 1183 1.1 christos rev32 v7.16b,v7.16b 1184 1.1 christos #endif 1185 1.1 christos bl _vpsm4_enc_4blks 1186 1.1 christos st4 {v0.s,v1.s,v2.s,v3.s}[0],[x1],#16 1187 1.1 christos st4 {v0.s,v1.s,v2.s,v3.s}[1],[x1],#16 1188 1.1 christos st4 {v0.s,v1.s,v2.s,v3.s}[2],[x1] 1189 1.1 christos 100: 1190 1.1 christos ldp d10,d11,[sp,#16] 1191 1.1 christos ldp d12,d13,[sp,#32] 1192 1.1 christos ldp d14,d15,[sp,#48] 1193 1.1 christos ldp x29,x30,[sp,#64] 1194 1.1 christos ldp d8,d9,[sp],#80 1195 1.1 christos AARCH64_VALIDATE_LINK_REGISTER 1196 1.1 christos ret 1197 1.1 christos .size vpsm4_ecb_encrypt,.-vpsm4_ecb_encrypt 1198 1.1 christos .globl vpsm4_cbc_encrypt 1199 1.1 christos .type vpsm4_cbc_encrypt,%function 1200 1.1 christos .align 5 1201 1.1 christos vpsm4_cbc_encrypt: 1202 1.1 christos AARCH64_VALID_CALL_TARGET 1203 1.1 christos lsr x2,x2,4 1204 1.1 christos adrp x10,.Lsbox 1205 1.1 christos add x10,x10,#:lo12:.Lsbox 1206 1.1 christos ld1 {v16.16b,v17.16b,v18.16b,v19.16b},[x10],#64 1207 1.1 christos ld1 {v20.16b,v21.16b,v22.16b,v23.16b},[x10],#64 1208 1.1 christos ld1 {v24.16b,v25.16b,v26.16b,v27.16b},[x10],#64 1209 1.1 christos ld1 {v28.16b,v29.16b,v30.16b,v31.16b},[x10] 1210 1.1 christos cbz w5,.Ldec 1211 1.1 christos ld1 {v3.4s},[x4] 1212 1.1 christos .Lcbc_4_blocks_enc: 1213 1.1 christos cmp w2,#4 1214 1.1 christos b.lt 1f 1215 1.1 christos ld1 {v4.4s,v5.4s,v6.4s,v7.4s},[x0],#64 1216 1.1 christos eor v4.16b,v4.16b,v3.16b 1217 1.1 christos #ifndef __AARCH64EB__ 1218 1.1 christos rev32 v5.16b,v5.16b 1219 1.1 christos #endif 1220 1.1 christos #ifndef __AARCH64EB__ 1221 1.1 christos rev32 v4.16b,v4.16b 1222 1.1 christos #endif 1223 1.1 christos #ifndef __AARCH64EB__ 1224 1.1 christos rev32 v6.16b,v6.16b 1225 1.1 christos #endif 1226 1.1 christos #ifndef __AARCH64EB__ 1227 1.1 christos rev32 v7.16b,v7.16b 1228 1.1 christos #endif 1229 1.1 christos mov x10,x3 1230 1.1 christos mov w11,#8 1231 1.1 christos mov w12,v4.s[0] 1232 1.1 christos mov w13,v4.s[1] 1233 1.1 christos mov w14,v4.s[2] 1234 1.1 christos mov w15,v4.s[3] 1235 1.1 christos 10: 1236 1.1 christos ldp w7,w8,[x10],8 1237 1.1 christos // B0 ^= SBOX(B1 ^ B2 ^ B3 ^ RK0) 1238 1.1 christos eor w6,w14,w15 1239 1.1 christos eor w9,w7,w13 1240 1.1 christos eor w6,w6,w9 1241 1.1 christos movi v1.16b,#64 1242 1.1 christos movi v2.16b,#128 1243 1.1 christos movi v3.16b,#192 1244 1.1 christos mov v0.s[0],w6 1245 1.1 christos 1246 1.1 christos sub v1.16b,v0.16b,v1.16b 1247 1.1 christos sub v2.16b,v0.16b,v2.16b 1248 1.1 christos sub v3.16b,v0.16b,v3.16b 1249 1.1 christos 1250 1.1 christos tbl v0.16b,{v16.16b,v17.16b,v18.16b,v19.16b},v0.16b 1251 1.1 christos tbl v1.16b,{v20.16b,v21.16b,v22.16b,v23.16b},v1.16b 1252 1.1 christos tbl v2.16b,{v24.16b,v25.16b,v26.16b,v27.16b},v2.16b 1253 1.1 christos tbl v3.16b,{v28.16b,v29.16b,v30.16b,v31.16b},v3.16b 1254 1.1 christos 1255 1.1 christos mov w6,v0.s[0] 1256 1.1 christos mov w7,v1.s[0] 1257 1.1 christos mov w9,v2.s[0] 1258 1.1 christos add w7,w6,w7 1259 1.1 christos mov w6,v3.s[0] 1260 1.1 christos add w7,w7,w9 1261 1.1 christos add w7,w7,w6 1262 1.1 christos 1263 1.1 christos eor w6,w7,w7,ror #32-2 1264 1.1 christos eor w6,w6,w7,ror #32-10 1265 1.1 christos eor w6,w6,w7,ror #32-18 1266 1.1 christos eor w6,w6,w7,ror #32-24 1267 1.1 christos eor w12,w12,w6 1268 1.1 christos // B1 ^= SBOX(B0 ^ B2 ^ B3 ^ RK1) 1269 1.1 christos eor w6,w14,w15 1270 1.1 christos eor w9,w12,w8 1271 1.1 christos eor w6,w6,w9 1272 1.1 christos movi v1.16b,#64 1273 1.1 christos movi v2.16b,#128 1274 1.1 christos movi v3.16b,#192 1275 1.1 christos mov v0.s[0],w6 1276 1.1 christos 1277 1.1 christos sub v1.16b,v0.16b,v1.16b 1278 1.1 christos sub v2.16b,v0.16b,v2.16b 1279 1.1 christos sub v3.16b,v0.16b,v3.16b 1280 1.1 christos 1281 1.1 christos tbl v0.16b,{v16.16b,v17.16b,v18.16b,v19.16b},v0.16b 1282 1.1 christos tbl v1.16b,{v20.16b,v21.16b,v22.16b,v23.16b},v1.16b 1283 1.1 christos tbl v2.16b,{v24.16b,v25.16b,v26.16b,v27.16b},v2.16b 1284 1.1 christos tbl v3.16b,{v28.16b,v29.16b,v30.16b,v31.16b},v3.16b 1285 1.1 christos 1286 1.1 christos mov w6,v0.s[0] 1287 1.1 christos mov w7,v1.s[0] 1288 1.1 christos mov w9,v2.s[0] 1289 1.1 christos add w7,w6,w7 1290 1.1 christos mov w6,v3.s[0] 1291 1.1 christos add w7,w7,w9 1292 1.1 christos add w7,w7,w6 1293 1.1 christos 1294 1.1 christos eor w6,w7,w7,ror #32-2 1295 1.1 christos eor w6,w6,w7,ror #32-10 1296 1.1 christos eor w6,w6,w7,ror #32-18 1297 1.1 christos eor w6,w6,w7,ror #32-24 1298 1.1 christos ldp w7,w8,[x10],8 1299 1.1 christos eor w13,w13,w6 1300 1.1 christos // B2 ^= SBOX(B0 ^ B1 ^ B3 ^ RK2) 1301 1.1 christos eor w6,w12,w13 1302 1.1 christos eor w9,w7,w15 1303 1.1 christos eor w6,w6,w9 1304 1.1 christos movi v1.16b,#64 1305 1.1 christos movi v2.16b,#128 1306 1.1 christos movi v3.16b,#192 1307 1.1 christos mov v0.s[0],w6 1308 1.1 christos 1309 1.1 christos sub v1.16b,v0.16b,v1.16b 1310 1.1 christos sub v2.16b,v0.16b,v2.16b 1311 1.1 christos sub v3.16b,v0.16b,v3.16b 1312 1.1 christos 1313 1.1 christos tbl v0.16b,{v16.16b,v17.16b,v18.16b,v19.16b},v0.16b 1314 1.1 christos tbl v1.16b,{v20.16b,v21.16b,v22.16b,v23.16b},v1.16b 1315 1.1 christos tbl v2.16b,{v24.16b,v25.16b,v26.16b,v27.16b},v2.16b 1316 1.1 christos tbl v3.16b,{v28.16b,v29.16b,v30.16b,v31.16b},v3.16b 1317 1.1 christos 1318 1.1 christos mov w6,v0.s[0] 1319 1.1 christos mov w7,v1.s[0] 1320 1.1 christos mov w9,v2.s[0] 1321 1.1 christos add w7,w6,w7 1322 1.1 christos mov w6,v3.s[0] 1323 1.1 christos add w7,w7,w9 1324 1.1 christos add w7,w7,w6 1325 1.1 christos 1326 1.1 christos eor w6,w7,w7,ror #32-2 1327 1.1 christos eor w6,w6,w7,ror #32-10 1328 1.1 christos eor w6,w6,w7,ror #32-18 1329 1.1 christos eor w6,w6,w7,ror #32-24 1330 1.1 christos eor w14,w14,w6 1331 1.1 christos // B3 ^= SBOX(B0 ^ B1 ^ B2 ^ RK3) 1332 1.1 christos eor w6,w12,w13 1333 1.1 christos eor w9,w14,w8 1334 1.1 christos eor w6,w6,w9 1335 1.1 christos movi v1.16b,#64 1336 1.1 christos movi v2.16b,#128 1337 1.1 christos movi v3.16b,#192 1338 1.1 christos mov v0.s[0],w6 1339 1.1 christos 1340 1.1 christos sub v1.16b,v0.16b,v1.16b 1341 1.1 christos sub v2.16b,v0.16b,v2.16b 1342 1.1 christos sub v3.16b,v0.16b,v3.16b 1343 1.1 christos 1344 1.1 christos tbl v0.16b,{v16.16b,v17.16b,v18.16b,v19.16b},v0.16b 1345 1.1 christos tbl v1.16b,{v20.16b,v21.16b,v22.16b,v23.16b},v1.16b 1346 1.1 christos tbl v2.16b,{v24.16b,v25.16b,v26.16b,v27.16b},v2.16b 1347 1.1 christos tbl v3.16b,{v28.16b,v29.16b,v30.16b,v31.16b},v3.16b 1348 1.1 christos 1349 1.1 christos mov w6,v0.s[0] 1350 1.1 christos mov w7,v1.s[0] 1351 1.1 christos mov w9,v2.s[0] 1352 1.1 christos add w7,w6,w7 1353 1.1 christos mov w6,v3.s[0] 1354 1.1 christos add w7,w7,w9 1355 1.1 christos add w7,w7,w6 1356 1.1 christos 1357 1.1 christos eor w6,w7,w7,ror #32-2 1358 1.1 christos eor w6,w6,w7,ror #32-10 1359 1.1 christos eor w6,w6,w7,ror #32-18 1360 1.1 christos eor w6,w6,w7,ror #32-24 1361 1.1 christos eor w15,w15,w6 1362 1.1 christos subs w11,w11,#1 1363 1.1 christos b.ne 10b 1364 1.1 christos mov v4.s[0],w15 1365 1.1 christos mov v4.s[1],w14 1366 1.1 christos mov v4.s[2],w13 1367 1.1 christos mov v4.s[3],w12 1368 1.1 christos eor v5.16b,v5.16b,v4.16b 1369 1.1 christos mov x10,x3 1370 1.1 christos mov w11,#8 1371 1.1 christos mov w12,v5.s[0] 1372 1.1 christos mov w13,v5.s[1] 1373 1.1 christos mov w14,v5.s[2] 1374 1.1 christos mov w15,v5.s[3] 1375 1.1 christos 10: 1376 1.1 christos ldp w7,w8,[x10],8 1377 1.1 christos // B0 ^= SBOX(B1 ^ B2 ^ B3 ^ RK0) 1378 1.1 christos eor w6,w14,w15 1379 1.1 christos eor w9,w7,w13 1380 1.1 christos eor w6,w6,w9 1381 1.1 christos movi v1.16b,#64 1382 1.1 christos movi v2.16b,#128 1383 1.1 christos movi v3.16b,#192 1384 1.1 christos mov v0.s[0],w6 1385 1.1 christos 1386 1.1 christos sub v1.16b,v0.16b,v1.16b 1387 1.1 christos sub v2.16b,v0.16b,v2.16b 1388 1.1 christos sub v3.16b,v0.16b,v3.16b 1389 1.1 christos 1390 1.1 christos tbl v0.16b,{v16.16b,v17.16b,v18.16b,v19.16b},v0.16b 1391 1.1 christos tbl v1.16b,{v20.16b,v21.16b,v22.16b,v23.16b},v1.16b 1392 1.1 christos tbl v2.16b,{v24.16b,v25.16b,v26.16b,v27.16b},v2.16b 1393 1.1 christos tbl v3.16b,{v28.16b,v29.16b,v30.16b,v31.16b},v3.16b 1394 1.1 christos 1395 1.1 christos mov w6,v0.s[0] 1396 1.1 christos mov w7,v1.s[0] 1397 1.1 christos mov w9,v2.s[0] 1398 1.1 christos add w7,w6,w7 1399 1.1 christos mov w6,v3.s[0] 1400 1.1 christos add w7,w7,w9 1401 1.1 christos add w7,w7,w6 1402 1.1 christos 1403 1.1 christos eor w6,w7,w7,ror #32-2 1404 1.1 christos eor w6,w6,w7,ror #32-10 1405 1.1 christos eor w6,w6,w7,ror #32-18 1406 1.1 christos eor w6,w6,w7,ror #32-24 1407 1.1 christos eor w12,w12,w6 1408 1.1 christos // B1 ^= SBOX(B0 ^ B2 ^ B3 ^ RK1) 1409 1.1 christos eor w6,w14,w15 1410 1.1 christos eor w9,w12,w8 1411 1.1 christos eor w6,w6,w9 1412 1.1 christos movi v1.16b,#64 1413 1.1 christos movi v2.16b,#128 1414 1.1 christos movi v3.16b,#192 1415 1.1 christos mov v0.s[0],w6 1416 1.1 christos 1417 1.1 christos sub v1.16b,v0.16b,v1.16b 1418 1.1 christos sub v2.16b,v0.16b,v2.16b 1419 1.1 christos sub v3.16b,v0.16b,v3.16b 1420 1.1 christos 1421 1.1 christos tbl v0.16b,{v16.16b,v17.16b,v18.16b,v19.16b},v0.16b 1422 1.1 christos tbl v1.16b,{v20.16b,v21.16b,v22.16b,v23.16b},v1.16b 1423 1.1 christos tbl v2.16b,{v24.16b,v25.16b,v26.16b,v27.16b},v2.16b 1424 1.1 christos tbl v3.16b,{v28.16b,v29.16b,v30.16b,v31.16b},v3.16b 1425 1.1 christos 1426 1.1 christos mov w6,v0.s[0] 1427 1.1 christos mov w7,v1.s[0] 1428 1.1 christos mov w9,v2.s[0] 1429 1.1 christos add w7,w6,w7 1430 1.1 christos mov w6,v3.s[0] 1431 1.1 christos add w7,w7,w9 1432 1.1 christos add w7,w7,w6 1433 1.1 christos 1434 1.1 christos eor w6,w7,w7,ror #32-2 1435 1.1 christos eor w6,w6,w7,ror #32-10 1436 1.1 christos eor w6,w6,w7,ror #32-18 1437 1.1 christos eor w6,w6,w7,ror #32-24 1438 1.1 christos ldp w7,w8,[x10],8 1439 1.1 christos eor w13,w13,w6 1440 1.1 christos // B2 ^= SBOX(B0 ^ B1 ^ B3 ^ RK2) 1441 1.1 christos eor w6,w12,w13 1442 1.1 christos eor w9,w7,w15 1443 1.1 christos eor w6,w6,w9 1444 1.1 christos movi v1.16b,#64 1445 1.1 christos movi v2.16b,#128 1446 1.1 christos movi v3.16b,#192 1447 1.1 christos mov v0.s[0],w6 1448 1.1 christos 1449 1.1 christos sub v1.16b,v0.16b,v1.16b 1450 1.1 christos sub v2.16b,v0.16b,v2.16b 1451 1.1 christos sub v3.16b,v0.16b,v3.16b 1452 1.1 christos 1453 1.1 christos tbl v0.16b,{v16.16b,v17.16b,v18.16b,v19.16b},v0.16b 1454 1.1 christos tbl v1.16b,{v20.16b,v21.16b,v22.16b,v23.16b},v1.16b 1455 1.1 christos tbl v2.16b,{v24.16b,v25.16b,v26.16b,v27.16b},v2.16b 1456 1.1 christos tbl v3.16b,{v28.16b,v29.16b,v30.16b,v31.16b},v3.16b 1457 1.1 christos 1458 1.1 christos mov w6,v0.s[0] 1459 1.1 christos mov w7,v1.s[0] 1460 1.1 christos mov w9,v2.s[0] 1461 1.1 christos add w7,w6,w7 1462 1.1 christos mov w6,v3.s[0] 1463 1.1 christos add w7,w7,w9 1464 1.1 christos add w7,w7,w6 1465 1.1 christos 1466 1.1 christos eor w6,w7,w7,ror #32-2 1467 1.1 christos eor w6,w6,w7,ror #32-10 1468 1.1 christos eor w6,w6,w7,ror #32-18 1469 1.1 christos eor w6,w6,w7,ror #32-24 1470 1.1 christos eor w14,w14,w6 1471 1.1 christos // B3 ^= SBOX(B0 ^ B1 ^ B2 ^ RK3) 1472 1.1 christos eor w6,w12,w13 1473 1.1 christos eor w9,w14,w8 1474 1.1 christos eor w6,w6,w9 1475 1.1 christos movi v1.16b,#64 1476 1.1 christos movi v2.16b,#128 1477 1.1 christos movi v3.16b,#192 1478 1.1 christos mov v0.s[0],w6 1479 1.1 christos 1480 1.1 christos sub v1.16b,v0.16b,v1.16b 1481 1.1 christos sub v2.16b,v0.16b,v2.16b 1482 1.1 christos sub v3.16b,v0.16b,v3.16b 1483 1.1 christos 1484 1.1 christos tbl v0.16b,{v16.16b,v17.16b,v18.16b,v19.16b},v0.16b 1485 1.1 christos tbl v1.16b,{v20.16b,v21.16b,v22.16b,v23.16b},v1.16b 1486 1.1 christos tbl v2.16b,{v24.16b,v25.16b,v26.16b,v27.16b},v2.16b 1487 1.1 christos tbl v3.16b,{v28.16b,v29.16b,v30.16b,v31.16b},v3.16b 1488 1.1 christos 1489 1.1 christos mov w6,v0.s[0] 1490 1.1 christos mov w7,v1.s[0] 1491 1.1 christos mov w9,v2.s[0] 1492 1.1 christos add w7,w6,w7 1493 1.1 christos mov w6,v3.s[0] 1494 1.1 christos add w7,w7,w9 1495 1.1 christos add w7,w7,w6 1496 1.1 christos 1497 1.1 christos eor w6,w7,w7,ror #32-2 1498 1.1 christos eor w6,w6,w7,ror #32-10 1499 1.1 christos eor w6,w6,w7,ror #32-18 1500 1.1 christos eor w6,w6,w7,ror #32-24 1501 1.1 christos eor w15,w15,w6 1502 1.1 christos subs w11,w11,#1 1503 1.1 christos b.ne 10b 1504 1.1 christos mov v5.s[0],w15 1505 1.1 christos mov v5.s[1],w14 1506 1.1 christos mov v5.s[2],w13 1507 1.1 christos mov v5.s[3],w12 1508 1.1 christos #ifndef __AARCH64EB__ 1509 1.1 christos rev32 v4.16b,v4.16b 1510 1.1 christos #endif 1511 1.1 christos eor v6.16b,v6.16b,v5.16b 1512 1.1 christos mov x10,x3 1513 1.1 christos mov w11,#8 1514 1.1 christos mov w12,v6.s[0] 1515 1.1 christos mov w13,v6.s[1] 1516 1.1 christos mov w14,v6.s[2] 1517 1.1 christos mov w15,v6.s[3] 1518 1.1 christos 10: 1519 1.1 christos ldp w7,w8,[x10],8 1520 1.1 christos // B0 ^= SBOX(B1 ^ B2 ^ B3 ^ RK0) 1521 1.1 christos eor w6,w14,w15 1522 1.1 christos eor w9,w7,w13 1523 1.1 christos eor w6,w6,w9 1524 1.1 christos movi v1.16b,#64 1525 1.1 christos movi v2.16b,#128 1526 1.1 christos movi v3.16b,#192 1527 1.1 christos mov v0.s[0],w6 1528 1.1 christos 1529 1.1 christos sub v1.16b,v0.16b,v1.16b 1530 1.1 christos sub v2.16b,v0.16b,v2.16b 1531 1.1 christos sub v3.16b,v0.16b,v3.16b 1532 1.1 christos 1533 1.1 christos tbl v0.16b,{v16.16b,v17.16b,v18.16b,v19.16b},v0.16b 1534 1.1 christos tbl v1.16b,{v20.16b,v21.16b,v22.16b,v23.16b},v1.16b 1535 1.1 christos tbl v2.16b,{v24.16b,v25.16b,v26.16b,v27.16b},v2.16b 1536 1.1 christos tbl v3.16b,{v28.16b,v29.16b,v30.16b,v31.16b},v3.16b 1537 1.1 christos 1538 1.1 christos mov w6,v0.s[0] 1539 1.1 christos mov w7,v1.s[0] 1540 1.1 christos mov w9,v2.s[0] 1541 1.1 christos add w7,w6,w7 1542 1.1 christos mov w6,v3.s[0] 1543 1.1 christos add w7,w7,w9 1544 1.1 christos add w7,w7,w6 1545 1.1 christos 1546 1.1 christos eor w6,w7,w7,ror #32-2 1547 1.1 christos eor w6,w6,w7,ror #32-10 1548 1.1 christos eor w6,w6,w7,ror #32-18 1549 1.1 christos eor w6,w6,w7,ror #32-24 1550 1.1 christos eor w12,w12,w6 1551 1.1 christos // B1 ^= SBOX(B0 ^ B2 ^ B3 ^ RK1) 1552 1.1 christos eor w6,w14,w15 1553 1.1 christos eor w9,w12,w8 1554 1.1 christos eor w6,w6,w9 1555 1.1 christos movi v1.16b,#64 1556 1.1 christos movi v2.16b,#128 1557 1.1 christos movi v3.16b,#192 1558 1.1 christos mov v0.s[0],w6 1559 1.1 christos 1560 1.1 christos sub v1.16b,v0.16b,v1.16b 1561 1.1 christos sub v2.16b,v0.16b,v2.16b 1562 1.1 christos sub v3.16b,v0.16b,v3.16b 1563 1.1 christos 1564 1.1 christos tbl v0.16b,{v16.16b,v17.16b,v18.16b,v19.16b},v0.16b 1565 1.1 christos tbl v1.16b,{v20.16b,v21.16b,v22.16b,v23.16b},v1.16b 1566 1.1 christos tbl v2.16b,{v24.16b,v25.16b,v26.16b,v27.16b},v2.16b 1567 1.1 christos tbl v3.16b,{v28.16b,v29.16b,v30.16b,v31.16b},v3.16b 1568 1.1 christos 1569 1.1 christos mov w6,v0.s[0] 1570 1.1 christos mov w7,v1.s[0] 1571 1.1 christos mov w9,v2.s[0] 1572 1.1 christos add w7,w6,w7 1573 1.1 christos mov w6,v3.s[0] 1574 1.1 christos add w7,w7,w9 1575 1.1 christos add w7,w7,w6 1576 1.1 christos 1577 1.1 christos eor w6,w7,w7,ror #32-2 1578 1.1 christos eor w6,w6,w7,ror #32-10 1579 1.1 christos eor w6,w6,w7,ror #32-18 1580 1.1 christos eor w6,w6,w7,ror #32-24 1581 1.1 christos ldp w7,w8,[x10],8 1582 1.1 christos eor w13,w13,w6 1583 1.1 christos // B2 ^= SBOX(B0 ^ B1 ^ B3 ^ RK2) 1584 1.1 christos eor w6,w12,w13 1585 1.1 christos eor w9,w7,w15 1586 1.1 christos eor w6,w6,w9 1587 1.1 christos movi v1.16b,#64 1588 1.1 christos movi v2.16b,#128 1589 1.1 christos movi v3.16b,#192 1590 1.1 christos mov v0.s[0],w6 1591 1.1 christos 1592 1.1 christos sub v1.16b,v0.16b,v1.16b 1593 1.1 christos sub v2.16b,v0.16b,v2.16b 1594 1.1 christos sub v3.16b,v0.16b,v3.16b 1595 1.1 christos 1596 1.1 christos tbl v0.16b,{v16.16b,v17.16b,v18.16b,v19.16b},v0.16b 1597 1.1 christos tbl v1.16b,{v20.16b,v21.16b,v22.16b,v23.16b},v1.16b 1598 1.1 christos tbl v2.16b,{v24.16b,v25.16b,v26.16b,v27.16b},v2.16b 1599 1.1 christos tbl v3.16b,{v28.16b,v29.16b,v30.16b,v31.16b},v3.16b 1600 1.1 christos 1601 1.1 christos mov w6,v0.s[0] 1602 1.1 christos mov w7,v1.s[0] 1603 1.1 christos mov w9,v2.s[0] 1604 1.1 christos add w7,w6,w7 1605 1.1 christos mov w6,v3.s[0] 1606 1.1 christos add w7,w7,w9 1607 1.1 christos add w7,w7,w6 1608 1.1 christos 1609 1.1 christos eor w6,w7,w7,ror #32-2 1610 1.1 christos eor w6,w6,w7,ror #32-10 1611 1.1 christos eor w6,w6,w7,ror #32-18 1612 1.1 christos eor w6,w6,w7,ror #32-24 1613 1.1 christos eor w14,w14,w6 1614 1.1 christos // B3 ^= SBOX(B0 ^ B1 ^ B2 ^ RK3) 1615 1.1 christos eor w6,w12,w13 1616 1.1 christos eor w9,w14,w8 1617 1.1 christos eor w6,w6,w9 1618 1.1 christos movi v1.16b,#64 1619 1.1 christos movi v2.16b,#128 1620 1.1 christos movi v3.16b,#192 1621 1.1 christos mov v0.s[0],w6 1622 1.1 christos 1623 1.1 christos sub v1.16b,v0.16b,v1.16b 1624 1.1 christos sub v2.16b,v0.16b,v2.16b 1625 1.1 christos sub v3.16b,v0.16b,v3.16b 1626 1.1 christos 1627 1.1 christos tbl v0.16b,{v16.16b,v17.16b,v18.16b,v19.16b},v0.16b 1628 1.1 christos tbl v1.16b,{v20.16b,v21.16b,v22.16b,v23.16b},v1.16b 1629 1.1 christos tbl v2.16b,{v24.16b,v25.16b,v26.16b,v27.16b},v2.16b 1630 1.1 christos tbl v3.16b,{v28.16b,v29.16b,v30.16b,v31.16b},v3.16b 1631 1.1 christos 1632 1.1 christos mov w6,v0.s[0] 1633 1.1 christos mov w7,v1.s[0] 1634 1.1 christos mov w9,v2.s[0] 1635 1.1 christos add w7,w6,w7 1636 1.1 christos mov w6,v3.s[0] 1637 1.1 christos add w7,w7,w9 1638 1.1 christos add w7,w7,w6 1639 1.1 christos 1640 1.1 christos eor w6,w7,w7,ror #32-2 1641 1.1 christos eor w6,w6,w7,ror #32-10 1642 1.1 christos eor w6,w6,w7,ror #32-18 1643 1.1 christos eor w6,w6,w7,ror #32-24 1644 1.1 christos eor w15,w15,w6 1645 1.1 christos subs w11,w11,#1 1646 1.1 christos b.ne 10b 1647 1.1 christos mov v6.s[0],w15 1648 1.1 christos mov v6.s[1],w14 1649 1.1 christos mov v6.s[2],w13 1650 1.1 christos mov v6.s[3],w12 1651 1.1 christos #ifndef __AARCH64EB__ 1652 1.1 christos rev32 v5.16b,v5.16b 1653 1.1 christos #endif 1654 1.1 christos eor v7.16b,v7.16b,v6.16b 1655 1.1 christos mov x10,x3 1656 1.1 christos mov w11,#8 1657 1.1 christos mov w12,v7.s[0] 1658 1.1 christos mov w13,v7.s[1] 1659 1.1 christos mov w14,v7.s[2] 1660 1.1 christos mov w15,v7.s[3] 1661 1.1 christos 10: 1662 1.1 christos ldp w7,w8,[x10],8 1663 1.1 christos // B0 ^= SBOX(B1 ^ B2 ^ B3 ^ RK0) 1664 1.1 christos eor w6,w14,w15 1665 1.1 christos eor w9,w7,w13 1666 1.1 christos eor w6,w6,w9 1667 1.1 christos movi v1.16b,#64 1668 1.1 christos movi v2.16b,#128 1669 1.1 christos movi v3.16b,#192 1670 1.1 christos mov v0.s[0],w6 1671 1.1 christos 1672 1.1 christos sub v1.16b,v0.16b,v1.16b 1673 1.1 christos sub v2.16b,v0.16b,v2.16b 1674 1.1 christos sub v3.16b,v0.16b,v3.16b 1675 1.1 christos 1676 1.1 christos tbl v0.16b,{v16.16b,v17.16b,v18.16b,v19.16b},v0.16b 1677 1.1 christos tbl v1.16b,{v20.16b,v21.16b,v22.16b,v23.16b},v1.16b 1678 1.1 christos tbl v2.16b,{v24.16b,v25.16b,v26.16b,v27.16b},v2.16b 1679 1.1 christos tbl v3.16b,{v28.16b,v29.16b,v30.16b,v31.16b},v3.16b 1680 1.1 christos 1681 1.1 christos mov w6,v0.s[0] 1682 1.1 christos mov w7,v1.s[0] 1683 1.1 christos mov w9,v2.s[0] 1684 1.1 christos add w7,w6,w7 1685 1.1 christos mov w6,v3.s[0] 1686 1.1 christos add w7,w7,w9 1687 1.1 christos add w7,w7,w6 1688 1.1 christos 1689 1.1 christos eor w6,w7,w7,ror #32-2 1690 1.1 christos eor w6,w6,w7,ror #32-10 1691 1.1 christos eor w6,w6,w7,ror #32-18 1692 1.1 christos eor w6,w6,w7,ror #32-24 1693 1.1 christos eor w12,w12,w6 1694 1.1 christos // B1 ^= SBOX(B0 ^ B2 ^ B3 ^ RK1) 1695 1.1 christos eor w6,w14,w15 1696 1.1 christos eor w9,w12,w8 1697 1.1 christos eor w6,w6,w9 1698 1.1 christos movi v1.16b,#64 1699 1.1 christos movi v2.16b,#128 1700 1.1 christos movi v3.16b,#192 1701 1.1 christos mov v0.s[0],w6 1702 1.1 christos 1703 1.1 christos sub v1.16b,v0.16b,v1.16b 1704 1.1 christos sub v2.16b,v0.16b,v2.16b 1705 1.1 christos sub v3.16b,v0.16b,v3.16b 1706 1.1 christos 1707 1.1 christos tbl v0.16b,{v16.16b,v17.16b,v18.16b,v19.16b},v0.16b 1708 1.1 christos tbl v1.16b,{v20.16b,v21.16b,v22.16b,v23.16b},v1.16b 1709 1.1 christos tbl v2.16b,{v24.16b,v25.16b,v26.16b,v27.16b},v2.16b 1710 1.1 christos tbl v3.16b,{v28.16b,v29.16b,v30.16b,v31.16b},v3.16b 1711 1.1 christos 1712 1.1 christos mov w6,v0.s[0] 1713 1.1 christos mov w7,v1.s[0] 1714 1.1 christos mov w9,v2.s[0] 1715 1.1 christos add w7,w6,w7 1716 1.1 christos mov w6,v3.s[0] 1717 1.1 christos add w7,w7,w9 1718 1.1 christos add w7,w7,w6 1719 1.1 christos 1720 1.1 christos eor w6,w7,w7,ror #32-2 1721 1.1 christos eor w6,w6,w7,ror #32-10 1722 1.1 christos eor w6,w6,w7,ror #32-18 1723 1.1 christos eor w6,w6,w7,ror #32-24 1724 1.1 christos ldp w7,w8,[x10],8 1725 1.1 christos eor w13,w13,w6 1726 1.1 christos // B2 ^= SBOX(B0 ^ B1 ^ B3 ^ RK2) 1727 1.1 christos eor w6,w12,w13 1728 1.1 christos eor w9,w7,w15 1729 1.1 christos eor w6,w6,w9 1730 1.1 christos movi v1.16b,#64 1731 1.1 christos movi v2.16b,#128 1732 1.1 christos movi v3.16b,#192 1733 1.1 christos mov v0.s[0],w6 1734 1.1 christos 1735 1.1 christos sub v1.16b,v0.16b,v1.16b 1736 1.1 christos sub v2.16b,v0.16b,v2.16b 1737 1.1 christos sub v3.16b,v0.16b,v3.16b 1738 1.1 christos 1739 1.1 christos tbl v0.16b,{v16.16b,v17.16b,v18.16b,v19.16b},v0.16b 1740 1.1 christos tbl v1.16b,{v20.16b,v21.16b,v22.16b,v23.16b},v1.16b 1741 1.1 christos tbl v2.16b,{v24.16b,v25.16b,v26.16b,v27.16b},v2.16b 1742 1.1 christos tbl v3.16b,{v28.16b,v29.16b,v30.16b,v31.16b},v3.16b 1743 1.1 christos 1744 1.1 christos mov w6,v0.s[0] 1745 1.1 christos mov w7,v1.s[0] 1746 1.1 christos mov w9,v2.s[0] 1747 1.1 christos add w7,w6,w7 1748 1.1 christos mov w6,v3.s[0] 1749 1.1 christos add w7,w7,w9 1750 1.1 christos add w7,w7,w6 1751 1.1 christos 1752 1.1 christos eor w6,w7,w7,ror #32-2 1753 1.1 christos eor w6,w6,w7,ror #32-10 1754 1.1 christos eor w6,w6,w7,ror #32-18 1755 1.1 christos eor w6,w6,w7,ror #32-24 1756 1.1 christos eor w14,w14,w6 1757 1.1 christos // B3 ^= SBOX(B0 ^ B1 ^ B2 ^ RK3) 1758 1.1 christos eor w6,w12,w13 1759 1.1 christos eor w9,w14,w8 1760 1.1 christos eor w6,w6,w9 1761 1.1 christos movi v1.16b,#64 1762 1.1 christos movi v2.16b,#128 1763 1.1 christos movi v3.16b,#192 1764 1.1 christos mov v0.s[0],w6 1765 1.1 christos 1766 1.1 christos sub v1.16b,v0.16b,v1.16b 1767 1.1 christos sub v2.16b,v0.16b,v2.16b 1768 1.1 christos sub v3.16b,v0.16b,v3.16b 1769 1.1 christos 1770 1.1 christos tbl v0.16b,{v16.16b,v17.16b,v18.16b,v19.16b},v0.16b 1771 1.1 christos tbl v1.16b,{v20.16b,v21.16b,v22.16b,v23.16b},v1.16b 1772 1.1 christos tbl v2.16b,{v24.16b,v25.16b,v26.16b,v27.16b},v2.16b 1773 1.1 christos tbl v3.16b,{v28.16b,v29.16b,v30.16b,v31.16b},v3.16b 1774 1.1 christos 1775 1.1 christos mov w6,v0.s[0] 1776 1.1 christos mov w7,v1.s[0] 1777 1.1 christos mov w9,v2.s[0] 1778 1.1 christos add w7,w6,w7 1779 1.1 christos mov w6,v3.s[0] 1780 1.1 christos add w7,w7,w9 1781 1.1 christos add w7,w7,w6 1782 1.1 christos 1783 1.1 christos eor w6,w7,w7,ror #32-2 1784 1.1 christos eor w6,w6,w7,ror #32-10 1785 1.1 christos eor w6,w6,w7,ror #32-18 1786 1.1 christos eor w6,w6,w7,ror #32-24 1787 1.1 christos eor w15,w15,w6 1788 1.1 christos subs w11,w11,#1 1789 1.1 christos b.ne 10b 1790 1.1 christos mov v7.s[0],w15 1791 1.1 christos mov v7.s[1],w14 1792 1.1 christos mov v7.s[2],w13 1793 1.1 christos mov v7.s[3],w12 1794 1.1 christos #ifndef __AARCH64EB__ 1795 1.1 christos rev32 v6.16b,v6.16b 1796 1.1 christos #endif 1797 1.1 christos #ifndef __AARCH64EB__ 1798 1.1 christos rev32 v7.16b,v7.16b 1799 1.1 christos #endif 1800 1.1 christos orr v3.16b,v7.16b,v7.16b 1801 1.1 christos st1 {v4.4s,v5.4s,v6.4s,v7.4s},[x1],#64 1802 1.1 christos subs w2,w2,#4 1803 1.1 christos b.ne .Lcbc_4_blocks_enc 1804 1.1 christos b 2f 1805 1.1 christos 1: 1806 1.1 christos subs w2,w2,#1 1807 1.1 christos b.lt 2f 1808 1.1 christos ld1 {v4.4s},[x0],#16 1809 1.1 christos eor v3.16b,v3.16b,v4.16b 1810 1.1 christos #ifndef __AARCH64EB__ 1811 1.1 christos rev32 v3.16b,v3.16b 1812 1.1 christos #endif 1813 1.1 christos mov x10,x3 1814 1.1 christos mov w11,#8 1815 1.1 christos mov w12,v3.s[0] 1816 1.1 christos mov w13,v3.s[1] 1817 1.1 christos mov w14,v3.s[2] 1818 1.1 christos mov w15,v3.s[3] 1819 1.1 christos 10: 1820 1.1 christos ldp w7,w8,[x10],8 1821 1.1 christos // B0 ^= SBOX(B1 ^ B2 ^ B3 ^ RK0) 1822 1.1 christos eor w6,w14,w15 1823 1.1 christos eor w9,w7,w13 1824 1.1 christos eor w6,w6,w9 1825 1.1 christos movi v1.16b,#64 1826 1.1 christos movi v2.16b,#128 1827 1.1 christos movi v3.16b,#192 1828 1.1 christos mov v0.s[0],w6 1829 1.1 christos 1830 1.1 christos sub v1.16b,v0.16b,v1.16b 1831 1.1 christos sub v2.16b,v0.16b,v2.16b 1832 1.1 christos sub v3.16b,v0.16b,v3.16b 1833 1.1 christos 1834 1.1 christos tbl v0.16b,{v16.16b,v17.16b,v18.16b,v19.16b},v0.16b 1835 1.1 christos tbl v1.16b,{v20.16b,v21.16b,v22.16b,v23.16b},v1.16b 1836 1.1 christos tbl v2.16b,{v24.16b,v25.16b,v26.16b,v27.16b},v2.16b 1837 1.1 christos tbl v3.16b,{v28.16b,v29.16b,v30.16b,v31.16b},v3.16b 1838 1.1 christos 1839 1.1 christos mov w6,v0.s[0] 1840 1.1 christos mov w7,v1.s[0] 1841 1.1 christos mov w9,v2.s[0] 1842 1.1 christos add w7,w6,w7 1843 1.1 christos mov w6,v3.s[0] 1844 1.1 christos add w7,w7,w9 1845 1.1 christos add w7,w7,w6 1846 1.1 christos 1847 1.1 christos eor w6,w7,w7,ror #32-2 1848 1.1 christos eor w6,w6,w7,ror #32-10 1849 1.1 christos eor w6,w6,w7,ror #32-18 1850 1.1 christos eor w6,w6,w7,ror #32-24 1851 1.1 christos eor w12,w12,w6 1852 1.1 christos // B1 ^= SBOX(B0 ^ B2 ^ B3 ^ RK1) 1853 1.1 christos eor w6,w14,w15 1854 1.1 christos eor w9,w12,w8 1855 1.1 christos eor w6,w6,w9 1856 1.1 christos movi v1.16b,#64 1857 1.1 christos movi v2.16b,#128 1858 1.1 christos movi v3.16b,#192 1859 1.1 christos mov v0.s[0],w6 1860 1.1 christos 1861 1.1 christos sub v1.16b,v0.16b,v1.16b 1862 1.1 christos sub v2.16b,v0.16b,v2.16b 1863 1.1 christos sub v3.16b,v0.16b,v3.16b 1864 1.1 christos 1865 1.1 christos tbl v0.16b,{v16.16b,v17.16b,v18.16b,v19.16b},v0.16b 1866 1.1 christos tbl v1.16b,{v20.16b,v21.16b,v22.16b,v23.16b},v1.16b 1867 1.1 christos tbl v2.16b,{v24.16b,v25.16b,v26.16b,v27.16b},v2.16b 1868 1.1 christos tbl v3.16b,{v28.16b,v29.16b,v30.16b,v31.16b},v3.16b 1869 1.1 christos 1870 1.1 christos mov w6,v0.s[0] 1871 1.1 christos mov w7,v1.s[0] 1872 1.1 christos mov w9,v2.s[0] 1873 1.1 christos add w7,w6,w7 1874 1.1 christos mov w6,v3.s[0] 1875 1.1 christos add w7,w7,w9 1876 1.1 christos add w7,w7,w6 1877 1.1 christos 1878 1.1 christos eor w6,w7,w7,ror #32-2 1879 1.1 christos eor w6,w6,w7,ror #32-10 1880 1.1 christos eor w6,w6,w7,ror #32-18 1881 1.1 christos eor w6,w6,w7,ror #32-24 1882 1.1 christos ldp w7,w8,[x10],8 1883 1.1 christos eor w13,w13,w6 1884 1.1 christos // B2 ^= SBOX(B0 ^ B1 ^ B3 ^ RK2) 1885 1.1 christos eor w6,w12,w13 1886 1.1 christos eor w9,w7,w15 1887 1.1 christos eor w6,w6,w9 1888 1.1 christos movi v1.16b,#64 1889 1.1 christos movi v2.16b,#128 1890 1.1 christos movi v3.16b,#192 1891 1.1 christos mov v0.s[0],w6 1892 1.1 christos 1893 1.1 christos sub v1.16b,v0.16b,v1.16b 1894 1.1 christos sub v2.16b,v0.16b,v2.16b 1895 1.1 christos sub v3.16b,v0.16b,v3.16b 1896 1.1 christos 1897 1.1 christos tbl v0.16b,{v16.16b,v17.16b,v18.16b,v19.16b},v0.16b 1898 1.1 christos tbl v1.16b,{v20.16b,v21.16b,v22.16b,v23.16b},v1.16b 1899 1.1 christos tbl v2.16b,{v24.16b,v25.16b,v26.16b,v27.16b},v2.16b 1900 1.1 christos tbl v3.16b,{v28.16b,v29.16b,v30.16b,v31.16b},v3.16b 1901 1.1 christos 1902 1.1 christos mov w6,v0.s[0] 1903 1.1 christos mov w7,v1.s[0] 1904 1.1 christos mov w9,v2.s[0] 1905 1.1 christos add w7,w6,w7 1906 1.1 christos mov w6,v3.s[0] 1907 1.1 christos add w7,w7,w9 1908 1.1 christos add w7,w7,w6 1909 1.1 christos 1910 1.1 christos eor w6,w7,w7,ror #32-2 1911 1.1 christos eor w6,w6,w7,ror #32-10 1912 1.1 christos eor w6,w6,w7,ror #32-18 1913 1.1 christos eor w6,w6,w7,ror #32-24 1914 1.1 christos eor w14,w14,w6 1915 1.1 christos // B3 ^= SBOX(B0 ^ B1 ^ B2 ^ RK3) 1916 1.1 christos eor w6,w12,w13 1917 1.1 christos eor w9,w14,w8 1918 1.1 christos eor w6,w6,w9 1919 1.1 christos movi v1.16b,#64 1920 1.1 christos movi v2.16b,#128 1921 1.1 christos movi v3.16b,#192 1922 1.1 christos mov v0.s[0],w6 1923 1.1 christos 1924 1.1 christos sub v1.16b,v0.16b,v1.16b 1925 1.1 christos sub v2.16b,v0.16b,v2.16b 1926 1.1 christos sub v3.16b,v0.16b,v3.16b 1927 1.1 christos 1928 1.1 christos tbl v0.16b,{v16.16b,v17.16b,v18.16b,v19.16b},v0.16b 1929 1.1 christos tbl v1.16b,{v20.16b,v21.16b,v22.16b,v23.16b},v1.16b 1930 1.1 christos tbl v2.16b,{v24.16b,v25.16b,v26.16b,v27.16b},v2.16b 1931 1.1 christos tbl v3.16b,{v28.16b,v29.16b,v30.16b,v31.16b},v3.16b 1932 1.1 christos 1933 1.1 christos mov w6,v0.s[0] 1934 1.1 christos mov w7,v1.s[0] 1935 1.1 christos mov w9,v2.s[0] 1936 1.1 christos add w7,w6,w7 1937 1.1 christos mov w6,v3.s[0] 1938 1.1 christos add w7,w7,w9 1939 1.1 christos add w7,w7,w6 1940 1.1 christos 1941 1.1 christos eor w6,w7,w7,ror #32-2 1942 1.1 christos eor w6,w6,w7,ror #32-10 1943 1.1 christos eor w6,w6,w7,ror #32-18 1944 1.1 christos eor w6,w6,w7,ror #32-24 1945 1.1 christos eor w15,w15,w6 1946 1.1 christos subs w11,w11,#1 1947 1.1 christos b.ne 10b 1948 1.1 christos mov v3.s[0],w15 1949 1.1 christos mov v3.s[1],w14 1950 1.1 christos mov v3.s[2],w13 1951 1.1 christos mov v3.s[3],w12 1952 1.1 christos #ifndef __AARCH64EB__ 1953 1.1 christos rev32 v3.16b,v3.16b 1954 1.1 christos #endif 1955 1.1 christos st1 {v3.4s},[x1],#16 1956 1.1 christos b 1b 1957 1.1 christos 2: 1958 1.1 christos // save back IV 1959 1.1 christos st1 {v3.4s},[x4] 1960 1.1 christos ret 1961 1.1 christos 1962 1.1 christos .Ldec: 1963 1.1 christos // decryption mode starts 1964 1.1 christos AARCH64_SIGN_LINK_REGISTER 1965 1.1 christos stp d8,d9,[sp,#-80]! 1966 1.1 christos stp d10,d11,[sp,#16] 1967 1.1 christos stp d12,d13,[sp,#32] 1968 1.1 christos stp d14,d15,[sp,#48] 1969 1.1 christos stp x29,x30,[sp,#64] 1970 1.1 christos .Lcbc_8_blocks_dec: 1971 1.1 christos cmp w2,#8 1972 1.1 christos b.lt 1f 1973 1.1 christos ld4 {v4.4s,v5.4s,v6.4s,v7.4s},[x0] 1974 1.1 christos add x10,x0,#64 1975 1.1 christos ld4 {v8.4s,v9.4s,v10.4s,v11.4s},[x10] 1976 1.1 christos #ifndef __AARCH64EB__ 1977 1.1 christos rev32 v4.16b,v4.16b 1978 1.1 christos #endif 1979 1.1 christos #ifndef __AARCH64EB__ 1980 1.1 christos rev32 v5.16b,v5.16b 1981 1.1 christos #endif 1982 1.1 christos #ifndef __AARCH64EB__ 1983 1.1 christos rev32 v6.16b,v6.16b 1984 1.1 christos #endif 1985 1.1 christos #ifndef __AARCH64EB__ 1986 1.1 christos rev32 v7.16b,v7.16b 1987 1.1 christos #endif 1988 1.1 christos #ifndef __AARCH64EB__ 1989 1.1 christos rev32 v8.16b,v8.16b 1990 1.1 christos #endif 1991 1.1 christos #ifndef __AARCH64EB__ 1992 1.1 christos rev32 v9.16b,v9.16b 1993 1.1 christos #endif 1994 1.1 christos #ifndef __AARCH64EB__ 1995 1.1 christos rev32 v10.16b,v10.16b 1996 1.1 christos #endif 1997 1.1 christos #ifndef __AARCH64EB__ 1998 1.1 christos rev32 v11.16b,v11.16b 1999 1.1 christos #endif 2000 1.1 christos bl _vpsm4_enc_8blks 2001 1.1 christos zip1 v8.4s,v0.4s,v1.4s 2002 1.1 christos zip2 v9.4s,v0.4s,v1.4s 2003 1.1 christos zip1 v10.4s,v2.4s,v3.4s 2004 1.1 christos zip2 v11.4s,v2.4s,v3.4s 2005 1.1 christos zip1 v0.2d,v8.2d,v10.2d 2006 1.1 christos zip2 v1.2d,v8.2d,v10.2d 2007 1.1 christos zip1 v2.2d,v9.2d,v11.2d 2008 1.1 christos zip2 v3.2d,v9.2d,v11.2d 2009 1.1 christos zip1 v8.4s,v4.4s,v5.4s 2010 1.1 christos zip2 v9.4s,v4.4s,v5.4s 2011 1.1 christos zip1 v10.4s,v6.4s,v7.4s 2012 1.1 christos zip2 v11.4s,v6.4s,v7.4s 2013 1.1 christos zip1 v4.2d,v8.2d,v10.2d 2014 1.1 christos zip2 v5.2d,v8.2d,v10.2d 2015 1.1 christos zip1 v6.2d,v9.2d,v11.2d 2016 1.1 christos zip2 v7.2d,v9.2d,v11.2d 2017 1.1 christos ld1 {v15.4s},[x4] 2018 1.1 christos ld1 {v8.4s,v9.4s,v10.4s,v11.4s},[x0],#64 2019 1.1 christos // note ivec1 and vtmpx[3] are reusing the same register 2020 1.1 christos // care needs to be taken to avoid conflict 2021 1.1 christos eor v0.16b,v0.16b,v15.16b 2022 1.1 christos ld1 {v12.4s,v13.4s,v14.4s,v15.4s},[x0],#64 2023 1.1 christos eor v1.16b,v1.16b,v8.16b 2024 1.1 christos eor v2.16b,v2.16b,v9.16b 2025 1.1 christos eor v3.16b,v3.16b,v10.16b 2026 1.1 christos // save back IV 2027 1.1 christos st1 {v15.4s}, [x4] 2028 1.1 christos eor v4.16b,v4.16b,v11.16b 2029 1.1 christos eor v5.16b,v5.16b,v12.16b 2030 1.1 christos eor v6.16b,v6.16b,v13.16b 2031 1.1 christos eor v7.16b,v7.16b,v14.16b 2032 1.1 christos st1 {v0.4s,v1.4s,v2.4s,v3.4s},[x1],#64 2033 1.1 christos st1 {v4.4s,v5.4s,v6.4s,v7.4s},[x1],#64 2034 1.1 christos subs w2,w2,#8 2035 1.1 christos b.gt .Lcbc_8_blocks_dec 2036 1.1 christos b.eq 100f 2037 1.1 christos 1: 2038 1.1 christos ld1 {v15.4s},[x4] 2039 1.1 christos .Lcbc_4_blocks_dec: 2040 1.1 christos cmp w2,#4 2041 1.1 christos b.lt 1f 2042 1.1 christos ld4 {v4.4s,v5.4s,v6.4s,v7.4s},[x0] 2043 1.1 christos #ifndef __AARCH64EB__ 2044 1.1 christos rev32 v4.16b,v4.16b 2045 1.1 christos #endif 2046 1.1 christos #ifndef __AARCH64EB__ 2047 1.1 christos rev32 v5.16b,v5.16b 2048 1.1 christos #endif 2049 1.1 christos #ifndef __AARCH64EB__ 2050 1.1 christos rev32 v6.16b,v6.16b 2051 1.1 christos #endif 2052 1.1 christos #ifndef __AARCH64EB__ 2053 1.1 christos rev32 v7.16b,v7.16b 2054 1.1 christos #endif 2055 1.1 christos bl _vpsm4_enc_4blks 2056 1.1 christos ld1 {v4.4s,v5.4s,v6.4s,v7.4s},[x0],#64 2057 1.1 christos zip1 v8.4s,v0.4s,v1.4s 2058 1.1 christos zip2 v9.4s,v0.4s,v1.4s 2059 1.1 christos zip1 v10.4s,v2.4s,v3.4s 2060 1.1 christos zip2 v11.4s,v2.4s,v3.4s 2061 1.1 christos zip1 v0.2d,v8.2d,v10.2d 2062 1.1 christos zip2 v1.2d,v8.2d,v10.2d 2063 1.1 christos zip1 v2.2d,v9.2d,v11.2d 2064 1.1 christos zip2 v3.2d,v9.2d,v11.2d 2065 1.1 christos eor v0.16b,v0.16b,v15.16b 2066 1.1 christos eor v1.16b,v1.16b,v4.16b 2067 1.1 christos orr v15.16b,v7.16b,v7.16b 2068 1.1 christos eor v2.16b,v2.16b,v5.16b 2069 1.1 christos eor v3.16b,v3.16b,v6.16b 2070 1.1 christos st1 {v0.4s,v1.4s,v2.4s,v3.4s},[x1],#64 2071 1.1 christos subs w2,w2,#4 2072 1.1 christos b.gt .Lcbc_4_blocks_dec 2073 1.1 christos // save back IV 2074 1.1 christos st1 {v7.4s}, [x4] 2075 1.1 christos b 100f 2076 1.1 christos 1: // last block 2077 1.1 christos subs w2,w2,#1 2078 1.1 christos b.lt 100f 2079 1.1 christos b.gt 1f 2080 1.1 christos ld1 {v4.4s},[x0],#16 2081 1.1 christos // save back IV 2082 1.1 christos st1 {v4.4s}, [x4] 2083 1.1 christos #ifndef __AARCH64EB__ 2084 1.1 christos rev32 v8.16b,v4.16b 2085 1.1 christos #else 2086 1.1 christos mov v8.16b,v4.16b 2087 1.1 christos #endif 2088 1.1 christos mov x10,x3 2089 1.1 christos mov w11,#8 2090 1.1 christos mov w12,v8.s[0] 2091 1.1 christos mov w13,v8.s[1] 2092 1.1 christos mov w14,v8.s[2] 2093 1.1 christos mov w15,v8.s[3] 2094 1.1 christos 10: 2095 1.1 christos ldp w7,w8,[x10],8 2096 1.1 christos // B0 ^= SBOX(B1 ^ B2 ^ B3 ^ RK0) 2097 1.1 christos eor w6,w14,w15 2098 1.1 christos eor w9,w7,w13 2099 1.1 christos eor w6,w6,w9 2100 1.1 christos movi v1.16b,#64 2101 1.1 christos movi v2.16b,#128 2102 1.1 christos movi v3.16b,#192 2103 1.1 christos mov v0.s[0],w6 2104 1.1 christos 2105 1.1 christos sub v1.16b,v0.16b,v1.16b 2106 1.1 christos sub v2.16b,v0.16b,v2.16b 2107 1.1 christos sub v3.16b,v0.16b,v3.16b 2108 1.1 christos 2109 1.1 christos tbl v0.16b,{v16.16b,v17.16b,v18.16b,v19.16b},v0.16b 2110 1.1 christos tbl v1.16b,{v20.16b,v21.16b,v22.16b,v23.16b},v1.16b 2111 1.1 christos tbl v2.16b,{v24.16b,v25.16b,v26.16b,v27.16b},v2.16b 2112 1.1 christos tbl v3.16b,{v28.16b,v29.16b,v30.16b,v31.16b},v3.16b 2113 1.1 christos 2114 1.1 christos mov w6,v0.s[0] 2115 1.1 christos mov w7,v1.s[0] 2116 1.1 christos mov w9,v2.s[0] 2117 1.1 christos add w7,w6,w7 2118 1.1 christos mov w6,v3.s[0] 2119 1.1 christos add w7,w7,w9 2120 1.1 christos add w7,w7,w6 2121 1.1 christos 2122 1.1 christos eor w6,w7,w7,ror #32-2 2123 1.1 christos eor w6,w6,w7,ror #32-10 2124 1.1 christos eor w6,w6,w7,ror #32-18 2125 1.1 christos eor w6,w6,w7,ror #32-24 2126 1.1 christos eor w12,w12,w6 2127 1.1 christos // B1 ^= SBOX(B0 ^ B2 ^ B3 ^ RK1) 2128 1.1 christos eor w6,w14,w15 2129 1.1 christos eor w9,w12,w8 2130 1.1 christos eor w6,w6,w9 2131 1.1 christos movi v1.16b,#64 2132 1.1 christos movi v2.16b,#128 2133 1.1 christos movi v3.16b,#192 2134 1.1 christos mov v0.s[0],w6 2135 1.1 christos 2136 1.1 christos sub v1.16b,v0.16b,v1.16b 2137 1.1 christos sub v2.16b,v0.16b,v2.16b 2138 1.1 christos sub v3.16b,v0.16b,v3.16b 2139 1.1 christos 2140 1.1 christos tbl v0.16b,{v16.16b,v17.16b,v18.16b,v19.16b},v0.16b 2141 1.1 christos tbl v1.16b,{v20.16b,v21.16b,v22.16b,v23.16b},v1.16b 2142 1.1 christos tbl v2.16b,{v24.16b,v25.16b,v26.16b,v27.16b},v2.16b 2143 1.1 christos tbl v3.16b,{v28.16b,v29.16b,v30.16b,v31.16b},v3.16b 2144 1.1 christos 2145 1.1 christos mov w6,v0.s[0] 2146 1.1 christos mov w7,v1.s[0] 2147 1.1 christos mov w9,v2.s[0] 2148 1.1 christos add w7,w6,w7 2149 1.1 christos mov w6,v3.s[0] 2150 1.1 christos add w7,w7,w9 2151 1.1 christos add w7,w7,w6 2152 1.1 christos 2153 1.1 christos eor w6,w7,w7,ror #32-2 2154 1.1 christos eor w6,w6,w7,ror #32-10 2155 1.1 christos eor w6,w6,w7,ror #32-18 2156 1.1 christos eor w6,w6,w7,ror #32-24 2157 1.1 christos ldp w7,w8,[x10],8 2158 1.1 christos eor w13,w13,w6 2159 1.1 christos // B2 ^= SBOX(B0 ^ B1 ^ B3 ^ RK2) 2160 1.1 christos eor w6,w12,w13 2161 1.1 christos eor w9,w7,w15 2162 1.1 christos eor w6,w6,w9 2163 1.1 christos movi v1.16b,#64 2164 1.1 christos movi v2.16b,#128 2165 1.1 christos movi v3.16b,#192 2166 1.1 christos mov v0.s[0],w6 2167 1.1 christos 2168 1.1 christos sub v1.16b,v0.16b,v1.16b 2169 1.1 christos sub v2.16b,v0.16b,v2.16b 2170 1.1 christos sub v3.16b,v0.16b,v3.16b 2171 1.1 christos 2172 1.1 christos tbl v0.16b,{v16.16b,v17.16b,v18.16b,v19.16b},v0.16b 2173 1.1 christos tbl v1.16b,{v20.16b,v21.16b,v22.16b,v23.16b},v1.16b 2174 1.1 christos tbl v2.16b,{v24.16b,v25.16b,v26.16b,v27.16b},v2.16b 2175 1.1 christos tbl v3.16b,{v28.16b,v29.16b,v30.16b,v31.16b},v3.16b 2176 1.1 christos 2177 1.1 christos mov w6,v0.s[0] 2178 1.1 christos mov w7,v1.s[0] 2179 1.1 christos mov w9,v2.s[0] 2180 1.1 christos add w7,w6,w7 2181 1.1 christos mov w6,v3.s[0] 2182 1.1 christos add w7,w7,w9 2183 1.1 christos add w7,w7,w6 2184 1.1 christos 2185 1.1 christos eor w6,w7,w7,ror #32-2 2186 1.1 christos eor w6,w6,w7,ror #32-10 2187 1.1 christos eor w6,w6,w7,ror #32-18 2188 1.1 christos eor w6,w6,w7,ror #32-24 2189 1.1 christos eor w14,w14,w6 2190 1.1 christos // B3 ^= SBOX(B0 ^ B1 ^ B2 ^ RK3) 2191 1.1 christos eor w6,w12,w13 2192 1.1 christos eor w9,w14,w8 2193 1.1 christos eor w6,w6,w9 2194 1.1 christos movi v1.16b,#64 2195 1.1 christos movi v2.16b,#128 2196 1.1 christos movi v3.16b,#192 2197 1.1 christos mov v0.s[0],w6 2198 1.1 christos 2199 1.1 christos sub v1.16b,v0.16b,v1.16b 2200 1.1 christos sub v2.16b,v0.16b,v2.16b 2201 1.1 christos sub v3.16b,v0.16b,v3.16b 2202 1.1 christos 2203 1.1 christos tbl v0.16b,{v16.16b,v17.16b,v18.16b,v19.16b},v0.16b 2204 1.1 christos tbl v1.16b,{v20.16b,v21.16b,v22.16b,v23.16b},v1.16b 2205 1.1 christos tbl v2.16b,{v24.16b,v25.16b,v26.16b,v27.16b},v2.16b 2206 1.1 christos tbl v3.16b,{v28.16b,v29.16b,v30.16b,v31.16b},v3.16b 2207 1.1 christos 2208 1.1 christos mov w6,v0.s[0] 2209 1.1 christos mov w7,v1.s[0] 2210 1.1 christos mov w9,v2.s[0] 2211 1.1 christos add w7,w6,w7 2212 1.1 christos mov w6,v3.s[0] 2213 1.1 christos add w7,w7,w9 2214 1.1 christos add w7,w7,w6 2215 1.1 christos 2216 1.1 christos eor w6,w7,w7,ror #32-2 2217 1.1 christos eor w6,w6,w7,ror #32-10 2218 1.1 christos eor w6,w6,w7,ror #32-18 2219 1.1 christos eor w6,w6,w7,ror #32-24 2220 1.1 christos eor w15,w15,w6 2221 1.1 christos subs w11,w11,#1 2222 1.1 christos b.ne 10b 2223 1.1 christos mov v8.s[0],w15 2224 1.1 christos mov v8.s[1],w14 2225 1.1 christos mov v8.s[2],w13 2226 1.1 christos mov v8.s[3],w12 2227 1.1 christos #ifndef __AARCH64EB__ 2228 1.1 christos rev32 v8.16b,v8.16b 2229 1.1 christos #endif 2230 1.1 christos eor v8.16b,v8.16b,v15.16b 2231 1.1 christos st1 {v8.4s},[x1],#16 2232 1.1 christos b 100f 2233 1.1 christos 1: // last two blocks 2234 1.1 christos ld4 {v4.s,v5.s,v6.s,v7.s}[0],[x0] 2235 1.1 christos add x10,x0,#16 2236 1.1 christos ld4 {v4.s,v5.s,v6.s,v7.s}[1],[x10],#16 2237 1.1 christos subs w2,w2,1 2238 1.1 christos b.gt 1f 2239 1.1 christos #ifndef __AARCH64EB__ 2240 1.1 christos rev32 v4.16b,v4.16b 2241 1.1 christos #endif 2242 1.1 christos #ifndef __AARCH64EB__ 2243 1.1 christos rev32 v5.16b,v5.16b 2244 1.1 christos #endif 2245 1.1 christos #ifndef __AARCH64EB__ 2246 1.1 christos rev32 v6.16b,v6.16b 2247 1.1 christos #endif 2248 1.1 christos #ifndef __AARCH64EB__ 2249 1.1 christos rev32 v7.16b,v7.16b 2250 1.1 christos #endif 2251 1.1 christos bl _vpsm4_enc_4blks 2252 1.1 christos ld1 {v4.4s,v5.4s},[x0],#32 2253 1.1 christos zip1 v8.4s,v0.4s,v1.4s 2254 1.1 christos zip2 v9.4s,v0.4s,v1.4s 2255 1.1 christos zip1 v10.4s,v2.4s,v3.4s 2256 1.1 christos zip2 v11.4s,v2.4s,v3.4s 2257 1.1 christos zip1 v0.2d,v8.2d,v10.2d 2258 1.1 christos zip2 v1.2d,v8.2d,v10.2d 2259 1.1 christos zip1 v2.2d,v9.2d,v11.2d 2260 1.1 christos zip2 v3.2d,v9.2d,v11.2d 2261 1.1 christos eor v0.16b,v0.16b,v15.16b 2262 1.1 christos eor v1.16b,v1.16b,v4.16b 2263 1.1 christos st1 {v0.4s,v1.4s},[x1],#32 2264 1.1 christos // save back IV 2265 1.1 christos st1 {v5.4s}, [x4] 2266 1.1 christos b 100f 2267 1.1 christos 1: // last 3 blocks 2268 1.1 christos ld4 {v4.s,v5.s,v6.s,v7.s}[2],[x10] 2269 1.1 christos #ifndef __AARCH64EB__ 2270 1.1 christos rev32 v4.16b,v4.16b 2271 1.1 christos #endif 2272 1.1 christos #ifndef __AARCH64EB__ 2273 1.1 christos rev32 v5.16b,v5.16b 2274 1.1 christos #endif 2275 1.1 christos #ifndef __AARCH64EB__ 2276 1.1 christos rev32 v6.16b,v6.16b 2277 1.1 christos #endif 2278 1.1 christos #ifndef __AARCH64EB__ 2279 1.1 christos rev32 v7.16b,v7.16b 2280 1.1 christos #endif 2281 1.1 christos bl _vpsm4_enc_4blks 2282 1.1 christos ld1 {v4.4s,v5.4s,v6.4s},[x0],#48 2283 1.1 christos zip1 v8.4s,v0.4s,v1.4s 2284 1.1 christos zip2 v9.4s,v0.4s,v1.4s 2285 1.1 christos zip1 v10.4s,v2.4s,v3.4s 2286 1.1 christos zip2 v11.4s,v2.4s,v3.4s 2287 1.1 christos zip1 v0.2d,v8.2d,v10.2d 2288 1.1 christos zip2 v1.2d,v8.2d,v10.2d 2289 1.1 christos zip1 v2.2d,v9.2d,v11.2d 2290 1.1 christos zip2 v3.2d,v9.2d,v11.2d 2291 1.1 christos eor v0.16b,v0.16b,v15.16b 2292 1.1 christos eor v1.16b,v1.16b,v4.16b 2293 1.1 christos eor v2.16b,v2.16b,v5.16b 2294 1.1 christos st1 {v0.4s,v1.4s,v2.4s},[x1],#48 2295 1.1 christos // save back IV 2296 1.1 christos st1 {v6.4s}, [x4] 2297 1.1 christos 100: 2298 1.1 christos ldp d10,d11,[sp,#16] 2299 1.1 christos ldp d12,d13,[sp,#32] 2300 1.1 christos ldp d14,d15,[sp,#48] 2301 1.1 christos ldp x29,x30,[sp,#64] 2302 1.1 christos ldp d8,d9,[sp],#80 2303 1.1 christos AARCH64_VALIDATE_LINK_REGISTER 2304 1.1 christos ret 2305 1.1 christos .size vpsm4_cbc_encrypt,.-vpsm4_cbc_encrypt 2306 1.1 christos .globl vpsm4_ctr32_encrypt_blocks 2307 1.1 christos .type vpsm4_ctr32_encrypt_blocks,%function 2308 1.1 christos .align 5 2309 1.1 christos vpsm4_ctr32_encrypt_blocks: 2310 1.1 christos AARCH64_VALID_CALL_TARGET 2311 1.1 christos ld1 {v3.4s},[x4] 2312 1.1 christos #ifndef __AARCH64EB__ 2313 1.1 christos rev32 v3.16b,v3.16b 2314 1.1 christos #endif 2315 1.1 christos adrp x10,.Lsbox 2316 1.1 christos add x10,x10,#:lo12:.Lsbox 2317 1.1 christos ld1 {v16.16b,v17.16b,v18.16b,v19.16b},[x10],#64 2318 1.1 christos ld1 {v20.16b,v21.16b,v22.16b,v23.16b},[x10],#64 2319 1.1 christos ld1 {v24.16b,v25.16b,v26.16b,v27.16b},[x10],#64 2320 1.1 christos ld1 {v28.16b,v29.16b,v30.16b,v31.16b},[x10] 2321 1.1 christos cmp w2,#1 2322 1.1 christos b.ne 1f 2323 1.1 christos // fast processing for one single block without 2324 1.1 christos // context saving overhead 2325 1.1 christos mov x10,x3 2326 1.1 christos mov w11,#8 2327 1.1 christos mov w12,v3.s[0] 2328 1.1 christos mov w13,v3.s[1] 2329 1.1 christos mov w14,v3.s[2] 2330 1.1 christos mov w15,v3.s[3] 2331 1.1 christos 10: 2332 1.1 christos ldp w7,w8,[x10],8 2333 1.1 christos // B0 ^= SBOX(B1 ^ B2 ^ B3 ^ RK0) 2334 1.1 christos eor w6,w14,w15 2335 1.1 christos eor w9,w7,w13 2336 1.1 christos eor w6,w6,w9 2337 1.1 christos movi v1.16b,#64 2338 1.1 christos movi v2.16b,#128 2339 1.1 christos movi v3.16b,#192 2340 1.1 christos mov v0.s[0],w6 2341 1.1 christos 2342 1.1 christos sub v1.16b,v0.16b,v1.16b 2343 1.1 christos sub v2.16b,v0.16b,v2.16b 2344 1.1 christos sub v3.16b,v0.16b,v3.16b 2345 1.1 christos 2346 1.1 christos tbl v0.16b,{v16.16b,v17.16b,v18.16b,v19.16b},v0.16b 2347 1.1 christos tbl v1.16b,{v20.16b,v21.16b,v22.16b,v23.16b},v1.16b 2348 1.1 christos tbl v2.16b,{v24.16b,v25.16b,v26.16b,v27.16b},v2.16b 2349 1.1 christos tbl v3.16b,{v28.16b,v29.16b,v30.16b,v31.16b},v3.16b 2350 1.1 christos 2351 1.1 christos mov w6,v0.s[0] 2352 1.1 christos mov w7,v1.s[0] 2353 1.1 christos mov w9,v2.s[0] 2354 1.1 christos add w7,w6,w7 2355 1.1 christos mov w6,v3.s[0] 2356 1.1 christos add w7,w7,w9 2357 1.1 christos add w7,w7,w6 2358 1.1 christos 2359 1.1 christos eor w6,w7,w7,ror #32-2 2360 1.1 christos eor w6,w6,w7,ror #32-10 2361 1.1 christos eor w6,w6,w7,ror #32-18 2362 1.1 christos eor w6,w6,w7,ror #32-24 2363 1.1 christos eor w12,w12,w6 2364 1.1 christos // B1 ^= SBOX(B0 ^ B2 ^ B3 ^ RK1) 2365 1.1 christos eor w6,w14,w15 2366 1.1 christos eor w9,w12,w8 2367 1.1 christos eor w6,w6,w9 2368 1.1 christos movi v1.16b,#64 2369 1.1 christos movi v2.16b,#128 2370 1.1 christos movi v3.16b,#192 2371 1.1 christos mov v0.s[0],w6 2372 1.1 christos 2373 1.1 christos sub v1.16b,v0.16b,v1.16b 2374 1.1 christos sub v2.16b,v0.16b,v2.16b 2375 1.1 christos sub v3.16b,v0.16b,v3.16b 2376 1.1 christos 2377 1.1 christos tbl v0.16b,{v16.16b,v17.16b,v18.16b,v19.16b},v0.16b 2378 1.1 christos tbl v1.16b,{v20.16b,v21.16b,v22.16b,v23.16b},v1.16b 2379 1.1 christos tbl v2.16b,{v24.16b,v25.16b,v26.16b,v27.16b},v2.16b 2380 1.1 christos tbl v3.16b,{v28.16b,v29.16b,v30.16b,v31.16b},v3.16b 2381 1.1 christos 2382 1.1 christos mov w6,v0.s[0] 2383 1.1 christos mov w7,v1.s[0] 2384 1.1 christos mov w9,v2.s[0] 2385 1.1 christos add w7,w6,w7 2386 1.1 christos mov w6,v3.s[0] 2387 1.1 christos add w7,w7,w9 2388 1.1 christos add w7,w7,w6 2389 1.1 christos 2390 1.1 christos eor w6,w7,w7,ror #32-2 2391 1.1 christos eor w6,w6,w7,ror #32-10 2392 1.1 christos eor w6,w6,w7,ror #32-18 2393 1.1 christos eor w6,w6,w7,ror #32-24 2394 1.1 christos ldp w7,w8,[x10],8 2395 1.1 christos eor w13,w13,w6 2396 1.1 christos // B2 ^= SBOX(B0 ^ B1 ^ B3 ^ RK2) 2397 1.1 christos eor w6,w12,w13 2398 1.1 christos eor w9,w7,w15 2399 1.1 christos eor w6,w6,w9 2400 1.1 christos movi v1.16b,#64 2401 1.1 christos movi v2.16b,#128 2402 1.1 christos movi v3.16b,#192 2403 1.1 christos mov v0.s[0],w6 2404 1.1 christos 2405 1.1 christos sub v1.16b,v0.16b,v1.16b 2406 1.1 christos sub v2.16b,v0.16b,v2.16b 2407 1.1 christos sub v3.16b,v0.16b,v3.16b 2408 1.1 christos 2409 1.1 christos tbl v0.16b,{v16.16b,v17.16b,v18.16b,v19.16b},v0.16b 2410 1.1 christos tbl v1.16b,{v20.16b,v21.16b,v22.16b,v23.16b},v1.16b 2411 1.1 christos tbl v2.16b,{v24.16b,v25.16b,v26.16b,v27.16b},v2.16b 2412 1.1 christos tbl v3.16b,{v28.16b,v29.16b,v30.16b,v31.16b},v3.16b 2413 1.1 christos 2414 1.1 christos mov w6,v0.s[0] 2415 1.1 christos mov w7,v1.s[0] 2416 1.1 christos mov w9,v2.s[0] 2417 1.1 christos add w7,w6,w7 2418 1.1 christos mov w6,v3.s[0] 2419 1.1 christos add w7,w7,w9 2420 1.1 christos add w7,w7,w6 2421 1.1 christos 2422 1.1 christos eor w6,w7,w7,ror #32-2 2423 1.1 christos eor w6,w6,w7,ror #32-10 2424 1.1 christos eor w6,w6,w7,ror #32-18 2425 1.1 christos eor w6,w6,w7,ror #32-24 2426 1.1 christos eor w14,w14,w6 2427 1.1 christos // B3 ^= SBOX(B0 ^ B1 ^ B2 ^ RK3) 2428 1.1 christos eor w6,w12,w13 2429 1.1 christos eor w9,w14,w8 2430 1.1 christos eor w6,w6,w9 2431 1.1 christos movi v1.16b,#64 2432 1.1 christos movi v2.16b,#128 2433 1.1 christos movi v3.16b,#192 2434 1.1 christos mov v0.s[0],w6 2435 1.1 christos 2436 1.1 christos sub v1.16b,v0.16b,v1.16b 2437 1.1 christos sub v2.16b,v0.16b,v2.16b 2438 1.1 christos sub v3.16b,v0.16b,v3.16b 2439 1.1 christos 2440 1.1 christos tbl v0.16b,{v16.16b,v17.16b,v18.16b,v19.16b},v0.16b 2441 1.1 christos tbl v1.16b,{v20.16b,v21.16b,v22.16b,v23.16b},v1.16b 2442 1.1 christos tbl v2.16b,{v24.16b,v25.16b,v26.16b,v27.16b},v2.16b 2443 1.1 christos tbl v3.16b,{v28.16b,v29.16b,v30.16b,v31.16b},v3.16b 2444 1.1 christos 2445 1.1 christos mov w6,v0.s[0] 2446 1.1 christos mov w7,v1.s[0] 2447 1.1 christos mov w9,v2.s[0] 2448 1.1 christos add w7,w6,w7 2449 1.1 christos mov w6,v3.s[0] 2450 1.1 christos add w7,w7,w9 2451 1.1 christos add w7,w7,w6 2452 1.1 christos 2453 1.1 christos eor w6,w7,w7,ror #32-2 2454 1.1 christos eor w6,w6,w7,ror #32-10 2455 1.1 christos eor w6,w6,w7,ror #32-18 2456 1.1 christos eor w6,w6,w7,ror #32-24 2457 1.1 christos eor w15,w15,w6 2458 1.1 christos subs w11,w11,#1 2459 1.1 christos b.ne 10b 2460 1.1 christos mov v3.s[0],w15 2461 1.1 christos mov v3.s[1],w14 2462 1.1 christos mov v3.s[2],w13 2463 1.1 christos mov v3.s[3],w12 2464 1.1 christos #ifndef __AARCH64EB__ 2465 1.1 christos rev32 v3.16b,v3.16b 2466 1.1 christos #endif 2467 1.1 christos ld1 {v4.4s},[x0] 2468 1.1 christos eor v4.16b,v4.16b,v3.16b 2469 1.1 christos st1 {v4.4s},[x1] 2470 1.1 christos ret 2471 1.1 christos 1: 2472 1.1 christos AARCH64_SIGN_LINK_REGISTER 2473 1.1 christos stp d8,d9,[sp,#-80]! 2474 1.1 christos stp d10,d11,[sp,#16] 2475 1.1 christos stp d12,d13,[sp,#32] 2476 1.1 christos stp d14,d15,[sp,#48] 2477 1.1 christos stp x29,x30,[sp,#64] 2478 1.1 christos mov w12,v3.s[0] 2479 1.1 christos mov w13,v3.s[1] 2480 1.1 christos mov w14,v3.s[2] 2481 1.1 christos mov w5,v3.s[3] 2482 1.1 christos .Lctr32_4_blocks_process: 2483 1.1 christos cmp w2,#4 2484 1.1 christos b.lt 1f 2485 1.1 christos dup v4.4s,w12 2486 1.1 christos dup v5.4s,w13 2487 1.1 christos dup v6.4s,w14 2488 1.1 christos mov v7.s[0],w5 2489 1.1 christos add w5,w5,#1 2490 1.1 christos mov v7.s[1],w5 2491 1.1 christos add w5,w5,#1 2492 1.1 christos mov v7.s[2],w5 2493 1.1 christos add w5,w5,#1 2494 1.1 christos mov v7.s[3],w5 2495 1.1 christos add w5,w5,#1 2496 1.1 christos cmp w2,#8 2497 1.1 christos b.ge .Lctr32_8_blocks_process 2498 1.1 christos bl _vpsm4_enc_4blks 2499 1.1 christos ld4 {v12.4s,v13.4s,v14.4s,v15.4s},[x0],#64 2500 1.1 christos eor v0.16b,v0.16b,v12.16b 2501 1.1 christos eor v1.16b,v1.16b,v13.16b 2502 1.1 christos eor v2.16b,v2.16b,v14.16b 2503 1.1 christos eor v3.16b,v3.16b,v15.16b 2504 1.1 christos st4 {v0.4s,v1.4s,v2.4s,v3.4s},[x1],#64 2505 1.1 christos subs w2,w2,#4 2506 1.1 christos b.ne .Lctr32_4_blocks_process 2507 1.1 christos b 100f 2508 1.1 christos .Lctr32_8_blocks_process: 2509 1.1 christos dup v8.4s,w12 2510 1.1 christos dup v9.4s,w13 2511 1.1 christos dup v10.4s,w14 2512 1.1 christos mov v11.s[0],w5 2513 1.1 christos add w5,w5,#1 2514 1.1 christos mov v11.s[1],w5 2515 1.1 christos add w5,w5,#1 2516 1.1 christos mov v11.s[2],w5 2517 1.1 christos add w5,w5,#1 2518 1.1 christos mov v11.s[3],w5 2519 1.1 christos add w5,w5,#1 2520 1.1 christos bl _vpsm4_enc_8blks 2521 1.1 christos ld4 {v12.4s,v13.4s,v14.4s,v15.4s},[x0],#64 2522 1.1 christos ld4 {v8.4s,v9.4s,v10.4s,v11.4s},[x0],#64 2523 1.1 christos eor v0.16b,v0.16b,v12.16b 2524 1.1 christos eor v1.16b,v1.16b,v13.16b 2525 1.1 christos eor v2.16b,v2.16b,v14.16b 2526 1.1 christos eor v3.16b,v3.16b,v15.16b 2527 1.1 christos eor v4.16b,v4.16b,v8.16b 2528 1.1 christos eor v5.16b,v5.16b,v9.16b 2529 1.1 christos eor v6.16b,v6.16b,v10.16b 2530 1.1 christos eor v7.16b,v7.16b,v11.16b 2531 1.1 christos st4 {v0.4s,v1.4s,v2.4s,v3.4s},[x1],#64 2532 1.1 christos st4 {v4.4s,v5.4s,v6.4s,v7.4s},[x1],#64 2533 1.1 christos subs w2,w2,#8 2534 1.1 christos b.ne .Lctr32_4_blocks_process 2535 1.1 christos b 100f 2536 1.1 christos 1: // last block processing 2537 1.1 christos subs w2,w2,#1 2538 1.1 christos b.lt 100f 2539 1.1 christos b.gt 1f 2540 1.1 christos mov v3.s[0],w12 2541 1.1 christos mov v3.s[1],w13 2542 1.1 christos mov v3.s[2],w14 2543 1.1 christos mov v3.s[3],w5 2544 1.1 christos mov x10,x3 2545 1.1 christos mov w11,#8 2546 1.1 christos mov w12,v3.s[0] 2547 1.1 christos mov w13,v3.s[1] 2548 1.1 christos mov w14,v3.s[2] 2549 1.1 christos mov w15,v3.s[3] 2550 1.1 christos 10: 2551 1.1 christos ldp w7,w8,[x10],8 2552 1.1 christos // B0 ^= SBOX(B1 ^ B2 ^ B3 ^ RK0) 2553 1.1 christos eor w6,w14,w15 2554 1.1 christos eor w9,w7,w13 2555 1.1 christos eor w6,w6,w9 2556 1.1 christos movi v1.16b,#64 2557 1.1 christos movi v2.16b,#128 2558 1.1 christos movi v3.16b,#192 2559 1.1 christos mov v0.s[0],w6 2560 1.1 christos 2561 1.1 christos sub v1.16b,v0.16b,v1.16b 2562 1.1 christos sub v2.16b,v0.16b,v2.16b 2563 1.1 christos sub v3.16b,v0.16b,v3.16b 2564 1.1 christos 2565 1.1 christos tbl v0.16b,{v16.16b,v17.16b,v18.16b,v19.16b},v0.16b 2566 1.1 christos tbl v1.16b,{v20.16b,v21.16b,v22.16b,v23.16b},v1.16b 2567 1.1 christos tbl v2.16b,{v24.16b,v25.16b,v26.16b,v27.16b},v2.16b 2568 1.1 christos tbl v3.16b,{v28.16b,v29.16b,v30.16b,v31.16b},v3.16b 2569 1.1 christos 2570 1.1 christos mov w6,v0.s[0] 2571 1.1 christos mov w7,v1.s[0] 2572 1.1 christos mov w9,v2.s[0] 2573 1.1 christos add w7,w6,w7 2574 1.1 christos mov w6,v3.s[0] 2575 1.1 christos add w7,w7,w9 2576 1.1 christos add w7,w7,w6 2577 1.1 christos 2578 1.1 christos eor w6,w7,w7,ror #32-2 2579 1.1 christos eor w6,w6,w7,ror #32-10 2580 1.1 christos eor w6,w6,w7,ror #32-18 2581 1.1 christos eor w6,w6,w7,ror #32-24 2582 1.1 christos eor w12,w12,w6 2583 1.1 christos // B1 ^= SBOX(B0 ^ B2 ^ B3 ^ RK1) 2584 1.1 christos eor w6,w14,w15 2585 1.1 christos eor w9,w12,w8 2586 1.1 christos eor w6,w6,w9 2587 1.1 christos movi v1.16b,#64 2588 1.1 christos movi v2.16b,#128 2589 1.1 christos movi v3.16b,#192 2590 1.1 christos mov v0.s[0],w6 2591 1.1 christos 2592 1.1 christos sub v1.16b,v0.16b,v1.16b 2593 1.1 christos sub v2.16b,v0.16b,v2.16b 2594 1.1 christos sub v3.16b,v0.16b,v3.16b 2595 1.1 christos 2596 1.1 christos tbl v0.16b,{v16.16b,v17.16b,v18.16b,v19.16b},v0.16b 2597 1.1 christos tbl v1.16b,{v20.16b,v21.16b,v22.16b,v23.16b},v1.16b 2598 1.1 christos tbl v2.16b,{v24.16b,v25.16b,v26.16b,v27.16b},v2.16b 2599 1.1 christos tbl v3.16b,{v28.16b,v29.16b,v30.16b,v31.16b},v3.16b 2600 1.1 christos 2601 1.1 christos mov w6,v0.s[0] 2602 1.1 christos mov w7,v1.s[0] 2603 1.1 christos mov w9,v2.s[0] 2604 1.1 christos add w7,w6,w7 2605 1.1 christos mov w6,v3.s[0] 2606 1.1 christos add w7,w7,w9 2607 1.1 christos add w7,w7,w6 2608 1.1 christos 2609 1.1 christos eor w6,w7,w7,ror #32-2 2610 1.1 christos eor w6,w6,w7,ror #32-10 2611 1.1 christos eor w6,w6,w7,ror #32-18 2612 1.1 christos eor w6,w6,w7,ror #32-24 2613 1.1 christos ldp w7,w8,[x10],8 2614 1.1 christos eor w13,w13,w6 2615 1.1 christos // B2 ^= SBOX(B0 ^ B1 ^ B3 ^ RK2) 2616 1.1 christos eor w6,w12,w13 2617 1.1 christos eor w9,w7,w15 2618 1.1 christos eor w6,w6,w9 2619 1.1 christos movi v1.16b,#64 2620 1.1 christos movi v2.16b,#128 2621 1.1 christos movi v3.16b,#192 2622 1.1 christos mov v0.s[0],w6 2623 1.1 christos 2624 1.1 christos sub v1.16b,v0.16b,v1.16b 2625 1.1 christos sub v2.16b,v0.16b,v2.16b 2626 1.1 christos sub v3.16b,v0.16b,v3.16b 2627 1.1 christos 2628 1.1 christos tbl v0.16b,{v16.16b,v17.16b,v18.16b,v19.16b},v0.16b 2629 1.1 christos tbl v1.16b,{v20.16b,v21.16b,v22.16b,v23.16b},v1.16b 2630 1.1 christos tbl v2.16b,{v24.16b,v25.16b,v26.16b,v27.16b},v2.16b 2631 1.1 christos tbl v3.16b,{v28.16b,v29.16b,v30.16b,v31.16b},v3.16b 2632 1.1 christos 2633 1.1 christos mov w6,v0.s[0] 2634 1.1 christos mov w7,v1.s[0] 2635 1.1 christos mov w9,v2.s[0] 2636 1.1 christos add w7,w6,w7 2637 1.1 christos mov w6,v3.s[0] 2638 1.1 christos add w7,w7,w9 2639 1.1 christos add w7,w7,w6 2640 1.1 christos 2641 1.1 christos eor w6,w7,w7,ror #32-2 2642 1.1 christos eor w6,w6,w7,ror #32-10 2643 1.1 christos eor w6,w6,w7,ror #32-18 2644 1.1 christos eor w6,w6,w7,ror #32-24 2645 1.1 christos eor w14,w14,w6 2646 1.1 christos // B3 ^= SBOX(B0 ^ B1 ^ B2 ^ RK3) 2647 1.1 christos eor w6,w12,w13 2648 1.1 christos eor w9,w14,w8 2649 1.1 christos eor w6,w6,w9 2650 1.1 christos movi v1.16b,#64 2651 1.1 christos movi v2.16b,#128 2652 1.1 christos movi v3.16b,#192 2653 1.1 christos mov v0.s[0],w6 2654 1.1 christos 2655 1.1 christos sub v1.16b,v0.16b,v1.16b 2656 1.1 christos sub v2.16b,v0.16b,v2.16b 2657 1.1 christos sub v3.16b,v0.16b,v3.16b 2658 1.1 christos 2659 1.1 christos tbl v0.16b,{v16.16b,v17.16b,v18.16b,v19.16b},v0.16b 2660 1.1 christos tbl v1.16b,{v20.16b,v21.16b,v22.16b,v23.16b},v1.16b 2661 1.1 christos tbl v2.16b,{v24.16b,v25.16b,v26.16b,v27.16b},v2.16b 2662 1.1 christos tbl v3.16b,{v28.16b,v29.16b,v30.16b,v31.16b},v3.16b 2663 1.1 christos 2664 1.1 christos mov w6,v0.s[0] 2665 1.1 christos mov w7,v1.s[0] 2666 1.1 christos mov w9,v2.s[0] 2667 1.1 christos add w7,w6,w7 2668 1.1 christos mov w6,v3.s[0] 2669 1.1 christos add w7,w7,w9 2670 1.1 christos add w7,w7,w6 2671 1.1 christos 2672 1.1 christos eor w6,w7,w7,ror #32-2 2673 1.1 christos eor w6,w6,w7,ror #32-10 2674 1.1 christos eor w6,w6,w7,ror #32-18 2675 1.1 christos eor w6,w6,w7,ror #32-24 2676 1.1 christos eor w15,w15,w6 2677 1.1 christos subs w11,w11,#1 2678 1.1 christos b.ne 10b 2679 1.1 christos mov v3.s[0],w15 2680 1.1 christos mov v3.s[1],w14 2681 1.1 christos mov v3.s[2],w13 2682 1.1 christos mov v3.s[3],w12 2683 1.1 christos #ifndef __AARCH64EB__ 2684 1.1 christos rev32 v3.16b,v3.16b 2685 1.1 christos #endif 2686 1.1 christos ld1 {v4.4s},[x0] 2687 1.1 christos eor v4.16b,v4.16b,v3.16b 2688 1.1 christos st1 {v4.4s},[x1] 2689 1.1 christos b 100f 2690 1.1 christos 1: // last 2 blocks processing 2691 1.1 christos dup v4.4s,w12 2692 1.1 christos dup v5.4s,w13 2693 1.1 christos dup v6.4s,w14 2694 1.1 christos mov v7.s[0],w5 2695 1.1 christos add w5,w5,#1 2696 1.1 christos mov v7.s[1],w5 2697 1.1 christos subs w2,w2,#1 2698 1.1 christos b.ne 1f 2699 1.1 christos bl _vpsm4_enc_4blks 2700 1.1 christos ld4 {v12.s,v13.s,v14.s,v15.s}[0],[x0],#16 2701 1.1 christos ld4 {v12.s,v13.s,v14.s,v15.s}[1],[x0],#16 2702 1.1 christos eor v0.16b,v0.16b,v12.16b 2703 1.1 christos eor v1.16b,v1.16b,v13.16b 2704 1.1 christos eor v2.16b,v2.16b,v14.16b 2705 1.1 christos eor v3.16b,v3.16b,v15.16b 2706 1.1 christos st4 {v0.s,v1.s,v2.s,v3.s}[0],[x1],#16 2707 1.1 christos st4 {v0.s,v1.s,v2.s,v3.s}[1],[x1],#16 2708 1.1 christos b 100f 2709 1.1 christos 1: // last 3 blocks processing 2710 1.1 christos add w5,w5,#1 2711 1.1 christos mov v7.s[2],w5 2712 1.1 christos bl _vpsm4_enc_4blks 2713 1.1 christos ld4 {v12.s,v13.s,v14.s,v15.s}[0],[x0],#16 2714 1.1 christos ld4 {v12.s,v13.s,v14.s,v15.s}[1],[x0],#16 2715 1.1 christos ld4 {v12.s,v13.s,v14.s,v15.s}[2],[x0],#16 2716 1.1 christos eor v0.16b,v0.16b,v12.16b 2717 1.1 christos eor v1.16b,v1.16b,v13.16b 2718 1.1 christos eor v2.16b,v2.16b,v14.16b 2719 1.1 christos eor v3.16b,v3.16b,v15.16b 2720 1.1 christos st4 {v0.s,v1.s,v2.s,v3.s}[0],[x1],#16 2721 1.1 christos st4 {v0.s,v1.s,v2.s,v3.s}[1],[x1],#16 2722 1.1 christos st4 {v0.s,v1.s,v2.s,v3.s}[2],[x1],#16 2723 1.1 christos 100: 2724 1.1 christos ldp d10,d11,[sp,#16] 2725 1.1 christos ldp d12,d13,[sp,#32] 2726 1.1 christos ldp d14,d15,[sp,#48] 2727 1.1 christos ldp x29,x30,[sp,#64] 2728 1.1 christos ldp d8,d9,[sp],#80 2729 1.1 christos AARCH64_VALIDATE_LINK_REGISTER 2730 1.1 christos ret 2731 1.1 christos .size vpsm4_ctr32_encrypt_blocks,.-vpsm4_ctr32_encrypt_blocks 2732 1.1 christos .globl vpsm4_xts_encrypt_gb 2733 1.1 christos .type vpsm4_xts_encrypt_gb,%function 2734 1.1 christos .align 5 2735 1.1 christos vpsm4_xts_encrypt_gb: 2736 1.1 christos AARCH64_SIGN_LINK_REGISTER 2737 1.1 christos stp x15, x16, [sp, #-0x10]! 2738 1.1 christos stp x17, x18, [sp, #-0x10]! 2739 1.1 christos stp x19, x20, [sp, #-0x10]! 2740 1.1 christos stp x21, x22, [sp, #-0x10]! 2741 1.1 christos stp x23, x24, [sp, #-0x10]! 2742 1.1 christos stp x25, x26, [sp, #-0x10]! 2743 1.1 christos stp x27, x28, [sp, #-0x10]! 2744 1.1 christos stp x29, x30, [sp, #-0x10]! 2745 1.1 christos stp d8, d9, [sp, #-0x10]! 2746 1.1 christos stp d10, d11, [sp, #-0x10]! 2747 1.1 christos stp d12, d13, [sp, #-0x10]! 2748 1.1 christos stp d14, d15, [sp, #-0x10]! 2749 1.1 christos mov x26,x3 2750 1.1 christos mov x27,x4 2751 1.1 christos mov w28,w6 2752 1.1 christos ld1 {v8.4s}, [x5] 2753 1.1 christos mov x3,x27 2754 1.1 christos adrp x10,.Lsbox 2755 1.1 christos add x10,x10,#:lo12:.Lsbox 2756 1.1 christos ld1 {v16.16b,v17.16b,v18.16b,v19.16b},[x10],#64 2757 1.1 christos ld1 {v20.16b,v21.16b,v22.16b,v23.16b},[x10],#64 2758 1.1 christos ld1 {v24.16b,v25.16b,v26.16b,v27.16b},[x10],#64 2759 1.1 christos ld1 {v28.16b,v29.16b,v30.16b,v31.16b},[x10] 2760 1.1 christos #ifndef __AARCH64EB__ 2761 1.1 christos rev32 v8.16b,v8.16b 2762 1.1 christos #endif 2763 1.1 christos mov x10,x3 2764 1.1 christos mov w11,#8 2765 1.1 christos mov w12,v8.s[0] 2766 1.1 christos mov w13,v8.s[1] 2767 1.1 christos mov w14,v8.s[2] 2768 1.1 christos mov w15,v8.s[3] 2769 1.1 christos 10: 2770 1.1 christos ldp w7,w8,[x10],8 2771 1.1 christos // B0 ^= SBOX(B1 ^ B2 ^ B3 ^ RK0) 2772 1.1 christos eor w6,w14,w15 2773 1.1 christos eor w9,w7,w13 2774 1.1 christos eor w6,w6,w9 2775 1.1 christos movi v1.16b,#64 2776 1.1 christos movi v2.16b,#128 2777 1.1 christos movi v3.16b,#192 2778 1.1 christos mov v0.s[0],w6 2779 1.1 christos 2780 1.1 christos sub v1.16b,v0.16b,v1.16b 2781 1.1 christos sub v2.16b,v0.16b,v2.16b 2782 1.1 christos sub v3.16b,v0.16b,v3.16b 2783 1.1 christos 2784 1.1 christos tbl v0.16b,{v16.16b,v17.16b,v18.16b,v19.16b},v0.16b 2785 1.1 christos tbl v1.16b,{v20.16b,v21.16b,v22.16b,v23.16b},v1.16b 2786 1.1 christos tbl v2.16b,{v24.16b,v25.16b,v26.16b,v27.16b},v2.16b 2787 1.1 christos tbl v3.16b,{v28.16b,v29.16b,v30.16b,v31.16b},v3.16b 2788 1.1 christos 2789 1.1 christos mov w6,v0.s[0] 2790 1.1 christos mov w7,v1.s[0] 2791 1.1 christos mov w9,v2.s[0] 2792 1.1 christos add w7,w6,w7 2793 1.1 christos mov w6,v3.s[0] 2794 1.1 christos add w7,w7,w9 2795 1.1 christos add w7,w7,w6 2796 1.1 christos 2797 1.1 christos eor w6,w7,w7,ror #32-2 2798 1.1 christos eor w6,w6,w7,ror #32-10 2799 1.1 christos eor w6,w6,w7,ror #32-18 2800 1.1 christos eor w6,w6,w7,ror #32-24 2801 1.1 christos eor w12,w12,w6 2802 1.1 christos // B1 ^= SBOX(B0 ^ B2 ^ B3 ^ RK1) 2803 1.1 christos eor w6,w14,w15 2804 1.1 christos eor w9,w12,w8 2805 1.1 christos eor w6,w6,w9 2806 1.1 christos movi v1.16b,#64 2807 1.1 christos movi v2.16b,#128 2808 1.1 christos movi v3.16b,#192 2809 1.1 christos mov v0.s[0],w6 2810 1.1 christos 2811 1.1 christos sub v1.16b,v0.16b,v1.16b 2812 1.1 christos sub v2.16b,v0.16b,v2.16b 2813 1.1 christos sub v3.16b,v0.16b,v3.16b 2814 1.1 christos 2815 1.1 christos tbl v0.16b,{v16.16b,v17.16b,v18.16b,v19.16b},v0.16b 2816 1.1 christos tbl v1.16b,{v20.16b,v21.16b,v22.16b,v23.16b},v1.16b 2817 1.1 christos tbl v2.16b,{v24.16b,v25.16b,v26.16b,v27.16b},v2.16b 2818 1.1 christos tbl v3.16b,{v28.16b,v29.16b,v30.16b,v31.16b},v3.16b 2819 1.1 christos 2820 1.1 christos mov w6,v0.s[0] 2821 1.1 christos mov w7,v1.s[0] 2822 1.1 christos mov w9,v2.s[0] 2823 1.1 christos add w7,w6,w7 2824 1.1 christos mov w6,v3.s[0] 2825 1.1 christos add w7,w7,w9 2826 1.1 christos add w7,w7,w6 2827 1.1 christos 2828 1.1 christos eor w6,w7,w7,ror #32-2 2829 1.1 christos eor w6,w6,w7,ror #32-10 2830 1.1 christos eor w6,w6,w7,ror #32-18 2831 1.1 christos eor w6,w6,w7,ror #32-24 2832 1.1 christos ldp w7,w8,[x10],8 2833 1.1 christos eor w13,w13,w6 2834 1.1 christos // B2 ^= SBOX(B0 ^ B1 ^ B3 ^ RK2) 2835 1.1 christos eor w6,w12,w13 2836 1.1 christos eor w9,w7,w15 2837 1.1 christos eor w6,w6,w9 2838 1.1 christos movi v1.16b,#64 2839 1.1 christos movi v2.16b,#128 2840 1.1 christos movi v3.16b,#192 2841 1.1 christos mov v0.s[0],w6 2842 1.1 christos 2843 1.1 christos sub v1.16b,v0.16b,v1.16b 2844 1.1 christos sub v2.16b,v0.16b,v2.16b 2845 1.1 christos sub v3.16b,v0.16b,v3.16b 2846 1.1 christos 2847 1.1 christos tbl v0.16b,{v16.16b,v17.16b,v18.16b,v19.16b},v0.16b 2848 1.1 christos tbl v1.16b,{v20.16b,v21.16b,v22.16b,v23.16b},v1.16b 2849 1.1 christos tbl v2.16b,{v24.16b,v25.16b,v26.16b,v27.16b},v2.16b 2850 1.1 christos tbl v3.16b,{v28.16b,v29.16b,v30.16b,v31.16b},v3.16b 2851 1.1 christos 2852 1.1 christos mov w6,v0.s[0] 2853 1.1 christos mov w7,v1.s[0] 2854 1.1 christos mov w9,v2.s[0] 2855 1.1 christos add w7,w6,w7 2856 1.1 christos mov w6,v3.s[0] 2857 1.1 christos add w7,w7,w9 2858 1.1 christos add w7,w7,w6 2859 1.1 christos 2860 1.1 christos eor w6,w7,w7,ror #32-2 2861 1.1 christos eor w6,w6,w7,ror #32-10 2862 1.1 christos eor w6,w6,w7,ror #32-18 2863 1.1 christos eor w6,w6,w7,ror #32-24 2864 1.1 christos eor w14,w14,w6 2865 1.1 christos // B3 ^= SBOX(B0 ^ B1 ^ B2 ^ RK3) 2866 1.1 christos eor w6,w12,w13 2867 1.1 christos eor w9,w14,w8 2868 1.1 christos eor w6,w6,w9 2869 1.1 christos movi v1.16b,#64 2870 1.1 christos movi v2.16b,#128 2871 1.1 christos movi v3.16b,#192 2872 1.1 christos mov v0.s[0],w6 2873 1.1 christos 2874 1.1 christos sub v1.16b,v0.16b,v1.16b 2875 1.1 christos sub v2.16b,v0.16b,v2.16b 2876 1.1 christos sub v3.16b,v0.16b,v3.16b 2877 1.1 christos 2878 1.1 christos tbl v0.16b,{v16.16b,v17.16b,v18.16b,v19.16b},v0.16b 2879 1.1 christos tbl v1.16b,{v20.16b,v21.16b,v22.16b,v23.16b},v1.16b 2880 1.1 christos tbl v2.16b,{v24.16b,v25.16b,v26.16b,v27.16b},v2.16b 2881 1.1 christos tbl v3.16b,{v28.16b,v29.16b,v30.16b,v31.16b},v3.16b 2882 1.1 christos 2883 1.1 christos mov w6,v0.s[0] 2884 1.1 christos mov w7,v1.s[0] 2885 1.1 christos mov w9,v2.s[0] 2886 1.1 christos add w7,w6,w7 2887 1.1 christos mov w6,v3.s[0] 2888 1.1 christos add w7,w7,w9 2889 1.1 christos add w7,w7,w6 2890 1.1 christos 2891 1.1 christos eor w6,w7,w7,ror #32-2 2892 1.1 christos eor w6,w6,w7,ror #32-10 2893 1.1 christos eor w6,w6,w7,ror #32-18 2894 1.1 christos eor w6,w6,w7,ror #32-24 2895 1.1 christos eor w15,w15,w6 2896 1.1 christos subs w11,w11,#1 2897 1.1 christos b.ne 10b 2898 1.1 christos mov v8.s[0],w15 2899 1.1 christos mov v8.s[1],w14 2900 1.1 christos mov v8.s[2],w13 2901 1.1 christos mov v8.s[3],w12 2902 1.1 christos #ifndef __AARCH64EB__ 2903 1.1 christos rev32 v8.16b,v8.16b 2904 1.1 christos #endif 2905 1.1 christos mov x3,x26 2906 1.1 christos and x29,x2,#0x0F 2907 1.1 christos // convert length into blocks 2908 1.1 christos lsr x2,x2,4 2909 1.1 christos cmp x2,#1 2910 1.1 christos b.lt .return_gb 2911 1.1 christos 2912 1.1 christos cmp x29,0 2913 1.1 christos // If the encryption/decryption Length is N times of 16, 2914 1.1 christos // the all blocks are encrypted/decrypted in .xts_encrypt_blocks_gb 2915 1.1 christos b.eq .xts_encrypt_blocks_gb 2916 1.1 christos 2917 1.1 christos // If the encryption/decryption length is not N times of 16, 2918 1.1 christos // the last two blocks are encrypted/decrypted in .last_2blks_tweak_gb or .only_2blks_tweak_gb 2919 1.1 christos // the other blocks are encrypted/decrypted in .xts_encrypt_blocks_gb 2920 1.1 christos subs x2,x2,#1 2921 1.1 christos b.eq .only_2blks_tweak_gb 2922 1.1 christos .xts_encrypt_blocks_gb: 2923 1.1 christos rbit v8.16b,v8.16b 2924 1.1 christos #ifdef __AARCH64EB__ 2925 1.1 christos rev32 v8.16b,v8.16b 2926 1.1 christos #endif 2927 1.1 christos mov x12,v8.d[0] 2928 1.1 christos mov x13,v8.d[1] 2929 1.1 christos mov w7,0x87 2930 1.1 christos extr x9,x13,x13,#32 2931 1.1 christos extr x15,x13,x12,#63 2932 1.1 christos and w8,w7,w9,asr#31 2933 1.1 christos eor x14,x8,x12,lsl#1 2934 1.1 christos mov w7,0x87 2935 1.1 christos extr x9,x15,x15,#32 2936 1.1 christos extr x17,x15,x14,#63 2937 1.1 christos and w8,w7,w9,asr#31 2938 1.1 christos eor x16,x8,x14,lsl#1 2939 1.1 christos mov w7,0x87 2940 1.1 christos extr x9,x17,x17,#32 2941 1.1 christos extr x19,x17,x16,#63 2942 1.1 christos and w8,w7,w9,asr#31 2943 1.1 christos eor x18,x8,x16,lsl#1 2944 1.1 christos mov w7,0x87 2945 1.1 christos extr x9,x19,x19,#32 2946 1.1 christos extr x21,x19,x18,#63 2947 1.1 christos and w8,w7,w9,asr#31 2948 1.1 christos eor x20,x8,x18,lsl#1 2949 1.1 christos mov w7,0x87 2950 1.1 christos extr x9,x21,x21,#32 2951 1.1 christos extr x23,x21,x20,#63 2952 1.1 christos and w8,w7,w9,asr#31 2953 1.1 christos eor x22,x8,x20,lsl#1 2954 1.1 christos mov w7,0x87 2955 1.1 christos extr x9,x23,x23,#32 2956 1.1 christos extr x25,x23,x22,#63 2957 1.1 christos and w8,w7,w9,asr#31 2958 1.1 christos eor x24,x8,x22,lsl#1 2959 1.1 christos mov w7,0x87 2960 1.1 christos extr x9,x25,x25,#32 2961 1.1 christos extr x27,x25,x24,#63 2962 1.1 christos and w8,w7,w9,asr#31 2963 1.1 christos eor x26,x8,x24,lsl#1 2964 1.1 christos .Lxts_8_blocks_process_gb: 2965 1.1 christos cmp x2,#8 2966 1.1 christos b.lt .Lxts_4_blocks_process_gb 2967 1.1 christos mov v0.d[0],x12 2968 1.1 christos mov v0.d[1],x13 2969 1.1 christos #ifdef __AARCH64EB__ 2970 1.1 christos rev32 v0.16b,v0.16b 2971 1.1 christos #endif 2972 1.1 christos mov v1.d[0],x14 2973 1.1 christos mov v1.d[1],x15 2974 1.1 christos #ifdef __AARCH64EB__ 2975 1.1 christos rev32 v1.16b,v1.16b 2976 1.1 christos #endif 2977 1.1 christos mov v2.d[0],x16 2978 1.1 christos mov v2.d[1],x17 2979 1.1 christos #ifdef __AARCH64EB__ 2980 1.1 christos rev32 v2.16b,v2.16b 2981 1.1 christos #endif 2982 1.1 christos mov v3.d[0],x18 2983 1.1 christos mov v3.d[1],x19 2984 1.1 christos #ifdef __AARCH64EB__ 2985 1.1 christos rev32 v3.16b,v3.16b 2986 1.1 christos #endif 2987 1.1 christos mov v12.d[0],x20 2988 1.1 christos mov v12.d[1],x21 2989 1.1 christos #ifdef __AARCH64EB__ 2990 1.1 christos rev32 v12.16b,v12.16b 2991 1.1 christos #endif 2992 1.1 christos mov v13.d[0],x22 2993 1.1 christos mov v13.d[1],x23 2994 1.1 christos #ifdef __AARCH64EB__ 2995 1.1 christos rev32 v13.16b,v13.16b 2996 1.1 christos #endif 2997 1.1 christos mov v14.d[0],x24 2998 1.1 christos mov v14.d[1],x25 2999 1.1 christos #ifdef __AARCH64EB__ 3000 1.1 christos rev32 v14.16b,v14.16b 3001 1.1 christos #endif 3002 1.1 christos mov v15.d[0],x26 3003 1.1 christos mov v15.d[1],x27 3004 1.1 christos #ifdef __AARCH64EB__ 3005 1.1 christos rev32 v15.16b,v15.16b 3006 1.1 christos #endif 3007 1.1 christos ld1 {v4.4s,v5.4s,v6.4s,v7.4s},[x0],#64 3008 1.1 christos rbit v0.16b,v0.16b 3009 1.1 christos rbit v1.16b,v1.16b 3010 1.1 christos rbit v2.16b,v2.16b 3011 1.1 christos rbit v3.16b,v3.16b 3012 1.1 christos eor v4.16b, v4.16b, v0.16b 3013 1.1 christos eor v5.16b, v5.16b, v1.16b 3014 1.1 christos eor v6.16b, v6.16b, v2.16b 3015 1.1 christos eor v7.16b, v7.16b, v3.16b 3016 1.1 christos ld1 {v8.4s,v9.4s,v10.4s,v11.4s},[x0],#64 3017 1.1 christos rbit v12.16b,v12.16b 3018 1.1 christos rbit v13.16b,v13.16b 3019 1.1 christos rbit v14.16b,v14.16b 3020 1.1 christos rbit v15.16b,v15.16b 3021 1.1 christos eor v8.16b, v8.16b, v12.16b 3022 1.1 christos eor v9.16b, v9.16b, v13.16b 3023 1.1 christos eor v10.16b, v10.16b, v14.16b 3024 1.1 christos eor v11.16b, v11.16b, v15.16b 3025 1.1 christos #ifndef __AARCH64EB__ 3026 1.1 christos rev32 v4.16b,v4.16b 3027 1.1 christos #endif 3028 1.1 christos #ifndef __AARCH64EB__ 3029 1.1 christos rev32 v5.16b,v5.16b 3030 1.1 christos #endif 3031 1.1 christos #ifndef __AARCH64EB__ 3032 1.1 christos rev32 v6.16b,v6.16b 3033 1.1 christos #endif 3034 1.1 christos #ifndef __AARCH64EB__ 3035 1.1 christos rev32 v7.16b,v7.16b 3036 1.1 christos #endif 3037 1.1 christos #ifndef __AARCH64EB__ 3038 1.1 christos rev32 v8.16b,v8.16b 3039 1.1 christos #endif 3040 1.1 christos #ifndef __AARCH64EB__ 3041 1.1 christos rev32 v9.16b,v9.16b 3042 1.1 christos #endif 3043 1.1 christos #ifndef __AARCH64EB__ 3044 1.1 christos rev32 v10.16b,v10.16b 3045 1.1 christos #endif 3046 1.1 christos #ifndef __AARCH64EB__ 3047 1.1 christos rev32 v11.16b,v11.16b 3048 1.1 christos #endif 3049 1.1 christos zip1 v0.4s,v4.4s,v5.4s 3050 1.1 christos zip2 v1.4s,v4.4s,v5.4s 3051 1.1 christos zip1 v2.4s,v6.4s,v7.4s 3052 1.1 christos zip2 v3.4s,v6.4s,v7.4s 3053 1.1 christos zip1 v4.2d,v0.2d,v2.2d 3054 1.1 christos zip2 v5.2d,v0.2d,v2.2d 3055 1.1 christos zip1 v6.2d,v1.2d,v3.2d 3056 1.1 christos zip2 v7.2d,v1.2d,v3.2d 3057 1.1 christos zip1 v0.4s,v8.4s,v9.4s 3058 1.1 christos zip2 v1.4s,v8.4s,v9.4s 3059 1.1 christos zip1 v2.4s,v10.4s,v11.4s 3060 1.1 christos zip2 v3.4s,v10.4s,v11.4s 3061 1.1 christos zip1 v8.2d,v0.2d,v2.2d 3062 1.1 christos zip2 v9.2d,v0.2d,v2.2d 3063 1.1 christos zip1 v10.2d,v1.2d,v3.2d 3064 1.1 christos zip2 v11.2d,v1.2d,v3.2d 3065 1.1 christos bl _vpsm4_enc_8blks 3066 1.1 christos zip1 v8.4s,v0.4s,v1.4s 3067 1.1 christos zip2 v9.4s,v0.4s,v1.4s 3068 1.1 christos zip1 v10.4s,v2.4s,v3.4s 3069 1.1 christos zip2 v11.4s,v2.4s,v3.4s 3070 1.1 christos zip1 v0.2d,v8.2d,v10.2d 3071 1.1 christos zip2 v1.2d,v8.2d,v10.2d 3072 1.1 christos zip1 v2.2d,v9.2d,v11.2d 3073 1.1 christos zip2 v3.2d,v9.2d,v11.2d 3074 1.1 christos zip1 v8.4s,v4.4s,v5.4s 3075 1.1 christos zip2 v9.4s,v4.4s,v5.4s 3076 1.1 christos zip1 v10.4s,v6.4s,v7.4s 3077 1.1 christos zip2 v11.4s,v6.4s,v7.4s 3078 1.1 christos zip1 v4.2d,v8.2d,v10.2d 3079 1.1 christos zip2 v5.2d,v8.2d,v10.2d 3080 1.1 christos zip1 v6.2d,v9.2d,v11.2d 3081 1.1 christos zip2 v7.2d,v9.2d,v11.2d 3082 1.1 christos mov v12.d[0],x12 3083 1.1 christos mov v12.d[1],x13 3084 1.1 christos #ifdef __AARCH64EB__ 3085 1.1 christos rev32 v12.16b,v12.16b 3086 1.1 christos #endif 3087 1.1 christos mov w7,0x87 3088 1.1 christos extr x9,x27,x27,#32 3089 1.1 christos extr x13,x27,x26,#63 3090 1.1 christos and w8,w7,w9,asr#31 3091 1.1 christos eor x12,x8,x26,lsl#1 3092 1.1 christos mov v13.d[0],x14 3093 1.1 christos mov v13.d[1],x15 3094 1.1 christos #ifdef __AARCH64EB__ 3095 1.1 christos rev32 v13.16b,v13.16b 3096 1.1 christos #endif 3097 1.1 christos mov w7,0x87 3098 1.1 christos extr x9,x13,x13,#32 3099 1.1 christos extr x15,x13,x12,#63 3100 1.1 christos and w8,w7,w9,asr#31 3101 1.1 christos eor x14,x8,x12,lsl#1 3102 1.1 christos mov v14.d[0],x16 3103 1.1 christos mov v14.d[1],x17 3104 1.1 christos #ifdef __AARCH64EB__ 3105 1.1 christos rev32 v14.16b,v14.16b 3106 1.1 christos #endif 3107 1.1 christos mov w7,0x87 3108 1.1 christos extr x9,x15,x15,#32 3109 1.1 christos extr x17,x15,x14,#63 3110 1.1 christos and w8,w7,w9,asr#31 3111 1.1 christos eor x16,x8,x14,lsl#1 3112 1.1 christos mov v15.d[0],x18 3113 1.1 christos mov v15.d[1],x19 3114 1.1 christos #ifdef __AARCH64EB__ 3115 1.1 christos rev32 v15.16b,v15.16b 3116 1.1 christos #endif 3117 1.1 christos mov w7,0x87 3118 1.1 christos extr x9,x17,x17,#32 3119 1.1 christos extr x19,x17,x16,#63 3120 1.1 christos and w8,w7,w9,asr#31 3121 1.1 christos eor x18,x8,x16,lsl#1 3122 1.1 christos mov v8.d[0],x20 3123 1.1 christos mov v8.d[1],x21 3124 1.1 christos #ifdef __AARCH64EB__ 3125 1.1 christos rev32 v8.16b,v8.16b 3126 1.1 christos #endif 3127 1.1 christos mov w7,0x87 3128 1.1 christos extr x9,x19,x19,#32 3129 1.1 christos extr x21,x19,x18,#63 3130 1.1 christos and w8,w7,w9,asr#31 3131 1.1 christos eor x20,x8,x18,lsl#1 3132 1.1 christos mov v9.d[0],x22 3133 1.1 christos mov v9.d[1],x23 3134 1.1 christos #ifdef __AARCH64EB__ 3135 1.1 christos rev32 v9.16b,v9.16b 3136 1.1 christos #endif 3137 1.1 christos mov w7,0x87 3138 1.1 christos extr x9,x21,x21,#32 3139 1.1 christos extr x23,x21,x20,#63 3140 1.1 christos and w8,w7,w9,asr#31 3141 1.1 christos eor x22,x8,x20,lsl#1 3142 1.1 christos mov v10.d[0],x24 3143 1.1 christos mov v10.d[1],x25 3144 1.1 christos #ifdef __AARCH64EB__ 3145 1.1 christos rev32 v10.16b,v10.16b 3146 1.1 christos #endif 3147 1.1 christos mov w7,0x87 3148 1.1 christos extr x9,x23,x23,#32 3149 1.1 christos extr x25,x23,x22,#63 3150 1.1 christos and w8,w7,w9,asr#31 3151 1.1 christos eor x24,x8,x22,lsl#1 3152 1.1 christos mov v11.d[0],x26 3153 1.1 christos mov v11.d[1],x27 3154 1.1 christos #ifdef __AARCH64EB__ 3155 1.1 christos rev32 v11.16b,v11.16b 3156 1.1 christos #endif 3157 1.1 christos mov w7,0x87 3158 1.1 christos extr x9,x25,x25,#32 3159 1.1 christos extr x27,x25,x24,#63 3160 1.1 christos and w8,w7,w9,asr#31 3161 1.1 christos eor x26,x8,x24,lsl#1 3162 1.1 christos eor v0.16b, v0.16b, v12.16b 3163 1.1 christos eor v1.16b, v1.16b, v13.16b 3164 1.1 christos eor v2.16b, v2.16b, v14.16b 3165 1.1 christos eor v3.16b, v3.16b, v15.16b 3166 1.1 christos eor v4.16b, v4.16b, v8.16b 3167 1.1 christos eor v5.16b, v5.16b, v9.16b 3168 1.1 christos eor v6.16b, v6.16b, v10.16b 3169 1.1 christos eor v7.16b, v7.16b, v11.16b 3170 1.1 christos 3171 1.1 christos // save the last tweak 3172 1.1 christos st1 {v11.4s},[x5] 3173 1.1 christos st1 {v0.4s,v1.4s,v2.4s,v3.4s},[x1],#64 3174 1.1 christos st1 {v4.4s,v5.4s,v6.4s,v7.4s},[x1],#64 3175 1.1 christos subs x2,x2,#8 3176 1.1 christos b.gt .Lxts_8_blocks_process_gb 3177 1.1 christos b 100f 3178 1.1 christos .Lxts_4_blocks_process_gb: 3179 1.1 christos mov v8.d[0],x12 3180 1.1 christos mov v8.d[1],x13 3181 1.1 christos #ifdef __AARCH64EB__ 3182 1.1 christos rev32 v8.16b,v8.16b 3183 1.1 christos #endif 3184 1.1 christos mov v9.d[0],x14 3185 1.1 christos mov v9.d[1],x15 3186 1.1 christos #ifdef __AARCH64EB__ 3187 1.1 christos rev32 v9.16b,v9.16b 3188 1.1 christos #endif 3189 1.1 christos mov v10.d[0],x16 3190 1.1 christos mov v10.d[1],x17 3191 1.1 christos #ifdef __AARCH64EB__ 3192 1.1 christos rev32 v10.16b,v10.16b 3193 1.1 christos #endif 3194 1.1 christos mov v11.d[0],x18 3195 1.1 christos mov v11.d[1],x19 3196 1.1 christos #ifdef __AARCH64EB__ 3197 1.1 christos rev32 v11.16b,v11.16b 3198 1.1 christos #endif 3199 1.1 christos cmp x2,#4 3200 1.1 christos b.lt 1f 3201 1.1 christos ld1 {v4.4s,v5.4s,v6.4s,v7.4s},[x0],#64 3202 1.1 christos rbit v8.16b,v8.16b 3203 1.1 christos rbit v9.16b,v9.16b 3204 1.1 christos rbit v10.16b,v10.16b 3205 1.1 christos rbit v11.16b,v11.16b 3206 1.1 christos eor v4.16b, v4.16b, v8.16b 3207 1.1 christos eor v5.16b, v5.16b, v9.16b 3208 1.1 christos eor v6.16b, v6.16b, v10.16b 3209 1.1 christos eor v7.16b, v7.16b, v11.16b 3210 1.1 christos #ifndef __AARCH64EB__ 3211 1.1 christos rev32 v4.16b,v4.16b 3212 1.1 christos #endif 3213 1.1 christos #ifndef __AARCH64EB__ 3214 1.1 christos rev32 v5.16b,v5.16b 3215 1.1 christos #endif 3216 1.1 christos #ifndef __AARCH64EB__ 3217 1.1 christos rev32 v6.16b,v6.16b 3218 1.1 christos #endif 3219 1.1 christos #ifndef __AARCH64EB__ 3220 1.1 christos rev32 v7.16b,v7.16b 3221 1.1 christos #endif 3222 1.1 christos zip1 v0.4s,v4.4s,v5.4s 3223 1.1 christos zip2 v1.4s,v4.4s,v5.4s 3224 1.1 christos zip1 v2.4s,v6.4s,v7.4s 3225 1.1 christos zip2 v3.4s,v6.4s,v7.4s 3226 1.1 christos zip1 v4.2d,v0.2d,v2.2d 3227 1.1 christos zip2 v5.2d,v0.2d,v2.2d 3228 1.1 christos zip1 v6.2d,v1.2d,v3.2d 3229 1.1 christos zip2 v7.2d,v1.2d,v3.2d 3230 1.1 christos bl _vpsm4_enc_4blks 3231 1.1 christos zip1 v4.4s,v0.4s,v1.4s 3232 1.1 christos zip2 v5.4s,v0.4s,v1.4s 3233 1.1 christos zip1 v6.4s,v2.4s,v3.4s 3234 1.1 christos zip2 v7.4s,v2.4s,v3.4s 3235 1.1 christos zip1 v0.2d,v4.2d,v6.2d 3236 1.1 christos zip2 v1.2d,v4.2d,v6.2d 3237 1.1 christos zip1 v2.2d,v5.2d,v7.2d 3238 1.1 christos zip2 v3.2d,v5.2d,v7.2d 3239 1.1 christos eor v0.16b, v0.16b, v8.16b 3240 1.1 christos eor v1.16b, v1.16b, v9.16b 3241 1.1 christos eor v2.16b, v2.16b, v10.16b 3242 1.1 christos eor v3.16b, v3.16b, v11.16b 3243 1.1 christos st1 {v0.4s,v1.4s,v2.4s,v3.4s},[x1],#64 3244 1.1 christos sub x2,x2,#4 3245 1.1 christos mov v8.d[0],x20 3246 1.1 christos mov v8.d[1],x21 3247 1.1 christos #ifdef __AARCH64EB__ 3248 1.1 christos rev32 v8.16b,v8.16b 3249 1.1 christos #endif 3250 1.1 christos mov v9.d[0],x22 3251 1.1 christos mov v9.d[1],x23 3252 1.1 christos #ifdef __AARCH64EB__ 3253 1.1 christos rev32 v9.16b,v9.16b 3254 1.1 christos #endif 3255 1.1 christos mov v10.d[0],x24 3256 1.1 christos mov v10.d[1],x25 3257 1.1 christos #ifdef __AARCH64EB__ 3258 1.1 christos rev32 v10.16b,v10.16b 3259 1.1 christos #endif 3260 1.1 christos // save the last tweak 3261 1.1 christos st1 {v11.4s},[x5] 3262 1.1 christos 1: 3263 1.1 christos // process last block 3264 1.1 christos cmp x2,#1 3265 1.1 christos b.lt 100f 3266 1.1 christos b.gt 1f 3267 1.1 christos ld1 {v4.4s},[x0],#16 3268 1.1 christos rbit v8.16b,v8.16b 3269 1.1 christos eor v4.16b, v4.16b, v8.16b 3270 1.1 christos #ifndef __AARCH64EB__ 3271 1.1 christos rev32 v4.16b,v4.16b 3272 1.1 christos #endif 3273 1.1 christos mov x10,x3 3274 1.1 christos mov w11,#8 3275 1.1 christos mov w12,v4.s[0] 3276 1.1 christos mov w13,v4.s[1] 3277 1.1 christos mov w14,v4.s[2] 3278 1.1 christos mov w15,v4.s[3] 3279 1.1 christos 10: 3280 1.1 christos ldp w7,w8,[x10],8 3281 1.1 christos // B0 ^= SBOX(B1 ^ B2 ^ B3 ^ RK0) 3282 1.1 christos eor w6,w14,w15 3283 1.1 christos eor w9,w7,w13 3284 1.1 christos eor w6,w6,w9 3285 1.1 christos movi v1.16b,#64 3286 1.1 christos movi v2.16b,#128 3287 1.1 christos movi v3.16b,#192 3288 1.1 christos mov v0.s[0],w6 3289 1.1 christos 3290 1.1 christos sub v1.16b,v0.16b,v1.16b 3291 1.1 christos sub v2.16b,v0.16b,v2.16b 3292 1.1 christos sub v3.16b,v0.16b,v3.16b 3293 1.1 christos 3294 1.1 christos tbl v0.16b,{v16.16b,v17.16b,v18.16b,v19.16b},v0.16b 3295 1.1 christos tbl v1.16b,{v20.16b,v21.16b,v22.16b,v23.16b},v1.16b 3296 1.1 christos tbl v2.16b,{v24.16b,v25.16b,v26.16b,v27.16b},v2.16b 3297 1.1 christos tbl v3.16b,{v28.16b,v29.16b,v30.16b,v31.16b},v3.16b 3298 1.1 christos 3299 1.1 christos mov w6,v0.s[0] 3300 1.1 christos mov w7,v1.s[0] 3301 1.1 christos mov w9,v2.s[0] 3302 1.1 christos add w7,w6,w7 3303 1.1 christos mov w6,v3.s[0] 3304 1.1 christos add w7,w7,w9 3305 1.1 christos add w7,w7,w6 3306 1.1 christos 3307 1.1 christos eor w6,w7,w7,ror #32-2 3308 1.1 christos eor w6,w6,w7,ror #32-10 3309 1.1 christos eor w6,w6,w7,ror #32-18 3310 1.1 christos eor w6,w6,w7,ror #32-24 3311 1.1 christos eor w12,w12,w6 3312 1.1 christos // B1 ^= SBOX(B0 ^ B2 ^ B3 ^ RK1) 3313 1.1 christos eor w6,w14,w15 3314 1.1 christos eor w9,w12,w8 3315 1.1 christos eor w6,w6,w9 3316 1.1 christos movi v1.16b,#64 3317 1.1 christos movi v2.16b,#128 3318 1.1 christos movi v3.16b,#192 3319 1.1 christos mov v0.s[0],w6 3320 1.1 christos 3321 1.1 christos sub v1.16b,v0.16b,v1.16b 3322 1.1 christos sub v2.16b,v0.16b,v2.16b 3323 1.1 christos sub v3.16b,v0.16b,v3.16b 3324 1.1 christos 3325 1.1 christos tbl v0.16b,{v16.16b,v17.16b,v18.16b,v19.16b},v0.16b 3326 1.1 christos tbl v1.16b,{v20.16b,v21.16b,v22.16b,v23.16b},v1.16b 3327 1.1 christos tbl v2.16b,{v24.16b,v25.16b,v26.16b,v27.16b},v2.16b 3328 1.1 christos tbl v3.16b,{v28.16b,v29.16b,v30.16b,v31.16b},v3.16b 3329 1.1 christos 3330 1.1 christos mov w6,v0.s[0] 3331 1.1 christos mov w7,v1.s[0] 3332 1.1 christos mov w9,v2.s[0] 3333 1.1 christos add w7,w6,w7 3334 1.1 christos mov w6,v3.s[0] 3335 1.1 christos add w7,w7,w9 3336 1.1 christos add w7,w7,w6 3337 1.1 christos 3338 1.1 christos eor w6,w7,w7,ror #32-2 3339 1.1 christos eor w6,w6,w7,ror #32-10 3340 1.1 christos eor w6,w6,w7,ror #32-18 3341 1.1 christos eor w6,w6,w7,ror #32-24 3342 1.1 christos ldp w7,w8,[x10],8 3343 1.1 christos eor w13,w13,w6 3344 1.1 christos // B2 ^= SBOX(B0 ^ B1 ^ B3 ^ RK2) 3345 1.1 christos eor w6,w12,w13 3346 1.1 christos eor w9,w7,w15 3347 1.1 christos eor w6,w6,w9 3348 1.1 christos movi v1.16b,#64 3349 1.1 christos movi v2.16b,#128 3350 1.1 christos movi v3.16b,#192 3351 1.1 christos mov v0.s[0],w6 3352 1.1 christos 3353 1.1 christos sub v1.16b,v0.16b,v1.16b 3354 1.1 christos sub v2.16b,v0.16b,v2.16b 3355 1.1 christos sub v3.16b,v0.16b,v3.16b 3356 1.1 christos 3357 1.1 christos tbl v0.16b,{v16.16b,v17.16b,v18.16b,v19.16b},v0.16b 3358 1.1 christos tbl v1.16b,{v20.16b,v21.16b,v22.16b,v23.16b},v1.16b 3359 1.1 christos tbl v2.16b,{v24.16b,v25.16b,v26.16b,v27.16b},v2.16b 3360 1.1 christos tbl v3.16b,{v28.16b,v29.16b,v30.16b,v31.16b},v3.16b 3361 1.1 christos 3362 1.1 christos mov w6,v0.s[0] 3363 1.1 christos mov w7,v1.s[0] 3364 1.1 christos mov w9,v2.s[0] 3365 1.1 christos add w7,w6,w7 3366 1.1 christos mov w6,v3.s[0] 3367 1.1 christos add w7,w7,w9 3368 1.1 christos add w7,w7,w6 3369 1.1 christos 3370 1.1 christos eor w6,w7,w7,ror #32-2 3371 1.1 christos eor w6,w6,w7,ror #32-10 3372 1.1 christos eor w6,w6,w7,ror #32-18 3373 1.1 christos eor w6,w6,w7,ror #32-24 3374 1.1 christos eor w14,w14,w6 3375 1.1 christos // B3 ^= SBOX(B0 ^ B1 ^ B2 ^ RK3) 3376 1.1 christos eor w6,w12,w13 3377 1.1 christos eor w9,w14,w8 3378 1.1 christos eor w6,w6,w9 3379 1.1 christos movi v1.16b,#64 3380 1.1 christos movi v2.16b,#128 3381 1.1 christos movi v3.16b,#192 3382 1.1 christos mov v0.s[0],w6 3383 1.1 christos 3384 1.1 christos sub v1.16b,v0.16b,v1.16b 3385 1.1 christos sub v2.16b,v0.16b,v2.16b 3386 1.1 christos sub v3.16b,v0.16b,v3.16b 3387 1.1 christos 3388 1.1 christos tbl v0.16b,{v16.16b,v17.16b,v18.16b,v19.16b},v0.16b 3389 1.1 christos tbl v1.16b,{v20.16b,v21.16b,v22.16b,v23.16b},v1.16b 3390 1.1 christos tbl v2.16b,{v24.16b,v25.16b,v26.16b,v27.16b},v2.16b 3391 1.1 christos tbl v3.16b,{v28.16b,v29.16b,v30.16b,v31.16b},v3.16b 3392 1.1 christos 3393 1.1 christos mov w6,v0.s[0] 3394 1.1 christos mov w7,v1.s[0] 3395 1.1 christos mov w9,v2.s[0] 3396 1.1 christos add w7,w6,w7 3397 1.1 christos mov w6,v3.s[0] 3398 1.1 christos add w7,w7,w9 3399 1.1 christos add w7,w7,w6 3400 1.1 christos 3401 1.1 christos eor w6,w7,w7,ror #32-2 3402 1.1 christos eor w6,w6,w7,ror #32-10 3403 1.1 christos eor w6,w6,w7,ror #32-18 3404 1.1 christos eor w6,w6,w7,ror #32-24 3405 1.1 christos eor w15,w15,w6 3406 1.1 christos subs w11,w11,#1 3407 1.1 christos b.ne 10b 3408 1.1 christos mov v4.s[0],w15 3409 1.1 christos mov v4.s[1],w14 3410 1.1 christos mov v4.s[2],w13 3411 1.1 christos mov v4.s[3],w12 3412 1.1 christos #ifndef __AARCH64EB__ 3413 1.1 christos rev32 v4.16b,v4.16b 3414 1.1 christos #endif 3415 1.1 christos eor v4.16b, v4.16b, v8.16b 3416 1.1 christos st1 {v4.4s},[x1],#16 3417 1.1 christos // save the last tweak 3418 1.1 christos st1 {v8.4s},[x5] 3419 1.1 christos b 100f 3420 1.1 christos 1: // process last 2 blocks 3421 1.1 christos cmp x2,#2 3422 1.1 christos b.gt 1f 3423 1.1 christos ld1 {v4.4s,v5.4s},[x0],#32 3424 1.1 christos rbit v8.16b,v8.16b 3425 1.1 christos rbit v9.16b,v9.16b 3426 1.1 christos eor v4.16b, v4.16b, v8.16b 3427 1.1 christos eor v5.16b, v5.16b, v9.16b 3428 1.1 christos #ifndef __AARCH64EB__ 3429 1.1 christos rev32 v4.16b,v4.16b 3430 1.1 christos #endif 3431 1.1 christos #ifndef __AARCH64EB__ 3432 1.1 christos rev32 v5.16b,v5.16b 3433 1.1 christos #endif 3434 1.1 christos zip1 v0.4s,v4.4s,v5.4s 3435 1.1 christos zip2 v1.4s,v4.4s,v5.4s 3436 1.1 christos zip1 v2.4s,v6.4s,v7.4s 3437 1.1 christos zip2 v3.4s,v6.4s,v7.4s 3438 1.1 christos zip1 v4.2d,v0.2d,v2.2d 3439 1.1 christos zip2 v5.2d,v0.2d,v2.2d 3440 1.1 christos zip1 v6.2d,v1.2d,v3.2d 3441 1.1 christos zip2 v7.2d,v1.2d,v3.2d 3442 1.1 christos bl _vpsm4_enc_4blks 3443 1.1 christos zip1 v4.4s,v0.4s,v1.4s 3444 1.1 christos zip2 v5.4s,v0.4s,v1.4s 3445 1.1 christos zip1 v6.4s,v2.4s,v3.4s 3446 1.1 christos zip2 v7.4s,v2.4s,v3.4s 3447 1.1 christos zip1 v0.2d,v4.2d,v6.2d 3448 1.1 christos zip2 v1.2d,v4.2d,v6.2d 3449 1.1 christos zip1 v2.2d,v5.2d,v7.2d 3450 1.1 christos zip2 v3.2d,v5.2d,v7.2d 3451 1.1 christos eor v0.16b, v0.16b, v8.16b 3452 1.1 christos eor v1.16b, v1.16b, v9.16b 3453 1.1 christos st1 {v0.4s,v1.4s},[x1],#32 3454 1.1 christos // save the last tweak 3455 1.1 christos st1 {v9.4s},[x5] 3456 1.1 christos b 100f 3457 1.1 christos 1: // process last 3 blocks 3458 1.1 christos ld1 {v4.4s,v5.4s,v6.4s},[x0],#48 3459 1.1 christos rbit v8.16b,v8.16b 3460 1.1 christos rbit v9.16b,v9.16b 3461 1.1 christos rbit v10.16b,v10.16b 3462 1.1 christos eor v4.16b, v4.16b, v8.16b 3463 1.1 christos eor v5.16b, v5.16b, v9.16b 3464 1.1 christos eor v6.16b, v6.16b, v10.16b 3465 1.1 christos #ifndef __AARCH64EB__ 3466 1.1 christos rev32 v4.16b,v4.16b 3467 1.1 christos #endif 3468 1.1 christos #ifndef __AARCH64EB__ 3469 1.1 christos rev32 v5.16b,v5.16b 3470 1.1 christos #endif 3471 1.1 christos #ifndef __AARCH64EB__ 3472 1.1 christos rev32 v6.16b,v6.16b 3473 1.1 christos #endif 3474 1.1 christos zip1 v0.4s,v4.4s,v5.4s 3475 1.1 christos zip2 v1.4s,v4.4s,v5.4s 3476 1.1 christos zip1 v2.4s,v6.4s,v7.4s 3477 1.1 christos zip2 v3.4s,v6.4s,v7.4s 3478 1.1 christos zip1 v4.2d,v0.2d,v2.2d 3479 1.1 christos zip2 v5.2d,v0.2d,v2.2d 3480 1.1 christos zip1 v6.2d,v1.2d,v3.2d 3481 1.1 christos zip2 v7.2d,v1.2d,v3.2d 3482 1.1 christos bl _vpsm4_enc_4blks 3483 1.1 christos zip1 v4.4s,v0.4s,v1.4s 3484 1.1 christos zip2 v5.4s,v0.4s,v1.4s 3485 1.1 christos zip1 v6.4s,v2.4s,v3.4s 3486 1.1 christos zip2 v7.4s,v2.4s,v3.4s 3487 1.1 christos zip1 v0.2d,v4.2d,v6.2d 3488 1.1 christos zip2 v1.2d,v4.2d,v6.2d 3489 1.1 christos zip1 v2.2d,v5.2d,v7.2d 3490 1.1 christos zip2 v3.2d,v5.2d,v7.2d 3491 1.1 christos eor v0.16b, v0.16b, v8.16b 3492 1.1 christos eor v1.16b, v1.16b, v9.16b 3493 1.1 christos eor v2.16b, v2.16b, v10.16b 3494 1.1 christos st1 {v0.4s,v1.4s,v2.4s},[x1],#48 3495 1.1 christos // save the last tweak 3496 1.1 christos st1 {v10.4s},[x5] 3497 1.1 christos 100: 3498 1.1 christos cmp x29,0 3499 1.1 christos b.eq .return_gb 3500 1.1 christos 3501 1.1 christos // This branch calculates the last two tweaks, 3502 1.1 christos // while the encryption/decryption length is larger than 32 3503 1.1 christos .last_2blks_tweak_gb: 3504 1.1 christos ld1 {v8.4s},[x5] 3505 1.1 christos #ifdef __AARCH64EB__ 3506 1.1 christos rev32 v8.16b,v8.16b 3507 1.1 christos #endif 3508 1.1 christos rbit v2.16b,v8.16b 3509 1.1 christos adrp x10,.Lxts_magic 3510 1.1 christos ldr q0, [x10, #:lo12:.Lxts_magic] 3511 1.1 christos shl v9.16b, v2.16b, #1 3512 1.1 christos ext v1.16b, v2.16b, v2.16b,#15 3513 1.1 christos ushr v1.16b, v1.16b, #7 3514 1.1 christos mul v1.16b, v1.16b, v0.16b 3515 1.1 christos eor v9.16b, v9.16b, v1.16b 3516 1.1 christos rbit v9.16b,v9.16b 3517 1.1 christos rbit v2.16b,v9.16b 3518 1.1 christos adrp x10,.Lxts_magic 3519 1.1 christos ldr q0, [x10, #:lo12:.Lxts_magic] 3520 1.1 christos shl v10.16b, v2.16b, #1 3521 1.1 christos ext v1.16b, v2.16b, v2.16b,#15 3522 1.1 christos ushr v1.16b, v1.16b, #7 3523 1.1 christos mul v1.16b, v1.16b, v0.16b 3524 1.1 christos eor v10.16b, v10.16b, v1.16b 3525 1.1 christos rbit v10.16b,v10.16b 3526 1.1 christos b .check_dec_gb 3527 1.1 christos 3528 1.1 christos 3529 1.1 christos // This branch calculates the last two tweaks, 3530 1.1 christos // while the encryption/decryption length is equal to 32, who only need two tweaks 3531 1.1 christos .only_2blks_tweak_gb: 3532 1.1 christos mov v9.16b,v8.16b 3533 1.1 christos #ifdef __AARCH64EB__ 3534 1.1 christos rev32 v9.16b,v9.16b 3535 1.1 christos #endif 3536 1.1 christos rbit v2.16b,v9.16b 3537 1.1 christos adrp x10,.Lxts_magic 3538 1.1 christos ldr q0, [x10, #:lo12:.Lxts_magic] 3539 1.1 christos shl v10.16b, v2.16b, #1 3540 1.1 christos ext v1.16b, v2.16b, v2.16b,#15 3541 1.1 christos ushr v1.16b, v1.16b, #7 3542 1.1 christos mul v1.16b, v1.16b, v0.16b 3543 1.1 christos eor v10.16b, v10.16b, v1.16b 3544 1.1 christos rbit v10.16b,v10.16b 3545 1.1 christos b .check_dec_gb 3546 1.1 christos 3547 1.1 christos 3548 1.1 christos // Determine whether encryption or decryption is required. 3549 1.1 christos // The last two tweaks need to be swapped for decryption. 3550 1.1 christos .check_dec_gb: 3551 1.1 christos // encryption:1 decryption:0 3552 1.1 christos cmp w28,1 3553 1.1 christos b.eq .process_last_2blks_gb 3554 1.1 christos mov v0.16B,v9.16b 3555 1.1 christos mov v9.16B,v10.16b 3556 1.1 christos mov v10.16B,v0.16b 3557 1.1 christos 3558 1.1 christos .process_last_2blks_gb: 3559 1.1 christos #ifdef __AARCH64EB__ 3560 1.1 christos rev32 v9.16b,v9.16b 3561 1.1 christos #endif 3562 1.1 christos #ifdef __AARCH64EB__ 3563 1.1 christos rev32 v10.16b,v10.16b 3564 1.1 christos #endif 3565 1.1 christos ld1 {v4.4s},[x0],#16 3566 1.1 christos eor v4.16b, v4.16b, v9.16b 3567 1.1 christos #ifndef __AARCH64EB__ 3568 1.1 christos rev32 v4.16b,v4.16b 3569 1.1 christos #endif 3570 1.1 christos mov x10,x3 3571 1.1 christos mov w11,#8 3572 1.1 christos mov w12,v4.s[0] 3573 1.1 christos mov w13,v4.s[1] 3574 1.1 christos mov w14,v4.s[2] 3575 1.1 christos mov w15,v4.s[3] 3576 1.1 christos 10: 3577 1.1 christos ldp w7,w8,[x10],8 3578 1.1 christos // B0 ^= SBOX(B1 ^ B2 ^ B3 ^ RK0) 3579 1.1 christos eor w6,w14,w15 3580 1.1 christos eor w9,w7,w13 3581 1.1 christos eor w6,w6,w9 3582 1.1 christos movi v1.16b,#64 3583 1.1 christos movi v2.16b,#128 3584 1.1 christos movi v3.16b,#192 3585 1.1 christos mov v0.s[0],w6 3586 1.1 christos 3587 1.1 christos sub v1.16b,v0.16b,v1.16b 3588 1.1 christos sub v2.16b,v0.16b,v2.16b 3589 1.1 christos sub v3.16b,v0.16b,v3.16b 3590 1.1 christos 3591 1.1 christos tbl v0.16b,{v16.16b,v17.16b,v18.16b,v19.16b},v0.16b 3592 1.1 christos tbl v1.16b,{v20.16b,v21.16b,v22.16b,v23.16b},v1.16b 3593 1.1 christos tbl v2.16b,{v24.16b,v25.16b,v26.16b,v27.16b},v2.16b 3594 1.1 christos tbl v3.16b,{v28.16b,v29.16b,v30.16b,v31.16b},v3.16b 3595 1.1 christos 3596 1.1 christos mov w6,v0.s[0] 3597 1.1 christos mov w7,v1.s[0] 3598 1.1 christos mov w9,v2.s[0] 3599 1.1 christos add w7,w6,w7 3600 1.1 christos mov w6,v3.s[0] 3601 1.1 christos add w7,w7,w9 3602 1.1 christos add w7,w7,w6 3603 1.1 christos 3604 1.1 christos eor w6,w7,w7,ror #32-2 3605 1.1 christos eor w6,w6,w7,ror #32-10 3606 1.1 christos eor w6,w6,w7,ror #32-18 3607 1.1 christos eor w6,w6,w7,ror #32-24 3608 1.1 christos eor w12,w12,w6 3609 1.1 christos // B1 ^= SBOX(B0 ^ B2 ^ B3 ^ RK1) 3610 1.1 christos eor w6,w14,w15 3611 1.1 christos eor w9,w12,w8 3612 1.1 christos eor w6,w6,w9 3613 1.1 christos movi v1.16b,#64 3614 1.1 christos movi v2.16b,#128 3615 1.1 christos movi v3.16b,#192 3616 1.1 christos mov v0.s[0],w6 3617 1.1 christos 3618 1.1 christos sub v1.16b,v0.16b,v1.16b 3619 1.1 christos sub v2.16b,v0.16b,v2.16b 3620 1.1 christos sub v3.16b,v0.16b,v3.16b 3621 1.1 christos 3622 1.1 christos tbl v0.16b,{v16.16b,v17.16b,v18.16b,v19.16b},v0.16b 3623 1.1 christos tbl v1.16b,{v20.16b,v21.16b,v22.16b,v23.16b},v1.16b 3624 1.1 christos tbl v2.16b,{v24.16b,v25.16b,v26.16b,v27.16b},v2.16b 3625 1.1 christos tbl v3.16b,{v28.16b,v29.16b,v30.16b,v31.16b},v3.16b 3626 1.1 christos 3627 1.1 christos mov w6,v0.s[0] 3628 1.1 christos mov w7,v1.s[0] 3629 1.1 christos mov w9,v2.s[0] 3630 1.1 christos add w7,w6,w7 3631 1.1 christos mov w6,v3.s[0] 3632 1.1 christos add w7,w7,w9 3633 1.1 christos add w7,w7,w6 3634 1.1 christos 3635 1.1 christos eor w6,w7,w7,ror #32-2 3636 1.1 christos eor w6,w6,w7,ror #32-10 3637 1.1 christos eor w6,w6,w7,ror #32-18 3638 1.1 christos eor w6,w6,w7,ror #32-24 3639 1.1 christos ldp w7,w8,[x10],8 3640 1.1 christos eor w13,w13,w6 3641 1.1 christos // B2 ^= SBOX(B0 ^ B1 ^ B3 ^ RK2) 3642 1.1 christos eor w6,w12,w13 3643 1.1 christos eor w9,w7,w15 3644 1.1 christos eor w6,w6,w9 3645 1.1 christos movi v1.16b,#64 3646 1.1 christos movi v2.16b,#128 3647 1.1 christos movi v3.16b,#192 3648 1.1 christos mov v0.s[0],w6 3649 1.1 christos 3650 1.1 christos sub v1.16b,v0.16b,v1.16b 3651 1.1 christos sub v2.16b,v0.16b,v2.16b 3652 1.1 christos sub v3.16b,v0.16b,v3.16b 3653 1.1 christos 3654 1.1 christos tbl v0.16b,{v16.16b,v17.16b,v18.16b,v19.16b},v0.16b 3655 1.1 christos tbl v1.16b,{v20.16b,v21.16b,v22.16b,v23.16b},v1.16b 3656 1.1 christos tbl v2.16b,{v24.16b,v25.16b,v26.16b,v27.16b},v2.16b 3657 1.1 christos tbl v3.16b,{v28.16b,v29.16b,v30.16b,v31.16b},v3.16b 3658 1.1 christos 3659 1.1 christos mov w6,v0.s[0] 3660 1.1 christos mov w7,v1.s[0] 3661 1.1 christos mov w9,v2.s[0] 3662 1.1 christos add w7,w6,w7 3663 1.1 christos mov w6,v3.s[0] 3664 1.1 christos add w7,w7,w9 3665 1.1 christos add w7,w7,w6 3666 1.1 christos 3667 1.1 christos eor w6,w7,w7,ror #32-2 3668 1.1 christos eor w6,w6,w7,ror #32-10 3669 1.1 christos eor w6,w6,w7,ror #32-18 3670 1.1 christos eor w6,w6,w7,ror #32-24 3671 1.1 christos eor w14,w14,w6 3672 1.1 christos // B3 ^= SBOX(B0 ^ B1 ^ B2 ^ RK3) 3673 1.1 christos eor w6,w12,w13 3674 1.1 christos eor w9,w14,w8 3675 1.1 christos eor w6,w6,w9 3676 1.1 christos movi v1.16b,#64 3677 1.1 christos movi v2.16b,#128 3678 1.1 christos movi v3.16b,#192 3679 1.1 christos mov v0.s[0],w6 3680 1.1 christos 3681 1.1 christos sub v1.16b,v0.16b,v1.16b 3682 1.1 christos sub v2.16b,v0.16b,v2.16b 3683 1.1 christos sub v3.16b,v0.16b,v3.16b 3684 1.1 christos 3685 1.1 christos tbl v0.16b,{v16.16b,v17.16b,v18.16b,v19.16b},v0.16b 3686 1.1 christos tbl v1.16b,{v20.16b,v21.16b,v22.16b,v23.16b},v1.16b 3687 1.1 christos tbl v2.16b,{v24.16b,v25.16b,v26.16b,v27.16b},v2.16b 3688 1.1 christos tbl v3.16b,{v28.16b,v29.16b,v30.16b,v31.16b},v3.16b 3689 1.1 christos 3690 1.1 christos mov w6,v0.s[0] 3691 1.1 christos mov w7,v1.s[0] 3692 1.1 christos mov w9,v2.s[0] 3693 1.1 christos add w7,w6,w7 3694 1.1 christos mov w6,v3.s[0] 3695 1.1 christos add w7,w7,w9 3696 1.1 christos add w7,w7,w6 3697 1.1 christos 3698 1.1 christos eor w6,w7,w7,ror #32-2 3699 1.1 christos eor w6,w6,w7,ror #32-10 3700 1.1 christos eor w6,w6,w7,ror #32-18 3701 1.1 christos eor w6,w6,w7,ror #32-24 3702 1.1 christos eor w15,w15,w6 3703 1.1 christos subs w11,w11,#1 3704 1.1 christos b.ne 10b 3705 1.1 christos mov v4.s[0],w15 3706 1.1 christos mov v4.s[1],w14 3707 1.1 christos mov v4.s[2],w13 3708 1.1 christos mov v4.s[3],w12 3709 1.1 christos #ifndef __AARCH64EB__ 3710 1.1 christos rev32 v4.16b,v4.16b 3711 1.1 christos #endif 3712 1.1 christos eor v4.16b, v4.16b, v9.16b 3713 1.1 christos st1 {v4.4s},[x1],#16 3714 1.1 christos 3715 1.1 christos sub x26,x1,16 3716 1.1 christos .loop_gb: 3717 1.1 christos subs x29,x29,1 3718 1.1 christos ldrb w7,[x26,x29] 3719 1.1 christos ldrb w8,[x0,x29] 3720 1.1 christos strb w8,[x26,x29] 3721 1.1 christos strb w7,[x1,x29] 3722 1.1 christos b.gt .loop_gb 3723 1.1 christos ld1 {v4.4s}, [x26] 3724 1.1 christos eor v4.16b, v4.16b, v10.16b 3725 1.1 christos #ifndef __AARCH64EB__ 3726 1.1 christos rev32 v4.16b,v4.16b 3727 1.1 christos #endif 3728 1.1 christos mov x10,x3 3729 1.1 christos mov w11,#8 3730 1.1 christos mov w12,v4.s[0] 3731 1.1 christos mov w13,v4.s[1] 3732 1.1 christos mov w14,v4.s[2] 3733 1.1 christos mov w15,v4.s[3] 3734 1.1 christos 10: 3735 1.1 christos ldp w7,w8,[x10],8 3736 1.1 christos // B0 ^= SBOX(B1 ^ B2 ^ B3 ^ RK0) 3737 1.1 christos eor w6,w14,w15 3738 1.1 christos eor w9,w7,w13 3739 1.1 christos eor w6,w6,w9 3740 1.1 christos movi v1.16b,#64 3741 1.1 christos movi v2.16b,#128 3742 1.1 christos movi v3.16b,#192 3743 1.1 christos mov v0.s[0],w6 3744 1.1 christos 3745 1.1 christos sub v1.16b,v0.16b,v1.16b 3746 1.1 christos sub v2.16b,v0.16b,v2.16b 3747 1.1 christos sub v3.16b,v0.16b,v3.16b 3748 1.1 christos 3749 1.1 christos tbl v0.16b,{v16.16b,v17.16b,v18.16b,v19.16b},v0.16b 3750 1.1 christos tbl v1.16b,{v20.16b,v21.16b,v22.16b,v23.16b},v1.16b 3751 1.1 christos tbl v2.16b,{v24.16b,v25.16b,v26.16b,v27.16b},v2.16b 3752 1.1 christos tbl v3.16b,{v28.16b,v29.16b,v30.16b,v31.16b},v3.16b 3753 1.1 christos 3754 1.1 christos mov w6,v0.s[0] 3755 1.1 christos mov w7,v1.s[0] 3756 1.1 christos mov w9,v2.s[0] 3757 1.1 christos add w7,w6,w7 3758 1.1 christos mov w6,v3.s[0] 3759 1.1 christos add w7,w7,w9 3760 1.1 christos add w7,w7,w6 3761 1.1 christos 3762 1.1 christos eor w6,w7,w7,ror #32-2 3763 1.1 christos eor w6,w6,w7,ror #32-10 3764 1.1 christos eor w6,w6,w7,ror #32-18 3765 1.1 christos eor w6,w6,w7,ror #32-24 3766 1.1 christos eor w12,w12,w6 3767 1.1 christos // B1 ^= SBOX(B0 ^ B2 ^ B3 ^ RK1) 3768 1.1 christos eor w6,w14,w15 3769 1.1 christos eor w9,w12,w8 3770 1.1 christos eor w6,w6,w9 3771 1.1 christos movi v1.16b,#64 3772 1.1 christos movi v2.16b,#128 3773 1.1 christos movi v3.16b,#192 3774 1.1 christos mov v0.s[0],w6 3775 1.1 christos 3776 1.1 christos sub v1.16b,v0.16b,v1.16b 3777 1.1 christos sub v2.16b,v0.16b,v2.16b 3778 1.1 christos sub v3.16b,v0.16b,v3.16b 3779 1.1 christos 3780 1.1 christos tbl v0.16b,{v16.16b,v17.16b,v18.16b,v19.16b},v0.16b 3781 1.1 christos tbl v1.16b,{v20.16b,v21.16b,v22.16b,v23.16b},v1.16b 3782 1.1 christos tbl v2.16b,{v24.16b,v25.16b,v26.16b,v27.16b},v2.16b 3783 1.1 christos tbl v3.16b,{v28.16b,v29.16b,v30.16b,v31.16b},v3.16b 3784 1.1 christos 3785 1.1 christos mov w6,v0.s[0] 3786 1.1 christos mov w7,v1.s[0] 3787 1.1 christos mov w9,v2.s[0] 3788 1.1 christos add w7,w6,w7 3789 1.1 christos mov w6,v3.s[0] 3790 1.1 christos add w7,w7,w9 3791 1.1 christos add w7,w7,w6 3792 1.1 christos 3793 1.1 christos eor w6,w7,w7,ror #32-2 3794 1.1 christos eor w6,w6,w7,ror #32-10 3795 1.1 christos eor w6,w6,w7,ror #32-18 3796 1.1 christos eor w6,w6,w7,ror #32-24 3797 1.1 christos ldp w7,w8,[x10],8 3798 1.1 christos eor w13,w13,w6 3799 1.1 christos // B2 ^= SBOX(B0 ^ B1 ^ B3 ^ RK2) 3800 1.1 christos eor w6,w12,w13 3801 1.1 christos eor w9,w7,w15 3802 1.1 christos eor w6,w6,w9 3803 1.1 christos movi v1.16b,#64 3804 1.1 christos movi v2.16b,#128 3805 1.1 christos movi v3.16b,#192 3806 1.1 christos mov v0.s[0],w6 3807 1.1 christos 3808 1.1 christos sub v1.16b,v0.16b,v1.16b 3809 1.1 christos sub v2.16b,v0.16b,v2.16b 3810 1.1 christos sub v3.16b,v0.16b,v3.16b 3811 1.1 christos 3812 1.1 christos tbl v0.16b,{v16.16b,v17.16b,v18.16b,v19.16b},v0.16b 3813 1.1 christos tbl v1.16b,{v20.16b,v21.16b,v22.16b,v23.16b},v1.16b 3814 1.1 christos tbl v2.16b,{v24.16b,v25.16b,v26.16b,v27.16b},v2.16b 3815 1.1 christos tbl v3.16b,{v28.16b,v29.16b,v30.16b,v31.16b},v3.16b 3816 1.1 christos 3817 1.1 christos mov w6,v0.s[0] 3818 1.1 christos mov w7,v1.s[0] 3819 1.1 christos mov w9,v2.s[0] 3820 1.1 christos add w7,w6,w7 3821 1.1 christos mov w6,v3.s[0] 3822 1.1 christos add w7,w7,w9 3823 1.1 christos add w7,w7,w6 3824 1.1 christos 3825 1.1 christos eor w6,w7,w7,ror #32-2 3826 1.1 christos eor w6,w6,w7,ror #32-10 3827 1.1 christos eor w6,w6,w7,ror #32-18 3828 1.1 christos eor w6,w6,w7,ror #32-24 3829 1.1 christos eor w14,w14,w6 3830 1.1 christos // B3 ^= SBOX(B0 ^ B1 ^ B2 ^ RK3) 3831 1.1 christos eor w6,w12,w13 3832 1.1 christos eor w9,w14,w8 3833 1.1 christos eor w6,w6,w9 3834 1.1 christos movi v1.16b,#64 3835 1.1 christos movi v2.16b,#128 3836 1.1 christos movi v3.16b,#192 3837 1.1 christos mov v0.s[0],w6 3838 1.1 christos 3839 1.1 christos sub v1.16b,v0.16b,v1.16b 3840 1.1 christos sub v2.16b,v0.16b,v2.16b 3841 1.1 christos sub v3.16b,v0.16b,v3.16b 3842 1.1 christos 3843 1.1 christos tbl v0.16b,{v16.16b,v17.16b,v18.16b,v19.16b},v0.16b 3844 1.1 christos tbl v1.16b,{v20.16b,v21.16b,v22.16b,v23.16b},v1.16b 3845 1.1 christos tbl v2.16b,{v24.16b,v25.16b,v26.16b,v27.16b},v2.16b 3846 1.1 christos tbl v3.16b,{v28.16b,v29.16b,v30.16b,v31.16b},v3.16b 3847 1.1 christos 3848 1.1 christos mov w6,v0.s[0] 3849 1.1 christos mov w7,v1.s[0] 3850 1.1 christos mov w9,v2.s[0] 3851 1.1 christos add w7,w6,w7 3852 1.1 christos mov w6,v3.s[0] 3853 1.1 christos add w7,w7,w9 3854 1.1 christos add w7,w7,w6 3855 1.1 christos 3856 1.1 christos eor w6,w7,w7,ror #32-2 3857 1.1 christos eor w6,w6,w7,ror #32-10 3858 1.1 christos eor w6,w6,w7,ror #32-18 3859 1.1 christos eor w6,w6,w7,ror #32-24 3860 1.1 christos eor w15,w15,w6 3861 1.1 christos subs w11,w11,#1 3862 1.1 christos b.ne 10b 3863 1.1 christos mov v4.s[0],w15 3864 1.1 christos mov v4.s[1],w14 3865 1.1 christos mov v4.s[2],w13 3866 1.1 christos mov v4.s[3],w12 3867 1.1 christos #ifndef __AARCH64EB__ 3868 1.1 christos rev32 v4.16b,v4.16b 3869 1.1 christos #endif 3870 1.1 christos eor v4.16b, v4.16b, v10.16b 3871 1.1 christos st1 {v4.4s}, [x26] 3872 1.1 christos .return_gb: 3873 1.1 christos ldp d14, d15, [sp], #0x10 3874 1.1 christos ldp d12, d13, [sp], #0x10 3875 1.1 christos ldp d10, d11, [sp], #0x10 3876 1.1 christos ldp d8, d9, [sp], #0x10 3877 1.1 christos ldp x29, x30, [sp], #0x10 3878 1.1 christos ldp x27, x28, [sp], #0x10 3879 1.1 christos ldp x25, x26, [sp], #0x10 3880 1.1 christos ldp x23, x24, [sp], #0x10 3881 1.1 christos ldp x21, x22, [sp], #0x10 3882 1.1 christos ldp x19, x20, [sp], #0x10 3883 1.1 christos ldp x17, x18, [sp], #0x10 3884 1.1 christos ldp x15, x16, [sp], #0x10 3885 1.1 christos AARCH64_VALIDATE_LINK_REGISTER 3886 1.1 christos ret 3887 1.1 christos .size vpsm4_xts_encrypt_gb,.-vpsm4_xts_encrypt_gb 3888 1.1 christos .globl vpsm4_xts_encrypt 3889 1.1 christos .type vpsm4_xts_encrypt,%function 3890 1.1 christos .align 5 3891 1.1 christos vpsm4_xts_encrypt: 3892 1.1 christos AARCH64_SIGN_LINK_REGISTER 3893 1.1 christos stp x15, x16, [sp, #-0x10]! 3894 1.1 christos stp x17, x18, [sp, #-0x10]! 3895 1.1 christos stp x19, x20, [sp, #-0x10]! 3896 1.1 christos stp x21, x22, [sp, #-0x10]! 3897 1.1 christos stp x23, x24, [sp, #-0x10]! 3898 1.1 christos stp x25, x26, [sp, #-0x10]! 3899 1.1 christos stp x27, x28, [sp, #-0x10]! 3900 1.1 christos stp x29, x30, [sp, #-0x10]! 3901 1.1 christos stp d8, d9, [sp, #-0x10]! 3902 1.1 christos stp d10, d11, [sp, #-0x10]! 3903 1.1 christos stp d12, d13, [sp, #-0x10]! 3904 1.1 christos stp d14, d15, [sp, #-0x10]! 3905 1.1 christos mov x26,x3 3906 1.1 christos mov x27,x4 3907 1.1 christos mov w28,w6 3908 1.1 christos ld1 {v8.4s}, [x5] 3909 1.1 christos mov x3,x27 3910 1.1 christos adrp x10,.Lsbox 3911 1.1 christos add x10,x10,#:lo12:.Lsbox 3912 1.1 christos ld1 {v16.16b,v17.16b,v18.16b,v19.16b},[x10],#64 3913 1.1 christos ld1 {v20.16b,v21.16b,v22.16b,v23.16b},[x10],#64 3914 1.1 christos ld1 {v24.16b,v25.16b,v26.16b,v27.16b},[x10],#64 3915 1.1 christos ld1 {v28.16b,v29.16b,v30.16b,v31.16b},[x10] 3916 1.1 christos #ifndef __AARCH64EB__ 3917 1.1 christos rev32 v8.16b,v8.16b 3918 1.1 christos #endif 3919 1.1 christos mov x10,x3 3920 1.1 christos mov w11,#8 3921 1.1 christos mov w12,v8.s[0] 3922 1.1 christos mov w13,v8.s[1] 3923 1.1 christos mov w14,v8.s[2] 3924 1.1 christos mov w15,v8.s[3] 3925 1.1 christos 10: 3926 1.1 christos ldp w7,w8,[x10],8 3927 1.1 christos // B0 ^= SBOX(B1 ^ B2 ^ B3 ^ RK0) 3928 1.1 christos eor w6,w14,w15 3929 1.1 christos eor w9,w7,w13 3930 1.1 christos eor w6,w6,w9 3931 1.1 christos movi v1.16b,#64 3932 1.1 christos movi v2.16b,#128 3933 1.1 christos movi v3.16b,#192 3934 1.1 christos mov v0.s[0],w6 3935 1.1 christos 3936 1.1 christos sub v1.16b,v0.16b,v1.16b 3937 1.1 christos sub v2.16b,v0.16b,v2.16b 3938 1.1 christos sub v3.16b,v0.16b,v3.16b 3939 1.1 christos 3940 1.1 christos tbl v0.16b,{v16.16b,v17.16b,v18.16b,v19.16b},v0.16b 3941 1.1 christos tbl v1.16b,{v20.16b,v21.16b,v22.16b,v23.16b},v1.16b 3942 1.1 christos tbl v2.16b,{v24.16b,v25.16b,v26.16b,v27.16b},v2.16b 3943 1.1 christos tbl v3.16b,{v28.16b,v29.16b,v30.16b,v31.16b},v3.16b 3944 1.1 christos 3945 1.1 christos mov w6,v0.s[0] 3946 1.1 christos mov w7,v1.s[0] 3947 1.1 christos mov w9,v2.s[0] 3948 1.1 christos add w7,w6,w7 3949 1.1 christos mov w6,v3.s[0] 3950 1.1 christos add w7,w7,w9 3951 1.1 christos add w7,w7,w6 3952 1.1 christos 3953 1.1 christos eor w6,w7,w7,ror #32-2 3954 1.1 christos eor w6,w6,w7,ror #32-10 3955 1.1 christos eor w6,w6,w7,ror #32-18 3956 1.1 christos eor w6,w6,w7,ror #32-24 3957 1.1 christos eor w12,w12,w6 3958 1.1 christos // B1 ^= SBOX(B0 ^ B2 ^ B3 ^ RK1) 3959 1.1 christos eor w6,w14,w15 3960 1.1 christos eor w9,w12,w8 3961 1.1 christos eor w6,w6,w9 3962 1.1 christos movi v1.16b,#64 3963 1.1 christos movi v2.16b,#128 3964 1.1 christos movi v3.16b,#192 3965 1.1 christos mov v0.s[0],w6 3966 1.1 christos 3967 1.1 christos sub v1.16b,v0.16b,v1.16b 3968 1.1 christos sub v2.16b,v0.16b,v2.16b 3969 1.1 christos sub v3.16b,v0.16b,v3.16b 3970 1.1 christos 3971 1.1 christos tbl v0.16b,{v16.16b,v17.16b,v18.16b,v19.16b},v0.16b 3972 1.1 christos tbl v1.16b,{v20.16b,v21.16b,v22.16b,v23.16b},v1.16b 3973 1.1 christos tbl v2.16b,{v24.16b,v25.16b,v26.16b,v27.16b},v2.16b 3974 1.1 christos tbl v3.16b,{v28.16b,v29.16b,v30.16b,v31.16b},v3.16b 3975 1.1 christos 3976 1.1 christos mov w6,v0.s[0] 3977 1.1 christos mov w7,v1.s[0] 3978 1.1 christos mov w9,v2.s[0] 3979 1.1 christos add w7,w6,w7 3980 1.1 christos mov w6,v3.s[0] 3981 1.1 christos add w7,w7,w9 3982 1.1 christos add w7,w7,w6 3983 1.1 christos 3984 1.1 christos eor w6,w7,w7,ror #32-2 3985 1.1 christos eor w6,w6,w7,ror #32-10 3986 1.1 christos eor w6,w6,w7,ror #32-18 3987 1.1 christos eor w6,w6,w7,ror #32-24 3988 1.1 christos ldp w7,w8,[x10],8 3989 1.1 christos eor w13,w13,w6 3990 1.1 christos // B2 ^= SBOX(B0 ^ B1 ^ B3 ^ RK2) 3991 1.1 christos eor w6,w12,w13 3992 1.1 christos eor w9,w7,w15 3993 1.1 christos eor w6,w6,w9 3994 1.1 christos movi v1.16b,#64 3995 1.1 christos movi v2.16b,#128 3996 1.1 christos movi v3.16b,#192 3997 1.1 christos mov v0.s[0],w6 3998 1.1 christos 3999 1.1 christos sub v1.16b,v0.16b,v1.16b 4000 1.1 christos sub v2.16b,v0.16b,v2.16b 4001 1.1 christos sub v3.16b,v0.16b,v3.16b 4002 1.1 christos 4003 1.1 christos tbl v0.16b,{v16.16b,v17.16b,v18.16b,v19.16b},v0.16b 4004 1.1 christos tbl v1.16b,{v20.16b,v21.16b,v22.16b,v23.16b},v1.16b 4005 1.1 christos tbl v2.16b,{v24.16b,v25.16b,v26.16b,v27.16b},v2.16b 4006 1.1 christos tbl v3.16b,{v28.16b,v29.16b,v30.16b,v31.16b},v3.16b 4007 1.1 christos 4008 1.1 christos mov w6,v0.s[0] 4009 1.1 christos mov w7,v1.s[0] 4010 1.1 christos mov w9,v2.s[0] 4011 1.1 christos add w7,w6,w7 4012 1.1 christos mov w6,v3.s[0] 4013 1.1 christos add w7,w7,w9 4014 1.1 christos add w7,w7,w6 4015 1.1 christos 4016 1.1 christos eor w6,w7,w7,ror #32-2 4017 1.1 christos eor w6,w6,w7,ror #32-10 4018 1.1 christos eor w6,w6,w7,ror #32-18 4019 1.1 christos eor w6,w6,w7,ror #32-24 4020 1.1 christos eor w14,w14,w6 4021 1.1 christos // B3 ^= SBOX(B0 ^ B1 ^ B2 ^ RK3) 4022 1.1 christos eor w6,w12,w13 4023 1.1 christos eor w9,w14,w8 4024 1.1 christos eor w6,w6,w9 4025 1.1 christos movi v1.16b,#64 4026 1.1 christos movi v2.16b,#128 4027 1.1 christos movi v3.16b,#192 4028 1.1 christos mov v0.s[0],w6 4029 1.1 christos 4030 1.1 christos sub v1.16b,v0.16b,v1.16b 4031 1.1 christos sub v2.16b,v0.16b,v2.16b 4032 1.1 christos sub v3.16b,v0.16b,v3.16b 4033 1.1 christos 4034 1.1 christos tbl v0.16b,{v16.16b,v17.16b,v18.16b,v19.16b},v0.16b 4035 1.1 christos tbl v1.16b,{v20.16b,v21.16b,v22.16b,v23.16b},v1.16b 4036 1.1 christos tbl v2.16b,{v24.16b,v25.16b,v26.16b,v27.16b},v2.16b 4037 1.1 christos tbl v3.16b,{v28.16b,v29.16b,v30.16b,v31.16b},v3.16b 4038 1.1 christos 4039 1.1 christos mov w6,v0.s[0] 4040 1.1 christos mov w7,v1.s[0] 4041 1.1 christos mov w9,v2.s[0] 4042 1.1 christos add w7,w6,w7 4043 1.1 christos mov w6,v3.s[0] 4044 1.1 christos add w7,w7,w9 4045 1.1 christos add w7,w7,w6 4046 1.1 christos 4047 1.1 christos eor w6,w7,w7,ror #32-2 4048 1.1 christos eor w6,w6,w7,ror #32-10 4049 1.1 christos eor w6,w6,w7,ror #32-18 4050 1.1 christos eor w6,w6,w7,ror #32-24 4051 1.1 christos eor w15,w15,w6 4052 1.1 christos subs w11,w11,#1 4053 1.1 christos b.ne 10b 4054 1.1 christos mov v8.s[0],w15 4055 1.1 christos mov v8.s[1],w14 4056 1.1 christos mov v8.s[2],w13 4057 1.1 christos mov v8.s[3],w12 4058 1.1 christos #ifndef __AARCH64EB__ 4059 1.1 christos rev32 v8.16b,v8.16b 4060 1.1 christos #endif 4061 1.1 christos mov x3,x26 4062 1.1 christos and x29,x2,#0x0F 4063 1.1 christos // convert length into blocks 4064 1.1 christos lsr x2,x2,4 4065 1.1 christos cmp x2,#1 4066 1.1 christos b.lt .return 4067 1.1 christos 4068 1.1 christos cmp x29,0 4069 1.1 christos // If the encryption/decryption Length is N times of 16, 4070 1.1 christos // the all blocks are encrypted/decrypted in .xts_encrypt_blocks 4071 1.1 christos b.eq .xts_encrypt_blocks 4072 1.1 christos 4073 1.1 christos // If the encryption/decryption length is not N times of 16, 4074 1.1 christos // the last two blocks are encrypted/decrypted in .last_2blks_tweak or .only_2blks_tweak 4075 1.1 christos // the other blocks are encrypted/decrypted in .xts_encrypt_blocks 4076 1.1 christos subs x2,x2,#1 4077 1.1 christos b.eq .only_2blks_tweak 4078 1.1 christos .xts_encrypt_blocks: 4079 1.1 christos #ifdef __AARCH64EB__ 4080 1.1 christos rev32 v8.16b,v8.16b 4081 1.1 christos #endif 4082 1.1 christos mov x12,v8.d[0] 4083 1.1 christos mov x13,v8.d[1] 4084 1.1 christos mov w7,0x87 4085 1.1 christos extr x9,x13,x13,#32 4086 1.1 christos extr x15,x13,x12,#63 4087 1.1 christos and w8,w7,w9,asr#31 4088 1.1 christos eor x14,x8,x12,lsl#1 4089 1.1 christos mov w7,0x87 4090 1.1 christos extr x9,x15,x15,#32 4091 1.1 christos extr x17,x15,x14,#63 4092 1.1 christos and w8,w7,w9,asr#31 4093 1.1 christos eor x16,x8,x14,lsl#1 4094 1.1 christos mov w7,0x87 4095 1.1 christos extr x9,x17,x17,#32 4096 1.1 christos extr x19,x17,x16,#63 4097 1.1 christos and w8,w7,w9,asr#31 4098 1.1 christos eor x18,x8,x16,lsl#1 4099 1.1 christos mov w7,0x87 4100 1.1 christos extr x9,x19,x19,#32 4101 1.1 christos extr x21,x19,x18,#63 4102 1.1 christos and w8,w7,w9,asr#31 4103 1.1 christos eor x20,x8,x18,lsl#1 4104 1.1 christos mov w7,0x87 4105 1.1 christos extr x9,x21,x21,#32 4106 1.1 christos extr x23,x21,x20,#63 4107 1.1 christos and w8,w7,w9,asr#31 4108 1.1 christos eor x22,x8,x20,lsl#1 4109 1.1 christos mov w7,0x87 4110 1.1 christos extr x9,x23,x23,#32 4111 1.1 christos extr x25,x23,x22,#63 4112 1.1 christos and w8,w7,w9,asr#31 4113 1.1 christos eor x24,x8,x22,lsl#1 4114 1.1 christos mov w7,0x87 4115 1.1 christos extr x9,x25,x25,#32 4116 1.1 christos extr x27,x25,x24,#63 4117 1.1 christos and w8,w7,w9,asr#31 4118 1.1 christos eor x26,x8,x24,lsl#1 4119 1.1 christos .Lxts_8_blocks_process: 4120 1.1 christos cmp x2,#8 4121 1.1 christos b.lt .Lxts_4_blocks_process 4122 1.1 christos mov v0.d[0],x12 4123 1.1 christos mov v0.d[1],x13 4124 1.1 christos #ifdef __AARCH64EB__ 4125 1.1 christos rev32 v0.16b,v0.16b 4126 1.1 christos #endif 4127 1.1 christos mov v1.d[0],x14 4128 1.1 christos mov v1.d[1],x15 4129 1.1 christos #ifdef __AARCH64EB__ 4130 1.1 christos rev32 v1.16b,v1.16b 4131 1.1 christos #endif 4132 1.1 christos mov v2.d[0],x16 4133 1.1 christos mov v2.d[1],x17 4134 1.1 christos #ifdef __AARCH64EB__ 4135 1.1 christos rev32 v2.16b,v2.16b 4136 1.1 christos #endif 4137 1.1 christos mov v3.d[0],x18 4138 1.1 christos mov v3.d[1],x19 4139 1.1 christos #ifdef __AARCH64EB__ 4140 1.1 christos rev32 v3.16b,v3.16b 4141 1.1 christos #endif 4142 1.1 christos mov v12.d[0],x20 4143 1.1 christos mov v12.d[1],x21 4144 1.1 christos #ifdef __AARCH64EB__ 4145 1.1 christos rev32 v12.16b,v12.16b 4146 1.1 christos #endif 4147 1.1 christos mov v13.d[0],x22 4148 1.1 christos mov v13.d[1],x23 4149 1.1 christos #ifdef __AARCH64EB__ 4150 1.1 christos rev32 v13.16b,v13.16b 4151 1.1 christos #endif 4152 1.1 christos mov v14.d[0],x24 4153 1.1 christos mov v14.d[1],x25 4154 1.1 christos #ifdef __AARCH64EB__ 4155 1.1 christos rev32 v14.16b,v14.16b 4156 1.1 christos #endif 4157 1.1 christos mov v15.d[0],x26 4158 1.1 christos mov v15.d[1],x27 4159 1.1 christos #ifdef __AARCH64EB__ 4160 1.1 christos rev32 v15.16b,v15.16b 4161 1.1 christos #endif 4162 1.1 christos ld1 {v4.4s,v5.4s,v6.4s,v7.4s},[x0],#64 4163 1.1 christos eor v4.16b, v4.16b, v0.16b 4164 1.1 christos eor v5.16b, v5.16b, v1.16b 4165 1.1 christos eor v6.16b, v6.16b, v2.16b 4166 1.1 christos eor v7.16b, v7.16b, v3.16b 4167 1.1 christos ld1 {v8.4s,v9.4s,v10.4s,v11.4s},[x0],#64 4168 1.1 christos eor v8.16b, v8.16b, v12.16b 4169 1.1 christos eor v9.16b, v9.16b, v13.16b 4170 1.1 christos eor v10.16b, v10.16b, v14.16b 4171 1.1 christos eor v11.16b, v11.16b, v15.16b 4172 1.1 christos #ifndef __AARCH64EB__ 4173 1.1 christos rev32 v4.16b,v4.16b 4174 1.1 christos #endif 4175 1.1 christos #ifndef __AARCH64EB__ 4176 1.1 christos rev32 v5.16b,v5.16b 4177 1.1 christos #endif 4178 1.1 christos #ifndef __AARCH64EB__ 4179 1.1 christos rev32 v6.16b,v6.16b 4180 1.1 christos #endif 4181 1.1 christos #ifndef __AARCH64EB__ 4182 1.1 christos rev32 v7.16b,v7.16b 4183 1.1 christos #endif 4184 1.1 christos #ifndef __AARCH64EB__ 4185 1.1 christos rev32 v8.16b,v8.16b 4186 1.1 christos #endif 4187 1.1 christos #ifndef __AARCH64EB__ 4188 1.1 christos rev32 v9.16b,v9.16b 4189 1.1 christos #endif 4190 1.1 christos #ifndef __AARCH64EB__ 4191 1.1 christos rev32 v10.16b,v10.16b 4192 1.1 christos #endif 4193 1.1 christos #ifndef __AARCH64EB__ 4194 1.1 christos rev32 v11.16b,v11.16b 4195 1.1 christos #endif 4196 1.1 christos zip1 v0.4s,v4.4s,v5.4s 4197 1.1 christos zip2 v1.4s,v4.4s,v5.4s 4198 1.1 christos zip1 v2.4s,v6.4s,v7.4s 4199 1.1 christos zip2 v3.4s,v6.4s,v7.4s 4200 1.1 christos zip1 v4.2d,v0.2d,v2.2d 4201 1.1 christos zip2 v5.2d,v0.2d,v2.2d 4202 1.1 christos zip1 v6.2d,v1.2d,v3.2d 4203 1.1 christos zip2 v7.2d,v1.2d,v3.2d 4204 1.1 christos zip1 v0.4s,v8.4s,v9.4s 4205 1.1 christos zip2 v1.4s,v8.4s,v9.4s 4206 1.1 christos zip1 v2.4s,v10.4s,v11.4s 4207 1.1 christos zip2 v3.4s,v10.4s,v11.4s 4208 1.1 christos zip1 v8.2d,v0.2d,v2.2d 4209 1.1 christos zip2 v9.2d,v0.2d,v2.2d 4210 1.1 christos zip1 v10.2d,v1.2d,v3.2d 4211 1.1 christos zip2 v11.2d,v1.2d,v3.2d 4212 1.1 christos bl _vpsm4_enc_8blks 4213 1.1 christos zip1 v8.4s,v0.4s,v1.4s 4214 1.1 christos zip2 v9.4s,v0.4s,v1.4s 4215 1.1 christos zip1 v10.4s,v2.4s,v3.4s 4216 1.1 christos zip2 v11.4s,v2.4s,v3.4s 4217 1.1 christos zip1 v0.2d,v8.2d,v10.2d 4218 1.1 christos zip2 v1.2d,v8.2d,v10.2d 4219 1.1 christos zip1 v2.2d,v9.2d,v11.2d 4220 1.1 christos zip2 v3.2d,v9.2d,v11.2d 4221 1.1 christos zip1 v8.4s,v4.4s,v5.4s 4222 1.1 christos zip2 v9.4s,v4.4s,v5.4s 4223 1.1 christos zip1 v10.4s,v6.4s,v7.4s 4224 1.1 christos zip2 v11.4s,v6.4s,v7.4s 4225 1.1 christos zip1 v4.2d,v8.2d,v10.2d 4226 1.1 christos zip2 v5.2d,v8.2d,v10.2d 4227 1.1 christos zip1 v6.2d,v9.2d,v11.2d 4228 1.1 christos zip2 v7.2d,v9.2d,v11.2d 4229 1.1 christos mov v12.d[0],x12 4230 1.1 christos mov v12.d[1],x13 4231 1.1 christos #ifdef __AARCH64EB__ 4232 1.1 christos rev32 v12.16b,v12.16b 4233 1.1 christos #endif 4234 1.1 christos mov w7,0x87 4235 1.1 christos extr x9,x27,x27,#32 4236 1.1 christos extr x13,x27,x26,#63 4237 1.1 christos and w8,w7,w9,asr#31 4238 1.1 christos eor x12,x8,x26,lsl#1 4239 1.1 christos mov v13.d[0],x14 4240 1.1 christos mov v13.d[1],x15 4241 1.1 christos #ifdef __AARCH64EB__ 4242 1.1 christos rev32 v13.16b,v13.16b 4243 1.1 christos #endif 4244 1.1 christos mov w7,0x87 4245 1.1 christos extr x9,x13,x13,#32 4246 1.1 christos extr x15,x13,x12,#63 4247 1.1 christos and w8,w7,w9,asr#31 4248 1.1 christos eor x14,x8,x12,lsl#1 4249 1.1 christos mov v14.d[0],x16 4250 1.1 christos mov v14.d[1],x17 4251 1.1 christos #ifdef __AARCH64EB__ 4252 1.1 christos rev32 v14.16b,v14.16b 4253 1.1 christos #endif 4254 1.1 christos mov w7,0x87 4255 1.1 christos extr x9,x15,x15,#32 4256 1.1 christos extr x17,x15,x14,#63 4257 1.1 christos and w8,w7,w9,asr#31 4258 1.1 christos eor x16,x8,x14,lsl#1 4259 1.1 christos mov v15.d[0],x18 4260 1.1 christos mov v15.d[1],x19 4261 1.1 christos #ifdef __AARCH64EB__ 4262 1.1 christos rev32 v15.16b,v15.16b 4263 1.1 christos #endif 4264 1.1 christos mov w7,0x87 4265 1.1 christos extr x9,x17,x17,#32 4266 1.1 christos extr x19,x17,x16,#63 4267 1.1 christos and w8,w7,w9,asr#31 4268 1.1 christos eor x18,x8,x16,lsl#1 4269 1.1 christos mov v8.d[0],x20 4270 1.1 christos mov v8.d[1],x21 4271 1.1 christos #ifdef __AARCH64EB__ 4272 1.1 christos rev32 v8.16b,v8.16b 4273 1.1 christos #endif 4274 1.1 christos mov w7,0x87 4275 1.1 christos extr x9,x19,x19,#32 4276 1.1 christos extr x21,x19,x18,#63 4277 1.1 christos and w8,w7,w9,asr#31 4278 1.1 christos eor x20,x8,x18,lsl#1 4279 1.1 christos mov v9.d[0],x22 4280 1.1 christos mov v9.d[1],x23 4281 1.1 christos #ifdef __AARCH64EB__ 4282 1.1 christos rev32 v9.16b,v9.16b 4283 1.1 christos #endif 4284 1.1 christos mov w7,0x87 4285 1.1 christos extr x9,x21,x21,#32 4286 1.1 christos extr x23,x21,x20,#63 4287 1.1 christos and w8,w7,w9,asr#31 4288 1.1 christos eor x22,x8,x20,lsl#1 4289 1.1 christos mov v10.d[0],x24 4290 1.1 christos mov v10.d[1],x25 4291 1.1 christos #ifdef __AARCH64EB__ 4292 1.1 christos rev32 v10.16b,v10.16b 4293 1.1 christos #endif 4294 1.1 christos mov w7,0x87 4295 1.1 christos extr x9,x23,x23,#32 4296 1.1 christos extr x25,x23,x22,#63 4297 1.1 christos and w8,w7,w9,asr#31 4298 1.1 christos eor x24,x8,x22,lsl#1 4299 1.1 christos mov v11.d[0],x26 4300 1.1 christos mov v11.d[1],x27 4301 1.1 christos #ifdef __AARCH64EB__ 4302 1.1 christos rev32 v11.16b,v11.16b 4303 1.1 christos #endif 4304 1.1 christos mov w7,0x87 4305 1.1 christos extr x9,x25,x25,#32 4306 1.1 christos extr x27,x25,x24,#63 4307 1.1 christos and w8,w7,w9,asr#31 4308 1.1 christos eor x26,x8,x24,lsl#1 4309 1.1 christos eor v0.16b, v0.16b, v12.16b 4310 1.1 christos eor v1.16b, v1.16b, v13.16b 4311 1.1 christos eor v2.16b, v2.16b, v14.16b 4312 1.1 christos eor v3.16b, v3.16b, v15.16b 4313 1.1 christos eor v4.16b, v4.16b, v8.16b 4314 1.1 christos eor v5.16b, v5.16b, v9.16b 4315 1.1 christos eor v6.16b, v6.16b, v10.16b 4316 1.1 christos eor v7.16b, v7.16b, v11.16b 4317 1.1 christos 4318 1.1 christos // save the last tweak 4319 1.1 christos st1 {v11.4s},[x5] 4320 1.1 christos st1 {v0.4s,v1.4s,v2.4s,v3.4s},[x1],#64 4321 1.1 christos st1 {v4.4s,v5.4s,v6.4s,v7.4s},[x1],#64 4322 1.1 christos subs x2,x2,#8 4323 1.1 christos b.gt .Lxts_8_blocks_process 4324 1.1 christos b 100f 4325 1.1 christos .Lxts_4_blocks_process: 4326 1.1 christos mov v8.d[0],x12 4327 1.1 christos mov v8.d[1],x13 4328 1.1 christos #ifdef __AARCH64EB__ 4329 1.1 christos rev32 v8.16b,v8.16b 4330 1.1 christos #endif 4331 1.1 christos mov v9.d[0],x14 4332 1.1 christos mov v9.d[1],x15 4333 1.1 christos #ifdef __AARCH64EB__ 4334 1.1 christos rev32 v9.16b,v9.16b 4335 1.1 christos #endif 4336 1.1 christos mov v10.d[0],x16 4337 1.1 christos mov v10.d[1],x17 4338 1.1 christos #ifdef __AARCH64EB__ 4339 1.1 christos rev32 v10.16b,v10.16b 4340 1.1 christos #endif 4341 1.1 christos mov v11.d[0],x18 4342 1.1 christos mov v11.d[1],x19 4343 1.1 christos #ifdef __AARCH64EB__ 4344 1.1 christos rev32 v11.16b,v11.16b 4345 1.1 christos #endif 4346 1.1 christos cmp x2,#4 4347 1.1 christos b.lt 1f 4348 1.1 christos ld1 {v4.4s,v5.4s,v6.4s,v7.4s},[x0],#64 4349 1.1 christos eor v4.16b, v4.16b, v8.16b 4350 1.1 christos eor v5.16b, v5.16b, v9.16b 4351 1.1 christos eor v6.16b, v6.16b, v10.16b 4352 1.1 christos eor v7.16b, v7.16b, v11.16b 4353 1.1 christos #ifndef __AARCH64EB__ 4354 1.1 christos rev32 v4.16b,v4.16b 4355 1.1 christos #endif 4356 1.1 christos #ifndef __AARCH64EB__ 4357 1.1 christos rev32 v5.16b,v5.16b 4358 1.1 christos #endif 4359 1.1 christos #ifndef __AARCH64EB__ 4360 1.1 christos rev32 v6.16b,v6.16b 4361 1.1 christos #endif 4362 1.1 christos #ifndef __AARCH64EB__ 4363 1.1 christos rev32 v7.16b,v7.16b 4364 1.1 christos #endif 4365 1.1 christos zip1 v0.4s,v4.4s,v5.4s 4366 1.1 christos zip2 v1.4s,v4.4s,v5.4s 4367 1.1 christos zip1 v2.4s,v6.4s,v7.4s 4368 1.1 christos zip2 v3.4s,v6.4s,v7.4s 4369 1.1 christos zip1 v4.2d,v0.2d,v2.2d 4370 1.1 christos zip2 v5.2d,v0.2d,v2.2d 4371 1.1 christos zip1 v6.2d,v1.2d,v3.2d 4372 1.1 christos zip2 v7.2d,v1.2d,v3.2d 4373 1.1 christos bl _vpsm4_enc_4blks 4374 1.1 christos zip1 v4.4s,v0.4s,v1.4s 4375 1.1 christos zip2 v5.4s,v0.4s,v1.4s 4376 1.1 christos zip1 v6.4s,v2.4s,v3.4s 4377 1.1 christos zip2 v7.4s,v2.4s,v3.4s 4378 1.1 christos zip1 v0.2d,v4.2d,v6.2d 4379 1.1 christos zip2 v1.2d,v4.2d,v6.2d 4380 1.1 christos zip1 v2.2d,v5.2d,v7.2d 4381 1.1 christos zip2 v3.2d,v5.2d,v7.2d 4382 1.1 christos eor v0.16b, v0.16b, v8.16b 4383 1.1 christos eor v1.16b, v1.16b, v9.16b 4384 1.1 christos eor v2.16b, v2.16b, v10.16b 4385 1.1 christos eor v3.16b, v3.16b, v11.16b 4386 1.1 christos st1 {v0.4s,v1.4s,v2.4s,v3.4s},[x1],#64 4387 1.1 christos sub x2,x2,#4 4388 1.1 christos mov v8.d[0],x20 4389 1.1 christos mov v8.d[1],x21 4390 1.1 christos #ifdef __AARCH64EB__ 4391 1.1 christos rev32 v8.16b,v8.16b 4392 1.1 christos #endif 4393 1.1 christos mov v9.d[0],x22 4394 1.1 christos mov v9.d[1],x23 4395 1.1 christos #ifdef __AARCH64EB__ 4396 1.1 christos rev32 v9.16b,v9.16b 4397 1.1 christos #endif 4398 1.1 christos mov v10.d[0],x24 4399 1.1 christos mov v10.d[1],x25 4400 1.1 christos #ifdef __AARCH64EB__ 4401 1.1 christos rev32 v10.16b,v10.16b 4402 1.1 christos #endif 4403 1.1 christos // save the last tweak 4404 1.1 christos st1 {v11.4s},[x5] 4405 1.1 christos 1: 4406 1.1 christos // process last block 4407 1.1 christos cmp x2,#1 4408 1.1 christos b.lt 100f 4409 1.1 christos b.gt 1f 4410 1.1 christos ld1 {v4.4s},[x0],#16 4411 1.1 christos eor v4.16b, v4.16b, v8.16b 4412 1.1 christos #ifndef __AARCH64EB__ 4413 1.1 christos rev32 v4.16b,v4.16b 4414 1.1 christos #endif 4415 1.1 christos mov x10,x3 4416 1.1 christos mov w11,#8 4417 1.1 christos mov w12,v4.s[0] 4418 1.1 christos mov w13,v4.s[1] 4419 1.1 christos mov w14,v4.s[2] 4420 1.1 christos mov w15,v4.s[3] 4421 1.1 christos 10: 4422 1.1 christos ldp w7,w8,[x10],8 4423 1.1 christos // B0 ^= SBOX(B1 ^ B2 ^ B3 ^ RK0) 4424 1.1 christos eor w6,w14,w15 4425 1.1 christos eor w9,w7,w13 4426 1.1 christos eor w6,w6,w9 4427 1.1 christos movi v1.16b,#64 4428 1.1 christos movi v2.16b,#128 4429 1.1 christos movi v3.16b,#192 4430 1.1 christos mov v0.s[0],w6 4431 1.1 christos 4432 1.1 christos sub v1.16b,v0.16b,v1.16b 4433 1.1 christos sub v2.16b,v0.16b,v2.16b 4434 1.1 christos sub v3.16b,v0.16b,v3.16b 4435 1.1 christos 4436 1.1 christos tbl v0.16b,{v16.16b,v17.16b,v18.16b,v19.16b},v0.16b 4437 1.1 christos tbl v1.16b,{v20.16b,v21.16b,v22.16b,v23.16b},v1.16b 4438 1.1 christos tbl v2.16b,{v24.16b,v25.16b,v26.16b,v27.16b},v2.16b 4439 1.1 christos tbl v3.16b,{v28.16b,v29.16b,v30.16b,v31.16b},v3.16b 4440 1.1 christos 4441 1.1 christos mov w6,v0.s[0] 4442 1.1 christos mov w7,v1.s[0] 4443 1.1 christos mov w9,v2.s[0] 4444 1.1 christos add w7,w6,w7 4445 1.1 christos mov w6,v3.s[0] 4446 1.1 christos add w7,w7,w9 4447 1.1 christos add w7,w7,w6 4448 1.1 christos 4449 1.1 christos eor w6,w7,w7,ror #32-2 4450 1.1 christos eor w6,w6,w7,ror #32-10 4451 1.1 christos eor w6,w6,w7,ror #32-18 4452 1.1 christos eor w6,w6,w7,ror #32-24 4453 1.1 christos eor w12,w12,w6 4454 1.1 christos // B1 ^= SBOX(B0 ^ B2 ^ B3 ^ RK1) 4455 1.1 christos eor w6,w14,w15 4456 1.1 christos eor w9,w12,w8 4457 1.1 christos eor w6,w6,w9 4458 1.1 christos movi v1.16b,#64 4459 1.1 christos movi v2.16b,#128 4460 1.1 christos movi v3.16b,#192 4461 1.1 christos mov v0.s[0],w6 4462 1.1 christos 4463 1.1 christos sub v1.16b,v0.16b,v1.16b 4464 1.1 christos sub v2.16b,v0.16b,v2.16b 4465 1.1 christos sub v3.16b,v0.16b,v3.16b 4466 1.1 christos 4467 1.1 christos tbl v0.16b,{v16.16b,v17.16b,v18.16b,v19.16b},v0.16b 4468 1.1 christos tbl v1.16b,{v20.16b,v21.16b,v22.16b,v23.16b},v1.16b 4469 1.1 christos tbl v2.16b,{v24.16b,v25.16b,v26.16b,v27.16b},v2.16b 4470 1.1 christos tbl v3.16b,{v28.16b,v29.16b,v30.16b,v31.16b},v3.16b 4471 1.1 christos 4472 1.1 christos mov w6,v0.s[0] 4473 1.1 christos mov w7,v1.s[0] 4474 1.1 christos mov w9,v2.s[0] 4475 1.1 christos add w7,w6,w7 4476 1.1 christos mov w6,v3.s[0] 4477 1.1 christos add w7,w7,w9 4478 1.1 christos add w7,w7,w6 4479 1.1 christos 4480 1.1 christos eor w6,w7,w7,ror #32-2 4481 1.1 christos eor w6,w6,w7,ror #32-10 4482 1.1 christos eor w6,w6,w7,ror #32-18 4483 1.1 christos eor w6,w6,w7,ror #32-24 4484 1.1 christos ldp w7,w8,[x10],8 4485 1.1 christos eor w13,w13,w6 4486 1.1 christos // B2 ^= SBOX(B0 ^ B1 ^ B3 ^ RK2) 4487 1.1 christos eor w6,w12,w13 4488 1.1 christos eor w9,w7,w15 4489 1.1 christos eor w6,w6,w9 4490 1.1 christos movi v1.16b,#64 4491 1.1 christos movi v2.16b,#128 4492 1.1 christos movi v3.16b,#192 4493 1.1 christos mov v0.s[0],w6 4494 1.1 christos 4495 1.1 christos sub v1.16b,v0.16b,v1.16b 4496 1.1 christos sub v2.16b,v0.16b,v2.16b 4497 1.1 christos sub v3.16b,v0.16b,v3.16b 4498 1.1 christos 4499 1.1 christos tbl v0.16b,{v16.16b,v17.16b,v18.16b,v19.16b},v0.16b 4500 1.1 christos tbl v1.16b,{v20.16b,v21.16b,v22.16b,v23.16b},v1.16b 4501 1.1 christos tbl v2.16b,{v24.16b,v25.16b,v26.16b,v27.16b},v2.16b 4502 1.1 christos tbl v3.16b,{v28.16b,v29.16b,v30.16b,v31.16b},v3.16b 4503 1.1 christos 4504 1.1 christos mov w6,v0.s[0] 4505 1.1 christos mov w7,v1.s[0] 4506 1.1 christos mov w9,v2.s[0] 4507 1.1 christos add w7,w6,w7 4508 1.1 christos mov w6,v3.s[0] 4509 1.1 christos add w7,w7,w9 4510 1.1 christos add w7,w7,w6 4511 1.1 christos 4512 1.1 christos eor w6,w7,w7,ror #32-2 4513 1.1 christos eor w6,w6,w7,ror #32-10 4514 1.1 christos eor w6,w6,w7,ror #32-18 4515 1.1 christos eor w6,w6,w7,ror #32-24 4516 1.1 christos eor w14,w14,w6 4517 1.1 christos // B3 ^= SBOX(B0 ^ B1 ^ B2 ^ RK3) 4518 1.1 christos eor w6,w12,w13 4519 1.1 christos eor w9,w14,w8 4520 1.1 christos eor w6,w6,w9 4521 1.1 christos movi v1.16b,#64 4522 1.1 christos movi v2.16b,#128 4523 1.1 christos movi v3.16b,#192 4524 1.1 christos mov v0.s[0],w6 4525 1.1 christos 4526 1.1 christos sub v1.16b,v0.16b,v1.16b 4527 1.1 christos sub v2.16b,v0.16b,v2.16b 4528 1.1 christos sub v3.16b,v0.16b,v3.16b 4529 1.1 christos 4530 1.1 christos tbl v0.16b,{v16.16b,v17.16b,v18.16b,v19.16b},v0.16b 4531 1.1 christos tbl v1.16b,{v20.16b,v21.16b,v22.16b,v23.16b},v1.16b 4532 1.1 christos tbl v2.16b,{v24.16b,v25.16b,v26.16b,v27.16b},v2.16b 4533 1.1 christos tbl v3.16b,{v28.16b,v29.16b,v30.16b,v31.16b},v3.16b 4534 1.1 christos 4535 1.1 christos mov w6,v0.s[0] 4536 1.1 christos mov w7,v1.s[0] 4537 1.1 christos mov w9,v2.s[0] 4538 1.1 christos add w7,w6,w7 4539 1.1 christos mov w6,v3.s[0] 4540 1.1 christos add w7,w7,w9 4541 1.1 christos add w7,w7,w6 4542 1.1 christos 4543 1.1 christos eor w6,w7,w7,ror #32-2 4544 1.1 christos eor w6,w6,w7,ror #32-10 4545 1.1 christos eor w6,w6,w7,ror #32-18 4546 1.1 christos eor w6,w6,w7,ror #32-24 4547 1.1 christos eor w15,w15,w6 4548 1.1 christos subs w11,w11,#1 4549 1.1 christos b.ne 10b 4550 1.1 christos mov v4.s[0],w15 4551 1.1 christos mov v4.s[1],w14 4552 1.1 christos mov v4.s[2],w13 4553 1.1 christos mov v4.s[3],w12 4554 1.1 christos #ifndef __AARCH64EB__ 4555 1.1 christos rev32 v4.16b,v4.16b 4556 1.1 christos #endif 4557 1.1 christos eor v4.16b, v4.16b, v8.16b 4558 1.1 christos st1 {v4.4s},[x1],#16 4559 1.1 christos // save the last tweak 4560 1.1 christos st1 {v8.4s},[x5] 4561 1.1 christos b 100f 4562 1.1 christos 1: // process last 2 blocks 4563 1.1 christos cmp x2,#2 4564 1.1 christos b.gt 1f 4565 1.1 christos ld1 {v4.4s,v5.4s},[x0],#32 4566 1.1 christos eor v4.16b, v4.16b, v8.16b 4567 1.1 christos eor v5.16b, v5.16b, v9.16b 4568 1.1 christos #ifndef __AARCH64EB__ 4569 1.1 christos rev32 v4.16b,v4.16b 4570 1.1 christos #endif 4571 1.1 christos #ifndef __AARCH64EB__ 4572 1.1 christos rev32 v5.16b,v5.16b 4573 1.1 christos #endif 4574 1.1 christos zip1 v0.4s,v4.4s,v5.4s 4575 1.1 christos zip2 v1.4s,v4.4s,v5.4s 4576 1.1 christos zip1 v2.4s,v6.4s,v7.4s 4577 1.1 christos zip2 v3.4s,v6.4s,v7.4s 4578 1.1 christos zip1 v4.2d,v0.2d,v2.2d 4579 1.1 christos zip2 v5.2d,v0.2d,v2.2d 4580 1.1 christos zip1 v6.2d,v1.2d,v3.2d 4581 1.1 christos zip2 v7.2d,v1.2d,v3.2d 4582 1.1 christos bl _vpsm4_enc_4blks 4583 1.1 christos zip1 v4.4s,v0.4s,v1.4s 4584 1.1 christos zip2 v5.4s,v0.4s,v1.4s 4585 1.1 christos zip1 v6.4s,v2.4s,v3.4s 4586 1.1 christos zip2 v7.4s,v2.4s,v3.4s 4587 1.1 christos zip1 v0.2d,v4.2d,v6.2d 4588 1.1 christos zip2 v1.2d,v4.2d,v6.2d 4589 1.1 christos zip1 v2.2d,v5.2d,v7.2d 4590 1.1 christos zip2 v3.2d,v5.2d,v7.2d 4591 1.1 christos eor v0.16b, v0.16b, v8.16b 4592 1.1 christos eor v1.16b, v1.16b, v9.16b 4593 1.1 christos st1 {v0.4s,v1.4s},[x1],#32 4594 1.1 christos // save the last tweak 4595 1.1 christos st1 {v9.4s},[x5] 4596 1.1 christos b 100f 4597 1.1 christos 1: // process last 3 blocks 4598 1.1 christos ld1 {v4.4s,v5.4s,v6.4s},[x0],#48 4599 1.1 christos eor v4.16b, v4.16b, v8.16b 4600 1.1 christos eor v5.16b, v5.16b, v9.16b 4601 1.1 christos eor v6.16b, v6.16b, v10.16b 4602 1.1 christos #ifndef __AARCH64EB__ 4603 1.1 christos rev32 v4.16b,v4.16b 4604 1.1 christos #endif 4605 1.1 christos #ifndef __AARCH64EB__ 4606 1.1 christos rev32 v5.16b,v5.16b 4607 1.1 christos #endif 4608 1.1 christos #ifndef __AARCH64EB__ 4609 1.1 christos rev32 v6.16b,v6.16b 4610 1.1 christos #endif 4611 1.1 christos zip1 v0.4s,v4.4s,v5.4s 4612 1.1 christos zip2 v1.4s,v4.4s,v5.4s 4613 1.1 christos zip1 v2.4s,v6.4s,v7.4s 4614 1.1 christos zip2 v3.4s,v6.4s,v7.4s 4615 1.1 christos zip1 v4.2d,v0.2d,v2.2d 4616 1.1 christos zip2 v5.2d,v0.2d,v2.2d 4617 1.1 christos zip1 v6.2d,v1.2d,v3.2d 4618 1.1 christos zip2 v7.2d,v1.2d,v3.2d 4619 1.1 christos bl _vpsm4_enc_4blks 4620 1.1 christos zip1 v4.4s,v0.4s,v1.4s 4621 1.1 christos zip2 v5.4s,v0.4s,v1.4s 4622 1.1 christos zip1 v6.4s,v2.4s,v3.4s 4623 1.1 christos zip2 v7.4s,v2.4s,v3.4s 4624 1.1 christos zip1 v0.2d,v4.2d,v6.2d 4625 1.1 christos zip2 v1.2d,v4.2d,v6.2d 4626 1.1 christos zip1 v2.2d,v5.2d,v7.2d 4627 1.1 christos zip2 v3.2d,v5.2d,v7.2d 4628 1.1 christos eor v0.16b, v0.16b, v8.16b 4629 1.1 christos eor v1.16b, v1.16b, v9.16b 4630 1.1 christos eor v2.16b, v2.16b, v10.16b 4631 1.1 christos st1 {v0.4s,v1.4s,v2.4s},[x1],#48 4632 1.1 christos // save the last tweak 4633 1.1 christos st1 {v10.4s},[x5] 4634 1.1 christos 100: 4635 1.1 christos cmp x29,0 4636 1.1 christos b.eq .return 4637 1.1 christos 4638 1.1 christos // This branch calculates the last two tweaks, 4639 1.1 christos // while the encryption/decryption length is larger than 32 4640 1.1 christos .last_2blks_tweak: 4641 1.1 christos ld1 {v8.4s},[x5] 4642 1.1 christos #ifdef __AARCH64EB__ 4643 1.1 christos rev32 v8.16b,v8.16b 4644 1.1 christos #endif 4645 1.1 christos mov v2.16b,v8.16b 4646 1.1 christos adrp x10,.Lxts_magic 4647 1.1 christos ldr q0, [x10, #:lo12:.Lxts_magic] 4648 1.1 christos shl v9.16b, v2.16b, #1 4649 1.1 christos ext v1.16b, v2.16b, v2.16b,#15 4650 1.1 christos ushr v1.16b, v1.16b, #7 4651 1.1 christos mul v1.16b, v1.16b, v0.16b 4652 1.1 christos eor v9.16b, v9.16b, v1.16b 4653 1.1 christos mov v2.16b,v9.16b 4654 1.1 christos adrp x10,.Lxts_magic 4655 1.1 christos ldr q0, [x10, #:lo12:.Lxts_magic] 4656 1.1 christos shl v10.16b, v2.16b, #1 4657 1.1 christos ext v1.16b, v2.16b, v2.16b,#15 4658 1.1 christos ushr v1.16b, v1.16b, #7 4659 1.1 christos mul v1.16b, v1.16b, v0.16b 4660 1.1 christos eor v10.16b, v10.16b, v1.16b 4661 1.1 christos b .check_dec 4662 1.1 christos 4663 1.1 christos 4664 1.1 christos // This branch calculates the last two tweaks, 4665 1.1 christos // while the encryption/decryption length is equal to 32, who only need two tweaks 4666 1.1 christos .only_2blks_tweak: 4667 1.1 christos mov v9.16b,v8.16b 4668 1.1 christos #ifdef __AARCH64EB__ 4669 1.1 christos rev32 v9.16b,v9.16b 4670 1.1 christos #endif 4671 1.1 christos mov v2.16b,v9.16b 4672 1.1 christos adrp x10,.Lxts_magic 4673 1.1 christos ldr q0, [x10, #:lo12:.Lxts_magic] 4674 1.1 christos shl v10.16b, v2.16b, #1 4675 1.1 christos ext v1.16b, v2.16b, v2.16b,#15 4676 1.1 christos ushr v1.16b, v1.16b, #7 4677 1.1 christos mul v1.16b, v1.16b, v0.16b 4678 1.1 christos eor v10.16b, v10.16b, v1.16b 4679 1.1 christos b .check_dec 4680 1.1 christos 4681 1.1 christos 4682 1.1 christos // Determine whether encryption or decryption is required. 4683 1.1 christos // The last two tweaks need to be swapped for decryption. 4684 1.1 christos .check_dec: 4685 1.1 christos // encryption:1 decryption:0 4686 1.1 christos cmp w28,1 4687 1.1 christos b.eq .process_last_2blks 4688 1.1 christos mov v0.16B,v9.16b 4689 1.1 christos mov v9.16B,v10.16b 4690 1.1 christos mov v10.16B,v0.16b 4691 1.1 christos 4692 1.1 christos .process_last_2blks: 4693 1.1 christos #ifdef __AARCH64EB__ 4694 1.1 christos rev32 v9.16b,v9.16b 4695 1.1 christos #endif 4696 1.1 christos #ifdef __AARCH64EB__ 4697 1.1 christos rev32 v10.16b,v10.16b 4698 1.1 christos #endif 4699 1.1 christos ld1 {v4.4s},[x0],#16 4700 1.1 christos eor v4.16b, v4.16b, v9.16b 4701 1.1 christos #ifndef __AARCH64EB__ 4702 1.1 christos rev32 v4.16b,v4.16b 4703 1.1 christos #endif 4704 1.1 christos mov x10,x3 4705 1.1 christos mov w11,#8 4706 1.1 christos mov w12,v4.s[0] 4707 1.1 christos mov w13,v4.s[1] 4708 1.1 christos mov w14,v4.s[2] 4709 1.1 christos mov w15,v4.s[3] 4710 1.1 christos 10: 4711 1.1 christos ldp w7,w8,[x10],8 4712 1.1 christos // B0 ^= SBOX(B1 ^ B2 ^ B3 ^ RK0) 4713 1.1 christos eor w6,w14,w15 4714 1.1 christos eor w9,w7,w13 4715 1.1 christos eor w6,w6,w9 4716 1.1 christos movi v1.16b,#64 4717 1.1 christos movi v2.16b,#128 4718 1.1 christos movi v3.16b,#192 4719 1.1 christos mov v0.s[0],w6 4720 1.1 christos 4721 1.1 christos sub v1.16b,v0.16b,v1.16b 4722 1.1 christos sub v2.16b,v0.16b,v2.16b 4723 1.1 christos sub v3.16b,v0.16b,v3.16b 4724 1.1 christos 4725 1.1 christos tbl v0.16b,{v16.16b,v17.16b,v18.16b,v19.16b},v0.16b 4726 1.1 christos tbl v1.16b,{v20.16b,v21.16b,v22.16b,v23.16b},v1.16b 4727 1.1 christos tbl v2.16b,{v24.16b,v25.16b,v26.16b,v27.16b},v2.16b 4728 1.1 christos tbl v3.16b,{v28.16b,v29.16b,v30.16b,v31.16b},v3.16b 4729 1.1 christos 4730 1.1 christos mov w6,v0.s[0] 4731 1.1 christos mov w7,v1.s[0] 4732 1.1 christos mov w9,v2.s[0] 4733 1.1 christos add w7,w6,w7 4734 1.1 christos mov w6,v3.s[0] 4735 1.1 christos add w7,w7,w9 4736 1.1 christos add w7,w7,w6 4737 1.1 christos 4738 1.1 christos eor w6,w7,w7,ror #32-2 4739 1.1 christos eor w6,w6,w7,ror #32-10 4740 1.1 christos eor w6,w6,w7,ror #32-18 4741 1.1 christos eor w6,w6,w7,ror #32-24 4742 1.1 christos eor w12,w12,w6 4743 1.1 christos // B1 ^= SBOX(B0 ^ B2 ^ B3 ^ RK1) 4744 1.1 christos eor w6,w14,w15 4745 1.1 christos eor w9,w12,w8 4746 1.1 christos eor w6,w6,w9 4747 1.1 christos movi v1.16b,#64 4748 1.1 christos movi v2.16b,#128 4749 1.1 christos movi v3.16b,#192 4750 1.1 christos mov v0.s[0],w6 4751 1.1 christos 4752 1.1 christos sub v1.16b,v0.16b,v1.16b 4753 1.1 christos sub v2.16b,v0.16b,v2.16b 4754 1.1 christos sub v3.16b,v0.16b,v3.16b 4755 1.1 christos 4756 1.1 christos tbl v0.16b,{v16.16b,v17.16b,v18.16b,v19.16b},v0.16b 4757 1.1 christos tbl v1.16b,{v20.16b,v21.16b,v22.16b,v23.16b},v1.16b 4758 1.1 christos tbl v2.16b,{v24.16b,v25.16b,v26.16b,v27.16b},v2.16b 4759 1.1 christos tbl v3.16b,{v28.16b,v29.16b,v30.16b,v31.16b},v3.16b 4760 1.1 christos 4761 1.1 christos mov w6,v0.s[0] 4762 1.1 christos mov w7,v1.s[0] 4763 1.1 christos mov w9,v2.s[0] 4764 1.1 christos add w7,w6,w7 4765 1.1 christos mov w6,v3.s[0] 4766 1.1 christos add w7,w7,w9 4767 1.1 christos add w7,w7,w6 4768 1.1 christos 4769 1.1 christos eor w6,w7,w7,ror #32-2 4770 1.1 christos eor w6,w6,w7,ror #32-10 4771 1.1 christos eor w6,w6,w7,ror #32-18 4772 1.1 christos eor w6,w6,w7,ror #32-24 4773 1.1 christos ldp w7,w8,[x10],8 4774 1.1 christos eor w13,w13,w6 4775 1.1 christos // B2 ^= SBOX(B0 ^ B1 ^ B3 ^ RK2) 4776 1.1 christos eor w6,w12,w13 4777 1.1 christos eor w9,w7,w15 4778 1.1 christos eor w6,w6,w9 4779 1.1 christos movi v1.16b,#64 4780 1.1 christos movi v2.16b,#128 4781 1.1 christos movi v3.16b,#192 4782 1.1 christos mov v0.s[0],w6 4783 1.1 christos 4784 1.1 christos sub v1.16b,v0.16b,v1.16b 4785 1.1 christos sub v2.16b,v0.16b,v2.16b 4786 1.1 christos sub v3.16b,v0.16b,v3.16b 4787 1.1 christos 4788 1.1 christos tbl v0.16b,{v16.16b,v17.16b,v18.16b,v19.16b},v0.16b 4789 1.1 christos tbl v1.16b,{v20.16b,v21.16b,v22.16b,v23.16b},v1.16b 4790 1.1 christos tbl v2.16b,{v24.16b,v25.16b,v26.16b,v27.16b},v2.16b 4791 1.1 christos tbl v3.16b,{v28.16b,v29.16b,v30.16b,v31.16b},v3.16b 4792 1.1 christos 4793 1.1 christos mov w6,v0.s[0] 4794 1.1 christos mov w7,v1.s[0] 4795 1.1 christos mov w9,v2.s[0] 4796 1.1 christos add w7,w6,w7 4797 1.1 christos mov w6,v3.s[0] 4798 1.1 christos add w7,w7,w9 4799 1.1 christos add w7,w7,w6 4800 1.1 christos 4801 1.1 christos eor w6,w7,w7,ror #32-2 4802 1.1 christos eor w6,w6,w7,ror #32-10 4803 1.1 christos eor w6,w6,w7,ror #32-18 4804 1.1 christos eor w6,w6,w7,ror #32-24 4805 1.1 christos eor w14,w14,w6 4806 1.1 christos // B3 ^= SBOX(B0 ^ B1 ^ B2 ^ RK3) 4807 1.1 christos eor w6,w12,w13 4808 1.1 christos eor w9,w14,w8 4809 1.1 christos eor w6,w6,w9 4810 1.1 christos movi v1.16b,#64 4811 1.1 christos movi v2.16b,#128 4812 1.1 christos movi v3.16b,#192 4813 1.1 christos mov v0.s[0],w6 4814 1.1 christos 4815 1.1 christos sub v1.16b,v0.16b,v1.16b 4816 1.1 christos sub v2.16b,v0.16b,v2.16b 4817 1.1 christos sub v3.16b,v0.16b,v3.16b 4818 1.1 christos 4819 1.1 christos tbl v0.16b,{v16.16b,v17.16b,v18.16b,v19.16b},v0.16b 4820 1.1 christos tbl v1.16b,{v20.16b,v21.16b,v22.16b,v23.16b},v1.16b 4821 1.1 christos tbl v2.16b,{v24.16b,v25.16b,v26.16b,v27.16b},v2.16b 4822 1.1 christos tbl v3.16b,{v28.16b,v29.16b,v30.16b,v31.16b},v3.16b 4823 1.1 christos 4824 1.1 christos mov w6,v0.s[0] 4825 1.1 christos mov w7,v1.s[0] 4826 1.1 christos mov w9,v2.s[0] 4827 1.1 christos add w7,w6,w7 4828 1.1 christos mov w6,v3.s[0] 4829 1.1 christos add w7,w7,w9 4830 1.1 christos add w7,w7,w6 4831 1.1 christos 4832 1.1 christos eor w6,w7,w7,ror #32-2 4833 1.1 christos eor w6,w6,w7,ror #32-10 4834 1.1 christos eor w6,w6,w7,ror #32-18 4835 1.1 christos eor w6,w6,w7,ror #32-24 4836 1.1 christos eor w15,w15,w6 4837 1.1 christos subs w11,w11,#1 4838 1.1 christos b.ne 10b 4839 1.1 christos mov v4.s[0],w15 4840 1.1 christos mov v4.s[1],w14 4841 1.1 christos mov v4.s[2],w13 4842 1.1 christos mov v4.s[3],w12 4843 1.1 christos #ifndef __AARCH64EB__ 4844 1.1 christos rev32 v4.16b,v4.16b 4845 1.1 christos #endif 4846 1.1 christos eor v4.16b, v4.16b, v9.16b 4847 1.1 christos st1 {v4.4s},[x1],#16 4848 1.1 christos 4849 1.1 christos sub x26,x1,16 4850 1.1 christos .loop: 4851 1.1 christos subs x29,x29,1 4852 1.1 christos ldrb w7,[x26,x29] 4853 1.1 christos ldrb w8,[x0,x29] 4854 1.1 christos strb w8,[x26,x29] 4855 1.1 christos strb w7,[x1,x29] 4856 1.1 christos b.gt .loop 4857 1.1 christos ld1 {v4.4s}, [x26] 4858 1.1 christos eor v4.16b, v4.16b, v10.16b 4859 1.1 christos #ifndef __AARCH64EB__ 4860 1.1 christos rev32 v4.16b,v4.16b 4861 1.1 christos #endif 4862 1.1 christos mov x10,x3 4863 1.1 christos mov w11,#8 4864 1.1 christos mov w12,v4.s[0] 4865 1.1 christos mov w13,v4.s[1] 4866 1.1 christos mov w14,v4.s[2] 4867 1.1 christos mov w15,v4.s[3] 4868 1.1 christos 10: 4869 1.1 christos ldp w7,w8,[x10],8 4870 1.1 christos // B0 ^= SBOX(B1 ^ B2 ^ B3 ^ RK0) 4871 1.1 christos eor w6,w14,w15 4872 1.1 christos eor w9,w7,w13 4873 1.1 christos eor w6,w6,w9 4874 1.1 christos movi v1.16b,#64 4875 1.1 christos movi v2.16b,#128 4876 1.1 christos movi v3.16b,#192 4877 1.1 christos mov v0.s[0],w6 4878 1.1 christos 4879 1.1 christos sub v1.16b,v0.16b,v1.16b 4880 1.1 christos sub v2.16b,v0.16b,v2.16b 4881 1.1 christos sub v3.16b,v0.16b,v3.16b 4882 1.1 christos 4883 1.1 christos tbl v0.16b,{v16.16b,v17.16b,v18.16b,v19.16b},v0.16b 4884 1.1 christos tbl v1.16b,{v20.16b,v21.16b,v22.16b,v23.16b},v1.16b 4885 1.1 christos tbl v2.16b,{v24.16b,v25.16b,v26.16b,v27.16b},v2.16b 4886 1.1 christos tbl v3.16b,{v28.16b,v29.16b,v30.16b,v31.16b},v3.16b 4887 1.1 christos 4888 1.1 christos mov w6,v0.s[0] 4889 1.1 christos mov w7,v1.s[0] 4890 1.1 christos mov w9,v2.s[0] 4891 1.1 christos add w7,w6,w7 4892 1.1 christos mov w6,v3.s[0] 4893 1.1 christos add w7,w7,w9 4894 1.1 christos add w7,w7,w6 4895 1.1 christos 4896 1.1 christos eor w6,w7,w7,ror #32-2 4897 1.1 christos eor w6,w6,w7,ror #32-10 4898 1.1 christos eor w6,w6,w7,ror #32-18 4899 1.1 christos eor w6,w6,w7,ror #32-24 4900 1.1 christos eor w12,w12,w6 4901 1.1 christos // B1 ^= SBOX(B0 ^ B2 ^ B3 ^ RK1) 4902 1.1 christos eor w6,w14,w15 4903 1.1 christos eor w9,w12,w8 4904 1.1 christos eor w6,w6,w9 4905 1.1 christos movi v1.16b,#64 4906 1.1 christos movi v2.16b,#128 4907 1.1 christos movi v3.16b,#192 4908 1.1 christos mov v0.s[0],w6 4909 1.1 christos 4910 1.1 christos sub v1.16b,v0.16b,v1.16b 4911 1.1 christos sub v2.16b,v0.16b,v2.16b 4912 1.1 christos sub v3.16b,v0.16b,v3.16b 4913 1.1 christos 4914 1.1 christos tbl v0.16b,{v16.16b,v17.16b,v18.16b,v19.16b},v0.16b 4915 1.1 christos tbl v1.16b,{v20.16b,v21.16b,v22.16b,v23.16b},v1.16b 4916 1.1 christos tbl v2.16b,{v24.16b,v25.16b,v26.16b,v27.16b},v2.16b 4917 1.1 christos tbl v3.16b,{v28.16b,v29.16b,v30.16b,v31.16b},v3.16b 4918 1.1 christos 4919 1.1 christos mov w6,v0.s[0] 4920 1.1 christos mov w7,v1.s[0] 4921 1.1 christos mov w9,v2.s[0] 4922 1.1 christos add w7,w6,w7 4923 1.1 christos mov w6,v3.s[0] 4924 1.1 christos add w7,w7,w9 4925 1.1 christos add w7,w7,w6 4926 1.1 christos 4927 1.1 christos eor w6,w7,w7,ror #32-2 4928 1.1 christos eor w6,w6,w7,ror #32-10 4929 1.1 christos eor w6,w6,w7,ror #32-18 4930 1.1 christos eor w6,w6,w7,ror #32-24 4931 1.1 christos ldp w7,w8,[x10],8 4932 1.1 christos eor w13,w13,w6 4933 1.1 christos // B2 ^= SBOX(B0 ^ B1 ^ B3 ^ RK2) 4934 1.1 christos eor w6,w12,w13 4935 1.1 christos eor w9,w7,w15 4936 1.1 christos eor w6,w6,w9 4937 1.1 christos movi v1.16b,#64 4938 1.1 christos movi v2.16b,#128 4939 1.1 christos movi v3.16b,#192 4940 1.1 christos mov v0.s[0],w6 4941 1.1 christos 4942 1.1 christos sub v1.16b,v0.16b,v1.16b 4943 1.1 christos sub v2.16b,v0.16b,v2.16b 4944 1.1 christos sub v3.16b,v0.16b,v3.16b 4945 1.1 christos 4946 1.1 christos tbl v0.16b,{v16.16b,v17.16b,v18.16b,v19.16b},v0.16b 4947 1.1 christos tbl v1.16b,{v20.16b,v21.16b,v22.16b,v23.16b},v1.16b 4948 1.1 christos tbl v2.16b,{v24.16b,v25.16b,v26.16b,v27.16b},v2.16b 4949 1.1 christos tbl v3.16b,{v28.16b,v29.16b,v30.16b,v31.16b},v3.16b 4950 1.1 christos 4951 1.1 christos mov w6,v0.s[0] 4952 1.1 christos mov w7,v1.s[0] 4953 1.1 christos mov w9,v2.s[0] 4954 1.1 christos add w7,w6,w7 4955 1.1 christos mov w6,v3.s[0] 4956 1.1 christos add w7,w7,w9 4957 1.1 christos add w7,w7,w6 4958 1.1 christos 4959 1.1 christos eor w6,w7,w7,ror #32-2 4960 1.1 christos eor w6,w6,w7,ror #32-10 4961 1.1 christos eor w6,w6,w7,ror #32-18 4962 1.1 christos eor w6,w6,w7,ror #32-24 4963 1.1 christos eor w14,w14,w6 4964 1.1 christos // B3 ^= SBOX(B0 ^ B1 ^ B2 ^ RK3) 4965 1.1 christos eor w6,w12,w13 4966 1.1 christos eor w9,w14,w8 4967 1.1 christos eor w6,w6,w9 4968 1.1 christos movi v1.16b,#64 4969 1.1 christos movi v2.16b,#128 4970 1.1 christos movi v3.16b,#192 4971 1.1 christos mov v0.s[0],w6 4972 1.1 christos 4973 1.1 christos sub v1.16b,v0.16b,v1.16b 4974 1.1 christos sub v2.16b,v0.16b,v2.16b 4975 1.1 christos sub v3.16b,v0.16b,v3.16b 4976 1.1 christos 4977 1.1 christos tbl v0.16b,{v16.16b,v17.16b,v18.16b,v19.16b},v0.16b 4978 1.1 christos tbl v1.16b,{v20.16b,v21.16b,v22.16b,v23.16b},v1.16b 4979 1.1 christos tbl v2.16b,{v24.16b,v25.16b,v26.16b,v27.16b},v2.16b 4980 1.1 christos tbl v3.16b,{v28.16b,v29.16b,v30.16b,v31.16b},v3.16b 4981 1.1 christos 4982 1.1 christos mov w6,v0.s[0] 4983 1.1 christos mov w7,v1.s[0] 4984 1.1 christos mov w9,v2.s[0] 4985 1.1 christos add w7,w6,w7 4986 1.1 christos mov w6,v3.s[0] 4987 1.1 christos add w7,w7,w9 4988 1.1 christos add w7,w7,w6 4989 1.1 christos 4990 1.1 christos eor w6,w7,w7,ror #32-2 4991 1.1 christos eor w6,w6,w7,ror #32-10 4992 1.1 christos eor w6,w6,w7,ror #32-18 4993 1.1 christos eor w6,w6,w7,ror #32-24 4994 1.1 christos eor w15,w15,w6 4995 1.1 christos subs w11,w11,#1 4996 1.1 christos b.ne 10b 4997 1.1 christos mov v4.s[0],w15 4998 1.1 christos mov v4.s[1],w14 4999 1.1 christos mov v4.s[2],w13 5000 1.1 christos mov v4.s[3],w12 5001 1.1 christos #ifndef __AARCH64EB__ 5002 1.1 christos rev32 v4.16b,v4.16b 5003 1.1 christos #endif 5004 1.1 christos eor v4.16b, v4.16b, v10.16b 5005 1.1 christos st1 {v4.4s}, [x26] 5006 1.1 christos .return: 5007 1.1 christos ldp d14, d15, [sp], #0x10 5008 1.1 christos ldp d12, d13, [sp], #0x10 5009 1.1 christos ldp d10, d11, [sp], #0x10 5010 1.1 christos ldp d8, d9, [sp], #0x10 5011 1.1 christos ldp x29, x30, [sp], #0x10 5012 1.1 christos ldp x27, x28, [sp], #0x10 5013 1.1 christos ldp x25, x26, [sp], #0x10 5014 1.1 christos ldp x23, x24, [sp], #0x10 5015 1.1 christos ldp x21, x22, [sp], #0x10 5016 1.1 christos ldp x19, x20, [sp], #0x10 5017 1.1 christos ldp x17, x18, [sp], #0x10 5018 1.1 christos ldp x15, x16, [sp], #0x10 5019 1.1 christos AARCH64_VALIDATE_LINK_REGISTER 5020 1.1 christos ret 5021 1.1 christos .size vpsm4_xts_encrypt,.-vpsm4_xts_encrypt 5022