13f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root
23f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root@ ====================================================================
33f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root@ Written by Andy Polyakov <appro@openssl.org> for the OpenSSL
43f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root@ project. The module is, however, dual licensed under OpenSSL and
53f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root@ CRYPTOGAMS licenses depending on where you obtain it. For further
63f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root@ details see http://www.openssl.org/~appro/cryptogams/.
73f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root@ ====================================================================
83f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root
93f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root@ AES for ARMv4
103f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root
113f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root@ January 2007.
123f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root@
133f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root@ Code uses single 1K S-box and is >2 times faster than code generated
143f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root@ by gcc-3.4.1. This is thanks to unique feature of ARMv4 ISA, which
153f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root@ allows to merge logical or arithmetic operation with shift or rotate
163f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root@ in one instruction and emit combined result every cycle. The module
173f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root@ is endian-neutral. The performance is ~42 cycles/byte for 128-bit
183f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root@ key [on single-issue Xscale PXA250 core].
193f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root
203f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root@ May 2007.
213f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root@
223f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root@ AES_set_[en|de]crypt_key is added.
233f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root
243f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root@ July 2010.
253f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root@
263f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root@ Rescheduling for dual-issue pipeline resulted in 12% improvement on
273f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root@ Cortex A8 core and ~25 cycles per byte processed with 128-bit key.
283f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root
293f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root@ February 2011.
303f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root@
313f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root@ Profiler-assisted and platform-specific optimization resulted in 16%
323f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root@ improvement on Cortex A8 core and ~21.5 cycles per byte.
333f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root
343f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root#ifndef __KERNEL__
353f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root# include "arm_arch.h"
363f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root#else
373f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root# define __ARM_ARCH__ __LINUX_ARM_ARCH__
383f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root#endif
393f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root
40656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.text
413f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root#if __ARM_ARCH__<7
423f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root.code	32
433f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root#else
443f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root.syntax	unified
453f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root# ifdef __thumb2__
463f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root.thumb
473f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root# else
48656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.code	32
493f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root# endif
503f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root#endif
51656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
52656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.type	AES_Te,%object
53656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.align	5
54656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source ProjectAES_Te:
55656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word	0xc66363a5, 0xf87c7c84, 0xee777799, 0xf67b7b8d
56656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word	0xfff2f20d, 0xd66b6bbd, 0xde6f6fb1, 0x91c5c554
57656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word	0x60303050, 0x02010103, 0xce6767a9, 0x562b2b7d
58656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word	0xe7fefe19, 0xb5d7d762, 0x4dababe6, 0xec76769a
59656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word	0x8fcaca45, 0x1f82829d, 0x89c9c940, 0xfa7d7d87
60656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word	0xeffafa15, 0xb25959eb, 0x8e4747c9, 0xfbf0f00b
61656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word	0x41adadec, 0xb3d4d467, 0x5fa2a2fd, 0x45afafea
62656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word	0x239c9cbf, 0x53a4a4f7, 0xe4727296, 0x9bc0c05b
63656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word	0x75b7b7c2, 0xe1fdfd1c, 0x3d9393ae, 0x4c26266a
64656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word	0x6c36365a, 0x7e3f3f41, 0xf5f7f702, 0x83cccc4f
65656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word	0x6834345c, 0x51a5a5f4, 0xd1e5e534, 0xf9f1f108
66656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word	0xe2717193, 0xabd8d873, 0x62313153, 0x2a15153f
67656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word	0x0804040c, 0x95c7c752, 0x46232365, 0x9dc3c35e
68656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word	0x30181828, 0x379696a1, 0x0a05050f, 0x2f9a9ab5
69656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word	0x0e070709, 0x24121236, 0x1b80809b, 0xdfe2e23d
70656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word	0xcdebeb26, 0x4e272769, 0x7fb2b2cd, 0xea75759f
71656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word	0x1209091b, 0x1d83839e, 0x582c2c74, 0x341a1a2e
72656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word	0x361b1b2d, 0xdc6e6eb2, 0xb45a5aee, 0x5ba0a0fb
73656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word	0xa45252f6, 0x763b3b4d, 0xb7d6d661, 0x7db3b3ce
74656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word	0x5229297b, 0xdde3e33e, 0x5e2f2f71, 0x13848497
75656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word	0xa65353f5, 0xb9d1d168, 0x00000000, 0xc1eded2c
76656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word	0x40202060, 0xe3fcfc1f, 0x79b1b1c8, 0xb65b5bed
77656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word	0xd46a6abe, 0x8dcbcb46, 0x67bebed9, 0x7239394b
78656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word	0x944a4ade, 0x984c4cd4, 0xb05858e8, 0x85cfcf4a
79656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word	0xbbd0d06b, 0xc5efef2a, 0x4faaaae5, 0xedfbfb16
80656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word	0x864343c5, 0x9a4d4dd7, 0x66333355, 0x11858594
81656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word	0x8a4545cf, 0xe9f9f910, 0x04020206, 0xfe7f7f81
82656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word	0xa05050f0, 0x783c3c44, 0x259f9fba, 0x4ba8a8e3
83656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word	0xa25151f3, 0x5da3a3fe, 0x804040c0, 0x058f8f8a
84656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word	0x3f9292ad, 0x219d9dbc, 0x70383848, 0xf1f5f504
85656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word	0x63bcbcdf, 0x77b6b6c1, 0xafdada75, 0x42212163
86656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word	0x20101030, 0xe5ffff1a, 0xfdf3f30e, 0xbfd2d26d
87656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word	0x81cdcd4c, 0x180c0c14, 0x26131335, 0xc3ecec2f
88656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word	0xbe5f5fe1, 0x359797a2, 0x884444cc, 0x2e171739
89656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word	0x93c4c457, 0x55a7a7f2, 0xfc7e7e82, 0x7a3d3d47
90656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word	0xc86464ac, 0xba5d5de7, 0x3219192b, 0xe6737395
91656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word	0xc06060a0, 0x19818198, 0x9e4f4fd1, 0xa3dcdc7f
92656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word	0x44222266, 0x542a2a7e, 0x3b9090ab, 0x0b888883
93656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word	0x8c4646ca, 0xc7eeee29, 0x6bb8b8d3, 0x2814143c
94656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word	0xa7dede79, 0xbc5e5ee2, 0x160b0b1d, 0xaddbdb76
95656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word	0xdbe0e03b, 0x64323256, 0x743a3a4e, 0x140a0a1e
96656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word	0x924949db, 0x0c06060a, 0x4824246c, 0xb85c5ce4
97656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word	0x9fc2c25d, 0xbdd3d36e, 0x43acacef, 0xc46262a6
98656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word	0x399191a8, 0x319595a4, 0xd3e4e437, 0xf279798b
99656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word	0xd5e7e732, 0x8bc8c843, 0x6e373759, 0xda6d6db7
100656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word	0x018d8d8c, 0xb1d5d564, 0x9c4e4ed2, 0x49a9a9e0
101656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word	0xd86c6cb4, 0xac5656fa, 0xf3f4f407, 0xcfeaea25
102656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word	0xca6565af, 0xf47a7a8e, 0x47aeaee9, 0x10080818
103656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word	0x6fbabad5, 0xf0787888, 0x4a25256f, 0x5c2e2e72
104656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word	0x381c1c24, 0x57a6a6f1, 0x73b4b4c7, 0x97c6c651
105656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word	0xcbe8e823, 0xa1dddd7c, 0xe874749c, 0x3e1f1f21
106656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word	0x964b4bdd, 0x61bdbddc, 0x0d8b8b86, 0x0f8a8a85
107656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word	0xe0707090, 0x7c3e3e42, 0x71b5b5c4, 0xcc6666aa
108656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word	0x904848d8, 0x06030305, 0xf7f6f601, 0x1c0e0e12
109656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word	0xc26161a3, 0x6a35355f, 0xae5757f9, 0x69b9b9d0
110656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word	0x17868691, 0x99c1c158, 0x3a1d1d27, 0x279e9eb9
111656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word	0xd9e1e138, 0xebf8f813, 0x2b9898b3, 0x22111133
112656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word	0xd26969bb, 0xa9d9d970, 0x078e8e89, 0x339494a7
113656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word	0x2d9b9bb6, 0x3c1e1e22, 0x15878792, 0xc9e9e920
114656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word	0x87cece49, 0xaa5555ff, 0x50282878, 0xa5dfdf7a
115656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word	0x038c8c8f, 0x59a1a1f8, 0x09898980, 0x1a0d0d17
116656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word	0x65bfbfda, 0xd7e6e631, 0x844242c6, 0xd06868b8
117656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word	0x824141c3, 0x299999b0, 0x5a2d2d77, 0x1e0f0f11
118656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word	0x7bb0b0cb, 0xa85454fc, 0x6dbbbbd6, 0x2c16163a
119656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project@ Te4[256]
120656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.byte	0x63, 0x7c, 0x77, 0x7b, 0xf2, 0x6b, 0x6f, 0xc5
121656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.byte	0x30, 0x01, 0x67, 0x2b, 0xfe, 0xd7, 0xab, 0x76
122656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.byte	0xca, 0x82, 0xc9, 0x7d, 0xfa, 0x59, 0x47, 0xf0
123656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.byte	0xad, 0xd4, 0xa2, 0xaf, 0x9c, 0xa4, 0x72, 0xc0
124656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.byte	0xb7, 0xfd, 0x93, 0x26, 0x36, 0x3f, 0xf7, 0xcc
125656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.byte	0x34, 0xa5, 0xe5, 0xf1, 0x71, 0xd8, 0x31, 0x15
126656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.byte	0x04, 0xc7, 0x23, 0xc3, 0x18, 0x96, 0x05, 0x9a
127656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.byte	0x07, 0x12, 0x80, 0xe2, 0xeb, 0x27, 0xb2, 0x75
128656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.byte	0x09, 0x83, 0x2c, 0x1a, 0x1b, 0x6e, 0x5a, 0xa0
129656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.byte	0x52, 0x3b, 0xd6, 0xb3, 0x29, 0xe3, 0x2f, 0x84
130656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.byte	0x53, 0xd1, 0x00, 0xed, 0x20, 0xfc, 0xb1, 0x5b
131656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.byte	0x6a, 0xcb, 0xbe, 0x39, 0x4a, 0x4c, 0x58, 0xcf
132656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.byte	0xd0, 0xef, 0xaa, 0xfb, 0x43, 0x4d, 0x33, 0x85
133656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.byte	0x45, 0xf9, 0x02, 0x7f, 0x50, 0x3c, 0x9f, 0xa8
134656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.byte	0x51, 0xa3, 0x40, 0x8f, 0x92, 0x9d, 0x38, 0xf5
135656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.byte	0xbc, 0xb6, 0xda, 0x21, 0x10, 0xff, 0xf3, 0xd2
136656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.byte	0xcd, 0x0c, 0x13, 0xec, 0x5f, 0x97, 0x44, 0x17
137656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.byte	0xc4, 0xa7, 0x7e, 0x3d, 0x64, 0x5d, 0x19, 0x73
138656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.byte	0x60, 0x81, 0x4f, 0xdc, 0x22, 0x2a, 0x90, 0x88
139656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.byte	0x46, 0xee, 0xb8, 0x14, 0xde, 0x5e, 0x0b, 0xdb
140656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.byte	0xe0, 0x32, 0x3a, 0x0a, 0x49, 0x06, 0x24, 0x5c
141656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.byte	0xc2, 0xd3, 0xac, 0x62, 0x91, 0x95, 0xe4, 0x79
142656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.byte	0xe7, 0xc8, 0x37, 0x6d, 0x8d, 0xd5, 0x4e, 0xa9
143656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.byte	0x6c, 0x56, 0xf4, 0xea, 0x65, 0x7a, 0xae, 0x08
144656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.byte	0xba, 0x78, 0x25, 0x2e, 0x1c, 0xa6, 0xb4, 0xc6
145656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.byte	0xe8, 0xdd, 0x74, 0x1f, 0x4b, 0xbd, 0x8b, 0x8a
146656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.byte	0x70, 0x3e, 0xb5, 0x66, 0x48, 0x03, 0xf6, 0x0e
147656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.byte	0x61, 0x35, 0x57, 0xb9, 0x86, 0xc1, 0x1d, 0x9e
148656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.byte	0xe1, 0xf8, 0x98, 0x11, 0x69, 0xd9, 0x8e, 0x94
149656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.byte	0x9b, 0x1e, 0x87, 0xe9, 0xce, 0x55, 0x28, 0xdf
150656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.byte	0x8c, 0xa1, 0x89, 0x0d, 0xbf, 0xe6, 0x42, 0x68
151656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.byte	0x41, 0x99, 0x2d, 0x0f, 0xb0, 0x54, 0xbb, 0x16
152656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project@ rcon[]
153656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word	0x01000000, 0x02000000, 0x04000000, 0x08000000
154656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word	0x10000000, 0x20000000, 0x40000000, 0x80000000
155656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word	0x1B000000, 0x36000000, 0, 0, 0, 0, 0, 0
156656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.size	AES_Te,.-AES_Te
157656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
158656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project@ void AES_encrypt(const unsigned char *in, unsigned char *out,
159656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project@ 		 const AES_KEY *key) {
160656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.global AES_encrypt
161656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.type   AES_encrypt,%function
162656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.align	5
163656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source ProjectAES_encrypt:
1643f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root#if __ARM_ARCH__<7
165656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	sub	r3,pc,#8		@ AES_encrypt
1663f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root#else
1673f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	adr	r3,AES_encrypt
1683f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root#endif
169656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	stmdb   sp!,{r1,r4-r12,lr}
170656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	mov	r12,r0		@ inp
171656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	mov	r11,r2
172656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	sub	r10,r3,#AES_encrypt-AES_Te	@ Te
173392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom#if __ARM_ARCH__<7
174656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	ldrb	r0,[r12,#3]	@ load input data in endian-neutral
175656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	ldrb	r4,[r12,#2]	@ manner...
176656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	ldrb	r5,[r12,#1]
177656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	ldrb	r6,[r12,#0]
178656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	orr	r0,r0,r4,lsl#8
179656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	ldrb	r1,[r12,#7]
18043c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom	orr	r0,r0,r5,lsl#16
181656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	ldrb	r4,[r12,#6]
18243c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom	orr	r0,r0,r6,lsl#24
183656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	ldrb	r5,[r12,#5]
184656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	ldrb	r6,[r12,#4]
185656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	orr	r1,r1,r4,lsl#8
186656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	ldrb	r2,[r12,#11]
18743c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom	orr	r1,r1,r5,lsl#16
188656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	ldrb	r4,[r12,#10]
18943c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom	orr	r1,r1,r6,lsl#24
190656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	ldrb	r5,[r12,#9]
191656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	ldrb	r6,[r12,#8]
192656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	orr	r2,r2,r4,lsl#8
193656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	ldrb	r3,[r12,#15]
19443c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom	orr	r2,r2,r5,lsl#16
195656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	ldrb	r4,[r12,#14]
19643c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom	orr	r2,r2,r6,lsl#24
197656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	ldrb	r5,[r12,#13]
198656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	ldrb	r6,[r12,#12]
199656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	orr	r3,r3,r4,lsl#8
200656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	orr	r3,r3,r5,lsl#16
201656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	orr	r3,r3,r6,lsl#24
202392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom#else
203392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	ldr	r0,[r12,#0]
204392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	ldr	r1,[r12,#4]
205392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	ldr	r2,[r12,#8]
206392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	ldr	r3,[r12,#12]
207392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom#ifdef __ARMEL__
208392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	rev	r0,r0
209392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	rev	r1,r1
210392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	rev	r2,r2
211392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	rev	r3,r3
212392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom#endif
213392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom#endif
214656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	bl	_armv4_AES_encrypt
215656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
216656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	ldr	r12,[sp],#4		@ pop out
217392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom#if __ARM_ARCH__>=7
218392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom#ifdef __ARMEL__
219392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	rev	r0,r0
220392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	rev	r1,r1
221392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	rev	r2,r2
222392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	rev	r3,r3
223392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom#endif
224392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	str	r0,[r12,#0]
225392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	str	r1,[r12,#4]
226392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	str	r2,[r12,#8]
227392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	str	r3,[r12,#12]
228392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom#else
229656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	mov	r4,r0,lsr#24		@ write output in endian-neutral
230656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	mov	r5,r0,lsr#16		@ manner...
231656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	mov	r6,r0,lsr#8
232656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	strb	r4,[r12,#0]
233656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	strb	r5,[r12,#1]
234656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	mov	r4,r1,lsr#24
23543c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom	strb	r6,[r12,#2]
236656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	mov	r5,r1,lsr#16
23743c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom	strb	r0,[r12,#3]
238656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	mov	r6,r1,lsr#8
239656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	strb	r4,[r12,#4]
240656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	strb	r5,[r12,#5]
241656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	mov	r4,r2,lsr#24
24243c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom	strb	r6,[r12,#6]
243656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	mov	r5,r2,lsr#16
24443c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom	strb	r1,[r12,#7]
245656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	mov	r6,r2,lsr#8
246656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	strb	r4,[r12,#8]
247656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	strb	r5,[r12,#9]
248656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	mov	r4,r3,lsr#24
24943c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom	strb	r6,[r12,#10]
250656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	mov	r5,r3,lsr#16
25143c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom	strb	r2,[r12,#11]
252656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	mov	r6,r3,lsr#8
253656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	strb	r4,[r12,#12]
254656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	strb	r5,[r12,#13]
255656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	strb	r6,[r12,#14]
256656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	strb	r3,[r12,#15]
257392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom#endif
258392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom#if __ARM_ARCH__>=5
259392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	ldmia	sp!,{r4-r12,pc}
260392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom#else
261656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	ldmia   sp!,{r4-r12,lr}
262656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	tst	lr,#1
263656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	moveq	pc,lr			@ be binary compatible with V4, yet
264656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	.word	0xe12fff1e			@ interoperable with Thumb ISA:-)
265392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom#endif
266656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.size	AES_encrypt,.-AES_encrypt
267656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
268656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.type   _armv4_AES_encrypt,%function
269656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.align	2
270656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project_armv4_AES_encrypt:
271656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	str	lr,[sp,#-4]!		@ push lr
27243c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom	ldmia	r11!,{r4-r7}
273656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	eor	r0,r0,r4
27443c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom	ldr	r12,[r11,#240-16]
275656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	eor	r1,r1,r5
276656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	eor	r2,r2,r6
277656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	eor	r3,r3,r7
278656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	sub	r12,r12,#1
279656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	mov	lr,#255
280656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
28143c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom	and	r7,lr,r0
282656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	and	r8,lr,r0,lsr#8
283656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	and	r9,lr,r0,lsr#16
284656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	mov	r0,r0,lsr#24
28543c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom.Lenc_loop:
286656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	ldr	r4,[r10,r7,lsl#2]	@ Te3[s0>>0]
287656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	and	r7,lr,r1,lsr#16	@ i0
28843c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom	ldr	r5,[r10,r8,lsl#2]	@ Te2[s0>>8]
289656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	and	r8,lr,r1
29043c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom	ldr	r6,[r10,r9,lsl#2]	@ Te1[s0>>16]
291656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	and	r9,lr,r1,lsr#8
29243c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom	ldr	r0,[r10,r0,lsl#2]	@ Te0[s0>>24]
293656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	mov	r1,r1,lsr#24
29443c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom
295656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	ldr	r7,[r10,r7,lsl#2]	@ Te1[s1>>16]
296656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	ldr	r8,[r10,r8,lsl#2]	@ Te3[s1>>0]
297656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	ldr	r9,[r10,r9,lsl#2]	@ Te2[s1>>8]
298656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	eor	r0,r0,r7,ror#8
29943c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom	ldr	r1,[r10,r1,lsl#2]	@ Te0[s1>>24]
300656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	and	r7,lr,r2,lsr#8	@ i0
30143c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom	eor	r5,r5,r8,ror#8
302656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	and	r8,lr,r2,lsr#16	@ i1
30343c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom	eor	r6,r6,r9,ror#8
304656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	and	r9,lr,r2
305656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	ldr	r7,[r10,r7,lsl#2]	@ Te2[s2>>8]
306392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	eor	r1,r1,r4,ror#24
307392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	ldr	r8,[r10,r8,lsl#2]	@ Te1[s2>>16]
30843c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom	mov	r2,r2,lsr#24
30943c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom
310656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	ldr	r9,[r10,r9,lsl#2]	@ Te3[s2>>0]
311656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	eor	r0,r0,r7,ror#16
31243c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom	ldr	r2,[r10,r2,lsl#2]	@ Te0[s2>>24]
313656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	and	r7,lr,r3		@ i0
31443c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom	eor	r1,r1,r8,ror#8
315656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	and	r8,lr,r3,lsr#8	@ i1
31643c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom	eor	r6,r6,r9,ror#16
317656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	and	r9,lr,r3,lsr#16	@ i2
318656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	ldr	r7,[r10,r7,lsl#2]	@ Te3[s3>>0]
319392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	eor	r2,r2,r5,ror#16
320392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	ldr	r8,[r10,r8,lsl#2]	@ Te2[s3>>8]
32143c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom	mov	r3,r3,lsr#24
32243c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom
323656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	ldr	r9,[r10,r9,lsl#2]	@ Te1[s3>>16]
324656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	eor	r0,r0,r7,ror#24
32543c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom	ldr	r7,[r11],#16
326392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	eor	r1,r1,r8,ror#16
327392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	ldr	r3,[r10,r3,lsl#2]	@ Te0[s3>>24]
328656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	eor	r2,r2,r9,ror#8
32943c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom	ldr	r4,[r11,#-12]
330656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	eor	r3,r3,r6,ror#8
331656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
33243c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom	ldr	r5,[r11,#-8]
33343c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom	eor	r0,r0,r7
33443c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom	ldr	r6,[r11,#-4]
33543c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom	and	r7,lr,r0
33643c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom	eor	r1,r1,r4
33743c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom	and	r8,lr,r0,lsr#8
33843c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom	eor	r2,r2,r5
33943c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom	and	r9,lr,r0,lsr#16
34043c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom	eor	r3,r3,r6
34143c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom	mov	r0,r0,lsr#24
342656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
343656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	subs	r12,r12,#1
344656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	bne	.Lenc_loop
345656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
346656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	add	r10,r10,#2
347656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
348656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	ldrb	r4,[r10,r7,lsl#2]	@ Te4[s0>>0]
349656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	and	r7,lr,r1,lsr#16	@ i0
35043c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom	ldrb	r5,[r10,r8,lsl#2]	@ Te4[s0>>8]
351656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	and	r8,lr,r1
35243c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom	ldrb	r6,[r10,r9,lsl#2]	@ Te4[s0>>16]
353656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	and	r9,lr,r1,lsr#8
35443c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom	ldrb	r0,[r10,r0,lsl#2]	@ Te4[s0>>24]
355656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	mov	r1,r1,lsr#24
35643c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom
357656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	ldrb	r7,[r10,r7,lsl#2]	@ Te4[s1>>16]
358656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	ldrb	r8,[r10,r8,lsl#2]	@ Te4[s1>>0]
359656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	ldrb	r9,[r10,r9,lsl#2]	@ Te4[s1>>8]
360656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	eor	r0,r7,r0,lsl#8
36143c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom	ldrb	r1,[r10,r1,lsl#2]	@ Te4[s1>>24]
362656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	and	r7,lr,r2,lsr#8	@ i0
36343c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom	eor	r5,r8,r5,lsl#8
364656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	and	r8,lr,r2,lsr#16	@ i1
36543c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom	eor	r6,r9,r6,lsl#8
366656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	and	r9,lr,r2
367656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	ldrb	r7,[r10,r7,lsl#2]	@ Te4[s2>>8]
368392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	eor	r1,r4,r1,lsl#24
369392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	ldrb	r8,[r10,r8,lsl#2]	@ Te4[s2>>16]
37043c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom	mov	r2,r2,lsr#24
37143c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom
372656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	ldrb	r9,[r10,r9,lsl#2]	@ Te4[s2>>0]
373656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	eor	r0,r7,r0,lsl#8
37443c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom	ldrb	r2,[r10,r2,lsl#2]	@ Te4[s2>>24]
375656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	and	r7,lr,r3		@ i0
37643c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom	eor	r1,r1,r8,lsl#16
377656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	and	r8,lr,r3,lsr#8	@ i1
37843c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom	eor	r6,r9,r6,lsl#8
379656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	and	r9,lr,r3,lsr#16	@ i2
380656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	ldrb	r7,[r10,r7,lsl#2]	@ Te4[s3>>0]
381392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	eor	r2,r5,r2,lsl#24
382392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	ldrb	r8,[r10,r8,lsl#2]	@ Te4[s3>>8]
38343c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom	mov	r3,r3,lsr#24
38443c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom
385656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	ldrb	r9,[r10,r9,lsl#2]	@ Te4[s3>>16]
386656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	eor	r0,r7,r0,lsl#8
38743c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom	ldr	r7,[r11,#0]
388392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	ldrb	r3,[r10,r3,lsl#2]	@ Te4[s3>>24]
389656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	eor	r1,r1,r8,lsl#8
39043c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom	ldr	r4,[r11,#4]
391656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	eor	r2,r2,r9,lsl#16
39243c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom	ldr	r5,[r11,#8]
393656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	eor	r3,r6,r3,lsl#24
39443c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom	ldr	r6,[r11,#12]
395656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
39643c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom	eor	r0,r0,r7
39743c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom	eor	r1,r1,r4
39843c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom	eor	r2,r2,r5
39943c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom	eor	r3,r3,r6
400656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
401656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	sub	r10,r10,#2
40243c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom	ldr	pc,[sp],#4		@ pop and return
403656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.size	_armv4_AES_encrypt,.-_armv4_AES_encrypt
404656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
405392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom.global private_AES_set_encrypt_key
406392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom.type   private_AES_set_encrypt_key,%function
407656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.align	5
408392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstromprivate_AES_set_encrypt_key:
409a1a5710c055e139ea00e785f9eb55b3af3e4dab1Brian Carlstrom_armv4_AES_set_encrypt_key:
4103f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root#if __ARM_ARCH__<7
411656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	sub	r3,pc,#8		@ AES_set_encrypt_key
4123f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root#else
4133f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	adr	r3,private_AES_set_encrypt_key
4143f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root#endif
415656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	teq	r0,#0
4163f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root#if __ARM_ARCH__>=7
4173f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	itt	eq			@ Thumb2 thing, sanity check in ARM
4183f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root#endif
419656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	moveq	r0,#-1
420656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	beq	.Labrt
421656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	teq	r2,#0
4223f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root#if __ARM_ARCH__>=7
4233f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	itt	eq			@ Thumb2 thing, sanity check in ARM
4243f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root#endif
425656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	moveq	r0,#-1
426656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	beq	.Labrt
427656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
428656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	teq	r1,#128
429656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	beq	.Lok
430656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	teq	r1,#192
431656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	beq	.Lok
432656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	teq	r1,#256
4333f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root#if __ARM_ARCH__>=7
4343f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	itt	ne			@ Thumb2 thing, sanity check in ARM
4353f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root#endif
436656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	movne	r0,#-1
437656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	bne	.Labrt
438656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
439656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.Lok:	stmdb   sp!,{r4-r12,lr}
440a1a5710c055e139ea00e785f9eb55b3af3e4dab1Brian Carlstrom	sub	r10,r3,#_armv4_AES_set_encrypt_key-AES_Te-1024	@ Te4
441656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
442656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	mov	r12,r0		@ inp
443656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	mov	lr,r1			@ bits
444656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	mov	r11,r2			@ key
445656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
446392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom#if __ARM_ARCH__<7
447656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	ldrb	r0,[r12,#3]	@ load input data in endian-neutral
448656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	ldrb	r4,[r12,#2]	@ manner...
449656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	ldrb	r5,[r12,#1]
450656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	ldrb	r6,[r12,#0]
451656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	orr	r0,r0,r4,lsl#8
452656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	ldrb	r1,[r12,#7]
45343c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom	orr	r0,r0,r5,lsl#16
454656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	ldrb	r4,[r12,#6]
45543c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom	orr	r0,r0,r6,lsl#24
456656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	ldrb	r5,[r12,#5]
457656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	ldrb	r6,[r12,#4]
458656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	orr	r1,r1,r4,lsl#8
459656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	ldrb	r2,[r12,#11]
46043c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom	orr	r1,r1,r5,lsl#16
461656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	ldrb	r4,[r12,#10]
46243c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom	orr	r1,r1,r6,lsl#24
463656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	ldrb	r5,[r12,#9]
464656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	ldrb	r6,[r12,#8]
465656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	orr	r2,r2,r4,lsl#8
466656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	ldrb	r3,[r12,#15]
46743c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom	orr	r2,r2,r5,lsl#16
468656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	ldrb	r4,[r12,#14]
46943c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom	orr	r2,r2,r6,lsl#24
470656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	ldrb	r5,[r12,#13]
471656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	ldrb	r6,[r12,#12]
472656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	orr	r3,r3,r4,lsl#8
473656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	str	r0,[r11],#16
47443c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom	orr	r3,r3,r5,lsl#16
475656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	str	r1,[r11,#-12]
47643c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom	orr	r3,r3,r6,lsl#24
477656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	str	r2,[r11,#-8]
478656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	str	r3,[r11,#-4]
479392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom#else
480392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	ldr	r0,[r12,#0]
481392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	ldr	r1,[r12,#4]
482392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	ldr	r2,[r12,#8]
483392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	ldr	r3,[r12,#12]
484392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom#ifdef __ARMEL__
485392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	rev	r0,r0
486392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	rev	r1,r1
487392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	rev	r2,r2
488392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	rev	r3,r3
489392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom#endif
490392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	str	r0,[r11],#16
491392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	str	r1,[r11,#-12]
492392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	str	r2,[r11,#-8]
493392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	str	r3,[r11,#-4]
494392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom#endif
495656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
496656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	teq	lr,#128
497656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	bne	.Lnot128
498656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	mov	r12,#10
499656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	str	r12,[r11,#240-16]
500656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	add	r6,r10,#256			@ rcon
501656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	mov	lr,#255
502656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
503656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.L128_loop:
504656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	and	r5,lr,r3,lsr#24
505656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	and	r7,lr,r3,lsr#16
506656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	ldrb	r5,[r10,r5]
50743c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom	and	r8,lr,r3,lsr#8
508656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	ldrb	r7,[r10,r7]
50943c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom	and	r9,lr,r3
510656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	ldrb	r8,[r10,r8]
511656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	orr	r5,r5,r7,lsl#24
51243c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom	ldrb	r9,[r10,r9]
513656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	orr	r5,r5,r8,lsl#16
51443c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom	ldr	r4,[r6],#4			@ rcon[i++]
515656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	orr	r5,r5,r9,lsl#8
516656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	eor	r5,r5,r4
517656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	eor	r0,r0,r5			@ rk[4]=rk[0]^...
518656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	eor	r1,r1,r0			@ rk[5]=rk[1]^rk[4]
519656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	str	r0,[r11],#16
52043c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom	eor	r2,r2,r1			@ rk[6]=rk[2]^rk[5]
521656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	str	r1,[r11,#-12]
52243c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom	eor	r3,r3,r2			@ rk[7]=rk[3]^rk[6]
523656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	str	r2,[r11,#-8]
524656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	subs	r12,r12,#1
52543c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom	str	r3,[r11,#-4]
526656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	bne	.L128_loop
527656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	sub	r2,r11,#176
528656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	b	.Ldone
529656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
530656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.Lnot128:
531392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom#if __ARM_ARCH__<7
532656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	ldrb	r8,[r12,#19]
533656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	ldrb	r4,[r12,#18]
534656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	ldrb	r5,[r12,#17]
535656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	ldrb	r6,[r12,#16]
536656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	orr	r8,r8,r4,lsl#8
537656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	ldrb	r9,[r12,#23]
53843c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom	orr	r8,r8,r5,lsl#16
539656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	ldrb	r4,[r12,#22]
54043c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom	orr	r8,r8,r6,lsl#24
541656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	ldrb	r5,[r12,#21]
542656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	ldrb	r6,[r12,#20]
543656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	orr	r9,r9,r4,lsl#8
544656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	orr	r9,r9,r5,lsl#16
545656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	str	r8,[r11],#8
54643c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom	orr	r9,r9,r6,lsl#24
547656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	str	r9,[r11,#-4]
548392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom#else
549392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	ldr	r8,[r12,#16]
550392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	ldr	r9,[r12,#20]
551392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom#ifdef __ARMEL__
552392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	rev	r8,r8
553392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	rev	r9,r9
554392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom#endif
555392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	str	r8,[r11],#8
556392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	str	r9,[r11,#-4]
557392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom#endif
558656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
559656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	teq	lr,#192
560656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	bne	.Lnot192
561656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	mov	r12,#12
562656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	str	r12,[r11,#240-24]
563656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	add	r6,r10,#256			@ rcon
564656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	mov	lr,#255
565656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	mov	r12,#8
566656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
567656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.L192_loop:
568656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	and	r5,lr,r9,lsr#24
569656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	and	r7,lr,r9,lsr#16
570656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	ldrb	r5,[r10,r5]
57143c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom	and	r8,lr,r9,lsr#8
572656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	ldrb	r7,[r10,r7]
57343c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom	and	r9,lr,r9
574656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	ldrb	r8,[r10,r8]
575656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	orr	r5,r5,r7,lsl#24
57643c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom	ldrb	r9,[r10,r9]
577656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	orr	r5,r5,r8,lsl#16
57843c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom	ldr	r4,[r6],#4			@ rcon[i++]
579656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	orr	r5,r5,r9,lsl#8
580656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	eor	r9,r5,r4
581656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	eor	r0,r0,r9			@ rk[6]=rk[0]^...
582656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	eor	r1,r1,r0			@ rk[7]=rk[1]^rk[6]
583656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	str	r0,[r11],#24
58443c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom	eor	r2,r2,r1			@ rk[8]=rk[2]^rk[7]
585656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	str	r1,[r11,#-20]
58643c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom	eor	r3,r3,r2			@ rk[9]=rk[3]^rk[8]
587656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	str	r2,[r11,#-16]
588656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	subs	r12,r12,#1
58943c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom	str	r3,[r11,#-12]
5903f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root#if __ARM_ARCH__>=7
5913f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	itt	eq				@ Thumb2 thing, sanity check in ARM
5923f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root#endif
593656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	subeq	r2,r11,#216
594656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	beq	.Ldone
595656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
596656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	ldr	r7,[r11,#-32]
597656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	ldr	r8,[r11,#-28]
598656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	eor	r7,r7,r3			@ rk[10]=rk[4]^rk[9]
599656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	eor	r9,r8,r7			@ rk[11]=rk[5]^rk[10]
600656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	str	r7,[r11,#-8]
601656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	str	r9,[r11,#-4]
602656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	b	.L192_loop
603656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
604656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.Lnot192:
605392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom#if __ARM_ARCH__<7
606656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	ldrb	r8,[r12,#27]
607656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	ldrb	r4,[r12,#26]
608656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	ldrb	r5,[r12,#25]
609656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	ldrb	r6,[r12,#24]
610656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	orr	r8,r8,r4,lsl#8
611656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	ldrb	r9,[r12,#31]
61243c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom	orr	r8,r8,r5,lsl#16
613656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	ldrb	r4,[r12,#30]
61443c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom	orr	r8,r8,r6,lsl#24
615656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	ldrb	r5,[r12,#29]
616656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	ldrb	r6,[r12,#28]
617656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	orr	r9,r9,r4,lsl#8
618656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	orr	r9,r9,r5,lsl#16
619656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	str	r8,[r11],#8
62043c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom	orr	r9,r9,r6,lsl#24
621656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	str	r9,[r11,#-4]
622392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom#else
623392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	ldr	r8,[r12,#24]
624392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	ldr	r9,[r12,#28]
625392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom#ifdef __ARMEL__
626392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	rev	r8,r8
627392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	rev	r9,r9
628392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom#endif
629392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	str	r8,[r11],#8
630392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	str	r9,[r11,#-4]
631392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom#endif
632656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
633656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	mov	r12,#14
634656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	str	r12,[r11,#240-32]
635656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	add	r6,r10,#256			@ rcon
636656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	mov	lr,#255
637656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	mov	r12,#7
638656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
639656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.L256_loop:
640656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	and	r5,lr,r9,lsr#24
641656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	and	r7,lr,r9,lsr#16
642656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	ldrb	r5,[r10,r5]
64343c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom	and	r8,lr,r9,lsr#8
644656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	ldrb	r7,[r10,r7]
64543c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom	and	r9,lr,r9
646656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	ldrb	r8,[r10,r8]
647656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	orr	r5,r5,r7,lsl#24
64843c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom	ldrb	r9,[r10,r9]
649656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	orr	r5,r5,r8,lsl#16
65043c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom	ldr	r4,[r6],#4			@ rcon[i++]
651656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	orr	r5,r5,r9,lsl#8
652656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	eor	r9,r5,r4
653656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	eor	r0,r0,r9			@ rk[8]=rk[0]^...
654656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	eor	r1,r1,r0			@ rk[9]=rk[1]^rk[8]
655656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	str	r0,[r11],#32
65643c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom	eor	r2,r2,r1			@ rk[10]=rk[2]^rk[9]
657656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	str	r1,[r11,#-28]
65843c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom	eor	r3,r3,r2			@ rk[11]=rk[3]^rk[10]
659656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	str	r2,[r11,#-24]
660656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	subs	r12,r12,#1
66143c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom	str	r3,[r11,#-20]
6623f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root#if __ARM_ARCH__>=7
6633f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	itt	eq				@ Thumb2 thing, sanity check in ARM
6643f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root#endif
665656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	subeq	r2,r11,#256
666656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	beq	.Ldone
667656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
668656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	and	r5,lr,r3
669656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	and	r7,lr,r3,lsr#8
670656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	ldrb	r5,[r10,r5]
67143c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom	and	r8,lr,r3,lsr#16
672656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	ldrb	r7,[r10,r7]
67343c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom	and	r9,lr,r3,lsr#24
674656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	ldrb	r8,[r10,r8]
675656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	orr	r5,r5,r7,lsl#8
67643c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom	ldrb	r9,[r10,r9]
677656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	orr	r5,r5,r8,lsl#16
67843c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom	ldr	r4,[r11,#-48]
679656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	orr	r5,r5,r9,lsl#24
680656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
681656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	ldr	r7,[r11,#-44]
682656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	ldr	r8,[r11,#-40]
683656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	eor	r4,r4,r5			@ rk[12]=rk[4]^...
68443c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom	ldr	r9,[r11,#-36]
685656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	eor	r7,r7,r4			@ rk[13]=rk[5]^rk[12]
686656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	str	r4,[r11,#-16]
68743c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom	eor	r8,r8,r7			@ rk[14]=rk[6]^rk[13]
688656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	str	r7,[r11,#-12]
68943c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom	eor	r9,r9,r8			@ rk[15]=rk[7]^rk[14]
690656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	str	r8,[r11,#-8]
691656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	str	r9,[r11,#-4]
692656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	b	.L256_loop
693656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
6943f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root.align	2
695656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.Ldone:	mov	r0,#0
696656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	ldmia   sp!,{r4-r12,lr}
6973f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root.Labrt:
6983f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root#if __ARM_ARCH__>=5
6993f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	bx	lr				@ .word	0xe12fff1e
7003f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root#else
7013f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	tst	lr,#1
702656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	moveq	pc,lr			@ be binary compatible with V4, yet
703656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	.word	0xe12fff1e			@ interoperable with Thumb ISA:-)
7043f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root#endif
705392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom.size	private_AES_set_encrypt_key,.-private_AES_set_encrypt_key
706656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
707392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom.global private_AES_set_decrypt_key
708392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom.type   private_AES_set_decrypt_key,%function
709656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.align	5
710392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstromprivate_AES_set_decrypt_key:
711656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	str	lr,[sp,#-4]!            @ push lr
712a1a5710c055e139ea00e785f9eb55b3af3e4dab1Brian Carlstrom	bl	_armv4_AES_set_encrypt_key
713656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	teq	r0,#0
7143f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	ldr	lr,[sp],#4              @ pop lr
715656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	bne	.Labrt
716656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
7173f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	mov	r0,r2			@ AES_set_encrypt_key preserves r2,
7183f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	mov	r1,r2			@ which is AES_KEY *key
7193f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	b	_armv4_AES_set_enc2dec_key
7203f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root.size	private_AES_set_decrypt_key,.-private_AES_set_decrypt_key
7213f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root
7223f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root@ void AES_set_enc2dec_key(const AES_KEY *inp,AES_KEY *out)
7233f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root.global	AES_set_enc2dec_key
7243f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root.type	AES_set_enc2dec_key,%function
7253f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root.align	5
7263f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny RootAES_set_enc2dec_key:
7273f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root_armv4_AES_set_enc2dec_key:
7283f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	stmdb   sp!,{r4-r12,lr}
7293f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root
7303f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	ldr	r12,[r0,#240]
7313f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	mov	r7,r0			@ input
7323f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	add	r8,r0,r12,lsl#4
7333f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	mov	r11,r1			@ ouput
7343f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	add	r10,r1,r12,lsl#4
7353f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	str	r12,[r1,#240]
736656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
7373f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root.Linv:	ldr	r0,[r7],#16
7383f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	ldr	r1,[r7,#-12]
7393f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	ldr	r2,[r7,#-8]
7403f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	ldr	r3,[r7,#-4]
7413f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	ldr	r4,[r8],#-16
7423f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	ldr	r5,[r8,#16+4]
7433f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	ldr	r6,[r8,#16+8]
7443f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	ldr	r9,[r8,#16+12]
7453f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	str	r0,[r10],#-16
7463f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	str	r1,[r10,#16+4]
7473f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	str	r2,[r10,#16+8]
7483f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	str	r3,[r10,#16+12]
7493f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	str	r4,[r11],#16
7503f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	str	r5,[r11,#-12]
7513f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	str	r6,[r11,#-8]
7523f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	str	r9,[r11,#-4]
7533f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	teq	r7,r8
7543f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	bne	.Linv
755656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
7563f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	ldr	r0,[r7]
757656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	ldr	r1,[r7,#4]
758656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	ldr	r2,[r7,#8]
759656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	ldr	r3,[r7,#12]
7603f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	str	r0,[r11]
7613f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	str	r1,[r11,#4]
7623f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	str	r2,[r11,#8]
7633f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	str	r3,[r11,#12]
7643f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	sub	r11,r11,r12,lsl#3
765656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	ldr	r0,[r11,#16]!		@ prefetch tp1
766656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	mov	r7,#0x80
767656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	mov	r8,#0x1b
768656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	orr	r7,r7,#0x8000
769656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	orr	r8,r8,#0x1b00
770656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	orr	r7,r7,r7,lsl#16
771656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	orr	r8,r8,r8,lsl#16
772656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	sub	r12,r12,#1
773656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	mvn	r9,r7
774656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	mov	r12,r12,lsl#2	@ (rounds-1)*4
775656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
776656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.Lmix:	and	r4,r0,r7
777656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	and	r1,r0,r9
778656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	sub	r4,r4,r4,lsr#7
779656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	and	r4,r4,r8
780656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	eor	r1,r4,r1,lsl#1	@ tp2
781656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
782656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	and	r4,r1,r7
783656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	and	r2,r1,r9
784656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	sub	r4,r4,r4,lsr#7
785656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	and	r4,r4,r8
786656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	eor	r2,r4,r2,lsl#1	@ tp4
787656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
788656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	and	r4,r2,r7
789656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	and	r3,r2,r9
790656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	sub	r4,r4,r4,lsr#7
791656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	and	r4,r4,r8
792656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	eor	r3,r4,r3,lsl#1	@ tp8
793656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
794656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	eor	r4,r1,r2
795656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	eor	r5,r0,r3		@ tp9
796656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	eor	r4,r4,r3		@ tpe
797656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	eor	r4,r4,r1,ror#24
798656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	eor	r4,r4,r5,ror#24	@ ^= ROTATE(tpb=tp9^tp2,8)
799656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	eor	r4,r4,r2,ror#16
800656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	eor	r4,r4,r5,ror#16	@ ^= ROTATE(tpd=tp9^tp4,16)
801656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	eor	r4,r4,r5,ror#8	@ ^= ROTATE(tp9,24)
802656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
803656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	ldr	r0,[r11,#4]		@ prefetch tp1
804656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	str	r4,[r11],#4
805656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	subs	r12,r12,#1
806656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	bne	.Lmix
807656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
808656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	mov	r0,#0
809392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom#if __ARM_ARCH__>=5
810392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	ldmia	sp!,{r4-r12,pc}
811392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom#else
812656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	ldmia   sp!,{r4-r12,lr}
813656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	tst	lr,#1
814656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	moveq	pc,lr			@ be binary compatible with V4, yet
815656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	.word	0xe12fff1e			@ interoperable with Thumb ISA:-)
816392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom#endif
8173f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root.size	AES_set_enc2dec_key,.-AES_set_enc2dec_key
818656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
819656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.type	AES_Td,%object
820656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.align	5
821656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source ProjectAES_Td:
822656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word	0x51f4a750, 0x7e416553, 0x1a17a4c3, 0x3a275e96
823656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word	0x3bab6bcb, 0x1f9d45f1, 0xacfa58ab, 0x4be30393
824656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word	0x2030fa55, 0xad766df6, 0x88cc7691, 0xf5024c25
825656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word	0x4fe5d7fc, 0xc52acbd7, 0x26354480, 0xb562a38f
826656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word	0xdeb15a49, 0x25ba1b67, 0x45ea0e98, 0x5dfec0e1
827656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word	0xc32f7502, 0x814cf012, 0x8d4697a3, 0x6bd3f9c6
828656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word	0x038f5fe7, 0x15929c95, 0xbf6d7aeb, 0x955259da
829656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word	0xd4be832d, 0x587421d3, 0x49e06929, 0x8ec9c844
830656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word	0x75c2896a, 0xf48e7978, 0x99583e6b, 0x27b971dd
831656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word	0xbee14fb6, 0xf088ad17, 0xc920ac66, 0x7dce3ab4
832656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word	0x63df4a18, 0xe51a3182, 0x97513360, 0x62537f45
833656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word	0xb16477e0, 0xbb6bae84, 0xfe81a01c, 0xf9082b94
834656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word	0x70486858, 0x8f45fd19, 0x94de6c87, 0x527bf8b7
835656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word	0xab73d323, 0x724b02e2, 0xe31f8f57, 0x6655ab2a
836656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word	0xb2eb2807, 0x2fb5c203, 0x86c57b9a, 0xd33708a5
837656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word	0x302887f2, 0x23bfa5b2, 0x02036aba, 0xed16825c
838656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word	0x8acf1c2b, 0xa779b492, 0xf307f2f0, 0x4e69e2a1
839656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word	0x65daf4cd, 0x0605bed5, 0xd134621f, 0xc4a6fe8a
840656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word	0x342e539d, 0xa2f355a0, 0x058ae132, 0xa4f6eb75
841656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word	0x0b83ec39, 0x4060efaa, 0x5e719f06, 0xbd6e1051
842656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word	0x3e218af9, 0x96dd063d, 0xdd3e05ae, 0x4de6bd46
843656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word	0x91548db5, 0x71c45d05, 0x0406d46f, 0x605015ff
844656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word	0x1998fb24, 0xd6bde997, 0x894043cc, 0x67d99e77
845656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word	0xb0e842bd, 0x07898b88, 0xe7195b38, 0x79c8eedb
846656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word	0xa17c0a47, 0x7c420fe9, 0xf8841ec9, 0x00000000
847656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word	0x09808683, 0x322bed48, 0x1e1170ac, 0x6c5a724e
848656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word	0xfd0efffb, 0x0f853856, 0x3daed51e, 0x362d3927
849656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word	0x0a0fd964, 0x685ca621, 0x9b5b54d1, 0x24362e3a
850656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word	0x0c0a67b1, 0x9357e70f, 0xb4ee96d2, 0x1b9b919e
851656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word	0x80c0c54f, 0x61dc20a2, 0x5a774b69, 0x1c121a16
852656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word	0xe293ba0a, 0xc0a02ae5, 0x3c22e043, 0x121b171d
853656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word	0x0e090d0b, 0xf28bc7ad, 0x2db6a8b9, 0x141ea9c8
854656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word	0x57f11985, 0xaf75074c, 0xee99ddbb, 0xa37f60fd
855656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word	0xf701269f, 0x5c72f5bc, 0x44663bc5, 0x5bfb7e34
856656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word	0x8b432976, 0xcb23c6dc, 0xb6edfc68, 0xb8e4f163
857656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word	0xd731dcca, 0x42638510, 0x13972240, 0x84c61120
858656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word	0x854a247d, 0xd2bb3df8, 0xaef93211, 0xc729a16d
859656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word	0x1d9e2f4b, 0xdcb230f3, 0x0d8652ec, 0x77c1e3d0
860656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word	0x2bb3166c, 0xa970b999, 0x119448fa, 0x47e96422
861656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word	0xa8fc8cc4, 0xa0f03f1a, 0x567d2cd8, 0x223390ef
862656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word	0x87494ec7, 0xd938d1c1, 0x8ccaa2fe, 0x98d40b36
863656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word	0xa6f581cf, 0xa57ade28, 0xdab78e26, 0x3fadbfa4
864656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word	0x2c3a9de4, 0x5078920d, 0x6a5fcc9b, 0x547e4662
865656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word	0xf68d13c2, 0x90d8b8e8, 0x2e39f75e, 0x82c3aff5
866656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word	0x9f5d80be, 0x69d0937c, 0x6fd52da9, 0xcf2512b3
867656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word	0xc8ac993b, 0x10187da7, 0xe89c636e, 0xdb3bbb7b
868656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word	0xcd267809, 0x6e5918f4, 0xec9ab701, 0x834f9aa8
869656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word	0xe6956e65, 0xaaffe67e, 0x21bccf08, 0xef15e8e6
870656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word	0xbae79bd9, 0x4a6f36ce, 0xea9f09d4, 0x29b07cd6
871656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word	0x31a4b2af, 0x2a3f2331, 0xc6a59430, 0x35a266c0
872656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word	0x744ebc37, 0xfc82caa6, 0xe090d0b0, 0x33a7d815
873656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word	0xf104984a, 0x41ecdaf7, 0x7fcd500e, 0x1791f62f
874656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word	0x764dd68d, 0x43efb04d, 0xccaa4d54, 0xe49604df
875656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word	0x9ed1b5e3, 0x4c6a881b, 0xc12c1fb8, 0x4665517f
876656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word	0x9d5eea04, 0x018c355d, 0xfa877473, 0xfb0b412e
877656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word	0xb3671d5a, 0x92dbd252, 0xe9105633, 0x6dd64713
878656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word	0x9ad7618c, 0x37a10c7a, 0x59f8148e, 0xeb133c89
879656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word	0xcea927ee, 0xb761c935, 0xe11ce5ed, 0x7a47b13c
880656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word	0x9cd2df59, 0x55f2733f, 0x1814ce79, 0x73c737bf
881656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word	0x53f7cdea, 0x5ffdaa5b, 0xdf3d6f14, 0x7844db86
882656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word	0xcaaff381, 0xb968c43e, 0x3824342c, 0xc2a3405f
883656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word	0x161dc372, 0xbce2250c, 0x283c498b, 0xff0d9541
884656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word	0x39a80171, 0x080cb3de, 0xd8b4e49c, 0x6456c190
885656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word	0x7bcb8461, 0xd532b670, 0x486c5c74, 0xd0b85742
886656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project@ Td4[256]
887656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.byte	0x52, 0x09, 0x6a, 0xd5, 0x30, 0x36, 0xa5, 0x38
888656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.byte	0xbf, 0x40, 0xa3, 0x9e, 0x81, 0xf3, 0xd7, 0xfb
889656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.byte	0x7c, 0xe3, 0x39, 0x82, 0x9b, 0x2f, 0xff, 0x87
890656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.byte	0x34, 0x8e, 0x43, 0x44, 0xc4, 0xde, 0xe9, 0xcb
891656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.byte	0x54, 0x7b, 0x94, 0x32, 0xa6, 0xc2, 0x23, 0x3d
892656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.byte	0xee, 0x4c, 0x95, 0x0b, 0x42, 0xfa, 0xc3, 0x4e
893656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.byte	0x08, 0x2e, 0xa1, 0x66, 0x28, 0xd9, 0x24, 0xb2
894656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.byte	0x76, 0x5b, 0xa2, 0x49, 0x6d, 0x8b, 0xd1, 0x25
895656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.byte	0x72, 0xf8, 0xf6, 0x64, 0x86, 0x68, 0x98, 0x16
896656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.byte	0xd4, 0xa4, 0x5c, 0xcc, 0x5d, 0x65, 0xb6, 0x92
897656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.byte	0x6c, 0x70, 0x48, 0x50, 0xfd, 0xed, 0xb9, 0xda
898656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.byte	0x5e, 0x15, 0x46, 0x57, 0xa7, 0x8d, 0x9d, 0x84
899656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.byte	0x90, 0xd8, 0xab, 0x00, 0x8c, 0xbc, 0xd3, 0x0a
900656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.byte	0xf7, 0xe4, 0x58, 0x05, 0xb8, 0xb3, 0x45, 0x06
901656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.byte	0xd0, 0x2c, 0x1e, 0x8f, 0xca, 0x3f, 0x0f, 0x02
902656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.byte	0xc1, 0xaf, 0xbd, 0x03, 0x01, 0x13, 0x8a, 0x6b
903656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.byte	0x3a, 0x91, 0x11, 0x41, 0x4f, 0x67, 0xdc, 0xea
904656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.byte	0x97, 0xf2, 0xcf, 0xce, 0xf0, 0xb4, 0xe6, 0x73
905656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.byte	0x96, 0xac, 0x74, 0x22, 0xe7, 0xad, 0x35, 0x85
906656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.byte	0xe2, 0xf9, 0x37, 0xe8, 0x1c, 0x75, 0xdf, 0x6e
907656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.byte	0x47, 0xf1, 0x1a, 0x71, 0x1d, 0x29, 0xc5, 0x89
908656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.byte	0x6f, 0xb7, 0x62, 0x0e, 0xaa, 0x18, 0xbe, 0x1b
909656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.byte	0xfc, 0x56, 0x3e, 0x4b, 0xc6, 0xd2, 0x79, 0x20
910656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.byte	0x9a, 0xdb, 0xc0, 0xfe, 0x78, 0xcd, 0x5a, 0xf4
911656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.byte	0x1f, 0xdd, 0xa8, 0x33, 0x88, 0x07, 0xc7, 0x31
912656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.byte	0xb1, 0x12, 0x10, 0x59, 0x27, 0x80, 0xec, 0x5f
913656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.byte	0x60, 0x51, 0x7f, 0xa9, 0x19, 0xb5, 0x4a, 0x0d
914656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.byte	0x2d, 0xe5, 0x7a, 0x9f, 0x93, 0xc9, 0x9c, 0xef
915656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.byte	0xa0, 0xe0, 0x3b, 0x4d, 0xae, 0x2a, 0xf5, 0xb0
916656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.byte	0xc8, 0xeb, 0xbb, 0x3c, 0x83, 0x53, 0x99, 0x61
917656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.byte	0x17, 0x2b, 0x04, 0x7e, 0xba, 0x77, 0xd6, 0x26
918656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.byte	0xe1, 0x69, 0x14, 0x63, 0x55, 0x21, 0x0c, 0x7d
919656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.size	AES_Td,.-AES_Td
920656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
921656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project@ void AES_decrypt(const unsigned char *in, unsigned char *out,
922656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project@ 		 const AES_KEY *key) {
923656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.global AES_decrypt
924656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.type   AES_decrypt,%function
925656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.align	5
926656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source ProjectAES_decrypt:
9273f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root#if __ARM_ARCH__<7
928656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	sub	r3,pc,#8		@ AES_decrypt
9293f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root#else
9303f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	adr	r3,AES_decrypt
9313f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root#endif
932656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	stmdb   sp!,{r1,r4-r12,lr}
933656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	mov	r12,r0		@ inp
934656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	mov	r11,r2
935656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	sub	r10,r3,#AES_decrypt-AES_Td		@ Td
936392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom#if __ARM_ARCH__<7
937656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	ldrb	r0,[r12,#3]	@ load input data in endian-neutral
938656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	ldrb	r4,[r12,#2]	@ manner...
939656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	ldrb	r5,[r12,#1]
940656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	ldrb	r6,[r12,#0]
941656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	orr	r0,r0,r4,lsl#8
942656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	ldrb	r1,[r12,#7]
94343c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom	orr	r0,r0,r5,lsl#16
944656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	ldrb	r4,[r12,#6]
94543c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom	orr	r0,r0,r6,lsl#24
946656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	ldrb	r5,[r12,#5]
947656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	ldrb	r6,[r12,#4]
948656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	orr	r1,r1,r4,lsl#8
949656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	ldrb	r2,[r12,#11]
95043c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom	orr	r1,r1,r5,lsl#16
951656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	ldrb	r4,[r12,#10]
95243c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom	orr	r1,r1,r6,lsl#24
953656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	ldrb	r5,[r12,#9]
954656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	ldrb	r6,[r12,#8]
955656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	orr	r2,r2,r4,lsl#8
956656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	ldrb	r3,[r12,#15]
95743c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom	orr	r2,r2,r5,lsl#16
958656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	ldrb	r4,[r12,#14]
95943c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom	orr	r2,r2,r6,lsl#24
960656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	ldrb	r5,[r12,#13]
961656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	ldrb	r6,[r12,#12]
962656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	orr	r3,r3,r4,lsl#8
963656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	orr	r3,r3,r5,lsl#16
964656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	orr	r3,r3,r6,lsl#24
965392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom#else
966392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	ldr	r0,[r12,#0]
967392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	ldr	r1,[r12,#4]
968392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	ldr	r2,[r12,#8]
969392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	ldr	r3,[r12,#12]
970392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom#ifdef __ARMEL__
971392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	rev	r0,r0
972392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	rev	r1,r1
973392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	rev	r2,r2
974392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	rev	r3,r3
975392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom#endif
976392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom#endif
977656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	bl	_armv4_AES_decrypt
978656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
979656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	ldr	r12,[sp],#4		@ pop out
980392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom#if __ARM_ARCH__>=7
981392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom#ifdef __ARMEL__
982392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	rev	r0,r0
983392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	rev	r1,r1
984392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	rev	r2,r2
985392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	rev	r3,r3
986392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom#endif
987392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	str	r0,[r12,#0]
988392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	str	r1,[r12,#4]
989392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	str	r2,[r12,#8]
990392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	str	r3,[r12,#12]
991392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom#else
992656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	mov	r4,r0,lsr#24		@ write output in endian-neutral
993656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	mov	r5,r0,lsr#16		@ manner...
994656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	mov	r6,r0,lsr#8
995656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	strb	r4,[r12,#0]
996656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	strb	r5,[r12,#1]
997656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	mov	r4,r1,lsr#24
99843c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom	strb	r6,[r12,#2]
999656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	mov	r5,r1,lsr#16
100043c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom	strb	r0,[r12,#3]
1001656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	mov	r6,r1,lsr#8
1002656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	strb	r4,[r12,#4]
1003656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	strb	r5,[r12,#5]
1004656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	mov	r4,r2,lsr#24
100543c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom	strb	r6,[r12,#6]
1006656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	mov	r5,r2,lsr#16
100743c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom	strb	r1,[r12,#7]
1008656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	mov	r6,r2,lsr#8
1009656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	strb	r4,[r12,#8]
1010656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	strb	r5,[r12,#9]
1011656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	mov	r4,r3,lsr#24
101243c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom	strb	r6,[r12,#10]
1013656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	mov	r5,r3,lsr#16
101443c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom	strb	r2,[r12,#11]
1015656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	mov	r6,r3,lsr#8
1016656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	strb	r4,[r12,#12]
1017656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	strb	r5,[r12,#13]
1018656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	strb	r6,[r12,#14]
1019656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	strb	r3,[r12,#15]
1020392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom#endif
1021392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom#if __ARM_ARCH__>=5
1022392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	ldmia	sp!,{r4-r12,pc}
1023392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom#else
1024656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	ldmia   sp!,{r4-r12,lr}
1025656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	tst	lr,#1
1026656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	moveq	pc,lr			@ be binary compatible with V4, yet
1027656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	.word	0xe12fff1e			@ interoperable with Thumb ISA:-)
1028392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom#endif
1029656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.size	AES_decrypt,.-AES_decrypt
1030656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
1031656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.type   _armv4_AES_decrypt,%function
1032656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.align	2
1033656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project_armv4_AES_decrypt:
1034656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	str	lr,[sp,#-4]!		@ push lr
103543c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom	ldmia	r11!,{r4-r7}
1036656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	eor	r0,r0,r4
103743c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom	ldr	r12,[r11,#240-16]
1038656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	eor	r1,r1,r5
1039656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	eor	r2,r2,r6
1040656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	eor	r3,r3,r7
1041656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	sub	r12,r12,#1
1042656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	mov	lr,#255
1043656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
1044656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	and	r7,lr,r0,lsr#16
1045656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	and	r8,lr,r0,lsr#8
1046656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	and	r9,lr,r0
1047656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	mov	r0,r0,lsr#24
104843c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom.Ldec_loop:
1049656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	ldr	r4,[r10,r7,lsl#2]	@ Td1[s0>>16]
1050656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	and	r7,lr,r1		@ i0
105143c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom	ldr	r5,[r10,r8,lsl#2]	@ Td2[s0>>8]
1052656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	and	r8,lr,r1,lsr#16
105343c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom	ldr	r6,[r10,r9,lsl#2]	@ Td3[s0>>0]
1054656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	and	r9,lr,r1,lsr#8
105543c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom	ldr	r0,[r10,r0,lsl#2]	@ Td0[s0>>24]
1056656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	mov	r1,r1,lsr#24
105743c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom
1058656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	ldr	r7,[r10,r7,lsl#2]	@ Td3[s1>>0]
1059656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	ldr	r8,[r10,r8,lsl#2]	@ Td1[s1>>16]
1060656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	ldr	r9,[r10,r9,lsl#2]	@ Td2[s1>>8]
1061656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	eor	r0,r0,r7,ror#24
106243c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom	ldr	r1,[r10,r1,lsl#2]	@ Td0[s1>>24]
1063656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	and	r7,lr,r2,lsr#8	@ i0
106443c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom	eor	r5,r8,r5,ror#8
1065656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	and	r8,lr,r2		@ i1
106643c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom	eor	r6,r9,r6,ror#8
1067656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	and	r9,lr,r2,lsr#16
1068656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	ldr	r7,[r10,r7,lsl#2]	@ Td2[s2>>8]
1069392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	eor	r1,r1,r4,ror#8
1070392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	ldr	r8,[r10,r8,lsl#2]	@ Td3[s2>>0]
107143c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom	mov	r2,r2,lsr#24
107243c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom
1073656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	ldr	r9,[r10,r9,lsl#2]	@ Td1[s2>>16]
1074656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	eor	r0,r0,r7,ror#16
107543c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom	ldr	r2,[r10,r2,lsl#2]	@ Td0[s2>>24]
1076656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	and	r7,lr,r3,lsr#16	@ i0
107743c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom	eor	r1,r1,r8,ror#24
1078656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	and	r8,lr,r3,lsr#8	@ i1
107943c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom	eor	r6,r9,r6,ror#8
1080656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	and	r9,lr,r3		@ i2
1081656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	ldr	r7,[r10,r7,lsl#2]	@ Td1[s3>>16]
1082392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	eor	r2,r2,r5,ror#8
1083392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	ldr	r8,[r10,r8,lsl#2]	@ Td2[s3>>8]
108443c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom	mov	r3,r3,lsr#24
108543c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom
1086656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	ldr	r9,[r10,r9,lsl#2]	@ Td3[s3>>0]
1087656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	eor	r0,r0,r7,ror#8
1088392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	ldr	r7,[r11],#16
1089656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	eor	r1,r1,r8,ror#16
1090392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	ldr	r3,[r10,r3,lsl#2]	@ Td0[s3>>24]
1091656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	eor	r2,r2,r9,ror#24
1092656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
109343c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom	ldr	r4,[r11,#-12]
109443c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom	eor	r0,r0,r7
1095392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	ldr	r5,[r11,#-8]
1096392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	eor	r3,r3,r6,ror#8
109743c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom	ldr	r6,[r11,#-4]
109843c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom	and	r7,lr,r0,lsr#16
109943c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom	eor	r1,r1,r4
110043c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom	and	r8,lr,r0,lsr#8
110143c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom	eor	r2,r2,r5
110243c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom	and	r9,lr,r0
110343c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom	eor	r3,r3,r6
110443c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom	mov	r0,r0,lsr#24
1105656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
1106656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	subs	r12,r12,#1
1107656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	bne	.Ldec_loop
1108656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
1109656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	add	r10,r10,#1024
1110656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
111143c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom	ldr	r5,[r10,#0]		@ prefetch Td4
111243c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom	ldr	r6,[r10,#32]
111343c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom	ldr	r4,[r10,#64]
111443c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom	ldr	r5,[r10,#96]
111543c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom	ldr	r6,[r10,#128]
111643c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom	ldr	r4,[r10,#160]
111743c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom	ldr	r5,[r10,#192]
111843c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom	ldr	r6,[r10,#224]
1119656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
112043c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom	ldrb	r0,[r10,r0]		@ Td4[s0>>24]
1121656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	ldrb	r4,[r10,r7]		@ Td4[s0>>16]
1122656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	and	r7,lr,r1		@ i0
112343c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom	ldrb	r5,[r10,r8]		@ Td4[s0>>8]
1124656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	and	r8,lr,r1,lsr#16
112543c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom	ldrb	r6,[r10,r9]		@ Td4[s0>>0]
1126656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	and	r9,lr,r1,lsr#8
112743c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom
11283f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	add	r1,r10,r1,lsr#24
1129656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	ldrb	r7,[r10,r7]		@ Td4[s1>>0]
11303f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	ldrb	r1,[r1]		@ Td4[s1>>24]
1131656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	ldrb	r8,[r10,r8]		@ Td4[s1>>16]
1132656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	eor	r0,r7,r0,lsl#24
113343c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom	ldrb	r9,[r10,r9]		@ Td4[s1>>8]
1134656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	eor	r1,r4,r1,lsl#8
1135656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	and	r7,lr,r2,lsr#8	@ i0
113643c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom	eor	r5,r5,r8,lsl#8
1137656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	and	r8,lr,r2		@ i1
1138656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	ldrb	r7,[r10,r7]		@ Td4[s2>>8]
1139392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	eor	r6,r6,r9,lsl#8
1140392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	ldrb	r8,[r10,r8]		@ Td4[s2>>0]
114143c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom	and	r9,lr,r2,lsr#16
114243c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom
11433f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	add	r2,r10,r2,lsr#24
11443f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	ldrb	r2,[r2]		@ Td4[s2>>24]
1145656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	eor	r0,r0,r7,lsl#8
114643c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom	ldrb	r9,[r10,r9]		@ Td4[s2>>16]
1147656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	eor	r1,r8,r1,lsl#16
1148656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	and	r7,lr,r3,lsr#16	@ i0
114943c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom	eor	r2,r5,r2,lsl#16
1150656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	and	r8,lr,r3,lsr#8	@ i1
1151656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	ldrb	r7,[r10,r7]		@ Td4[s3>>16]
1152392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	eor	r6,r6,r9,lsl#16
1153392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	ldrb	r8,[r10,r8]		@ Td4[s3>>8]
115443c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom	and	r9,lr,r3		@ i2
115543c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom
11563f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	add	r3,r10,r3,lsr#24
1157656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	ldrb	r9,[r10,r9]		@ Td4[s3>>0]
11583f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	ldrb	r3,[r3]		@ Td4[s3>>24]
1159656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	eor	r0,r0,r7,lsl#16
116043c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom	ldr	r7,[r11,#0]
1161656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	eor	r1,r1,r8,lsl#8
116243c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom	ldr	r4,[r11,#4]
1163656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	eor	r2,r9,r2,lsl#8
116443c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom	ldr	r5,[r11,#8]
1165656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	eor	r3,r6,r3,lsl#24
116643c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom	ldr	r6,[r11,#12]
1167656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
116843c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom	eor	r0,r0,r7
116943c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom	eor	r1,r1,r4
117043c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom	eor	r2,r2,r5
117143c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom	eor	r3,r3,r6
1172656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
1173656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	sub	r10,r10,#1024
117443c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom	ldr	pc,[sp],#4		@ pop and return
1175656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.size	_armv4_AES_decrypt,.-_armv4_AES_decrypt
1176656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.asciz	"AES for ARMv4, CRYPTOGAMS by <appro@openssl.org>"
1177656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.align	2
1178