1*8fb009dcSAndroid Build Coastguard Worker// This file is generated from a similarly-named Perl script in the BoringSSL 2*8fb009dcSAndroid Build Coastguard Worker// source tree. Do not edit by hand. 3*8fb009dcSAndroid Build Coastguard Worker 4*8fb009dcSAndroid Build Coastguard Worker#include <openssl/asm_base.h> 5*8fb009dcSAndroid Build Coastguard Worker 6*8fb009dcSAndroid Build Coastguard Worker#if !defined(OPENSSL_NO_ASM) && defined(OPENSSL_ARM) && defined(__ELF__) 7*8fb009dcSAndroid Build Coastguard Worker#include <openssl/arm_arch.h> 8*8fb009dcSAndroid Build Coastguard Worker 9*8fb009dcSAndroid Build Coastguard Worker#if __ARM_MAX_ARCH__>=7 10*8fb009dcSAndroid Build Coastguard Worker.text 11*8fb009dcSAndroid Build Coastguard Worker.arch armv7-a @ don't confuse not-so-latest binutils with argv8 :-) 12*8fb009dcSAndroid Build Coastguard Worker.fpu neon 13*8fb009dcSAndroid Build Coastguard Worker.code 32 14*8fb009dcSAndroid Build Coastguard Worker#undef __thumb2__ 15*8fb009dcSAndroid Build Coastguard Worker.align 5 16*8fb009dcSAndroid Build Coastguard Worker.Lrcon: 17*8fb009dcSAndroid Build Coastguard Worker.long 0x01,0x01,0x01,0x01 18*8fb009dcSAndroid Build Coastguard Worker.long 0x0c0f0e0d,0x0c0f0e0d,0x0c0f0e0d,0x0c0f0e0d @ rotate-n-splat 19*8fb009dcSAndroid Build Coastguard Worker.long 0x1b,0x1b,0x1b,0x1b 20*8fb009dcSAndroid Build Coastguard Worker 21*8fb009dcSAndroid Build Coastguard Worker.text 22*8fb009dcSAndroid Build Coastguard Worker 23*8fb009dcSAndroid Build Coastguard Worker.globl aes_hw_set_encrypt_key 24*8fb009dcSAndroid Build Coastguard Worker.hidden aes_hw_set_encrypt_key 25*8fb009dcSAndroid Build Coastguard Worker.type aes_hw_set_encrypt_key,%function 26*8fb009dcSAndroid Build Coastguard Worker.align 5 27*8fb009dcSAndroid Build Coastguard Workeraes_hw_set_encrypt_key: 28*8fb009dcSAndroid Build Coastguard Worker.Lenc_key: 29*8fb009dcSAndroid Build Coastguard Worker mov r3,#-2 30*8fb009dcSAndroid Build Coastguard Worker cmp r1,#128 31*8fb009dcSAndroid Build Coastguard Worker blt .Lenc_key_abort 32*8fb009dcSAndroid Build Coastguard Worker cmp r1,#256 33*8fb009dcSAndroid Build Coastguard Worker bgt .Lenc_key_abort 34*8fb009dcSAndroid Build Coastguard Worker tst r1,#0x3f 35*8fb009dcSAndroid Build Coastguard Worker bne .Lenc_key_abort 36*8fb009dcSAndroid Build Coastguard Worker 37*8fb009dcSAndroid Build Coastguard Worker adr r3,.Lrcon 38*8fb009dcSAndroid Build Coastguard Worker cmp r1,#192 39*8fb009dcSAndroid Build Coastguard Worker 40*8fb009dcSAndroid Build Coastguard Worker veor q0,q0,q0 41*8fb009dcSAndroid Build Coastguard Worker vld1.8 {q3},[r0]! 42*8fb009dcSAndroid Build Coastguard Worker mov r1,#8 @ reuse r1 43*8fb009dcSAndroid Build Coastguard Worker vld1.32 {q1,q2},[r3]! 44*8fb009dcSAndroid Build Coastguard Worker 45*8fb009dcSAndroid Build Coastguard Worker blt .Loop128 46*8fb009dcSAndroid Build Coastguard Worker beq .L192 47*8fb009dcSAndroid Build Coastguard Worker b .L256 48*8fb009dcSAndroid Build Coastguard Worker 49*8fb009dcSAndroid Build Coastguard Worker.align 4 50*8fb009dcSAndroid Build Coastguard Worker.Loop128: 51*8fb009dcSAndroid Build Coastguard Worker vtbl.8 d20,{q3},d4 52*8fb009dcSAndroid Build Coastguard Worker vtbl.8 d21,{q3},d5 53*8fb009dcSAndroid Build Coastguard Worker vext.8 q9,q0,q3,#12 54*8fb009dcSAndroid Build Coastguard Worker vst1.32 {q3},[r2]! 55*8fb009dcSAndroid Build Coastguard Worker.byte 0x00,0x43,0xf0,0xf3 @ aese q10,q0 56*8fb009dcSAndroid Build Coastguard Worker subs r1,r1,#1 57*8fb009dcSAndroid Build Coastguard Worker 58*8fb009dcSAndroid Build Coastguard Worker veor q3,q3,q9 59*8fb009dcSAndroid Build Coastguard Worker vext.8 q9,q0,q9,#12 60*8fb009dcSAndroid Build Coastguard Worker veor q3,q3,q9 61*8fb009dcSAndroid Build Coastguard Worker vext.8 q9,q0,q9,#12 62*8fb009dcSAndroid Build Coastguard Worker veor q10,q10,q1 63*8fb009dcSAndroid Build Coastguard Worker veor q3,q3,q9 64*8fb009dcSAndroid Build Coastguard Worker vshl.u8 q1,q1,#1 65*8fb009dcSAndroid Build Coastguard Worker veor q3,q3,q10 66*8fb009dcSAndroid Build Coastguard Worker bne .Loop128 67*8fb009dcSAndroid Build Coastguard Worker 68*8fb009dcSAndroid Build Coastguard Worker vld1.32 {q1},[r3] 69*8fb009dcSAndroid Build Coastguard Worker 70*8fb009dcSAndroid Build Coastguard Worker vtbl.8 d20,{q3},d4 71*8fb009dcSAndroid Build Coastguard Worker vtbl.8 d21,{q3},d5 72*8fb009dcSAndroid Build Coastguard Worker vext.8 q9,q0,q3,#12 73*8fb009dcSAndroid Build Coastguard Worker vst1.32 {q3},[r2]! 74*8fb009dcSAndroid Build Coastguard Worker.byte 0x00,0x43,0xf0,0xf3 @ aese q10,q0 75*8fb009dcSAndroid Build Coastguard Worker 76*8fb009dcSAndroid Build Coastguard Worker veor q3,q3,q9 77*8fb009dcSAndroid Build Coastguard Worker vext.8 q9,q0,q9,#12 78*8fb009dcSAndroid Build Coastguard Worker veor q3,q3,q9 79*8fb009dcSAndroid Build Coastguard Worker vext.8 q9,q0,q9,#12 80*8fb009dcSAndroid Build Coastguard Worker veor q10,q10,q1 81*8fb009dcSAndroid Build Coastguard Worker veor q3,q3,q9 82*8fb009dcSAndroid Build Coastguard Worker vshl.u8 q1,q1,#1 83*8fb009dcSAndroid Build Coastguard Worker veor q3,q3,q10 84*8fb009dcSAndroid Build Coastguard Worker 85*8fb009dcSAndroid Build Coastguard Worker vtbl.8 d20,{q3},d4 86*8fb009dcSAndroid Build Coastguard Worker vtbl.8 d21,{q3},d5 87*8fb009dcSAndroid Build Coastguard Worker vext.8 q9,q0,q3,#12 88*8fb009dcSAndroid Build Coastguard Worker vst1.32 {q3},[r2]! 89*8fb009dcSAndroid Build Coastguard Worker.byte 0x00,0x43,0xf0,0xf3 @ aese q10,q0 90*8fb009dcSAndroid Build Coastguard Worker 91*8fb009dcSAndroid Build Coastguard Worker veor q3,q3,q9 92*8fb009dcSAndroid Build Coastguard Worker vext.8 q9,q0,q9,#12 93*8fb009dcSAndroid Build Coastguard Worker veor q3,q3,q9 94*8fb009dcSAndroid Build Coastguard Worker vext.8 q9,q0,q9,#12 95*8fb009dcSAndroid Build Coastguard Worker veor q10,q10,q1 96*8fb009dcSAndroid Build Coastguard Worker veor q3,q3,q9 97*8fb009dcSAndroid Build Coastguard Worker veor q3,q3,q10 98*8fb009dcSAndroid Build Coastguard Worker vst1.32 {q3},[r2] 99*8fb009dcSAndroid Build Coastguard Worker add r2,r2,#0x50 100*8fb009dcSAndroid Build Coastguard Worker 101*8fb009dcSAndroid Build Coastguard Worker mov r12,#10 102*8fb009dcSAndroid Build Coastguard Worker b .Ldone 103*8fb009dcSAndroid Build Coastguard Worker 104*8fb009dcSAndroid Build Coastguard Worker.align 4 105*8fb009dcSAndroid Build Coastguard Worker.L192: 106*8fb009dcSAndroid Build Coastguard Worker vld1.8 {d16},[r0]! 107*8fb009dcSAndroid Build Coastguard Worker vmov.i8 q10,#8 @ borrow q10 108*8fb009dcSAndroid Build Coastguard Worker vst1.32 {q3},[r2]! 109*8fb009dcSAndroid Build Coastguard Worker vsub.i8 q2,q2,q10 @ adjust the mask 110*8fb009dcSAndroid Build Coastguard Worker 111*8fb009dcSAndroid Build Coastguard Worker.Loop192: 112*8fb009dcSAndroid Build Coastguard Worker vtbl.8 d20,{q8},d4 113*8fb009dcSAndroid Build Coastguard Worker vtbl.8 d21,{q8},d5 114*8fb009dcSAndroid Build Coastguard Worker vext.8 q9,q0,q3,#12 115*8fb009dcSAndroid Build Coastguard Worker vst1.32 {d16},[r2]! 116*8fb009dcSAndroid Build Coastguard Worker.byte 0x00,0x43,0xf0,0xf3 @ aese q10,q0 117*8fb009dcSAndroid Build Coastguard Worker subs r1,r1,#1 118*8fb009dcSAndroid Build Coastguard Worker 119*8fb009dcSAndroid Build Coastguard Worker veor q3,q3,q9 120*8fb009dcSAndroid Build Coastguard Worker vext.8 q9,q0,q9,#12 121*8fb009dcSAndroid Build Coastguard Worker veor q3,q3,q9 122*8fb009dcSAndroid Build Coastguard Worker vext.8 q9,q0,q9,#12 123*8fb009dcSAndroid Build Coastguard Worker veor q3,q3,q9 124*8fb009dcSAndroid Build Coastguard Worker 125*8fb009dcSAndroid Build Coastguard Worker vdup.32 q9,d7[1] 126*8fb009dcSAndroid Build Coastguard Worker veor q9,q9,q8 127*8fb009dcSAndroid Build Coastguard Worker veor q10,q10,q1 128*8fb009dcSAndroid Build Coastguard Worker vext.8 q8,q0,q8,#12 129*8fb009dcSAndroid Build Coastguard Worker vshl.u8 q1,q1,#1 130*8fb009dcSAndroid Build Coastguard Worker veor q8,q8,q9 131*8fb009dcSAndroid Build Coastguard Worker veor q3,q3,q10 132*8fb009dcSAndroid Build Coastguard Worker veor q8,q8,q10 133*8fb009dcSAndroid Build Coastguard Worker vst1.32 {q3},[r2]! 134*8fb009dcSAndroid Build Coastguard Worker bne .Loop192 135*8fb009dcSAndroid Build Coastguard Worker 136*8fb009dcSAndroid Build Coastguard Worker mov r12,#12 137*8fb009dcSAndroid Build Coastguard Worker add r2,r2,#0x20 138*8fb009dcSAndroid Build Coastguard Worker b .Ldone 139*8fb009dcSAndroid Build Coastguard Worker 140*8fb009dcSAndroid Build Coastguard Worker.align 4 141*8fb009dcSAndroid Build Coastguard Worker.L256: 142*8fb009dcSAndroid Build Coastguard Worker vld1.8 {q8},[r0] 143*8fb009dcSAndroid Build Coastguard Worker mov r1,#7 144*8fb009dcSAndroid Build Coastguard Worker mov r12,#14 145*8fb009dcSAndroid Build Coastguard Worker vst1.32 {q3},[r2]! 146*8fb009dcSAndroid Build Coastguard Worker 147*8fb009dcSAndroid Build Coastguard Worker.Loop256: 148*8fb009dcSAndroid Build Coastguard Worker vtbl.8 d20,{q8},d4 149*8fb009dcSAndroid Build Coastguard Worker vtbl.8 d21,{q8},d5 150*8fb009dcSAndroid Build Coastguard Worker vext.8 q9,q0,q3,#12 151*8fb009dcSAndroid Build Coastguard Worker vst1.32 {q8},[r2]! 152*8fb009dcSAndroid Build Coastguard Worker.byte 0x00,0x43,0xf0,0xf3 @ aese q10,q0 153*8fb009dcSAndroid Build Coastguard Worker subs r1,r1,#1 154*8fb009dcSAndroid Build Coastguard Worker 155*8fb009dcSAndroid Build Coastguard Worker veor q3,q3,q9 156*8fb009dcSAndroid Build Coastguard Worker vext.8 q9,q0,q9,#12 157*8fb009dcSAndroid Build Coastguard Worker veor q3,q3,q9 158*8fb009dcSAndroid Build Coastguard Worker vext.8 q9,q0,q9,#12 159*8fb009dcSAndroid Build Coastguard Worker veor q10,q10,q1 160*8fb009dcSAndroid Build Coastguard Worker veor q3,q3,q9 161*8fb009dcSAndroid Build Coastguard Worker vshl.u8 q1,q1,#1 162*8fb009dcSAndroid Build Coastguard Worker veor q3,q3,q10 163*8fb009dcSAndroid Build Coastguard Worker vst1.32 {q3},[r2]! 164*8fb009dcSAndroid Build Coastguard Worker beq .Ldone 165*8fb009dcSAndroid Build Coastguard Worker 166*8fb009dcSAndroid Build Coastguard Worker vdup.32 q10,d7[1] 167*8fb009dcSAndroid Build Coastguard Worker vext.8 q9,q0,q8,#12 168*8fb009dcSAndroid Build Coastguard Worker.byte 0x00,0x43,0xf0,0xf3 @ aese q10,q0 169*8fb009dcSAndroid Build Coastguard Worker 170*8fb009dcSAndroid Build Coastguard Worker veor q8,q8,q9 171*8fb009dcSAndroid Build Coastguard Worker vext.8 q9,q0,q9,#12 172*8fb009dcSAndroid Build Coastguard Worker veor q8,q8,q9 173*8fb009dcSAndroid Build Coastguard Worker vext.8 q9,q0,q9,#12 174*8fb009dcSAndroid Build Coastguard Worker veor q8,q8,q9 175*8fb009dcSAndroid Build Coastguard Worker 176*8fb009dcSAndroid Build Coastguard Worker veor q8,q8,q10 177*8fb009dcSAndroid Build Coastguard Worker b .Loop256 178*8fb009dcSAndroid Build Coastguard Worker 179*8fb009dcSAndroid Build Coastguard Worker.Ldone: 180*8fb009dcSAndroid Build Coastguard Worker str r12,[r2] 181*8fb009dcSAndroid Build Coastguard Worker mov r3,#0 182*8fb009dcSAndroid Build Coastguard Worker 183*8fb009dcSAndroid Build Coastguard Worker.Lenc_key_abort: 184*8fb009dcSAndroid Build Coastguard Worker mov r0,r3 @ return value 185*8fb009dcSAndroid Build Coastguard Worker 186*8fb009dcSAndroid Build Coastguard Worker bx lr 187*8fb009dcSAndroid Build Coastguard Worker.size aes_hw_set_encrypt_key,.-aes_hw_set_encrypt_key 188*8fb009dcSAndroid Build Coastguard Worker 189*8fb009dcSAndroid Build Coastguard Worker.globl aes_hw_set_decrypt_key 190*8fb009dcSAndroid Build Coastguard Worker.hidden aes_hw_set_decrypt_key 191*8fb009dcSAndroid Build Coastguard Worker.type aes_hw_set_decrypt_key,%function 192*8fb009dcSAndroid Build Coastguard Worker.align 5 193*8fb009dcSAndroid Build Coastguard Workeraes_hw_set_decrypt_key: 194*8fb009dcSAndroid Build Coastguard Worker stmdb sp!,{r4,lr} 195*8fb009dcSAndroid Build Coastguard Worker bl .Lenc_key 196*8fb009dcSAndroid Build Coastguard Worker 197*8fb009dcSAndroid Build Coastguard Worker cmp r0,#0 198*8fb009dcSAndroid Build Coastguard Worker bne .Ldec_key_abort 199*8fb009dcSAndroid Build Coastguard Worker 200*8fb009dcSAndroid Build Coastguard Worker sub r2,r2,#240 @ restore original r2 201*8fb009dcSAndroid Build Coastguard Worker mov r4,#-16 202*8fb009dcSAndroid Build Coastguard Worker add r0,r2,r12,lsl#4 @ end of key schedule 203*8fb009dcSAndroid Build Coastguard Worker 204*8fb009dcSAndroid Build Coastguard Worker vld1.32 {q0},[r2] 205*8fb009dcSAndroid Build Coastguard Worker vld1.32 {q1},[r0] 206*8fb009dcSAndroid Build Coastguard Worker vst1.32 {q0},[r0],r4 207*8fb009dcSAndroid Build Coastguard Worker vst1.32 {q1},[r2]! 208*8fb009dcSAndroid Build Coastguard Worker 209*8fb009dcSAndroid Build Coastguard Worker.Loop_imc: 210*8fb009dcSAndroid Build Coastguard Worker vld1.32 {q0},[r2] 211*8fb009dcSAndroid Build Coastguard Worker vld1.32 {q1},[r0] 212*8fb009dcSAndroid Build Coastguard Worker.byte 0xc0,0x03,0xb0,0xf3 @ aesimc q0,q0 213*8fb009dcSAndroid Build Coastguard Worker.byte 0xc2,0x23,0xb0,0xf3 @ aesimc q1,q1 214*8fb009dcSAndroid Build Coastguard Worker vst1.32 {q0},[r0],r4 215*8fb009dcSAndroid Build Coastguard Worker vst1.32 {q1},[r2]! 216*8fb009dcSAndroid Build Coastguard Worker cmp r0,r2 217*8fb009dcSAndroid Build Coastguard Worker bhi .Loop_imc 218*8fb009dcSAndroid Build Coastguard Worker 219*8fb009dcSAndroid Build Coastguard Worker vld1.32 {q0},[r2] 220*8fb009dcSAndroid Build Coastguard Worker.byte 0xc0,0x03,0xb0,0xf3 @ aesimc q0,q0 221*8fb009dcSAndroid Build Coastguard Worker vst1.32 {q0},[r0] 222*8fb009dcSAndroid Build Coastguard Worker 223*8fb009dcSAndroid Build Coastguard Worker eor r0,r0,r0 @ return value 224*8fb009dcSAndroid Build Coastguard Worker.Ldec_key_abort: 225*8fb009dcSAndroid Build Coastguard Worker ldmia sp!,{r4,pc} 226*8fb009dcSAndroid Build Coastguard Worker.size aes_hw_set_decrypt_key,.-aes_hw_set_decrypt_key 227*8fb009dcSAndroid Build Coastguard Worker.globl aes_hw_encrypt 228*8fb009dcSAndroid Build Coastguard Worker.hidden aes_hw_encrypt 229*8fb009dcSAndroid Build Coastguard Worker.type aes_hw_encrypt,%function 230*8fb009dcSAndroid Build Coastguard Worker.align 5 231*8fb009dcSAndroid Build Coastguard Workeraes_hw_encrypt: 232*8fb009dcSAndroid Build Coastguard Worker AARCH64_VALID_CALL_TARGET 233*8fb009dcSAndroid Build Coastguard Worker ldr r3,[r2,#240] 234*8fb009dcSAndroid Build Coastguard Worker vld1.32 {q0},[r2]! 235*8fb009dcSAndroid Build Coastguard Worker vld1.8 {q2},[r0] 236*8fb009dcSAndroid Build Coastguard Worker sub r3,r3,#2 237*8fb009dcSAndroid Build Coastguard Worker vld1.32 {q1},[r2]! 238*8fb009dcSAndroid Build Coastguard Worker 239*8fb009dcSAndroid Build Coastguard Worker.Loop_enc: 240*8fb009dcSAndroid Build Coastguard Worker.byte 0x00,0x43,0xb0,0xf3 @ aese q2,q0 241*8fb009dcSAndroid Build Coastguard Worker.byte 0x84,0x43,0xb0,0xf3 @ aesmc q2,q2 242*8fb009dcSAndroid Build Coastguard Worker vld1.32 {q0},[r2]! 243*8fb009dcSAndroid Build Coastguard Worker subs r3,r3,#2 244*8fb009dcSAndroid Build Coastguard Worker.byte 0x02,0x43,0xb0,0xf3 @ aese q2,q1 245*8fb009dcSAndroid Build Coastguard Worker.byte 0x84,0x43,0xb0,0xf3 @ aesmc q2,q2 246*8fb009dcSAndroid Build Coastguard Worker vld1.32 {q1},[r2]! 247*8fb009dcSAndroid Build Coastguard Worker bgt .Loop_enc 248*8fb009dcSAndroid Build Coastguard Worker 249*8fb009dcSAndroid Build Coastguard Worker.byte 0x00,0x43,0xb0,0xf3 @ aese q2,q0 250*8fb009dcSAndroid Build Coastguard Worker.byte 0x84,0x43,0xb0,0xf3 @ aesmc q2,q2 251*8fb009dcSAndroid Build Coastguard Worker vld1.32 {q0},[r2] 252*8fb009dcSAndroid Build Coastguard Worker.byte 0x02,0x43,0xb0,0xf3 @ aese q2,q1 253*8fb009dcSAndroid Build Coastguard Worker veor q2,q2,q0 254*8fb009dcSAndroid Build Coastguard Worker 255*8fb009dcSAndroid Build Coastguard Worker vst1.8 {q2},[r1] 256*8fb009dcSAndroid Build Coastguard Worker bx lr 257*8fb009dcSAndroid Build Coastguard Worker.size aes_hw_encrypt,.-aes_hw_encrypt 258*8fb009dcSAndroid Build Coastguard Worker.globl aes_hw_decrypt 259*8fb009dcSAndroid Build Coastguard Worker.hidden aes_hw_decrypt 260*8fb009dcSAndroid Build Coastguard Worker.type aes_hw_decrypt,%function 261*8fb009dcSAndroid Build Coastguard Worker.align 5 262*8fb009dcSAndroid Build Coastguard Workeraes_hw_decrypt: 263*8fb009dcSAndroid Build Coastguard Worker AARCH64_VALID_CALL_TARGET 264*8fb009dcSAndroid Build Coastguard Worker ldr r3,[r2,#240] 265*8fb009dcSAndroid Build Coastguard Worker vld1.32 {q0},[r2]! 266*8fb009dcSAndroid Build Coastguard Worker vld1.8 {q2},[r0] 267*8fb009dcSAndroid Build Coastguard Worker sub r3,r3,#2 268*8fb009dcSAndroid Build Coastguard Worker vld1.32 {q1},[r2]! 269*8fb009dcSAndroid Build Coastguard Worker 270*8fb009dcSAndroid Build Coastguard Worker.Loop_dec: 271*8fb009dcSAndroid Build Coastguard Worker.byte 0x40,0x43,0xb0,0xf3 @ aesd q2,q0 272*8fb009dcSAndroid Build Coastguard Worker.byte 0xc4,0x43,0xb0,0xf3 @ aesimc q2,q2 273*8fb009dcSAndroid Build Coastguard Worker vld1.32 {q0},[r2]! 274*8fb009dcSAndroid Build Coastguard Worker subs r3,r3,#2 275*8fb009dcSAndroid Build Coastguard Worker.byte 0x42,0x43,0xb0,0xf3 @ aesd q2,q1 276*8fb009dcSAndroid Build Coastguard Worker.byte 0xc4,0x43,0xb0,0xf3 @ aesimc q2,q2 277*8fb009dcSAndroid Build Coastguard Worker vld1.32 {q1},[r2]! 278*8fb009dcSAndroid Build Coastguard Worker bgt .Loop_dec 279*8fb009dcSAndroid Build Coastguard Worker 280*8fb009dcSAndroid Build Coastguard Worker.byte 0x40,0x43,0xb0,0xf3 @ aesd q2,q0 281*8fb009dcSAndroid Build Coastguard Worker.byte 0xc4,0x43,0xb0,0xf3 @ aesimc q2,q2 282*8fb009dcSAndroid Build Coastguard Worker vld1.32 {q0},[r2] 283*8fb009dcSAndroid Build Coastguard Worker.byte 0x42,0x43,0xb0,0xf3 @ aesd q2,q1 284*8fb009dcSAndroid Build Coastguard Worker veor q2,q2,q0 285*8fb009dcSAndroid Build Coastguard Worker 286*8fb009dcSAndroid Build Coastguard Worker vst1.8 {q2},[r1] 287*8fb009dcSAndroid Build Coastguard Worker bx lr 288*8fb009dcSAndroid Build Coastguard Worker.size aes_hw_decrypt,.-aes_hw_decrypt 289*8fb009dcSAndroid Build Coastguard Worker.globl aes_hw_cbc_encrypt 290*8fb009dcSAndroid Build Coastguard Worker.hidden aes_hw_cbc_encrypt 291*8fb009dcSAndroid Build Coastguard Worker.type aes_hw_cbc_encrypt,%function 292*8fb009dcSAndroid Build Coastguard Worker.align 5 293*8fb009dcSAndroid Build Coastguard Workeraes_hw_cbc_encrypt: 294*8fb009dcSAndroid Build Coastguard Worker mov ip,sp 295*8fb009dcSAndroid Build Coastguard Worker stmdb sp!,{r4,r5,r6,r7,r8,lr} 296*8fb009dcSAndroid Build Coastguard Worker vstmdb sp!,{d8,d9,d10,d11,d12,d13,d14,d15} @ ABI specification says so 297*8fb009dcSAndroid Build Coastguard Worker ldmia ip,{r4,r5} @ load remaining args 298*8fb009dcSAndroid Build Coastguard Worker subs r2,r2,#16 299*8fb009dcSAndroid Build Coastguard Worker mov r8,#16 300*8fb009dcSAndroid Build Coastguard Worker blo .Lcbc_abort 301*8fb009dcSAndroid Build Coastguard Worker moveq r8,#0 302*8fb009dcSAndroid Build Coastguard Worker 303*8fb009dcSAndroid Build Coastguard Worker cmp r5,#0 @ en- or decrypting? 304*8fb009dcSAndroid Build Coastguard Worker ldr r5,[r3,#240] 305*8fb009dcSAndroid Build Coastguard Worker and r2,r2,#-16 306*8fb009dcSAndroid Build Coastguard Worker vld1.8 {q6},[r4] 307*8fb009dcSAndroid Build Coastguard Worker vld1.8 {q0},[r0],r8 308*8fb009dcSAndroid Build Coastguard Worker 309*8fb009dcSAndroid Build Coastguard Worker vld1.32 {q8,q9},[r3] @ load key schedule... 310*8fb009dcSAndroid Build Coastguard Worker sub r5,r5,#6 311*8fb009dcSAndroid Build Coastguard Worker add r7,r3,r5,lsl#4 @ pointer to last 7 round keys 312*8fb009dcSAndroid Build Coastguard Worker sub r5,r5,#2 313*8fb009dcSAndroid Build Coastguard Worker vld1.32 {q10,q11},[r7]! 314*8fb009dcSAndroid Build Coastguard Worker vld1.32 {q12,q13},[r7]! 315*8fb009dcSAndroid Build Coastguard Worker vld1.32 {q14,q15},[r7]! 316*8fb009dcSAndroid Build Coastguard Worker vld1.32 {q7},[r7] 317*8fb009dcSAndroid Build Coastguard Worker 318*8fb009dcSAndroid Build Coastguard Worker add r7,r3,#32 319*8fb009dcSAndroid Build Coastguard Worker mov r6,r5 320*8fb009dcSAndroid Build Coastguard Worker beq .Lcbc_dec 321*8fb009dcSAndroid Build Coastguard Worker 322*8fb009dcSAndroid Build Coastguard Worker cmp r5,#2 323*8fb009dcSAndroid Build Coastguard Worker veor q0,q0,q6 324*8fb009dcSAndroid Build Coastguard Worker veor q5,q8,q7 325*8fb009dcSAndroid Build Coastguard Worker beq .Lcbc_enc128 326*8fb009dcSAndroid Build Coastguard Worker 327*8fb009dcSAndroid Build Coastguard Worker vld1.32 {q2,q3},[r7] 328*8fb009dcSAndroid Build Coastguard Worker add r7,r3,#16 329*8fb009dcSAndroid Build Coastguard Worker add r6,r3,#16*4 330*8fb009dcSAndroid Build Coastguard Worker add r12,r3,#16*5 331*8fb009dcSAndroid Build Coastguard Worker.byte 0x20,0x03,0xb0,0xf3 @ aese q0,q8 332*8fb009dcSAndroid Build Coastguard Worker.byte 0x80,0x03,0xb0,0xf3 @ aesmc q0,q0 333*8fb009dcSAndroid Build Coastguard Worker add r14,r3,#16*6 334*8fb009dcSAndroid Build Coastguard Worker add r3,r3,#16*7 335*8fb009dcSAndroid Build Coastguard Worker b .Lenter_cbc_enc 336*8fb009dcSAndroid Build Coastguard Worker 337*8fb009dcSAndroid Build Coastguard Worker.align 4 338*8fb009dcSAndroid Build Coastguard Worker.Loop_cbc_enc: 339*8fb009dcSAndroid Build Coastguard Worker.byte 0x20,0x03,0xb0,0xf3 @ aese q0,q8 340*8fb009dcSAndroid Build Coastguard Worker.byte 0x80,0x03,0xb0,0xf3 @ aesmc q0,q0 341*8fb009dcSAndroid Build Coastguard Worker vst1.8 {q6},[r1]! 342*8fb009dcSAndroid Build Coastguard Worker.Lenter_cbc_enc: 343*8fb009dcSAndroid Build Coastguard Worker.byte 0x22,0x03,0xb0,0xf3 @ aese q0,q9 344*8fb009dcSAndroid Build Coastguard Worker.byte 0x80,0x03,0xb0,0xf3 @ aesmc q0,q0 345*8fb009dcSAndroid Build Coastguard Worker.byte 0x04,0x03,0xb0,0xf3 @ aese q0,q2 346*8fb009dcSAndroid Build Coastguard Worker.byte 0x80,0x03,0xb0,0xf3 @ aesmc q0,q0 347*8fb009dcSAndroid Build Coastguard Worker vld1.32 {q8},[r6] 348*8fb009dcSAndroid Build Coastguard Worker cmp r5,#4 349*8fb009dcSAndroid Build Coastguard Worker.byte 0x06,0x03,0xb0,0xf3 @ aese q0,q3 350*8fb009dcSAndroid Build Coastguard Worker.byte 0x80,0x03,0xb0,0xf3 @ aesmc q0,q0 351*8fb009dcSAndroid Build Coastguard Worker vld1.32 {q9},[r12] 352*8fb009dcSAndroid Build Coastguard Worker beq .Lcbc_enc192 353*8fb009dcSAndroid Build Coastguard Worker 354*8fb009dcSAndroid Build Coastguard Worker.byte 0x20,0x03,0xb0,0xf3 @ aese q0,q8 355*8fb009dcSAndroid Build Coastguard Worker.byte 0x80,0x03,0xb0,0xf3 @ aesmc q0,q0 356*8fb009dcSAndroid Build Coastguard Worker vld1.32 {q8},[r14] 357*8fb009dcSAndroid Build Coastguard Worker.byte 0x22,0x03,0xb0,0xf3 @ aese q0,q9 358*8fb009dcSAndroid Build Coastguard Worker.byte 0x80,0x03,0xb0,0xf3 @ aesmc q0,q0 359*8fb009dcSAndroid Build Coastguard Worker vld1.32 {q9},[r3] 360*8fb009dcSAndroid Build Coastguard Worker nop 361*8fb009dcSAndroid Build Coastguard Worker 362*8fb009dcSAndroid Build Coastguard Worker.Lcbc_enc192: 363*8fb009dcSAndroid Build Coastguard Worker.byte 0x20,0x03,0xb0,0xf3 @ aese q0,q8 364*8fb009dcSAndroid Build Coastguard Worker.byte 0x80,0x03,0xb0,0xf3 @ aesmc q0,q0 365*8fb009dcSAndroid Build Coastguard Worker subs r2,r2,#16 366*8fb009dcSAndroid Build Coastguard Worker.byte 0x22,0x03,0xb0,0xf3 @ aese q0,q9 367*8fb009dcSAndroid Build Coastguard Worker.byte 0x80,0x03,0xb0,0xf3 @ aesmc q0,q0 368*8fb009dcSAndroid Build Coastguard Worker moveq r8,#0 369*8fb009dcSAndroid Build Coastguard Worker.byte 0x24,0x03,0xb0,0xf3 @ aese q0,q10 370*8fb009dcSAndroid Build Coastguard Worker.byte 0x80,0x03,0xb0,0xf3 @ aesmc q0,q0 371*8fb009dcSAndroid Build Coastguard Worker.byte 0x26,0x03,0xb0,0xf3 @ aese q0,q11 372*8fb009dcSAndroid Build Coastguard Worker.byte 0x80,0x03,0xb0,0xf3 @ aesmc q0,q0 373*8fb009dcSAndroid Build Coastguard Worker vld1.8 {q8},[r0],r8 374*8fb009dcSAndroid Build Coastguard Worker.byte 0x28,0x03,0xb0,0xf3 @ aese q0,q12 375*8fb009dcSAndroid Build Coastguard Worker.byte 0x80,0x03,0xb0,0xf3 @ aesmc q0,q0 376*8fb009dcSAndroid Build Coastguard Worker veor q8,q8,q5 377*8fb009dcSAndroid Build Coastguard Worker.byte 0x2a,0x03,0xb0,0xf3 @ aese q0,q13 378*8fb009dcSAndroid Build Coastguard Worker.byte 0x80,0x03,0xb0,0xf3 @ aesmc q0,q0 379*8fb009dcSAndroid Build Coastguard Worker vld1.32 {q9},[r7] @ re-pre-load rndkey[1] 380*8fb009dcSAndroid Build Coastguard Worker.byte 0x2c,0x03,0xb0,0xf3 @ aese q0,q14 381*8fb009dcSAndroid Build Coastguard Worker.byte 0x80,0x03,0xb0,0xf3 @ aesmc q0,q0 382*8fb009dcSAndroid Build Coastguard Worker.byte 0x2e,0x03,0xb0,0xf3 @ aese q0,q15 383*8fb009dcSAndroid Build Coastguard Worker veor q6,q0,q7 384*8fb009dcSAndroid Build Coastguard Worker bhs .Loop_cbc_enc 385*8fb009dcSAndroid Build Coastguard Worker 386*8fb009dcSAndroid Build Coastguard Worker vst1.8 {q6},[r1]! 387*8fb009dcSAndroid Build Coastguard Worker b .Lcbc_done 388*8fb009dcSAndroid Build Coastguard Worker 389*8fb009dcSAndroid Build Coastguard Worker.align 5 390*8fb009dcSAndroid Build Coastguard Worker.Lcbc_enc128: 391*8fb009dcSAndroid Build Coastguard Worker vld1.32 {q2,q3},[r7] 392*8fb009dcSAndroid Build Coastguard Worker.byte 0x20,0x03,0xb0,0xf3 @ aese q0,q8 393*8fb009dcSAndroid Build Coastguard Worker.byte 0x80,0x03,0xb0,0xf3 @ aesmc q0,q0 394*8fb009dcSAndroid Build Coastguard Worker b .Lenter_cbc_enc128 395*8fb009dcSAndroid Build Coastguard Worker.Loop_cbc_enc128: 396*8fb009dcSAndroid Build Coastguard Worker.byte 0x20,0x03,0xb0,0xf3 @ aese q0,q8 397*8fb009dcSAndroid Build Coastguard Worker.byte 0x80,0x03,0xb0,0xf3 @ aesmc q0,q0 398*8fb009dcSAndroid Build Coastguard Worker vst1.8 {q6},[r1]! 399*8fb009dcSAndroid Build Coastguard Worker.Lenter_cbc_enc128: 400*8fb009dcSAndroid Build Coastguard Worker.byte 0x22,0x03,0xb0,0xf3 @ aese q0,q9 401*8fb009dcSAndroid Build Coastguard Worker.byte 0x80,0x03,0xb0,0xf3 @ aesmc q0,q0 402*8fb009dcSAndroid Build Coastguard Worker subs r2,r2,#16 403*8fb009dcSAndroid Build Coastguard Worker.byte 0x04,0x03,0xb0,0xf3 @ aese q0,q2 404*8fb009dcSAndroid Build Coastguard Worker.byte 0x80,0x03,0xb0,0xf3 @ aesmc q0,q0 405*8fb009dcSAndroid Build Coastguard Worker moveq r8,#0 406*8fb009dcSAndroid Build Coastguard Worker.byte 0x06,0x03,0xb0,0xf3 @ aese q0,q3 407*8fb009dcSAndroid Build Coastguard Worker.byte 0x80,0x03,0xb0,0xf3 @ aesmc q0,q0 408*8fb009dcSAndroid Build Coastguard Worker.byte 0x24,0x03,0xb0,0xf3 @ aese q0,q10 409*8fb009dcSAndroid Build Coastguard Worker.byte 0x80,0x03,0xb0,0xf3 @ aesmc q0,q0 410*8fb009dcSAndroid Build Coastguard Worker.byte 0x26,0x03,0xb0,0xf3 @ aese q0,q11 411*8fb009dcSAndroid Build Coastguard Worker.byte 0x80,0x03,0xb0,0xf3 @ aesmc q0,q0 412*8fb009dcSAndroid Build Coastguard Worker vld1.8 {q8},[r0],r8 413*8fb009dcSAndroid Build Coastguard Worker.byte 0x28,0x03,0xb0,0xf3 @ aese q0,q12 414*8fb009dcSAndroid Build Coastguard Worker.byte 0x80,0x03,0xb0,0xf3 @ aesmc q0,q0 415*8fb009dcSAndroid Build Coastguard Worker.byte 0x2a,0x03,0xb0,0xf3 @ aese q0,q13 416*8fb009dcSAndroid Build Coastguard Worker.byte 0x80,0x03,0xb0,0xf3 @ aesmc q0,q0 417*8fb009dcSAndroid Build Coastguard Worker.byte 0x2c,0x03,0xb0,0xf3 @ aese q0,q14 418*8fb009dcSAndroid Build Coastguard Worker.byte 0x80,0x03,0xb0,0xf3 @ aesmc q0,q0 419*8fb009dcSAndroid Build Coastguard Worker veor q8,q8,q5 420*8fb009dcSAndroid Build Coastguard Worker.byte 0x2e,0x03,0xb0,0xf3 @ aese q0,q15 421*8fb009dcSAndroid Build Coastguard Worker veor q6,q0,q7 422*8fb009dcSAndroid Build Coastguard Worker bhs .Loop_cbc_enc128 423*8fb009dcSAndroid Build Coastguard Worker 424*8fb009dcSAndroid Build Coastguard Worker vst1.8 {q6},[r1]! 425*8fb009dcSAndroid Build Coastguard Worker b .Lcbc_done 426*8fb009dcSAndroid Build Coastguard Worker.align 5 427*8fb009dcSAndroid Build Coastguard Worker.Lcbc_dec: 428*8fb009dcSAndroid Build Coastguard Worker vld1.8 {q10},[r0]! 429*8fb009dcSAndroid Build Coastguard Worker subs r2,r2,#32 @ bias 430*8fb009dcSAndroid Build Coastguard Worker add r6,r5,#2 431*8fb009dcSAndroid Build Coastguard Worker vorr q3,q0,q0 432*8fb009dcSAndroid Build Coastguard Worker vorr q1,q0,q0 433*8fb009dcSAndroid Build Coastguard Worker vorr q11,q10,q10 434*8fb009dcSAndroid Build Coastguard Worker blo .Lcbc_dec_tail 435*8fb009dcSAndroid Build Coastguard Worker 436*8fb009dcSAndroid Build Coastguard Worker vorr q1,q10,q10 437*8fb009dcSAndroid Build Coastguard Worker vld1.8 {q10},[r0]! 438*8fb009dcSAndroid Build Coastguard Worker vorr q2,q0,q0 439*8fb009dcSAndroid Build Coastguard Worker vorr q3,q1,q1 440*8fb009dcSAndroid Build Coastguard Worker vorr q11,q10,q10 441*8fb009dcSAndroid Build Coastguard Worker 442*8fb009dcSAndroid Build Coastguard Worker.Loop3x_cbc_dec: 443*8fb009dcSAndroid Build Coastguard Worker.byte 0x60,0x03,0xb0,0xf3 @ aesd q0,q8 444*8fb009dcSAndroid Build Coastguard Worker.byte 0xc0,0x03,0xb0,0xf3 @ aesimc q0,q0 445*8fb009dcSAndroid Build Coastguard Worker.byte 0x60,0x23,0xb0,0xf3 @ aesd q1,q8 446*8fb009dcSAndroid Build Coastguard Worker.byte 0xc2,0x23,0xb0,0xf3 @ aesimc q1,q1 447*8fb009dcSAndroid Build Coastguard Worker.byte 0x60,0x43,0xf0,0xf3 @ aesd q10,q8 448*8fb009dcSAndroid Build Coastguard Worker.byte 0xe4,0x43,0xf0,0xf3 @ aesimc q10,q10 449*8fb009dcSAndroid Build Coastguard Worker vld1.32 {q8},[r7]! 450*8fb009dcSAndroid Build Coastguard Worker subs r6,r6,#2 451*8fb009dcSAndroid Build Coastguard Worker.byte 0x62,0x03,0xb0,0xf3 @ aesd q0,q9 452*8fb009dcSAndroid Build Coastguard Worker.byte 0xc0,0x03,0xb0,0xf3 @ aesimc q0,q0 453*8fb009dcSAndroid Build Coastguard Worker.byte 0x62,0x23,0xb0,0xf3 @ aesd q1,q9 454*8fb009dcSAndroid Build Coastguard Worker.byte 0xc2,0x23,0xb0,0xf3 @ aesimc q1,q1 455*8fb009dcSAndroid Build Coastguard Worker.byte 0x62,0x43,0xf0,0xf3 @ aesd q10,q9 456*8fb009dcSAndroid Build Coastguard Worker.byte 0xe4,0x43,0xf0,0xf3 @ aesimc q10,q10 457*8fb009dcSAndroid Build Coastguard Worker vld1.32 {q9},[r7]! 458*8fb009dcSAndroid Build Coastguard Worker bgt .Loop3x_cbc_dec 459*8fb009dcSAndroid Build Coastguard Worker 460*8fb009dcSAndroid Build Coastguard Worker.byte 0x60,0x03,0xb0,0xf3 @ aesd q0,q8 461*8fb009dcSAndroid Build Coastguard Worker.byte 0xc0,0x03,0xb0,0xf3 @ aesimc q0,q0 462*8fb009dcSAndroid Build Coastguard Worker.byte 0x60,0x23,0xb0,0xf3 @ aesd q1,q8 463*8fb009dcSAndroid Build Coastguard Worker.byte 0xc2,0x23,0xb0,0xf3 @ aesimc q1,q1 464*8fb009dcSAndroid Build Coastguard Worker.byte 0x60,0x43,0xf0,0xf3 @ aesd q10,q8 465*8fb009dcSAndroid Build Coastguard Worker.byte 0xe4,0x43,0xf0,0xf3 @ aesimc q10,q10 466*8fb009dcSAndroid Build Coastguard Worker veor q4,q6,q7 467*8fb009dcSAndroid Build Coastguard Worker subs r2,r2,#0x30 468*8fb009dcSAndroid Build Coastguard Worker veor q5,q2,q7 469*8fb009dcSAndroid Build Coastguard Worker movlo r6,r2 @ r6, r6, is zero at this point 470*8fb009dcSAndroid Build Coastguard Worker.byte 0x62,0x03,0xb0,0xf3 @ aesd q0,q9 471*8fb009dcSAndroid Build Coastguard Worker.byte 0xc0,0x03,0xb0,0xf3 @ aesimc q0,q0 472*8fb009dcSAndroid Build Coastguard Worker.byte 0x62,0x23,0xb0,0xf3 @ aesd q1,q9 473*8fb009dcSAndroid Build Coastguard Worker.byte 0xc2,0x23,0xb0,0xf3 @ aesimc q1,q1 474*8fb009dcSAndroid Build Coastguard Worker.byte 0x62,0x43,0xf0,0xf3 @ aesd q10,q9 475*8fb009dcSAndroid Build Coastguard Worker.byte 0xe4,0x43,0xf0,0xf3 @ aesimc q10,q10 476*8fb009dcSAndroid Build Coastguard Worker veor q9,q3,q7 477*8fb009dcSAndroid Build Coastguard Worker add r0,r0,r6 @ r0 is adjusted in such way that 478*8fb009dcSAndroid Build Coastguard Worker @ at exit from the loop q1-q10 479*8fb009dcSAndroid Build Coastguard Worker @ are loaded with last "words" 480*8fb009dcSAndroid Build Coastguard Worker vorr q6,q11,q11 481*8fb009dcSAndroid Build Coastguard Worker mov r7,r3 482*8fb009dcSAndroid Build Coastguard Worker.byte 0x68,0x03,0xb0,0xf3 @ aesd q0,q12 483*8fb009dcSAndroid Build Coastguard Worker.byte 0xc0,0x03,0xb0,0xf3 @ aesimc q0,q0 484*8fb009dcSAndroid Build Coastguard Worker.byte 0x68,0x23,0xb0,0xf3 @ aesd q1,q12 485*8fb009dcSAndroid Build Coastguard Worker.byte 0xc2,0x23,0xb0,0xf3 @ aesimc q1,q1 486*8fb009dcSAndroid Build Coastguard Worker.byte 0x68,0x43,0xf0,0xf3 @ aesd q10,q12 487*8fb009dcSAndroid Build Coastguard Worker.byte 0xe4,0x43,0xf0,0xf3 @ aesimc q10,q10 488*8fb009dcSAndroid Build Coastguard Worker vld1.8 {q2},[r0]! 489*8fb009dcSAndroid Build Coastguard Worker.byte 0x6a,0x03,0xb0,0xf3 @ aesd q0,q13 490*8fb009dcSAndroid Build Coastguard Worker.byte 0xc0,0x03,0xb0,0xf3 @ aesimc q0,q0 491*8fb009dcSAndroid Build Coastguard Worker.byte 0x6a,0x23,0xb0,0xf3 @ aesd q1,q13 492*8fb009dcSAndroid Build Coastguard Worker.byte 0xc2,0x23,0xb0,0xf3 @ aesimc q1,q1 493*8fb009dcSAndroid Build Coastguard Worker.byte 0x6a,0x43,0xf0,0xf3 @ aesd q10,q13 494*8fb009dcSAndroid Build Coastguard Worker.byte 0xe4,0x43,0xf0,0xf3 @ aesimc q10,q10 495*8fb009dcSAndroid Build Coastguard Worker vld1.8 {q3},[r0]! 496*8fb009dcSAndroid Build Coastguard Worker.byte 0x6c,0x03,0xb0,0xf3 @ aesd q0,q14 497*8fb009dcSAndroid Build Coastguard Worker.byte 0xc0,0x03,0xb0,0xf3 @ aesimc q0,q0 498*8fb009dcSAndroid Build Coastguard Worker.byte 0x6c,0x23,0xb0,0xf3 @ aesd q1,q14 499*8fb009dcSAndroid Build Coastguard Worker.byte 0xc2,0x23,0xb0,0xf3 @ aesimc q1,q1 500*8fb009dcSAndroid Build Coastguard Worker.byte 0x6c,0x43,0xf0,0xf3 @ aesd q10,q14 501*8fb009dcSAndroid Build Coastguard Worker.byte 0xe4,0x43,0xf0,0xf3 @ aesimc q10,q10 502*8fb009dcSAndroid Build Coastguard Worker vld1.8 {q11},[r0]! 503*8fb009dcSAndroid Build Coastguard Worker.byte 0x6e,0x03,0xb0,0xf3 @ aesd q0,q15 504*8fb009dcSAndroid Build Coastguard Worker.byte 0x6e,0x23,0xb0,0xf3 @ aesd q1,q15 505*8fb009dcSAndroid Build Coastguard Worker.byte 0x6e,0x43,0xf0,0xf3 @ aesd q10,q15 506*8fb009dcSAndroid Build Coastguard Worker vld1.32 {q8},[r7]! @ re-pre-load rndkey[0] 507*8fb009dcSAndroid Build Coastguard Worker add r6,r5,#2 508*8fb009dcSAndroid Build Coastguard Worker veor q4,q4,q0 509*8fb009dcSAndroid Build Coastguard Worker veor q5,q5,q1 510*8fb009dcSAndroid Build Coastguard Worker veor q10,q10,q9 511*8fb009dcSAndroid Build Coastguard Worker vld1.32 {q9},[r7]! @ re-pre-load rndkey[1] 512*8fb009dcSAndroid Build Coastguard Worker vst1.8 {q4},[r1]! 513*8fb009dcSAndroid Build Coastguard Worker vorr q0,q2,q2 514*8fb009dcSAndroid Build Coastguard Worker vst1.8 {q5},[r1]! 515*8fb009dcSAndroid Build Coastguard Worker vorr q1,q3,q3 516*8fb009dcSAndroid Build Coastguard Worker vst1.8 {q10},[r1]! 517*8fb009dcSAndroid Build Coastguard Worker vorr q10,q11,q11 518*8fb009dcSAndroid Build Coastguard Worker bhs .Loop3x_cbc_dec 519*8fb009dcSAndroid Build Coastguard Worker 520*8fb009dcSAndroid Build Coastguard Worker cmn r2,#0x30 521*8fb009dcSAndroid Build Coastguard Worker beq .Lcbc_done 522*8fb009dcSAndroid Build Coastguard Worker nop 523*8fb009dcSAndroid Build Coastguard Worker 524*8fb009dcSAndroid Build Coastguard Worker.Lcbc_dec_tail: 525*8fb009dcSAndroid Build Coastguard Worker.byte 0x60,0x23,0xb0,0xf3 @ aesd q1,q8 526*8fb009dcSAndroid Build Coastguard Worker.byte 0xc2,0x23,0xb0,0xf3 @ aesimc q1,q1 527*8fb009dcSAndroid Build Coastguard Worker.byte 0x60,0x43,0xf0,0xf3 @ aesd q10,q8 528*8fb009dcSAndroid Build Coastguard Worker.byte 0xe4,0x43,0xf0,0xf3 @ aesimc q10,q10 529*8fb009dcSAndroid Build Coastguard Worker vld1.32 {q8},[r7]! 530*8fb009dcSAndroid Build Coastguard Worker subs r6,r6,#2 531*8fb009dcSAndroid Build Coastguard Worker.byte 0x62,0x23,0xb0,0xf3 @ aesd q1,q9 532*8fb009dcSAndroid Build Coastguard Worker.byte 0xc2,0x23,0xb0,0xf3 @ aesimc q1,q1 533*8fb009dcSAndroid Build Coastguard Worker.byte 0x62,0x43,0xf0,0xf3 @ aesd q10,q9 534*8fb009dcSAndroid Build Coastguard Worker.byte 0xe4,0x43,0xf0,0xf3 @ aesimc q10,q10 535*8fb009dcSAndroid Build Coastguard Worker vld1.32 {q9},[r7]! 536*8fb009dcSAndroid Build Coastguard Worker bgt .Lcbc_dec_tail 537*8fb009dcSAndroid Build Coastguard Worker 538*8fb009dcSAndroid Build Coastguard Worker.byte 0x60,0x23,0xb0,0xf3 @ aesd q1,q8 539*8fb009dcSAndroid Build Coastguard Worker.byte 0xc2,0x23,0xb0,0xf3 @ aesimc q1,q1 540*8fb009dcSAndroid Build Coastguard Worker.byte 0x60,0x43,0xf0,0xf3 @ aesd q10,q8 541*8fb009dcSAndroid Build Coastguard Worker.byte 0xe4,0x43,0xf0,0xf3 @ aesimc q10,q10 542*8fb009dcSAndroid Build Coastguard Worker.byte 0x62,0x23,0xb0,0xf3 @ aesd q1,q9 543*8fb009dcSAndroid Build Coastguard Worker.byte 0xc2,0x23,0xb0,0xf3 @ aesimc q1,q1 544*8fb009dcSAndroid Build Coastguard Worker.byte 0x62,0x43,0xf0,0xf3 @ aesd q10,q9 545*8fb009dcSAndroid Build Coastguard Worker.byte 0xe4,0x43,0xf0,0xf3 @ aesimc q10,q10 546*8fb009dcSAndroid Build Coastguard Worker.byte 0x68,0x23,0xb0,0xf3 @ aesd q1,q12 547*8fb009dcSAndroid Build Coastguard Worker.byte 0xc2,0x23,0xb0,0xf3 @ aesimc q1,q1 548*8fb009dcSAndroid Build Coastguard Worker.byte 0x68,0x43,0xf0,0xf3 @ aesd q10,q12 549*8fb009dcSAndroid Build Coastguard Worker.byte 0xe4,0x43,0xf0,0xf3 @ aesimc q10,q10 550*8fb009dcSAndroid Build Coastguard Worker cmn r2,#0x20 551*8fb009dcSAndroid Build Coastguard Worker.byte 0x6a,0x23,0xb0,0xf3 @ aesd q1,q13 552*8fb009dcSAndroid Build Coastguard Worker.byte 0xc2,0x23,0xb0,0xf3 @ aesimc q1,q1 553*8fb009dcSAndroid Build Coastguard Worker.byte 0x6a,0x43,0xf0,0xf3 @ aesd q10,q13 554*8fb009dcSAndroid Build Coastguard Worker.byte 0xe4,0x43,0xf0,0xf3 @ aesimc q10,q10 555*8fb009dcSAndroid Build Coastguard Worker veor q5,q6,q7 556*8fb009dcSAndroid Build Coastguard Worker.byte 0x6c,0x23,0xb0,0xf3 @ aesd q1,q14 557*8fb009dcSAndroid Build Coastguard Worker.byte 0xc2,0x23,0xb0,0xf3 @ aesimc q1,q1 558*8fb009dcSAndroid Build Coastguard Worker.byte 0x6c,0x43,0xf0,0xf3 @ aesd q10,q14 559*8fb009dcSAndroid Build Coastguard Worker.byte 0xe4,0x43,0xf0,0xf3 @ aesimc q10,q10 560*8fb009dcSAndroid Build Coastguard Worker veor q9,q3,q7 561*8fb009dcSAndroid Build Coastguard Worker.byte 0x6e,0x23,0xb0,0xf3 @ aesd q1,q15 562*8fb009dcSAndroid Build Coastguard Worker.byte 0x6e,0x43,0xf0,0xf3 @ aesd q10,q15 563*8fb009dcSAndroid Build Coastguard Worker beq .Lcbc_dec_one 564*8fb009dcSAndroid Build Coastguard Worker veor q5,q5,q1 565*8fb009dcSAndroid Build Coastguard Worker veor q9,q9,q10 566*8fb009dcSAndroid Build Coastguard Worker vorr q6,q11,q11 567*8fb009dcSAndroid Build Coastguard Worker vst1.8 {q5},[r1]! 568*8fb009dcSAndroid Build Coastguard Worker vst1.8 {q9},[r1]! 569*8fb009dcSAndroid Build Coastguard Worker b .Lcbc_done 570*8fb009dcSAndroid Build Coastguard Worker 571*8fb009dcSAndroid Build Coastguard Worker.Lcbc_dec_one: 572*8fb009dcSAndroid Build Coastguard Worker veor q5,q5,q10 573*8fb009dcSAndroid Build Coastguard Worker vorr q6,q11,q11 574*8fb009dcSAndroid Build Coastguard Worker vst1.8 {q5},[r1]! 575*8fb009dcSAndroid Build Coastguard Worker 576*8fb009dcSAndroid Build Coastguard Worker.Lcbc_done: 577*8fb009dcSAndroid Build Coastguard Worker vst1.8 {q6},[r4] 578*8fb009dcSAndroid Build Coastguard Worker.Lcbc_abort: 579*8fb009dcSAndroid Build Coastguard Worker vldmia sp!,{d8,d9,d10,d11,d12,d13,d14,d15} 580*8fb009dcSAndroid Build Coastguard Worker ldmia sp!,{r4,r5,r6,r7,r8,pc} 581*8fb009dcSAndroid Build Coastguard Worker.size aes_hw_cbc_encrypt,.-aes_hw_cbc_encrypt 582*8fb009dcSAndroid Build Coastguard Worker.globl aes_hw_ctr32_encrypt_blocks 583*8fb009dcSAndroid Build Coastguard Worker.hidden aes_hw_ctr32_encrypt_blocks 584*8fb009dcSAndroid Build Coastguard Worker.type aes_hw_ctr32_encrypt_blocks,%function 585*8fb009dcSAndroid Build Coastguard Worker.align 5 586*8fb009dcSAndroid Build Coastguard Workeraes_hw_ctr32_encrypt_blocks: 587*8fb009dcSAndroid Build Coastguard Worker mov ip,sp 588*8fb009dcSAndroid Build Coastguard Worker stmdb sp!,{r4,r5,r6,r7,r8,r9,r10,lr} 589*8fb009dcSAndroid Build Coastguard Worker vstmdb sp!,{d8,d9,d10,d11,d12,d13,d14,d15} @ ABI specification says so 590*8fb009dcSAndroid Build Coastguard Worker ldr r4, [ip] @ load remaining arg 591*8fb009dcSAndroid Build Coastguard Worker ldr r5,[r3,#240] 592*8fb009dcSAndroid Build Coastguard Worker 593*8fb009dcSAndroid Build Coastguard Worker ldr r8, [r4, #12] 594*8fb009dcSAndroid Build Coastguard Worker vld1.32 {q0},[r4] 595*8fb009dcSAndroid Build Coastguard Worker 596*8fb009dcSAndroid Build Coastguard Worker vld1.32 {q8,q9},[r3] @ load key schedule... 597*8fb009dcSAndroid Build Coastguard Worker sub r5,r5,#4 598*8fb009dcSAndroid Build Coastguard Worker mov r12,#16 599*8fb009dcSAndroid Build Coastguard Worker cmp r2,#2 600*8fb009dcSAndroid Build Coastguard Worker add r7,r3,r5,lsl#4 @ pointer to last 5 round keys 601*8fb009dcSAndroid Build Coastguard Worker sub r5,r5,#2 602*8fb009dcSAndroid Build Coastguard Worker vld1.32 {q12,q13},[r7]! 603*8fb009dcSAndroid Build Coastguard Worker vld1.32 {q14,q15},[r7]! 604*8fb009dcSAndroid Build Coastguard Worker vld1.32 {q7},[r7] 605*8fb009dcSAndroid Build Coastguard Worker add r7,r3,#32 606*8fb009dcSAndroid Build Coastguard Worker mov r6,r5 607*8fb009dcSAndroid Build Coastguard Worker movlo r12,#0 608*8fb009dcSAndroid Build Coastguard Worker 609*8fb009dcSAndroid Build Coastguard Worker @ ARM Cortex-A57 and Cortex-A72 cores running in 32-bit mode are 610*8fb009dcSAndroid Build Coastguard Worker @ affected by silicon errata #1742098 [0] and #1655431 [1], 611*8fb009dcSAndroid Build Coastguard Worker @ respectively, where the second instruction of an aese/aesmc 612*8fb009dcSAndroid Build Coastguard Worker @ instruction pair may execute twice if an interrupt is taken right 613*8fb009dcSAndroid Build Coastguard Worker @ after the first instruction consumes an input register of which a 614*8fb009dcSAndroid Build Coastguard Worker @ single 32-bit lane has been updated the last time it was modified. 615*8fb009dcSAndroid Build Coastguard Worker @ 616*8fb009dcSAndroid Build Coastguard Worker @ This function uses a counter in one 32-bit lane. The 617*8fb009dcSAndroid Build Coastguard Worker @ could write to q1 and q10 directly, but that trips this bugs. 618*8fb009dcSAndroid Build Coastguard Worker @ We write to q6 and copy to the final register as a workaround. 619*8fb009dcSAndroid Build Coastguard Worker @ 620*8fb009dcSAndroid Build Coastguard Worker @ [0] ARM-EPM-049219 v23 Cortex-A57 MPCore Software Developers Errata Notice 621*8fb009dcSAndroid Build Coastguard Worker @ [1] ARM-EPM-012079 v11.0 Cortex-A72 MPCore Software Developers Errata Notice 622*8fb009dcSAndroid Build Coastguard Worker#ifndef __ARMEB__ 623*8fb009dcSAndroid Build Coastguard Worker rev r8, r8 624*8fb009dcSAndroid Build Coastguard Worker#endif 625*8fb009dcSAndroid Build Coastguard Worker add r10, r8, #1 626*8fb009dcSAndroid Build Coastguard Worker vorr q6,q0,q0 627*8fb009dcSAndroid Build Coastguard Worker rev r10, r10 628*8fb009dcSAndroid Build Coastguard Worker vmov.32 d13[1],r10 629*8fb009dcSAndroid Build Coastguard Worker add r8, r8, #2 630*8fb009dcSAndroid Build Coastguard Worker vorr q1,q6,q6 631*8fb009dcSAndroid Build Coastguard Worker bls .Lctr32_tail 632*8fb009dcSAndroid Build Coastguard Worker rev r12, r8 633*8fb009dcSAndroid Build Coastguard Worker vmov.32 d13[1],r12 634*8fb009dcSAndroid Build Coastguard Worker sub r2,r2,#3 @ bias 635*8fb009dcSAndroid Build Coastguard Worker vorr q10,q6,q6 636*8fb009dcSAndroid Build Coastguard Worker b .Loop3x_ctr32 637*8fb009dcSAndroid Build Coastguard Worker 638*8fb009dcSAndroid Build Coastguard Worker.align 4 639*8fb009dcSAndroid Build Coastguard Worker.Loop3x_ctr32: 640*8fb009dcSAndroid Build Coastguard Worker.byte 0x20,0x03,0xb0,0xf3 @ aese q0,q8 641*8fb009dcSAndroid Build Coastguard Worker.byte 0x80,0x03,0xb0,0xf3 @ aesmc q0,q0 642*8fb009dcSAndroid Build Coastguard Worker.byte 0x20,0x23,0xb0,0xf3 @ aese q1,q8 643*8fb009dcSAndroid Build Coastguard Worker.byte 0x82,0x23,0xb0,0xf3 @ aesmc q1,q1 644*8fb009dcSAndroid Build Coastguard Worker.byte 0x20,0x43,0xf0,0xf3 @ aese q10,q8 645*8fb009dcSAndroid Build Coastguard Worker.byte 0xa4,0x43,0xf0,0xf3 @ aesmc q10,q10 646*8fb009dcSAndroid Build Coastguard Worker vld1.32 {q8},[r7]! 647*8fb009dcSAndroid Build Coastguard Worker subs r6,r6,#2 648*8fb009dcSAndroid Build Coastguard Worker.byte 0x22,0x03,0xb0,0xf3 @ aese q0,q9 649*8fb009dcSAndroid Build Coastguard Worker.byte 0x80,0x03,0xb0,0xf3 @ aesmc q0,q0 650*8fb009dcSAndroid Build Coastguard Worker.byte 0x22,0x23,0xb0,0xf3 @ aese q1,q9 651*8fb009dcSAndroid Build Coastguard Worker.byte 0x82,0x23,0xb0,0xf3 @ aesmc q1,q1 652*8fb009dcSAndroid Build Coastguard Worker.byte 0x22,0x43,0xf0,0xf3 @ aese q10,q9 653*8fb009dcSAndroid Build Coastguard Worker.byte 0xa4,0x43,0xf0,0xf3 @ aesmc q10,q10 654*8fb009dcSAndroid Build Coastguard Worker vld1.32 {q9},[r7]! 655*8fb009dcSAndroid Build Coastguard Worker bgt .Loop3x_ctr32 656*8fb009dcSAndroid Build Coastguard Worker 657*8fb009dcSAndroid Build Coastguard Worker.byte 0x20,0x03,0xb0,0xf3 @ aese q0,q8 658*8fb009dcSAndroid Build Coastguard Worker.byte 0x80,0x83,0xb0,0xf3 @ aesmc q4,q0 659*8fb009dcSAndroid Build Coastguard Worker.byte 0x20,0x23,0xb0,0xf3 @ aese q1,q8 660*8fb009dcSAndroid Build Coastguard Worker.byte 0x82,0xa3,0xb0,0xf3 @ aesmc q5,q1 661*8fb009dcSAndroid Build Coastguard Worker vld1.8 {q2},[r0]! 662*8fb009dcSAndroid Build Coastguard Worker add r9,r8,#1 663*8fb009dcSAndroid Build Coastguard Worker.byte 0x20,0x43,0xf0,0xf3 @ aese q10,q8 664*8fb009dcSAndroid Build Coastguard Worker.byte 0xa4,0x43,0xf0,0xf3 @ aesmc q10,q10 665*8fb009dcSAndroid Build Coastguard Worker vld1.8 {q3},[r0]! 666*8fb009dcSAndroid Build Coastguard Worker rev r9,r9 667*8fb009dcSAndroid Build Coastguard Worker.byte 0x22,0x83,0xb0,0xf3 @ aese q4,q9 668*8fb009dcSAndroid Build Coastguard Worker.byte 0x88,0x83,0xb0,0xf3 @ aesmc q4,q4 669*8fb009dcSAndroid Build Coastguard Worker.byte 0x22,0xa3,0xb0,0xf3 @ aese q5,q9 670*8fb009dcSAndroid Build Coastguard Worker.byte 0x8a,0xa3,0xb0,0xf3 @ aesmc q5,q5 671*8fb009dcSAndroid Build Coastguard Worker vld1.8 {q11},[r0]! 672*8fb009dcSAndroid Build Coastguard Worker mov r7,r3 673*8fb009dcSAndroid Build Coastguard Worker.byte 0x22,0x43,0xf0,0xf3 @ aese q10,q9 674*8fb009dcSAndroid Build Coastguard Worker.byte 0xa4,0x23,0xf0,0xf3 @ aesmc q9,q10 675*8fb009dcSAndroid Build Coastguard Worker.byte 0x28,0x83,0xb0,0xf3 @ aese q4,q12 676*8fb009dcSAndroid Build Coastguard Worker.byte 0x88,0x83,0xb0,0xf3 @ aesmc q4,q4 677*8fb009dcSAndroid Build Coastguard Worker.byte 0x28,0xa3,0xb0,0xf3 @ aese q5,q12 678*8fb009dcSAndroid Build Coastguard Worker.byte 0x8a,0xa3,0xb0,0xf3 @ aesmc q5,q5 679*8fb009dcSAndroid Build Coastguard Worker veor q2,q2,q7 680*8fb009dcSAndroid Build Coastguard Worker add r10,r8,#2 681*8fb009dcSAndroid Build Coastguard Worker.byte 0x28,0x23,0xf0,0xf3 @ aese q9,q12 682*8fb009dcSAndroid Build Coastguard Worker.byte 0xa2,0x23,0xf0,0xf3 @ aesmc q9,q9 683*8fb009dcSAndroid Build Coastguard Worker veor q3,q3,q7 684*8fb009dcSAndroid Build Coastguard Worker add r8,r8,#3 685*8fb009dcSAndroid Build Coastguard Worker.byte 0x2a,0x83,0xb0,0xf3 @ aese q4,q13 686*8fb009dcSAndroid Build Coastguard Worker.byte 0x88,0x83,0xb0,0xf3 @ aesmc q4,q4 687*8fb009dcSAndroid Build Coastguard Worker.byte 0x2a,0xa3,0xb0,0xf3 @ aese q5,q13 688*8fb009dcSAndroid Build Coastguard Worker.byte 0x8a,0xa3,0xb0,0xf3 @ aesmc q5,q5 689*8fb009dcSAndroid Build Coastguard Worker @ Note the logic to update q0, q1, and q1 is written to work 690*8fb009dcSAndroid Build Coastguard Worker @ around a bug in ARM Cortex-A57 and Cortex-A72 cores running in 691*8fb009dcSAndroid Build Coastguard Worker @ 32-bit mode. See the comment above. 692*8fb009dcSAndroid Build Coastguard Worker veor q11,q11,q7 693*8fb009dcSAndroid Build Coastguard Worker vmov.32 d13[1], r9 694*8fb009dcSAndroid Build Coastguard Worker.byte 0x2a,0x23,0xf0,0xf3 @ aese q9,q13 695*8fb009dcSAndroid Build Coastguard Worker.byte 0xa2,0x23,0xf0,0xf3 @ aesmc q9,q9 696*8fb009dcSAndroid Build Coastguard Worker vorr q0,q6,q6 697*8fb009dcSAndroid Build Coastguard Worker rev r10,r10 698*8fb009dcSAndroid Build Coastguard Worker.byte 0x2c,0x83,0xb0,0xf3 @ aese q4,q14 699*8fb009dcSAndroid Build Coastguard Worker.byte 0x88,0x83,0xb0,0xf3 @ aesmc q4,q4 700*8fb009dcSAndroid Build Coastguard Worker vmov.32 d13[1], r10 701*8fb009dcSAndroid Build Coastguard Worker rev r12,r8 702*8fb009dcSAndroid Build Coastguard Worker.byte 0x2c,0xa3,0xb0,0xf3 @ aese q5,q14 703*8fb009dcSAndroid Build Coastguard Worker.byte 0x8a,0xa3,0xb0,0xf3 @ aesmc q5,q5 704*8fb009dcSAndroid Build Coastguard Worker vorr q1,q6,q6 705*8fb009dcSAndroid Build Coastguard Worker vmov.32 d13[1], r12 706*8fb009dcSAndroid Build Coastguard Worker.byte 0x2c,0x23,0xf0,0xf3 @ aese q9,q14 707*8fb009dcSAndroid Build Coastguard Worker.byte 0xa2,0x23,0xf0,0xf3 @ aesmc q9,q9 708*8fb009dcSAndroid Build Coastguard Worker vorr q10,q6,q6 709*8fb009dcSAndroid Build Coastguard Worker subs r2,r2,#3 710*8fb009dcSAndroid Build Coastguard Worker.byte 0x2e,0x83,0xb0,0xf3 @ aese q4,q15 711*8fb009dcSAndroid Build Coastguard Worker.byte 0x2e,0xa3,0xb0,0xf3 @ aese q5,q15 712*8fb009dcSAndroid Build Coastguard Worker.byte 0x2e,0x23,0xf0,0xf3 @ aese q9,q15 713*8fb009dcSAndroid Build Coastguard Worker 714*8fb009dcSAndroid Build Coastguard Worker veor q2,q2,q4 715*8fb009dcSAndroid Build Coastguard Worker vld1.32 {q8},[r7]! @ re-pre-load rndkey[0] 716*8fb009dcSAndroid Build Coastguard Worker vst1.8 {q2},[r1]! 717*8fb009dcSAndroid Build Coastguard Worker veor q3,q3,q5 718*8fb009dcSAndroid Build Coastguard Worker mov r6,r5 719*8fb009dcSAndroid Build Coastguard Worker vst1.8 {q3},[r1]! 720*8fb009dcSAndroid Build Coastguard Worker veor q11,q11,q9 721*8fb009dcSAndroid Build Coastguard Worker vld1.32 {q9},[r7]! @ re-pre-load rndkey[1] 722*8fb009dcSAndroid Build Coastguard Worker vst1.8 {q11},[r1]! 723*8fb009dcSAndroid Build Coastguard Worker bhs .Loop3x_ctr32 724*8fb009dcSAndroid Build Coastguard Worker 725*8fb009dcSAndroid Build Coastguard Worker adds r2,r2,#3 726*8fb009dcSAndroid Build Coastguard Worker beq .Lctr32_done 727*8fb009dcSAndroid Build Coastguard Worker cmp r2,#1 728*8fb009dcSAndroid Build Coastguard Worker mov r12,#16 729*8fb009dcSAndroid Build Coastguard Worker moveq r12,#0 730*8fb009dcSAndroid Build Coastguard Worker 731*8fb009dcSAndroid Build Coastguard Worker.Lctr32_tail: 732*8fb009dcSAndroid Build Coastguard Worker.byte 0x20,0x03,0xb0,0xf3 @ aese q0,q8 733*8fb009dcSAndroid Build Coastguard Worker.byte 0x80,0x03,0xb0,0xf3 @ aesmc q0,q0 734*8fb009dcSAndroid Build Coastguard Worker.byte 0x20,0x23,0xb0,0xf3 @ aese q1,q8 735*8fb009dcSAndroid Build Coastguard Worker.byte 0x82,0x23,0xb0,0xf3 @ aesmc q1,q1 736*8fb009dcSAndroid Build Coastguard Worker vld1.32 {q8},[r7]! 737*8fb009dcSAndroid Build Coastguard Worker subs r6,r6,#2 738*8fb009dcSAndroid Build Coastguard Worker.byte 0x22,0x03,0xb0,0xf3 @ aese q0,q9 739*8fb009dcSAndroid Build Coastguard Worker.byte 0x80,0x03,0xb0,0xf3 @ aesmc q0,q0 740*8fb009dcSAndroid Build Coastguard Worker.byte 0x22,0x23,0xb0,0xf3 @ aese q1,q9 741*8fb009dcSAndroid Build Coastguard Worker.byte 0x82,0x23,0xb0,0xf3 @ aesmc q1,q1 742*8fb009dcSAndroid Build Coastguard Worker vld1.32 {q9},[r7]! 743*8fb009dcSAndroid Build Coastguard Worker bgt .Lctr32_tail 744*8fb009dcSAndroid Build Coastguard Worker 745*8fb009dcSAndroid Build Coastguard Worker.byte 0x20,0x03,0xb0,0xf3 @ aese q0,q8 746*8fb009dcSAndroid Build Coastguard Worker.byte 0x80,0x03,0xb0,0xf3 @ aesmc q0,q0 747*8fb009dcSAndroid Build Coastguard Worker.byte 0x20,0x23,0xb0,0xf3 @ aese q1,q8 748*8fb009dcSAndroid Build Coastguard Worker.byte 0x82,0x23,0xb0,0xf3 @ aesmc q1,q1 749*8fb009dcSAndroid Build Coastguard Worker.byte 0x22,0x03,0xb0,0xf3 @ aese q0,q9 750*8fb009dcSAndroid Build Coastguard Worker.byte 0x80,0x03,0xb0,0xf3 @ aesmc q0,q0 751*8fb009dcSAndroid Build Coastguard Worker.byte 0x22,0x23,0xb0,0xf3 @ aese q1,q9 752*8fb009dcSAndroid Build Coastguard Worker.byte 0x82,0x23,0xb0,0xf3 @ aesmc q1,q1 753*8fb009dcSAndroid Build Coastguard Worker vld1.8 {q2},[r0],r12 754*8fb009dcSAndroid Build Coastguard Worker.byte 0x28,0x03,0xb0,0xf3 @ aese q0,q12 755*8fb009dcSAndroid Build Coastguard Worker.byte 0x80,0x03,0xb0,0xf3 @ aesmc q0,q0 756*8fb009dcSAndroid Build Coastguard Worker.byte 0x28,0x23,0xb0,0xf3 @ aese q1,q12 757*8fb009dcSAndroid Build Coastguard Worker.byte 0x82,0x23,0xb0,0xf3 @ aesmc q1,q1 758*8fb009dcSAndroid Build Coastguard Worker vld1.8 {q3},[r0] 759*8fb009dcSAndroid Build Coastguard Worker.byte 0x2a,0x03,0xb0,0xf3 @ aese q0,q13 760*8fb009dcSAndroid Build Coastguard Worker.byte 0x80,0x03,0xb0,0xf3 @ aesmc q0,q0 761*8fb009dcSAndroid Build Coastguard Worker.byte 0x2a,0x23,0xb0,0xf3 @ aese q1,q13 762*8fb009dcSAndroid Build Coastguard Worker.byte 0x82,0x23,0xb0,0xf3 @ aesmc q1,q1 763*8fb009dcSAndroid Build Coastguard Worker veor q2,q2,q7 764*8fb009dcSAndroid Build Coastguard Worker.byte 0x2c,0x03,0xb0,0xf3 @ aese q0,q14 765*8fb009dcSAndroid Build Coastguard Worker.byte 0x80,0x03,0xb0,0xf3 @ aesmc q0,q0 766*8fb009dcSAndroid Build Coastguard Worker.byte 0x2c,0x23,0xb0,0xf3 @ aese q1,q14 767*8fb009dcSAndroid Build Coastguard Worker.byte 0x82,0x23,0xb0,0xf3 @ aesmc q1,q1 768*8fb009dcSAndroid Build Coastguard Worker veor q3,q3,q7 769*8fb009dcSAndroid Build Coastguard Worker.byte 0x2e,0x03,0xb0,0xf3 @ aese q0,q15 770*8fb009dcSAndroid Build Coastguard Worker.byte 0x2e,0x23,0xb0,0xf3 @ aese q1,q15 771*8fb009dcSAndroid Build Coastguard Worker 772*8fb009dcSAndroid Build Coastguard Worker cmp r2,#1 773*8fb009dcSAndroid Build Coastguard Worker veor q2,q2,q0 774*8fb009dcSAndroid Build Coastguard Worker veor q3,q3,q1 775*8fb009dcSAndroid Build Coastguard Worker vst1.8 {q2},[r1]! 776*8fb009dcSAndroid Build Coastguard Worker beq .Lctr32_done 777*8fb009dcSAndroid Build Coastguard Worker vst1.8 {q3},[r1] 778*8fb009dcSAndroid Build Coastguard Worker 779*8fb009dcSAndroid Build Coastguard Worker.Lctr32_done: 780*8fb009dcSAndroid Build Coastguard Worker vldmia sp!,{d8,d9,d10,d11,d12,d13,d14,d15} 781*8fb009dcSAndroid Build Coastguard Worker ldmia sp!,{r4,r5,r6,r7,r8,r9,r10,pc} 782*8fb009dcSAndroid Build Coastguard Worker.size aes_hw_ctr32_encrypt_blocks,.-aes_hw_ctr32_encrypt_blocks 783*8fb009dcSAndroid Build Coastguard Worker#endif 784*8fb009dcSAndroid Build Coastguard Worker#endif // !OPENSSL_NO_ASM && defined(OPENSSL_ARM) && defined(__ELF__) 785