Path: blob/main/sys/crypto/openssl/arm/aesv8-armx.S
39483 views
/* Do not modify. This file is auto-generated from aesv8-armx.pl. */1#include "arm_arch.h"23#if __ARM_MAX_ARCH__>=74.arch armv7-a @ don't confuse not-so-latest binutils with argv8 :-)5.fpu neon6#ifdef __thumb2__7.syntax unified8.thumb9# define INST(a,b,c,d) .byte c,d|0xc,a,b10#else11.code 3212# define INST(a,b,c,d) .byte a,b,c,d13#endif1415.text16.align 517.Lrcon:18.long 0x01,0x01,0x01,0x0119.long 0x0c0f0e0d,0x0c0f0e0d,0x0c0f0e0d,0x0c0f0e0d @ rotate-n-splat20.long 0x1b,0x1b,0x1b,0x1b21.globl aes_v8_set_encrypt_key22.type aes_v8_set_encrypt_key,%function23.align 524aes_v8_set_encrypt_key:25.Lenc_key:26mov r3,#-127cmp r0,#028beq .Lenc_key_abort29cmp r2,#030beq .Lenc_key_abort31mov r3,#-232cmp r1,#12833blt .Lenc_key_abort34cmp r1,#25635bgt .Lenc_key_abort36tst r1,#0x3f37bne .Lenc_key_abort3839adr r3,.Lrcon40cmp r1,#1924142veor q0,q0,q043vld1.8 {q3},[r0]!44mov r1,#8 @ reuse r145vld1.32 {q1,q2},[r3]!4647blt .Loop12848beq .L19249b .L2565051.align 452.Loop128:53vtbl.8 d20,{q3},d454vtbl.8 d21,{q3},d555vext.8 q9,q0,q3,#1256vst1.32 {q3},[r2]!57INST(0x00,0x43,0xf0,0xf3) @ aese q10,q058subs r1,r1,#15960veor q3,q3,q961vext.8 q9,q0,q9,#1262veor q3,q3,q963vext.8 q9,q0,q9,#1264veor q10,q10,q165veor q3,q3,q966vshl.u8 q1,q1,#167veor q3,q3,q1068bne .Loop1286970vld1.32 {q1},[r3]7172vtbl.8 d20,{q3},d473vtbl.8 d21,{q3},d574vext.8 q9,q0,q3,#1275vst1.32 {q3},[r2]!76INST(0x00,0x43,0xf0,0xf3) @ aese q10,q07778veor q3,q3,q979vext.8 q9,q0,q9,#1280veor q3,q3,q981vext.8 q9,q0,q9,#1282veor q10,q10,q183veor q3,q3,q984vshl.u8 q1,q1,#185veor q3,q3,q108687vtbl.8 d20,{q3},d488vtbl.8 d21,{q3},d589vext.8 q9,q0,q3,#1290vst1.32 {q3},[r2]!91INST(0x00,0x43,0xf0,0xf3) @ aese q10,q09293veor q3,q3,q994vext.8 q9,q0,q9,#1295veor q3,q3,q996vext.8 q9,q0,q9,#1297veor q10,q10,q198veor q3,q3,q999veor q3,q3,q10100vst1.32 {q3},[r2]101add r2,r2,#0x50102103mov r12,#10104b .Ldone105106.align 4107.L192:108vld1.8 {d16},[r0]!109vmov.i8 q10,#8 @ borrow q10110vst1.32 {q3},[r2]!111vsub.i8 q2,q2,q10 @ adjust the mask112113.Loop192:114vtbl.8 d20,{q8},d4115vtbl.8 d21,{q8},d5116vext.8 q9,q0,q3,#12117#ifdef __ARMEB__118vst1.32 {q8},[r2]!119sub r2,r2,#8120#else121vst1.32 {d16},[r2]!122#endif123INST(0x00,0x43,0xf0,0xf3) @ aese q10,q0124subs r1,r1,#1125126veor q3,q3,q9127vext.8 q9,q0,q9,#12128veor q3,q3,q9129vext.8 q9,q0,q9,#12130veor q3,q3,q9131132vdup.32 q9,d7[1]133veor q9,q9,q8134veor q10,q10,q1135vext.8 q8,q0,q8,#12136vshl.u8 q1,q1,#1137veor q8,q8,q9138veor q3,q3,q10139veor q8,q8,q10140vst1.32 {q3},[r2]!141bne .Loop192142143mov r12,#12144add r2,r2,#0x20145b .Ldone146147.align 4148.L256:149vld1.8 {q8},[r0]150mov r1,#7151mov r12,#14152vst1.32 {q3},[r2]!153154.Loop256:155vtbl.8 d20,{q8},d4156vtbl.8 d21,{q8},d5157vext.8 q9,q0,q3,#12158vst1.32 {q8},[r2]!159INST(0x00,0x43,0xf0,0xf3) @ aese q10,q0160subs r1,r1,#1161162veor q3,q3,q9163vext.8 q9,q0,q9,#12164veor q3,q3,q9165vext.8 q9,q0,q9,#12166veor q10,q10,q1167veor q3,q3,q9168vshl.u8 q1,q1,#1169veor q3,q3,q10170vst1.32 {q3},[r2]!171beq .Ldone172173vdup.32 q10,d7[1]174vext.8 q9,q0,q8,#12175INST(0x00,0x43,0xf0,0xf3) @ aese q10,q0176177veor q8,q8,q9178vext.8 q9,q0,q9,#12179veor q8,q8,q9180vext.8 q9,q0,q9,#12181veor q8,q8,q9182183veor q8,q8,q10184b .Loop256185186.Ldone:187str r12,[r2]188mov r3,#0189190.Lenc_key_abort:191mov r0,r3 @ return value192193bx lr194.size aes_v8_set_encrypt_key,.-aes_v8_set_encrypt_key195196.globl aes_v8_set_decrypt_key197.type aes_v8_set_decrypt_key,%function198.align 5199aes_v8_set_decrypt_key:200stmdb sp!,{r4,lr}201bl .Lenc_key202203cmp r0,#0204bne .Ldec_key_abort205206sub r2,r2,#240 @ restore original r2207mov r4,#-16208add r0,r2,r12,lsl#4 @ end of key schedule209210vld1.32 {q0},[r2]211vld1.32 {q1},[r0]212vst1.32 {q0},[r0],r4213vst1.32 {q1},[r2]!214215.Loop_imc:216vld1.32 {q0},[r2]217vld1.32 {q1},[r0]218INST(0xc0,0x03,0xb0,0xf3) @ aesimc q0,q0219INST(0xc2,0x23,0xb0,0xf3) @ aesimc q1,q1220vst1.32 {q0},[r0],r4221vst1.32 {q1},[r2]!222cmp r0,r2223bhi .Loop_imc224225vld1.32 {q0},[r2]226INST(0xc0,0x03,0xb0,0xf3) @ aesimc q0,q0227vst1.32 {q0},[r0]228229eor r0,r0,r0 @ return value230.Ldec_key_abort:231ldmia sp!,{r4,pc}232.size aes_v8_set_decrypt_key,.-aes_v8_set_decrypt_key233.globl aes_v8_encrypt234.type aes_v8_encrypt,%function235.align 5236aes_v8_encrypt:237ldr r3,[r2,#240]238vld1.32 {q0},[r2]!239vld1.8 {q2},[r0]240sub r3,r3,#2241vld1.32 {q1},[r2]!242243.Loop_enc:244INST(0x00,0x43,0xb0,0xf3) @ aese q2,q0245INST(0x84,0x43,0xb0,0xf3) @ aesmc q2,q2246vld1.32 {q0},[r2]!247subs r3,r3,#2248INST(0x02,0x43,0xb0,0xf3) @ aese q2,q1249INST(0x84,0x43,0xb0,0xf3) @ aesmc q2,q2250vld1.32 {q1},[r2]!251bgt .Loop_enc252253INST(0x00,0x43,0xb0,0xf3) @ aese q2,q0254INST(0x84,0x43,0xb0,0xf3) @ aesmc q2,q2255vld1.32 {q0},[r2]256INST(0x02,0x43,0xb0,0xf3) @ aese q2,q1257veor q2,q2,q0258259vst1.8 {q2},[r1]260bx lr261.size aes_v8_encrypt,.-aes_v8_encrypt262.globl aes_v8_decrypt263.type aes_v8_decrypt,%function264.align 5265aes_v8_decrypt:266ldr r3,[r2,#240]267vld1.32 {q0},[r2]!268vld1.8 {q2},[r0]269sub r3,r3,#2270vld1.32 {q1},[r2]!271272.Loop_dec:273INST(0x40,0x43,0xb0,0xf3) @ aesd q2,q0274INST(0xc4,0x43,0xb0,0xf3) @ aesimc q2,q2275vld1.32 {q0},[r2]!276subs r3,r3,#2277INST(0x42,0x43,0xb0,0xf3) @ aesd q2,q1278INST(0xc4,0x43,0xb0,0xf3) @ aesimc q2,q2279vld1.32 {q1},[r2]!280bgt .Loop_dec281282INST(0x40,0x43,0xb0,0xf3) @ aesd q2,q0283INST(0xc4,0x43,0xb0,0xf3) @ aesimc q2,q2284vld1.32 {q0},[r2]285INST(0x42,0x43,0xb0,0xf3) @ aesd q2,q1286veor q2,q2,q0287288vst1.8 {q2},[r1]289bx lr290.size aes_v8_decrypt,.-aes_v8_decrypt291.globl aes_v8_ecb_encrypt292.type aes_v8_ecb_encrypt,%function293.align 5294aes_v8_ecb_encrypt:295mov ip,sp296stmdb sp!,{r4,r5,r6,r7,r8,lr}297vstmdb sp!,{d8,d9,d10,d11,d12,d13,d14,d15} @ ABI specification says so298ldmia ip,{r4,r5} @ load remaining args299subs r2,r2,#16300mov r8,#16301blo .Lecb_done302it eq303moveq r8,#0304305cmp r4,#0 @ en- or decrypting?306ldr r5,[r3,#240]307and r2,r2,#-16308vld1.8 {q0},[r0],r8309310vld1.32 {q8,q9},[r3] @ load key schedule...311sub r5,r5,#6312add r7,r3,r5,lsl#4 @ pointer to last 7 round keys313sub r5,r5,#2314vld1.32 {q10,q11},[r7]!315vld1.32 {q12,q13},[r7]!316vld1.32 {q14,q15},[r7]!317vld1.32 {q7},[r7]318319add r7,r3,#32320mov r6,r5321beq .Lecb_dec322323vld1.8 {q1},[r0]!324subs r2,r2,#32 @ bias325add r6,r5,#2326vorr q3,q1,q1327vorr q10,q1,q1328vorr q1,q0,q0329blo .Lecb_enc_tail330331vorr q1,q3,q3332vld1.8 {q10},[r0]!333.Loop3x_ecb_enc:334INST(0x20,0x03,0xb0,0xf3) @ aese q0,q8335INST(0x80,0x03,0xb0,0xf3) @ aesmc q0,q0336INST(0x20,0x23,0xb0,0xf3) @ aese q1,q8337INST(0x82,0x23,0xb0,0xf3) @ aesmc q1,q1338INST(0x20,0x43,0xf0,0xf3) @ aese q10,q8339INST(0xa4,0x43,0xf0,0xf3) @ aesmc q10,q10340vld1.32 {q8},[r7]!341subs r6,r6,#2342INST(0x22,0x03,0xb0,0xf3) @ aese q0,q9343INST(0x80,0x03,0xb0,0xf3) @ aesmc q0,q0344INST(0x22,0x23,0xb0,0xf3) @ aese q1,q9345INST(0x82,0x23,0xb0,0xf3) @ aesmc q1,q1346INST(0x22,0x43,0xf0,0xf3) @ aese q10,q9347INST(0xa4,0x43,0xf0,0xf3) @ aesmc q10,q10348vld1.32 {q9},[r7]!349bgt .Loop3x_ecb_enc350351INST(0x20,0x03,0xb0,0xf3) @ aese q0,q8352INST(0x80,0x03,0xb0,0xf3) @ aesmc q0,q0353INST(0x20,0x23,0xb0,0xf3) @ aese q1,q8354INST(0x82,0x23,0xb0,0xf3) @ aesmc q1,q1355INST(0x20,0x43,0xf0,0xf3) @ aese q10,q8356INST(0xa4,0x43,0xf0,0xf3) @ aesmc q10,q10357subs r2,r2,#0x30358it lo359movlo r6,r2 @ r6, r6, is zero at this point360INST(0x22,0x03,0xb0,0xf3) @ aese q0,q9361INST(0x80,0x03,0xb0,0xf3) @ aesmc q0,q0362INST(0x22,0x23,0xb0,0xf3) @ aese q1,q9363INST(0x82,0x23,0xb0,0xf3) @ aesmc q1,q1364INST(0x22,0x43,0xf0,0xf3) @ aese q10,q9365INST(0xa4,0x43,0xf0,0xf3) @ aesmc q10,q10366add r0,r0,r6 @ r0 is adjusted in such way that367@ at exit from the loop q1-q10368@ are loaded with last "words"369mov r7,r3370INST(0x28,0x03,0xb0,0xf3) @ aese q0,q12371INST(0x80,0x03,0xb0,0xf3) @ aesmc q0,q0372INST(0x28,0x23,0xb0,0xf3) @ aese q1,q12373INST(0x82,0x23,0xb0,0xf3) @ aesmc q1,q1374INST(0x28,0x43,0xf0,0xf3) @ aese q10,q12375INST(0xa4,0x43,0xf0,0xf3) @ aesmc q10,q10376vld1.8 {q2},[r0]!377INST(0x2a,0x03,0xb0,0xf3) @ aese q0,q13378INST(0x80,0x03,0xb0,0xf3) @ aesmc q0,q0379INST(0x2a,0x23,0xb0,0xf3) @ aese q1,q13380INST(0x82,0x23,0xb0,0xf3) @ aesmc q1,q1381INST(0x2a,0x43,0xf0,0xf3) @ aese q10,q13382INST(0xa4,0x43,0xf0,0xf3) @ aesmc q10,q10383vld1.8 {q3},[r0]!384INST(0x2c,0x03,0xb0,0xf3) @ aese q0,q14385INST(0x80,0x03,0xb0,0xf3) @ aesmc q0,q0386INST(0x2c,0x23,0xb0,0xf3) @ aese q1,q14387INST(0x82,0x23,0xb0,0xf3) @ aesmc q1,q1388INST(0x2c,0x43,0xf0,0xf3) @ aese q10,q14389INST(0xa4,0x43,0xf0,0xf3) @ aesmc q10,q10390vld1.8 {q11},[r0]!391INST(0x2e,0x03,0xb0,0xf3) @ aese q0,q15392INST(0x2e,0x23,0xb0,0xf3) @ aese q1,q15393INST(0x2e,0x43,0xf0,0xf3) @ aese q10,q15394vld1.32 {q8},[r7]! @ re-pre-load rndkey[0]395add r6,r5,#2396veor q4,q7,q0397veor q5,q7,q1398veor q10,q10,q7399vld1.32 {q9},[r7]! @ re-pre-load rndkey[1]400vst1.8 {q4},[r1]!401vorr q0,q2,q2402vst1.8 {q5},[r1]!403vorr q1,q3,q3404vst1.8 {q10},[r1]!405vorr q10,q11,q11406bhs .Loop3x_ecb_enc407408cmn r2,#0x30409beq .Lecb_done410nop411412.Lecb_enc_tail:413INST(0x20,0x23,0xb0,0xf3) @ aese q1,q8414INST(0x82,0x23,0xb0,0xf3) @ aesmc q1,q1415INST(0x20,0x43,0xf0,0xf3) @ aese q10,q8416INST(0xa4,0x43,0xf0,0xf3) @ aesmc q10,q10417vld1.32 {q8},[r7]!418subs r6,r6,#2419INST(0x22,0x23,0xb0,0xf3) @ aese q1,q9420INST(0x82,0x23,0xb0,0xf3) @ aesmc q1,q1421INST(0x22,0x43,0xf0,0xf3) @ aese q10,q9422INST(0xa4,0x43,0xf0,0xf3) @ aesmc q10,q10423vld1.32 {q9},[r7]!424bgt .Lecb_enc_tail425426INST(0x20,0x23,0xb0,0xf3) @ aese q1,q8427INST(0x82,0x23,0xb0,0xf3) @ aesmc q1,q1428INST(0x20,0x43,0xf0,0xf3) @ aese q10,q8429INST(0xa4,0x43,0xf0,0xf3) @ aesmc q10,q10430INST(0x22,0x23,0xb0,0xf3) @ aese q1,q9431INST(0x82,0x23,0xb0,0xf3) @ aesmc q1,q1432INST(0x22,0x43,0xf0,0xf3) @ aese q10,q9433INST(0xa4,0x43,0xf0,0xf3) @ aesmc q10,q10434INST(0x28,0x23,0xb0,0xf3) @ aese q1,q12435INST(0x82,0x23,0xb0,0xf3) @ aesmc q1,q1436INST(0x28,0x43,0xf0,0xf3) @ aese q10,q12437INST(0xa4,0x43,0xf0,0xf3) @ aesmc q10,q10438cmn r2,#0x20439INST(0x2a,0x23,0xb0,0xf3) @ aese q1,q13440INST(0x82,0x23,0xb0,0xf3) @ aesmc q1,q1441INST(0x2a,0x43,0xf0,0xf3) @ aese q10,q13442INST(0xa4,0x43,0xf0,0xf3) @ aesmc q10,q10443INST(0x2c,0x23,0xb0,0xf3) @ aese q1,q14444INST(0x82,0x23,0xb0,0xf3) @ aesmc q1,q1445INST(0x2c,0x43,0xf0,0xf3) @ aese q10,q14446INST(0xa4,0x43,0xf0,0xf3) @ aesmc q10,q10447INST(0x2e,0x23,0xb0,0xf3) @ aese q1,q15448INST(0x2e,0x43,0xf0,0xf3) @ aese q10,q15449beq .Lecb_enc_one450veor q5,q7,q1451veor q9,q7,q10452vst1.8 {q5},[r1]!453vst1.8 {q9},[r1]!454b .Lecb_done455456.Lecb_enc_one:457veor q5,q7,q10458vst1.8 {q5},[r1]!459b .Lecb_done460.align 5461.Lecb_dec:462vld1.8 {q1},[r0]!463subs r2,r2,#32 @ bias464add r6,r5,#2465vorr q3,q1,q1466vorr q10,q1,q1467vorr q1,q0,q0468blo .Lecb_dec_tail469470vorr q1,q3,q3471vld1.8 {q10},[r0]!472.Loop3x_ecb_dec:473INST(0x60,0x03,0xb0,0xf3) @ aesd q0,q8474INST(0xc0,0x03,0xb0,0xf3) @ aesimc q0,q0475INST(0x60,0x23,0xb0,0xf3) @ aesd q1,q8476INST(0xc2,0x23,0xb0,0xf3) @ aesimc q1,q1477INST(0x60,0x43,0xf0,0xf3) @ aesd q10,q8478INST(0xe4,0x43,0xf0,0xf3) @ aesimc q10,q10479vld1.32 {q8},[r7]!480subs r6,r6,#2481INST(0x62,0x03,0xb0,0xf3) @ aesd q0,q9482INST(0xc0,0x03,0xb0,0xf3) @ aesimc q0,q0483INST(0x62,0x23,0xb0,0xf3) @ aesd q1,q9484INST(0xc2,0x23,0xb0,0xf3) @ aesimc q1,q1485INST(0x62,0x43,0xf0,0xf3) @ aesd q10,q9486INST(0xe4,0x43,0xf0,0xf3) @ aesimc q10,q10487vld1.32 {q9},[r7]!488bgt .Loop3x_ecb_dec489490INST(0x60,0x03,0xb0,0xf3) @ aesd q0,q8491INST(0xc0,0x03,0xb0,0xf3) @ aesimc q0,q0492INST(0x60,0x23,0xb0,0xf3) @ aesd q1,q8493INST(0xc2,0x23,0xb0,0xf3) @ aesimc q1,q1494INST(0x60,0x43,0xf0,0xf3) @ aesd q10,q8495INST(0xe4,0x43,0xf0,0xf3) @ aesimc q10,q10496subs r2,r2,#0x30497it lo498movlo r6,r2 @ r6, r6, is zero at this point499INST(0x62,0x03,0xb0,0xf3) @ aesd q0,q9500INST(0xc0,0x03,0xb0,0xf3) @ aesimc q0,q0501INST(0x62,0x23,0xb0,0xf3) @ aesd q1,q9502INST(0xc2,0x23,0xb0,0xf3) @ aesimc q1,q1503INST(0x62,0x43,0xf0,0xf3) @ aesd q10,q9504INST(0xe4,0x43,0xf0,0xf3) @ aesimc q10,q10505add r0,r0,r6 @ r0 is adjusted in such way that506@ at exit from the loop q1-q10507@ are loaded with last "words"508mov r7,r3509INST(0x68,0x03,0xb0,0xf3) @ aesd q0,q12510INST(0xc0,0x03,0xb0,0xf3) @ aesimc q0,q0511INST(0x68,0x23,0xb0,0xf3) @ aesd q1,q12512INST(0xc2,0x23,0xb0,0xf3) @ aesimc q1,q1513INST(0x68,0x43,0xf0,0xf3) @ aesd q10,q12514INST(0xe4,0x43,0xf0,0xf3) @ aesimc q10,q10515vld1.8 {q2},[r0]!516INST(0x6a,0x03,0xb0,0xf3) @ aesd q0,q13517INST(0xc0,0x03,0xb0,0xf3) @ aesimc q0,q0518INST(0x6a,0x23,0xb0,0xf3) @ aesd q1,q13519INST(0xc2,0x23,0xb0,0xf3) @ aesimc q1,q1520INST(0x6a,0x43,0xf0,0xf3) @ aesd q10,q13521INST(0xe4,0x43,0xf0,0xf3) @ aesimc q10,q10522vld1.8 {q3},[r0]!523INST(0x6c,0x03,0xb0,0xf3) @ aesd q0,q14524INST(0xc0,0x03,0xb0,0xf3) @ aesimc q0,q0525INST(0x6c,0x23,0xb0,0xf3) @ aesd q1,q14526INST(0xc2,0x23,0xb0,0xf3) @ aesimc q1,q1527INST(0x6c,0x43,0xf0,0xf3) @ aesd q10,q14528INST(0xe4,0x43,0xf0,0xf3) @ aesimc q10,q10529vld1.8 {q11},[r0]!530INST(0x6e,0x03,0xb0,0xf3) @ aesd q0,q15531INST(0x6e,0x23,0xb0,0xf3) @ aesd q1,q15532INST(0x6e,0x43,0xf0,0xf3) @ aesd q10,q15533vld1.32 {q8},[r7]! @ re-pre-load rndkey[0]534add r6,r5,#2535veor q4,q7,q0536veor q5,q7,q1537veor q10,q10,q7538vld1.32 {q9},[r7]! @ re-pre-load rndkey[1]539vst1.8 {q4},[r1]!540vorr q0,q2,q2541vst1.8 {q5},[r1]!542vorr q1,q3,q3543vst1.8 {q10},[r1]!544vorr q10,q11,q11545bhs .Loop3x_ecb_dec546547cmn r2,#0x30548beq .Lecb_done549nop550551.Lecb_dec_tail:552INST(0x60,0x23,0xb0,0xf3) @ aesd q1,q8553INST(0xc2,0x23,0xb0,0xf3) @ aesimc q1,q1554INST(0x60,0x43,0xf0,0xf3) @ aesd q10,q8555INST(0xe4,0x43,0xf0,0xf3) @ aesimc q10,q10556vld1.32 {q8},[r7]!557subs r6,r6,#2558INST(0x62,0x23,0xb0,0xf3) @ aesd q1,q9559INST(0xc2,0x23,0xb0,0xf3) @ aesimc q1,q1560INST(0x62,0x43,0xf0,0xf3) @ aesd q10,q9561INST(0xe4,0x43,0xf0,0xf3) @ aesimc q10,q10562vld1.32 {q9},[r7]!563bgt .Lecb_dec_tail564565INST(0x60,0x23,0xb0,0xf3) @ aesd q1,q8566INST(0xc2,0x23,0xb0,0xf3) @ aesimc q1,q1567INST(0x60,0x43,0xf0,0xf3) @ aesd q10,q8568INST(0xe4,0x43,0xf0,0xf3) @ aesimc q10,q10569INST(0x62,0x23,0xb0,0xf3) @ aesd q1,q9570INST(0xc2,0x23,0xb0,0xf3) @ aesimc q1,q1571INST(0x62,0x43,0xf0,0xf3) @ aesd q10,q9572INST(0xe4,0x43,0xf0,0xf3) @ aesimc q10,q10573INST(0x68,0x23,0xb0,0xf3) @ aesd q1,q12574INST(0xc2,0x23,0xb0,0xf3) @ aesimc q1,q1575INST(0x68,0x43,0xf0,0xf3) @ aesd q10,q12576INST(0xe4,0x43,0xf0,0xf3) @ aesimc q10,q10577cmn r2,#0x20578INST(0x6a,0x23,0xb0,0xf3) @ aesd q1,q13579INST(0xc2,0x23,0xb0,0xf3) @ aesimc q1,q1580INST(0x6a,0x43,0xf0,0xf3) @ aesd q10,q13581INST(0xe4,0x43,0xf0,0xf3) @ aesimc q10,q10582INST(0x6c,0x23,0xb0,0xf3) @ aesd q1,q14583INST(0xc2,0x23,0xb0,0xf3) @ aesimc q1,q1584INST(0x6c,0x43,0xf0,0xf3) @ aesd q10,q14585INST(0xe4,0x43,0xf0,0xf3) @ aesimc q10,q10586INST(0x6e,0x23,0xb0,0xf3) @ aesd q1,q15587INST(0x6e,0x43,0xf0,0xf3) @ aesd q10,q15588beq .Lecb_dec_one589veor q5,q7,q1590veor q9,q7,q10591vst1.8 {q5},[r1]!592vst1.8 {q9},[r1]!593b .Lecb_done594595.Lecb_dec_one:596veor q5,q7,q10597vst1.8 {q5},[r1]!598599.Lecb_done:600vldmia sp!,{d8,d9,d10,d11,d12,d13,d14,d15}601ldmia sp!,{r4,r5,r6,r7,r8,pc}602.size aes_v8_ecb_encrypt,.-aes_v8_ecb_encrypt603.globl aes_v8_cbc_encrypt604.type aes_v8_cbc_encrypt,%function605.align 5606aes_v8_cbc_encrypt:607mov ip,sp608stmdb sp!,{r4,r5,r6,r7,r8,lr}609vstmdb sp!,{d8,d9,d10,d11,d12,d13,d14,d15} @ ABI specification says so610ldmia ip,{r4,r5} @ load remaining args611subs r2,r2,#16612mov r8,#16613blo .Lcbc_abort614it eq615moveq r8,#0616617cmp r5,#0 @ en- or decrypting?618ldr r5,[r3,#240]619and r2,r2,#-16620vld1.8 {q6},[r4]621vld1.8 {q0},[r0],r8622623vld1.32 {q8,q9},[r3] @ load key schedule...624sub r5,r5,#6625add r7,r3,r5,lsl#4 @ pointer to last 7 round keys626sub r5,r5,#2627vld1.32 {q10,q11},[r7]!628vld1.32 {q12,q13},[r7]!629vld1.32 {q14,q15},[r7]!630vld1.32 {q7},[r7]631632add r7,r3,#32633mov r6,r5634beq .Lcbc_dec635636cmp r5,#2637veor q0,q0,q6638veor q5,q8,q7639beq .Lcbc_enc128640641vld1.32 {q2,q3},[r7]642add r7,r3,#16643add r6,r3,#16*4644add r12,r3,#16*5645INST(0x20,0x03,0xb0,0xf3) @ aese q0,q8646INST(0x80,0x03,0xb0,0xf3) @ aesmc q0,q0647add r14,r3,#16*6648add r3,r3,#16*7649b .Lenter_cbc_enc650651.align 4652.Loop_cbc_enc:653INST(0x20,0x03,0xb0,0xf3) @ aese q0,q8654INST(0x80,0x03,0xb0,0xf3) @ aesmc q0,q0655vst1.8 {q6},[r1]!656.Lenter_cbc_enc:657INST(0x22,0x03,0xb0,0xf3) @ aese q0,q9658INST(0x80,0x03,0xb0,0xf3) @ aesmc q0,q0659INST(0x04,0x03,0xb0,0xf3) @ aese q0,q2660INST(0x80,0x03,0xb0,0xf3) @ aesmc q0,q0661vld1.32 {q8},[r6]662cmp r5,#4663INST(0x06,0x03,0xb0,0xf3) @ aese q0,q3664INST(0x80,0x03,0xb0,0xf3) @ aesmc q0,q0665vld1.32 {q9},[r12]666beq .Lcbc_enc192667668INST(0x20,0x03,0xb0,0xf3) @ aese q0,q8669INST(0x80,0x03,0xb0,0xf3) @ aesmc q0,q0670vld1.32 {q8},[r14]671INST(0x22,0x03,0xb0,0xf3) @ aese q0,q9672INST(0x80,0x03,0xb0,0xf3) @ aesmc q0,q0673vld1.32 {q9},[r3]674nop675676.Lcbc_enc192:677INST(0x20,0x03,0xb0,0xf3) @ aese q0,q8678INST(0x80,0x03,0xb0,0xf3) @ aesmc q0,q0679subs r2,r2,#16680INST(0x22,0x03,0xb0,0xf3) @ aese q0,q9681INST(0x80,0x03,0xb0,0xf3) @ aesmc q0,q0682it eq683moveq r8,#0684INST(0x24,0x03,0xb0,0xf3) @ aese q0,q10685INST(0x80,0x03,0xb0,0xf3) @ aesmc q0,q0686INST(0x26,0x03,0xb0,0xf3) @ aese q0,q11687INST(0x80,0x03,0xb0,0xf3) @ aesmc q0,q0688vld1.8 {q8},[r0],r8689INST(0x28,0x03,0xb0,0xf3) @ aese q0,q12690INST(0x80,0x03,0xb0,0xf3) @ aesmc q0,q0691veor q8,q8,q5692INST(0x2a,0x03,0xb0,0xf3) @ aese q0,q13693INST(0x80,0x03,0xb0,0xf3) @ aesmc q0,q0694vld1.32 {q9},[r7] @ re-pre-load rndkey[1]695INST(0x2c,0x03,0xb0,0xf3) @ aese q0,q14696INST(0x80,0x03,0xb0,0xf3) @ aesmc q0,q0697INST(0x2e,0x03,0xb0,0xf3) @ aese q0,q15698veor q6,q0,q7699bhs .Loop_cbc_enc700701vst1.8 {q6},[r1]!702b .Lcbc_done703704.align 5705.Lcbc_enc128:706vld1.32 {q2,q3},[r7]707INST(0x20,0x03,0xb0,0xf3) @ aese q0,q8708INST(0x80,0x03,0xb0,0xf3) @ aesmc q0,q0709b .Lenter_cbc_enc128710.Loop_cbc_enc128:711INST(0x20,0x03,0xb0,0xf3) @ aese q0,q8712INST(0x80,0x03,0xb0,0xf3) @ aesmc q0,q0713vst1.8 {q6},[r1]!714.Lenter_cbc_enc128:715INST(0x22,0x03,0xb0,0xf3) @ aese q0,q9716INST(0x80,0x03,0xb0,0xf3) @ aesmc q0,q0717subs r2,r2,#16718INST(0x04,0x03,0xb0,0xf3) @ aese q0,q2719INST(0x80,0x03,0xb0,0xf3) @ aesmc q0,q0720it eq721moveq r8,#0722INST(0x06,0x03,0xb0,0xf3) @ aese q0,q3723INST(0x80,0x03,0xb0,0xf3) @ aesmc q0,q0724INST(0x24,0x03,0xb0,0xf3) @ aese q0,q10725INST(0x80,0x03,0xb0,0xf3) @ aesmc q0,q0726INST(0x26,0x03,0xb0,0xf3) @ aese q0,q11727INST(0x80,0x03,0xb0,0xf3) @ aesmc q0,q0728vld1.8 {q8},[r0],r8729INST(0x28,0x03,0xb0,0xf3) @ aese q0,q12730INST(0x80,0x03,0xb0,0xf3) @ aesmc q0,q0731INST(0x2a,0x03,0xb0,0xf3) @ aese q0,q13732INST(0x80,0x03,0xb0,0xf3) @ aesmc q0,q0733INST(0x2c,0x03,0xb0,0xf3) @ aese q0,q14734INST(0x80,0x03,0xb0,0xf3) @ aesmc q0,q0735veor q8,q8,q5736INST(0x2e,0x03,0xb0,0xf3) @ aese q0,q15737veor q6,q0,q7738bhs .Loop_cbc_enc128739740vst1.8 {q6},[r1]!741b .Lcbc_done742.align 5743.Lcbc_dec:744vld1.8 {q10},[r0]!745subs r2,r2,#32 @ bias746add r6,r5,#2747vorr q3,q0,q0748vorr q1,q0,q0749vorr q11,q10,q10750blo .Lcbc_dec_tail751752vorr q1,q10,q10753vld1.8 {q10},[r0]!754vorr q2,q0,q0755vorr q3,q1,q1756vorr q11,q10,q10757.Loop3x_cbc_dec:758INST(0x60,0x03,0xb0,0xf3) @ aesd q0,q8759INST(0xc0,0x03,0xb0,0xf3) @ aesimc q0,q0760INST(0x60,0x23,0xb0,0xf3) @ aesd q1,q8761INST(0xc2,0x23,0xb0,0xf3) @ aesimc q1,q1762INST(0x60,0x43,0xf0,0xf3) @ aesd q10,q8763INST(0xe4,0x43,0xf0,0xf3) @ aesimc q10,q10764vld1.32 {q8},[r7]!765subs r6,r6,#2766INST(0x62,0x03,0xb0,0xf3) @ aesd q0,q9767INST(0xc0,0x03,0xb0,0xf3) @ aesimc q0,q0768INST(0x62,0x23,0xb0,0xf3) @ aesd q1,q9769INST(0xc2,0x23,0xb0,0xf3) @ aesimc q1,q1770INST(0x62,0x43,0xf0,0xf3) @ aesd q10,q9771INST(0xe4,0x43,0xf0,0xf3) @ aesimc q10,q10772vld1.32 {q9},[r7]!773bgt .Loop3x_cbc_dec774775INST(0x60,0x03,0xb0,0xf3) @ aesd q0,q8776INST(0xc0,0x03,0xb0,0xf3) @ aesimc q0,q0777INST(0x60,0x23,0xb0,0xf3) @ aesd q1,q8778INST(0xc2,0x23,0xb0,0xf3) @ aesimc q1,q1779INST(0x60,0x43,0xf0,0xf3) @ aesd q10,q8780INST(0xe4,0x43,0xf0,0xf3) @ aesimc q10,q10781veor q4,q6,q7782subs r2,r2,#0x30783veor q5,q2,q7784it lo785movlo r6,r2 @ r6, r6, is zero at this point786INST(0x62,0x03,0xb0,0xf3) @ aesd q0,q9787INST(0xc0,0x03,0xb0,0xf3) @ aesimc q0,q0788INST(0x62,0x23,0xb0,0xf3) @ aesd q1,q9789INST(0xc2,0x23,0xb0,0xf3) @ aesimc q1,q1790INST(0x62,0x43,0xf0,0xf3) @ aesd q10,q9791INST(0xe4,0x43,0xf0,0xf3) @ aesimc q10,q10792veor q9,q3,q7793add r0,r0,r6 @ r0 is adjusted in such way that794@ at exit from the loop q1-q10795@ are loaded with last "words"796vorr q6,q11,q11797mov r7,r3798INST(0x68,0x03,0xb0,0xf3) @ aesd q0,q12799INST(0xc0,0x03,0xb0,0xf3) @ aesimc q0,q0800INST(0x68,0x23,0xb0,0xf3) @ aesd q1,q12801INST(0xc2,0x23,0xb0,0xf3) @ aesimc q1,q1802INST(0x68,0x43,0xf0,0xf3) @ aesd q10,q12803INST(0xe4,0x43,0xf0,0xf3) @ aesimc q10,q10804vld1.8 {q2},[r0]!805INST(0x6a,0x03,0xb0,0xf3) @ aesd q0,q13806INST(0xc0,0x03,0xb0,0xf3) @ aesimc q0,q0807INST(0x6a,0x23,0xb0,0xf3) @ aesd q1,q13808INST(0xc2,0x23,0xb0,0xf3) @ aesimc q1,q1809INST(0x6a,0x43,0xf0,0xf3) @ aesd q10,q13810INST(0xe4,0x43,0xf0,0xf3) @ aesimc q10,q10811vld1.8 {q3},[r0]!812INST(0x6c,0x03,0xb0,0xf3) @ aesd q0,q14813INST(0xc0,0x03,0xb0,0xf3) @ aesimc q0,q0814INST(0x6c,0x23,0xb0,0xf3) @ aesd q1,q14815INST(0xc2,0x23,0xb0,0xf3) @ aesimc q1,q1816INST(0x6c,0x43,0xf0,0xf3) @ aesd q10,q14817INST(0xe4,0x43,0xf0,0xf3) @ aesimc q10,q10818vld1.8 {q11},[r0]!819INST(0x6e,0x03,0xb0,0xf3) @ aesd q0,q15820INST(0x6e,0x23,0xb0,0xf3) @ aesd q1,q15821INST(0x6e,0x43,0xf0,0xf3) @ aesd q10,q15822vld1.32 {q8},[r7]! @ re-pre-load rndkey[0]823add r6,r5,#2824veor q4,q4,q0825veor q5,q5,q1826veor q10,q10,q9827vld1.32 {q9},[r7]! @ re-pre-load rndkey[1]828vst1.8 {q4},[r1]!829vorr q0,q2,q2830vst1.8 {q5},[r1]!831vorr q1,q3,q3832vst1.8 {q10},[r1]!833vorr q10,q11,q11834bhs .Loop3x_cbc_dec835836cmn r2,#0x30837beq .Lcbc_done838nop839840.Lcbc_dec_tail:841INST(0x60,0x23,0xb0,0xf3) @ aesd q1,q8842INST(0xc2,0x23,0xb0,0xf3) @ aesimc q1,q1843INST(0x60,0x43,0xf0,0xf3) @ aesd q10,q8844INST(0xe4,0x43,0xf0,0xf3) @ aesimc q10,q10845vld1.32 {q8},[r7]!846subs r6,r6,#2847INST(0x62,0x23,0xb0,0xf3) @ aesd q1,q9848INST(0xc2,0x23,0xb0,0xf3) @ aesimc q1,q1849INST(0x62,0x43,0xf0,0xf3) @ aesd q10,q9850INST(0xe4,0x43,0xf0,0xf3) @ aesimc q10,q10851vld1.32 {q9},[r7]!852bgt .Lcbc_dec_tail853854INST(0x60,0x23,0xb0,0xf3) @ aesd q1,q8855INST(0xc2,0x23,0xb0,0xf3) @ aesimc q1,q1856INST(0x60,0x43,0xf0,0xf3) @ aesd q10,q8857INST(0xe4,0x43,0xf0,0xf3) @ aesimc q10,q10858INST(0x62,0x23,0xb0,0xf3) @ aesd q1,q9859INST(0xc2,0x23,0xb0,0xf3) @ aesimc q1,q1860INST(0x62,0x43,0xf0,0xf3) @ aesd q10,q9861INST(0xe4,0x43,0xf0,0xf3) @ aesimc q10,q10862INST(0x68,0x23,0xb0,0xf3) @ aesd q1,q12863INST(0xc2,0x23,0xb0,0xf3) @ aesimc q1,q1864INST(0x68,0x43,0xf0,0xf3) @ aesd q10,q12865INST(0xe4,0x43,0xf0,0xf3) @ aesimc q10,q10866cmn r2,#0x20867INST(0x6a,0x23,0xb0,0xf3) @ aesd q1,q13868INST(0xc2,0x23,0xb0,0xf3) @ aesimc q1,q1869INST(0x6a,0x43,0xf0,0xf3) @ aesd q10,q13870INST(0xe4,0x43,0xf0,0xf3) @ aesimc q10,q10871veor q5,q6,q7872INST(0x6c,0x23,0xb0,0xf3) @ aesd q1,q14873INST(0xc2,0x23,0xb0,0xf3) @ aesimc q1,q1874INST(0x6c,0x43,0xf0,0xf3) @ aesd q10,q14875INST(0xe4,0x43,0xf0,0xf3) @ aesimc q10,q10876veor q9,q3,q7877INST(0x6e,0x23,0xb0,0xf3) @ aesd q1,q15878INST(0x6e,0x43,0xf0,0xf3) @ aesd q10,q15879beq .Lcbc_dec_one880veor q5,q5,q1881veor q9,q9,q10882vorr q6,q11,q11883vst1.8 {q5},[r1]!884vst1.8 {q9},[r1]!885b .Lcbc_done886887.Lcbc_dec_one:888veor q5,q5,q10889vorr q6,q11,q11890vst1.8 {q5},[r1]!891892.Lcbc_done:893vst1.8 {q6},[r4]894.Lcbc_abort:895vldmia sp!,{d8,d9,d10,d11,d12,d13,d14,d15}896ldmia sp!,{r4,r5,r6,r7,r8,pc}897.size aes_v8_cbc_encrypt,.-aes_v8_cbc_encrypt898.globl aes_v8_ctr32_encrypt_blocks899.type aes_v8_ctr32_encrypt_blocks,%function900.align 5901aes_v8_ctr32_encrypt_blocks:902mov ip,sp903stmdb sp!,{r4,r5,r6,r7,r8,r9,r10,lr}904vstmdb sp!,{d8,d9,d10,d11,d12,d13,d14,d15} @ ABI specification says so905ldr r4, [ip] @ load remaining arg906ldr r5,[r3,#240]907908ldr r8, [r4, #12]909#ifdef __ARMEB__910vld1.8 {q0},[r4]911#else912vld1.32 {q0},[r4]913#endif914vld1.32 {q8,q9},[r3] @ load key schedule...915sub r5,r5,#4916mov r12,#16917cmp r2,#2918add r7,r3,r5,lsl#4 @ pointer to last 5 round keys919sub r5,r5,#2920vld1.32 {q12,q13},[r7]!921vld1.32 {q14,q15},[r7]!922vld1.32 {q7},[r7]923add r7,r3,#32924mov r6,r5925it lo926movlo r12,#0927#ifndef __ARMEB__928rev r8, r8929#endif930add r10, r8, #1931vorr q6,q0,q0932rev r10, r10933vmov.32 d13[1],r10934add r8, r8, #2935vorr q1,q6,q6936bls .Lctr32_tail937rev r12, r8938vmov.32 d13[1],r12939sub r2,r2,#3 @ bias940vorr q10,q6,q6941b .Loop3x_ctr32942943.align 4944.Loop3x_ctr32:945INST(0x20,0x03,0xb0,0xf3) @ aese q0,q8946INST(0x80,0x03,0xb0,0xf3) @ aesmc q0,q0947INST(0x20,0x23,0xb0,0xf3) @ aese q1,q8948INST(0x82,0x23,0xb0,0xf3) @ aesmc q1,q1949INST(0x20,0x43,0xf0,0xf3) @ aese q10,q8950INST(0xa4,0x43,0xf0,0xf3) @ aesmc q10,q10951vld1.32 {q8},[r7]!952subs r6,r6,#2953INST(0x22,0x03,0xb0,0xf3) @ aese q0,q9954INST(0x80,0x03,0xb0,0xf3) @ aesmc q0,q0955INST(0x22,0x23,0xb0,0xf3) @ aese q1,q9956INST(0x82,0x23,0xb0,0xf3) @ aesmc q1,q1957INST(0x22,0x43,0xf0,0xf3) @ aese q10,q9958INST(0xa4,0x43,0xf0,0xf3) @ aesmc q10,q10959vld1.32 {q9},[r7]!960bgt .Loop3x_ctr32961962INST(0x20,0x03,0xb0,0xf3) @ aese q0,q8963INST(0x80,0x83,0xb0,0xf3) @ aesmc q4,q0964INST(0x20,0x23,0xb0,0xf3) @ aese q1,q8965INST(0x82,0xa3,0xb0,0xf3) @ aesmc q5,q1966vld1.8 {q2},[r0]!967add r9,r8,#1968INST(0x20,0x43,0xf0,0xf3) @ aese q10,q8969INST(0xa4,0x43,0xf0,0xf3) @ aesmc q10,q10970vld1.8 {q3},[r0]!971rev r9,r9972INST(0x22,0x83,0xb0,0xf3) @ aese q4,q9973INST(0x88,0x83,0xb0,0xf3) @ aesmc q4,q4974INST(0x22,0xa3,0xb0,0xf3) @ aese q5,q9975INST(0x8a,0xa3,0xb0,0xf3) @ aesmc q5,q5976vld1.8 {q11},[r0]!977mov r7,r3978INST(0x22,0x43,0xf0,0xf3) @ aese q10,q9979INST(0xa4,0x23,0xf0,0xf3) @ aesmc q9,q10980INST(0x28,0x83,0xb0,0xf3) @ aese q4,q12981INST(0x88,0x83,0xb0,0xf3) @ aesmc q4,q4982INST(0x28,0xa3,0xb0,0xf3) @ aese q5,q12983INST(0x8a,0xa3,0xb0,0xf3) @ aesmc q5,q5984veor q2,q2,q7985add r10,r8,#2986INST(0x28,0x23,0xf0,0xf3) @ aese q9,q12987INST(0xa2,0x23,0xf0,0xf3) @ aesmc q9,q9988veor q3,q3,q7989add r8,r8,#3990INST(0x2a,0x83,0xb0,0xf3) @ aese q4,q13991INST(0x88,0x83,0xb0,0xf3) @ aesmc q4,q4992INST(0x2a,0xa3,0xb0,0xf3) @ aese q5,q13993INST(0x8a,0xa3,0xb0,0xf3) @ aesmc q5,q5994veor q11,q11,q7995vmov.32 d13[1], r9996INST(0x2a,0x23,0xf0,0xf3) @ aese q9,q13997INST(0xa2,0x23,0xf0,0xf3) @ aesmc q9,q9998vorr q0,q6,q6999rev r10,r101000INST(0x2c,0x83,0xb0,0xf3) @ aese q4,q141001INST(0x88,0x83,0xb0,0xf3) @ aesmc q4,q41002vmov.32 d13[1], r101003rev r12,r81004INST(0x2c,0xa3,0xb0,0xf3) @ aese q5,q141005INST(0x8a,0xa3,0xb0,0xf3) @ aesmc q5,q51006vorr q1,q6,q61007vmov.32 d13[1], r121008INST(0x2c,0x23,0xf0,0xf3) @ aese q9,q141009INST(0xa2,0x23,0xf0,0xf3) @ aesmc q9,q91010vorr q10,q6,q61011subs r2,r2,#31012INST(0x2e,0x83,0xb0,0xf3) @ aese q4,q151013INST(0x2e,0xa3,0xb0,0xf3) @ aese q5,q151014INST(0x2e,0x23,0xf0,0xf3) @ aese q9,q1510151016veor q2,q2,q41017vld1.32 {q8},[r7]! @ re-pre-load rndkey[0]1018vst1.8 {q2},[r1]!1019veor q3,q3,q51020mov r6,r51021vst1.8 {q3},[r1]!1022veor q11,q11,q91023vld1.32 {q9},[r7]! @ re-pre-load rndkey[1]1024vst1.8 {q11},[r1]!1025bhs .Loop3x_ctr3210261027adds r2,r2,#31028beq .Lctr32_done1029cmp r2,#11030mov r12,#161031it eq1032moveq r12,#010331034.Lctr32_tail:1035INST(0x20,0x03,0xb0,0xf3) @ aese q0,q81036INST(0x80,0x03,0xb0,0xf3) @ aesmc q0,q01037INST(0x20,0x23,0xb0,0xf3) @ aese q1,q81038INST(0x82,0x23,0xb0,0xf3) @ aesmc q1,q11039vld1.32 {q8},[r7]!1040subs r6,r6,#21041INST(0x22,0x03,0xb0,0xf3) @ aese q0,q91042INST(0x80,0x03,0xb0,0xf3) @ aesmc q0,q01043INST(0x22,0x23,0xb0,0xf3) @ aese q1,q91044INST(0x82,0x23,0xb0,0xf3) @ aesmc q1,q11045vld1.32 {q9},[r7]!1046bgt .Lctr32_tail10471048INST(0x20,0x03,0xb0,0xf3) @ aese q0,q81049INST(0x80,0x03,0xb0,0xf3) @ aesmc q0,q01050INST(0x20,0x23,0xb0,0xf3) @ aese q1,q81051INST(0x82,0x23,0xb0,0xf3) @ aesmc q1,q11052INST(0x22,0x03,0xb0,0xf3) @ aese q0,q91053INST(0x80,0x03,0xb0,0xf3) @ aesmc q0,q01054INST(0x22,0x23,0xb0,0xf3) @ aese q1,q91055INST(0x82,0x23,0xb0,0xf3) @ aesmc q1,q11056vld1.8 {q2},[r0],r121057INST(0x28,0x03,0xb0,0xf3) @ aese q0,q121058INST(0x80,0x03,0xb0,0xf3) @ aesmc q0,q01059INST(0x28,0x23,0xb0,0xf3) @ aese q1,q121060INST(0x82,0x23,0xb0,0xf3) @ aesmc q1,q11061vld1.8 {q3},[r0]1062INST(0x2a,0x03,0xb0,0xf3) @ aese q0,q131063INST(0x80,0x03,0xb0,0xf3) @ aesmc q0,q01064INST(0x2a,0x23,0xb0,0xf3) @ aese q1,q131065INST(0x82,0x23,0xb0,0xf3) @ aesmc q1,q11066veor q2,q2,q71067INST(0x2c,0x03,0xb0,0xf3) @ aese q0,q141068INST(0x80,0x03,0xb0,0xf3) @ aesmc q0,q01069INST(0x2c,0x23,0xb0,0xf3) @ aese q1,q141070INST(0x82,0x23,0xb0,0xf3) @ aesmc q1,q11071veor q3,q3,q71072INST(0x2e,0x03,0xb0,0xf3) @ aese q0,q151073INST(0x2e,0x23,0xb0,0xf3) @ aese q1,q1510741075cmp r2,#11076veor q2,q2,q01077veor q3,q3,q11078vst1.8 {q2},[r1]!1079beq .Lctr32_done1080vst1.8 {q3},[r1]10811082.Lctr32_done:1083vldmia sp!,{d8,d9,d10,d11,d12,d13,d14,d15}1084ldmia sp!,{r4,r5,r6,r7,r8,r9,r10,pc}1085.size aes_v8_ctr32_encrypt_blocks,.-aes_v8_ctr32_encrypt_blocks1086#endif108710881089