xref: /freebsd/sys/crypto/openssl/arm/aes-armv4.S (revision c0855eaa3ee9614804b6bd6a255aa9f71e095f43)
1bc3d5698SJohn Baldwin/* Do not modify. This file is auto-generated from aes-armv4.pl. */
2bc3d5698SJohn Baldwin@ Copyright 2007-2020 The OpenSSL Project Authors. All Rights Reserved.
3bc3d5698SJohn Baldwin@
4*c0855eaaSJohn Baldwin@ Licensed under the Apache License 2.0 (the "License").  You may not use
5bc3d5698SJohn Baldwin@ this file except in compliance with the License.  You can obtain a copy
6bc3d5698SJohn Baldwin@ in the file LICENSE in the source distribution or at
7bc3d5698SJohn Baldwin@ https://www.openssl.org/source/license.html
8bc3d5698SJohn Baldwin
9bc3d5698SJohn Baldwin
10bc3d5698SJohn Baldwin@ ====================================================================
11bc3d5698SJohn Baldwin@ Written by Andy Polyakov <appro@openssl.org> for the OpenSSL
12bc3d5698SJohn Baldwin@ project. The module is, however, dual licensed under OpenSSL and
13bc3d5698SJohn Baldwin@ CRYPTOGAMS licenses depending on where you obtain it. For further
14bc3d5698SJohn Baldwin@ details see http://www.openssl.org/~appro/cryptogams/.
15bc3d5698SJohn Baldwin@ ====================================================================
16bc3d5698SJohn Baldwin
17bc3d5698SJohn Baldwin@ AES for ARMv4
18bc3d5698SJohn Baldwin
19bc3d5698SJohn Baldwin@ January 2007.
20bc3d5698SJohn Baldwin@
21bc3d5698SJohn Baldwin@ Code uses single 1K S-box and is >2 times faster than code generated
22bc3d5698SJohn Baldwin@ by gcc-3.4.1. This is thanks to unique feature of ARMv4 ISA, which
23bc3d5698SJohn Baldwin@ allows to merge logical or arithmetic operation with shift or rotate
24bc3d5698SJohn Baldwin@ in one instruction and emit combined result every cycle. The module
25bc3d5698SJohn Baldwin@ is endian-neutral. The performance is ~42 cycles/byte for 128-bit
26bc3d5698SJohn Baldwin@ key [on single-issue Xscale PXA250 core].
27bc3d5698SJohn Baldwin
28bc3d5698SJohn Baldwin@ May 2007.
29bc3d5698SJohn Baldwin@
30bc3d5698SJohn Baldwin@ AES_set_[en|de]crypt_key is added.
31bc3d5698SJohn Baldwin
32bc3d5698SJohn Baldwin@ July 2010.
33bc3d5698SJohn Baldwin@
34bc3d5698SJohn Baldwin@ Rescheduling for dual-issue pipeline resulted in 12% improvement on
35bc3d5698SJohn Baldwin@ Cortex A8 core and ~25 cycles per byte processed with 128-bit key.
36bc3d5698SJohn Baldwin
37bc3d5698SJohn Baldwin@ February 2011.
38bc3d5698SJohn Baldwin@
39bc3d5698SJohn Baldwin@ Profiler-assisted and platform-specific optimization resulted in 16%
40bc3d5698SJohn Baldwin@ improvement on Cortex A8 core and ~21.5 cycles per byte.
41bc3d5698SJohn Baldwin
42*c0855eaaSJohn Baldwin@ $output is the last argument if it looks like a file (it has an extension)
43*c0855eaaSJohn Baldwin@ $flavour is the first argument if it doesn't look like a file
44bc3d5698SJohn Baldwin#ifndef __KERNEL__
45bc3d5698SJohn Baldwin# include "arm_arch.h"
46bc3d5698SJohn Baldwin#else
47bc3d5698SJohn Baldwin# define __ARM_ARCH__ __LINUX_ARM_ARCH__
48bc3d5698SJohn Baldwin#endif
49bc3d5698SJohn Baldwin
50bc3d5698SJohn Baldwin#if defined(__thumb2__) && !defined(__APPLE__)
51bc3d5698SJohn Baldwin.syntax	unified
52bc3d5698SJohn Baldwin.thumb
53bc3d5698SJohn Baldwin#else
54bc3d5698SJohn Baldwin.code	32
55bc3d5698SJohn Baldwin#undef __thumb2__
56bc3d5698SJohn Baldwin#endif
57bc3d5698SJohn Baldwin
58*c0855eaaSJohn Baldwin.text
59*c0855eaaSJohn Baldwin
60bc3d5698SJohn Baldwin.type	AES_Te,%object
61bc3d5698SJohn Baldwin.align	5
62bc3d5698SJohn BaldwinAES_Te:
63bc3d5698SJohn Baldwin.word	0xc66363a5, 0xf87c7c84, 0xee777799, 0xf67b7b8d
64bc3d5698SJohn Baldwin.word	0xfff2f20d, 0xd66b6bbd, 0xde6f6fb1, 0x91c5c554
65bc3d5698SJohn Baldwin.word	0x60303050, 0x02010103, 0xce6767a9, 0x562b2b7d
66bc3d5698SJohn Baldwin.word	0xe7fefe19, 0xb5d7d762, 0x4dababe6, 0xec76769a
67bc3d5698SJohn Baldwin.word	0x8fcaca45, 0x1f82829d, 0x89c9c940, 0xfa7d7d87
68bc3d5698SJohn Baldwin.word	0xeffafa15, 0xb25959eb, 0x8e4747c9, 0xfbf0f00b
69bc3d5698SJohn Baldwin.word	0x41adadec, 0xb3d4d467, 0x5fa2a2fd, 0x45afafea
70bc3d5698SJohn Baldwin.word	0x239c9cbf, 0x53a4a4f7, 0xe4727296, 0x9bc0c05b
71bc3d5698SJohn Baldwin.word	0x75b7b7c2, 0xe1fdfd1c, 0x3d9393ae, 0x4c26266a
72bc3d5698SJohn Baldwin.word	0x6c36365a, 0x7e3f3f41, 0xf5f7f702, 0x83cccc4f
73bc3d5698SJohn Baldwin.word	0x6834345c, 0x51a5a5f4, 0xd1e5e534, 0xf9f1f108
74bc3d5698SJohn Baldwin.word	0xe2717193, 0xabd8d873, 0x62313153, 0x2a15153f
75bc3d5698SJohn Baldwin.word	0x0804040c, 0x95c7c752, 0x46232365, 0x9dc3c35e
76bc3d5698SJohn Baldwin.word	0x30181828, 0x379696a1, 0x0a05050f, 0x2f9a9ab5
77bc3d5698SJohn Baldwin.word	0x0e070709, 0x24121236, 0x1b80809b, 0xdfe2e23d
78bc3d5698SJohn Baldwin.word	0xcdebeb26, 0x4e272769, 0x7fb2b2cd, 0xea75759f
79bc3d5698SJohn Baldwin.word	0x1209091b, 0x1d83839e, 0x582c2c74, 0x341a1a2e
80bc3d5698SJohn Baldwin.word	0x361b1b2d, 0xdc6e6eb2, 0xb45a5aee, 0x5ba0a0fb
81bc3d5698SJohn Baldwin.word	0xa45252f6, 0x763b3b4d, 0xb7d6d661, 0x7db3b3ce
82bc3d5698SJohn Baldwin.word	0x5229297b, 0xdde3e33e, 0x5e2f2f71, 0x13848497
83bc3d5698SJohn Baldwin.word	0xa65353f5, 0xb9d1d168, 0x00000000, 0xc1eded2c
84bc3d5698SJohn Baldwin.word	0x40202060, 0xe3fcfc1f, 0x79b1b1c8, 0xb65b5bed
85bc3d5698SJohn Baldwin.word	0xd46a6abe, 0x8dcbcb46, 0x67bebed9, 0x7239394b
86bc3d5698SJohn Baldwin.word	0x944a4ade, 0x984c4cd4, 0xb05858e8, 0x85cfcf4a
87bc3d5698SJohn Baldwin.word	0xbbd0d06b, 0xc5efef2a, 0x4faaaae5, 0xedfbfb16
88bc3d5698SJohn Baldwin.word	0x864343c5, 0x9a4d4dd7, 0x66333355, 0x11858594
89bc3d5698SJohn Baldwin.word	0x8a4545cf, 0xe9f9f910, 0x04020206, 0xfe7f7f81
90bc3d5698SJohn Baldwin.word	0xa05050f0, 0x783c3c44, 0x259f9fba, 0x4ba8a8e3
91bc3d5698SJohn Baldwin.word	0xa25151f3, 0x5da3a3fe, 0x804040c0, 0x058f8f8a
92bc3d5698SJohn Baldwin.word	0x3f9292ad, 0x219d9dbc, 0x70383848, 0xf1f5f504
93bc3d5698SJohn Baldwin.word	0x63bcbcdf, 0x77b6b6c1, 0xafdada75, 0x42212163
94bc3d5698SJohn Baldwin.word	0x20101030, 0xe5ffff1a, 0xfdf3f30e, 0xbfd2d26d
95bc3d5698SJohn Baldwin.word	0x81cdcd4c, 0x180c0c14, 0x26131335, 0xc3ecec2f
96bc3d5698SJohn Baldwin.word	0xbe5f5fe1, 0x359797a2, 0x884444cc, 0x2e171739
97bc3d5698SJohn Baldwin.word	0x93c4c457, 0x55a7a7f2, 0xfc7e7e82, 0x7a3d3d47
98bc3d5698SJohn Baldwin.word	0xc86464ac, 0xba5d5de7, 0x3219192b, 0xe6737395
99bc3d5698SJohn Baldwin.word	0xc06060a0, 0x19818198, 0x9e4f4fd1, 0xa3dcdc7f
100bc3d5698SJohn Baldwin.word	0x44222266, 0x542a2a7e, 0x3b9090ab, 0x0b888883
101bc3d5698SJohn Baldwin.word	0x8c4646ca, 0xc7eeee29, 0x6bb8b8d3, 0x2814143c
102bc3d5698SJohn Baldwin.word	0xa7dede79, 0xbc5e5ee2, 0x160b0b1d, 0xaddbdb76
103bc3d5698SJohn Baldwin.word	0xdbe0e03b, 0x64323256, 0x743a3a4e, 0x140a0a1e
104bc3d5698SJohn Baldwin.word	0x924949db, 0x0c06060a, 0x4824246c, 0xb85c5ce4
105bc3d5698SJohn Baldwin.word	0x9fc2c25d, 0xbdd3d36e, 0x43acacef, 0xc46262a6
106bc3d5698SJohn Baldwin.word	0x399191a8, 0x319595a4, 0xd3e4e437, 0xf279798b
107bc3d5698SJohn Baldwin.word	0xd5e7e732, 0x8bc8c843, 0x6e373759, 0xda6d6db7
108bc3d5698SJohn Baldwin.word	0x018d8d8c, 0xb1d5d564, 0x9c4e4ed2, 0x49a9a9e0
109bc3d5698SJohn Baldwin.word	0xd86c6cb4, 0xac5656fa, 0xf3f4f407, 0xcfeaea25
110bc3d5698SJohn Baldwin.word	0xca6565af, 0xf47a7a8e, 0x47aeaee9, 0x10080818
111bc3d5698SJohn Baldwin.word	0x6fbabad5, 0xf0787888, 0x4a25256f, 0x5c2e2e72
112bc3d5698SJohn Baldwin.word	0x381c1c24, 0x57a6a6f1, 0x73b4b4c7, 0x97c6c651
113bc3d5698SJohn Baldwin.word	0xcbe8e823, 0xa1dddd7c, 0xe874749c, 0x3e1f1f21
114bc3d5698SJohn Baldwin.word	0x964b4bdd, 0x61bdbddc, 0x0d8b8b86, 0x0f8a8a85
115bc3d5698SJohn Baldwin.word	0xe0707090, 0x7c3e3e42, 0x71b5b5c4, 0xcc6666aa
116bc3d5698SJohn Baldwin.word	0x904848d8, 0x06030305, 0xf7f6f601, 0x1c0e0e12
117bc3d5698SJohn Baldwin.word	0xc26161a3, 0x6a35355f, 0xae5757f9, 0x69b9b9d0
118bc3d5698SJohn Baldwin.word	0x17868691, 0x99c1c158, 0x3a1d1d27, 0x279e9eb9
119bc3d5698SJohn Baldwin.word	0xd9e1e138, 0xebf8f813, 0x2b9898b3, 0x22111133
120bc3d5698SJohn Baldwin.word	0xd26969bb, 0xa9d9d970, 0x078e8e89, 0x339494a7
121bc3d5698SJohn Baldwin.word	0x2d9b9bb6, 0x3c1e1e22, 0x15878792, 0xc9e9e920
122bc3d5698SJohn Baldwin.word	0x87cece49, 0xaa5555ff, 0x50282878, 0xa5dfdf7a
123bc3d5698SJohn Baldwin.word	0x038c8c8f, 0x59a1a1f8, 0x09898980, 0x1a0d0d17
124bc3d5698SJohn Baldwin.word	0x65bfbfda, 0xd7e6e631, 0x844242c6, 0xd06868b8
125bc3d5698SJohn Baldwin.word	0x824141c3, 0x299999b0, 0x5a2d2d77, 0x1e0f0f11
126bc3d5698SJohn Baldwin.word	0x7bb0b0cb, 0xa85454fc, 0x6dbbbbd6, 0x2c16163a
127bc3d5698SJohn Baldwin@ Te4[256]
128bc3d5698SJohn Baldwin.byte	0x63, 0x7c, 0x77, 0x7b, 0xf2, 0x6b, 0x6f, 0xc5
129bc3d5698SJohn Baldwin.byte	0x30, 0x01, 0x67, 0x2b, 0xfe, 0xd7, 0xab, 0x76
130bc3d5698SJohn Baldwin.byte	0xca, 0x82, 0xc9, 0x7d, 0xfa, 0x59, 0x47, 0xf0
131bc3d5698SJohn Baldwin.byte	0xad, 0xd4, 0xa2, 0xaf, 0x9c, 0xa4, 0x72, 0xc0
132bc3d5698SJohn Baldwin.byte	0xb7, 0xfd, 0x93, 0x26, 0x36, 0x3f, 0xf7, 0xcc
133bc3d5698SJohn Baldwin.byte	0x34, 0xa5, 0xe5, 0xf1, 0x71, 0xd8, 0x31, 0x15
134bc3d5698SJohn Baldwin.byte	0x04, 0xc7, 0x23, 0xc3, 0x18, 0x96, 0x05, 0x9a
135bc3d5698SJohn Baldwin.byte	0x07, 0x12, 0x80, 0xe2, 0xeb, 0x27, 0xb2, 0x75
136bc3d5698SJohn Baldwin.byte	0x09, 0x83, 0x2c, 0x1a, 0x1b, 0x6e, 0x5a, 0xa0
137bc3d5698SJohn Baldwin.byte	0x52, 0x3b, 0xd6, 0xb3, 0x29, 0xe3, 0x2f, 0x84
138bc3d5698SJohn Baldwin.byte	0x53, 0xd1, 0x00, 0xed, 0x20, 0xfc, 0xb1, 0x5b
139bc3d5698SJohn Baldwin.byte	0x6a, 0xcb, 0xbe, 0x39, 0x4a, 0x4c, 0x58, 0xcf
140bc3d5698SJohn Baldwin.byte	0xd0, 0xef, 0xaa, 0xfb, 0x43, 0x4d, 0x33, 0x85
141bc3d5698SJohn Baldwin.byte	0x45, 0xf9, 0x02, 0x7f, 0x50, 0x3c, 0x9f, 0xa8
142bc3d5698SJohn Baldwin.byte	0x51, 0xa3, 0x40, 0x8f, 0x92, 0x9d, 0x38, 0xf5
143bc3d5698SJohn Baldwin.byte	0xbc, 0xb6, 0xda, 0x21, 0x10, 0xff, 0xf3, 0xd2
144bc3d5698SJohn Baldwin.byte	0xcd, 0x0c, 0x13, 0xec, 0x5f, 0x97, 0x44, 0x17
145bc3d5698SJohn Baldwin.byte	0xc4, 0xa7, 0x7e, 0x3d, 0x64, 0x5d, 0x19, 0x73
146bc3d5698SJohn Baldwin.byte	0x60, 0x81, 0x4f, 0xdc, 0x22, 0x2a, 0x90, 0x88
147bc3d5698SJohn Baldwin.byte	0x46, 0xee, 0xb8, 0x14, 0xde, 0x5e, 0x0b, 0xdb
148bc3d5698SJohn Baldwin.byte	0xe0, 0x32, 0x3a, 0x0a, 0x49, 0x06, 0x24, 0x5c
149bc3d5698SJohn Baldwin.byte	0xc2, 0xd3, 0xac, 0x62, 0x91, 0x95, 0xe4, 0x79
150bc3d5698SJohn Baldwin.byte	0xe7, 0xc8, 0x37, 0x6d, 0x8d, 0xd5, 0x4e, 0xa9
151bc3d5698SJohn Baldwin.byte	0x6c, 0x56, 0xf4, 0xea, 0x65, 0x7a, 0xae, 0x08
152bc3d5698SJohn Baldwin.byte	0xba, 0x78, 0x25, 0x2e, 0x1c, 0xa6, 0xb4, 0xc6
153bc3d5698SJohn Baldwin.byte	0xe8, 0xdd, 0x74, 0x1f, 0x4b, 0xbd, 0x8b, 0x8a
154bc3d5698SJohn Baldwin.byte	0x70, 0x3e, 0xb5, 0x66, 0x48, 0x03, 0xf6, 0x0e
155bc3d5698SJohn Baldwin.byte	0x61, 0x35, 0x57, 0xb9, 0x86, 0xc1, 0x1d, 0x9e
156bc3d5698SJohn Baldwin.byte	0xe1, 0xf8, 0x98, 0x11, 0x69, 0xd9, 0x8e, 0x94
157bc3d5698SJohn Baldwin.byte	0x9b, 0x1e, 0x87, 0xe9, 0xce, 0x55, 0x28, 0xdf
158bc3d5698SJohn Baldwin.byte	0x8c, 0xa1, 0x89, 0x0d, 0xbf, 0xe6, 0x42, 0x68
159bc3d5698SJohn Baldwin.byte	0x41, 0x99, 0x2d, 0x0f, 0xb0, 0x54, 0xbb, 0x16
160bc3d5698SJohn Baldwin@ rcon[]
161bc3d5698SJohn Baldwin.word	0x01000000, 0x02000000, 0x04000000, 0x08000000
162bc3d5698SJohn Baldwin.word	0x10000000, 0x20000000, 0x40000000, 0x80000000
163bc3d5698SJohn Baldwin.word	0x1B000000, 0x36000000, 0, 0, 0, 0, 0, 0
164bc3d5698SJohn Baldwin.size	AES_Te,.-AES_Te
165bc3d5698SJohn Baldwin
166bc3d5698SJohn Baldwin@ void AES_encrypt(const unsigned char *in, unsigned char *out,
167bc3d5698SJohn Baldwin@ 		 const AES_KEY *key) {
168bc3d5698SJohn Baldwin.globl	AES_encrypt
169bc3d5698SJohn Baldwin.type	AES_encrypt,%function
170bc3d5698SJohn Baldwin.align	5
171bc3d5698SJohn BaldwinAES_encrypt:
172bc3d5698SJohn Baldwin#ifndef	__thumb2__
173bc3d5698SJohn Baldwin	sub	r3,pc,#8		@ AES_encrypt
174bc3d5698SJohn Baldwin#else
175bc3d5698SJohn Baldwin	adr	r3,.
176bc3d5698SJohn Baldwin#endif
177bc3d5698SJohn Baldwin	stmdb	sp!,{r1,r4-r12,lr}
178bc3d5698SJohn Baldwin#if defined(__thumb2__) || defined(__APPLE__)
179bc3d5698SJohn Baldwin	adr	r10,AES_Te
180bc3d5698SJohn Baldwin#else
181bc3d5698SJohn Baldwin	sub	r10,r3,#AES_encrypt-AES_Te	@ Te
182bc3d5698SJohn Baldwin#endif
183bc3d5698SJohn Baldwin	mov	r12,r0		@ inp
184bc3d5698SJohn Baldwin	mov	r11,r2
185bc3d5698SJohn Baldwin#if __ARM_ARCH__<7
186bc3d5698SJohn Baldwin	ldrb	r0,[r12,#3]	@ load input data in endian-neutral
187bc3d5698SJohn Baldwin	ldrb	r4,[r12,#2]	@ manner...
188bc3d5698SJohn Baldwin	ldrb	r5,[r12,#1]
189bc3d5698SJohn Baldwin	ldrb	r6,[r12,#0]
190bc3d5698SJohn Baldwin	orr	r0,r0,r4,lsl#8
191bc3d5698SJohn Baldwin	ldrb	r1,[r12,#7]
192bc3d5698SJohn Baldwin	orr	r0,r0,r5,lsl#16
193bc3d5698SJohn Baldwin	ldrb	r4,[r12,#6]
194bc3d5698SJohn Baldwin	orr	r0,r0,r6,lsl#24
195bc3d5698SJohn Baldwin	ldrb	r5,[r12,#5]
196bc3d5698SJohn Baldwin	ldrb	r6,[r12,#4]
197bc3d5698SJohn Baldwin	orr	r1,r1,r4,lsl#8
198bc3d5698SJohn Baldwin	ldrb	r2,[r12,#11]
199bc3d5698SJohn Baldwin	orr	r1,r1,r5,lsl#16
200bc3d5698SJohn Baldwin	ldrb	r4,[r12,#10]
201bc3d5698SJohn Baldwin	orr	r1,r1,r6,lsl#24
202bc3d5698SJohn Baldwin	ldrb	r5,[r12,#9]
203bc3d5698SJohn Baldwin	ldrb	r6,[r12,#8]
204bc3d5698SJohn Baldwin	orr	r2,r2,r4,lsl#8
205bc3d5698SJohn Baldwin	ldrb	r3,[r12,#15]
206bc3d5698SJohn Baldwin	orr	r2,r2,r5,lsl#16
207bc3d5698SJohn Baldwin	ldrb	r4,[r12,#14]
208bc3d5698SJohn Baldwin	orr	r2,r2,r6,lsl#24
209bc3d5698SJohn Baldwin	ldrb	r5,[r12,#13]
210bc3d5698SJohn Baldwin	ldrb	r6,[r12,#12]
211bc3d5698SJohn Baldwin	orr	r3,r3,r4,lsl#8
212bc3d5698SJohn Baldwin	orr	r3,r3,r5,lsl#16
213bc3d5698SJohn Baldwin	orr	r3,r3,r6,lsl#24
214bc3d5698SJohn Baldwin#else
215bc3d5698SJohn Baldwin	ldr	r0,[r12,#0]
216bc3d5698SJohn Baldwin	ldr	r1,[r12,#4]
217bc3d5698SJohn Baldwin	ldr	r2,[r12,#8]
218bc3d5698SJohn Baldwin	ldr	r3,[r12,#12]
219bc3d5698SJohn Baldwin#ifdef __ARMEL__
220bc3d5698SJohn Baldwin	rev	r0,r0
221bc3d5698SJohn Baldwin	rev	r1,r1
222bc3d5698SJohn Baldwin	rev	r2,r2
223bc3d5698SJohn Baldwin	rev	r3,r3
224bc3d5698SJohn Baldwin#endif
225bc3d5698SJohn Baldwin#endif
226bc3d5698SJohn Baldwin	bl	_armv4_AES_encrypt
227bc3d5698SJohn Baldwin
228bc3d5698SJohn Baldwin	ldr	r12,[sp],#4		@ pop out
229bc3d5698SJohn Baldwin#if __ARM_ARCH__>=7
230bc3d5698SJohn Baldwin#ifdef __ARMEL__
231bc3d5698SJohn Baldwin	rev	r0,r0
232bc3d5698SJohn Baldwin	rev	r1,r1
233bc3d5698SJohn Baldwin	rev	r2,r2
234bc3d5698SJohn Baldwin	rev	r3,r3
235bc3d5698SJohn Baldwin#endif
236bc3d5698SJohn Baldwin	str	r0,[r12,#0]
237bc3d5698SJohn Baldwin	str	r1,[r12,#4]
238bc3d5698SJohn Baldwin	str	r2,[r12,#8]
239bc3d5698SJohn Baldwin	str	r3,[r12,#12]
240bc3d5698SJohn Baldwin#else
241bc3d5698SJohn Baldwin	mov	r4,r0,lsr#24		@ write output in endian-neutral
242bc3d5698SJohn Baldwin	mov	r5,r0,lsr#16		@ manner...
243bc3d5698SJohn Baldwin	mov	r6,r0,lsr#8
244bc3d5698SJohn Baldwin	strb	r4,[r12,#0]
245bc3d5698SJohn Baldwin	strb	r5,[r12,#1]
246bc3d5698SJohn Baldwin	mov	r4,r1,lsr#24
247bc3d5698SJohn Baldwin	strb	r6,[r12,#2]
248bc3d5698SJohn Baldwin	mov	r5,r1,lsr#16
249bc3d5698SJohn Baldwin	strb	r0,[r12,#3]
250bc3d5698SJohn Baldwin	mov	r6,r1,lsr#8
251bc3d5698SJohn Baldwin	strb	r4,[r12,#4]
252bc3d5698SJohn Baldwin	strb	r5,[r12,#5]
253bc3d5698SJohn Baldwin	mov	r4,r2,lsr#24
254bc3d5698SJohn Baldwin	strb	r6,[r12,#6]
255bc3d5698SJohn Baldwin	mov	r5,r2,lsr#16
256bc3d5698SJohn Baldwin	strb	r1,[r12,#7]
257bc3d5698SJohn Baldwin	mov	r6,r2,lsr#8
258bc3d5698SJohn Baldwin	strb	r4,[r12,#8]
259bc3d5698SJohn Baldwin	strb	r5,[r12,#9]
260bc3d5698SJohn Baldwin	mov	r4,r3,lsr#24
261bc3d5698SJohn Baldwin	strb	r6,[r12,#10]
262bc3d5698SJohn Baldwin	mov	r5,r3,lsr#16
263bc3d5698SJohn Baldwin	strb	r2,[r12,#11]
264bc3d5698SJohn Baldwin	mov	r6,r3,lsr#8
265bc3d5698SJohn Baldwin	strb	r4,[r12,#12]
266bc3d5698SJohn Baldwin	strb	r5,[r12,#13]
267bc3d5698SJohn Baldwin	strb	r6,[r12,#14]
268bc3d5698SJohn Baldwin	strb	r3,[r12,#15]
269bc3d5698SJohn Baldwin#endif
270bc3d5698SJohn Baldwin#if __ARM_ARCH__>=5
271bc3d5698SJohn Baldwin	ldmia	sp!,{r4,r5,r6,r7,r8,r9,r10,r11,r12,pc}
272bc3d5698SJohn Baldwin#else
273bc3d5698SJohn Baldwin	ldmia	sp!,{r4,r5,r6,r7,r8,r9,r10,r11,r12,lr}
274bc3d5698SJohn Baldwin	tst	lr,#1
275bc3d5698SJohn Baldwin	moveq	pc,lr			@ be binary compatible with V4, yet
276bc3d5698SJohn Baldwin.word	0xe12fff1e			@ interoperable with Thumb ISA:-)
277bc3d5698SJohn Baldwin#endif
278bc3d5698SJohn Baldwin.size	AES_encrypt,.-AES_encrypt
279bc3d5698SJohn Baldwin
280bc3d5698SJohn Baldwin.type	_armv4_AES_encrypt,%function
281bc3d5698SJohn Baldwin.align	2
282bc3d5698SJohn Baldwin_armv4_AES_encrypt:
283bc3d5698SJohn Baldwin	str	lr,[sp,#-4]!		@ push lr
284bc3d5698SJohn Baldwin	ldmia	r11!,{r4,r5,r6,r7}
285bc3d5698SJohn Baldwin	eor	r0,r0,r4
286bc3d5698SJohn Baldwin	ldr	r12,[r11,#240-16]
287bc3d5698SJohn Baldwin	eor	r1,r1,r5
288bc3d5698SJohn Baldwin	eor	r2,r2,r6
289bc3d5698SJohn Baldwin	eor	r3,r3,r7
290bc3d5698SJohn Baldwin	sub	r12,r12,#1
291bc3d5698SJohn Baldwin	mov	lr,#255
292bc3d5698SJohn Baldwin
293bc3d5698SJohn Baldwin	and	r7,lr,r0
294bc3d5698SJohn Baldwin	and	r8,lr,r0,lsr#8
295bc3d5698SJohn Baldwin	and	r9,lr,r0,lsr#16
296bc3d5698SJohn Baldwin	mov	r0,r0,lsr#24
297bc3d5698SJohn Baldwin.Lenc_loop:
298bc3d5698SJohn Baldwin	ldr	r4,[r10,r7,lsl#2]	@ Te3[s0>>0]
299bc3d5698SJohn Baldwin	and	r7,lr,r1,lsr#16	@ i0
300bc3d5698SJohn Baldwin	ldr	r5,[r10,r8,lsl#2]	@ Te2[s0>>8]
301bc3d5698SJohn Baldwin	and	r8,lr,r1
302bc3d5698SJohn Baldwin	ldr	r6,[r10,r9,lsl#2]	@ Te1[s0>>16]
303bc3d5698SJohn Baldwin	and	r9,lr,r1,lsr#8
304bc3d5698SJohn Baldwin	ldr	r0,[r10,r0,lsl#2]	@ Te0[s0>>24]
305bc3d5698SJohn Baldwin	mov	r1,r1,lsr#24
306bc3d5698SJohn Baldwin
307bc3d5698SJohn Baldwin	ldr	r7,[r10,r7,lsl#2]	@ Te1[s1>>16]
308bc3d5698SJohn Baldwin	ldr	r8,[r10,r8,lsl#2]	@ Te3[s1>>0]
309bc3d5698SJohn Baldwin	ldr	r9,[r10,r9,lsl#2]	@ Te2[s1>>8]
310bc3d5698SJohn Baldwin	eor	r0,r0,r7,ror#8
311bc3d5698SJohn Baldwin	ldr	r1,[r10,r1,lsl#2]	@ Te0[s1>>24]
312bc3d5698SJohn Baldwin	and	r7,lr,r2,lsr#8	@ i0
313bc3d5698SJohn Baldwin	eor	r5,r5,r8,ror#8
314bc3d5698SJohn Baldwin	and	r8,lr,r2,lsr#16	@ i1
315bc3d5698SJohn Baldwin	eor	r6,r6,r9,ror#8
316bc3d5698SJohn Baldwin	and	r9,lr,r2
317bc3d5698SJohn Baldwin	ldr	r7,[r10,r7,lsl#2]	@ Te2[s2>>8]
318bc3d5698SJohn Baldwin	eor	r1,r1,r4,ror#24
319bc3d5698SJohn Baldwin	ldr	r8,[r10,r8,lsl#2]	@ Te1[s2>>16]
320bc3d5698SJohn Baldwin	mov	r2,r2,lsr#24
321bc3d5698SJohn Baldwin
322bc3d5698SJohn Baldwin	ldr	r9,[r10,r9,lsl#2]	@ Te3[s2>>0]
323bc3d5698SJohn Baldwin	eor	r0,r0,r7,ror#16
324bc3d5698SJohn Baldwin	ldr	r2,[r10,r2,lsl#2]	@ Te0[s2>>24]
325bc3d5698SJohn Baldwin	and	r7,lr,r3		@ i0
326bc3d5698SJohn Baldwin	eor	r1,r1,r8,ror#8
327bc3d5698SJohn Baldwin	and	r8,lr,r3,lsr#8	@ i1
328bc3d5698SJohn Baldwin	eor	r6,r6,r9,ror#16
329bc3d5698SJohn Baldwin	and	r9,lr,r3,lsr#16	@ i2
330bc3d5698SJohn Baldwin	ldr	r7,[r10,r7,lsl#2]	@ Te3[s3>>0]
331bc3d5698SJohn Baldwin	eor	r2,r2,r5,ror#16
332bc3d5698SJohn Baldwin	ldr	r8,[r10,r8,lsl#2]	@ Te2[s3>>8]
333bc3d5698SJohn Baldwin	mov	r3,r3,lsr#24
334bc3d5698SJohn Baldwin
335bc3d5698SJohn Baldwin	ldr	r9,[r10,r9,lsl#2]	@ Te1[s3>>16]
336bc3d5698SJohn Baldwin	eor	r0,r0,r7,ror#24
337bc3d5698SJohn Baldwin	ldr	r7,[r11],#16
338bc3d5698SJohn Baldwin	eor	r1,r1,r8,ror#16
339bc3d5698SJohn Baldwin	ldr	r3,[r10,r3,lsl#2]	@ Te0[s3>>24]
340bc3d5698SJohn Baldwin	eor	r2,r2,r9,ror#8
341bc3d5698SJohn Baldwin	ldr	r4,[r11,#-12]
342bc3d5698SJohn Baldwin	eor	r3,r3,r6,ror#8
343bc3d5698SJohn Baldwin
344bc3d5698SJohn Baldwin	ldr	r5,[r11,#-8]
345bc3d5698SJohn Baldwin	eor	r0,r0,r7
346bc3d5698SJohn Baldwin	ldr	r6,[r11,#-4]
347bc3d5698SJohn Baldwin	and	r7,lr,r0
348bc3d5698SJohn Baldwin	eor	r1,r1,r4
349bc3d5698SJohn Baldwin	and	r8,lr,r0,lsr#8
350bc3d5698SJohn Baldwin	eor	r2,r2,r5
351bc3d5698SJohn Baldwin	and	r9,lr,r0,lsr#16
352bc3d5698SJohn Baldwin	eor	r3,r3,r6
353bc3d5698SJohn Baldwin	mov	r0,r0,lsr#24
354bc3d5698SJohn Baldwin
355bc3d5698SJohn Baldwin	subs	r12,r12,#1
356bc3d5698SJohn Baldwin	bne	.Lenc_loop
357bc3d5698SJohn Baldwin
358bc3d5698SJohn Baldwin	add	r10,r10,#2
359bc3d5698SJohn Baldwin
360bc3d5698SJohn Baldwin	ldrb	r4,[r10,r7,lsl#2]	@ Te4[s0>>0]
361bc3d5698SJohn Baldwin	and	r7,lr,r1,lsr#16	@ i0
362bc3d5698SJohn Baldwin	ldrb	r5,[r10,r8,lsl#2]	@ Te4[s0>>8]
363bc3d5698SJohn Baldwin	and	r8,lr,r1
364bc3d5698SJohn Baldwin	ldrb	r6,[r10,r9,lsl#2]	@ Te4[s0>>16]
365bc3d5698SJohn Baldwin	and	r9,lr,r1,lsr#8
366bc3d5698SJohn Baldwin	ldrb	r0,[r10,r0,lsl#2]	@ Te4[s0>>24]
367bc3d5698SJohn Baldwin	mov	r1,r1,lsr#24
368bc3d5698SJohn Baldwin
369bc3d5698SJohn Baldwin	ldrb	r7,[r10,r7,lsl#2]	@ Te4[s1>>16]
370bc3d5698SJohn Baldwin	ldrb	r8,[r10,r8,lsl#2]	@ Te4[s1>>0]
371bc3d5698SJohn Baldwin	ldrb	r9,[r10,r9,lsl#2]	@ Te4[s1>>8]
372bc3d5698SJohn Baldwin	eor	r0,r7,r0,lsl#8
373bc3d5698SJohn Baldwin	ldrb	r1,[r10,r1,lsl#2]	@ Te4[s1>>24]
374bc3d5698SJohn Baldwin	and	r7,lr,r2,lsr#8	@ i0
375bc3d5698SJohn Baldwin	eor	r5,r8,r5,lsl#8
376bc3d5698SJohn Baldwin	and	r8,lr,r2,lsr#16	@ i1
377bc3d5698SJohn Baldwin	eor	r6,r9,r6,lsl#8
378bc3d5698SJohn Baldwin	and	r9,lr,r2
379bc3d5698SJohn Baldwin	ldrb	r7,[r10,r7,lsl#2]	@ Te4[s2>>8]
380bc3d5698SJohn Baldwin	eor	r1,r4,r1,lsl#24
381bc3d5698SJohn Baldwin	ldrb	r8,[r10,r8,lsl#2]	@ Te4[s2>>16]
382bc3d5698SJohn Baldwin	mov	r2,r2,lsr#24
383bc3d5698SJohn Baldwin
384bc3d5698SJohn Baldwin	ldrb	r9,[r10,r9,lsl#2]	@ Te4[s2>>0]
385bc3d5698SJohn Baldwin	eor	r0,r7,r0,lsl#8
386bc3d5698SJohn Baldwin	ldrb	r2,[r10,r2,lsl#2]	@ Te4[s2>>24]
387bc3d5698SJohn Baldwin	and	r7,lr,r3		@ i0
388bc3d5698SJohn Baldwin	eor	r1,r1,r8,lsl#16
389bc3d5698SJohn Baldwin	and	r8,lr,r3,lsr#8	@ i1
390bc3d5698SJohn Baldwin	eor	r6,r9,r6,lsl#8
391bc3d5698SJohn Baldwin	and	r9,lr,r3,lsr#16	@ i2
392bc3d5698SJohn Baldwin	ldrb	r7,[r10,r7,lsl#2]	@ Te4[s3>>0]
393bc3d5698SJohn Baldwin	eor	r2,r5,r2,lsl#24
394bc3d5698SJohn Baldwin	ldrb	r8,[r10,r8,lsl#2]	@ Te4[s3>>8]
395bc3d5698SJohn Baldwin	mov	r3,r3,lsr#24
396bc3d5698SJohn Baldwin
397bc3d5698SJohn Baldwin	ldrb	r9,[r10,r9,lsl#2]	@ Te4[s3>>16]
398bc3d5698SJohn Baldwin	eor	r0,r7,r0,lsl#8
399bc3d5698SJohn Baldwin	ldr	r7,[r11,#0]
400bc3d5698SJohn Baldwin	ldrb	r3,[r10,r3,lsl#2]	@ Te4[s3>>24]
401bc3d5698SJohn Baldwin	eor	r1,r1,r8,lsl#8
402bc3d5698SJohn Baldwin	ldr	r4,[r11,#4]
403bc3d5698SJohn Baldwin	eor	r2,r2,r9,lsl#16
404bc3d5698SJohn Baldwin	ldr	r5,[r11,#8]
405bc3d5698SJohn Baldwin	eor	r3,r6,r3,lsl#24
406bc3d5698SJohn Baldwin	ldr	r6,[r11,#12]
407bc3d5698SJohn Baldwin
408bc3d5698SJohn Baldwin	eor	r0,r0,r7
409bc3d5698SJohn Baldwin	eor	r1,r1,r4
410bc3d5698SJohn Baldwin	eor	r2,r2,r5
411bc3d5698SJohn Baldwin	eor	r3,r3,r6
412bc3d5698SJohn Baldwin
413bc3d5698SJohn Baldwin	sub	r10,r10,#2
414bc3d5698SJohn Baldwin	ldr	pc,[sp],#4		@ pop and return
415bc3d5698SJohn Baldwin.size	_armv4_AES_encrypt,.-_armv4_AES_encrypt
416bc3d5698SJohn Baldwin
417bc3d5698SJohn Baldwin.globl	AES_set_encrypt_key
418bc3d5698SJohn Baldwin.type	AES_set_encrypt_key,%function
419bc3d5698SJohn Baldwin.align	5
420bc3d5698SJohn BaldwinAES_set_encrypt_key:
421bc3d5698SJohn Baldwin_armv4_AES_set_encrypt_key:
422bc3d5698SJohn Baldwin#ifndef	__thumb2__
423bc3d5698SJohn Baldwin	sub	r3,pc,#8		@ AES_set_encrypt_key
424bc3d5698SJohn Baldwin#else
425bc3d5698SJohn Baldwin	adr	r3,.
426bc3d5698SJohn Baldwin#endif
427bc3d5698SJohn Baldwin	teq	r0,#0
428bc3d5698SJohn Baldwin#ifdef	__thumb2__
429bc3d5698SJohn Baldwin	itt	eq			@ Thumb2 thing, sanity check in ARM
430bc3d5698SJohn Baldwin#endif
431bc3d5698SJohn Baldwin	moveq	r0,#-1
432bc3d5698SJohn Baldwin	beq	.Labrt
433bc3d5698SJohn Baldwin	teq	r2,#0
434bc3d5698SJohn Baldwin#ifdef	__thumb2__
435bc3d5698SJohn Baldwin	itt	eq			@ Thumb2 thing, sanity check in ARM
436bc3d5698SJohn Baldwin#endif
437bc3d5698SJohn Baldwin	moveq	r0,#-1
438bc3d5698SJohn Baldwin	beq	.Labrt
439bc3d5698SJohn Baldwin
440bc3d5698SJohn Baldwin	teq	r1,#128
441bc3d5698SJohn Baldwin	beq	.Lok
442bc3d5698SJohn Baldwin	teq	r1,#192
443bc3d5698SJohn Baldwin	beq	.Lok
444bc3d5698SJohn Baldwin	teq	r1,#256
445bc3d5698SJohn Baldwin#ifdef	__thumb2__
446bc3d5698SJohn Baldwin	itt	ne			@ Thumb2 thing, sanity check in ARM
447bc3d5698SJohn Baldwin#endif
448bc3d5698SJohn Baldwin	movne	r0,#-1
449bc3d5698SJohn Baldwin	bne	.Labrt
450bc3d5698SJohn Baldwin
451bc3d5698SJohn Baldwin.Lok:	stmdb	sp!,{r4,r5,r6,r7,r8,r9,r10,r11,r12,lr}
452bc3d5698SJohn Baldwin	mov	r12,r0		@ inp
453bc3d5698SJohn Baldwin	mov	lr,r1			@ bits
454bc3d5698SJohn Baldwin	mov	r11,r2			@ key
455bc3d5698SJohn Baldwin
456bc3d5698SJohn Baldwin#if defined(__thumb2__) || defined(__APPLE__)
457bc3d5698SJohn Baldwin	adr	r10,AES_Te+1024				@ Te4
458bc3d5698SJohn Baldwin#else
459bc3d5698SJohn Baldwin	sub	r10,r3,#_armv4_AES_set_encrypt_key-AES_Te-1024	@ Te4
460bc3d5698SJohn Baldwin#endif
461bc3d5698SJohn Baldwin
462bc3d5698SJohn Baldwin#if __ARM_ARCH__<7
463bc3d5698SJohn Baldwin	ldrb	r0,[r12,#3]	@ load input data in endian-neutral
464bc3d5698SJohn Baldwin	ldrb	r4,[r12,#2]	@ manner...
465bc3d5698SJohn Baldwin	ldrb	r5,[r12,#1]
466bc3d5698SJohn Baldwin	ldrb	r6,[r12,#0]
467bc3d5698SJohn Baldwin	orr	r0,r0,r4,lsl#8
468bc3d5698SJohn Baldwin	ldrb	r1,[r12,#7]
469bc3d5698SJohn Baldwin	orr	r0,r0,r5,lsl#16
470bc3d5698SJohn Baldwin	ldrb	r4,[r12,#6]
471bc3d5698SJohn Baldwin	orr	r0,r0,r6,lsl#24
472bc3d5698SJohn Baldwin	ldrb	r5,[r12,#5]
473bc3d5698SJohn Baldwin	ldrb	r6,[r12,#4]
474bc3d5698SJohn Baldwin	orr	r1,r1,r4,lsl#8
475bc3d5698SJohn Baldwin	ldrb	r2,[r12,#11]
476bc3d5698SJohn Baldwin	orr	r1,r1,r5,lsl#16
477bc3d5698SJohn Baldwin	ldrb	r4,[r12,#10]
478bc3d5698SJohn Baldwin	orr	r1,r1,r6,lsl#24
479bc3d5698SJohn Baldwin	ldrb	r5,[r12,#9]
480bc3d5698SJohn Baldwin	ldrb	r6,[r12,#8]
481bc3d5698SJohn Baldwin	orr	r2,r2,r4,lsl#8
482bc3d5698SJohn Baldwin	ldrb	r3,[r12,#15]
483bc3d5698SJohn Baldwin	orr	r2,r2,r5,lsl#16
484bc3d5698SJohn Baldwin	ldrb	r4,[r12,#14]
485bc3d5698SJohn Baldwin	orr	r2,r2,r6,lsl#24
486bc3d5698SJohn Baldwin	ldrb	r5,[r12,#13]
487bc3d5698SJohn Baldwin	ldrb	r6,[r12,#12]
488bc3d5698SJohn Baldwin	orr	r3,r3,r4,lsl#8
489bc3d5698SJohn Baldwin	str	r0,[r11],#16
490bc3d5698SJohn Baldwin	orr	r3,r3,r5,lsl#16
491bc3d5698SJohn Baldwin	str	r1,[r11,#-12]
492bc3d5698SJohn Baldwin	orr	r3,r3,r6,lsl#24
493bc3d5698SJohn Baldwin	str	r2,[r11,#-8]
494bc3d5698SJohn Baldwin	str	r3,[r11,#-4]
495bc3d5698SJohn Baldwin#else
496bc3d5698SJohn Baldwin	ldr	r0,[r12,#0]
497bc3d5698SJohn Baldwin	ldr	r1,[r12,#4]
498bc3d5698SJohn Baldwin	ldr	r2,[r12,#8]
499bc3d5698SJohn Baldwin	ldr	r3,[r12,#12]
500bc3d5698SJohn Baldwin#ifdef __ARMEL__
501bc3d5698SJohn Baldwin	rev	r0,r0
502bc3d5698SJohn Baldwin	rev	r1,r1
503bc3d5698SJohn Baldwin	rev	r2,r2
504bc3d5698SJohn Baldwin	rev	r3,r3
505bc3d5698SJohn Baldwin#endif
506bc3d5698SJohn Baldwin	str	r0,[r11],#16
507bc3d5698SJohn Baldwin	str	r1,[r11,#-12]
508bc3d5698SJohn Baldwin	str	r2,[r11,#-8]
509bc3d5698SJohn Baldwin	str	r3,[r11,#-4]
510bc3d5698SJohn Baldwin#endif
511bc3d5698SJohn Baldwin
512bc3d5698SJohn Baldwin	teq	lr,#128
513bc3d5698SJohn Baldwin	bne	.Lnot128
514bc3d5698SJohn Baldwin	mov	r12,#10
515bc3d5698SJohn Baldwin	str	r12,[r11,#240-16]
516bc3d5698SJohn Baldwin	add	r6,r10,#256			@ rcon
517bc3d5698SJohn Baldwin	mov	lr,#255
518bc3d5698SJohn Baldwin
519bc3d5698SJohn Baldwin.L128_loop:
520bc3d5698SJohn Baldwin	and	r5,lr,r3,lsr#24
521bc3d5698SJohn Baldwin	and	r7,lr,r3,lsr#16
522bc3d5698SJohn Baldwin	ldrb	r5,[r10,r5]
523bc3d5698SJohn Baldwin	and	r8,lr,r3,lsr#8
524bc3d5698SJohn Baldwin	ldrb	r7,[r10,r7]
525bc3d5698SJohn Baldwin	and	r9,lr,r3
526bc3d5698SJohn Baldwin	ldrb	r8,[r10,r8]
527bc3d5698SJohn Baldwin	orr	r5,r5,r7,lsl#24
528bc3d5698SJohn Baldwin	ldrb	r9,[r10,r9]
529bc3d5698SJohn Baldwin	orr	r5,r5,r8,lsl#16
530bc3d5698SJohn Baldwin	ldr	r4,[r6],#4			@ rcon[i++]
531bc3d5698SJohn Baldwin	orr	r5,r5,r9,lsl#8
532bc3d5698SJohn Baldwin	eor	r5,r5,r4
533bc3d5698SJohn Baldwin	eor	r0,r0,r5			@ rk[4]=rk[0]^...
534bc3d5698SJohn Baldwin	eor	r1,r1,r0			@ rk[5]=rk[1]^rk[4]
535bc3d5698SJohn Baldwin	str	r0,[r11],#16
536bc3d5698SJohn Baldwin	eor	r2,r2,r1			@ rk[6]=rk[2]^rk[5]
537bc3d5698SJohn Baldwin	str	r1,[r11,#-12]
538bc3d5698SJohn Baldwin	eor	r3,r3,r2			@ rk[7]=rk[3]^rk[6]
539bc3d5698SJohn Baldwin	str	r2,[r11,#-8]
540bc3d5698SJohn Baldwin	subs	r12,r12,#1
541bc3d5698SJohn Baldwin	str	r3,[r11,#-4]
542bc3d5698SJohn Baldwin	bne	.L128_loop
543bc3d5698SJohn Baldwin	sub	r2,r11,#176
544bc3d5698SJohn Baldwin	b	.Ldone
545bc3d5698SJohn Baldwin
546bc3d5698SJohn Baldwin.Lnot128:
547bc3d5698SJohn Baldwin#if __ARM_ARCH__<7
548bc3d5698SJohn Baldwin	ldrb	r8,[r12,#19]
549bc3d5698SJohn Baldwin	ldrb	r4,[r12,#18]
550bc3d5698SJohn Baldwin	ldrb	r5,[r12,#17]
551bc3d5698SJohn Baldwin	ldrb	r6,[r12,#16]
552bc3d5698SJohn Baldwin	orr	r8,r8,r4,lsl#8
553bc3d5698SJohn Baldwin	ldrb	r9,[r12,#23]
554bc3d5698SJohn Baldwin	orr	r8,r8,r5,lsl#16
555bc3d5698SJohn Baldwin	ldrb	r4,[r12,#22]
556bc3d5698SJohn Baldwin	orr	r8,r8,r6,lsl#24
557bc3d5698SJohn Baldwin	ldrb	r5,[r12,#21]
558bc3d5698SJohn Baldwin	ldrb	r6,[r12,#20]
559bc3d5698SJohn Baldwin	orr	r9,r9,r4,lsl#8
560bc3d5698SJohn Baldwin	orr	r9,r9,r5,lsl#16
561bc3d5698SJohn Baldwin	str	r8,[r11],#8
562bc3d5698SJohn Baldwin	orr	r9,r9,r6,lsl#24
563bc3d5698SJohn Baldwin	str	r9,[r11,#-4]
564bc3d5698SJohn Baldwin#else
565bc3d5698SJohn Baldwin	ldr	r8,[r12,#16]
566bc3d5698SJohn Baldwin	ldr	r9,[r12,#20]
567bc3d5698SJohn Baldwin#ifdef __ARMEL__
568bc3d5698SJohn Baldwin	rev	r8,r8
569bc3d5698SJohn Baldwin	rev	r9,r9
570bc3d5698SJohn Baldwin#endif
571bc3d5698SJohn Baldwin	str	r8,[r11],#8
572bc3d5698SJohn Baldwin	str	r9,[r11,#-4]
573bc3d5698SJohn Baldwin#endif
574bc3d5698SJohn Baldwin
575bc3d5698SJohn Baldwin	teq	lr,#192
576bc3d5698SJohn Baldwin	bne	.Lnot192
577bc3d5698SJohn Baldwin	mov	r12,#12
578bc3d5698SJohn Baldwin	str	r12,[r11,#240-24]
579bc3d5698SJohn Baldwin	add	r6,r10,#256			@ rcon
580bc3d5698SJohn Baldwin	mov	lr,#255
581bc3d5698SJohn Baldwin	mov	r12,#8
582bc3d5698SJohn Baldwin
583bc3d5698SJohn Baldwin.L192_loop:
584bc3d5698SJohn Baldwin	and	r5,lr,r9,lsr#24
585bc3d5698SJohn Baldwin	and	r7,lr,r9,lsr#16
586bc3d5698SJohn Baldwin	ldrb	r5,[r10,r5]
587bc3d5698SJohn Baldwin	and	r8,lr,r9,lsr#8
588bc3d5698SJohn Baldwin	ldrb	r7,[r10,r7]
589bc3d5698SJohn Baldwin	and	r9,lr,r9
590bc3d5698SJohn Baldwin	ldrb	r8,[r10,r8]
591bc3d5698SJohn Baldwin	orr	r5,r5,r7,lsl#24
592bc3d5698SJohn Baldwin	ldrb	r9,[r10,r9]
593bc3d5698SJohn Baldwin	orr	r5,r5,r8,lsl#16
594bc3d5698SJohn Baldwin	ldr	r4,[r6],#4			@ rcon[i++]
595bc3d5698SJohn Baldwin	orr	r5,r5,r9,lsl#8
596bc3d5698SJohn Baldwin	eor	r9,r5,r4
597bc3d5698SJohn Baldwin	eor	r0,r0,r9			@ rk[6]=rk[0]^...
598bc3d5698SJohn Baldwin	eor	r1,r1,r0			@ rk[7]=rk[1]^rk[6]
599bc3d5698SJohn Baldwin	str	r0,[r11],#24
600bc3d5698SJohn Baldwin	eor	r2,r2,r1			@ rk[8]=rk[2]^rk[7]
601bc3d5698SJohn Baldwin	str	r1,[r11,#-20]
602bc3d5698SJohn Baldwin	eor	r3,r3,r2			@ rk[9]=rk[3]^rk[8]
603bc3d5698SJohn Baldwin	str	r2,[r11,#-16]
604bc3d5698SJohn Baldwin	subs	r12,r12,#1
605bc3d5698SJohn Baldwin	str	r3,[r11,#-12]
606bc3d5698SJohn Baldwin#ifdef	__thumb2__
607bc3d5698SJohn Baldwin	itt	eq				@ Thumb2 thing, sanity check in ARM
608bc3d5698SJohn Baldwin#endif
609bc3d5698SJohn Baldwin	subeq	r2,r11,#216
610bc3d5698SJohn Baldwin	beq	.Ldone
611bc3d5698SJohn Baldwin
612bc3d5698SJohn Baldwin	ldr	r7,[r11,#-32]
613bc3d5698SJohn Baldwin	ldr	r8,[r11,#-28]
614bc3d5698SJohn Baldwin	eor	r7,r7,r3			@ rk[10]=rk[4]^rk[9]
615bc3d5698SJohn Baldwin	eor	r9,r8,r7			@ rk[11]=rk[5]^rk[10]
616bc3d5698SJohn Baldwin	str	r7,[r11,#-8]
617bc3d5698SJohn Baldwin	str	r9,[r11,#-4]
618bc3d5698SJohn Baldwin	b	.L192_loop
619bc3d5698SJohn Baldwin
620bc3d5698SJohn Baldwin.Lnot192:
621bc3d5698SJohn Baldwin#if __ARM_ARCH__<7
622bc3d5698SJohn Baldwin	ldrb	r8,[r12,#27]
623bc3d5698SJohn Baldwin	ldrb	r4,[r12,#26]
624bc3d5698SJohn Baldwin	ldrb	r5,[r12,#25]
625bc3d5698SJohn Baldwin	ldrb	r6,[r12,#24]
626bc3d5698SJohn Baldwin	orr	r8,r8,r4,lsl#8
627bc3d5698SJohn Baldwin	ldrb	r9,[r12,#31]
628bc3d5698SJohn Baldwin	orr	r8,r8,r5,lsl#16
629bc3d5698SJohn Baldwin	ldrb	r4,[r12,#30]
630bc3d5698SJohn Baldwin	orr	r8,r8,r6,lsl#24
631bc3d5698SJohn Baldwin	ldrb	r5,[r12,#29]
632bc3d5698SJohn Baldwin	ldrb	r6,[r12,#28]
633bc3d5698SJohn Baldwin	orr	r9,r9,r4,lsl#8
634bc3d5698SJohn Baldwin	orr	r9,r9,r5,lsl#16
635bc3d5698SJohn Baldwin	str	r8,[r11],#8
636bc3d5698SJohn Baldwin	orr	r9,r9,r6,lsl#24
637bc3d5698SJohn Baldwin	str	r9,[r11,#-4]
638bc3d5698SJohn Baldwin#else
639bc3d5698SJohn Baldwin	ldr	r8,[r12,#24]
640bc3d5698SJohn Baldwin	ldr	r9,[r12,#28]
641bc3d5698SJohn Baldwin#ifdef __ARMEL__
642bc3d5698SJohn Baldwin	rev	r8,r8
643bc3d5698SJohn Baldwin	rev	r9,r9
644bc3d5698SJohn Baldwin#endif
645bc3d5698SJohn Baldwin	str	r8,[r11],#8
646bc3d5698SJohn Baldwin	str	r9,[r11,#-4]
647bc3d5698SJohn Baldwin#endif
648bc3d5698SJohn Baldwin
649bc3d5698SJohn Baldwin	mov	r12,#14
650bc3d5698SJohn Baldwin	str	r12,[r11,#240-32]
651bc3d5698SJohn Baldwin	add	r6,r10,#256			@ rcon
652bc3d5698SJohn Baldwin	mov	lr,#255
653bc3d5698SJohn Baldwin	mov	r12,#7
654bc3d5698SJohn Baldwin
655bc3d5698SJohn Baldwin.L256_loop:
656bc3d5698SJohn Baldwin	and	r5,lr,r9,lsr#24
657bc3d5698SJohn Baldwin	and	r7,lr,r9,lsr#16
658bc3d5698SJohn Baldwin	ldrb	r5,[r10,r5]
659bc3d5698SJohn Baldwin	and	r8,lr,r9,lsr#8
660bc3d5698SJohn Baldwin	ldrb	r7,[r10,r7]
661bc3d5698SJohn Baldwin	and	r9,lr,r9
662bc3d5698SJohn Baldwin	ldrb	r8,[r10,r8]
663bc3d5698SJohn Baldwin	orr	r5,r5,r7,lsl#24
664bc3d5698SJohn Baldwin	ldrb	r9,[r10,r9]
665bc3d5698SJohn Baldwin	orr	r5,r5,r8,lsl#16
666bc3d5698SJohn Baldwin	ldr	r4,[r6],#4			@ rcon[i++]
667bc3d5698SJohn Baldwin	orr	r5,r5,r9,lsl#8
668bc3d5698SJohn Baldwin	eor	r9,r5,r4
669bc3d5698SJohn Baldwin	eor	r0,r0,r9			@ rk[8]=rk[0]^...
670bc3d5698SJohn Baldwin	eor	r1,r1,r0			@ rk[9]=rk[1]^rk[8]
671bc3d5698SJohn Baldwin	str	r0,[r11],#32
672bc3d5698SJohn Baldwin	eor	r2,r2,r1			@ rk[10]=rk[2]^rk[9]
673bc3d5698SJohn Baldwin	str	r1,[r11,#-28]
674bc3d5698SJohn Baldwin	eor	r3,r3,r2			@ rk[11]=rk[3]^rk[10]
675bc3d5698SJohn Baldwin	str	r2,[r11,#-24]
676bc3d5698SJohn Baldwin	subs	r12,r12,#1
677bc3d5698SJohn Baldwin	str	r3,[r11,#-20]
678bc3d5698SJohn Baldwin#ifdef	__thumb2__
679bc3d5698SJohn Baldwin	itt	eq				@ Thumb2 thing, sanity check in ARM
680bc3d5698SJohn Baldwin#endif
681bc3d5698SJohn Baldwin	subeq	r2,r11,#256
682bc3d5698SJohn Baldwin	beq	.Ldone
683bc3d5698SJohn Baldwin
684bc3d5698SJohn Baldwin	and	r5,lr,r3
685bc3d5698SJohn Baldwin	and	r7,lr,r3,lsr#8
686bc3d5698SJohn Baldwin	ldrb	r5,[r10,r5]
687bc3d5698SJohn Baldwin	and	r8,lr,r3,lsr#16
688bc3d5698SJohn Baldwin	ldrb	r7,[r10,r7]
689bc3d5698SJohn Baldwin	and	r9,lr,r3,lsr#24
690bc3d5698SJohn Baldwin	ldrb	r8,[r10,r8]
691bc3d5698SJohn Baldwin	orr	r5,r5,r7,lsl#8
692bc3d5698SJohn Baldwin	ldrb	r9,[r10,r9]
693bc3d5698SJohn Baldwin	orr	r5,r5,r8,lsl#16
694bc3d5698SJohn Baldwin	ldr	r4,[r11,#-48]
695bc3d5698SJohn Baldwin	orr	r5,r5,r9,lsl#24
696bc3d5698SJohn Baldwin
697bc3d5698SJohn Baldwin	ldr	r7,[r11,#-44]
698bc3d5698SJohn Baldwin	ldr	r8,[r11,#-40]
699bc3d5698SJohn Baldwin	eor	r4,r4,r5			@ rk[12]=rk[4]^...
700bc3d5698SJohn Baldwin	ldr	r9,[r11,#-36]
701bc3d5698SJohn Baldwin	eor	r7,r7,r4			@ rk[13]=rk[5]^rk[12]
702bc3d5698SJohn Baldwin	str	r4,[r11,#-16]
703bc3d5698SJohn Baldwin	eor	r8,r8,r7			@ rk[14]=rk[6]^rk[13]
704bc3d5698SJohn Baldwin	str	r7,[r11,#-12]
705bc3d5698SJohn Baldwin	eor	r9,r9,r8			@ rk[15]=rk[7]^rk[14]
706bc3d5698SJohn Baldwin	str	r8,[r11,#-8]
707bc3d5698SJohn Baldwin	str	r9,[r11,#-4]
708bc3d5698SJohn Baldwin	b	.L256_loop
709bc3d5698SJohn Baldwin
710bc3d5698SJohn Baldwin.align	2
711bc3d5698SJohn Baldwin.Ldone:	mov	r0,#0
712bc3d5698SJohn Baldwin	ldmia	sp!,{r4,r5,r6,r7,r8,r9,r10,r11,r12,lr}
713bc3d5698SJohn Baldwin.Labrt:
714bc3d5698SJohn Baldwin#if __ARM_ARCH__>=5
715bc3d5698SJohn Baldwin	bx	lr				@ .word	0xe12fff1e
716bc3d5698SJohn Baldwin#else
717bc3d5698SJohn Baldwin	tst	lr,#1
718bc3d5698SJohn Baldwin	moveq	pc,lr			@ be binary compatible with V4, yet
719bc3d5698SJohn Baldwin.word	0xe12fff1e			@ interoperable with Thumb ISA:-)
720bc3d5698SJohn Baldwin#endif
721bc3d5698SJohn Baldwin.size	AES_set_encrypt_key,.-AES_set_encrypt_key
722bc3d5698SJohn Baldwin
723bc3d5698SJohn Baldwin.globl	AES_set_decrypt_key
724bc3d5698SJohn Baldwin.type	AES_set_decrypt_key,%function
725bc3d5698SJohn Baldwin.align	5
726bc3d5698SJohn BaldwinAES_set_decrypt_key:
727bc3d5698SJohn Baldwin	str	lr,[sp,#-4]!            @ push lr
728bc3d5698SJohn Baldwin	bl	_armv4_AES_set_encrypt_key
729bc3d5698SJohn Baldwin	teq	r0,#0
730bc3d5698SJohn Baldwin	ldr	lr,[sp],#4              @ pop lr
731bc3d5698SJohn Baldwin	bne	.Labrt
732bc3d5698SJohn Baldwin
733bc3d5698SJohn Baldwin	mov	r0,r2			@ AES_set_encrypt_key preserves r2,
734bc3d5698SJohn Baldwin	mov	r1,r2			@ which is AES_KEY *key
735bc3d5698SJohn Baldwin	b	_armv4_AES_set_enc2dec_key
736bc3d5698SJohn Baldwin.size	AES_set_decrypt_key,.-AES_set_decrypt_key
737bc3d5698SJohn Baldwin
738bc3d5698SJohn Baldwin@ void AES_set_enc2dec_key(const AES_KEY *inp,AES_KEY *out)
739bc3d5698SJohn Baldwin.globl	AES_set_enc2dec_key
740bc3d5698SJohn Baldwin.type	AES_set_enc2dec_key,%function
741bc3d5698SJohn Baldwin.align	5
742bc3d5698SJohn BaldwinAES_set_enc2dec_key:
743bc3d5698SJohn Baldwin_armv4_AES_set_enc2dec_key:
744bc3d5698SJohn Baldwin	stmdb	sp!,{r4,r5,r6,r7,r8,r9,r10,r11,r12,lr}
745bc3d5698SJohn Baldwin
746bc3d5698SJohn Baldwin	ldr	r12,[r0,#240]
747bc3d5698SJohn Baldwin	mov	r7,r0			@ input
748bc3d5698SJohn Baldwin	add	r8,r0,r12,lsl#4
749bc3d5698SJohn Baldwin	mov	r11,r1			@ output
750bc3d5698SJohn Baldwin	add	r10,r1,r12,lsl#4
751bc3d5698SJohn Baldwin	str	r12,[r1,#240]
752bc3d5698SJohn Baldwin
753bc3d5698SJohn Baldwin.Linv:	ldr	r0,[r7],#16
754bc3d5698SJohn Baldwin	ldr	r1,[r7,#-12]
755bc3d5698SJohn Baldwin	ldr	r2,[r7,#-8]
756bc3d5698SJohn Baldwin	ldr	r3,[r7,#-4]
757bc3d5698SJohn Baldwin	ldr	r4,[r8],#-16
758bc3d5698SJohn Baldwin	ldr	r5,[r8,#16+4]
759bc3d5698SJohn Baldwin	ldr	r6,[r8,#16+8]
760bc3d5698SJohn Baldwin	ldr	r9,[r8,#16+12]
761bc3d5698SJohn Baldwin	str	r0,[r10],#-16
762bc3d5698SJohn Baldwin	str	r1,[r10,#16+4]
763bc3d5698SJohn Baldwin	str	r2,[r10,#16+8]
764bc3d5698SJohn Baldwin	str	r3,[r10,#16+12]
765bc3d5698SJohn Baldwin	str	r4,[r11],#16
766bc3d5698SJohn Baldwin	str	r5,[r11,#-12]
767bc3d5698SJohn Baldwin	str	r6,[r11,#-8]
768bc3d5698SJohn Baldwin	str	r9,[r11,#-4]
769bc3d5698SJohn Baldwin	teq	r7,r8
770bc3d5698SJohn Baldwin	bne	.Linv
771bc3d5698SJohn Baldwin
772bc3d5698SJohn Baldwin	ldr	r0,[r7]
773bc3d5698SJohn Baldwin	ldr	r1,[r7,#4]
774bc3d5698SJohn Baldwin	ldr	r2,[r7,#8]
775bc3d5698SJohn Baldwin	ldr	r3,[r7,#12]
776bc3d5698SJohn Baldwin	str	r0,[r11]
777bc3d5698SJohn Baldwin	str	r1,[r11,#4]
778bc3d5698SJohn Baldwin	str	r2,[r11,#8]
779bc3d5698SJohn Baldwin	str	r3,[r11,#12]
780bc3d5698SJohn Baldwin	sub	r11,r11,r12,lsl#3
781bc3d5698SJohn Baldwin	ldr	r0,[r11,#16]!		@ prefetch tp1
782bc3d5698SJohn Baldwin	mov	r7,#0x80
783bc3d5698SJohn Baldwin	mov	r8,#0x1b
784bc3d5698SJohn Baldwin	orr	r7,r7,#0x8000
785bc3d5698SJohn Baldwin	orr	r8,r8,#0x1b00
786bc3d5698SJohn Baldwin	orr	r7,r7,r7,lsl#16
787bc3d5698SJohn Baldwin	orr	r8,r8,r8,lsl#16
788bc3d5698SJohn Baldwin	sub	r12,r12,#1
789bc3d5698SJohn Baldwin	mvn	r9,r7
790bc3d5698SJohn Baldwin	mov	r12,r12,lsl#2	@ (rounds-1)*4
791bc3d5698SJohn Baldwin
792bc3d5698SJohn Baldwin.Lmix:	and	r4,r0,r7
793bc3d5698SJohn Baldwin	and	r1,r0,r9
794bc3d5698SJohn Baldwin	sub	r4,r4,r4,lsr#7
795bc3d5698SJohn Baldwin	and	r4,r4,r8
796bc3d5698SJohn Baldwin	eor	r1,r4,r1,lsl#1	@ tp2
797bc3d5698SJohn Baldwin
798bc3d5698SJohn Baldwin	and	r4,r1,r7
799bc3d5698SJohn Baldwin	and	r2,r1,r9
800bc3d5698SJohn Baldwin	sub	r4,r4,r4,lsr#7
801bc3d5698SJohn Baldwin	and	r4,r4,r8
802bc3d5698SJohn Baldwin	eor	r2,r4,r2,lsl#1	@ tp4
803bc3d5698SJohn Baldwin
804bc3d5698SJohn Baldwin	and	r4,r2,r7
805bc3d5698SJohn Baldwin	and	r3,r2,r9
806bc3d5698SJohn Baldwin	sub	r4,r4,r4,lsr#7
807bc3d5698SJohn Baldwin	and	r4,r4,r8
808bc3d5698SJohn Baldwin	eor	r3,r4,r3,lsl#1	@ tp8
809bc3d5698SJohn Baldwin
810bc3d5698SJohn Baldwin	eor	r4,r1,r2
811bc3d5698SJohn Baldwin	eor	r5,r0,r3		@ tp9
812bc3d5698SJohn Baldwin	eor	r4,r4,r3		@ tpe
813bc3d5698SJohn Baldwin	eor	r4,r4,r1,ror#24
814bc3d5698SJohn Baldwin	eor	r4,r4,r5,ror#24	@ ^= ROTATE(tpb=tp9^tp2,8)
815bc3d5698SJohn Baldwin	eor	r4,r4,r2,ror#16
816bc3d5698SJohn Baldwin	eor	r4,r4,r5,ror#16	@ ^= ROTATE(tpd=tp9^tp4,16)
817bc3d5698SJohn Baldwin	eor	r4,r4,r5,ror#8	@ ^= ROTATE(tp9,24)
818bc3d5698SJohn Baldwin
819bc3d5698SJohn Baldwin	ldr	r0,[r11,#4]		@ prefetch tp1
820bc3d5698SJohn Baldwin	str	r4,[r11],#4
821bc3d5698SJohn Baldwin	subs	r12,r12,#1
822bc3d5698SJohn Baldwin	bne	.Lmix
823bc3d5698SJohn Baldwin
824bc3d5698SJohn Baldwin	mov	r0,#0
825bc3d5698SJohn Baldwin#if __ARM_ARCH__>=5
826bc3d5698SJohn Baldwin	ldmia	sp!,{r4,r5,r6,r7,r8,r9,r10,r11,r12,pc}
827bc3d5698SJohn Baldwin#else
828bc3d5698SJohn Baldwin	ldmia	sp!,{r4,r5,r6,r7,r8,r9,r10,r11,r12,lr}
829bc3d5698SJohn Baldwin	tst	lr,#1
830bc3d5698SJohn Baldwin	moveq	pc,lr			@ be binary compatible with V4, yet
831bc3d5698SJohn Baldwin.word	0xe12fff1e			@ interoperable with Thumb ISA:-)
832bc3d5698SJohn Baldwin#endif
833bc3d5698SJohn Baldwin.size	AES_set_enc2dec_key,.-AES_set_enc2dec_key
834bc3d5698SJohn Baldwin
835bc3d5698SJohn Baldwin.type	AES_Td,%object
836bc3d5698SJohn Baldwin.align	5
837bc3d5698SJohn BaldwinAES_Td:
838bc3d5698SJohn Baldwin.word	0x51f4a750, 0x7e416553, 0x1a17a4c3, 0x3a275e96
839bc3d5698SJohn Baldwin.word	0x3bab6bcb, 0x1f9d45f1, 0xacfa58ab, 0x4be30393
840bc3d5698SJohn Baldwin.word	0x2030fa55, 0xad766df6, 0x88cc7691, 0xf5024c25
841bc3d5698SJohn Baldwin.word	0x4fe5d7fc, 0xc52acbd7, 0x26354480, 0xb562a38f
842bc3d5698SJohn Baldwin.word	0xdeb15a49, 0x25ba1b67, 0x45ea0e98, 0x5dfec0e1
843bc3d5698SJohn Baldwin.word	0xc32f7502, 0x814cf012, 0x8d4697a3, 0x6bd3f9c6
844bc3d5698SJohn Baldwin.word	0x038f5fe7, 0x15929c95, 0xbf6d7aeb, 0x955259da
845bc3d5698SJohn Baldwin.word	0xd4be832d, 0x587421d3, 0x49e06929, 0x8ec9c844
846bc3d5698SJohn Baldwin.word	0x75c2896a, 0xf48e7978, 0x99583e6b, 0x27b971dd
847bc3d5698SJohn Baldwin.word	0xbee14fb6, 0xf088ad17, 0xc920ac66, 0x7dce3ab4
848bc3d5698SJohn Baldwin.word	0x63df4a18, 0xe51a3182, 0x97513360, 0x62537f45
849bc3d5698SJohn Baldwin.word	0xb16477e0, 0xbb6bae84, 0xfe81a01c, 0xf9082b94
850bc3d5698SJohn Baldwin.word	0x70486858, 0x8f45fd19, 0x94de6c87, 0x527bf8b7
851bc3d5698SJohn Baldwin.word	0xab73d323, 0x724b02e2, 0xe31f8f57, 0x6655ab2a
852bc3d5698SJohn Baldwin.word	0xb2eb2807, 0x2fb5c203, 0x86c57b9a, 0xd33708a5
853bc3d5698SJohn Baldwin.word	0x302887f2, 0x23bfa5b2, 0x02036aba, 0xed16825c
854bc3d5698SJohn Baldwin.word	0x8acf1c2b, 0xa779b492, 0xf307f2f0, 0x4e69e2a1
855bc3d5698SJohn Baldwin.word	0x65daf4cd, 0x0605bed5, 0xd134621f, 0xc4a6fe8a
856bc3d5698SJohn Baldwin.word	0x342e539d, 0xa2f355a0, 0x058ae132, 0xa4f6eb75
857bc3d5698SJohn Baldwin.word	0x0b83ec39, 0x4060efaa, 0x5e719f06, 0xbd6e1051
858bc3d5698SJohn Baldwin.word	0x3e218af9, 0x96dd063d, 0xdd3e05ae, 0x4de6bd46
859bc3d5698SJohn Baldwin.word	0x91548db5, 0x71c45d05, 0x0406d46f, 0x605015ff
860bc3d5698SJohn Baldwin.word	0x1998fb24, 0xd6bde997, 0x894043cc, 0x67d99e77
861bc3d5698SJohn Baldwin.word	0xb0e842bd, 0x07898b88, 0xe7195b38, 0x79c8eedb
862bc3d5698SJohn Baldwin.word	0xa17c0a47, 0x7c420fe9, 0xf8841ec9, 0x00000000
863bc3d5698SJohn Baldwin.word	0x09808683, 0x322bed48, 0x1e1170ac, 0x6c5a724e
864bc3d5698SJohn Baldwin.word	0xfd0efffb, 0x0f853856, 0x3daed51e, 0x362d3927
865bc3d5698SJohn Baldwin.word	0x0a0fd964, 0x685ca621, 0x9b5b54d1, 0x24362e3a
866bc3d5698SJohn Baldwin.word	0x0c0a67b1, 0x9357e70f, 0xb4ee96d2, 0x1b9b919e
867bc3d5698SJohn Baldwin.word	0x80c0c54f, 0x61dc20a2, 0x5a774b69, 0x1c121a16
868bc3d5698SJohn Baldwin.word	0xe293ba0a, 0xc0a02ae5, 0x3c22e043, 0x121b171d
869bc3d5698SJohn Baldwin.word	0x0e090d0b, 0xf28bc7ad, 0x2db6a8b9, 0x141ea9c8
870bc3d5698SJohn Baldwin.word	0x57f11985, 0xaf75074c, 0xee99ddbb, 0xa37f60fd
871bc3d5698SJohn Baldwin.word	0xf701269f, 0x5c72f5bc, 0x44663bc5, 0x5bfb7e34
872bc3d5698SJohn Baldwin.word	0x8b432976, 0xcb23c6dc, 0xb6edfc68, 0xb8e4f163
873bc3d5698SJohn Baldwin.word	0xd731dcca, 0x42638510, 0x13972240, 0x84c61120
874bc3d5698SJohn Baldwin.word	0x854a247d, 0xd2bb3df8, 0xaef93211, 0xc729a16d
875bc3d5698SJohn Baldwin.word	0x1d9e2f4b, 0xdcb230f3, 0x0d8652ec, 0x77c1e3d0
876bc3d5698SJohn Baldwin.word	0x2bb3166c, 0xa970b999, 0x119448fa, 0x47e96422
877bc3d5698SJohn Baldwin.word	0xa8fc8cc4, 0xa0f03f1a, 0x567d2cd8, 0x223390ef
878bc3d5698SJohn Baldwin.word	0x87494ec7, 0xd938d1c1, 0x8ccaa2fe, 0x98d40b36
879bc3d5698SJohn Baldwin.word	0xa6f581cf, 0xa57ade28, 0xdab78e26, 0x3fadbfa4
880bc3d5698SJohn Baldwin.word	0x2c3a9de4, 0x5078920d, 0x6a5fcc9b, 0x547e4662
881bc3d5698SJohn Baldwin.word	0xf68d13c2, 0x90d8b8e8, 0x2e39f75e, 0x82c3aff5
882bc3d5698SJohn Baldwin.word	0x9f5d80be, 0x69d0937c, 0x6fd52da9, 0xcf2512b3
883bc3d5698SJohn Baldwin.word	0xc8ac993b, 0x10187da7, 0xe89c636e, 0xdb3bbb7b
884bc3d5698SJohn Baldwin.word	0xcd267809, 0x6e5918f4, 0xec9ab701, 0x834f9aa8
885bc3d5698SJohn Baldwin.word	0xe6956e65, 0xaaffe67e, 0x21bccf08, 0xef15e8e6
886bc3d5698SJohn Baldwin.word	0xbae79bd9, 0x4a6f36ce, 0xea9f09d4, 0x29b07cd6
887bc3d5698SJohn Baldwin.word	0x31a4b2af, 0x2a3f2331, 0xc6a59430, 0x35a266c0
888bc3d5698SJohn Baldwin.word	0x744ebc37, 0xfc82caa6, 0xe090d0b0, 0x33a7d815
889bc3d5698SJohn Baldwin.word	0xf104984a, 0x41ecdaf7, 0x7fcd500e, 0x1791f62f
890bc3d5698SJohn Baldwin.word	0x764dd68d, 0x43efb04d, 0xccaa4d54, 0xe49604df
891bc3d5698SJohn Baldwin.word	0x9ed1b5e3, 0x4c6a881b, 0xc12c1fb8, 0x4665517f
892bc3d5698SJohn Baldwin.word	0x9d5eea04, 0x018c355d, 0xfa877473, 0xfb0b412e
893bc3d5698SJohn Baldwin.word	0xb3671d5a, 0x92dbd252, 0xe9105633, 0x6dd64713
894bc3d5698SJohn Baldwin.word	0x9ad7618c, 0x37a10c7a, 0x59f8148e, 0xeb133c89
895bc3d5698SJohn Baldwin.word	0xcea927ee, 0xb761c935, 0xe11ce5ed, 0x7a47b13c
896bc3d5698SJohn Baldwin.word	0x9cd2df59, 0x55f2733f, 0x1814ce79, 0x73c737bf
897bc3d5698SJohn Baldwin.word	0x53f7cdea, 0x5ffdaa5b, 0xdf3d6f14, 0x7844db86
898bc3d5698SJohn Baldwin.word	0xcaaff381, 0xb968c43e, 0x3824342c, 0xc2a3405f
899bc3d5698SJohn Baldwin.word	0x161dc372, 0xbce2250c, 0x283c498b, 0xff0d9541
900bc3d5698SJohn Baldwin.word	0x39a80171, 0x080cb3de, 0xd8b4e49c, 0x6456c190
901bc3d5698SJohn Baldwin.word	0x7bcb8461, 0xd532b670, 0x486c5c74, 0xd0b85742
902bc3d5698SJohn Baldwin@ Td4[256]
903bc3d5698SJohn Baldwin.byte	0x52, 0x09, 0x6a, 0xd5, 0x30, 0x36, 0xa5, 0x38
904bc3d5698SJohn Baldwin.byte	0xbf, 0x40, 0xa3, 0x9e, 0x81, 0xf3, 0xd7, 0xfb
905bc3d5698SJohn Baldwin.byte	0x7c, 0xe3, 0x39, 0x82, 0x9b, 0x2f, 0xff, 0x87
906bc3d5698SJohn Baldwin.byte	0x34, 0x8e, 0x43, 0x44, 0xc4, 0xde, 0xe9, 0xcb
907bc3d5698SJohn Baldwin.byte	0x54, 0x7b, 0x94, 0x32, 0xa6, 0xc2, 0x23, 0x3d
908bc3d5698SJohn Baldwin.byte	0xee, 0x4c, 0x95, 0x0b, 0x42, 0xfa, 0xc3, 0x4e
909bc3d5698SJohn Baldwin.byte	0x08, 0x2e, 0xa1, 0x66, 0x28, 0xd9, 0x24, 0xb2
910bc3d5698SJohn Baldwin.byte	0x76, 0x5b, 0xa2, 0x49, 0x6d, 0x8b, 0xd1, 0x25
911bc3d5698SJohn Baldwin.byte	0x72, 0xf8, 0xf6, 0x64, 0x86, 0x68, 0x98, 0x16
912bc3d5698SJohn Baldwin.byte	0xd4, 0xa4, 0x5c, 0xcc, 0x5d, 0x65, 0xb6, 0x92
913bc3d5698SJohn Baldwin.byte	0x6c, 0x70, 0x48, 0x50, 0xfd, 0xed, 0xb9, 0xda
914bc3d5698SJohn Baldwin.byte	0x5e, 0x15, 0x46, 0x57, 0xa7, 0x8d, 0x9d, 0x84
915bc3d5698SJohn Baldwin.byte	0x90, 0xd8, 0xab, 0x00, 0x8c, 0xbc, 0xd3, 0x0a
916bc3d5698SJohn Baldwin.byte	0xf7, 0xe4, 0x58, 0x05, 0xb8, 0xb3, 0x45, 0x06
917bc3d5698SJohn Baldwin.byte	0xd0, 0x2c, 0x1e, 0x8f, 0xca, 0x3f, 0x0f, 0x02
918bc3d5698SJohn Baldwin.byte	0xc1, 0xaf, 0xbd, 0x03, 0x01, 0x13, 0x8a, 0x6b
919bc3d5698SJohn Baldwin.byte	0x3a, 0x91, 0x11, 0x41, 0x4f, 0x67, 0xdc, 0xea
920bc3d5698SJohn Baldwin.byte	0x97, 0xf2, 0xcf, 0xce, 0xf0, 0xb4, 0xe6, 0x73
921bc3d5698SJohn Baldwin.byte	0x96, 0xac, 0x74, 0x22, 0xe7, 0xad, 0x35, 0x85
922bc3d5698SJohn Baldwin.byte	0xe2, 0xf9, 0x37, 0xe8, 0x1c, 0x75, 0xdf, 0x6e
923bc3d5698SJohn Baldwin.byte	0x47, 0xf1, 0x1a, 0x71, 0x1d, 0x29, 0xc5, 0x89
924bc3d5698SJohn Baldwin.byte	0x6f, 0xb7, 0x62, 0x0e, 0xaa, 0x18, 0xbe, 0x1b
925bc3d5698SJohn Baldwin.byte	0xfc, 0x56, 0x3e, 0x4b, 0xc6, 0xd2, 0x79, 0x20
926bc3d5698SJohn Baldwin.byte	0x9a, 0xdb, 0xc0, 0xfe, 0x78, 0xcd, 0x5a, 0xf4
927bc3d5698SJohn Baldwin.byte	0x1f, 0xdd, 0xa8, 0x33, 0x88, 0x07, 0xc7, 0x31
928bc3d5698SJohn Baldwin.byte	0xb1, 0x12, 0x10, 0x59, 0x27, 0x80, 0xec, 0x5f
929bc3d5698SJohn Baldwin.byte	0x60, 0x51, 0x7f, 0xa9, 0x19, 0xb5, 0x4a, 0x0d
930bc3d5698SJohn Baldwin.byte	0x2d, 0xe5, 0x7a, 0x9f, 0x93, 0xc9, 0x9c, 0xef
931bc3d5698SJohn Baldwin.byte	0xa0, 0xe0, 0x3b, 0x4d, 0xae, 0x2a, 0xf5, 0xb0
932bc3d5698SJohn Baldwin.byte	0xc8, 0xeb, 0xbb, 0x3c, 0x83, 0x53, 0x99, 0x61
933bc3d5698SJohn Baldwin.byte	0x17, 0x2b, 0x04, 0x7e, 0xba, 0x77, 0xd6, 0x26
934bc3d5698SJohn Baldwin.byte	0xe1, 0x69, 0x14, 0x63, 0x55, 0x21, 0x0c, 0x7d
935bc3d5698SJohn Baldwin.size	AES_Td,.-AES_Td
936bc3d5698SJohn Baldwin
937bc3d5698SJohn Baldwin@ void AES_decrypt(const unsigned char *in, unsigned char *out,
938bc3d5698SJohn Baldwin@ 		 const AES_KEY *key) {
939bc3d5698SJohn Baldwin.globl	AES_decrypt
940bc3d5698SJohn Baldwin.type	AES_decrypt,%function
941bc3d5698SJohn Baldwin.align	5
942bc3d5698SJohn BaldwinAES_decrypt:
943bc3d5698SJohn Baldwin#ifndef	__thumb2__
944bc3d5698SJohn Baldwin	sub	r3,pc,#8		@ AES_decrypt
945bc3d5698SJohn Baldwin#else
946bc3d5698SJohn Baldwin	adr	r3,.
947bc3d5698SJohn Baldwin#endif
948bc3d5698SJohn Baldwin	stmdb	sp!,{r1,r4-r12,lr}
949bc3d5698SJohn Baldwin#if defined(__thumb2__) || defined(__APPLE__)
950bc3d5698SJohn Baldwin	adr	r10,AES_Td
951bc3d5698SJohn Baldwin#else
952bc3d5698SJohn Baldwin	sub	r10,r3,#AES_decrypt-AES_Td	@ Td
953bc3d5698SJohn Baldwin#endif
954bc3d5698SJohn Baldwin	mov	r12,r0		@ inp
955bc3d5698SJohn Baldwin	mov	r11,r2
956bc3d5698SJohn Baldwin#if __ARM_ARCH__<7
957bc3d5698SJohn Baldwin	ldrb	r0,[r12,#3]	@ load input data in endian-neutral
958bc3d5698SJohn Baldwin	ldrb	r4,[r12,#2]	@ manner...
959bc3d5698SJohn Baldwin	ldrb	r5,[r12,#1]
960bc3d5698SJohn Baldwin	ldrb	r6,[r12,#0]
961bc3d5698SJohn Baldwin	orr	r0,r0,r4,lsl#8
962bc3d5698SJohn Baldwin	ldrb	r1,[r12,#7]
963bc3d5698SJohn Baldwin	orr	r0,r0,r5,lsl#16
964bc3d5698SJohn Baldwin	ldrb	r4,[r12,#6]
965bc3d5698SJohn Baldwin	orr	r0,r0,r6,lsl#24
966bc3d5698SJohn Baldwin	ldrb	r5,[r12,#5]
967bc3d5698SJohn Baldwin	ldrb	r6,[r12,#4]
968bc3d5698SJohn Baldwin	orr	r1,r1,r4,lsl#8
969bc3d5698SJohn Baldwin	ldrb	r2,[r12,#11]
970bc3d5698SJohn Baldwin	orr	r1,r1,r5,lsl#16
971bc3d5698SJohn Baldwin	ldrb	r4,[r12,#10]
972bc3d5698SJohn Baldwin	orr	r1,r1,r6,lsl#24
973bc3d5698SJohn Baldwin	ldrb	r5,[r12,#9]
974bc3d5698SJohn Baldwin	ldrb	r6,[r12,#8]
975bc3d5698SJohn Baldwin	orr	r2,r2,r4,lsl#8
976bc3d5698SJohn Baldwin	ldrb	r3,[r12,#15]
977bc3d5698SJohn Baldwin	orr	r2,r2,r5,lsl#16
978bc3d5698SJohn Baldwin	ldrb	r4,[r12,#14]
979bc3d5698SJohn Baldwin	orr	r2,r2,r6,lsl#24
980bc3d5698SJohn Baldwin	ldrb	r5,[r12,#13]
981bc3d5698SJohn Baldwin	ldrb	r6,[r12,#12]
982bc3d5698SJohn Baldwin	orr	r3,r3,r4,lsl#8
983bc3d5698SJohn Baldwin	orr	r3,r3,r5,lsl#16
984bc3d5698SJohn Baldwin	orr	r3,r3,r6,lsl#24
985bc3d5698SJohn Baldwin#else
986bc3d5698SJohn Baldwin	ldr	r0,[r12,#0]
987bc3d5698SJohn Baldwin	ldr	r1,[r12,#4]
988bc3d5698SJohn Baldwin	ldr	r2,[r12,#8]
989bc3d5698SJohn Baldwin	ldr	r3,[r12,#12]
990bc3d5698SJohn Baldwin#ifdef __ARMEL__
991bc3d5698SJohn Baldwin	rev	r0,r0
992bc3d5698SJohn Baldwin	rev	r1,r1
993bc3d5698SJohn Baldwin	rev	r2,r2
994bc3d5698SJohn Baldwin	rev	r3,r3
995bc3d5698SJohn Baldwin#endif
996bc3d5698SJohn Baldwin#endif
997bc3d5698SJohn Baldwin	bl	_armv4_AES_decrypt
998bc3d5698SJohn Baldwin
999bc3d5698SJohn Baldwin	ldr	r12,[sp],#4		@ pop out
1000bc3d5698SJohn Baldwin#if __ARM_ARCH__>=7
1001bc3d5698SJohn Baldwin#ifdef __ARMEL__
1002bc3d5698SJohn Baldwin	rev	r0,r0
1003bc3d5698SJohn Baldwin	rev	r1,r1
1004bc3d5698SJohn Baldwin	rev	r2,r2
1005bc3d5698SJohn Baldwin	rev	r3,r3
1006bc3d5698SJohn Baldwin#endif
1007bc3d5698SJohn Baldwin	str	r0,[r12,#0]
1008bc3d5698SJohn Baldwin	str	r1,[r12,#4]
1009bc3d5698SJohn Baldwin	str	r2,[r12,#8]
1010bc3d5698SJohn Baldwin	str	r3,[r12,#12]
1011bc3d5698SJohn Baldwin#else
1012bc3d5698SJohn Baldwin	mov	r4,r0,lsr#24		@ write output in endian-neutral
1013bc3d5698SJohn Baldwin	mov	r5,r0,lsr#16		@ manner...
1014bc3d5698SJohn Baldwin	mov	r6,r0,lsr#8
1015bc3d5698SJohn Baldwin	strb	r4,[r12,#0]
1016bc3d5698SJohn Baldwin	strb	r5,[r12,#1]
1017bc3d5698SJohn Baldwin	mov	r4,r1,lsr#24
1018bc3d5698SJohn Baldwin	strb	r6,[r12,#2]
1019bc3d5698SJohn Baldwin	mov	r5,r1,lsr#16
1020bc3d5698SJohn Baldwin	strb	r0,[r12,#3]
1021bc3d5698SJohn Baldwin	mov	r6,r1,lsr#8
1022bc3d5698SJohn Baldwin	strb	r4,[r12,#4]
1023bc3d5698SJohn Baldwin	strb	r5,[r12,#5]
1024bc3d5698SJohn Baldwin	mov	r4,r2,lsr#24
1025bc3d5698SJohn Baldwin	strb	r6,[r12,#6]
1026bc3d5698SJohn Baldwin	mov	r5,r2,lsr#16
1027bc3d5698SJohn Baldwin	strb	r1,[r12,#7]
1028bc3d5698SJohn Baldwin	mov	r6,r2,lsr#8
1029bc3d5698SJohn Baldwin	strb	r4,[r12,#8]
1030bc3d5698SJohn Baldwin	strb	r5,[r12,#9]
1031bc3d5698SJohn Baldwin	mov	r4,r3,lsr#24
1032bc3d5698SJohn Baldwin	strb	r6,[r12,#10]
1033bc3d5698SJohn Baldwin	mov	r5,r3,lsr#16
1034bc3d5698SJohn Baldwin	strb	r2,[r12,#11]
1035bc3d5698SJohn Baldwin	mov	r6,r3,lsr#8
1036bc3d5698SJohn Baldwin	strb	r4,[r12,#12]
1037bc3d5698SJohn Baldwin	strb	r5,[r12,#13]
1038bc3d5698SJohn Baldwin	strb	r6,[r12,#14]
1039bc3d5698SJohn Baldwin	strb	r3,[r12,#15]
1040bc3d5698SJohn Baldwin#endif
1041bc3d5698SJohn Baldwin#if __ARM_ARCH__>=5
1042bc3d5698SJohn Baldwin	ldmia	sp!,{r4,r5,r6,r7,r8,r9,r10,r11,r12,pc}
1043bc3d5698SJohn Baldwin#else
1044bc3d5698SJohn Baldwin	ldmia	sp!,{r4,r5,r6,r7,r8,r9,r10,r11,r12,lr}
1045bc3d5698SJohn Baldwin	tst	lr,#1
1046bc3d5698SJohn Baldwin	moveq	pc,lr			@ be binary compatible with V4, yet
1047bc3d5698SJohn Baldwin.word	0xe12fff1e			@ interoperable with Thumb ISA:-)
1048bc3d5698SJohn Baldwin#endif
1049bc3d5698SJohn Baldwin.size	AES_decrypt,.-AES_decrypt
1050bc3d5698SJohn Baldwin
1051bc3d5698SJohn Baldwin.type	_armv4_AES_decrypt,%function
1052bc3d5698SJohn Baldwin.align	2
1053bc3d5698SJohn Baldwin_armv4_AES_decrypt:
1054bc3d5698SJohn Baldwin	str	lr,[sp,#-4]!		@ push lr
1055bc3d5698SJohn Baldwin	ldmia	r11!,{r4,r5,r6,r7}
1056bc3d5698SJohn Baldwin	eor	r0,r0,r4
1057bc3d5698SJohn Baldwin	ldr	r12,[r11,#240-16]
1058bc3d5698SJohn Baldwin	eor	r1,r1,r5
1059bc3d5698SJohn Baldwin	eor	r2,r2,r6
1060bc3d5698SJohn Baldwin	eor	r3,r3,r7
1061bc3d5698SJohn Baldwin	sub	r12,r12,#1
1062bc3d5698SJohn Baldwin	mov	lr,#255
1063bc3d5698SJohn Baldwin
1064bc3d5698SJohn Baldwin	and	r7,lr,r0,lsr#16
1065bc3d5698SJohn Baldwin	and	r8,lr,r0,lsr#8
1066bc3d5698SJohn Baldwin	and	r9,lr,r0
1067bc3d5698SJohn Baldwin	mov	r0,r0,lsr#24
1068bc3d5698SJohn Baldwin.Ldec_loop:
1069bc3d5698SJohn Baldwin	ldr	r4,[r10,r7,lsl#2]	@ Td1[s0>>16]
1070bc3d5698SJohn Baldwin	and	r7,lr,r1		@ i0
1071bc3d5698SJohn Baldwin	ldr	r5,[r10,r8,lsl#2]	@ Td2[s0>>8]
1072bc3d5698SJohn Baldwin	and	r8,lr,r1,lsr#16
1073bc3d5698SJohn Baldwin	ldr	r6,[r10,r9,lsl#2]	@ Td3[s0>>0]
1074bc3d5698SJohn Baldwin	and	r9,lr,r1,lsr#8
1075bc3d5698SJohn Baldwin	ldr	r0,[r10,r0,lsl#2]	@ Td0[s0>>24]
1076bc3d5698SJohn Baldwin	mov	r1,r1,lsr#24
1077bc3d5698SJohn Baldwin
1078bc3d5698SJohn Baldwin	ldr	r7,[r10,r7,lsl#2]	@ Td3[s1>>0]
1079bc3d5698SJohn Baldwin	ldr	r8,[r10,r8,lsl#2]	@ Td1[s1>>16]
1080bc3d5698SJohn Baldwin	ldr	r9,[r10,r9,lsl#2]	@ Td2[s1>>8]
1081bc3d5698SJohn Baldwin	eor	r0,r0,r7,ror#24
1082bc3d5698SJohn Baldwin	ldr	r1,[r10,r1,lsl#2]	@ Td0[s1>>24]
1083bc3d5698SJohn Baldwin	and	r7,lr,r2,lsr#8	@ i0
1084bc3d5698SJohn Baldwin	eor	r5,r8,r5,ror#8
1085bc3d5698SJohn Baldwin	and	r8,lr,r2		@ i1
1086bc3d5698SJohn Baldwin	eor	r6,r9,r6,ror#8
1087bc3d5698SJohn Baldwin	and	r9,lr,r2,lsr#16
1088bc3d5698SJohn Baldwin	ldr	r7,[r10,r7,lsl#2]	@ Td2[s2>>8]
1089bc3d5698SJohn Baldwin	eor	r1,r1,r4,ror#8
1090bc3d5698SJohn Baldwin	ldr	r8,[r10,r8,lsl#2]	@ Td3[s2>>0]
1091bc3d5698SJohn Baldwin	mov	r2,r2,lsr#24
1092bc3d5698SJohn Baldwin
1093bc3d5698SJohn Baldwin	ldr	r9,[r10,r9,lsl#2]	@ Td1[s2>>16]
1094bc3d5698SJohn Baldwin	eor	r0,r0,r7,ror#16
1095bc3d5698SJohn Baldwin	ldr	r2,[r10,r2,lsl#2]	@ Td0[s2>>24]
1096bc3d5698SJohn Baldwin	and	r7,lr,r3,lsr#16	@ i0
1097bc3d5698SJohn Baldwin	eor	r1,r1,r8,ror#24
1098bc3d5698SJohn Baldwin	and	r8,lr,r3,lsr#8	@ i1
1099bc3d5698SJohn Baldwin	eor	r6,r9,r6,ror#8
1100bc3d5698SJohn Baldwin	and	r9,lr,r3		@ i2
1101bc3d5698SJohn Baldwin	ldr	r7,[r10,r7,lsl#2]	@ Td1[s3>>16]
1102bc3d5698SJohn Baldwin	eor	r2,r2,r5,ror#8
1103bc3d5698SJohn Baldwin	ldr	r8,[r10,r8,lsl#2]	@ Td2[s3>>8]
1104bc3d5698SJohn Baldwin	mov	r3,r3,lsr#24
1105bc3d5698SJohn Baldwin
1106bc3d5698SJohn Baldwin	ldr	r9,[r10,r9,lsl#2]	@ Td3[s3>>0]
1107bc3d5698SJohn Baldwin	eor	r0,r0,r7,ror#8
1108bc3d5698SJohn Baldwin	ldr	r7,[r11],#16
1109bc3d5698SJohn Baldwin	eor	r1,r1,r8,ror#16
1110bc3d5698SJohn Baldwin	ldr	r3,[r10,r3,lsl#2]	@ Td0[s3>>24]
1111bc3d5698SJohn Baldwin	eor	r2,r2,r9,ror#24
1112bc3d5698SJohn Baldwin
1113bc3d5698SJohn Baldwin	ldr	r4,[r11,#-12]
1114bc3d5698SJohn Baldwin	eor	r0,r0,r7
1115bc3d5698SJohn Baldwin	ldr	r5,[r11,#-8]
1116bc3d5698SJohn Baldwin	eor	r3,r3,r6,ror#8
1117bc3d5698SJohn Baldwin	ldr	r6,[r11,#-4]
1118bc3d5698SJohn Baldwin	and	r7,lr,r0,lsr#16
1119bc3d5698SJohn Baldwin	eor	r1,r1,r4
1120bc3d5698SJohn Baldwin	and	r8,lr,r0,lsr#8
1121bc3d5698SJohn Baldwin	eor	r2,r2,r5
1122bc3d5698SJohn Baldwin	and	r9,lr,r0
1123bc3d5698SJohn Baldwin	eor	r3,r3,r6
1124bc3d5698SJohn Baldwin	mov	r0,r0,lsr#24
1125bc3d5698SJohn Baldwin
1126bc3d5698SJohn Baldwin	subs	r12,r12,#1
1127bc3d5698SJohn Baldwin	bne	.Ldec_loop
1128bc3d5698SJohn Baldwin
1129bc3d5698SJohn Baldwin	add	r10,r10,#1024
1130bc3d5698SJohn Baldwin
1131bc3d5698SJohn Baldwin	ldr	r5,[r10,#0]		@ prefetch Td4
1132bc3d5698SJohn Baldwin	ldr	r6,[r10,#32]
1133bc3d5698SJohn Baldwin	ldr	r4,[r10,#64]
1134bc3d5698SJohn Baldwin	ldr	r5,[r10,#96]
1135bc3d5698SJohn Baldwin	ldr	r6,[r10,#128]
1136bc3d5698SJohn Baldwin	ldr	r4,[r10,#160]
1137bc3d5698SJohn Baldwin	ldr	r5,[r10,#192]
1138bc3d5698SJohn Baldwin	ldr	r6,[r10,#224]
1139bc3d5698SJohn Baldwin
1140bc3d5698SJohn Baldwin	ldrb	r0,[r10,r0]		@ Td4[s0>>24]
1141bc3d5698SJohn Baldwin	ldrb	r4,[r10,r7]		@ Td4[s0>>16]
1142bc3d5698SJohn Baldwin	and	r7,lr,r1		@ i0
1143bc3d5698SJohn Baldwin	ldrb	r5,[r10,r8]		@ Td4[s0>>8]
1144bc3d5698SJohn Baldwin	and	r8,lr,r1,lsr#16
1145bc3d5698SJohn Baldwin	ldrb	r6,[r10,r9]		@ Td4[s0>>0]
1146bc3d5698SJohn Baldwin	and	r9,lr,r1,lsr#8
1147bc3d5698SJohn Baldwin
1148bc3d5698SJohn Baldwin	add	r1,r10,r1,lsr#24
1149bc3d5698SJohn Baldwin	ldrb	r7,[r10,r7]		@ Td4[s1>>0]
1150bc3d5698SJohn Baldwin	ldrb	r1,[r1]		@ Td4[s1>>24]
1151bc3d5698SJohn Baldwin	ldrb	r8,[r10,r8]		@ Td4[s1>>16]
1152bc3d5698SJohn Baldwin	eor	r0,r7,r0,lsl#24
1153bc3d5698SJohn Baldwin	ldrb	r9,[r10,r9]		@ Td4[s1>>8]
1154bc3d5698SJohn Baldwin	eor	r1,r4,r1,lsl#8
1155bc3d5698SJohn Baldwin	and	r7,lr,r2,lsr#8	@ i0
1156bc3d5698SJohn Baldwin	eor	r5,r5,r8,lsl#8
1157bc3d5698SJohn Baldwin	and	r8,lr,r2		@ i1
1158bc3d5698SJohn Baldwin	ldrb	r7,[r10,r7]		@ Td4[s2>>8]
1159bc3d5698SJohn Baldwin	eor	r6,r6,r9,lsl#8
1160bc3d5698SJohn Baldwin	ldrb	r8,[r10,r8]		@ Td4[s2>>0]
1161bc3d5698SJohn Baldwin	and	r9,lr,r2,lsr#16
1162bc3d5698SJohn Baldwin
1163bc3d5698SJohn Baldwin	add	r2,r10,r2,lsr#24
1164bc3d5698SJohn Baldwin	ldrb	r2,[r2]		@ Td4[s2>>24]
1165bc3d5698SJohn Baldwin	eor	r0,r0,r7,lsl#8
1166bc3d5698SJohn Baldwin	ldrb	r9,[r10,r9]		@ Td4[s2>>16]
1167bc3d5698SJohn Baldwin	eor	r1,r8,r1,lsl#16
1168bc3d5698SJohn Baldwin	and	r7,lr,r3,lsr#16	@ i0
1169bc3d5698SJohn Baldwin	eor	r2,r5,r2,lsl#16
1170bc3d5698SJohn Baldwin	and	r8,lr,r3,lsr#8	@ i1
1171bc3d5698SJohn Baldwin	ldrb	r7,[r10,r7]		@ Td4[s3>>16]
1172bc3d5698SJohn Baldwin	eor	r6,r6,r9,lsl#16
1173bc3d5698SJohn Baldwin	ldrb	r8,[r10,r8]		@ Td4[s3>>8]
1174bc3d5698SJohn Baldwin	and	r9,lr,r3		@ i2
1175bc3d5698SJohn Baldwin
1176bc3d5698SJohn Baldwin	add	r3,r10,r3,lsr#24
1177bc3d5698SJohn Baldwin	ldrb	r9,[r10,r9]		@ Td4[s3>>0]
1178bc3d5698SJohn Baldwin	ldrb	r3,[r3]		@ Td4[s3>>24]
1179bc3d5698SJohn Baldwin	eor	r0,r0,r7,lsl#16
1180bc3d5698SJohn Baldwin	ldr	r7,[r11,#0]
1181bc3d5698SJohn Baldwin	eor	r1,r1,r8,lsl#8
1182bc3d5698SJohn Baldwin	ldr	r4,[r11,#4]
1183bc3d5698SJohn Baldwin	eor	r2,r9,r2,lsl#8
1184bc3d5698SJohn Baldwin	ldr	r5,[r11,#8]
1185bc3d5698SJohn Baldwin	eor	r3,r6,r3,lsl#24
1186bc3d5698SJohn Baldwin	ldr	r6,[r11,#12]
1187bc3d5698SJohn Baldwin
1188bc3d5698SJohn Baldwin	eor	r0,r0,r7
1189bc3d5698SJohn Baldwin	eor	r1,r1,r4
1190bc3d5698SJohn Baldwin	eor	r2,r2,r5
1191bc3d5698SJohn Baldwin	eor	r3,r3,r6
1192bc3d5698SJohn Baldwin
1193bc3d5698SJohn Baldwin	sub	r10,r10,#1024
1194bc3d5698SJohn Baldwin	ldr	pc,[sp],#4		@ pop and return
1195bc3d5698SJohn Baldwin.size	_armv4_AES_decrypt,.-_armv4_AES_decrypt
1196bc3d5698SJohn Baldwin.byte	65,69,83,32,102,111,114,32,65,82,77,118,52,44,32,67,82,89,80,84,79,71,65,77,83,32,98,121,32,60,97,112,112,114,111,64,111,112,101,110,115,115,108,46,111,114,103,62,0
1197bc3d5698SJohn Baldwin.align	2
1198bc3d5698SJohn Baldwin.align	2
1199