1116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 2116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch@ ==================================================================== 3116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch@ Written by Andy Polyakov <appro@openssl.org> for the OpenSSL 4116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch@ project. The module is, however, dual licensed under OpenSSL and 5116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch@ CRYPTOGAMS licenses depending on where you obtain it. For further 6116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch@ details see http://www.openssl.org/~appro/cryptogams/. 7116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch@ 8116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch@ Specific modes and adaptation for Linux kernel by Ard Biesheuvel 9116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch@ <ard.biesheuvel@linaro.org>. Permission to use under GPL terms is 10116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch@ granted. 11116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch@ ==================================================================== 12116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 13116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch@ Bit-sliced AES for ARM NEON 14116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch@ 15116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch@ February 2012. 16116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch@ 17116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch@ This implementation is direct adaptation of bsaes-x86_64 module for 18116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch@ ARM NEON. Except that this module is endian-neutral [in sense that 19116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch@ it can be compiled for either endianness] by courtesy of vld1.8's 20116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch@ neutrality. Initial version doesn't implement interface to OpenSSL, 21116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch@ only low-level primitives and unsupported entry points, just enough 22116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch@ to collect performance results, which for Cortex-A8 core are: 23116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch@ 24116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch@ encrypt 19.5 cycles per byte processed with 128-bit key 25116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch@ decrypt 22.1 cycles per byte processed with 128-bit key 26116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch@ key conv. 440 cycles per 128-bit key/0.18 of 8x block 27116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch@ 28116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch@ Snapdragon S4 encrypts byte in 17.6 cycles and decrypts in 19.7, 29116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch@ which is [much] worse than anticipated (for further details see 30116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch@ http://www.openssl.org/~appro/Snapdragon-S4.html). 31116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch@ 32116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch@ Cortex-A15 manages in 14.2/16.1 cycles [when integer-only code 33116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch@ manages in 20.0 cycles]. 34116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch@ 35116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch@ When comparing to x86_64 results keep in mind that NEON unit is 36116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch@ [mostly] single-issue and thus can't [fully] benefit from 37116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch@ instruction-level parallelism. And when comparing to aes-armv4 38116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch@ results keep in mind key schedule conversion overhead (see 39116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch@ bsaes-x86_64.pl for further details)... 40116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch@ 41116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch@ <appro@openssl.org> 42116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 43116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch@ April-August 2013 44116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch@ 45116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch@ Add CBC, CTR and XTS subroutines, adapt for kernel use. 46116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch@ 47116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch@ <ard.biesheuvel@linaro.org> 48116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 49116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#if defined(__arm__) 50116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#ifndef __KERNEL__ 51116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch# include "arm_arch.h" 52116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 53116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch# define VFP_ABI_PUSH vstmdb sp!,{d8-d15} 54116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch# define VFP_ABI_POP vldmia sp!,{d8-d15} 55116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch# define VFP_ABI_FRAME 0x40 56116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#else 57116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch# define VFP_ABI_PUSH 58116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch# define VFP_ABI_POP 59116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch# define VFP_ABI_FRAME 0 60116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch# define BSAES_ASM_EXTENDED_KEY 61116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch# define XTS_CHAIN_TWEAK 62116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch# define __ARM_ARCH__ __LINUX_ARM_ARCH__ 63116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#endif 64116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 65116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#ifdef __thumb__ 66116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch# define adrl adr 67116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#endif 68116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 69116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#if __ARM_ARCH__>=7 70116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch.text 71116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch.syntax unified @ ARMv7-capable assembler is expected to handle this 72116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#ifdef __thumb2__ 73116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch.thumb 74116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#else 75116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch.code 32 76116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#endif 77116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 78116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch.fpu neon 79116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 80116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch.type _bsaes_decrypt8,%function 81116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch.align 4 82116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch_bsaes_decrypt8: 83116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch adr r6,_bsaes_decrypt8 84116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vldmia r4!, {q9} @ round 0 key 85116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r6,r6,#.LM0ISR-_bsaes_decrypt8 86116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 87116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vldmia r6!, {q8} @ .LM0ISR 88116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q10, q0, q9 @ xor with round0 key 89116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q11, q1, q9 90116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vtbl.8 d0, {q10}, d16 91116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vtbl.8 d1, {q10}, d17 92116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q12, q2, q9 93116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vtbl.8 d2, {q11}, d16 94116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vtbl.8 d3, {q11}, d17 95116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q13, q3, q9 96116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vtbl.8 d4, {q12}, d16 97116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vtbl.8 d5, {q12}, d17 98116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q14, q4, q9 99116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vtbl.8 d6, {q13}, d16 100116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vtbl.8 d7, {q13}, d17 101116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q15, q5, q9 102116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vtbl.8 d8, {q14}, d16 103116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vtbl.8 d9, {q14}, d17 104116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q10, q6, q9 105116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vtbl.8 d10, {q15}, d16 106116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vtbl.8 d11, {q15}, d17 107116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q11, q7, q9 108116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vtbl.8 d12, {q10}, d16 109116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vtbl.8 d13, {q10}, d17 110116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vtbl.8 d14, {q11}, d16 111116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vtbl.8 d15, {q11}, d17 112116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vmov.i8 q8,#0x55 @ compose .LBS0 113116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vmov.i8 q9,#0x33 @ compose .LBS1 114116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vshr.u64 q10, q6, #1 115116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vshr.u64 q11, q4, #1 116116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q10, q10, q7 117116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q11, q11, q5 118116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vand q10, q10, q8 119116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vand q11, q11, q8 120116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q7, q7, q10 121116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vshl.u64 q10, q10, #1 122116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q5, q5, q11 123116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vshl.u64 q11, q11, #1 124116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q6, q6, q10 125116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q4, q4, q11 126116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vshr.u64 q10, q2, #1 127116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vshr.u64 q11, q0, #1 128116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q10, q10, q3 129116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q11, q11, q1 130116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vand q10, q10, q8 131116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vand q11, q11, q8 132116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q3, q3, q10 133116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vshl.u64 q10, q10, #1 134116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q1, q1, q11 135116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vshl.u64 q11, q11, #1 136116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q2, q2, q10 137116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q0, q0, q11 138116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vmov.i8 q8,#0x0f @ compose .LBS2 139116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vshr.u64 q10, q5, #2 140116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vshr.u64 q11, q4, #2 141116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q10, q10, q7 142116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q11, q11, q6 143116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vand q10, q10, q9 144116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vand q11, q11, q9 145116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q7, q7, q10 146116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vshl.u64 q10, q10, #2 147116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q6, q6, q11 148116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vshl.u64 q11, q11, #2 149116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q5, q5, q10 150116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q4, q4, q11 151116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vshr.u64 q10, q1, #2 152116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vshr.u64 q11, q0, #2 153116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q10, q10, q3 154116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q11, q11, q2 155116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vand q10, q10, q9 156116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vand q11, q11, q9 157116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q3, q3, q10 158116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vshl.u64 q10, q10, #2 159116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q2, q2, q11 160116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vshl.u64 q11, q11, #2 161116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q1, q1, q10 162116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q0, q0, q11 163116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vshr.u64 q10, q3, #4 164116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vshr.u64 q11, q2, #4 165116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q10, q10, q7 166116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q11, q11, q6 167116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vand q10, q10, q8 168116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vand q11, q11, q8 169116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q7, q7, q10 170116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vshl.u64 q10, q10, #4 171116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q6, q6, q11 172116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vshl.u64 q11, q11, #4 173116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q3, q3, q10 174116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q2, q2, q11 175116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vshr.u64 q10, q1, #4 176116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vshr.u64 q11, q0, #4 177116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q10, q10, q5 178116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q11, q11, q4 179116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vand q10, q10, q8 180116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vand q11, q11, q8 181116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q5, q5, q10 182116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vshl.u64 q10, q10, #4 183116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q4, q4, q11 184116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vshl.u64 q11, q11, #4 185116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q1, q1, q10 186116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q0, q0, q11 187116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch sub r5,r5,#1 188116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch b .Ldec_sbox 189116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch.align 4 190116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch.Ldec_loop: 191116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vldmia r4!, {q8-q11} 192116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q8, q8, q0 193116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q9, q9, q1 194116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vtbl.8 d0, {q8}, d24 195116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vtbl.8 d1, {q8}, d25 196116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vldmia r4!, {q8} 197116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q10, q10, q2 198116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vtbl.8 d2, {q9}, d24 199116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vtbl.8 d3, {q9}, d25 200116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vldmia r4!, {q9} 201116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q11, q11, q3 202116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vtbl.8 d4, {q10}, d24 203116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vtbl.8 d5, {q10}, d25 204116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vldmia r4!, {q10} 205116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vtbl.8 d6, {q11}, d24 206116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vtbl.8 d7, {q11}, d25 207116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vldmia r4!, {q11} 208116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q8, q8, q4 209116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q9, q9, q5 210116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vtbl.8 d8, {q8}, d24 211116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vtbl.8 d9, {q8}, d25 212116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q10, q10, q6 213116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vtbl.8 d10, {q9}, d24 214116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vtbl.8 d11, {q9}, d25 215116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q11, q11, q7 216116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vtbl.8 d12, {q10}, d24 217116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vtbl.8 d13, {q10}, d25 218116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vtbl.8 d14, {q11}, d24 219116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vtbl.8 d15, {q11}, d25 220116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch.Ldec_sbox: 221116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q1, q1, q4 222116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q3, q3, q4 223116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 224116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q4, q4, q7 225116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q1, q1, q6 226116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q2, q2, q7 227116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q6, q6, q4 228116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 229116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q0, q0, q1 230116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q2, q2, q5 231116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q7, q7, q6 232116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q3, q3, q0 233116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q5, q5, q0 234116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q1, q1, q3 235116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q11, q3, q0 236116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q10, q7, q4 237116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q9, q1, q6 238116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q13, q4, q0 239116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vmov q8, q10 240116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q12, q5, q2 241116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 242116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vorr q10, q10, q9 243116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q15, q11, q8 244116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vand q14, q11, q12 245116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vorr q11, q11, q12 246116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q12, q12, q9 247116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vand q8, q8, q9 248116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q9, q6, q2 249116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vand q15, q15, q12 250116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vand q13, q13, q9 251116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q9, q3, q7 252116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q12, q1, q5 253116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q11, q11, q13 254116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q10, q10, q13 255116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vand q13, q9, q12 256116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vorr q9, q9, q12 257116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q11, q11, q15 258116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q8, q8, q13 259116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q10, q10, q14 260116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q9, q9, q15 261116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q8, q8, q14 262116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vand q12, q4, q6 263116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q9, q9, q14 264116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vand q13, q0, q2 265116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vand q14, q7, q1 266116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vorr q15, q3, q5 267116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q11, q11, q12 268116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q9, q9, q14 269116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q8, q8, q15 270116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q10, q10, q13 271116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 272116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch @ Inv_GF16 0, 1, 2, 3, s0, s1, s2, s3 273116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 274116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch @ new smaller inversion 275116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 276116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vand q14, q11, q9 277116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vmov q12, q8 278116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 279116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q13, q10, q14 280116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q15, q8, q14 281116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q14, q8, q14 @ q14=q15 282116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 283116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vbsl q13, q9, q8 284116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vbsl q15, q11, q10 285116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q11, q11, q10 286116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 287116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vbsl q12, q13, q14 288116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vbsl q8, q14, q13 289116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 290116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vand q14, q12, q15 291116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q9, q9, q8 292116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 293116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q14, q14, q11 294116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q12, q5, q2 295116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q8, q1, q6 296116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q10, q15, q14 297116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vand q10, q10, q5 298116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q5, q5, q1 299116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vand q11, q1, q15 300116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vand q5, q5, q14 301116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q1, q11, q10 302116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q5, q5, q11 303116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q15, q15, q13 304116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q14, q14, q9 305116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q11, q15, q14 306116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q10, q13, q9 307116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vand q11, q11, q12 308116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vand q10, q10, q2 309116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q12, q12, q8 310116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q2, q2, q6 311116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vand q8, q8, q15 312116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vand q6, q6, q13 313116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vand q12, q12, q14 314116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vand q2, q2, q9 315116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q8, q8, q12 316116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q2, q2, q6 317116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q12, q12, q11 318116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q6, q6, q10 319116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q5, q5, q12 320116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q2, q2, q12 321116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q1, q1, q8 322116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q6, q6, q8 323116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 324116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q12, q3, q0 325116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q8, q7, q4 326116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q11, q15, q14 327116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q10, q13, q9 328116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vand q11, q11, q12 329116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vand q10, q10, q0 330116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q12, q12, q8 331116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q0, q0, q4 332116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vand q8, q8, q15 333116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vand q4, q4, q13 334116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vand q12, q12, q14 335116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vand q0, q0, q9 336116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q8, q8, q12 337116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q0, q0, q4 338116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q12, q12, q11 339116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q4, q4, q10 340116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q15, q15, q13 341116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q14, q14, q9 342116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q10, q15, q14 343116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vand q10, q10, q3 344116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q3, q3, q7 345116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vand q11, q7, q15 346116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vand q3, q3, q14 347116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q7, q11, q10 348116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q3, q3, q11 349116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q3, q3, q12 350116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q0, q0, q12 351116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q7, q7, q8 352116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q4, q4, q8 353116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q1, q1, q7 354116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q6, q6, q5 355116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 356116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q4, q4, q1 357116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q2, q2, q7 358116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q5, q5, q7 359116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q4, q4, q2 360116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q7, q7, q0 361116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q4, q4, q5 362116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q3, q3, q6 363116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q6, q6, q1 364116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q3, q3, q4 365116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 366116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q4, q4, q0 367116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q7, q7, q3 368116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch subs r5,r5,#1 369116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch bcc .Ldec_done 370116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch @ multiplication by 0x05-0x00-0x04-0x00 371116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vext.8 q8, q0, q0, #8 372116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vext.8 q14, q3, q3, #8 373116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vext.8 q15, q5, q5, #8 374116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q8, q8, q0 375116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vext.8 q9, q1, q1, #8 376116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q14, q14, q3 377116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vext.8 q10, q6, q6, #8 378116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q15, q15, q5 379116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vext.8 q11, q4, q4, #8 380116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q9, q9, q1 381116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vext.8 q12, q2, q2, #8 382116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q10, q10, q6 383116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vext.8 q13, q7, q7, #8 384116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q11, q11, q4 385116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q12, q12, q2 386116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q13, q13, q7 387116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 388116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q0, q0, q14 389116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q1, q1, q14 390116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q6, q6, q8 391116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q2, q2, q10 392116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q4, q4, q9 393116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q1, q1, q15 394116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q6, q6, q15 395116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q2, q2, q14 396116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q7, q7, q11 397116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q4, q4, q14 398116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q3, q3, q12 399116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q2, q2, q15 400116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q7, q7, q15 401116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q5, q5, q13 402116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vext.8 q8, q0, q0, #12 @ x0 <<< 32 403116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vext.8 q9, q1, q1, #12 404116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q0, q0, q8 @ x0 ^ (x0 <<< 32) 405116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vext.8 q10, q6, q6, #12 406116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q1, q1, q9 407116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vext.8 q11, q4, q4, #12 408116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q6, q6, q10 409116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vext.8 q12, q2, q2, #12 410116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q4, q4, q11 411116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vext.8 q13, q7, q7, #12 412116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q2, q2, q12 413116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vext.8 q14, q3, q3, #12 414116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q7, q7, q13 415116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vext.8 q15, q5, q5, #12 416116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q3, q3, q14 417116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 418116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q9, q9, q0 419116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q5, q5, q15 420116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vext.8 q0, q0, q0, #8 @ (x0 ^ (x0 <<< 32)) <<< 64) 421116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q10, q10, q1 422116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q8, q8, q5 423116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q9, q9, q5 424116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vext.8 q1, q1, q1, #8 425116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q13, q13, q2 426116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q0, q0, q8 427116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q14, q14, q7 428116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q1, q1, q9 429116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vext.8 q8, q2, q2, #8 430116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q12, q12, q4 431116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vext.8 q9, q7, q7, #8 432116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q15, q15, q3 433116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vext.8 q2, q4, q4, #8 434116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q11, q11, q6 435116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vext.8 q7, q5, q5, #8 436116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q12, q12, q5 437116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vext.8 q4, q3, q3, #8 438116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q11, q11, q5 439116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vext.8 q3, q6, q6, #8 440116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q5, q9, q13 441116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q11, q11, q2 442116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q7, q7, q15 443116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q6, q4, q14 444116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q4, q8, q12 445116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q2, q3, q10 446116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vmov q3, q11 447116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch @ vmov q5, q9 448116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vldmia r6, {q12} @ .LISR 449116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ite eq @ Thumb2 thing, sanity check in ARM 450116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch addeq r6,r6,#0x10 451116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch bne .Ldec_loop 452116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vldmia r6, {q12} @ .LISRM0 453116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch b .Ldec_loop 454116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch.align 4 455116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch.Ldec_done: 456116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vmov.i8 q8,#0x55 @ compose .LBS0 457116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vmov.i8 q9,#0x33 @ compose .LBS1 458116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vshr.u64 q10, q3, #1 459116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vshr.u64 q11, q2, #1 460116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q10, q10, q5 461116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q11, q11, q7 462116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vand q10, q10, q8 463116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vand q11, q11, q8 464116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q5, q5, q10 465116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vshl.u64 q10, q10, #1 466116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q7, q7, q11 467116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vshl.u64 q11, q11, #1 468116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q3, q3, q10 469116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q2, q2, q11 470116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vshr.u64 q10, q6, #1 471116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vshr.u64 q11, q0, #1 472116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q10, q10, q4 473116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q11, q11, q1 474116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vand q10, q10, q8 475116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vand q11, q11, q8 476116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q4, q4, q10 477116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vshl.u64 q10, q10, #1 478116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q1, q1, q11 479116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vshl.u64 q11, q11, #1 480116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q6, q6, q10 481116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q0, q0, q11 482116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vmov.i8 q8,#0x0f @ compose .LBS2 483116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vshr.u64 q10, q7, #2 484116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vshr.u64 q11, q2, #2 485116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q10, q10, q5 486116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q11, q11, q3 487116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vand q10, q10, q9 488116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vand q11, q11, q9 489116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q5, q5, q10 490116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vshl.u64 q10, q10, #2 491116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q3, q3, q11 492116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vshl.u64 q11, q11, #2 493116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q7, q7, q10 494116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q2, q2, q11 495116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vshr.u64 q10, q1, #2 496116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vshr.u64 q11, q0, #2 497116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q10, q10, q4 498116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q11, q11, q6 499116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vand q10, q10, q9 500116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vand q11, q11, q9 501116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q4, q4, q10 502116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vshl.u64 q10, q10, #2 503116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q6, q6, q11 504116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vshl.u64 q11, q11, #2 505116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q1, q1, q10 506116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q0, q0, q11 507116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vshr.u64 q10, q4, #4 508116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vshr.u64 q11, q6, #4 509116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q10, q10, q5 510116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q11, q11, q3 511116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vand q10, q10, q8 512116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vand q11, q11, q8 513116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q5, q5, q10 514116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vshl.u64 q10, q10, #4 515116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q3, q3, q11 516116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vshl.u64 q11, q11, #4 517116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q4, q4, q10 518116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q6, q6, q11 519116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vshr.u64 q10, q1, #4 520116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vshr.u64 q11, q0, #4 521116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q10, q10, q7 522116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q11, q11, q2 523116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vand q10, q10, q8 524116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vand q11, q11, q8 525116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q7, q7, q10 526116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vshl.u64 q10, q10, #4 527116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q2, q2, q11 528116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vshl.u64 q11, q11, #4 529116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q1, q1, q10 530116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q0, q0, q11 531116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vldmia r4, {q8} @ last round key 532116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q6, q6, q8 533116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q4, q4, q8 534116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q2, q2, q8 535116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q7, q7, q8 536116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q3, q3, q8 537116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q5, q5, q8 538116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q0, q0, q8 539116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q1, q1, q8 540116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch bx lr 541116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch.size _bsaes_decrypt8,.-_bsaes_decrypt8 542116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 543116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch.type _bsaes_const,%object 544116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch.align 6 545116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch_bsaes_const: 546116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch.LM0ISR: @ InvShiftRows constants 547116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch .quad 0x0a0e0206070b0f03, 0x0004080c0d010509 548116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch.LISR: 549116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch .quad 0x0504070602010003, 0x0f0e0d0c080b0a09 550116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch.LISRM0: 551116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch .quad 0x01040b0e0205080f, 0x0306090c00070a0d 552116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch.LM0SR: @ ShiftRows constants 553116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch .quad 0x0a0e02060f03070b, 0x0004080c05090d01 554116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch.LSR: 555116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch .quad 0x0504070600030201, 0x0f0e0d0c0a09080b 556116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch.LSRM0: 557116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch .quad 0x0304090e00050a0f, 0x01060b0c0207080d 558116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch.LM0: 559116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch .quad 0x02060a0e03070b0f, 0x0004080c0105090d 560116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch.LREVM0SR: 561116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch .quad 0x090d01050c000408, 0x03070b0f060a0e02 562116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch.asciz "Bit-sliced AES for NEON, CRYPTOGAMS by <appro@openssl.org>" 563116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch.align 6 564116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch.size _bsaes_const,.-_bsaes_const 565116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 566116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch.type _bsaes_encrypt8,%function 567116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch.align 4 568116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch_bsaes_encrypt8: 569116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch adr r6,_bsaes_encrypt8 570116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vldmia r4!, {q9} @ round 0 key 571116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch sub r6,r6,#_bsaes_encrypt8-.LM0SR 572116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 573116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vldmia r6!, {q8} @ .LM0SR 574116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch_bsaes_encrypt8_alt: 575116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q10, q0, q9 @ xor with round0 key 576116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q11, q1, q9 577116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vtbl.8 d0, {q10}, d16 578116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vtbl.8 d1, {q10}, d17 579116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q12, q2, q9 580116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vtbl.8 d2, {q11}, d16 581116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vtbl.8 d3, {q11}, d17 582116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q13, q3, q9 583116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vtbl.8 d4, {q12}, d16 584116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vtbl.8 d5, {q12}, d17 585116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q14, q4, q9 586116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vtbl.8 d6, {q13}, d16 587116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vtbl.8 d7, {q13}, d17 588116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q15, q5, q9 589116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vtbl.8 d8, {q14}, d16 590116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vtbl.8 d9, {q14}, d17 591116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q10, q6, q9 592116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vtbl.8 d10, {q15}, d16 593116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vtbl.8 d11, {q15}, d17 594116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q11, q7, q9 595116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vtbl.8 d12, {q10}, d16 596116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vtbl.8 d13, {q10}, d17 597116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vtbl.8 d14, {q11}, d16 598116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vtbl.8 d15, {q11}, d17 599116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch_bsaes_encrypt8_bitslice: 600116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vmov.i8 q8,#0x55 @ compose .LBS0 601116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vmov.i8 q9,#0x33 @ compose .LBS1 602116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vshr.u64 q10, q6, #1 603116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vshr.u64 q11, q4, #1 604116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q10, q10, q7 605116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q11, q11, q5 606116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vand q10, q10, q8 607116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vand q11, q11, q8 608116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q7, q7, q10 609116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vshl.u64 q10, q10, #1 610116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q5, q5, q11 611116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vshl.u64 q11, q11, #1 612116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q6, q6, q10 613116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q4, q4, q11 614116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vshr.u64 q10, q2, #1 615116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vshr.u64 q11, q0, #1 616116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q10, q10, q3 617116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q11, q11, q1 618116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vand q10, q10, q8 619116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vand q11, q11, q8 620116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q3, q3, q10 621116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vshl.u64 q10, q10, #1 622116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q1, q1, q11 623116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vshl.u64 q11, q11, #1 624116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q2, q2, q10 625116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q0, q0, q11 626116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vmov.i8 q8,#0x0f @ compose .LBS2 627116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vshr.u64 q10, q5, #2 628116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vshr.u64 q11, q4, #2 629116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q10, q10, q7 630116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q11, q11, q6 631116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vand q10, q10, q9 632116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vand q11, q11, q9 633116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q7, q7, q10 634116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vshl.u64 q10, q10, #2 635116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q6, q6, q11 636116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vshl.u64 q11, q11, #2 637116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q5, q5, q10 638116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q4, q4, q11 639116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vshr.u64 q10, q1, #2 640116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vshr.u64 q11, q0, #2 641116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q10, q10, q3 642116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q11, q11, q2 643116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vand q10, q10, q9 644116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vand q11, q11, q9 645116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q3, q3, q10 646116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vshl.u64 q10, q10, #2 647116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q2, q2, q11 648116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vshl.u64 q11, q11, #2 649116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q1, q1, q10 650116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q0, q0, q11 651116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vshr.u64 q10, q3, #4 652116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vshr.u64 q11, q2, #4 653116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q10, q10, q7 654116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q11, q11, q6 655116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vand q10, q10, q8 656116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vand q11, q11, q8 657116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q7, q7, q10 658116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vshl.u64 q10, q10, #4 659116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q6, q6, q11 660116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vshl.u64 q11, q11, #4 661116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q3, q3, q10 662116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q2, q2, q11 663116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vshr.u64 q10, q1, #4 664116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vshr.u64 q11, q0, #4 665116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q10, q10, q5 666116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q11, q11, q4 667116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vand q10, q10, q8 668116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vand q11, q11, q8 669116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q5, q5, q10 670116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vshl.u64 q10, q10, #4 671116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q4, q4, q11 672116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vshl.u64 q11, q11, #4 673116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q1, q1, q10 674116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q0, q0, q11 675116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch sub r5,r5,#1 676116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch b .Lenc_sbox 677116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch.align 4 678116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch.Lenc_loop: 679116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vldmia r4!, {q8-q11} 680116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q8, q8, q0 681116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q9, q9, q1 682116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vtbl.8 d0, {q8}, d24 683116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vtbl.8 d1, {q8}, d25 684116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vldmia r4!, {q8} 685116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q10, q10, q2 686116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vtbl.8 d2, {q9}, d24 687116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vtbl.8 d3, {q9}, d25 688116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vldmia r4!, {q9} 689116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q11, q11, q3 690116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vtbl.8 d4, {q10}, d24 691116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vtbl.8 d5, {q10}, d25 692116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vldmia r4!, {q10} 693116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vtbl.8 d6, {q11}, d24 694116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vtbl.8 d7, {q11}, d25 695116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vldmia r4!, {q11} 696116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q8, q8, q4 697116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q9, q9, q5 698116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vtbl.8 d8, {q8}, d24 699116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vtbl.8 d9, {q8}, d25 700116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q10, q10, q6 701116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vtbl.8 d10, {q9}, d24 702116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vtbl.8 d11, {q9}, d25 703116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q11, q11, q7 704116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vtbl.8 d12, {q10}, d24 705116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vtbl.8 d13, {q10}, d25 706116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vtbl.8 d14, {q11}, d24 707116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vtbl.8 d15, {q11}, d25 708116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch.Lenc_sbox: 709116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q2, q2, q1 710116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q5, q5, q6 711116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q3, q3, q0 712116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q6, q6, q2 713116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q5, q5, q0 714116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 715116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q6, q6, q3 716116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q3, q3, q7 717116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q7, q7, q5 718116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q3, q3, q4 719116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q4, q4, q5 720116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 721116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q2, q2, q7 722116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q3, q3, q1 723116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q1, q1, q5 724116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q11, q7, q4 725116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q10, q1, q2 726116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q9, q5, q3 727116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q13, q2, q4 728116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vmov q8, q10 729116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q12, q6, q0 730116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 731116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vorr q10, q10, q9 732116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q15, q11, q8 733116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vand q14, q11, q12 734116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vorr q11, q11, q12 735116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q12, q12, q9 736116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vand q8, q8, q9 737116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q9, q3, q0 738116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vand q15, q15, q12 739116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vand q13, q13, q9 740116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q9, q7, q1 741116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q12, q5, q6 742116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q11, q11, q13 743116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q10, q10, q13 744116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vand q13, q9, q12 745116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vorr q9, q9, q12 746116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q11, q11, q15 747116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q8, q8, q13 748116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q10, q10, q14 749116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q9, q9, q15 750116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q8, q8, q14 751116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vand q12, q2, q3 752116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q9, q9, q14 753116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vand q13, q4, q0 754116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vand q14, q1, q5 755116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vorr q15, q7, q6 756116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q11, q11, q12 757116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q9, q9, q14 758116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q8, q8, q15 759116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q10, q10, q13 760116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 761116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch @ Inv_GF16 0, 1, 2, 3, s0, s1, s2, s3 762116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 763116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch @ new smaller inversion 764116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 765116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vand q14, q11, q9 766116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vmov q12, q8 767116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 768116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q13, q10, q14 769116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q15, q8, q14 770116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q14, q8, q14 @ q14=q15 771116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 772116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vbsl q13, q9, q8 773116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vbsl q15, q11, q10 774116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q11, q11, q10 775116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 776116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vbsl q12, q13, q14 777116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vbsl q8, q14, q13 778116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 779116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vand q14, q12, q15 780116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q9, q9, q8 781116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 782116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q14, q14, q11 783116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q12, q6, q0 784116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q8, q5, q3 785116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q10, q15, q14 786116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vand q10, q10, q6 787116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q6, q6, q5 788116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vand q11, q5, q15 789116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vand q6, q6, q14 790116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q5, q11, q10 791116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q6, q6, q11 792116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q15, q15, q13 793116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q14, q14, q9 794116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q11, q15, q14 795116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q10, q13, q9 796116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vand q11, q11, q12 797116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vand q10, q10, q0 798116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q12, q12, q8 799116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q0, q0, q3 800116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vand q8, q8, q15 801116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vand q3, q3, q13 802116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vand q12, q12, q14 803116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vand q0, q0, q9 804116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q8, q8, q12 805116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q0, q0, q3 806116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q12, q12, q11 807116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q3, q3, q10 808116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q6, q6, q12 809116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q0, q0, q12 810116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q5, q5, q8 811116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q3, q3, q8 812116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 813116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q12, q7, q4 814116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q8, q1, q2 815116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q11, q15, q14 816116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q10, q13, q9 817116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vand q11, q11, q12 818116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vand q10, q10, q4 819116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q12, q12, q8 820116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q4, q4, q2 821116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vand q8, q8, q15 822116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vand q2, q2, q13 823116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vand q12, q12, q14 824116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vand q4, q4, q9 825116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q8, q8, q12 826116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q4, q4, q2 827116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q12, q12, q11 828116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q2, q2, q10 829116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q15, q15, q13 830116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q14, q14, q9 831116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q10, q15, q14 832116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vand q10, q10, q7 833116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q7, q7, q1 834116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vand q11, q1, q15 835116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vand q7, q7, q14 836116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q1, q11, q10 837116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q7, q7, q11 838116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q7, q7, q12 839116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q4, q4, q12 840116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q1, q1, q8 841116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q2, q2, q8 842116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q7, q7, q0 843116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q1, q1, q6 844116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q6, q6, q0 845116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q4, q4, q7 846116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q0, q0, q1 847116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 848116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q1, q1, q5 849116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q5, q5, q2 850116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q2, q2, q3 851116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q3, q3, q5 852116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q4, q4, q5 853116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 854116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q6, q6, q3 855116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch subs r5,r5,#1 856116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch bcc .Lenc_done 857116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vext.8 q8, q0, q0, #12 @ x0 <<< 32 858116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vext.8 q9, q1, q1, #12 859116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q0, q0, q8 @ x0 ^ (x0 <<< 32) 860116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vext.8 q10, q4, q4, #12 861116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q1, q1, q9 862116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vext.8 q11, q6, q6, #12 863116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q4, q4, q10 864116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vext.8 q12, q3, q3, #12 865116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q6, q6, q11 866116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vext.8 q13, q7, q7, #12 867116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q3, q3, q12 868116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vext.8 q14, q2, q2, #12 869116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q7, q7, q13 870116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vext.8 q15, q5, q5, #12 871116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q2, q2, q14 872116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 873116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q9, q9, q0 874116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q5, q5, q15 875116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vext.8 q0, q0, q0, #8 @ (x0 ^ (x0 <<< 32)) <<< 64) 876116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q10, q10, q1 877116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q8, q8, q5 878116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q9, q9, q5 879116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vext.8 q1, q1, q1, #8 880116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q13, q13, q3 881116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q0, q0, q8 882116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q14, q14, q7 883116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q1, q1, q9 884116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vext.8 q8, q3, q3, #8 885116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q12, q12, q6 886116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vext.8 q9, q7, q7, #8 887116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q15, q15, q2 888116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vext.8 q3, q6, q6, #8 889116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q11, q11, q4 890116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vext.8 q7, q5, q5, #8 891116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q12, q12, q5 892116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vext.8 q6, q2, q2, #8 893116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q11, q11, q5 894116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vext.8 q2, q4, q4, #8 895116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q5, q9, q13 896116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q4, q8, q12 897116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q3, q3, q11 898116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q7, q7, q15 899116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q6, q6, q14 900116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch @ vmov q4, q8 901116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q2, q2, q10 902116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch @ vmov q5, q9 903116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vldmia r6, {q12} @ .LSR 904116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ite eq @ Thumb2 thing, samity check in ARM 905116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch addeq r6,r6,#0x10 906116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch bne .Lenc_loop 907116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vldmia r6, {q12} @ .LSRM0 908116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch b .Lenc_loop 909116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch.align 4 910116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch.Lenc_done: 911116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vmov.i8 q8,#0x55 @ compose .LBS0 912116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vmov.i8 q9,#0x33 @ compose .LBS1 913116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vshr.u64 q10, q2, #1 914116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vshr.u64 q11, q3, #1 915116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q10, q10, q5 916116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q11, q11, q7 917116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vand q10, q10, q8 918116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vand q11, q11, q8 919116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q5, q5, q10 920116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vshl.u64 q10, q10, #1 921116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q7, q7, q11 922116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vshl.u64 q11, q11, #1 923116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q2, q2, q10 924116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q3, q3, q11 925116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vshr.u64 q10, q4, #1 926116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vshr.u64 q11, q0, #1 927116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q10, q10, q6 928116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q11, q11, q1 929116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vand q10, q10, q8 930116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vand q11, q11, q8 931116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q6, q6, q10 932116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vshl.u64 q10, q10, #1 933116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q1, q1, q11 934116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vshl.u64 q11, q11, #1 935116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q4, q4, q10 936116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q0, q0, q11 937116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vmov.i8 q8,#0x0f @ compose .LBS2 938116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vshr.u64 q10, q7, #2 939116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vshr.u64 q11, q3, #2 940116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q10, q10, q5 941116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q11, q11, q2 942116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vand q10, q10, q9 943116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vand q11, q11, q9 944116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q5, q5, q10 945116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vshl.u64 q10, q10, #2 946116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q2, q2, q11 947116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vshl.u64 q11, q11, #2 948116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q7, q7, q10 949116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q3, q3, q11 950116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vshr.u64 q10, q1, #2 951116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vshr.u64 q11, q0, #2 952116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q10, q10, q6 953116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q11, q11, q4 954116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vand q10, q10, q9 955116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vand q11, q11, q9 956116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q6, q6, q10 957116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vshl.u64 q10, q10, #2 958116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q4, q4, q11 959116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vshl.u64 q11, q11, #2 960116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q1, q1, q10 961116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q0, q0, q11 962116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vshr.u64 q10, q6, #4 963116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vshr.u64 q11, q4, #4 964116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q10, q10, q5 965116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q11, q11, q2 966116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vand q10, q10, q8 967116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vand q11, q11, q8 968116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q5, q5, q10 969116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vshl.u64 q10, q10, #4 970116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q2, q2, q11 971116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vshl.u64 q11, q11, #4 972116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q6, q6, q10 973116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q4, q4, q11 974116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vshr.u64 q10, q1, #4 975116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vshr.u64 q11, q0, #4 976116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q10, q10, q7 977116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q11, q11, q3 978116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vand q10, q10, q8 979116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vand q11, q11, q8 980116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q7, q7, q10 981116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vshl.u64 q10, q10, #4 982116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q3, q3, q11 983116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vshl.u64 q11, q11, #4 984116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q1, q1, q10 985116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q0, q0, q11 986116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vldmia r4, {q8} @ last round key 987116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q4, q4, q8 988116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q6, q6, q8 989116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q3, q3, q8 990116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q7, q7, q8 991116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q2, q2, q8 992116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q5, q5, q8 993116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q0, q0, q8 994116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q1, q1, q8 995116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch bx lr 996116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch.size _bsaes_encrypt8,.-_bsaes_encrypt8 997116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch.type _bsaes_key_convert,%function 998116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch.align 4 999116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch_bsaes_key_convert: 1000116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch adr r6,_bsaes_key_convert 1001116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vld1.8 {q7}, [r4]! @ load round 0 key 1002116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch sub r6,r6,#_bsaes_key_convert-.LM0 1003116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vld1.8 {q15}, [r4]! @ load round 1 key 1004116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 1005116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vmov.i8 q8, #0x01 @ bit masks 1006116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vmov.i8 q9, #0x02 1007116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vmov.i8 q10, #0x04 1008116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vmov.i8 q11, #0x08 1009116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vmov.i8 q12, #0x10 1010116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vmov.i8 q13, #0x20 1011116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vldmia r6, {q14} @ .LM0 1012116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 1013116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#ifdef __ARMEL__ 1014116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vrev32.8 q7, q7 1015116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vrev32.8 q15, q15 1016116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#endif 1017116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch sub r5,r5,#1 1018116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vstmia r12!, {q7} @ save round 0 key 1019116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch b .Lkey_loop 1020116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 1021116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch.align 4 1022116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch.Lkey_loop: 1023116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vtbl.8 d14,{q15},d28 1024116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vtbl.8 d15,{q15},d29 1025116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vmov.i8 q6, #0x40 1026116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vmov.i8 q15, #0x80 1027116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 1028116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vtst.8 q0, q7, q8 1029116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vtst.8 q1, q7, q9 1030116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vtst.8 q2, q7, q10 1031116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vtst.8 q3, q7, q11 1032116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vtst.8 q4, q7, q12 1033116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vtst.8 q5, q7, q13 1034116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vtst.8 q6, q7, q6 1035116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vtst.8 q7, q7, q15 1036116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vld1.8 {q15}, [r4]! @ load next round key 1037116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vmvn q0, q0 @ "pnot" 1038116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vmvn q1, q1 1039116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vmvn q5, q5 1040116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vmvn q6, q6 1041116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#ifdef __ARMEL__ 1042116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vrev32.8 q15, q15 1043116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#endif 1044116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch subs r5,r5,#1 1045116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vstmia r12!,{q0-q7} @ write bit-sliced round key 1046116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch bne .Lkey_loop 1047116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 1048116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vmov.i8 q7,#0x63 @ compose .L63 1049116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch @ don't save last round key 1050116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch bx lr 1051116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch.size _bsaes_key_convert,.-_bsaes_key_convert 1052116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch.extern AES_cbc_encrypt 1053116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch.extern AES_decrypt 1054116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 1055116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch.global bsaes_cbc_encrypt 10565f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles).hidden bsaes_cbc_encrypt 1057116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch.type bsaes_cbc_encrypt,%function 1058116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch.align 5 1059116680a4aac90f2aa7413d9095a592090648e557Ben Murdochbsaes_cbc_encrypt: 1060116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#ifndef __KERNEL__ 1061116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch cmp r2, #128 1062116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#ifndef __thumb__ 1063116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch blo AES_cbc_encrypt 1064116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#else 1065116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch bhs 1f 1066116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch b AES_cbc_encrypt 1067116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch1: 1068116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#endif 1069116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#endif 1070116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 1071116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch @ it is up to the caller to make sure we are called with enc == 0 1072116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 1073116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mov ip, sp 1074116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch stmdb sp!, {r4-r10, lr} 1075116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch VFP_ABI_PUSH 1076116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ldr r8, [ip] @ IV is 1st arg on the stack 1077116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mov r2, r2, lsr#4 @ len in 16 byte blocks 1078116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch sub sp, #0x10 @ scratch space to carry over the IV 1079116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mov r9, sp @ save sp 1080116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 1081116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ldr r10, [r3, #240] @ get # of rounds 1082116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#ifndef BSAES_ASM_EXTENDED_KEY 1083116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch @ allocate the key schedule on the stack 1084116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch sub r12, sp, r10, lsl#7 @ 128 bytes per inner round key 1085116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r12, #96 @ sifze of bit-slices key schedule 1086116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 1087116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch @ populate the key schedule 1088116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mov r4, r3 @ pass key 1089116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mov r5, r10 @ pass # of rounds 1090116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mov sp, r12 @ sp is sp 1091116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch bl _bsaes_key_convert 1092116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vldmia sp, {q6} 1093116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vstmia r12, {q15} @ save last round key 1094116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q7, q7, q6 @ fix up round 0 key 1095116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vstmia sp, {q7} 1096116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#else 1097116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ldr r12, [r3, #244] 1098116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eors r12, #1 1099116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch beq 0f 1100116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 1101116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch @ populate the key schedule 1102116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch str r12, [r3, #244] 1103116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mov r4, r3 @ pass key 1104116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mov r5, r10 @ pass # of rounds 1105116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r12, r3, #248 @ pass key schedule 1106116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch bl _bsaes_key_convert 1107116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r4, r3, #248 1108116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vldmia r4, {q6} 1109116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vstmia r12, {q15} @ save last round key 1110116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q7, q7, q6 @ fix up round 0 key 1111116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vstmia r4, {q7} 1112116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 1113116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch.align 2 1114116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch0: 1115116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#endif 1116116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 1117116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vld1.8 {q15}, [r8] @ load IV 1118116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch b .Lcbc_dec_loop 1119116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 1120116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch.align 4 1121116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch.Lcbc_dec_loop: 1122116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch subs r2, r2, #0x8 1123116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch bmi .Lcbc_dec_loop_finish 1124116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 1125116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vld1.8 {q0-q1}, [r0]! @ load input 1126116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vld1.8 {q2-q3}, [r0]! 1127116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#ifndef BSAES_ASM_EXTENDED_KEY 1128116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mov r4, sp @ pass the key 1129116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#else 1130116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r4, r3, #248 1131116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#endif 1132116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vld1.8 {q4-q5}, [r0]! 1133116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mov r5, r10 1134116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vld1.8 {q6-q7}, [r0] 1135116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch sub r0, r0, #0x60 1136116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vstmia r9, {q15} @ put aside IV 1137116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 1138116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch bl _bsaes_decrypt8 1139116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 1140116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vldmia r9, {q14} @ reload IV 1141116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vld1.8 {q8-q9}, [r0]! @ reload input 1142116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q0, q0, q14 @ ^= IV 1143116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vld1.8 {q10-q11}, [r0]! 1144116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q1, q1, q8 1145116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q6, q6, q9 1146116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vld1.8 {q12-q13}, [r0]! 1147116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q4, q4, q10 1148116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q2, q2, q11 1149116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vld1.8 {q14-q15}, [r0]! 1150116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q7, q7, q12 1151116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vst1.8 {q0-q1}, [r1]! @ write output 1152116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q3, q3, q13 1153116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vst1.8 {q6}, [r1]! 1154116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q5, q5, q14 1155116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vst1.8 {q4}, [r1]! 1156116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vst1.8 {q2}, [r1]! 1157116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vst1.8 {q7}, [r1]! 1158116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vst1.8 {q3}, [r1]! 1159116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vst1.8 {q5}, [r1]! 1160116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 1161116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch b .Lcbc_dec_loop 1162116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 1163116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch.Lcbc_dec_loop_finish: 1164116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch adds r2, r2, #8 1165116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch beq .Lcbc_dec_done 1166116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 1167116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vld1.8 {q0}, [r0]! @ load input 1168116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch cmp r2, #2 1169116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch blo .Lcbc_dec_one 1170116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vld1.8 {q1}, [r0]! 1171116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#ifndef BSAES_ASM_EXTENDED_KEY 1172116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mov r4, sp @ pass the key 1173116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#else 1174116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r4, r3, #248 1175116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#endif 1176116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mov r5, r10 1177116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vstmia r9, {q15} @ put aside IV 1178116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch beq .Lcbc_dec_two 1179116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vld1.8 {q2}, [r0]! 1180116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch cmp r2, #4 1181116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch blo .Lcbc_dec_three 1182116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vld1.8 {q3}, [r0]! 1183116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch beq .Lcbc_dec_four 1184116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vld1.8 {q4}, [r0]! 1185116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch cmp r2, #6 1186116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch blo .Lcbc_dec_five 1187116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vld1.8 {q5}, [r0]! 1188116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch beq .Lcbc_dec_six 1189116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vld1.8 {q6}, [r0]! 1190116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch sub r0, r0, #0x70 1191116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 1192116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch bl _bsaes_decrypt8 1193116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 1194116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vldmia r9, {q14} @ reload IV 1195116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vld1.8 {q8-q9}, [r0]! @ reload input 1196116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q0, q0, q14 @ ^= IV 1197116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vld1.8 {q10-q11}, [r0]! 1198116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q1, q1, q8 1199116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q6, q6, q9 1200116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vld1.8 {q12-q13}, [r0]! 1201116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q4, q4, q10 1202116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q2, q2, q11 1203116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vld1.8 {q15}, [r0]! 1204116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q7, q7, q12 1205116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vst1.8 {q0-q1}, [r1]! @ write output 1206116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q3, q3, q13 1207116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vst1.8 {q6}, [r1]! 1208116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vst1.8 {q4}, [r1]! 1209116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vst1.8 {q2}, [r1]! 1210116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vst1.8 {q7}, [r1]! 1211116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vst1.8 {q3}, [r1]! 1212116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch b .Lcbc_dec_done 1213116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch.align 4 1214116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch.Lcbc_dec_six: 1215116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch sub r0, r0, #0x60 1216116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch bl _bsaes_decrypt8 1217116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vldmia r9,{q14} @ reload IV 1218116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vld1.8 {q8-q9}, [r0]! @ reload input 1219116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q0, q0, q14 @ ^= IV 1220116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vld1.8 {q10-q11}, [r0]! 1221116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q1, q1, q8 1222116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q6, q6, q9 1223116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vld1.8 {q12}, [r0]! 1224116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q4, q4, q10 1225116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q2, q2, q11 1226116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vld1.8 {q15}, [r0]! 1227116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q7, q7, q12 1228116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vst1.8 {q0-q1}, [r1]! @ write output 1229116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vst1.8 {q6}, [r1]! 1230116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vst1.8 {q4}, [r1]! 1231116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vst1.8 {q2}, [r1]! 1232116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vst1.8 {q7}, [r1]! 1233116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch b .Lcbc_dec_done 1234116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch.align 4 1235116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch.Lcbc_dec_five: 1236116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch sub r0, r0, #0x50 1237116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch bl _bsaes_decrypt8 1238116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vldmia r9, {q14} @ reload IV 1239116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vld1.8 {q8-q9}, [r0]! @ reload input 1240116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q0, q0, q14 @ ^= IV 1241116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vld1.8 {q10-q11}, [r0]! 1242116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q1, q1, q8 1243116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q6, q6, q9 1244116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vld1.8 {q15}, [r0]! 1245116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q4, q4, q10 1246116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vst1.8 {q0-q1}, [r1]! @ write output 1247116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q2, q2, q11 1248116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vst1.8 {q6}, [r1]! 1249116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vst1.8 {q4}, [r1]! 1250116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vst1.8 {q2}, [r1]! 1251116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch b .Lcbc_dec_done 1252116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch.align 4 1253116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch.Lcbc_dec_four: 1254116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch sub r0, r0, #0x40 1255116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch bl _bsaes_decrypt8 1256116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vldmia r9, {q14} @ reload IV 1257116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vld1.8 {q8-q9}, [r0]! @ reload input 1258116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q0, q0, q14 @ ^= IV 1259116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vld1.8 {q10}, [r0]! 1260116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q1, q1, q8 1261116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q6, q6, q9 1262116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vld1.8 {q15}, [r0]! 1263116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q4, q4, q10 1264116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vst1.8 {q0-q1}, [r1]! @ write output 1265116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vst1.8 {q6}, [r1]! 1266116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vst1.8 {q4}, [r1]! 1267116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch b .Lcbc_dec_done 1268116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch.align 4 1269116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch.Lcbc_dec_three: 1270116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch sub r0, r0, #0x30 1271116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch bl _bsaes_decrypt8 1272116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vldmia r9, {q14} @ reload IV 1273116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vld1.8 {q8-q9}, [r0]! @ reload input 1274116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q0, q0, q14 @ ^= IV 1275116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vld1.8 {q15}, [r0]! 1276116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q1, q1, q8 1277116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q6, q6, q9 1278116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vst1.8 {q0-q1}, [r1]! @ write output 1279116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vst1.8 {q6}, [r1]! 1280116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch b .Lcbc_dec_done 1281116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch.align 4 1282116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch.Lcbc_dec_two: 1283116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch sub r0, r0, #0x20 1284116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch bl _bsaes_decrypt8 1285116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vldmia r9, {q14} @ reload IV 1286116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vld1.8 {q8}, [r0]! @ reload input 1287116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q0, q0, q14 @ ^= IV 1288116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vld1.8 {q15}, [r0]! @ reload input 1289116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q1, q1, q8 1290116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vst1.8 {q0-q1}, [r1]! @ write output 1291116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch b .Lcbc_dec_done 1292116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch.align 4 1293116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch.Lcbc_dec_one: 1294116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch sub r0, r0, #0x10 1295116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mov r10, r1 @ save original out pointer 1296116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mov r1, r9 @ use the iv scratch space as out buffer 1297116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mov r2, r3 1298116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vmov q4,q15 @ just in case ensure that IV 1299116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vmov q5,q0 @ and input are preserved 1300116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch bl AES_decrypt 1301116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vld1.8 {q0}, [r9,:64] @ load result 1302116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q0, q0, q4 @ ^= IV 1303116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vmov q15, q5 @ q5 holds input 1304116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vst1.8 {q0}, [r10] @ write output 1305116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 1306116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch.Lcbc_dec_done: 1307116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#ifndef BSAES_ASM_EXTENDED_KEY 1308116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vmov.i32 q0, #0 1309116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vmov.i32 q1, #0 1310116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch.Lcbc_dec_bzero: @ wipe key schedule [if any] 1311116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vstmia sp!, {q0-q1} 1312116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch cmp sp, r9 1313116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch bne .Lcbc_dec_bzero 1314116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#endif 1315116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 1316116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mov sp, r9 1317116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add sp, #0x10 @ add sp,r9,#0x10 is no good for thumb 1318116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vst1.8 {q15}, [r8] @ return IV 1319116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch VFP_ABI_POP 1320116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ldmia sp!, {r4-r10, pc} 1321116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch.size bsaes_cbc_encrypt,.-bsaes_cbc_encrypt 1322116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch.extern AES_encrypt 1323116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch.global bsaes_ctr32_encrypt_blocks 13245f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles).hidden bsaes_ctr32_encrypt_blocks 1325116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch.type bsaes_ctr32_encrypt_blocks,%function 1326116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch.align 5 1327116680a4aac90f2aa7413d9095a592090648e557Ben Murdochbsaes_ctr32_encrypt_blocks: 1328116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch cmp r2, #8 @ use plain AES for 1329116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch blo .Lctr_enc_short @ small sizes 1330116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 1331116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mov ip, sp 1332116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch stmdb sp!, {r4-r10, lr} 1333116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch VFP_ABI_PUSH 1334116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ldr r8, [ip] @ ctr is 1st arg on the stack 1335116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch sub sp, sp, #0x10 @ scratch space to carry over the ctr 1336116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mov r9, sp @ save sp 1337116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 1338116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ldr r10, [r3, #240] @ get # of rounds 1339116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#ifndef BSAES_ASM_EXTENDED_KEY 1340116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch @ allocate the key schedule on the stack 1341116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch sub r12, sp, r10, lsl#7 @ 128 bytes per inner round key 1342116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r12, #96 @ size of bit-sliced key schedule 1343116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 1344116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch @ populate the key schedule 1345116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mov r4, r3 @ pass key 1346116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mov r5, r10 @ pass # of rounds 1347116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mov sp, r12 @ sp is sp 1348116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch bl _bsaes_key_convert 1349116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q7,q7,q15 @ fix up last round key 1350116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vstmia r12, {q7} @ save last round key 1351116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 1352116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vld1.8 {q0}, [r8] @ load counter 1353116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r8, r6, #.LREVM0SR-.LM0 @ borrow r8 1354116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vldmia sp, {q4} @ load round0 key 1355116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#else 1356116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ldr r12, [r3, #244] 1357116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eors r12, #1 1358116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch beq 0f 1359116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 1360116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch @ populate the key schedule 1361116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch str r12, [r3, #244] 1362116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mov r4, r3 @ pass key 1363116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mov r5, r10 @ pass # of rounds 1364116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r12, r3, #248 @ pass key schedule 1365116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch bl _bsaes_key_convert 1366116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q7,q7,q15 @ fix up last round key 1367116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vstmia r12, {q7} @ save last round key 1368116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 1369116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch.align 2 1370116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch0: add r12, r3, #248 1371116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vld1.8 {q0}, [r8] @ load counter 1372116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch adrl r8, .LREVM0SR @ borrow r8 1373116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vldmia r12, {q4} @ load round0 key 1374116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch sub sp, #0x10 @ place for adjusted round0 key 1375116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#endif 1376116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 1377116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vmov.i32 q8,#1 @ compose 1<<96 1378116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q9,q9,q9 1379116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vrev32.8 q0,q0 1380116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vext.8 q8,q9,q8,#4 1381116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vrev32.8 q4,q4 1382116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vadd.u32 q9,q8,q8 @ compose 2<<96 1383116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vstmia sp, {q4} @ save adjusted round0 key 1384116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch b .Lctr_enc_loop 1385116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 1386116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch.align 4 1387116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch.Lctr_enc_loop: 1388116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vadd.u32 q10, q8, q9 @ compose 3<<96 1389116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vadd.u32 q1, q0, q8 @ +1 1390116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vadd.u32 q2, q0, q9 @ +2 1391116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vadd.u32 q3, q0, q10 @ +3 1392116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vadd.u32 q4, q1, q10 1393116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vadd.u32 q5, q2, q10 1394116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vadd.u32 q6, q3, q10 1395116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vadd.u32 q7, q4, q10 1396116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vadd.u32 q10, q5, q10 @ next counter 1397116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 1398116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch @ Borrow prologue from _bsaes_encrypt8 to use the opportunity 1399116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch @ to flip byte order in 32-bit counter 1400116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 1401116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vldmia sp, {q9} @ load round0 key 1402116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#ifndef BSAES_ASM_EXTENDED_KEY 1403116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r4, sp, #0x10 @ pass next round key 1404116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#else 1405116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r4, r3, #264 1406116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#endif 1407116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vldmia r8, {q8} @ .LREVM0SR 1408116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mov r5, r10 @ pass rounds 1409116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vstmia r9, {q10} @ save next counter 1410116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch sub r6, r8, #.LREVM0SR-.LSR @ pass constants 1411116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 1412116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch bl _bsaes_encrypt8_alt 1413116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 1414116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch subs r2, r2, #8 1415116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch blo .Lctr_enc_loop_done 1416116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 1417116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vld1.8 {q8-q9}, [r0]! @ load input 1418116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vld1.8 {q10-q11}, [r0]! 1419116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q0, q8 1420116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q1, q9 1421116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vld1.8 {q12-q13}, [r0]! 1422116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q4, q10 1423116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q6, q11 1424116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vld1.8 {q14-q15}, [r0]! 1425116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q3, q12 1426116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vst1.8 {q0-q1}, [r1]! @ write output 1427116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q7, q13 1428116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q2, q14 1429116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vst1.8 {q4}, [r1]! 1430116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q5, q15 1431116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vst1.8 {q6}, [r1]! 1432116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vmov.i32 q8, #1 @ compose 1<<96 1433116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vst1.8 {q3}, [r1]! 1434116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q9, q9, q9 1435116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vst1.8 {q7}, [r1]! 1436116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vext.8 q8, q9, q8, #4 1437116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vst1.8 {q2}, [r1]! 1438116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vadd.u32 q9,q8,q8 @ compose 2<<96 1439116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vst1.8 {q5}, [r1]! 1440116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vldmia r9, {q0} @ load counter 1441116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 1442116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch bne .Lctr_enc_loop 1443116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch b .Lctr_enc_done 1444116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 1445116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch.align 4 1446116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch.Lctr_enc_loop_done: 1447116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r2, r2, #8 1448116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vld1.8 {q8}, [r0]! @ load input 1449116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q0, q8 1450116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vst1.8 {q0}, [r1]! @ write output 1451116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch cmp r2, #2 1452116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch blo .Lctr_enc_done 1453116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vld1.8 {q9}, [r0]! 1454116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q1, q9 1455116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vst1.8 {q1}, [r1]! 1456116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch beq .Lctr_enc_done 1457116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vld1.8 {q10}, [r0]! 1458116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q4, q10 1459116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vst1.8 {q4}, [r1]! 1460116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch cmp r2, #4 1461116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch blo .Lctr_enc_done 1462116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vld1.8 {q11}, [r0]! 1463116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q6, q11 1464116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vst1.8 {q6}, [r1]! 1465116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch beq .Lctr_enc_done 1466116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vld1.8 {q12}, [r0]! 1467116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q3, q12 1468116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vst1.8 {q3}, [r1]! 1469116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch cmp r2, #6 1470116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch blo .Lctr_enc_done 1471116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vld1.8 {q13}, [r0]! 1472116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q7, q13 1473116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vst1.8 {q7}, [r1]! 1474116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch beq .Lctr_enc_done 1475116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vld1.8 {q14}, [r0] 1476116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q2, q14 1477116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vst1.8 {q2}, [r1]! 1478116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 1479116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch.Lctr_enc_done: 1480116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vmov.i32 q0, #0 1481116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vmov.i32 q1, #0 1482116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#ifndef BSAES_ASM_EXTENDED_KEY 1483116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch.Lctr_enc_bzero: @ wipe key schedule [if any] 1484116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vstmia sp!, {q0-q1} 1485116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch cmp sp, r9 1486116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch bne .Lctr_enc_bzero 1487116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#else 1488116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vstmia sp, {q0-q1} 1489116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#endif 1490116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 1491116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mov sp, r9 1492116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add sp, #0x10 @ add sp,r9,#0x10 is no good for thumb 1493116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch VFP_ABI_POP 1494116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ldmia sp!, {r4-r10, pc} @ return 1495116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 1496116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch.align 4 1497116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch.Lctr_enc_short: 1498116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ldr ip, [sp] @ ctr pointer is passed on stack 1499116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch stmdb sp!, {r4-r8, lr} 1500116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 1501116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mov r4, r0 @ copy arguments 1502116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mov r5, r1 1503116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mov r6, r2 1504116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mov r7, r3 1505116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ldr r8, [ip, #12] @ load counter LSW 1506116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vld1.8 {q1}, [ip] @ load whole counter value 1507116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#ifdef __ARMEL__ 1508116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch rev r8, r8 1509116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#endif 1510116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch sub sp, sp, #0x10 1511116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vst1.8 {q1}, [sp,:64] @ copy counter value 1512116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch sub sp, sp, #0x10 1513116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 1514116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch.Lctr_enc_short_loop: 1515116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r0, sp, #0x10 @ input counter value 1516116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mov r1, sp @ output on the stack 1517116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mov r2, r7 @ key 1518116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 1519116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch bl AES_encrypt 1520116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 1521116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vld1.8 {q0}, [r4]! @ load input 1522116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vld1.8 {q1}, [sp,:64] @ load encrypted counter 1523116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r8, r8, #1 1524116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#ifdef __ARMEL__ 1525116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch rev r0, r8 1526116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch str r0, [sp, #0x1c] @ next counter value 1527116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#else 1528116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch str r8, [sp, #0x1c] @ next counter value 1529116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#endif 1530116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q0,q0,q1 1531116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vst1.8 {q0}, [r5]! @ store output 1532116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch subs r6, r6, #1 1533116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch bne .Lctr_enc_short_loop 1534116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 1535116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vmov.i32 q0, #0 1536116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vmov.i32 q1, #0 1537116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vstmia sp!, {q0-q1} 1538116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 1539116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ldmia sp!, {r4-r8, pc} 1540116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch.size bsaes_ctr32_encrypt_blocks,.-bsaes_ctr32_encrypt_blocks 1541116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch.globl bsaes_xts_encrypt 15425f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles).hidden bsaes_xts_encrypt 1543116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch.type bsaes_xts_encrypt,%function 1544116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch.align 4 1545116680a4aac90f2aa7413d9095a592090648e557Ben Murdochbsaes_xts_encrypt: 1546116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mov ip, sp 1547116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch stmdb sp!, {r4-r10, lr} @ 0x20 1548116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch VFP_ABI_PUSH 1549116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mov r6, sp @ future r3 1550116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 1551116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mov r7, r0 1552116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mov r8, r1 1553116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mov r9, r2 1554116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mov r10, r3 1555116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 1556116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch sub r0, sp, #0x10 @ 0x10 1557116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch bic r0, #0xf @ align at 16 bytes 1558116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mov sp, r0 1559116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 1560116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#ifdef XTS_CHAIN_TWEAK 1561116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ldr r0, [ip] @ pointer to input tweak 1562116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#else 1563116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch @ generate initial tweak 1564116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ldr r0, [ip, #4] @ iv[] 1565116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mov r1, sp 1566116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ldr r2, [ip, #0] @ key2 1567116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch bl AES_encrypt 1568116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mov r0,sp @ pointer to initial tweak 1569116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#endif 1570116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 1571116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ldr r1, [r10, #240] @ get # of rounds 1572116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mov r3, r6 1573116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#ifndef BSAES_ASM_EXTENDED_KEY 1574116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch @ allocate the key schedule on the stack 1575116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch sub r12, sp, r1, lsl#7 @ 128 bytes per inner round key 1576116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch @ add r12, #96 @ size of bit-sliced key schedule 1577116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch sub r12, #48 @ place for tweak[9] 1578116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 1579116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch @ populate the key schedule 1580116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mov r4, r10 @ pass key 1581116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mov r5, r1 @ pass # of rounds 1582116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mov sp, r12 1583116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r12, #0x90 @ pass key schedule 1584116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch bl _bsaes_key_convert 1585116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q7, q7, q15 @ fix up last round key 1586116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vstmia r12, {q7} @ save last round key 1587116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#else 1588116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ldr r12, [r10, #244] 1589116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eors r12, #1 1590116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch beq 0f 1591116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 1592116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch str r12, [r10, #244] 1593116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mov r4, r10 @ pass key 1594116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mov r5, r1 @ pass # of rounds 1595116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r12, r10, #248 @ pass key schedule 1596116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch bl _bsaes_key_convert 1597116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q7, q7, q15 @ fix up last round key 1598116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vstmia r12, {q7} 1599116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 1600116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch.align 2 1601116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch0: sub sp, #0x90 @ place for tweak[9] 1602116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#endif 1603116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 1604116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vld1.8 {q8}, [r0] @ initial tweak 1605116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch adr r2, .Lxts_magic 1606116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 1607116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch subs r9, #0x80 1608116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch blo .Lxts_enc_short 1609116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch b .Lxts_enc_loop 1610116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 1611116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch.align 4 1612116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch.Lxts_enc_loop: 1613116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vldmia r2, {q5} @ load XTS magic 1614116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vshr.s64 q6, q8, #63 1615116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mov r0, sp 1616116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vand q6, q6, q5 1617116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vadd.u64 q9, q8, q8 1618116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vst1.64 {q8}, [r0,:128]! 1619116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vswp d13,d12 1620116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vshr.s64 q7, q9, #63 1621116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q9, q9, q6 1622116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vand q7, q7, q5 1623116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vadd.u64 q10, q9, q9 1624116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vst1.64 {q9}, [r0,:128]! 1625116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vswp d15,d14 1626116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vshr.s64 q6, q10, #63 1627116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q10, q10, q7 1628116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vand q6, q6, q5 1629116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vld1.8 {q0}, [r7]! 1630116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vadd.u64 q11, q10, q10 1631116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vst1.64 {q10}, [r0,:128]! 1632116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vswp d13,d12 1633116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vshr.s64 q7, q11, #63 1634116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q11, q11, q6 1635116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vand q7, q7, q5 1636116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vld1.8 {q1}, [r7]! 1637116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q0, q0, q8 1638116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vadd.u64 q12, q11, q11 1639116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vst1.64 {q11}, [r0,:128]! 1640116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vswp d15,d14 1641116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vshr.s64 q6, q12, #63 1642116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q12, q12, q7 1643116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vand q6, q6, q5 1644116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vld1.8 {q2}, [r7]! 1645116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q1, q1, q9 1646116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vadd.u64 q13, q12, q12 1647116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vst1.64 {q12}, [r0,:128]! 1648116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vswp d13,d12 1649116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vshr.s64 q7, q13, #63 1650116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q13, q13, q6 1651116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vand q7, q7, q5 1652116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vld1.8 {q3}, [r7]! 1653116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q2, q2, q10 1654116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vadd.u64 q14, q13, q13 1655116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vst1.64 {q13}, [r0,:128]! 1656116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vswp d15,d14 1657116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vshr.s64 q6, q14, #63 1658116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q14, q14, q7 1659116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vand q6, q6, q5 1660116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vld1.8 {q4}, [r7]! 1661116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q3, q3, q11 1662116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vadd.u64 q15, q14, q14 1663116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vst1.64 {q14}, [r0,:128]! 1664116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vswp d13,d12 1665116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vshr.s64 q7, q15, #63 1666116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q15, q15, q6 1667116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vand q7, q7, q5 1668116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vld1.8 {q5}, [r7]! 1669116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q4, q4, q12 1670116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vadd.u64 q8, q15, q15 1671116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vst1.64 {q15}, [r0,:128]! 1672116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vswp d15,d14 1673116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q8, q8, q7 1674116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vst1.64 {q8}, [r0,:128] @ next round tweak 1675116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 1676116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vld1.8 {q6-q7}, [r7]! 1677116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q5, q5, q13 1678116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#ifndef BSAES_ASM_EXTENDED_KEY 1679116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r4, sp, #0x90 @ pass key schedule 1680116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#else 1681116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r4, r10, #248 @ pass key schedule 1682116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#endif 1683116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q6, q6, q14 1684116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mov r5, r1 @ pass rounds 1685116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q7, q7, q15 1686116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mov r0, sp 1687116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 1688116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch bl _bsaes_encrypt8 1689116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 1690116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vld1.64 {q8-q9}, [r0,:128]! 1691116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vld1.64 {q10-q11}, [r0,:128]! 1692116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q0, q0, q8 1693116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vld1.64 {q12-q13}, [r0,:128]! 1694116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q1, q1, q9 1695116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q8, q4, q10 1696116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vst1.8 {q0-q1}, [r8]! 1697116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q9, q6, q11 1698116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vld1.64 {q14-q15}, [r0,:128]! 1699116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q10, q3, q12 1700116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vst1.8 {q8-q9}, [r8]! 1701116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q11, q7, q13 1702116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q12, q2, q14 1703116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vst1.8 {q10-q11}, [r8]! 1704116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q13, q5, q15 1705116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vst1.8 {q12-q13}, [r8]! 1706116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 1707116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vld1.64 {q8}, [r0,:128] @ next round tweak 1708116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 1709116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch subs r9, #0x80 1710116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch bpl .Lxts_enc_loop 1711116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 1712116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch.Lxts_enc_short: 1713116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch adds r9, #0x70 1714116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch bmi .Lxts_enc_done 1715116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 1716116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vldmia r2, {q5} @ load XTS magic 1717116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vshr.s64 q7, q8, #63 1718116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mov r0, sp 1719116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vand q7, q7, q5 1720116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vadd.u64 q9, q8, q8 1721116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vst1.64 {q8}, [r0,:128]! 1722116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vswp d15,d14 1723116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vshr.s64 q6, q9, #63 1724116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q9, q9, q7 1725116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vand q6, q6, q5 1726116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vadd.u64 q10, q9, q9 1727116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vst1.64 {q9}, [r0,:128]! 1728116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vswp d13,d12 1729116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vshr.s64 q7, q10, #63 1730116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q10, q10, q6 1731116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vand q7, q7, q5 1732116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vld1.8 {q0}, [r7]! 1733116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch subs r9, #0x10 1734116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch bmi .Lxts_enc_1 1735116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vadd.u64 q11, q10, q10 1736116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vst1.64 {q10}, [r0,:128]! 1737116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vswp d15,d14 1738116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vshr.s64 q6, q11, #63 1739116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q11, q11, q7 1740116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vand q6, q6, q5 1741116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vld1.8 {q1}, [r7]! 1742116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch subs r9, #0x10 1743116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch bmi .Lxts_enc_2 1744116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q0, q0, q8 1745116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vadd.u64 q12, q11, q11 1746116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vst1.64 {q11}, [r0,:128]! 1747116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vswp d13,d12 1748116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vshr.s64 q7, q12, #63 1749116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q12, q12, q6 1750116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vand q7, q7, q5 1751116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vld1.8 {q2}, [r7]! 1752116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch subs r9, #0x10 1753116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch bmi .Lxts_enc_3 1754116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q1, q1, q9 1755116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vadd.u64 q13, q12, q12 1756116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vst1.64 {q12}, [r0,:128]! 1757116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vswp d15,d14 1758116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vshr.s64 q6, q13, #63 1759116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q13, q13, q7 1760116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vand q6, q6, q5 1761116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vld1.8 {q3}, [r7]! 1762116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch subs r9, #0x10 1763116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch bmi .Lxts_enc_4 1764116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q2, q2, q10 1765116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vadd.u64 q14, q13, q13 1766116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vst1.64 {q13}, [r0,:128]! 1767116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vswp d13,d12 1768116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vshr.s64 q7, q14, #63 1769116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q14, q14, q6 1770116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vand q7, q7, q5 1771116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vld1.8 {q4}, [r7]! 1772116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch subs r9, #0x10 1773116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch bmi .Lxts_enc_5 1774116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q3, q3, q11 1775116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vadd.u64 q15, q14, q14 1776116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vst1.64 {q14}, [r0,:128]! 1777116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vswp d15,d14 1778116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vshr.s64 q6, q15, #63 1779116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q15, q15, q7 1780116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vand q6, q6, q5 1781116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vld1.8 {q5}, [r7]! 1782116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch subs r9, #0x10 1783116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch bmi .Lxts_enc_6 1784116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q4, q4, q12 1785116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch sub r9, #0x10 1786116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vst1.64 {q15}, [r0,:128] @ next round tweak 1787116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 1788116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vld1.8 {q6}, [r7]! 1789116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q5, q5, q13 1790116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#ifndef BSAES_ASM_EXTENDED_KEY 1791116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r4, sp, #0x90 @ pass key schedule 1792116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#else 1793116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r4, r10, #248 @ pass key schedule 1794116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#endif 1795116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q6, q6, q14 1796116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mov r5, r1 @ pass rounds 1797116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mov r0, sp 1798116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 1799116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch bl _bsaes_encrypt8 1800116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 1801116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vld1.64 {q8-q9}, [r0,:128]! 1802116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vld1.64 {q10-q11}, [r0,:128]! 1803116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q0, q0, q8 1804116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vld1.64 {q12-q13}, [r0,:128]! 1805116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q1, q1, q9 1806116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q8, q4, q10 1807116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vst1.8 {q0-q1}, [r8]! 1808116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q9, q6, q11 1809116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vld1.64 {q14}, [r0,:128]! 1810116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q10, q3, q12 1811116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vst1.8 {q8-q9}, [r8]! 1812116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q11, q7, q13 1813116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q12, q2, q14 1814116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vst1.8 {q10-q11}, [r8]! 1815116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vst1.8 {q12}, [r8]! 1816116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 1817116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vld1.64 {q8}, [r0,:128] @ next round tweak 1818116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch b .Lxts_enc_done 1819116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch.align 4 1820116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch.Lxts_enc_6: 1821116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vst1.64 {q14}, [r0,:128] @ next round tweak 1822116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 1823116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q4, q4, q12 1824116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#ifndef BSAES_ASM_EXTENDED_KEY 1825116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r4, sp, #0x90 @ pass key schedule 1826116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#else 1827116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r4, r10, #248 @ pass key schedule 1828116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#endif 1829116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q5, q5, q13 1830116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mov r5, r1 @ pass rounds 1831116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mov r0, sp 1832116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 1833116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch bl _bsaes_encrypt8 1834116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 1835116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vld1.64 {q8-q9}, [r0,:128]! 1836116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vld1.64 {q10-q11}, [r0,:128]! 1837116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q0, q0, q8 1838116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vld1.64 {q12-q13}, [r0,:128]! 1839116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q1, q1, q9 1840116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q8, q4, q10 1841116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vst1.8 {q0-q1}, [r8]! 1842116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q9, q6, q11 1843116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q10, q3, q12 1844116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vst1.8 {q8-q9}, [r8]! 1845116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q11, q7, q13 1846116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vst1.8 {q10-q11}, [r8]! 1847116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 1848116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vld1.64 {q8}, [r0,:128] @ next round tweak 1849116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch b .Lxts_enc_done 1850116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 1851116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch@ put this in range for both ARM and Thumb mode adr instructions 1852116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch.align 5 1853116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch.Lxts_magic: 1854116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch .quad 1, 0x87 1855116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 1856116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch.align 5 1857116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch.Lxts_enc_5: 1858116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vst1.64 {q13}, [r0,:128] @ next round tweak 1859116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 1860116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q3, q3, q11 1861116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#ifndef BSAES_ASM_EXTENDED_KEY 1862116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r4, sp, #0x90 @ pass key schedule 1863116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#else 1864116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r4, r10, #248 @ pass key schedule 1865116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#endif 1866116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q4, q4, q12 1867116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mov r5, r1 @ pass rounds 1868116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mov r0, sp 1869116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 1870116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch bl _bsaes_encrypt8 1871116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 1872116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vld1.64 {q8-q9}, [r0,:128]! 1873116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vld1.64 {q10-q11}, [r0,:128]! 1874116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q0, q0, q8 1875116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vld1.64 {q12}, [r0,:128]! 1876116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q1, q1, q9 1877116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q8, q4, q10 1878116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vst1.8 {q0-q1}, [r8]! 1879116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q9, q6, q11 1880116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q10, q3, q12 1881116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vst1.8 {q8-q9}, [r8]! 1882116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vst1.8 {q10}, [r8]! 1883116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 1884116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vld1.64 {q8}, [r0,:128] @ next round tweak 1885116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch b .Lxts_enc_done 1886116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch.align 4 1887116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch.Lxts_enc_4: 1888116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vst1.64 {q12}, [r0,:128] @ next round tweak 1889116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 1890116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q2, q2, q10 1891116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#ifndef BSAES_ASM_EXTENDED_KEY 1892116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r4, sp, #0x90 @ pass key schedule 1893116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#else 1894116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r4, r10, #248 @ pass key schedule 1895116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#endif 1896116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q3, q3, q11 1897116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mov r5, r1 @ pass rounds 1898116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mov r0, sp 1899116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 1900116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch bl _bsaes_encrypt8 1901116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 1902116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vld1.64 {q8-q9}, [r0,:128]! 1903116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vld1.64 {q10-q11}, [r0,:128]! 1904116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q0, q0, q8 1905116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q1, q1, q9 1906116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q8, q4, q10 1907116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vst1.8 {q0-q1}, [r8]! 1908116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q9, q6, q11 1909116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vst1.8 {q8-q9}, [r8]! 1910116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 1911116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vld1.64 {q8}, [r0,:128] @ next round tweak 1912116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch b .Lxts_enc_done 1913116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch.align 4 1914116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch.Lxts_enc_3: 1915116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vst1.64 {q11}, [r0,:128] @ next round tweak 1916116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 1917116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q1, q1, q9 1918116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#ifndef BSAES_ASM_EXTENDED_KEY 1919116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r4, sp, #0x90 @ pass key schedule 1920116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#else 1921116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r4, r10, #248 @ pass key schedule 1922116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#endif 1923116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q2, q2, q10 1924116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mov r5, r1 @ pass rounds 1925116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mov r0, sp 1926116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 1927116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch bl _bsaes_encrypt8 1928116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 1929116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vld1.64 {q8-q9}, [r0,:128]! 1930116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vld1.64 {q10}, [r0,:128]! 1931116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q0, q0, q8 1932116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q1, q1, q9 1933116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q8, q4, q10 1934116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vst1.8 {q0-q1}, [r8]! 1935116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vst1.8 {q8}, [r8]! 1936116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 1937116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vld1.64 {q8}, [r0,:128] @ next round tweak 1938116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch b .Lxts_enc_done 1939116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch.align 4 1940116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch.Lxts_enc_2: 1941116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vst1.64 {q10}, [r0,:128] @ next round tweak 1942116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 1943116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q0, q0, q8 1944116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#ifndef BSAES_ASM_EXTENDED_KEY 1945116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r4, sp, #0x90 @ pass key schedule 1946116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#else 1947116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r4, r10, #248 @ pass key schedule 1948116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#endif 1949116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q1, q1, q9 1950116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mov r5, r1 @ pass rounds 1951116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mov r0, sp 1952116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 1953116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch bl _bsaes_encrypt8 1954116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 1955116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vld1.64 {q8-q9}, [r0,:128]! 1956116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q0, q0, q8 1957116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q1, q1, q9 1958116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vst1.8 {q0-q1}, [r8]! 1959116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 1960116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vld1.64 {q8}, [r0,:128] @ next round tweak 1961116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch b .Lxts_enc_done 1962116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch.align 4 1963116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch.Lxts_enc_1: 1964116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mov r0, sp 1965116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q0, q8 1966116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mov r1, sp 1967116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vst1.8 {q0}, [sp,:128] 1968116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mov r2, r10 1969116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mov r4, r3 @ preserve fp 1970116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 1971116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch bl AES_encrypt 1972116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 1973116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vld1.8 {q0}, [sp,:128] 1974116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q0, q0, q8 1975116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vst1.8 {q0}, [r8]! 1976116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mov r3, r4 1977116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 1978116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vmov q8, q9 @ next round tweak 1979116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 1980116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch.Lxts_enc_done: 1981116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#ifndef XTS_CHAIN_TWEAK 1982116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch adds r9, #0x10 1983116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch beq .Lxts_enc_ret 1984116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch sub r6, r8, #0x10 1985116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 1986116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch.Lxts_enc_steal: 1987116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ldrb r0, [r7], #1 1988116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ldrb r1, [r8, #-0x10] 1989116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch strb r0, [r8, #-0x10] 1990116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch strb r1, [r8], #1 1991116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 1992116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch subs r9, #1 1993116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch bhi .Lxts_enc_steal 1994116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 1995116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vld1.8 {q0}, [r6] 1996116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mov r0, sp 1997116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q0, q0, q8 1998116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mov r1, sp 1999116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vst1.8 {q0}, [sp,:128] 2000116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mov r2, r10 2001116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mov r4, r3 @ preserve fp 2002116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 2003116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch bl AES_encrypt 2004116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 2005116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vld1.8 {q0}, [sp,:128] 2006116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q0, q0, q8 2007116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vst1.8 {q0}, [r6] 2008116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mov r3, r4 2009116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#endif 2010116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 2011116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch.Lxts_enc_ret: 2012116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch bic r0, r3, #0xf 2013116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vmov.i32 q0, #0 2014116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vmov.i32 q1, #0 2015116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#ifdef XTS_CHAIN_TWEAK 2016116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ldr r1, [r3, #0x20+VFP_ABI_FRAME] @ chain tweak 2017116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#endif 2018116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch.Lxts_enc_bzero: @ wipe key schedule [if any] 2019116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vstmia sp!, {q0-q1} 2020116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch cmp sp, r0 2021116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch bne .Lxts_enc_bzero 2022116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 2023116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mov sp, r3 2024116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#ifdef XTS_CHAIN_TWEAK 2025116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vst1.8 {q8}, [r1] 2026116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#endif 2027116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch VFP_ABI_POP 2028116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ldmia sp!, {r4-r10, pc} @ return 2029116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 2030116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch.size bsaes_xts_encrypt,.-bsaes_xts_encrypt 2031116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 2032116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch.globl bsaes_xts_decrypt 20335f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles).hidden bsaes_xts_decrypt 2034116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch.type bsaes_xts_decrypt,%function 2035116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch.align 4 2036116680a4aac90f2aa7413d9095a592090648e557Ben Murdochbsaes_xts_decrypt: 2037116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mov ip, sp 2038116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch stmdb sp!, {r4-r10, lr} @ 0x20 2039116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch VFP_ABI_PUSH 2040116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mov r6, sp @ future r3 2041116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 2042116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mov r7, r0 2043116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mov r8, r1 2044116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mov r9, r2 2045116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mov r10, r3 2046116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 2047116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch sub r0, sp, #0x10 @ 0x10 2048116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch bic r0, #0xf @ align at 16 bytes 2049116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mov sp, r0 2050116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 2051116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#ifdef XTS_CHAIN_TWEAK 2052116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ldr r0, [ip] @ pointer to input tweak 2053116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#else 2054116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch @ generate initial tweak 2055116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ldr r0, [ip, #4] @ iv[] 2056116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mov r1, sp 2057116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ldr r2, [ip, #0] @ key2 2058116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch bl AES_encrypt 2059116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mov r0, sp @ pointer to initial tweak 2060116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#endif 2061116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 2062116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ldr r1, [r10, #240] @ get # of rounds 2063116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mov r3, r6 2064116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#ifndef BSAES_ASM_EXTENDED_KEY 2065116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch @ allocate the key schedule on the stack 2066116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch sub r12, sp, r1, lsl#7 @ 128 bytes per inner round key 2067116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch @ add r12, #96 @ size of bit-sliced key schedule 2068116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch sub r12, #48 @ place for tweak[9] 2069116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 2070116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch @ populate the key schedule 2071116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mov r4, r10 @ pass key 2072116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mov r5, r1 @ pass # of rounds 2073116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mov sp, r12 2074116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r12, #0x90 @ pass key schedule 2075116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch bl _bsaes_key_convert 2076116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r4, sp, #0x90 2077116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vldmia r4, {q6} 2078116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vstmia r12, {q15} @ save last round key 2079116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q7, q7, q6 @ fix up round 0 key 2080116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vstmia r4, {q7} 2081116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#else 2082116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ldr r12, [r10, #244] 2083116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eors r12, #1 2084116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch beq 0f 2085116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 2086116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch str r12, [r10, #244] 2087116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mov r4, r10 @ pass key 2088116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mov r5, r1 @ pass # of rounds 2089116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r12, r10, #248 @ pass key schedule 2090116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch bl _bsaes_key_convert 2091116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r4, r10, #248 2092116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vldmia r4, {q6} 2093116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vstmia r12, {q15} @ save last round key 2094116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q7, q7, q6 @ fix up round 0 key 2095116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vstmia r4, {q7} 2096116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 2097116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch.align 2 2098116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch0: sub sp, #0x90 @ place for tweak[9] 2099116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#endif 2100116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vld1.8 {q8}, [r0] @ initial tweak 2101116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch adr r2, .Lxts_magic 2102116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 2103116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch tst r9, #0xf @ if not multiple of 16 2104116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch it ne @ Thumb2 thing, sanity check in ARM 2105116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch subne r9, #0x10 @ subtract another 16 bytes 2106116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch subs r9, #0x80 2107116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 2108116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch blo .Lxts_dec_short 2109116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch b .Lxts_dec_loop 2110116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 2111116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch.align 4 2112116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch.Lxts_dec_loop: 2113116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vldmia r2, {q5} @ load XTS magic 2114116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vshr.s64 q6, q8, #63 2115116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mov r0, sp 2116116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vand q6, q6, q5 2117116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vadd.u64 q9, q8, q8 2118116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vst1.64 {q8}, [r0,:128]! 2119116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vswp d13,d12 2120116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vshr.s64 q7, q9, #63 2121116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q9, q9, q6 2122116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vand q7, q7, q5 2123116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vadd.u64 q10, q9, q9 2124116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vst1.64 {q9}, [r0,:128]! 2125116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vswp d15,d14 2126116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vshr.s64 q6, q10, #63 2127116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q10, q10, q7 2128116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vand q6, q6, q5 2129116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vld1.8 {q0}, [r7]! 2130116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vadd.u64 q11, q10, q10 2131116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vst1.64 {q10}, [r0,:128]! 2132116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vswp d13,d12 2133116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vshr.s64 q7, q11, #63 2134116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q11, q11, q6 2135116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vand q7, q7, q5 2136116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vld1.8 {q1}, [r7]! 2137116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q0, q0, q8 2138116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vadd.u64 q12, q11, q11 2139116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vst1.64 {q11}, [r0,:128]! 2140116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vswp d15,d14 2141116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vshr.s64 q6, q12, #63 2142116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q12, q12, q7 2143116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vand q6, q6, q5 2144116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vld1.8 {q2}, [r7]! 2145116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q1, q1, q9 2146116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vadd.u64 q13, q12, q12 2147116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vst1.64 {q12}, [r0,:128]! 2148116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vswp d13,d12 2149116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vshr.s64 q7, q13, #63 2150116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q13, q13, q6 2151116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vand q7, q7, q5 2152116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vld1.8 {q3}, [r7]! 2153116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q2, q2, q10 2154116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vadd.u64 q14, q13, q13 2155116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vst1.64 {q13}, [r0,:128]! 2156116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vswp d15,d14 2157116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vshr.s64 q6, q14, #63 2158116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q14, q14, q7 2159116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vand q6, q6, q5 2160116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vld1.8 {q4}, [r7]! 2161116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q3, q3, q11 2162116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vadd.u64 q15, q14, q14 2163116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vst1.64 {q14}, [r0,:128]! 2164116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vswp d13,d12 2165116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vshr.s64 q7, q15, #63 2166116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q15, q15, q6 2167116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vand q7, q7, q5 2168116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vld1.8 {q5}, [r7]! 2169116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q4, q4, q12 2170116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vadd.u64 q8, q15, q15 2171116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vst1.64 {q15}, [r0,:128]! 2172116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vswp d15,d14 2173116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q8, q8, q7 2174116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vst1.64 {q8}, [r0,:128] @ next round tweak 2175116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 2176116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vld1.8 {q6-q7}, [r7]! 2177116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q5, q5, q13 2178116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#ifndef BSAES_ASM_EXTENDED_KEY 2179116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r4, sp, #0x90 @ pass key schedule 2180116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#else 2181116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r4, r10, #248 @ pass key schedule 2182116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#endif 2183116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q6, q6, q14 2184116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mov r5, r1 @ pass rounds 2185116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q7, q7, q15 2186116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mov r0, sp 2187116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 2188116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch bl _bsaes_decrypt8 2189116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 2190116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vld1.64 {q8-q9}, [r0,:128]! 2191116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vld1.64 {q10-q11}, [r0,:128]! 2192116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q0, q0, q8 2193116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vld1.64 {q12-q13}, [r0,:128]! 2194116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q1, q1, q9 2195116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q8, q6, q10 2196116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vst1.8 {q0-q1}, [r8]! 2197116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q9, q4, q11 2198116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vld1.64 {q14-q15}, [r0,:128]! 2199116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q10, q2, q12 2200116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vst1.8 {q8-q9}, [r8]! 2201116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q11, q7, q13 2202116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q12, q3, q14 2203116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vst1.8 {q10-q11}, [r8]! 2204116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q13, q5, q15 2205116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vst1.8 {q12-q13}, [r8]! 2206116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 2207116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vld1.64 {q8}, [r0,:128] @ next round tweak 2208116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 2209116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch subs r9, #0x80 2210116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch bpl .Lxts_dec_loop 2211116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 2212116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch.Lxts_dec_short: 2213116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch adds r9, #0x70 2214116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch bmi .Lxts_dec_done 2215116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 2216116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vldmia r2, {q5} @ load XTS magic 2217116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vshr.s64 q7, q8, #63 2218116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mov r0, sp 2219116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vand q7, q7, q5 2220116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vadd.u64 q9, q8, q8 2221116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vst1.64 {q8}, [r0,:128]! 2222116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vswp d15,d14 2223116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vshr.s64 q6, q9, #63 2224116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q9, q9, q7 2225116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vand q6, q6, q5 2226116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vadd.u64 q10, q9, q9 2227116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vst1.64 {q9}, [r0,:128]! 2228116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vswp d13,d12 2229116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vshr.s64 q7, q10, #63 2230116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q10, q10, q6 2231116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vand q7, q7, q5 2232116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vld1.8 {q0}, [r7]! 2233116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch subs r9, #0x10 2234116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch bmi .Lxts_dec_1 2235116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vadd.u64 q11, q10, q10 2236116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vst1.64 {q10}, [r0,:128]! 2237116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vswp d15,d14 2238116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vshr.s64 q6, q11, #63 2239116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q11, q11, q7 2240116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vand q6, q6, q5 2241116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vld1.8 {q1}, [r7]! 2242116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch subs r9, #0x10 2243116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch bmi .Lxts_dec_2 2244116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q0, q0, q8 2245116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vadd.u64 q12, q11, q11 2246116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vst1.64 {q11}, [r0,:128]! 2247116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vswp d13,d12 2248116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vshr.s64 q7, q12, #63 2249116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q12, q12, q6 2250116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vand q7, q7, q5 2251116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vld1.8 {q2}, [r7]! 2252116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch subs r9, #0x10 2253116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch bmi .Lxts_dec_3 2254116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q1, q1, q9 2255116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vadd.u64 q13, q12, q12 2256116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vst1.64 {q12}, [r0,:128]! 2257116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vswp d15,d14 2258116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vshr.s64 q6, q13, #63 2259116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q13, q13, q7 2260116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vand q6, q6, q5 2261116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vld1.8 {q3}, [r7]! 2262116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch subs r9, #0x10 2263116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch bmi .Lxts_dec_4 2264116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q2, q2, q10 2265116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vadd.u64 q14, q13, q13 2266116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vst1.64 {q13}, [r0,:128]! 2267116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vswp d13,d12 2268116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vshr.s64 q7, q14, #63 2269116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q14, q14, q6 2270116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vand q7, q7, q5 2271116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vld1.8 {q4}, [r7]! 2272116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch subs r9, #0x10 2273116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch bmi .Lxts_dec_5 2274116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q3, q3, q11 2275116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vadd.u64 q15, q14, q14 2276116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vst1.64 {q14}, [r0,:128]! 2277116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vswp d15,d14 2278116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vshr.s64 q6, q15, #63 2279116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q15, q15, q7 2280116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vand q6, q6, q5 2281116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vld1.8 {q5}, [r7]! 2282116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch subs r9, #0x10 2283116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch bmi .Lxts_dec_6 2284116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q4, q4, q12 2285116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch sub r9, #0x10 2286116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vst1.64 {q15}, [r0,:128] @ next round tweak 2287116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 2288116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vld1.8 {q6}, [r7]! 2289116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q5, q5, q13 2290116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#ifndef BSAES_ASM_EXTENDED_KEY 2291116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r4, sp, #0x90 @ pass key schedule 2292116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#else 2293116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r4, r10, #248 @ pass key schedule 2294116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#endif 2295116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q6, q6, q14 2296116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mov r5, r1 @ pass rounds 2297116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mov r0, sp 2298116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 2299116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch bl _bsaes_decrypt8 2300116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 2301116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vld1.64 {q8-q9}, [r0,:128]! 2302116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vld1.64 {q10-q11}, [r0,:128]! 2303116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q0, q0, q8 2304116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vld1.64 {q12-q13}, [r0,:128]! 2305116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q1, q1, q9 2306116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q8, q6, q10 2307116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vst1.8 {q0-q1}, [r8]! 2308116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q9, q4, q11 2309116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vld1.64 {q14}, [r0,:128]! 2310116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q10, q2, q12 2311116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vst1.8 {q8-q9}, [r8]! 2312116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q11, q7, q13 2313116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q12, q3, q14 2314116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vst1.8 {q10-q11}, [r8]! 2315116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vst1.8 {q12}, [r8]! 2316116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 2317116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vld1.64 {q8}, [r0,:128] @ next round tweak 2318116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch b .Lxts_dec_done 2319116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch.align 4 2320116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch.Lxts_dec_6: 2321116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vst1.64 {q14}, [r0,:128] @ next round tweak 2322116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 2323116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q4, q4, q12 2324116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#ifndef BSAES_ASM_EXTENDED_KEY 2325116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r4, sp, #0x90 @ pass key schedule 2326116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#else 2327116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r4, r10, #248 @ pass key schedule 2328116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#endif 2329116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q5, q5, q13 2330116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mov r5, r1 @ pass rounds 2331116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mov r0, sp 2332116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 2333116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch bl _bsaes_decrypt8 2334116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 2335116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vld1.64 {q8-q9}, [r0,:128]! 2336116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vld1.64 {q10-q11}, [r0,:128]! 2337116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q0, q0, q8 2338116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vld1.64 {q12-q13}, [r0,:128]! 2339116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q1, q1, q9 2340116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q8, q6, q10 2341116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vst1.8 {q0-q1}, [r8]! 2342116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q9, q4, q11 2343116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q10, q2, q12 2344116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vst1.8 {q8-q9}, [r8]! 2345116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q11, q7, q13 2346116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vst1.8 {q10-q11}, [r8]! 2347116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 2348116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vld1.64 {q8}, [r0,:128] @ next round tweak 2349116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch b .Lxts_dec_done 2350116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch.align 4 2351116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch.Lxts_dec_5: 2352116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vst1.64 {q13}, [r0,:128] @ next round tweak 2353116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 2354116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q3, q3, q11 2355116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#ifndef BSAES_ASM_EXTENDED_KEY 2356116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r4, sp, #0x90 @ pass key schedule 2357116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#else 2358116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r4, r10, #248 @ pass key schedule 2359116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#endif 2360116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q4, q4, q12 2361116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mov r5, r1 @ pass rounds 2362116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mov r0, sp 2363116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 2364116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch bl _bsaes_decrypt8 2365116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 2366116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vld1.64 {q8-q9}, [r0,:128]! 2367116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vld1.64 {q10-q11}, [r0,:128]! 2368116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q0, q0, q8 2369116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vld1.64 {q12}, [r0,:128]! 2370116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q1, q1, q9 2371116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q8, q6, q10 2372116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vst1.8 {q0-q1}, [r8]! 2373116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q9, q4, q11 2374116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q10, q2, q12 2375116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vst1.8 {q8-q9}, [r8]! 2376116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vst1.8 {q10}, [r8]! 2377116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 2378116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vld1.64 {q8}, [r0,:128] @ next round tweak 2379116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch b .Lxts_dec_done 2380116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch.align 4 2381116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch.Lxts_dec_4: 2382116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vst1.64 {q12}, [r0,:128] @ next round tweak 2383116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 2384116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q2, q2, q10 2385116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#ifndef BSAES_ASM_EXTENDED_KEY 2386116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r4, sp, #0x90 @ pass key schedule 2387116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#else 2388116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r4, r10, #248 @ pass key schedule 2389116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#endif 2390116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q3, q3, q11 2391116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mov r5, r1 @ pass rounds 2392116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mov r0, sp 2393116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 2394116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch bl _bsaes_decrypt8 2395116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 2396116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vld1.64 {q8-q9}, [r0,:128]! 2397116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vld1.64 {q10-q11}, [r0,:128]! 2398116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q0, q0, q8 2399116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q1, q1, q9 2400116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q8, q6, q10 2401116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vst1.8 {q0-q1}, [r8]! 2402116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q9, q4, q11 2403116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vst1.8 {q8-q9}, [r8]! 2404116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 2405116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vld1.64 {q8}, [r0,:128] @ next round tweak 2406116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch b .Lxts_dec_done 2407116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch.align 4 2408116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch.Lxts_dec_3: 2409116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vst1.64 {q11}, [r0,:128] @ next round tweak 2410116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 2411116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q1, q1, q9 2412116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#ifndef BSAES_ASM_EXTENDED_KEY 2413116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r4, sp, #0x90 @ pass key schedule 2414116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#else 2415116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r4, r10, #248 @ pass key schedule 2416116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#endif 2417116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q2, q2, q10 2418116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mov r5, r1 @ pass rounds 2419116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mov r0, sp 2420116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 2421116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch bl _bsaes_decrypt8 2422116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 2423116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vld1.64 {q8-q9}, [r0,:128]! 2424116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vld1.64 {q10}, [r0,:128]! 2425116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q0, q0, q8 2426116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q1, q1, q9 2427116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q8, q6, q10 2428116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vst1.8 {q0-q1}, [r8]! 2429116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vst1.8 {q8}, [r8]! 2430116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 2431116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vld1.64 {q8}, [r0,:128] @ next round tweak 2432116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch b .Lxts_dec_done 2433116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch.align 4 2434116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch.Lxts_dec_2: 2435116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vst1.64 {q10}, [r0,:128] @ next round tweak 2436116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 2437116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q0, q0, q8 2438116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#ifndef BSAES_ASM_EXTENDED_KEY 2439116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r4, sp, #0x90 @ pass key schedule 2440116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#else 2441116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r4, r10, #248 @ pass key schedule 2442116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#endif 2443116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q1, q1, q9 2444116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mov r5, r1 @ pass rounds 2445116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mov r0, sp 2446116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 2447116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch bl _bsaes_decrypt8 2448116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 2449116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vld1.64 {q8-q9}, [r0,:128]! 2450116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q0, q0, q8 2451116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q1, q1, q9 2452116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vst1.8 {q0-q1}, [r8]! 2453116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 2454116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vld1.64 {q8}, [r0,:128] @ next round tweak 2455116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch b .Lxts_dec_done 2456116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch.align 4 2457116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch.Lxts_dec_1: 2458116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mov r0, sp 2459116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q0, q8 2460116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mov r1, sp 2461116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vst1.8 {q0}, [sp,:128] 2462116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mov r2, r10 2463116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mov r4, r3 @ preserve fp 2464116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mov r5, r2 @ preserve magic 2465116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 2466116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch bl AES_decrypt 2467116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 2468116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vld1.8 {q0}, [sp,:128] 2469116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q0, q0, q8 2470116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vst1.8 {q0}, [r8]! 2471116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mov r3, r4 2472116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mov r2, r5 2473116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 2474116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vmov q8, q9 @ next round tweak 2475116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 2476116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch.Lxts_dec_done: 2477116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#ifndef XTS_CHAIN_TWEAK 2478116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch adds r9, #0x10 2479116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch beq .Lxts_dec_ret 2480116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 2481116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch @ calculate one round of extra tweak for the stolen ciphertext 2482116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vldmia r2, {q5} 2483116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vshr.s64 q6, q8, #63 2484116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vand q6, q6, q5 2485116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vadd.u64 q9, q8, q8 2486116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vswp d13,d12 2487116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q9, q9, q6 2488116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 2489116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch @ perform the final decryption with the last tweak value 2490116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vld1.8 {q0}, [r7]! 2491116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mov r0, sp 2492116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q0, q0, q9 2493116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mov r1, sp 2494116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vst1.8 {q0}, [sp,:128] 2495116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mov r2, r10 2496116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mov r4, r3 @ preserve fp 2497116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 2498116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch bl AES_decrypt 2499116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 2500116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vld1.8 {q0}, [sp,:128] 2501116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q0, q0, q9 2502116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vst1.8 {q0}, [r8] 2503116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 2504116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mov r6, r8 2505116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch.Lxts_dec_steal: 2506116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ldrb r1, [r8] 2507116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ldrb r0, [r7], #1 2508116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch strb r1, [r8, #0x10] 2509116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch strb r0, [r8], #1 2510116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 2511116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch subs r9, #1 2512116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch bhi .Lxts_dec_steal 2513116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 2514116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vld1.8 {q0}, [r6] 2515116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mov r0, sp 2516116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q0, q8 2517116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mov r1, sp 2518116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vst1.8 {q0}, [sp,:128] 2519116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mov r2, r10 2520116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 2521116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch bl AES_decrypt 2522116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 2523116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vld1.8 {q0}, [sp,:128] 2524116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q0, q0, q8 2525116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vst1.8 {q0}, [r6] 2526116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mov r3, r4 2527116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#endif 2528116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 2529116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch.Lxts_dec_ret: 2530116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch bic r0, r3, #0xf 2531116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vmov.i32 q0, #0 2532116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vmov.i32 q1, #0 2533116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#ifdef XTS_CHAIN_TWEAK 2534116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ldr r1, [r3, #0x20+VFP_ABI_FRAME] @ chain tweak 2535116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#endif 2536116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch.Lxts_dec_bzero: @ wipe key schedule [if any] 2537116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vstmia sp!, {q0-q1} 2538116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch cmp sp, r0 2539116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch bne .Lxts_dec_bzero 2540116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 2541116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mov sp, r3 2542116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#ifdef XTS_CHAIN_TWEAK 2543116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vst1.8 {q8}, [r1] 2544116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#endif 2545116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch VFP_ABI_POP 2546116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ldmia sp!, {r4-r10, pc} @ return 2547116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 2548116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch.size bsaes_xts_decrypt,.-bsaes_xts_decrypt 2549116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#endif 2550116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#endif 2551