1d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root 2d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root@ ==================================================================== 3d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root@ Written by Andy Polyakov <appro@openssl.org> for the OpenSSL 4d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root@ project. The module is, however, dual licensed under OpenSSL and 5d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root@ CRYPTOGAMS licenses depending on where you obtain it. For further 6d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root@ details see http://www.openssl.org/~appro/cryptogams/. 7d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root@ 8d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root@ Specific modes and adaptation for Linux kernel by Ard Biesheuvel 9d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root@ <ard.biesheuvel@linaro.org>. Permission to use under GPL terms is 10d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root@ granted. 11d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root@ ==================================================================== 12d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root 13d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root@ Bit-sliced AES for ARM NEON 14d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root@ 15d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root@ February 2012. 16d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root@ 17d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root@ This implementation is direct adaptation of bsaes-x86_64 module for 18d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root@ ARM NEON. Except that this module is endian-neutral [in sense that 19d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root@ it can be compiled for either endianness] by courtesy of vld1.8's 20d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root@ neutrality. Initial version doesn't implement interface to OpenSSL, 21d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root@ only low-level primitives and unsupported entry points, just enough 22d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root@ to collect performance results, which for Cortex-A8 core are: 23d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root@ 24d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root@ encrypt 19.5 cycles per byte processed with 128-bit key 25d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root@ decrypt 22.1 cycles per byte processed with 128-bit key 26d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root@ key conv. 440 cycles per 128-bit key/0.18 of 8x block 27d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root@ 28d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root@ Snapdragon S4 encrypts byte in 17.6 cycles and decrypts in 19.7, 29d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root@ which is [much] worse than anticipated (for further details see 30d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root@ http://www.openssl.org/~appro/Snapdragon-S4.html). 31d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root@ 32d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root@ Cortex-A15 manages in 14.2/16.1 cycles [when integer-only code 33d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root@ manages in 20.0 cycles]. 34d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root@ 35d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root@ When comparing to x86_64 results keep in mind that NEON unit is 36d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root@ [mostly] single-issue and thus can't [fully] benefit from 37d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root@ instruction-level parallelism. And when comparing to aes-armv4 38d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root@ results keep in mind key schedule conversion overhead (see 39d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root@ bsaes-x86_64.pl for further details)... 40d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root@ 41d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root@ <appro@openssl.org> 42d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root 43d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root@ April-August 2013 44d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root@ 45d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root@ Add CBC, CTR and XTS subroutines, adapt for kernel use. 46d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root@ 47d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root@ <ard.biesheuvel@linaro.org> 48d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root 49d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root#ifndef __KERNEL__ 50d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root# include "arm_arch.h" 51d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root 52d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root# define VFP_ABI_PUSH vstmdb sp!,{d8-d15} 53d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root# define VFP_ABI_POP vldmia sp!,{d8-d15} 54d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root# define VFP_ABI_FRAME 0x40 55d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root#else 56d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root# define VFP_ABI_PUSH 57d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root# define VFP_ABI_POP 58d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root# define VFP_ABI_FRAME 0 59d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root# define BSAES_ASM_EXTENDED_KEY 60d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root# define XTS_CHAIN_TWEAK 61d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root# define __ARM_ARCH__ __LINUX_ARM_ARCH__ 62d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root#endif 63d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root 64d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root#ifdef __thumb__ 65d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root# define adrl adr 66d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root#endif 67d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root 68d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root#if __ARM_ARCH__>=7 69d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root.text 70d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root.syntax unified @ ARMv7-capable assembler is expected to handle this 71d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root#ifdef __thumb2__ 72d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root.thumb 73d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root#else 74d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root.code 32 75d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root#endif 76d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root 77d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root.fpu neon 78d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root 79d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root.type _bsaes_decrypt8,%function 80d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root.align 4 81d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root_bsaes_decrypt8: 82d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root adr r6,_bsaes_decrypt8 83d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vldmia r4!, {q9} @ round 0 key 84d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root add r6,r6,#.LM0ISR-_bsaes_decrypt8 85d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root 86d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vldmia r6!, {q8} @ .LM0ISR 87d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q10, q0, q9 @ xor with round0 key 88d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q11, q1, q9 89d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vtbl.8 d0, {q10}, d16 90d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vtbl.8 d1, {q10}, d17 91d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q12, q2, q9 92d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vtbl.8 d2, {q11}, d16 93d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vtbl.8 d3, {q11}, d17 94d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q13, q3, q9 95d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vtbl.8 d4, {q12}, d16 96d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vtbl.8 d5, {q12}, d17 97d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q14, q4, q9 98d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vtbl.8 d6, {q13}, d16 99d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vtbl.8 d7, {q13}, d17 100d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q15, q5, q9 101d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vtbl.8 d8, {q14}, d16 102d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vtbl.8 d9, {q14}, d17 103d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q10, q6, q9 104d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vtbl.8 d10, {q15}, d16 105d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vtbl.8 d11, {q15}, d17 106d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q11, q7, q9 107d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vtbl.8 d12, {q10}, d16 108d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vtbl.8 d13, {q10}, d17 109d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vtbl.8 d14, {q11}, d16 110d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vtbl.8 d15, {q11}, d17 111d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vmov.i8 q8,#0x55 @ compose .LBS0 112d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vmov.i8 q9,#0x33 @ compose .LBS1 113d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vshr.u64 q10, q6, #1 114d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vshr.u64 q11, q4, #1 115d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q10, q10, q7 116d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q11, q11, q5 117d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vand q10, q10, q8 118d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vand q11, q11, q8 119d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q7, q7, q10 120d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vshl.u64 q10, q10, #1 121d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q5, q5, q11 122d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vshl.u64 q11, q11, #1 123d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q6, q6, q10 124d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q4, q4, q11 125d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vshr.u64 q10, q2, #1 126d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vshr.u64 q11, q0, #1 127d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q10, q10, q3 128d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q11, q11, q1 129d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vand q10, q10, q8 130d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vand q11, q11, q8 131d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q3, q3, q10 132d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vshl.u64 q10, q10, #1 133d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q1, q1, q11 134d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vshl.u64 q11, q11, #1 135d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q2, q2, q10 136d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q0, q0, q11 137d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vmov.i8 q8,#0x0f @ compose .LBS2 138d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vshr.u64 q10, q5, #2 139d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vshr.u64 q11, q4, #2 140d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q10, q10, q7 141d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q11, q11, q6 142d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vand q10, q10, q9 143d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vand q11, q11, q9 144d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q7, q7, q10 145d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vshl.u64 q10, q10, #2 146d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q6, q6, q11 147d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vshl.u64 q11, q11, #2 148d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q5, q5, q10 149d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q4, q4, q11 150d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vshr.u64 q10, q1, #2 151d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vshr.u64 q11, q0, #2 152d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q10, q10, q3 153d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q11, q11, q2 154d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vand q10, q10, q9 155d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vand q11, q11, q9 156d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q3, q3, q10 157d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vshl.u64 q10, q10, #2 158d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q2, q2, q11 159d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vshl.u64 q11, q11, #2 160d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q1, q1, q10 161d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q0, q0, q11 162d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vshr.u64 q10, q3, #4 163d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vshr.u64 q11, q2, #4 164d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q10, q10, q7 165d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q11, q11, q6 166d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vand q10, q10, q8 167d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vand q11, q11, q8 168d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q7, q7, q10 169d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vshl.u64 q10, q10, #4 170d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q6, q6, q11 171d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vshl.u64 q11, q11, #4 172d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q3, q3, q10 173d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q2, q2, q11 174d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vshr.u64 q10, q1, #4 175d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vshr.u64 q11, q0, #4 176d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q10, q10, q5 177d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q11, q11, q4 178d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vand q10, q10, q8 179d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vand q11, q11, q8 180d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q5, q5, q10 181d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vshl.u64 q10, q10, #4 182d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q4, q4, q11 183d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vshl.u64 q11, q11, #4 184d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q1, q1, q10 185d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q0, q0, q11 186d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root sub r5,r5,#1 187d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root b .Ldec_sbox 188d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root.align 4 189d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root.Ldec_loop: 190d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vldmia r4!, {q8-q11} 191d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q8, q8, q0 192d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q9, q9, q1 193d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vtbl.8 d0, {q8}, d24 194d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vtbl.8 d1, {q8}, d25 195d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vldmia r4!, {q8} 196d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q10, q10, q2 197d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vtbl.8 d2, {q9}, d24 198d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vtbl.8 d3, {q9}, d25 199d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vldmia r4!, {q9} 200d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q11, q11, q3 201d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vtbl.8 d4, {q10}, d24 202d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vtbl.8 d5, {q10}, d25 203d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vldmia r4!, {q10} 204d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vtbl.8 d6, {q11}, d24 205d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vtbl.8 d7, {q11}, d25 206d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vldmia r4!, {q11} 207d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q8, q8, q4 208d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q9, q9, q5 209d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vtbl.8 d8, {q8}, d24 210d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vtbl.8 d9, {q8}, d25 211d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q10, q10, q6 212d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vtbl.8 d10, {q9}, d24 213d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vtbl.8 d11, {q9}, d25 214d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q11, q11, q7 215d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vtbl.8 d12, {q10}, d24 216d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vtbl.8 d13, {q10}, d25 217d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vtbl.8 d14, {q11}, d24 218d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vtbl.8 d15, {q11}, d25 219d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root.Ldec_sbox: 220d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q1, q1, q4 221d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q3, q3, q4 222d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root 223d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q4, q4, q7 224d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q1, q1, q6 225d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q2, q2, q7 226d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q6, q6, q4 227d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root 228d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q0, q0, q1 229d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q2, q2, q5 230d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q7, q7, q6 231d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q3, q3, q0 232d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q5, q5, q0 233d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q1, q1, q3 234d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q11, q3, q0 235d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q10, q7, q4 236d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q9, q1, q6 237d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q13, q4, q0 238d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vmov q8, q10 239d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q12, q5, q2 240d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root 241d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vorr q10, q10, q9 242d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q15, q11, q8 243d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vand q14, q11, q12 244d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vorr q11, q11, q12 245d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q12, q12, q9 246d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vand q8, q8, q9 247d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q9, q6, q2 248d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vand q15, q15, q12 249d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vand q13, q13, q9 250d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q9, q3, q7 251d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q12, q1, q5 252d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q11, q11, q13 253d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q10, q10, q13 254d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vand q13, q9, q12 255d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vorr q9, q9, q12 256d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q11, q11, q15 257d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q8, q8, q13 258d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q10, q10, q14 259d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q9, q9, q15 260d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q8, q8, q14 261d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vand q12, q4, q6 262d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q9, q9, q14 263d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vand q13, q0, q2 264d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vand q14, q7, q1 265d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vorr q15, q3, q5 266d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q11, q11, q12 267d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q9, q9, q14 268d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q8, q8, q15 269d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q10, q10, q13 270d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root 271d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root @ Inv_GF16 0, 1, 2, 3, s0, s1, s2, s3 272d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root 273d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root @ new smaller inversion 274d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root 275d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vand q14, q11, q9 276d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vmov q12, q8 277d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root 278d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q13, q10, q14 279d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q15, q8, q14 280d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q14, q8, q14 @ q14=q15 281d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root 282d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vbsl q13, q9, q8 283d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vbsl q15, q11, q10 284d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q11, q11, q10 285d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root 286d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vbsl q12, q13, q14 287d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vbsl q8, q14, q13 288d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root 289d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vand q14, q12, q15 290d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q9, q9, q8 291d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root 292d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q14, q14, q11 293d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q12, q5, q2 294d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q8, q1, q6 295d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q10, q15, q14 296d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vand q10, q10, q5 297d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q5, q5, q1 298d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vand q11, q1, q15 299d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vand q5, q5, q14 300d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q1, q11, q10 301d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q5, q5, q11 302d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q15, q15, q13 303d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q14, q14, q9 304d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q11, q15, q14 305d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q10, q13, q9 306d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vand q11, q11, q12 307d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vand q10, q10, q2 308d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q12, q12, q8 309d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q2, q2, q6 310d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vand q8, q8, q15 311d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vand q6, q6, q13 312d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vand q12, q12, q14 313d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vand q2, q2, q9 314d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q8, q8, q12 315d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q2, q2, q6 316d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q12, q12, q11 317d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q6, q6, q10 318d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q5, q5, q12 319d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q2, q2, q12 320d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q1, q1, q8 321d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q6, q6, q8 322d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root 323d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q12, q3, q0 324d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q8, q7, q4 325d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q11, q15, q14 326d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q10, q13, q9 327d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vand q11, q11, q12 328d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vand q10, q10, q0 329d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q12, q12, q8 330d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q0, q0, q4 331d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vand q8, q8, q15 332d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vand q4, q4, q13 333d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vand q12, q12, q14 334d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vand q0, q0, q9 335d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q8, q8, q12 336d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q0, q0, q4 337d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q12, q12, q11 338d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q4, q4, q10 339d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q15, q15, q13 340d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q14, q14, q9 341d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q10, q15, q14 342d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vand q10, q10, q3 343d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q3, q3, q7 344d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vand q11, q7, q15 345d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vand q3, q3, q14 346d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q7, q11, q10 347d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q3, q3, q11 348d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q3, q3, q12 349d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q0, q0, q12 350d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q7, q7, q8 351d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q4, q4, q8 352d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q1, q1, q7 353d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q6, q6, q5 354d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root 355d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q4, q4, q1 356d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q2, q2, q7 357d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q5, q5, q7 358d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q4, q4, q2 359d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q7, q7, q0 360d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q4, q4, q5 361d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q3, q3, q6 362d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q6, q6, q1 363d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q3, q3, q4 364d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root 365d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q4, q4, q0 366d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q7, q7, q3 367d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root subs r5,r5,#1 368d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root bcc .Ldec_done 369d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root @ multiplication by 0x05-0x00-0x04-0x00 370d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vext.8 q8, q0, q0, #8 371d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vext.8 q14, q3, q3, #8 372d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vext.8 q15, q5, q5, #8 373d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q8, q8, q0 374d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vext.8 q9, q1, q1, #8 375d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q14, q14, q3 376d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vext.8 q10, q6, q6, #8 377d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q15, q15, q5 378d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vext.8 q11, q4, q4, #8 379d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q9, q9, q1 380d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vext.8 q12, q2, q2, #8 381d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q10, q10, q6 382d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vext.8 q13, q7, q7, #8 383d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q11, q11, q4 384d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q12, q12, q2 385d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q13, q13, q7 386d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root 387d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q0, q0, q14 388d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q1, q1, q14 389d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q6, q6, q8 390d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q2, q2, q10 391d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q4, q4, q9 392d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q1, q1, q15 393d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q6, q6, q15 394d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q2, q2, q14 395d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q7, q7, q11 396d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q4, q4, q14 397d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q3, q3, q12 398d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q2, q2, q15 399d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q7, q7, q15 400d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q5, q5, q13 401d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vext.8 q8, q0, q0, #12 @ x0 <<< 32 402d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vext.8 q9, q1, q1, #12 403d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q0, q0, q8 @ x0 ^ (x0 <<< 32) 404d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vext.8 q10, q6, q6, #12 405d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q1, q1, q9 406d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vext.8 q11, q4, q4, #12 407d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q6, q6, q10 408d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vext.8 q12, q2, q2, #12 409d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q4, q4, q11 410d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vext.8 q13, q7, q7, #12 411d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q2, q2, q12 412d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vext.8 q14, q3, q3, #12 413d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q7, q7, q13 414d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vext.8 q15, q5, q5, #12 415d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q3, q3, q14 416d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root 417d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q9, q9, q0 418d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q5, q5, q15 419d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vext.8 q0, q0, q0, #8 @ (x0 ^ (x0 <<< 32)) <<< 64) 420d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q10, q10, q1 421d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q8, q8, q5 422d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q9, q9, q5 423d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vext.8 q1, q1, q1, #8 424d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q13, q13, q2 425d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q0, q0, q8 426d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q14, q14, q7 427d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q1, q1, q9 428d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vext.8 q8, q2, q2, #8 429d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q12, q12, q4 430d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vext.8 q9, q7, q7, #8 431d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q15, q15, q3 432d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vext.8 q2, q4, q4, #8 433d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q11, q11, q6 434d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vext.8 q7, q5, q5, #8 435d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q12, q12, q5 436d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vext.8 q4, q3, q3, #8 437d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q11, q11, q5 438d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vext.8 q3, q6, q6, #8 439d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q5, q9, q13 440d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q11, q11, q2 441d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q7, q7, q15 442d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q6, q4, q14 443d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q4, q8, q12 444d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q2, q3, q10 445d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vmov q3, q11 446d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root @ vmov q5, q9 447d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vldmia r6, {q12} @ .LISR 448d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root ite eq @ Thumb2 thing, sanity check in ARM 449d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root addeq r6,r6,#0x10 450d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root bne .Ldec_loop 451d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vldmia r6, {q12} @ .LISRM0 452d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root b .Ldec_loop 453d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root.align 4 454d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root.Ldec_done: 455d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vmov.i8 q8,#0x55 @ compose .LBS0 456d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vmov.i8 q9,#0x33 @ compose .LBS1 457d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vshr.u64 q10, q3, #1 458d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vshr.u64 q11, q2, #1 459d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q10, q10, q5 460d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q11, q11, q7 461d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vand q10, q10, q8 462d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vand q11, q11, q8 463d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q5, q5, q10 464d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vshl.u64 q10, q10, #1 465d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q7, q7, q11 466d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vshl.u64 q11, q11, #1 467d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q3, q3, q10 468d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q2, q2, q11 469d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vshr.u64 q10, q6, #1 470d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vshr.u64 q11, q0, #1 471d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q10, q10, q4 472d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q11, q11, q1 473d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vand q10, q10, q8 474d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vand q11, q11, q8 475d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q4, q4, q10 476d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vshl.u64 q10, q10, #1 477d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q1, q1, q11 478d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vshl.u64 q11, q11, #1 479d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q6, q6, q10 480d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q0, q0, q11 481d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vmov.i8 q8,#0x0f @ compose .LBS2 482d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vshr.u64 q10, q7, #2 483d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vshr.u64 q11, q2, #2 484d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q10, q10, q5 485d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q11, q11, q3 486d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vand q10, q10, q9 487d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vand q11, q11, q9 488d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q5, q5, q10 489d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vshl.u64 q10, q10, #2 490d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q3, q3, q11 491d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vshl.u64 q11, q11, #2 492d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q7, q7, q10 493d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q2, q2, q11 494d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vshr.u64 q10, q1, #2 495d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vshr.u64 q11, q0, #2 496d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q10, q10, q4 497d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q11, q11, q6 498d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vand q10, q10, q9 499d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vand q11, q11, q9 500d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q4, q4, q10 501d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vshl.u64 q10, q10, #2 502d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q6, q6, q11 503d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vshl.u64 q11, q11, #2 504d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q1, q1, q10 505d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q0, q0, q11 506d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vshr.u64 q10, q4, #4 507d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vshr.u64 q11, q6, #4 508d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q10, q10, q5 509d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q11, q11, q3 510d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vand q10, q10, q8 511d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vand q11, q11, q8 512d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q5, q5, q10 513d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vshl.u64 q10, q10, #4 514d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q3, q3, q11 515d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vshl.u64 q11, q11, #4 516d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q4, q4, q10 517d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q6, q6, q11 518d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vshr.u64 q10, q1, #4 519d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vshr.u64 q11, q0, #4 520d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q10, q10, q7 521d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q11, q11, q2 522d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vand q10, q10, q8 523d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vand q11, q11, q8 524d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q7, q7, q10 525d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vshl.u64 q10, q10, #4 526d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q2, q2, q11 527d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vshl.u64 q11, q11, #4 528d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q1, q1, q10 529d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q0, q0, q11 530d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vldmia r4, {q8} @ last round key 531d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q6, q6, q8 532d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q4, q4, q8 533d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q2, q2, q8 534d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q7, q7, q8 535d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q3, q3, q8 536d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q5, q5, q8 537d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q0, q0, q8 538d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q1, q1, q8 539d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root bx lr 540d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root.size _bsaes_decrypt8,.-_bsaes_decrypt8 541d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root 542d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root.type _bsaes_const,%object 543d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root.align 6 544d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root_bsaes_const: 545d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root.LM0ISR: @ InvShiftRows constants 546d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root .quad 0x0a0e0206070b0f03, 0x0004080c0d010509 547d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root.LISR: 548d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root .quad 0x0504070602010003, 0x0f0e0d0c080b0a09 549d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root.LISRM0: 550d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root .quad 0x01040b0e0205080f, 0x0306090c00070a0d 551d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root.LM0SR: @ ShiftRows constants 552d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root .quad 0x0a0e02060f03070b, 0x0004080c05090d01 553d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root.LSR: 554d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root .quad 0x0504070600030201, 0x0f0e0d0c0a09080b 555d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root.LSRM0: 556d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root .quad 0x0304090e00050a0f, 0x01060b0c0207080d 557d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root.LM0: 558d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root .quad 0x02060a0e03070b0f, 0x0004080c0105090d 559d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root.LREVM0SR: 560d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root .quad 0x090d01050c000408, 0x03070b0f060a0e02 561d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root.asciz "Bit-sliced AES for NEON, CRYPTOGAMS by <appro@openssl.org>" 562d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root.align 6 563d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root.size _bsaes_const,.-_bsaes_const 564d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root 565d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root.type _bsaes_encrypt8,%function 566d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root.align 4 567d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root_bsaes_encrypt8: 568d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root adr r6,_bsaes_encrypt8 569d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vldmia r4!, {q9} @ round 0 key 570d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root sub r6,r6,#_bsaes_encrypt8-.LM0SR 571d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root 572d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vldmia r6!, {q8} @ .LM0SR 573d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root_bsaes_encrypt8_alt: 574d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q10, q0, q9 @ xor with round0 key 575d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q11, q1, q9 576d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vtbl.8 d0, {q10}, d16 577d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vtbl.8 d1, {q10}, d17 578d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q12, q2, q9 579d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vtbl.8 d2, {q11}, d16 580d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vtbl.8 d3, {q11}, d17 581d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q13, q3, q9 582d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vtbl.8 d4, {q12}, d16 583d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vtbl.8 d5, {q12}, d17 584d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q14, q4, q9 585d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vtbl.8 d6, {q13}, d16 586d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vtbl.8 d7, {q13}, d17 587d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q15, q5, q9 588d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vtbl.8 d8, {q14}, d16 589d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vtbl.8 d9, {q14}, d17 590d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q10, q6, q9 591d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vtbl.8 d10, {q15}, d16 592d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vtbl.8 d11, {q15}, d17 593d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q11, q7, q9 594d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vtbl.8 d12, {q10}, d16 595d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vtbl.8 d13, {q10}, d17 596d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vtbl.8 d14, {q11}, d16 597d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vtbl.8 d15, {q11}, d17 598d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root_bsaes_encrypt8_bitslice: 599d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vmov.i8 q8,#0x55 @ compose .LBS0 600d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vmov.i8 q9,#0x33 @ compose .LBS1 601d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vshr.u64 q10, q6, #1 602d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vshr.u64 q11, q4, #1 603d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q10, q10, q7 604d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q11, q11, q5 605d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vand q10, q10, q8 606d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vand q11, q11, q8 607d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q7, q7, q10 608d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vshl.u64 q10, q10, #1 609d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q5, q5, q11 610d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vshl.u64 q11, q11, #1 611d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q6, q6, q10 612d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q4, q4, q11 613d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vshr.u64 q10, q2, #1 614d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vshr.u64 q11, q0, #1 615d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q10, q10, q3 616d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q11, q11, q1 617d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vand q10, q10, q8 618d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vand q11, q11, q8 619d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q3, q3, q10 620d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vshl.u64 q10, q10, #1 621d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q1, q1, q11 622d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vshl.u64 q11, q11, #1 623d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q2, q2, q10 624d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q0, q0, q11 625d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vmov.i8 q8,#0x0f @ compose .LBS2 626d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vshr.u64 q10, q5, #2 627d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vshr.u64 q11, q4, #2 628d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q10, q10, q7 629d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q11, q11, q6 630d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vand q10, q10, q9 631d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vand q11, q11, q9 632d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q7, q7, q10 633d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vshl.u64 q10, q10, #2 634d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q6, q6, q11 635d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vshl.u64 q11, q11, #2 636d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q5, q5, q10 637d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q4, q4, q11 638d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vshr.u64 q10, q1, #2 639d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vshr.u64 q11, q0, #2 640d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q10, q10, q3 641d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q11, q11, q2 642d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vand q10, q10, q9 643d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vand q11, q11, q9 644d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q3, q3, q10 645d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vshl.u64 q10, q10, #2 646d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q2, q2, q11 647d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vshl.u64 q11, q11, #2 648d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q1, q1, q10 649d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q0, q0, q11 650d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vshr.u64 q10, q3, #4 651d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vshr.u64 q11, q2, #4 652d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q10, q10, q7 653d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q11, q11, q6 654d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vand q10, q10, q8 655d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vand q11, q11, q8 656d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q7, q7, q10 657d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vshl.u64 q10, q10, #4 658d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q6, q6, q11 659d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vshl.u64 q11, q11, #4 660d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q3, q3, q10 661d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q2, q2, q11 662d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vshr.u64 q10, q1, #4 663d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vshr.u64 q11, q0, #4 664d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q10, q10, q5 665d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q11, q11, q4 666d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vand q10, q10, q8 667d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vand q11, q11, q8 668d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q5, q5, q10 669d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vshl.u64 q10, q10, #4 670d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q4, q4, q11 671d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vshl.u64 q11, q11, #4 672d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q1, q1, q10 673d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q0, q0, q11 674d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root sub r5,r5,#1 675d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root b .Lenc_sbox 676d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root.align 4 677d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root.Lenc_loop: 678d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vldmia r4!, {q8-q11} 679d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q8, q8, q0 680d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q9, q9, q1 681d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vtbl.8 d0, {q8}, d24 682d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vtbl.8 d1, {q8}, d25 683d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vldmia r4!, {q8} 684d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q10, q10, q2 685d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vtbl.8 d2, {q9}, d24 686d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vtbl.8 d3, {q9}, d25 687d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vldmia r4!, {q9} 688d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q11, q11, q3 689d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vtbl.8 d4, {q10}, d24 690d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vtbl.8 d5, {q10}, d25 691d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vldmia r4!, {q10} 692d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vtbl.8 d6, {q11}, d24 693d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vtbl.8 d7, {q11}, d25 694d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vldmia r4!, {q11} 695d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q8, q8, q4 696d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q9, q9, q5 697d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vtbl.8 d8, {q8}, d24 698d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vtbl.8 d9, {q8}, d25 699d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q10, q10, q6 700d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vtbl.8 d10, {q9}, d24 701d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vtbl.8 d11, {q9}, d25 702d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q11, q11, q7 703d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vtbl.8 d12, {q10}, d24 704d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vtbl.8 d13, {q10}, d25 705d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vtbl.8 d14, {q11}, d24 706d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vtbl.8 d15, {q11}, d25 707d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root.Lenc_sbox: 708d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q2, q2, q1 709d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q5, q5, q6 710d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q3, q3, q0 711d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q6, q6, q2 712d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q5, q5, q0 713d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root 714d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q6, q6, q3 715d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q3, q3, q7 716d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q7, q7, q5 717d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q3, q3, q4 718d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q4, q4, q5 719d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root 720d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q2, q2, q7 721d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q3, q3, q1 722d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q1, q1, q5 723d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q11, q7, q4 724d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q10, q1, q2 725d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q9, q5, q3 726d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q13, q2, q4 727d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vmov q8, q10 728d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q12, q6, q0 729d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root 730d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vorr q10, q10, q9 731d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q15, q11, q8 732d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vand q14, q11, q12 733d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vorr q11, q11, q12 734d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q12, q12, q9 735d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vand q8, q8, q9 736d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q9, q3, q0 737d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vand q15, q15, q12 738d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vand q13, q13, q9 739d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q9, q7, q1 740d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q12, q5, q6 741d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q11, q11, q13 742d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q10, q10, q13 743d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vand q13, q9, q12 744d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vorr q9, q9, q12 745d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q11, q11, q15 746d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q8, q8, q13 747d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q10, q10, q14 748d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q9, q9, q15 749d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q8, q8, q14 750d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vand q12, q2, q3 751d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q9, q9, q14 752d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vand q13, q4, q0 753d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vand q14, q1, q5 754d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vorr q15, q7, q6 755d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q11, q11, q12 756d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q9, q9, q14 757d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q8, q8, q15 758d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q10, q10, q13 759d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root 760d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root @ Inv_GF16 0, 1, 2, 3, s0, s1, s2, s3 761d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root 762d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root @ new smaller inversion 763d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root 764d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vand q14, q11, q9 765d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vmov q12, q8 766d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root 767d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q13, q10, q14 768d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q15, q8, q14 769d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q14, q8, q14 @ q14=q15 770d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root 771d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vbsl q13, q9, q8 772d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vbsl q15, q11, q10 773d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q11, q11, q10 774d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root 775d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vbsl q12, q13, q14 776d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vbsl q8, q14, q13 777d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root 778d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vand q14, q12, q15 779d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q9, q9, q8 780d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root 781d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q14, q14, q11 782d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q12, q6, q0 783d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q8, q5, q3 784d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q10, q15, q14 785d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vand q10, q10, q6 786d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q6, q6, q5 787d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vand q11, q5, q15 788d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vand q6, q6, q14 789d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q5, q11, q10 790d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q6, q6, q11 791d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q15, q15, q13 792d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q14, q14, q9 793d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q11, q15, q14 794d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q10, q13, q9 795d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vand q11, q11, q12 796d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vand q10, q10, q0 797d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q12, q12, q8 798d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q0, q0, q3 799d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vand q8, q8, q15 800d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vand q3, q3, q13 801d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vand q12, q12, q14 802d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vand q0, q0, q9 803d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q8, q8, q12 804d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q0, q0, q3 805d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q12, q12, q11 806d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q3, q3, q10 807d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q6, q6, q12 808d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q0, q0, q12 809d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q5, q5, q8 810d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q3, q3, q8 811d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root 812d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q12, q7, q4 813d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q8, q1, q2 814d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q11, q15, q14 815d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q10, q13, q9 816d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vand q11, q11, q12 817d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vand q10, q10, q4 818d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q12, q12, q8 819d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q4, q4, q2 820d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vand q8, q8, q15 821d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vand q2, q2, q13 822d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vand q12, q12, q14 823d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vand q4, q4, q9 824d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q8, q8, q12 825d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q4, q4, q2 826d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q12, q12, q11 827d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q2, q2, q10 828d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q15, q15, q13 829d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q14, q14, q9 830d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q10, q15, q14 831d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vand q10, q10, q7 832d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q7, q7, q1 833d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vand q11, q1, q15 834d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vand q7, q7, q14 835d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q1, q11, q10 836d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q7, q7, q11 837d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q7, q7, q12 838d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q4, q4, q12 839d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q1, q1, q8 840d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q2, q2, q8 841d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q7, q7, q0 842d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q1, q1, q6 843d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q6, q6, q0 844d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q4, q4, q7 845d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q0, q0, q1 846d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root 847d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q1, q1, q5 848d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q5, q5, q2 849d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q2, q2, q3 850d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q3, q3, q5 851d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q4, q4, q5 852d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root 853d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q6, q6, q3 854d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root subs r5,r5,#1 855d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root bcc .Lenc_done 856d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vext.8 q8, q0, q0, #12 @ x0 <<< 32 857d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vext.8 q9, q1, q1, #12 858d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q0, q0, q8 @ x0 ^ (x0 <<< 32) 859d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vext.8 q10, q4, q4, #12 860d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q1, q1, q9 861d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vext.8 q11, q6, q6, #12 862d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q4, q4, q10 863d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vext.8 q12, q3, q3, #12 864d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q6, q6, q11 865d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vext.8 q13, q7, q7, #12 866d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q3, q3, q12 867d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vext.8 q14, q2, q2, #12 868d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q7, q7, q13 869d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vext.8 q15, q5, q5, #12 870d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q2, q2, q14 871d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root 872d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q9, q9, q0 873d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q5, q5, q15 874d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vext.8 q0, q0, q0, #8 @ (x0 ^ (x0 <<< 32)) <<< 64) 875d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q10, q10, q1 876d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q8, q8, q5 877d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q9, q9, q5 878d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vext.8 q1, q1, q1, #8 879d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q13, q13, q3 880d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q0, q0, q8 881d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q14, q14, q7 882d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q1, q1, q9 883d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vext.8 q8, q3, q3, #8 884d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q12, q12, q6 885d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vext.8 q9, q7, q7, #8 886d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q15, q15, q2 887d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vext.8 q3, q6, q6, #8 888d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q11, q11, q4 889d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vext.8 q7, q5, q5, #8 890d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q12, q12, q5 891d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vext.8 q6, q2, q2, #8 892d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q11, q11, q5 893d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vext.8 q2, q4, q4, #8 894d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q5, q9, q13 895d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q4, q8, q12 896d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q3, q3, q11 897d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q7, q7, q15 898d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q6, q6, q14 899d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root @ vmov q4, q8 900d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q2, q2, q10 901d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root @ vmov q5, q9 902d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vldmia r6, {q12} @ .LSR 903d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root ite eq @ Thumb2 thing, samity check in ARM 904d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root addeq r6,r6,#0x10 905d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root bne .Lenc_loop 906d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vldmia r6, {q12} @ .LSRM0 907d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root b .Lenc_loop 908d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root.align 4 909d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root.Lenc_done: 910d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vmov.i8 q8,#0x55 @ compose .LBS0 911d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vmov.i8 q9,#0x33 @ compose .LBS1 912d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vshr.u64 q10, q2, #1 913d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vshr.u64 q11, q3, #1 914d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q10, q10, q5 915d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q11, q11, q7 916d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vand q10, q10, q8 917d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vand q11, q11, q8 918d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q5, q5, q10 919d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vshl.u64 q10, q10, #1 920d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q7, q7, q11 921d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vshl.u64 q11, q11, #1 922d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q2, q2, q10 923d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q3, q3, q11 924d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vshr.u64 q10, q4, #1 925d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vshr.u64 q11, q0, #1 926d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q10, q10, q6 927d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q11, q11, q1 928d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vand q10, q10, q8 929d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vand q11, q11, q8 930d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q6, q6, q10 931d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vshl.u64 q10, q10, #1 932d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q1, q1, q11 933d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vshl.u64 q11, q11, #1 934d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q4, q4, q10 935d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q0, q0, q11 936d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vmov.i8 q8,#0x0f @ compose .LBS2 937d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vshr.u64 q10, q7, #2 938d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vshr.u64 q11, q3, #2 939d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q10, q10, q5 940d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q11, q11, q2 941d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vand q10, q10, q9 942d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vand q11, q11, q9 943d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q5, q5, q10 944d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vshl.u64 q10, q10, #2 945d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q2, q2, q11 946d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vshl.u64 q11, q11, #2 947d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q7, q7, q10 948d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q3, q3, q11 949d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vshr.u64 q10, q1, #2 950d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vshr.u64 q11, q0, #2 951d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q10, q10, q6 952d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q11, q11, q4 953d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vand q10, q10, q9 954d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vand q11, q11, q9 955d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q6, q6, q10 956d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vshl.u64 q10, q10, #2 957d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q4, q4, q11 958d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vshl.u64 q11, q11, #2 959d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q1, q1, q10 960d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q0, q0, q11 961d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vshr.u64 q10, q6, #4 962d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vshr.u64 q11, q4, #4 963d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q10, q10, q5 964d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q11, q11, q2 965d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vand q10, q10, q8 966d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vand q11, q11, q8 967d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q5, q5, q10 968d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vshl.u64 q10, q10, #4 969d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q2, q2, q11 970d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vshl.u64 q11, q11, #4 971d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q6, q6, q10 972d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q4, q4, q11 973d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vshr.u64 q10, q1, #4 974d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vshr.u64 q11, q0, #4 975d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q10, q10, q7 976d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q11, q11, q3 977d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vand q10, q10, q8 978d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vand q11, q11, q8 979d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q7, q7, q10 980d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vshl.u64 q10, q10, #4 981d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q3, q3, q11 982d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vshl.u64 q11, q11, #4 983d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q1, q1, q10 984d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q0, q0, q11 985d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vldmia r4, {q8} @ last round key 986d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q4, q4, q8 987d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q6, q6, q8 988d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q3, q3, q8 989d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q7, q7, q8 990d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q2, q2, q8 991d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q5, q5, q8 992d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q0, q0, q8 993d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q1, q1, q8 994d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root bx lr 995d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root.size _bsaes_encrypt8,.-_bsaes_encrypt8 996d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root.type _bsaes_key_convert,%function 997d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root.align 4 998d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root_bsaes_key_convert: 999d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root adr r6,_bsaes_key_convert 1000d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vld1.8 {q7}, [r4]! @ load round 0 key 1001d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root sub r6,r6,#_bsaes_key_convert-.LM0 1002d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vld1.8 {q15}, [r4]! @ load round 1 key 1003d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root 1004d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vmov.i8 q8, #0x01 @ bit masks 1005d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vmov.i8 q9, #0x02 1006d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vmov.i8 q10, #0x04 1007d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vmov.i8 q11, #0x08 1008d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vmov.i8 q12, #0x10 1009d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vmov.i8 q13, #0x20 1010d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vldmia r6, {q14} @ .LM0 1011d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root 1012d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root#ifdef __ARMEL__ 1013d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vrev32.8 q7, q7 1014d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vrev32.8 q15, q15 1015d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root#endif 1016d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root sub r5,r5,#1 1017d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vstmia r12!, {q7} @ save round 0 key 1018d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root b .Lkey_loop 1019d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root 1020d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root.align 4 1021d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root.Lkey_loop: 1022d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vtbl.8 d14,{q15},d28 1023d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vtbl.8 d15,{q15},d29 1024d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vmov.i8 q6, #0x40 1025d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vmov.i8 q15, #0x80 1026d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root 1027d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vtst.8 q0, q7, q8 1028d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vtst.8 q1, q7, q9 1029d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vtst.8 q2, q7, q10 1030d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vtst.8 q3, q7, q11 1031d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vtst.8 q4, q7, q12 1032d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vtst.8 q5, q7, q13 1033d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vtst.8 q6, q7, q6 1034d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vtst.8 q7, q7, q15 1035d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vld1.8 {q15}, [r4]! @ load next round key 1036d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vmvn q0, q0 @ "pnot" 1037d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vmvn q1, q1 1038d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vmvn q5, q5 1039d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vmvn q6, q6 1040d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root#ifdef __ARMEL__ 1041d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vrev32.8 q15, q15 1042d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root#endif 1043d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root subs r5,r5,#1 1044d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vstmia r12!,{q0-q7} @ write bit-sliced round key 1045d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root bne .Lkey_loop 1046d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root 1047d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vmov.i8 q7,#0x63 @ compose .L63 1048d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root @ don't save last round key 1049d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root bx lr 1050d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root.size _bsaes_key_convert,.-_bsaes_key_convert 1051d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root.extern AES_cbc_encrypt 1052d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root.extern AES_decrypt 1053d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root 1054d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root.global bsaes_cbc_encrypt 1055d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root.type bsaes_cbc_encrypt,%function 1056d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root.align 5 1057d55031a5e797d10e7106668121d18ef5608aaed9Kenny Rootbsaes_cbc_encrypt: 1058d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root#ifndef __KERNEL__ 1059d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root cmp r2, #128 1060d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root#ifndef __thumb__ 1061d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root blo AES_cbc_encrypt 1062d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root#else 1063d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root bhs 1f 1064d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root b AES_cbc_encrypt 1065d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root1: 1066d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root#endif 1067d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root#endif 1068d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root 1069d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root @ it is up to the caller to make sure we are called with enc == 0 1070d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root 1071d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root mov ip, sp 1072d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root stmdb sp!, {r4-r10, lr} 1073d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root VFP_ABI_PUSH 1074d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root ldr r8, [ip] @ IV is 1st arg on the stack 1075d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root mov r2, r2, lsr#4 @ len in 16 byte blocks 1076d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root sub sp, #0x10 @ scratch space to carry over the IV 1077d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root mov r9, sp @ save sp 1078d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root 1079d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root ldr r10, [r3, #240] @ get # of rounds 1080d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root#ifndef BSAES_ASM_EXTENDED_KEY 1081d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root @ allocate the key schedule on the stack 1082d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root sub r12, sp, r10, lsl#7 @ 128 bytes per inner round key 1083d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root add r12, #96 @ sifze of bit-slices key schedule 1084d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root 1085d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root @ populate the key schedule 1086d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root mov r4, r3 @ pass key 1087d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root mov r5, r10 @ pass # of rounds 1088d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root mov sp, r12 @ sp is sp 1089d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root bl _bsaes_key_convert 1090d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vldmia sp, {q6} 1091d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vstmia r12, {q15} @ save last round key 1092d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q7, q7, q6 @ fix up round 0 key 1093d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vstmia sp, {q7} 1094d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root#else 1095d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root ldr r12, [r3, #244] 1096d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root eors r12, #1 1097d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root beq 0f 1098d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root 1099d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root @ populate the key schedule 1100d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root str r12, [r3, #244] 1101d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root mov r4, r3 @ pass key 1102d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root mov r5, r10 @ pass # of rounds 1103d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root add r12, r3, #248 @ pass key schedule 1104d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root bl _bsaes_key_convert 1105d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root add r4, r3, #248 1106d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vldmia r4, {q6} 1107d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vstmia r12, {q15} @ save last round key 1108d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q7, q7, q6 @ fix up round 0 key 1109d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vstmia r4, {q7} 1110d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root 1111d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root.align 2 1112d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root0: 1113d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root#endif 1114d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root 1115d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vld1.8 {q15}, [r8] @ load IV 1116d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root b .Lcbc_dec_loop 1117d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root 1118d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root.align 4 1119d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root.Lcbc_dec_loop: 1120d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root subs r2, r2, #0x8 1121d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root bmi .Lcbc_dec_loop_finish 1122d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root 1123d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vld1.8 {q0-q1}, [r0]! @ load input 1124d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vld1.8 {q2-q3}, [r0]! 1125d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root#ifndef BSAES_ASM_EXTENDED_KEY 1126d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root mov r4, sp @ pass the key 1127d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root#else 1128d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root add r4, r3, #248 1129d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root#endif 1130d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vld1.8 {q4-q5}, [r0]! 1131d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root mov r5, r10 1132d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vld1.8 {q6-q7}, [r0] 1133d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root sub r0, r0, #0x60 1134d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vstmia r9, {q15} @ put aside IV 1135d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root 1136d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root bl _bsaes_decrypt8 1137d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root 1138d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vldmia r9, {q14} @ reload IV 1139d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vld1.8 {q8-q9}, [r0]! @ reload input 1140d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q0, q0, q14 @ ^= IV 1141d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vld1.8 {q10-q11}, [r0]! 1142d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q1, q1, q8 1143d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q6, q6, q9 1144d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vld1.8 {q12-q13}, [r0]! 1145d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q4, q4, q10 1146d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q2, q2, q11 1147d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vld1.8 {q14-q15}, [r0]! 1148d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q7, q7, q12 1149d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vst1.8 {q0-q1}, [r1]! @ write output 1150d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q3, q3, q13 1151d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vst1.8 {q6}, [r1]! 1152d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q5, q5, q14 1153d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vst1.8 {q4}, [r1]! 1154d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vst1.8 {q2}, [r1]! 1155d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vst1.8 {q7}, [r1]! 1156d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vst1.8 {q3}, [r1]! 1157d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vst1.8 {q5}, [r1]! 1158d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root 1159d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root b .Lcbc_dec_loop 1160d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root 1161d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root.Lcbc_dec_loop_finish: 1162d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root adds r2, r2, #8 1163d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root beq .Lcbc_dec_done 1164d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root 1165d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vld1.8 {q0}, [r0]! @ load input 1166d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root cmp r2, #2 1167d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root blo .Lcbc_dec_one 1168d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vld1.8 {q1}, [r0]! 1169d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root#ifndef BSAES_ASM_EXTENDED_KEY 1170d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root mov r4, sp @ pass the key 1171d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root#else 1172d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root add r4, r3, #248 1173d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root#endif 1174d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root mov r5, r10 1175d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vstmia r9, {q15} @ put aside IV 1176d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root beq .Lcbc_dec_two 1177d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vld1.8 {q2}, [r0]! 1178d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root cmp r2, #4 1179d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root blo .Lcbc_dec_three 1180d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vld1.8 {q3}, [r0]! 1181d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root beq .Lcbc_dec_four 1182d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vld1.8 {q4}, [r0]! 1183d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root cmp r2, #6 1184d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root blo .Lcbc_dec_five 1185d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vld1.8 {q5}, [r0]! 1186d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root beq .Lcbc_dec_six 1187d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vld1.8 {q6}, [r0]! 1188d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root sub r0, r0, #0x70 1189d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root 1190d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root bl _bsaes_decrypt8 1191d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root 1192d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vldmia r9, {q14} @ reload IV 1193d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vld1.8 {q8-q9}, [r0]! @ reload input 1194d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q0, q0, q14 @ ^= IV 1195d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vld1.8 {q10-q11}, [r0]! 1196d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q1, q1, q8 1197d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q6, q6, q9 1198d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vld1.8 {q12-q13}, [r0]! 1199d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q4, q4, q10 1200d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q2, q2, q11 1201d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vld1.8 {q15}, [r0]! 1202d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q7, q7, q12 1203d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vst1.8 {q0-q1}, [r1]! @ write output 1204d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q3, q3, q13 1205d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vst1.8 {q6}, [r1]! 1206d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vst1.8 {q4}, [r1]! 1207d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vst1.8 {q2}, [r1]! 1208d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vst1.8 {q7}, [r1]! 1209d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vst1.8 {q3}, [r1]! 1210d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root b .Lcbc_dec_done 1211d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root.align 4 1212d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root.Lcbc_dec_six: 1213d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root sub r0, r0, #0x60 1214d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root bl _bsaes_decrypt8 1215d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vldmia r9,{q14} @ reload IV 1216d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vld1.8 {q8-q9}, [r0]! @ reload input 1217d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q0, q0, q14 @ ^= IV 1218d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vld1.8 {q10-q11}, [r0]! 1219d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q1, q1, q8 1220d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q6, q6, q9 1221d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vld1.8 {q12}, [r0]! 1222d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q4, q4, q10 1223d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q2, q2, q11 1224d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vld1.8 {q15}, [r0]! 1225d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q7, q7, q12 1226d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vst1.8 {q0-q1}, [r1]! @ write output 1227d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vst1.8 {q6}, [r1]! 1228d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vst1.8 {q4}, [r1]! 1229d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vst1.8 {q2}, [r1]! 1230d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vst1.8 {q7}, [r1]! 1231d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root b .Lcbc_dec_done 1232d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root.align 4 1233d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root.Lcbc_dec_five: 1234d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root sub r0, r0, #0x50 1235d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root bl _bsaes_decrypt8 1236d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vldmia r9, {q14} @ reload IV 1237d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vld1.8 {q8-q9}, [r0]! @ reload input 1238d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q0, q0, q14 @ ^= IV 1239d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vld1.8 {q10-q11}, [r0]! 1240d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q1, q1, q8 1241d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q6, q6, q9 1242d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vld1.8 {q15}, [r0]! 1243d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q4, q4, q10 1244d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vst1.8 {q0-q1}, [r1]! @ write output 1245d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q2, q2, q11 1246d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vst1.8 {q6}, [r1]! 1247d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vst1.8 {q4}, [r1]! 1248d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vst1.8 {q2}, [r1]! 1249d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root b .Lcbc_dec_done 1250d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root.align 4 1251d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root.Lcbc_dec_four: 1252d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root sub r0, r0, #0x40 1253d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root bl _bsaes_decrypt8 1254d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vldmia r9, {q14} @ reload IV 1255d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vld1.8 {q8-q9}, [r0]! @ reload input 1256d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q0, q0, q14 @ ^= IV 1257d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vld1.8 {q10}, [r0]! 1258d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q1, q1, q8 1259d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q6, q6, q9 1260d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vld1.8 {q15}, [r0]! 1261d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q4, q4, q10 1262d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vst1.8 {q0-q1}, [r1]! @ write output 1263d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vst1.8 {q6}, [r1]! 1264d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vst1.8 {q4}, [r1]! 1265d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root b .Lcbc_dec_done 1266d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root.align 4 1267d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root.Lcbc_dec_three: 1268d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root sub r0, r0, #0x30 1269d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root bl _bsaes_decrypt8 1270d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vldmia r9, {q14} @ reload IV 1271d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vld1.8 {q8-q9}, [r0]! @ reload input 1272d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q0, q0, q14 @ ^= IV 1273d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vld1.8 {q15}, [r0]! 1274d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q1, q1, q8 1275d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q6, q6, q9 1276d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vst1.8 {q0-q1}, [r1]! @ write output 1277d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vst1.8 {q6}, [r1]! 1278d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root b .Lcbc_dec_done 1279d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root.align 4 1280d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root.Lcbc_dec_two: 1281d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root sub r0, r0, #0x20 1282d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root bl _bsaes_decrypt8 1283d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vldmia r9, {q14} @ reload IV 1284d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vld1.8 {q8}, [r0]! @ reload input 1285d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q0, q0, q14 @ ^= IV 1286d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vld1.8 {q15}, [r0]! @ reload input 1287d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q1, q1, q8 1288d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vst1.8 {q0-q1}, [r1]! @ write output 1289d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root b .Lcbc_dec_done 1290d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root.align 4 1291d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root.Lcbc_dec_one: 1292d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root sub r0, r0, #0x10 1293d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root mov r10, r1 @ save original out pointer 1294d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root mov r1, r9 @ use the iv scratch space as out buffer 1295d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root mov r2, r3 1296d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vmov q4,q15 @ just in case ensure that IV 1297d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vmov q5,q0 @ and input are preserved 1298d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root bl AES_decrypt 1299d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vld1.8 {q0}, [r9,:64] @ load result 1300d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q0, q0, q4 @ ^= IV 1301d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vmov q15, q5 @ q5 holds input 1302d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vst1.8 {q0}, [r10] @ write output 1303d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root 1304d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root.Lcbc_dec_done: 1305d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root#ifndef BSAES_ASM_EXTENDED_KEY 1306d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vmov.i32 q0, #0 1307d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vmov.i32 q1, #0 1308d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root.Lcbc_dec_bzero: @ wipe key schedule [if any] 1309d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vstmia sp!, {q0-q1} 1310d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root cmp sp, r9 1311d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root bne .Lcbc_dec_bzero 1312d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root#endif 1313d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root 1314d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root mov sp, r9 1315d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root add sp, #0x10 @ add sp,r9,#0x10 is no good for thumb 1316d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vst1.8 {q15}, [r8] @ return IV 1317d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root VFP_ABI_POP 1318d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root ldmia sp!, {r4-r10, pc} 1319d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root.size bsaes_cbc_encrypt,.-bsaes_cbc_encrypt 1320d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root.extern AES_encrypt 1321d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root.global bsaes_ctr32_encrypt_blocks 1322d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root.type bsaes_ctr32_encrypt_blocks,%function 1323d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root.align 5 1324d55031a5e797d10e7106668121d18ef5608aaed9Kenny Rootbsaes_ctr32_encrypt_blocks: 1325d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root cmp r2, #8 @ use plain AES for 1326d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root blo .Lctr_enc_short @ small sizes 1327d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root 1328d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root mov ip, sp 1329d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root stmdb sp!, {r4-r10, lr} 1330d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root VFP_ABI_PUSH 1331d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root ldr r8, [ip] @ ctr is 1st arg on the stack 1332d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root sub sp, sp, #0x10 @ scratch space to carry over the ctr 1333d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root mov r9, sp @ save sp 1334d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root 1335d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root ldr r10, [r3, #240] @ get # of rounds 1336d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root#ifndef BSAES_ASM_EXTENDED_KEY 1337d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root @ allocate the key schedule on the stack 1338d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root sub r12, sp, r10, lsl#7 @ 128 bytes per inner round key 1339d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root add r12, #96 @ size of bit-sliced key schedule 1340d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root 1341d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root @ populate the key schedule 1342d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root mov r4, r3 @ pass key 1343d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root mov r5, r10 @ pass # of rounds 1344d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root mov sp, r12 @ sp is sp 1345d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root bl _bsaes_key_convert 1346d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q7,q7,q15 @ fix up last round key 1347d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vstmia r12, {q7} @ save last round key 1348d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root 1349d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vld1.8 {q0}, [r8] @ load counter 1350d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root add r8, r6, #.LREVM0SR-.LM0 @ borrow r8 1351d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vldmia sp, {q4} @ load round0 key 1352d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root#else 1353d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root ldr r12, [r3, #244] 1354d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root eors r12, #1 1355d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root beq 0f 1356d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root 1357d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root @ populate the key schedule 1358d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root str r12, [r3, #244] 1359d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root mov r4, r3 @ pass key 1360d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root mov r5, r10 @ pass # of rounds 1361d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root add r12, r3, #248 @ pass key schedule 1362d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root bl _bsaes_key_convert 1363d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q7,q7,q15 @ fix up last round key 1364d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vstmia r12, {q7} @ save last round key 1365d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root 1366d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root.align 2 1367d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root0: add r12, r3, #248 1368d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vld1.8 {q0}, [r8] @ load counter 1369d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root adrl r8, .LREVM0SR @ borrow r8 1370d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vldmia r12, {q4} @ load round0 key 1371d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root sub sp, #0x10 @ place for adjusted round0 key 1372d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root#endif 1373d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root 1374d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vmov.i32 q8,#1 @ compose 1<<96 1375d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q9,q9,q9 1376d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vrev32.8 q0,q0 1377d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vext.8 q8,q9,q8,#4 1378d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vrev32.8 q4,q4 1379d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vadd.u32 q9,q8,q8 @ compose 2<<96 1380d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vstmia sp, {q4} @ save adjusted round0 key 1381d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root b .Lctr_enc_loop 1382d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root 1383d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root.align 4 1384d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root.Lctr_enc_loop: 1385d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vadd.u32 q10, q8, q9 @ compose 3<<96 1386d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vadd.u32 q1, q0, q8 @ +1 1387d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vadd.u32 q2, q0, q9 @ +2 1388d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vadd.u32 q3, q0, q10 @ +3 1389d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vadd.u32 q4, q1, q10 1390d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vadd.u32 q5, q2, q10 1391d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vadd.u32 q6, q3, q10 1392d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vadd.u32 q7, q4, q10 1393d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vadd.u32 q10, q5, q10 @ next counter 1394d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root 1395d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root @ Borrow prologue from _bsaes_encrypt8 to use the opportunity 1396d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root @ to flip byte order in 32-bit counter 1397d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root 1398d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vldmia sp, {q9} @ load round0 key 1399d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root#ifndef BSAES_ASM_EXTENDED_KEY 1400d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root add r4, sp, #0x10 @ pass next round key 1401d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root#else 1402d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root add r4, r3, #264 1403d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root#endif 1404d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vldmia r8, {q8} @ .LREVM0SR 1405d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root mov r5, r10 @ pass rounds 1406d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vstmia r9, {q10} @ save next counter 1407d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root sub r6, r8, #.LREVM0SR-.LSR @ pass constants 1408d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root 1409d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root bl _bsaes_encrypt8_alt 1410d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root 1411d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root subs r2, r2, #8 1412d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root blo .Lctr_enc_loop_done 1413d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root 1414d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vld1.8 {q8-q9}, [r0]! @ load input 1415d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vld1.8 {q10-q11}, [r0]! 1416d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q0, q8 1417d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q1, q9 1418d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vld1.8 {q12-q13}, [r0]! 1419d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q4, q10 1420d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q6, q11 1421d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vld1.8 {q14-q15}, [r0]! 1422d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q3, q12 1423d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vst1.8 {q0-q1}, [r1]! @ write output 1424d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q7, q13 1425d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q2, q14 1426d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vst1.8 {q4}, [r1]! 1427d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q5, q15 1428d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vst1.8 {q6}, [r1]! 1429d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vmov.i32 q8, #1 @ compose 1<<96 1430d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vst1.8 {q3}, [r1]! 1431d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q9, q9, q9 1432d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vst1.8 {q7}, [r1]! 1433d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vext.8 q8, q9, q8, #4 1434d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vst1.8 {q2}, [r1]! 1435d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vadd.u32 q9,q8,q8 @ compose 2<<96 1436d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vst1.8 {q5}, [r1]! 1437d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vldmia r9, {q0} @ load counter 1438d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root 1439d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root bne .Lctr_enc_loop 1440d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root b .Lctr_enc_done 1441d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root 1442d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root.align 4 1443d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root.Lctr_enc_loop_done: 1444d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root add r2, r2, #8 1445d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vld1.8 {q8}, [r0]! @ load input 1446d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q0, q8 1447d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vst1.8 {q0}, [r1]! @ write output 1448d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root cmp r2, #2 1449d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root blo .Lctr_enc_done 1450d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vld1.8 {q9}, [r0]! 1451d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q1, q9 1452d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vst1.8 {q1}, [r1]! 1453d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root beq .Lctr_enc_done 1454d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vld1.8 {q10}, [r0]! 1455d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q4, q10 1456d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vst1.8 {q4}, [r1]! 1457d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root cmp r2, #4 1458d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root blo .Lctr_enc_done 1459d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vld1.8 {q11}, [r0]! 1460d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q6, q11 1461d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vst1.8 {q6}, [r1]! 1462d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root beq .Lctr_enc_done 1463d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vld1.8 {q12}, [r0]! 1464d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q3, q12 1465d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vst1.8 {q3}, [r1]! 1466d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root cmp r2, #6 1467d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root blo .Lctr_enc_done 1468d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vld1.8 {q13}, [r0]! 1469d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q7, q13 1470d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vst1.8 {q7}, [r1]! 1471d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root beq .Lctr_enc_done 1472d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vld1.8 {q14}, [r0] 1473d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q2, q14 1474d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vst1.8 {q2}, [r1]! 1475d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root 1476d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root.Lctr_enc_done: 1477d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vmov.i32 q0, #0 1478d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vmov.i32 q1, #0 1479d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root#ifndef BSAES_ASM_EXTENDED_KEY 1480d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root.Lctr_enc_bzero: @ wipe key schedule [if any] 1481d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vstmia sp!, {q0-q1} 1482d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root cmp sp, r9 1483d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root bne .Lctr_enc_bzero 1484d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root#else 1485d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vstmia sp, {q0-q1} 1486d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root#endif 1487d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root 1488d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root mov sp, r9 1489d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root add sp, #0x10 @ add sp,r9,#0x10 is no good for thumb 1490d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root VFP_ABI_POP 1491d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root ldmia sp!, {r4-r10, pc} @ return 1492d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root 1493d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root.align 4 1494d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root.Lctr_enc_short: 1495d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root ldr ip, [sp] @ ctr pointer is passed on stack 1496d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root stmdb sp!, {r4-r8, lr} 1497d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root 1498d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root mov r4, r0 @ copy arguments 1499d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root mov r5, r1 1500d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root mov r6, r2 1501d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root mov r7, r3 1502d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root ldr r8, [ip, #12] @ load counter LSW 1503d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vld1.8 {q1}, [ip] @ load whole counter value 1504d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root#ifdef __ARMEL__ 1505d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root rev r8, r8 1506d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root#endif 1507d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root sub sp, sp, #0x10 1508d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vst1.8 {q1}, [sp,:64] @ copy counter value 1509d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root sub sp, sp, #0x10 1510d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root 1511d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root.Lctr_enc_short_loop: 1512d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root add r0, sp, #0x10 @ input counter value 1513d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root mov r1, sp @ output on the stack 1514d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root mov r2, r7 @ key 1515d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root 1516d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root bl AES_encrypt 1517d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root 1518d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vld1.8 {q0}, [r4]! @ load input 1519d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vld1.8 {q1}, [sp,:64] @ load encrypted counter 1520d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root add r8, r8, #1 1521d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root#ifdef __ARMEL__ 1522d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root rev r0, r8 1523d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root str r0, [sp, #0x1c] @ next counter value 1524d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root#else 1525d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root str r8, [sp, #0x1c] @ next counter value 1526d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root#endif 1527d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q0,q0,q1 1528d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vst1.8 {q0}, [r5]! @ store output 1529d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root subs r6, r6, #1 1530d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root bne .Lctr_enc_short_loop 1531d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root 1532d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vmov.i32 q0, #0 1533d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vmov.i32 q1, #0 1534d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vstmia sp!, {q0-q1} 1535d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root 1536d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root ldmia sp!, {r4-r8, pc} 1537d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root.size bsaes_ctr32_encrypt_blocks,.-bsaes_ctr32_encrypt_blocks 1538d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root.globl bsaes_xts_encrypt 1539d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root.type bsaes_xts_encrypt,%function 1540d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root.align 4 1541d55031a5e797d10e7106668121d18ef5608aaed9Kenny Rootbsaes_xts_encrypt: 1542d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root mov ip, sp 1543d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root stmdb sp!, {r4-r10, lr} @ 0x20 1544d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root VFP_ABI_PUSH 1545d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root mov r6, sp @ future r3 1546d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root 1547d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root mov r7, r0 1548d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root mov r8, r1 1549d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root mov r9, r2 1550d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root mov r10, r3 1551d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root 1552d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root sub r0, sp, #0x10 @ 0x10 1553d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root bic r0, #0xf @ align at 16 bytes 1554d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root mov sp, r0 1555d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root 1556d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root#ifdef XTS_CHAIN_TWEAK 1557d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root ldr r0, [ip] @ pointer to input tweak 1558d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root#else 1559d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root @ generate initial tweak 1560d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root ldr r0, [ip, #4] @ iv[] 1561d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root mov r1, sp 1562d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root ldr r2, [ip, #0] @ key2 1563d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root bl AES_encrypt 1564d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root mov r0,sp @ pointer to initial tweak 1565d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root#endif 1566d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root 1567d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root ldr r1, [r10, #240] @ get # of rounds 1568d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root mov r3, r6 1569d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root#ifndef BSAES_ASM_EXTENDED_KEY 1570d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root @ allocate the key schedule on the stack 1571d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root sub r12, sp, r1, lsl#7 @ 128 bytes per inner round key 1572d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root @ add r12, #96 @ size of bit-sliced key schedule 1573d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root sub r12, #48 @ place for tweak[9] 1574d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root 1575d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root @ populate the key schedule 1576d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root mov r4, r10 @ pass key 1577d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root mov r5, r1 @ pass # of rounds 1578d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root mov sp, r12 1579d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root add r12, #0x90 @ pass key schedule 1580d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root bl _bsaes_key_convert 1581d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q7, q7, q15 @ fix up last round key 1582d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vstmia r12, {q7} @ save last round key 1583d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root#else 1584d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root ldr r12, [r10, #244] 1585d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root eors r12, #1 1586d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root beq 0f 1587d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root 1588d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root str r12, [r10, #244] 1589d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root mov r4, r10 @ pass key 1590d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root mov r5, r1 @ pass # of rounds 1591d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root add r12, r10, #248 @ pass key schedule 1592d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root bl _bsaes_key_convert 1593d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q7, q7, q15 @ fix up last round key 1594d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vstmia r12, {q7} 1595d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root 1596d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root.align 2 1597d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root0: sub sp, #0x90 @ place for tweak[9] 1598d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root#endif 1599d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root 1600d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vld1.8 {q8}, [r0] @ initial tweak 1601d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root adr r2, .Lxts_magic 1602d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root 1603d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root subs r9, #0x80 1604d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root blo .Lxts_enc_short 1605d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root b .Lxts_enc_loop 1606d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root 1607d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root.align 4 1608d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root.Lxts_enc_loop: 1609d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vldmia r2, {q5} @ load XTS magic 1610d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vshr.s64 q6, q8, #63 1611d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root mov r0, sp 1612d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vand q6, q6, q5 1613d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vadd.u64 q9, q8, q8 1614d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vst1.64 {q8}, [r0,:128]! 1615d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vswp d13,d12 1616d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vshr.s64 q7, q9, #63 1617d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q9, q9, q6 1618d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vand q7, q7, q5 1619d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vadd.u64 q10, q9, q9 1620d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vst1.64 {q9}, [r0,:128]! 1621d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vswp d15,d14 1622d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vshr.s64 q6, q10, #63 1623d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q10, q10, q7 1624d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vand q6, q6, q5 1625d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vld1.8 {q0}, [r7]! 1626d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vadd.u64 q11, q10, q10 1627d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vst1.64 {q10}, [r0,:128]! 1628d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vswp d13,d12 1629d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vshr.s64 q7, q11, #63 1630d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q11, q11, q6 1631d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vand q7, q7, q5 1632d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vld1.8 {q1}, [r7]! 1633d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q0, q0, q8 1634d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vadd.u64 q12, q11, q11 1635d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vst1.64 {q11}, [r0,:128]! 1636d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vswp d15,d14 1637d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vshr.s64 q6, q12, #63 1638d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q12, q12, q7 1639d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vand q6, q6, q5 1640d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vld1.8 {q2}, [r7]! 1641d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q1, q1, q9 1642d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vadd.u64 q13, q12, q12 1643d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vst1.64 {q12}, [r0,:128]! 1644d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vswp d13,d12 1645d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vshr.s64 q7, q13, #63 1646d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q13, q13, q6 1647d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vand q7, q7, q5 1648d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vld1.8 {q3}, [r7]! 1649d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q2, q2, q10 1650d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vadd.u64 q14, q13, q13 1651d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vst1.64 {q13}, [r0,:128]! 1652d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vswp d15,d14 1653d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vshr.s64 q6, q14, #63 1654d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q14, q14, q7 1655d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vand q6, q6, q5 1656d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vld1.8 {q4}, [r7]! 1657d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q3, q3, q11 1658d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vadd.u64 q15, q14, q14 1659d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vst1.64 {q14}, [r0,:128]! 1660d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vswp d13,d12 1661d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vshr.s64 q7, q15, #63 1662d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q15, q15, q6 1663d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vand q7, q7, q5 1664d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vld1.8 {q5}, [r7]! 1665d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q4, q4, q12 1666d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vadd.u64 q8, q15, q15 1667d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vst1.64 {q15}, [r0,:128]! 1668d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vswp d15,d14 1669d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q8, q8, q7 1670d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vst1.64 {q8}, [r0,:128] @ next round tweak 1671d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root 1672d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vld1.8 {q6-q7}, [r7]! 1673d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q5, q5, q13 1674d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root#ifndef BSAES_ASM_EXTENDED_KEY 1675d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root add r4, sp, #0x90 @ pass key schedule 1676d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root#else 1677d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root add r4, r10, #248 @ pass key schedule 1678d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root#endif 1679d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q6, q6, q14 1680d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root mov r5, r1 @ pass rounds 1681d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q7, q7, q15 1682d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root mov r0, sp 1683d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root 1684d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root bl _bsaes_encrypt8 1685d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root 1686d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vld1.64 {q8-q9}, [r0,:128]! 1687d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vld1.64 {q10-q11}, [r0,:128]! 1688d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q0, q0, q8 1689d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vld1.64 {q12-q13}, [r0,:128]! 1690d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q1, q1, q9 1691d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q8, q4, q10 1692d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vst1.8 {q0-q1}, [r8]! 1693d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q9, q6, q11 1694d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vld1.64 {q14-q15}, [r0,:128]! 1695d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q10, q3, q12 1696d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vst1.8 {q8-q9}, [r8]! 1697d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q11, q7, q13 1698d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q12, q2, q14 1699d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vst1.8 {q10-q11}, [r8]! 1700d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q13, q5, q15 1701d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vst1.8 {q12-q13}, [r8]! 1702d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root 1703d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vld1.64 {q8}, [r0,:128] @ next round tweak 1704d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root 1705d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root subs r9, #0x80 1706d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root bpl .Lxts_enc_loop 1707d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root 1708d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root.Lxts_enc_short: 1709d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root adds r9, #0x70 1710d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root bmi .Lxts_enc_done 1711d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root 1712d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vldmia r2, {q5} @ load XTS magic 1713d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vshr.s64 q7, q8, #63 1714d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root mov r0, sp 1715d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vand q7, q7, q5 1716d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vadd.u64 q9, q8, q8 1717d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vst1.64 {q8}, [r0,:128]! 1718d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vswp d15,d14 1719d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vshr.s64 q6, q9, #63 1720d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q9, q9, q7 1721d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vand q6, q6, q5 1722d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vadd.u64 q10, q9, q9 1723d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vst1.64 {q9}, [r0,:128]! 1724d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vswp d13,d12 1725d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vshr.s64 q7, q10, #63 1726d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q10, q10, q6 1727d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vand q7, q7, q5 1728d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vld1.8 {q0}, [r7]! 1729d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root subs r9, #0x10 1730d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root bmi .Lxts_enc_1 1731d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vadd.u64 q11, q10, q10 1732d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vst1.64 {q10}, [r0,:128]! 1733d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vswp d15,d14 1734d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vshr.s64 q6, q11, #63 1735d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q11, q11, q7 1736d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vand q6, q6, q5 1737d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vld1.8 {q1}, [r7]! 1738d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root subs r9, #0x10 1739d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root bmi .Lxts_enc_2 1740d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q0, q0, q8 1741d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vadd.u64 q12, q11, q11 1742d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vst1.64 {q11}, [r0,:128]! 1743d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vswp d13,d12 1744d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vshr.s64 q7, q12, #63 1745d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q12, q12, q6 1746d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vand q7, q7, q5 1747d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vld1.8 {q2}, [r7]! 1748d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root subs r9, #0x10 1749d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root bmi .Lxts_enc_3 1750d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q1, q1, q9 1751d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vadd.u64 q13, q12, q12 1752d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vst1.64 {q12}, [r0,:128]! 1753d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vswp d15,d14 1754d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vshr.s64 q6, q13, #63 1755d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q13, q13, q7 1756d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vand q6, q6, q5 1757d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vld1.8 {q3}, [r7]! 1758d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root subs r9, #0x10 1759d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root bmi .Lxts_enc_4 1760d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q2, q2, q10 1761d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vadd.u64 q14, q13, q13 1762d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vst1.64 {q13}, [r0,:128]! 1763d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vswp d13,d12 1764d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vshr.s64 q7, q14, #63 1765d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q14, q14, q6 1766d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vand q7, q7, q5 1767d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vld1.8 {q4}, [r7]! 1768d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root subs r9, #0x10 1769d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root bmi .Lxts_enc_5 1770d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q3, q3, q11 1771d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vadd.u64 q15, q14, q14 1772d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vst1.64 {q14}, [r0,:128]! 1773d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vswp d15,d14 1774d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vshr.s64 q6, q15, #63 1775d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q15, q15, q7 1776d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vand q6, q6, q5 1777d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vld1.8 {q5}, [r7]! 1778d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root subs r9, #0x10 1779d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root bmi .Lxts_enc_6 1780d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q4, q4, q12 1781d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root sub r9, #0x10 1782d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vst1.64 {q15}, [r0,:128] @ next round tweak 1783d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root 1784d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vld1.8 {q6}, [r7]! 1785d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q5, q5, q13 1786d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root#ifndef BSAES_ASM_EXTENDED_KEY 1787d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root add r4, sp, #0x90 @ pass key schedule 1788d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root#else 1789d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root add r4, r10, #248 @ pass key schedule 1790d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root#endif 1791d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q6, q6, q14 1792d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root mov r5, r1 @ pass rounds 1793d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root mov r0, sp 1794d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root 1795d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root bl _bsaes_encrypt8 1796d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root 1797d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vld1.64 {q8-q9}, [r0,:128]! 1798d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vld1.64 {q10-q11}, [r0,:128]! 1799d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q0, q0, q8 1800d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vld1.64 {q12-q13}, [r0,:128]! 1801d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q1, q1, q9 1802d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q8, q4, q10 1803d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vst1.8 {q0-q1}, [r8]! 1804d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q9, q6, q11 1805d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vld1.64 {q14}, [r0,:128]! 1806d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q10, q3, q12 1807d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vst1.8 {q8-q9}, [r8]! 1808d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q11, q7, q13 1809d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q12, q2, q14 1810d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vst1.8 {q10-q11}, [r8]! 1811d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vst1.8 {q12}, [r8]! 1812d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root 1813d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vld1.64 {q8}, [r0,:128] @ next round tweak 1814d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root b .Lxts_enc_done 1815d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root.align 4 1816d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root.Lxts_enc_6: 1817d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vst1.64 {q14}, [r0,:128] @ next round tweak 1818d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root 1819d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q4, q4, q12 1820d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root#ifndef BSAES_ASM_EXTENDED_KEY 1821d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root add r4, sp, #0x90 @ pass key schedule 1822d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root#else 1823d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root add r4, r10, #248 @ pass key schedule 1824d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root#endif 1825d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q5, q5, q13 1826d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root mov r5, r1 @ pass rounds 1827d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root mov r0, sp 1828d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root 1829d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root bl _bsaes_encrypt8 1830d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root 1831d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vld1.64 {q8-q9}, [r0,:128]! 1832d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vld1.64 {q10-q11}, [r0,:128]! 1833d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q0, q0, q8 1834d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vld1.64 {q12-q13}, [r0,:128]! 1835d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q1, q1, q9 1836d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q8, q4, q10 1837d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vst1.8 {q0-q1}, [r8]! 1838d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q9, q6, q11 1839d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q10, q3, q12 1840d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vst1.8 {q8-q9}, [r8]! 1841d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q11, q7, q13 1842d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vst1.8 {q10-q11}, [r8]! 1843d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root 1844d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vld1.64 {q8}, [r0,:128] @ next round tweak 1845d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root b .Lxts_enc_done 1846d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root 1847d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root@ put this in range for both ARM and Thumb mode adr instructions 1848d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root.align 5 1849d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root.Lxts_magic: 1850d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root .quad 1, 0x87 1851d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root 1852d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root.align 5 1853d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root.Lxts_enc_5: 1854d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vst1.64 {q13}, [r0,:128] @ next round tweak 1855d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root 1856d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q3, q3, q11 1857d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root#ifndef BSAES_ASM_EXTENDED_KEY 1858d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root add r4, sp, #0x90 @ pass key schedule 1859d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root#else 1860d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root add r4, r10, #248 @ pass key schedule 1861d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root#endif 1862d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q4, q4, q12 1863d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root mov r5, r1 @ pass rounds 1864d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root mov r0, sp 1865d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root 1866d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root bl _bsaes_encrypt8 1867d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root 1868d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vld1.64 {q8-q9}, [r0,:128]! 1869d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vld1.64 {q10-q11}, [r0,:128]! 1870d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q0, q0, q8 1871d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vld1.64 {q12}, [r0,:128]! 1872d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q1, q1, q9 1873d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q8, q4, q10 1874d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vst1.8 {q0-q1}, [r8]! 1875d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q9, q6, q11 1876d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q10, q3, q12 1877d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vst1.8 {q8-q9}, [r8]! 1878d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vst1.8 {q10}, [r8]! 1879d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root 1880d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vld1.64 {q8}, [r0,:128] @ next round tweak 1881d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root b .Lxts_enc_done 1882d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root.align 4 1883d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root.Lxts_enc_4: 1884d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vst1.64 {q12}, [r0,:128] @ next round tweak 1885d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root 1886d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q2, q2, q10 1887d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root#ifndef BSAES_ASM_EXTENDED_KEY 1888d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root add r4, sp, #0x90 @ pass key schedule 1889d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root#else 1890d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root add r4, r10, #248 @ pass key schedule 1891d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root#endif 1892d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q3, q3, q11 1893d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root mov r5, r1 @ pass rounds 1894d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root mov r0, sp 1895d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root 1896d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root bl _bsaes_encrypt8 1897d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root 1898d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vld1.64 {q8-q9}, [r0,:128]! 1899d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vld1.64 {q10-q11}, [r0,:128]! 1900d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q0, q0, q8 1901d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q1, q1, q9 1902d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q8, q4, q10 1903d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vst1.8 {q0-q1}, [r8]! 1904d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q9, q6, q11 1905d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vst1.8 {q8-q9}, [r8]! 1906d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root 1907d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vld1.64 {q8}, [r0,:128] @ next round tweak 1908d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root b .Lxts_enc_done 1909d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root.align 4 1910d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root.Lxts_enc_3: 1911d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vst1.64 {q11}, [r0,:128] @ next round tweak 1912d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root 1913d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q1, q1, q9 1914d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root#ifndef BSAES_ASM_EXTENDED_KEY 1915d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root add r4, sp, #0x90 @ pass key schedule 1916d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root#else 1917d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root add r4, r10, #248 @ pass key schedule 1918d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root#endif 1919d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q2, q2, q10 1920d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root mov r5, r1 @ pass rounds 1921d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root mov r0, sp 1922d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root 1923d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root bl _bsaes_encrypt8 1924d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root 1925d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vld1.64 {q8-q9}, [r0,:128]! 1926d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vld1.64 {q10}, [r0,:128]! 1927d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q0, q0, q8 1928d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q1, q1, q9 1929d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q8, q4, q10 1930d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vst1.8 {q0-q1}, [r8]! 1931d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vst1.8 {q8}, [r8]! 1932d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root 1933d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vld1.64 {q8}, [r0,:128] @ next round tweak 1934d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root b .Lxts_enc_done 1935d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root.align 4 1936d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root.Lxts_enc_2: 1937d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vst1.64 {q10}, [r0,:128] @ next round tweak 1938d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root 1939d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q0, q0, q8 1940d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root#ifndef BSAES_ASM_EXTENDED_KEY 1941d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root add r4, sp, #0x90 @ pass key schedule 1942d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root#else 1943d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root add r4, r10, #248 @ pass key schedule 1944d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root#endif 1945d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q1, q1, q9 1946d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root mov r5, r1 @ pass rounds 1947d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root mov r0, sp 1948d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root 1949d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root bl _bsaes_encrypt8 1950d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root 1951d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vld1.64 {q8-q9}, [r0,:128]! 1952d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q0, q0, q8 1953d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q1, q1, q9 1954d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vst1.8 {q0-q1}, [r8]! 1955d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root 1956d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vld1.64 {q8}, [r0,:128] @ next round tweak 1957d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root b .Lxts_enc_done 1958d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root.align 4 1959d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root.Lxts_enc_1: 1960d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root mov r0, sp 1961d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q0, q8 1962d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root mov r1, sp 1963d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vst1.8 {q0}, [sp,:128] 1964d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root mov r2, r10 1965d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root mov r4, r3 @ preserve fp 1966d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root 1967d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root bl AES_encrypt 1968d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root 1969d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vld1.8 {q0}, [sp,:128] 1970d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q0, q0, q8 1971d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vst1.8 {q0}, [r8]! 1972d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root mov r3, r4 1973d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root 1974d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vmov q8, q9 @ next round tweak 1975d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root 1976d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root.Lxts_enc_done: 1977d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root#ifndef XTS_CHAIN_TWEAK 1978d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root adds r9, #0x10 1979d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root beq .Lxts_enc_ret 1980d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root sub r6, r8, #0x10 1981d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root 1982d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root.Lxts_enc_steal: 1983d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root ldrb r0, [r7], #1 1984d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root ldrb r1, [r8, #-0x10] 1985d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root strb r0, [r8, #-0x10] 1986d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root strb r1, [r8], #1 1987d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root 1988d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root subs r9, #1 1989d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root bhi .Lxts_enc_steal 1990d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root 1991d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vld1.8 {q0}, [r6] 1992d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root mov r0, sp 1993d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q0, q0, q8 1994d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root mov r1, sp 1995d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vst1.8 {q0}, [sp,:128] 1996d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root mov r2, r10 1997d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root mov r4, r3 @ preserve fp 1998d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root 1999d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root bl AES_encrypt 2000d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root 2001d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vld1.8 {q0}, [sp,:128] 2002d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q0, q0, q8 2003d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vst1.8 {q0}, [r6] 2004d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root mov r3, r4 2005d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root#endif 2006d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root 2007d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root.Lxts_enc_ret: 2008d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root bic r0, r3, #0xf 2009d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vmov.i32 q0, #0 2010d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vmov.i32 q1, #0 2011d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root#ifdef XTS_CHAIN_TWEAK 2012d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root ldr r1, [r3, #0x20+VFP_ABI_FRAME] @ chain tweak 2013d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root#endif 2014d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root.Lxts_enc_bzero: @ wipe key schedule [if any] 2015d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vstmia sp!, {q0-q1} 2016d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root cmp sp, r0 2017d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root bne .Lxts_enc_bzero 2018d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root 2019d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root mov sp, r3 2020d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root#ifdef XTS_CHAIN_TWEAK 2021d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vst1.8 {q8}, [r1] 2022d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root#endif 2023d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root VFP_ABI_POP 2024d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root ldmia sp!, {r4-r10, pc} @ return 2025d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root 2026d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root.size bsaes_xts_encrypt,.-bsaes_xts_encrypt 2027d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root 2028d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root.globl bsaes_xts_decrypt 2029d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root.type bsaes_xts_decrypt,%function 2030d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root.align 4 2031d55031a5e797d10e7106668121d18ef5608aaed9Kenny Rootbsaes_xts_decrypt: 2032d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root mov ip, sp 2033d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root stmdb sp!, {r4-r10, lr} @ 0x20 2034d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root VFP_ABI_PUSH 2035d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root mov r6, sp @ future r3 2036d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root 2037d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root mov r7, r0 2038d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root mov r8, r1 2039d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root mov r9, r2 2040d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root mov r10, r3 2041d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root 2042d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root sub r0, sp, #0x10 @ 0x10 2043d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root bic r0, #0xf @ align at 16 bytes 2044d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root mov sp, r0 2045d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root 2046d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root#ifdef XTS_CHAIN_TWEAK 2047d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root ldr r0, [ip] @ pointer to input tweak 2048d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root#else 2049d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root @ generate initial tweak 2050d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root ldr r0, [ip, #4] @ iv[] 2051d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root mov r1, sp 2052d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root ldr r2, [ip, #0] @ key2 2053d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root bl AES_encrypt 2054d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root mov r0, sp @ pointer to initial tweak 2055d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root#endif 2056d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root 2057d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root ldr r1, [r10, #240] @ get # of rounds 2058d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root mov r3, r6 2059d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root#ifndef BSAES_ASM_EXTENDED_KEY 2060d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root @ allocate the key schedule on the stack 2061d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root sub r12, sp, r1, lsl#7 @ 128 bytes per inner round key 2062d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root @ add r12, #96 @ size of bit-sliced key schedule 2063d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root sub r12, #48 @ place for tweak[9] 2064d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root 2065d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root @ populate the key schedule 2066d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root mov r4, r10 @ pass key 2067d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root mov r5, r1 @ pass # of rounds 2068d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root mov sp, r12 2069d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root add r12, #0x90 @ pass key schedule 2070d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root bl _bsaes_key_convert 2071d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root add r4, sp, #0x90 2072d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vldmia r4, {q6} 2073d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vstmia r12, {q15} @ save last round key 2074d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q7, q7, q6 @ fix up round 0 key 2075d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vstmia r4, {q7} 2076d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root#else 2077d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root ldr r12, [r10, #244] 2078d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root eors r12, #1 2079d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root beq 0f 2080d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root 2081d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root str r12, [r10, #244] 2082d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root mov r4, r10 @ pass key 2083d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root mov r5, r1 @ pass # of rounds 2084d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root add r12, r10, #248 @ pass key schedule 2085d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root bl _bsaes_key_convert 2086d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root add r4, r10, #248 2087d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vldmia r4, {q6} 2088d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vstmia r12, {q15} @ save last round key 2089d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q7, q7, q6 @ fix up round 0 key 2090d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vstmia r4, {q7} 2091d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root 2092d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root.align 2 2093d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root0: sub sp, #0x90 @ place for tweak[9] 2094d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root#endif 2095d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vld1.8 {q8}, [r0] @ initial tweak 2096d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root adr r2, .Lxts_magic 2097d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root 2098d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root tst r9, #0xf @ if not multiple of 16 2099d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root it ne @ Thumb2 thing, sanity check in ARM 2100d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root subne r9, #0x10 @ subtract another 16 bytes 2101d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root subs r9, #0x80 2102d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root 2103d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root blo .Lxts_dec_short 2104d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root b .Lxts_dec_loop 2105d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root 2106d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root.align 4 2107d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root.Lxts_dec_loop: 2108d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vldmia r2, {q5} @ load XTS magic 2109d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vshr.s64 q6, q8, #63 2110d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root mov r0, sp 2111d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vand q6, q6, q5 2112d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vadd.u64 q9, q8, q8 2113d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vst1.64 {q8}, [r0,:128]! 2114d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vswp d13,d12 2115d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vshr.s64 q7, q9, #63 2116d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q9, q9, q6 2117d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vand q7, q7, q5 2118d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vadd.u64 q10, q9, q9 2119d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vst1.64 {q9}, [r0,:128]! 2120d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vswp d15,d14 2121d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vshr.s64 q6, q10, #63 2122d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q10, q10, q7 2123d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vand q6, q6, q5 2124d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vld1.8 {q0}, [r7]! 2125d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vadd.u64 q11, q10, q10 2126d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vst1.64 {q10}, [r0,:128]! 2127d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vswp d13,d12 2128d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vshr.s64 q7, q11, #63 2129d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q11, q11, q6 2130d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vand q7, q7, q5 2131d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vld1.8 {q1}, [r7]! 2132d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q0, q0, q8 2133d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vadd.u64 q12, q11, q11 2134d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vst1.64 {q11}, [r0,:128]! 2135d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vswp d15,d14 2136d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vshr.s64 q6, q12, #63 2137d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q12, q12, q7 2138d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vand q6, q6, q5 2139d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vld1.8 {q2}, [r7]! 2140d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q1, q1, q9 2141d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vadd.u64 q13, q12, q12 2142d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vst1.64 {q12}, [r0,:128]! 2143d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vswp d13,d12 2144d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vshr.s64 q7, q13, #63 2145d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q13, q13, q6 2146d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vand q7, q7, q5 2147d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vld1.8 {q3}, [r7]! 2148d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q2, q2, q10 2149d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vadd.u64 q14, q13, q13 2150d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vst1.64 {q13}, [r0,:128]! 2151d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vswp d15,d14 2152d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vshr.s64 q6, q14, #63 2153d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q14, q14, q7 2154d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vand q6, q6, q5 2155d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vld1.8 {q4}, [r7]! 2156d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q3, q3, q11 2157d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vadd.u64 q15, q14, q14 2158d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vst1.64 {q14}, [r0,:128]! 2159d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vswp d13,d12 2160d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vshr.s64 q7, q15, #63 2161d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q15, q15, q6 2162d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vand q7, q7, q5 2163d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vld1.8 {q5}, [r7]! 2164d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q4, q4, q12 2165d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vadd.u64 q8, q15, q15 2166d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vst1.64 {q15}, [r0,:128]! 2167d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vswp d15,d14 2168d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q8, q8, q7 2169d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vst1.64 {q8}, [r0,:128] @ next round tweak 2170d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root 2171d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vld1.8 {q6-q7}, [r7]! 2172d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q5, q5, q13 2173d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root#ifndef BSAES_ASM_EXTENDED_KEY 2174d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root add r4, sp, #0x90 @ pass key schedule 2175d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root#else 2176d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root add r4, r10, #248 @ pass key schedule 2177d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root#endif 2178d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q6, q6, q14 2179d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root mov r5, r1 @ pass rounds 2180d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q7, q7, q15 2181d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root mov r0, sp 2182d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root 2183d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root bl _bsaes_decrypt8 2184d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root 2185d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vld1.64 {q8-q9}, [r0,:128]! 2186d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vld1.64 {q10-q11}, [r0,:128]! 2187d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q0, q0, q8 2188d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vld1.64 {q12-q13}, [r0,:128]! 2189d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q1, q1, q9 2190d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q8, q6, q10 2191d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vst1.8 {q0-q1}, [r8]! 2192d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q9, q4, q11 2193d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vld1.64 {q14-q15}, [r0,:128]! 2194d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q10, q2, q12 2195d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vst1.8 {q8-q9}, [r8]! 2196d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q11, q7, q13 2197d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q12, q3, q14 2198d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vst1.8 {q10-q11}, [r8]! 2199d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q13, q5, q15 2200d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vst1.8 {q12-q13}, [r8]! 2201d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root 2202d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vld1.64 {q8}, [r0,:128] @ next round tweak 2203d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root 2204d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root subs r9, #0x80 2205d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root bpl .Lxts_dec_loop 2206d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root 2207d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root.Lxts_dec_short: 2208d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root adds r9, #0x70 2209d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root bmi .Lxts_dec_done 2210d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root 2211d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vldmia r2, {q5} @ load XTS magic 2212d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vshr.s64 q7, q8, #63 2213d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root mov r0, sp 2214d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vand q7, q7, q5 2215d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vadd.u64 q9, q8, q8 2216d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vst1.64 {q8}, [r0,:128]! 2217d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vswp d15,d14 2218d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vshr.s64 q6, q9, #63 2219d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q9, q9, q7 2220d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vand q6, q6, q5 2221d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vadd.u64 q10, q9, q9 2222d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vst1.64 {q9}, [r0,:128]! 2223d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vswp d13,d12 2224d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vshr.s64 q7, q10, #63 2225d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q10, q10, q6 2226d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vand q7, q7, q5 2227d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vld1.8 {q0}, [r7]! 2228d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root subs r9, #0x10 2229d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root bmi .Lxts_dec_1 2230d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vadd.u64 q11, q10, q10 2231d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vst1.64 {q10}, [r0,:128]! 2232d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vswp d15,d14 2233d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vshr.s64 q6, q11, #63 2234d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q11, q11, q7 2235d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vand q6, q6, q5 2236d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vld1.8 {q1}, [r7]! 2237d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root subs r9, #0x10 2238d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root bmi .Lxts_dec_2 2239d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q0, q0, q8 2240d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vadd.u64 q12, q11, q11 2241d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vst1.64 {q11}, [r0,:128]! 2242d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vswp d13,d12 2243d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vshr.s64 q7, q12, #63 2244d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q12, q12, q6 2245d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vand q7, q7, q5 2246d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vld1.8 {q2}, [r7]! 2247d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root subs r9, #0x10 2248d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root bmi .Lxts_dec_3 2249d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q1, q1, q9 2250d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vadd.u64 q13, q12, q12 2251d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vst1.64 {q12}, [r0,:128]! 2252d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vswp d15,d14 2253d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vshr.s64 q6, q13, #63 2254d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q13, q13, q7 2255d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vand q6, q6, q5 2256d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vld1.8 {q3}, [r7]! 2257d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root subs r9, #0x10 2258d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root bmi .Lxts_dec_4 2259d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q2, q2, q10 2260d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vadd.u64 q14, q13, q13 2261d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vst1.64 {q13}, [r0,:128]! 2262d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vswp d13,d12 2263d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vshr.s64 q7, q14, #63 2264d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q14, q14, q6 2265d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vand q7, q7, q5 2266d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vld1.8 {q4}, [r7]! 2267d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root subs r9, #0x10 2268d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root bmi .Lxts_dec_5 2269d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q3, q3, q11 2270d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vadd.u64 q15, q14, q14 2271d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vst1.64 {q14}, [r0,:128]! 2272d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vswp d15,d14 2273d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vshr.s64 q6, q15, #63 2274d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q15, q15, q7 2275d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vand q6, q6, q5 2276d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vld1.8 {q5}, [r7]! 2277d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root subs r9, #0x10 2278d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root bmi .Lxts_dec_6 2279d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q4, q4, q12 2280d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root sub r9, #0x10 2281d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vst1.64 {q15}, [r0,:128] @ next round tweak 2282d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root 2283d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vld1.8 {q6}, [r7]! 2284d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q5, q5, q13 2285d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root#ifndef BSAES_ASM_EXTENDED_KEY 2286d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root add r4, sp, #0x90 @ pass key schedule 2287d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root#else 2288d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root add r4, r10, #248 @ pass key schedule 2289d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root#endif 2290d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q6, q6, q14 2291d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root mov r5, r1 @ pass rounds 2292d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root mov r0, sp 2293d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root 2294d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root bl _bsaes_decrypt8 2295d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root 2296d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vld1.64 {q8-q9}, [r0,:128]! 2297d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vld1.64 {q10-q11}, [r0,:128]! 2298d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q0, q0, q8 2299d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vld1.64 {q12-q13}, [r0,:128]! 2300d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q1, q1, q9 2301d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q8, q6, q10 2302d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vst1.8 {q0-q1}, [r8]! 2303d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q9, q4, q11 2304d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vld1.64 {q14}, [r0,:128]! 2305d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q10, q2, q12 2306d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vst1.8 {q8-q9}, [r8]! 2307d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q11, q7, q13 2308d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q12, q3, q14 2309d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vst1.8 {q10-q11}, [r8]! 2310d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vst1.8 {q12}, [r8]! 2311d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root 2312d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vld1.64 {q8}, [r0,:128] @ next round tweak 2313d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root b .Lxts_dec_done 2314d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root.align 4 2315d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root.Lxts_dec_6: 2316d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vst1.64 {q14}, [r0,:128] @ next round tweak 2317d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root 2318d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q4, q4, q12 2319d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root#ifndef BSAES_ASM_EXTENDED_KEY 2320d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root add r4, sp, #0x90 @ pass key schedule 2321d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root#else 2322d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root add r4, r10, #248 @ pass key schedule 2323d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root#endif 2324d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q5, q5, q13 2325d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root mov r5, r1 @ pass rounds 2326d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root mov r0, sp 2327d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root 2328d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root bl _bsaes_decrypt8 2329d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root 2330d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vld1.64 {q8-q9}, [r0,:128]! 2331d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vld1.64 {q10-q11}, [r0,:128]! 2332d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q0, q0, q8 2333d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vld1.64 {q12-q13}, [r0,:128]! 2334d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q1, q1, q9 2335d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q8, q6, q10 2336d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vst1.8 {q0-q1}, [r8]! 2337d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q9, q4, q11 2338d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q10, q2, q12 2339d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vst1.8 {q8-q9}, [r8]! 2340d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q11, q7, q13 2341d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vst1.8 {q10-q11}, [r8]! 2342d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root 2343d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vld1.64 {q8}, [r0,:128] @ next round tweak 2344d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root b .Lxts_dec_done 2345d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root.align 4 2346d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root.Lxts_dec_5: 2347d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vst1.64 {q13}, [r0,:128] @ next round tweak 2348d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root 2349d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q3, q3, q11 2350d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root#ifndef BSAES_ASM_EXTENDED_KEY 2351d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root add r4, sp, #0x90 @ pass key schedule 2352d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root#else 2353d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root add r4, r10, #248 @ pass key schedule 2354d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root#endif 2355d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q4, q4, q12 2356d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root mov r5, r1 @ pass rounds 2357d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root mov r0, sp 2358d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root 2359d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root bl _bsaes_decrypt8 2360d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root 2361d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vld1.64 {q8-q9}, [r0,:128]! 2362d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vld1.64 {q10-q11}, [r0,:128]! 2363d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q0, q0, q8 2364d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vld1.64 {q12}, [r0,:128]! 2365d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q1, q1, q9 2366d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q8, q6, q10 2367d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vst1.8 {q0-q1}, [r8]! 2368d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q9, q4, q11 2369d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q10, q2, q12 2370d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vst1.8 {q8-q9}, [r8]! 2371d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vst1.8 {q10}, [r8]! 2372d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root 2373d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vld1.64 {q8}, [r0,:128] @ next round tweak 2374d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root b .Lxts_dec_done 2375d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root.align 4 2376d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root.Lxts_dec_4: 2377d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vst1.64 {q12}, [r0,:128] @ next round tweak 2378d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root 2379d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q2, q2, q10 2380d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root#ifndef BSAES_ASM_EXTENDED_KEY 2381d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root add r4, sp, #0x90 @ pass key schedule 2382d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root#else 2383d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root add r4, r10, #248 @ pass key schedule 2384d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root#endif 2385d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q3, q3, q11 2386d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root mov r5, r1 @ pass rounds 2387d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root mov r0, sp 2388d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root 2389d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root bl _bsaes_decrypt8 2390d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root 2391d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vld1.64 {q8-q9}, [r0,:128]! 2392d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vld1.64 {q10-q11}, [r0,:128]! 2393d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q0, q0, q8 2394d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q1, q1, q9 2395d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q8, q6, q10 2396d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vst1.8 {q0-q1}, [r8]! 2397d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q9, q4, q11 2398d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vst1.8 {q8-q9}, [r8]! 2399d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root 2400d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vld1.64 {q8}, [r0,:128] @ next round tweak 2401d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root b .Lxts_dec_done 2402d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root.align 4 2403d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root.Lxts_dec_3: 2404d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vst1.64 {q11}, [r0,:128] @ next round tweak 2405d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root 2406d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q1, q1, q9 2407d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root#ifndef BSAES_ASM_EXTENDED_KEY 2408d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root add r4, sp, #0x90 @ pass key schedule 2409d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root#else 2410d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root add r4, r10, #248 @ pass key schedule 2411d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root#endif 2412d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q2, q2, q10 2413d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root mov r5, r1 @ pass rounds 2414d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root mov r0, sp 2415d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root 2416d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root bl _bsaes_decrypt8 2417d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root 2418d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vld1.64 {q8-q9}, [r0,:128]! 2419d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vld1.64 {q10}, [r0,:128]! 2420d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q0, q0, q8 2421d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q1, q1, q9 2422d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q8, q6, q10 2423d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vst1.8 {q0-q1}, [r8]! 2424d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vst1.8 {q8}, [r8]! 2425d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root 2426d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vld1.64 {q8}, [r0,:128] @ next round tweak 2427d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root b .Lxts_dec_done 2428d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root.align 4 2429d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root.Lxts_dec_2: 2430d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vst1.64 {q10}, [r0,:128] @ next round tweak 2431d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root 2432d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q0, q0, q8 2433d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root#ifndef BSAES_ASM_EXTENDED_KEY 2434d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root add r4, sp, #0x90 @ pass key schedule 2435d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root#else 2436d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root add r4, r10, #248 @ pass key schedule 2437d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root#endif 2438d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q1, q1, q9 2439d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root mov r5, r1 @ pass rounds 2440d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root mov r0, sp 2441d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root 2442d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root bl _bsaes_decrypt8 2443d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root 2444d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vld1.64 {q8-q9}, [r0,:128]! 2445d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q0, q0, q8 2446d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q1, q1, q9 2447d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vst1.8 {q0-q1}, [r8]! 2448d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root 2449d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vld1.64 {q8}, [r0,:128] @ next round tweak 2450d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root b .Lxts_dec_done 2451d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root.align 4 2452d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root.Lxts_dec_1: 2453d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root mov r0, sp 2454d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q0, q8 2455d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root mov r1, sp 2456d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vst1.8 {q0}, [sp,:128] 2457d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root mov r2, r10 2458d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root mov r4, r3 @ preserve fp 2459d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root mov r5, r2 @ preserve magic 2460d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root 2461d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root bl AES_decrypt 2462d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root 2463d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vld1.8 {q0}, [sp,:128] 2464d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q0, q0, q8 2465d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vst1.8 {q0}, [r8]! 2466d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root mov r3, r4 2467d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root mov r2, r5 2468d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root 2469d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vmov q8, q9 @ next round tweak 2470d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root 2471d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root.Lxts_dec_done: 2472d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root#ifndef XTS_CHAIN_TWEAK 2473d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root adds r9, #0x10 2474d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root beq .Lxts_dec_ret 2475d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root 2476d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root @ calculate one round of extra tweak for the stolen ciphertext 2477d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vldmia r2, {q5} 2478d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vshr.s64 q6, q8, #63 2479d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vand q6, q6, q5 2480d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vadd.u64 q9, q8, q8 2481d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vswp d13,d12 2482d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q9, q9, q6 2483d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root 2484d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root @ perform the final decryption with the last tweak value 2485d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vld1.8 {q0}, [r7]! 2486d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root mov r0, sp 2487d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q0, q0, q9 2488d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root mov r1, sp 2489d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vst1.8 {q0}, [sp,:128] 2490d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root mov r2, r10 2491d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root mov r4, r3 @ preserve fp 2492d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root 2493d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root bl AES_decrypt 2494d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root 2495d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vld1.8 {q0}, [sp,:128] 2496d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q0, q0, q9 2497d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vst1.8 {q0}, [r8] 2498d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root 2499d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root mov r6, r8 2500d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root.Lxts_dec_steal: 2501d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root ldrb r1, [r8] 2502d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root ldrb r0, [r7], #1 2503d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root strb r1, [r8, #0x10] 2504d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root strb r0, [r8], #1 2505d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root 2506d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root subs r9, #1 2507d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root bhi .Lxts_dec_steal 2508d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root 2509d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vld1.8 {q0}, [r6] 2510d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root mov r0, sp 2511d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q0, q8 2512d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root mov r1, sp 2513d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vst1.8 {q0}, [sp,:128] 2514d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root mov r2, r10 2515d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root 2516d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root bl AES_decrypt 2517d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root 2518d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vld1.8 {q0}, [sp,:128] 2519d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root veor q0, q0, q8 2520d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vst1.8 {q0}, [r6] 2521d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root mov r3, r4 2522d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root#endif 2523d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root 2524d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root.Lxts_dec_ret: 2525d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root bic r0, r3, #0xf 2526d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vmov.i32 q0, #0 2527d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vmov.i32 q1, #0 2528d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root#ifdef XTS_CHAIN_TWEAK 2529d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root ldr r1, [r3, #0x20+VFP_ABI_FRAME] @ chain tweak 2530d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root#endif 2531d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root.Lxts_dec_bzero: @ wipe key schedule [if any] 2532d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vstmia sp!, {q0-q1} 2533d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root cmp sp, r0 2534d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root bne .Lxts_dec_bzero 2535d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root 2536d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root mov sp, r3 2537d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root#ifdef XTS_CHAIN_TWEAK 2538d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root vst1.8 {q8}, [r1] 2539d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root#endif 2540d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root VFP_ABI_POP 2541d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root ldmia sp!, {r4-r10, pc} @ return 2542d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root 2543d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root.size bsaes_xts_decrypt,.-bsaes_xts_decrypt 2544d55031a5e797d10e7106668121d18ef5608aaed9Kenny Root#endif 2545