1656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#!/usr/bin/env perl
2656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
3656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project# ====================================================================
4656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project# Written by Andy Polyakov <appro@fy.chalmers.se> for the OpenSSL
5656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project# project. The module is, however, dual licensed under OpenSSL and
6656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project# CRYPTOGAMS licenses depending on where you obtain it. For further
7656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project# details see http://www.openssl.org/~appro/cryptogams/.
8656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project# ====================================================================
9656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
10656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project# AES for ARMv4
11656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
12656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project# January 2007.
13656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#
14656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project# Code uses single 1K S-box and is >2 times faster than code generated
15656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project# by gcc-3.4.1. This is thanks to unique feature of ARMv4 ISA, which
16656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project# allows to merge logical or arithmetic operation with shift or rotate
17656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project# in one instruction and emit combined result every cycle. The module
18656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project# is endian-neutral. The performance is ~42 cycles/byte for 128-bit
1943c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom# key [on single-issue Xscale PXA250 core].
20656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
21656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project# May 2007.
22656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#
23656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project# AES_set_[en|de]crypt_key is added.
24656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
2543c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom# July 2010.
2643c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom#
2743c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom# Rescheduling for dual-issue pipeline resulted in 12% improvement on
2843c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom# Cortex A8 core and ~25 cycles per byte processed with 128-bit key.
2943c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom
30392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom# February 2011.
31392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom#
32392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom# Profiler-assisted and platform-specific optimization resulted in 16%
33392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom# improvement on Cortex A8 core and ~21.5 cycles per byte.
34392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom
3543c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstromwhile (($output=shift) && ($output!~/^\w[\w\-]*\.\w+$/)) {}
3643c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstromopen STDOUT,">$output";
3743c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom
38656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project$s0="r0";
39656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project$s1="r1";
40656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project$s2="r2";
41656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project$s3="r3";
42656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project$t1="r4";
43656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project$t2="r5";
44656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project$t3="r6";
45656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project$i1="r7";
46656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project$i2="r8";
47656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project$i3="r9";
48656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
49656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project$tbl="r10";
50656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project$key="r11";
51656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project$rounds="r12";
52656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
53656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project$code=<<___;
54392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom#include "arm_arch.h"
55656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.text
56656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.code	32
57656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
58656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.type	AES_Te,%object
59656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.align	5
60656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source ProjectAES_Te:
61656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word	0xc66363a5, 0xf87c7c84, 0xee777799, 0xf67b7b8d
62656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word	0xfff2f20d, 0xd66b6bbd, 0xde6f6fb1, 0x91c5c554
63656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word	0x60303050, 0x02010103, 0xce6767a9, 0x562b2b7d
64656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word	0xe7fefe19, 0xb5d7d762, 0x4dababe6, 0xec76769a
65656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word	0x8fcaca45, 0x1f82829d, 0x89c9c940, 0xfa7d7d87
66656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word	0xeffafa15, 0xb25959eb, 0x8e4747c9, 0xfbf0f00b
67656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word	0x41adadec, 0xb3d4d467, 0x5fa2a2fd, 0x45afafea
68656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word	0x239c9cbf, 0x53a4a4f7, 0xe4727296, 0x9bc0c05b
69656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word	0x75b7b7c2, 0xe1fdfd1c, 0x3d9393ae, 0x4c26266a
70656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word	0x6c36365a, 0x7e3f3f41, 0xf5f7f702, 0x83cccc4f
71656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word	0x6834345c, 0x51a5a5f4, 0xd1e5e534, 0xf9f1f108
72656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word	0xe2717193, 0xabd8d873, 0x62313153, 0x2a15153f
73656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word	0x0804040c, 0x95c7c752, 0x46232365, 0x9dc3c35e
74656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word	0x30181828, 0x379696a1, 0x0a05050f, 0x2f9a9ab5
75656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word	0x0e070709, 0x24121236, 0x1b80809b, 0xdfe2e23d
76656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word	0xcdebeb26, 0x4e272769, 0x7fb2b2cd, 0xea75759f
77656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word	0x1209091b, 0x1d83839e, 0x582c2c74, 0x341a1a2e
78656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word	0x361b1b2d, 0xdc6e6eb2, 0xb45a5aee, 0x5ba0a0fb
79656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word	0xa45252f6, 0x763b3b4d, 0xb7d6d661, 0x7db3b3ce
80656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word	0x5229297b, 0xdde3e33e, 0x5e2f2f71, 0x13848497
81656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word	0xa65353f5, 0xb9d1d168, 0x00000000, 0xc1eded2c
82656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word	0x40202060, 0xe3fcfc1f, 0x79b1b1c8, 0xb65b5bed
83656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word	0xd46a6abe, 0x8dcbcb46, 0x67bebed9, 0x7239394b
84656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word	0x944a4ade, 0x984c4cd4, 0xb05858e8, 0x85cfcf4a
85656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word	0xbbd0d06b, 0xc5efef2a, 0x4faaaae5, 0xedfbfb16
86656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word	0x864343c5, 0x9a4d4dd7, 0x66333355, 0x11858594
87656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word	0x8a4545cf, 0xe9f9f910, 0x04020206, 0xfe7f7f81
88656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word	0xa05050f0, 0x783c3c44, 0x259f9fba, 0x4ba8a8e3
89656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word	0xa25151f3, 0x5da3a3fe, 0x804040c0, 0x058f8f8a
90656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word	0x3f9292ad, 0x219d9dbc, 0x70383848, 0xf1f5f504
91656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word	0x63bcbcdf, 0x77b6b6c1, 0xafdada75, 0x42212163
92656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word	0x20101030, 0xe5ffff1a, 0xfdf3f30e, 0xbfd2d26d
93656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word	0x81cdcd4c, 0x180c0c14, 0x26131335, 0xc3ecec2f
94656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word	0xbe5f5fe1, 0x359797a2, 0x884444cc, 0x2e171739
95656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word	0x93c4c457, 0x55a7a7f2, 0xfc7e7e82, 0x7a3d3d47
96656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word	0xc86464ac, 0xba5d5de7, 0x3219192b, 0xe6737395
97656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word	0xc06060a0, 0x19818198, 0x9e4f4fd1, 0xa3dcdc7f
98656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word	0x44222266, 0x542a2a7e, 0x3b9090ab, 0x0b888883
99656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word	0x8c4646ca, 0xc7eeee29, 0x6bb8b8d3, 0x2814143c
100656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word	0xa7dede79, 0xbc5e5ee2, 0x160b0b1d, 0xaddbdb76
101656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word	0xdbe0e03b, 0x64323256, 0x743a3a4e, 0x140a0a1e
102656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word	0x924949db, 0x0c06060a, 0x4824246c, 0xb85c5ce4
103656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word	0x9fc2c25d, 0xbdd3d36e, 0x43acacef, 0xc46262a6
104656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word	0x399191a8, 0x319595a4, 0xd3e4e437, 0xf279798b
105656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word	0xd5e7e732, 0x8bc8c843, 0x6e373759, 0xda6d6db7
106656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word	0x018d8d8c, 0xb1d5d564, 0x9c4e4ed2, 0x49a9a9e0
107656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word	0xd86c6cb4, 0xac5656fa, 0xf3f4f407, 0xcfeaea25
108656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word	0xca6565af, 0xf47a7a8e, 0x47aeaee9, 0x10080818
109656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word	0x6fbabad5, 0xf0787888, 0x4a25256f, 0x5c2e2e72
110656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word	0x381c1c24, 0x57a6a6f1, 0x73b4b4c7, 0x97c6c651
111656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word	0xcbe8e823, 0xa1dddd7c, 0xe874749c, 0x3e1f1f21
112656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word	0x964b4bdd, 0x61bdbddc, 0x0d8b8b86, 0x0f8a8a85
113656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word	0xe0707090, 0x7c3e3e42, 0x71b5b5c4, 0xcc6666aa
114656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word	0x904848d8, 0x06030305, 0xf7f6f601, 0x1c0e0e12
115656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word	0xc26161a3, 0x6a35355f, 0xae5757f9, 0x69b9b9d0
116656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word	0x17868691, 0x99c1c158, 0x3a1d1d27, 0x279e9eb9
117656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word	0xd9e1e138, 0xebf8f813, 0x2b9898b3, 0x22111133
118656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word	0xd26969bb, 0xa9d9d970, 0x078e8e89, 0x339494a7
119656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word	0x2d9b9bb6, 0x3c1e1e22, 0x15878792, 0xc9e9e920
120656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word	0x87cece49, 0xaa5555ff, 0x50282878, 0xa5dfdf7a
121656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word	0x038c8c8f, 0x59a1a1f8, 0x09898980, 0x1a0d0d17
122656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word	0x65bfbfda, 0xd7e6e631, 0x844242c6, 0xd06868b8
123656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word	0x824141c3, 0x299999b0, 0x5a2d2d77, 0x1e0f0f11
124656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word	0x7bb0b0cb, 0xa85454fc, 0x6dbbbbd6, 0x2c16163a
125656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project@ Te4[256]
126656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.byte	0x63, 0x7c, 0x77, 0x7b, 0xf2, 0x6b, 0x6f, 0xc5
127656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.byte	0x30, 0x01, 0x67, 0x2b, 0xfe, 0xd7, 0xab, 0x76
128656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.byte	0xca, 0x82, 0xc9, 0x7d, 0xfa, 0x59, 0x47, 0xf0
129656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.byte	0xad, 0xd4, 0xa2, 0xaf, 0x9c, 0xa4, 0x72, 0xc0
130656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.byte	0xb7, 0xfd, 0x93, 0x26, 0x36, 0x3f, 0xf7, 0xcc
131656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.byte	0x34, 0xa5, 0xe5, 0xf1, 0x71, 0xd8, 0x31, 0x15
132656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.byte	0x04, 0xc7, 0x23, 0xc3, 0x18, 0x96, 0x05, 0x9a
133656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.byte	0x07, 0x12, 0x80, 0xe2, 0xeb, 0x27, 0xb2, 0x75
134656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.byte	0x09, 0x83, 0x2c, 0x1a, 0x1b, 0x6e, 0x5a, 0xa0
135656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.byte	0x52, 0x3b, 0xd6, 0xb3, 0x29, 0xe3, 0x2f, 0x84
136656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.byte	0x53, 0xd1, 0x00, 0xed, 0x20, 0xfc, 0xb1, 0x5b
137656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.byte	0x6a, 0xcb, 0xbe, 0x39, 0x4a, 0x4c, 0x58, 0xcf
138656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.byte	0xd0, 0xef, 0xaa, 0xfb, 0x43, 0x4d, 0x33, 0x85
139656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.byte	0x45, 0xf9, 0x02, 0x7f, 0x50, 0x3c, 0x9f, 0xa8
140656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.byte	0x51, 0xa3, 0x40, 0x8f, 0x92, 0x9d, 0x38, 0xf5
141656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.byte	0xbc, 0xb6, 0xda, 0x21, 0x10, 0xff, 0xf3, 0xd2
142656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.byte	0xcd, 0x0c, 0x13, 0xec, 0x5f, 0x97, 0x44, 0x17
143656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.byte	0xc4, 0xa7, 0x7e, 0x3d, 0x64, 0x5d, 0x19, 0x73
144656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.byte	0x60, 0x81, 0x4f, 0xdc, 0x22, 0x2a, 0x90, 0x88
145656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.byte	0x46, 0xee, 0xb8, 0x14, 0xde, 0x5e, 0x0b, 0xdb
146656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.byte	0xe0, 0x32, 0x3a, 0x0a, 0x49, 0x06, 0x24, 0x5c
147656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.byte	0xc2, 0xd3, 0xac, 0x62, 0x91, 0x95, 0xe4, 0x79
148656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.byte	0xe7, 0xc8, 0x37, 0x6d, 0x8d, 0xd5, 0x4e, 0xa9
149656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.byte	0x6c, 0x56, 0xf4, 0xea, 0x65, 0x7a, 0xae, 0x08
150656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.byte	0xba, 0x78, 0x25, 0x2e, 0x1c, 0xa6, 0xb4, 0xc6
151656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.byte	0xe8, 0xdd, 0x74, 0x1f, 0x4b, 0xbd, 0x8b, 0x8a
152656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.byte	0x70, 0x3e, 0xb5, 0x66, 0x48, 0x03, 0xf6, 0x0e
153656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.byte	0x61, 0x35, 0x57, 0xb9, 0x86, 0xc1, 0x1d, 0x9e
154656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.byte	0xe1, 0xf8, 0x98, 0x11, 0x69, 0xd9, 0x8e, 0x94
155656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.byte	0x9b, 0x1e, 0x87, 0xe9, 0xce, 0x55, 0x28, 0xdf
156656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.byte	0x8c, 0xa1, 0x89, 0x0d, 0xbf, 0xe6, 0x42, 0x68
157656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.byte	0x41, 0x99, 0x2d, 0x0f, 0xb0, 0x54, 0xbb, 0x16
158656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project@ rcon[]
159656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word	0x01000000, 0x02000000, 0x04000000, 0x08000000
160656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word	0x10000000, 0x20000000, 0x40000000, 0x80000000
161656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word	0x1B000000, 0x36000000, 0, 0, 0, 0, 0, 0
162656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.size	AES_Te,.-AES_Te
163656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
164656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project@ void AES_encrypt(const unsigned char *in, unsigned char *out,
165656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project@ 		 const AES_KEY *key) {
166656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.global AES_encrypt
167656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.type   AES_encrypt,%function
168656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.align	5
169656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source ProjectAES_encrypt:
170656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	sub	r3,pc,#8		@ AES_encrypt
171656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	stmdb   sp!,{r1,r4-r12,lr}
172656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	mov	$rounds,r0		@ inp
173656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	mov	$key,r2
174656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	sub	$tbl,r3,#AES_encrypt-AES_Te	@ Te
175392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom#if __ARM_ARCH__<7
176656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	ldrb	$s0,[$rounds,#3]	@ load input data in endian-neutral
177656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	ldrb	$t1,[$rounds,#2]	@ manner...
178656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	ldrb	$t2,[$rounds,#1]
179656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	ldrb	$t3,[$rounds,#0]
180656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	orr	$s0,$s0,$t1,lsl#8
181656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	ldrb	$s1,[$rounds,#7]
18243c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom	orr	$s0,$s0,$t2,lsl#16
183656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	ldrb	$t1,[$rounds,#6]
18443c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom	orr	$s0,$s0,$t3,lsl#24
185656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	ldrb	$t2,[$rounds,#5]
186656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	ldrb	$t3,[$rounds,#4]
187656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	orr	$s1,$s1,$t1,lsl#8
188656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	ldrb	$s2,[$rounds,#11]
18943c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom	orr	$s1,$s1,$t2,lsl#16
190656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	ldrb	$t1,[$rounds,#10]
19143c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom	orr	$s1,$s1,$t3,lsl#24
192656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	ldrb	$t2,[$rounds,#9]
193656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	ldrb	$t3,[$rounds,#8]
194656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	orr	$s2,$s2,$t1,lsl#8
195656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	ldrb	$s3,[$rounds,#15]
19643c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom	orr	$s2,$s2,$t2,lsl#16
197656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	ldrb	$t1,[$rounds,#14]
19843c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom	orr	$s2,$s2,$t3,lsl#24
199656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	ldrb	$t2,[$rounds,#13]
200656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	ldrb	$t3,[$rounds,#12]
201656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	orr	$s3,$s3,$t1,lsl#8
202656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	orr	$s3,$s3,$t2,lsl#16
203656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	orr	$s3,$s3,$t3,lsl#24
204392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom#else
205392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	ldr	$s0,[$rounds,#0]
206392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	ldr	$s1,[$rounds,#4]
207392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	ldr	$s2,[$rounds,#8]
208392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	ldr	$s3,[$rounds,#12]
209392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom#ifdef __ARMEL__
210392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	rev	$s0,$s0
211392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	rev	$s1,$s1
212392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	rev	$s2,$s2
213392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	rev	$s3,$s3
214392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom#endif
215392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom#endif
216656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	bl	_armv4_AES_encrypt
217656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
218656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	ldr	$rounds,[sp],#4		@ pop out
219392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom#if __ARM_ARCH__>=7
220392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom#ifdef __ARMEL__
221392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	rev	$s0,$s0
222392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	rev	$s1,$s1
223392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	rev	$s2,$s2
224392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	rev	$s3,$s3
225392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom#endif
226392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	str	$s0,[$rounds,#0]
227392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	str	$s1,[$rounds,#4]
228392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	str	$s2,[$rounds,#8]
229392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	str	$s3,[$rounds,#12]
230392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom#else
231656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	mov	$t1,$s0,lsr#24		@ write output in endian-neutral
232656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	mov	$t2,$s0,lsr#16		@ manner...
233656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	mov	$t3,$s0,lsr#8
234656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	strb	$t1,[$rounds,#0]
235656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	strb	$t2,[$rounds,#1]
236656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	mov	$t1,$s1,lsr#24
23743c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom	strb	$t3,[$rounds,#2]
238656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	mov	$t2,$s1,lsr#16
23943c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom	strb	$s0,[$rounds,#3]
240656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	mov	$t3,$s1,lsr#8
241656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	strb	$t1,[$rounds,#4]
242656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	strb	$t2,[$rounds,#5]
243656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	mov	$t1,$s2,lsr#24
24443c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom	strb	$t3,[$rounds,#6]
245656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	mov	$t2,$s2,lsr#16
24643c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom	strb	$s1,[$rounds,#7]
247656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	mov	$t3,$s2,lsr#8
248656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	strb	$t1,[$rounds,#8]
249656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	strb	$t2,[$rounds,#9]
250656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	mov	$t1,$s3,lsr#24
25143c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom	strb	$t3,[$rounds,#10]
252656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	mov	$t2,$s3,lsr#16
25343c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom	strb	$s2,[$rounds,#11]
254656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	mov	$t3,$s3,lsr#8
255656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	strb	$t1,[$rounds,#12]
256656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	strb	$t2,[$rounds,#13]
257656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	strb	$t3,[$rounds,#14]
258656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	strb	$s3,[$rounds,#15]
259392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom#endif
260392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom#if __ARM_ARCH__>=5
261392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	ldmia	sp!,{r4-r12,pc}
262392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom#else
263656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	ldmia   sp!,{r4-r12,lr}
264656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	tst	lr,#1
265656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	moveq	pc,lr			@ be binary compatible with V4, yet
266656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	bx	lr			@ interoperable with Thumb ISA:-)
267392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom#endif
268656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.size	AES_encrypt,.-AES_encrypt
269656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
270656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.type   _armv4_AES_encrypt,%function
271656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.align	2
272656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project_armv4_AES_encrypt:
273656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	str	lr,[sp,#-4]!		@ push lr
27443c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom	ldmia	$key!,{$t1-$i1}
275656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	eor	$s0,$s0,$t1
27643c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom	ldr	$rounds,[$key,#240-16]
277656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	eor	$s1,$s1,$t2
278656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	eor	$s2,$s2,$t3
279656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	eor	$s3,$s3,$i1
280656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	sub	$rounds,$rounds,#1
281656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	mov	lr,#255
282656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
28343c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom	and	$i1,lr,$s0
284656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	and	$i2,lr,$s0,lsr#8
285656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	and	$i3,lr,$s0,lsr#16
286656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	mov	$s0,$s0,lsr#24
28743c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom.Lenc_loop:
288656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	ldr	$t1,[$tbl,$i1,lsl#2]	@ Te3[s0>>0]
289656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	and	$i1,lr,$s1,lsr#16	@ i0
29043c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom	ldr	$t2,[$tbl,$i2,lsl#2]	@ Te2[s0>>8]
291656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	and	$i2,lr,$s1
29243c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom	ldr	$t3,[$tbl,$i3,lsl#2]	@ Te1[s0>>16]
293656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	and	$i3,lr,$s1,lsr#8
29443c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom	ldr	$s0,[$tbl,$s0,lsl#2]	@ Te0[s0>>24]
295656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	mov	$s1,$s1,lsr#24
29643c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom
297656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	ldr	$i1,[$tbl,$i1,lsl#2]	@ Te1[s1>>16]
298656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	ldr	$i2,[$tbl,$i2,lsl#2]	@ Te3[s1>>0]
299656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	ldr	$i3,[$tbl,$i3,lsl#2]	@ Te2[s1>>8]
300656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	eor	$s0,$s0,$i1,ror#8
30143c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom	ldr	$s1,[$tbl,$s1,lsl#2]	@ Te0[s1>>24]
302656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	and	$i1,lr,$s2,lsr#8	@ i0
30343c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom	eor	$t2,$t2,$i2,ror#8
304656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	and	$i2,lr,$s2,lsr#16	@ i1
30543c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom	eor	$t3,$t3,$i3,ror#8
306656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	and	$i3,lr,$s2
307656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	ldr	$i1,[$tbl,$i1,lsl#2]	@ Te2[s2>>8]
308392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	eor	$s1,$s1,$t1,ror#24
309392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	ldr	$i2,[$tbl,$i2,lsl#2]	@ Te1[s2>>16]
31043c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom	mov	$s2,$s2,lsr#24
31143c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom
312656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	ldr	$i3,[$tbl,$i3,lsl#2]	@ Te3[s2>>0]
313656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	eor	$s0,$s0,$i1,ror#16
31443c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom	ldr	$s2,[$tbl,$s2,lsl#2]	@ Te0[s2>>24]
315656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	and	$i1,lr,$s3		@ i0
31643c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom	eor	$s1,$s1,$i2,ror#8
317656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	and	$i2,lr,$s3,lsr#8	@ i1
31843c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom	eor	$t3,$t3,$i3,ror#16
319656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	and	$i3,lr,$s3,lsr#16	@ i2
320656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	ldr	$i1,[$tbl,$i1,lsl#2]	@ Te3[s3>>0]
321392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	eor	$s2,$s2,$t2,ror#16
322392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	ldr	$i2,[$tbl,$i2,lsl#2]	@ Te2[s3>>8]
32343c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom	mov	$s3,$s3,lsr#24
32443c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom
325656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	ldr	$i3,[$tbl,$i3,lsl#2]	@ Te1[s3>>16]
326656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	eor	$s0,$s0,$i1,ror#24
32743c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom	ldr	$i1,[$key],#16
328392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	eor	$s1,$s1,$i2,ror#16
329392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	ldr	$s3,[$tbl,$s3,lsl#2]	@ Te0[s3>>24]
330656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	eor	$s2,$s2,$i3,ror#8
33143c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom	ldr	$t1,[$key,#-12]
332656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	eor	$s3,$s3,$t3,ror#8
333656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
33443c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom	ldr	$t2,[$key,#-8]
33543c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom	eor	$s0,$s0,$i1
33643c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom	ldr	$t3,[$key,#-4]
33743c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom	and	$i1,lr,$s0
33843c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom	eor	$s1,$s1,$t1
33943c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom	and	$i2,lr,$s0,lsr#8
34043c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom	eor	$s2,$s2,$t2
34143c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom	and	$i3,lr,$s0,lsr#16
34243c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom	eor	$s3,$s3,$t3
34343c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom	mov	$s0,$s0,lsr#24
344656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
345656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	subs	$rounds,$rounds,#1
346656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	bne	.Lenc_loop
347656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
348656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	add	$tbl,$tbl,#2
349656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
350656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	ldrb	$t1,[$tbl,$i1,lsl#2]	@ Te4[s0>>0]
351656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	and	$i1,lr,$s1,lsr#16	@ i0
35243c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom	ldrb	$t2,[$tbl,$i2,lsl#2]	@ Te4[s0>>8]
353656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	and	$i2,lr,$s1
35443c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom	ldrb	$t3,[$tbl,$i3,lsl#2]	@ Te4[s0>>16]
355656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	and	$i3,lr,$s1,lsr#8
35643c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom	ldrb	$s0,[$tbl,$s0,lsl#2]	@ Te4[s0>>24]
357656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	mov	$s1,$s1,lsr#24
35843c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom
359656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	ldrb	$i1,[$tbl,$i1,lsl#2]	@ Te4[s1>>16]
360656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	ldrb	$i2,[$tbl,$i2,lsl#2]	@ Te4[s1>>0]
361656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	ldrb	$i3,[$tbl,$i3,lsl#2]	@ Te4[s1>>8]
362656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	eor	$s0,$i1,$s0,lsl#8
36343c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom	ldrb	$s1,[$tbl,$s1,lsl#2]	@ Te4[s1>>24]
364656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	and	$i1,lr,$s2,lsr#8	@ i0
36543c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom	eor	$t2,$i2,$t2,lsl#8
366656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	and	$i2,lr,$s2,lsr#16	@ i1
36743c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom	eor	$t3,$i3,$t3,lsl#8
368656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	and	$i3,lr,$s2
369656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	ldrb	$i1,[$tbl,$i1,lsl#2]	@ Te4[s2>>8]
370392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	eor	$s1,$t1,$s1,lsl#24
371392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	ldrb	$i2,[$tbl,$i2,lsl#2]	@ Te4[s2>>16]
37243c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom	mov	$s2,$s2,lsr#24
37343c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom
374656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	ldrb	$i3,[$tbl,$i3,lsl#2]	@ Te4[s2>>0]
375656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	eor	$s0,$i1,$s0,lsl#8
37643c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom	ldrb	$s2,[$tbl,$s2,lsl#2]	@ Te4[s2>>24]
377656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	and	$i1,lr,$s3		@ i0
37843c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom	eor	$s1,$s1,$i2,lsl#16
379656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	and	$i2,lr,$s3,lsr#8	@ i1
38043c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom	eor	$t3,$i3,$t3,lsl#8
381656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	and	$i3,lr,$s3,lsr#16	@ i2
382656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	ldrb	$i1,[$tbl,$i1,lsl#2]	@ Te4[s3>>0]
383392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	eor	$s2,$t2,$s2,lsl#24
384392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	ldrb	$i2,[$tbl,$i2,lsl#2]	@ Te4[s3>>8]
38543c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom	mov	$s3,$s3,lsr#24
38643c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom
387656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	ldrb	$i3,[$tbl,$i3,lsl#2]	@ Te4[s3>>16]
388656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	eor	$s0,$i1,$s0,lsl#8
38943c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom	ldr	$i1,[$key,#0]
390392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	ldrb	$s3,[$tbl,$s3,lsl#2]	@ Te4[s3>>24]
391656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	eor	$s1,$s1,$i2,lsl#8
39243c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom	ldr	$t1,[$key,#4]
393656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	eor	$s2,$s2,$i3,lsl#16
39443c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom	ldr	$t2,[$key,#8]
395656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	eor	$s3,$t3,$s3,lsl#24
39643c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom	ldr	$t3,[$key,#12]
397656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
39843c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom	eor	$s0,$s0,$i1
39943c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom	eor	$s1,$s1,$t1
40043c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom	eor	$s2,$s2,$t2
40143c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom	eor	$s3,$s3,$t3
402656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
403656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	sub	$tbl,$tbl,#2
40443c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom	ldr	pc,[sp],#4		@ pop and return
405656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.size	_armv4_AES_encrypt,.-_armv4_AES_encrypt
406656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
407392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom.global private_AES_set_encrypt_key
408392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom.type   private_AES_set_encrypt_key,%function
409656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.align	5
410392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstromprivate_AES_set_encrypt_key:
411a1a5710c055e139ea00e785f9eb55b3af3e4dab1Brian Carlstrom_armv4_AES_set_encrypt_key:
412656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	sub	r3,pc,#8		@ AES_set_encrypt_key
413656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	teq	r0,#0
414656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	moveq	r0,#-1
415656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	beq	.Labrt
416656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	teq	r2,#0
417656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	moveq	r0,#-1
418656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	beq	.Labrt
419656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
420656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	teq	r1,#128
421656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	beq	.Lok
422656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	teq	r1,#192
423656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	beq	.Lok
424656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	teq	r1,#256
425656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	movne	r0,#-1
426656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	bne	.Labrt
427656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
428656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.Lok:	stmdb   sp!,{r4-r12,lr}
429a1a5710c055e139ea00e785f9eb55b3af3e4dab1Brian Carlstrom	sub	$tbl,r3,#_armv4_AES_set_encrypt_key-AES_Te-1024	@ Te4
430656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
431656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	mov	$rounds,r0		@ inp
432656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	mov	lr,r1			@ bits
433656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	mov	$key,r2			@ key
434656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
435392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom#if __ARM_ARCH__<7
436656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	ldrb	$s0,[$rounds,#3]	@ load input data in endian-neutral
437656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	ldrb	$t1,[$rounds,#2]	@ manner...
438656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	ldrb	$t2,[$rounds,#1]
439656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	ldrb	$t3,[$rounds,#0]
440656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	orr	$s0,$s0,$t1,lsl#8
441656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	ldrb	$s1,[$rounds,#7]
44243c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom	orr	$s0,$s0,$t2,lsl#16
443656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	ldrb	$t1,[$rounds,#6]
44443c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom	orr	$s0,$s0,$t3,lsl#24
445656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	ldrb	$t2,[$rounds,#5]
446656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	ldrb	$t3,[$rounds,#4]
447656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	orr	$s1,$s1,$t1,lsl#8
448656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	ldrb	$s2,[$rounds,#11]
44943c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom	orr	$s1,$s1,$t2,lsl#16
450656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	ldrb	$t1,[$rounds,#10]
45143c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom	orr	$s1,$s1,$t3,lsl#24
452656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	ldrb	$t2,[$rounds,#9]
453656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	ldrb	$t3,[$rounds,#8]
454656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	orr	$s2,$s2,$t1,lsl#8
455656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	ldrb	$s3,[$rounds,#15]
45643c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom	orr	$s2,$s2,$t2,lsl#16
457656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	ldrb	$t1,[$rounds,#14]
45843c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom	orr	$s2,$s2,$t3,lsl#24
459656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	ldrb	$t2,[$rounds,#13]
460656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	ldrb	$t3,[$rounds,#12]
461656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	orr	$s3,$s3,$t1,lsl#8
462656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	str	$s0,[$key],#16
46343c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom	orr	$s3,$s3,$t2,lsl#16
464656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	str	$s1,[$key,#-12]
46543c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom	orr	$s3,$s3,$t3,lsl#24
466656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	str	$s2,[$key,#-8]
467656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	str	$s3,[$key,#-4]
468392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom#else
469392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	ldr	$s0,[$rounds,#0]
470392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	ldr	$s1,[$rounds,#4]
471392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	ldr	$s2,[$rounds,#8]
472392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	ldr	$s3,[$rounds,#12]
473392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom#ifdef __ARMEL__
474392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	rev	$s0,$s0
475392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	rev	$s1,$s1
476392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	rev	$s2,$s2
477392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	rev	$s3,$s3
478392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom#endif
479392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	str	$s0,[$key],#16
480392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	str	$s1,[$key,#-12]
481392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	str	$s2,[$key,#-8]
482392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	str	$s3,[$key,#-4]
483392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom#endif
484656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
485656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	teq	lr,#128
486656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	bne	.Lnot128
487656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	mov	$rounds,#10
488656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	str	$rounds,[$key,#240-16]
489656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	add	$t3,$tbl,#256			@ rcon
490656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	mov	lr,#255
491656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
492656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.L128_loop:
493656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	and	$t2,lr,$s3,lsr#24
494656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	and	$i1,lr,$s3,lsr#16
495656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	ldrb	$t2,[$tbl,$t2]
49643c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom	and	$i2,lr,$s3,lsr#8
497656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	ldrb	$i1,[$tbl,$i1]
49843c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom	and	$i3,lr,$s3
499656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	ldrb	$i2,[$tbl,$i2]
500656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	orr	$t2,$t2,$i1,lsl#24
50143c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom	ldrb	$i3,[$tbl,$i3]
502656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	orr	$t2,$t2,$i2,lsl#16
50343c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom	ldr	$t1,[$t3],#4			@ rcon[i++]
504656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	orr	$t2,$t2,$i3,lsl#8
505656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	eor	$t2,$t2,$t1
506656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	eor	$s0,$s0,$t2			@ rk[4]=rk[0]^...
507656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	eor	$s1,$s1,$s0			@ rk[5]=rk[1]^rk[4]
508656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	str	$s0,[$key],#16
50943c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom	eor	$s2,$s2,$s1			@ rk[6]=rk[2]^rk[5]
510656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	str	$s1,[$key,#-12]
51143c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom	eor	$s3,$s3,$s2			@ rk[7]=rk[3]^rk[6]
512656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	str	$s2,[$key,#-8]
513656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	subs	$rounds,$rounds,#1
51443c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom	str	$s3,[$key,#-4]
515656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	bne	.L128_loop
516656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	sub	r2,$key,#176
517656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	b	.Ldone
518656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
519656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.Lnot128:
520392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom#if __ARM_ARCH__<7
521656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	ldrb	$i2,[$rounds,#19]
522656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	ldrb	$t1,[$rounds,#18]
523656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	ldrb	$t2,[$rounds,#17]
524656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	ldrb	$t3,[$rounds,#16]
525656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	orr	$i2,$i2,$t1,lsl#8
526656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	ldrb	$i3,[$rounds,#23]
52743c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom	orr	$i2,$i2,$t2,lsl#16
528656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	ldrb	$t1,[$rounds,#22]
52943c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom	orr	$i2,$i2,$t3,lsl#24
530656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	ldrb	$t2,[$rounds,#21]
531656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	ldrb	$t3,[$rounds,#20]
532656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	orr	$i3,$i3,$t1,lsl#8
533656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	orr	$i3,$i3,$t2,lsl#16
534656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	str	$i2,[$key],#8
53543c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom	orr	$i3,$i3,$t3,lsl#24
536656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	str	$i3,[$key,#-4]
537392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom#else
538392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	ldr	$i2,[$rounds,#16]
539392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	ldr	$i3,[$rounds,#20]
540392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom#ifdef __ARMEL__
541392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	rev	$i2,$i2
542392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	rev	$i3,$i3
543392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom#endif
544392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	str	$i2,[$key],#8
545392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	str	$i3,[$key,#-4]
546392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom#endif
547656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
548656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	teq	lr,#192
549656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	bne	.Lnot192
550656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	mov	$rounds,#12
551656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	str	$rounds,[$key,#240-24]
552656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	add	$t3,$tbl,#256			@ rcon
553656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	mov	lr,#255
554656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	mov	$rounds,#8
555656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
556656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.L192_loop:
557656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	and	$t2,lr,$i3,lsr#24
558656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	and	$i1,lr,$i3,lsr#16
559656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	ldrb	$t2,[$tbl,$t2]
56043c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom	and	$i2,lr,$i3,lsr#8
561656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	ldrb	$i1,[$tbl,$i1]
56243c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom	and	$i3,lr,$i3
563656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	ldrb	$i2,[$tbl,$i2]
564656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	orr	$t2,$t2,$i1,lsl#24
56543c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom	ldrb	$i3,[$tbl,$i3]
566656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	orr	$t2,$t2,$i2,lsl#16
56743c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom	ldr	$t1,[$t3],#4			@ rcon[i++]
568656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	orr	$t2,$t2,$i3,lsl#8
569656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	eor	$i3,$t2,$t1
570656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	eor	$s0,$s0,$i3			@ rk[6]=rk[0]^...
571656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	eor	$s1,$s1,$s0			@ rk[7]=rk[1]^rk[6]
572656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	str	$s0,[$key],#24
57343c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom	eor	$s2,$s2,$s1			@ rk[8]=rk[2]^rk[7]
574656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	str	$s1,[$key,#-20]
57543c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom	eor	$s3,$s3,$s2			@ rk[9]=rk[3]^rk[8]
576656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	str	$s2,[$key,#-16]
577656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	subs	$rounds,$rounds,#1
57843c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom	str	$s3,[$key,#-12]
579656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	subeq	r2,$key,#216
580656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	beq	.Ldone
581656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
582656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	ldr	$i1,[$key,#-32]
583656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	ldr	$i2,[$key,#-28]
584656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	eor	$i1,$i1,$s3			@ rk[10]=rk[4]^rk[9]
585656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	eor	$i3,$i2,$i1			@ rk[11]=rk[5]^rk[10]
586656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	str	$i1,[$key,#-8]
587656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	str	$i3,[$key,#-4]
588656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	b	.L192_loop
589656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
590656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.Lnot192:
591392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom#if __ARM_ARCH__<7
592656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	ldrb	$i2,[$rounds,#27]
593656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	ldrb	$t1,[$rounds,#26]
594656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	ldrb	$t2,[$rounds,#25]
595656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	ldrb	$t3,[$rounds,#24]
596656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	orr	$i2,$i2,$t1,lsl#8
597656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	ldrb	$i3,[$rounds,#31]
59843c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom	orr	$i2,$i2,$t2,lsl#16
599656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	ldrb	$t1,[$rounds,#30]
60043c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom	orr	$i2,$i2,$t3,lsl#24
601656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	ldrb	$t2,[$rounds,#29]
602656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	ldrb	$t3,[$rounds,#28]
603656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	orr	$i3,$i3,$t1,lsl#8
604656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	orr	$i3,$i3,$t2,lsl#16
605656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	str	$i2,[$key],#8
60643c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom	orr	$i3,$i3,$t3,lsl#24
607656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	str	$i3,[$key,#-4]
608392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom#else
609392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	ldr	$i2,[$rounds,#24]
610392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	ldr	$i3,[$rounds,#28]
611392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom#ifdef __ARMEL__
612392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	rev	$i2,$i2
613392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	rev	$i3,$i3
614392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom#endif
615392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	str	$i2,[$key],#8
616392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	str	$i3,[$key,#-4]
617392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom#endif
618656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
619656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	mov	$rounds,#14
620656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	str	$rounds,[$key,#240-32]
621656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	add	$t3,$tbl,#256			@ rcon
622656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	mov	lr,#255
623656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	mov	$rounds,#7
624656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
625656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.L256_loop:
626656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	and	$t2,lr,$i3,lsr#24
627656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	and	$i1,lr,$i3,lsr#16
628656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	ldrb	$t2,[$tbl,$t2]
62943c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom	and	$i2,lr,$i3,lsr#8
630656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	ldrb	$i1,[$tbl,$i1]
63143c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom	and	$i3,lr,$i3
632656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	ldrb	$i2,[$tbl,$i2]
633656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	orr	$t2,$t2,$i1,lsl#24
63443c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom	ldrb	$i3,[$tbl,$i3]
635656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	orr	$t2,$t2,$i2,lsl#16
63643c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom	ldr	$t1,[$t3],#4			@ rcon[i++]
637656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	orr	$t2,$t2,$i3,lsl#8
638656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	eor	$i3,$t2,$t1
639656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	eor	$s0,$s0,$i3			@ rk[8]=rk[0]^...
640656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	eor	$s1,$s1,$s0			@ rk[9]=rk[1]^rk[8]
641656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	str	$s0,[$key],#32
64243c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom	eor	$s2,$s2,$s1			@ rk[10]=rk[2]^rk[9]
643656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	str	$s1,[$key,#-28]
64443c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom	eor	$s3,$s3,$s2			@ rk[11]=rk[3]^rk[10]
645656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	str	$s2,[$key,#-24]
646656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	subs	$rounds,$rounds,#1
64743c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom	str	$s3,[$key,#-20]
648656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	subeq	r2,$key,#256
649656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	beq	.Ldone
650656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
651656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	and	$t2,lr,$s3
652656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	and	$i1,lr,$s3,lsr#8
653656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	ldrb	$t2,[$tbl,$t2]
65443c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom	and	$i2,lr,$s3,lsr#16
655656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	ldrb	$i1,[$tbl,$i1]
65643c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom	and	$i3,lr,$s3,lsr#24
657656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	ldrb	$i2,[$tbl,$i2]
658656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	orr	$t2,$t2,$i1,lsl#8
65943c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom	ldrb	$i3,[$tbl,$i3]
660656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	orr	$t2,$t2,$i2,lsl#16
66143c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom	ldr	$t1,[$key,#-48]
662656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	orr	$t2,$t2,$i3,lsl#24
663656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
664656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	ldr	$i1,[$key,#-44]
665656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	ldr	$i2,[$key,#-40]
666656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	eor	$t1,$t1,$t2			@ rk[12]=rk[4]^...
66743c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom	ldr	$i3,[$key,#-36]
668656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	eor	$i1,$i1,$t1			@ rk[13]=rk[5]^rk[12]
669656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	str	$t1,[$key,#-16]
67043c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom	eor	$i2,$i2,$i1			@ rk[14]=rk[6]^rk[13]
671656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	str	$i1,[$key,#-12]
67243c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom	eor	$i3,$i3,$i2			@ rk[15]=rk[7]^rk[14]
673656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	str	$i2,[$key,#-8]
674656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	str	$i3,[$key,#-4]
675656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	b	.L256_loop
676656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
677656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.Ldone:	mov	r0,#0
678656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	ldmia   sp!,{r4-r12,lr}
679656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.Labrt:	tst	lr,#1
680656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	moveq	pc,lr			@ be binary compatible with V4, yet
681656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	bx	lr			@ interoperable with Thumb ISA:-)
682392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom.size	private_AES_set_encrypt_key,.-private_AES_set_encrypt_key
683656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
684392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom.global private_AES_set_decrypt_key
685392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom.type   private_AES_set_decrypt_key,%function
686656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.align	5
687392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstromprivate_AES_set_decrypt_key:
688656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	str	lr,[sp,#-4]!            @ push lr
689a1a5710c055e139ea00e785f9eb55b3af3e4dab1Brian Carlstrom	bl	_armv4_AES_set_encrypt_key
690656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	teq	r0,#0
691656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	ldrne	lr,[sp],#4              @ pop lr
692656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	bne	.Labrt
693656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
694656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	stmdb   sp!,{r4-r12}
695656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
696656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	ldr	$rounds,[r2,#240]	@ AES_set_encrypt_key preserves r2,
697656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	mov	$key,r2			@ which is AES_KEY *key
698656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	mov	$i1,r2
699656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	add	$i2,r2,$rounds,lsl#4
700656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
701656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.Linv:	ldr	$s0,[$i1]
702656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	ldr	$s1,[$i1,#4]
703656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	ldr	$s2,[$i1,#8]
704656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	ldr	$s3,[$i1,#12]
705656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	ldr	$t1,[$i2]
706656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	ldr	$t2,[$i2,#4]
707656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	ldr	$t3,[$i2,#8]
708656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	ldr	$i3,[$i2,#12]
709656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	str	$s0,[$i2],#-16
710656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	str	$s1,[$i2,#16+4]
711656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	str	$s2,[$i2,#16+8]
712656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	str	$s3,[$i2,#16+12]
713656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	str	$t1,[$i1],#16
714656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	str	$t2,[$i1,#-12]
715656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	str	$t3,[$i1,#-8]
716656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	str	$i3,[$i1,#-4]
717656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	teq	$i1,$i2
718656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	bne	.Linv
719656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project___
720656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project$mask80=$i1;
721656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project$mask1b=$i2;
722656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project$mask7f=$i3;
723656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project$code.=<<___;
724656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	ldr	$s0,[$key,#16]!		@ prefetch tp1
725656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	mov	$mask80,#0x80
726656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	mov	$mask1b,#0x1b
727656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	orr	$mask80,$mask80,#0x8000
728656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	orr	$mask1b,$mask1b,#0x1b00
729656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	orr	$mask80,$mask80,$mask80,lsl#16
730656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	orr	$mask1b,$mask1b,$mask1b,lsl#16
731656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	sub	$rounds,$rounds,#1
732656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	mvn	$mask7f,$mask80
733656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	mov	$rounds,$rounds,lsl#2	@ (rounds-1)*4
734656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
735656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.Lmix:	and	$t1,$s0,$mask80
736656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	and	$s1,$s0,$mask7f
737656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	sub	$t1,$t1,$t1,lsr#7
738656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	and	$t1,$t1,$mask1b
739656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	eor	$s1,$t1,$s1,lsl#1	@ tp2
740656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
741656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	and	$t1,$s1,$mask80
742656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	and	$s2,$s1,$mask7f
743656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	sub	$t1,$t1,$t1,lsr#7
744656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	and	$t1,$t1,$mask1b
745656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	eor	$s2,$t1,$s2,lsl#1	@ tp4
746656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
747656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	and	$t1,$s2,$mask80
748656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	and	$s3,$s2,$mask7f
749656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	sub	$t1,$t1,$t1,lsr#7
750656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	and	$t1,$t1,$mask1b
751656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	eor	$s3,$t1,$s3,lsl#1	@ tp8
752656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
753656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	eor	$t1,$s1,$s2
754656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	eor	$t2,$s0,$s3		@ tp9
755656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	eor	$t1,$t1,$s3		@ tpe
756656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	eor	$t1,$t1,$s1,ror#24
757656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	eor	$t1,$t1,$t2,ror#24	@ ^= ROTATE(tpb=tp9^tp2,8)
758656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	eor	$t1,$t1,$s2,ror#16
759656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	eor	$t1,$t1,$t2,ror#16	@ ^= ROTATE(tpd=tp9^tp4,16)
760656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	eor	$t1,$t1,$t2,ror#8	@ ^= ROTATE(tp9,24)
761656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
762656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	ldr	$s0,[$key,#4]		@ prefetch tp1
763656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	str	$t1,[$key],#4
764656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	subs	$rounds,$rounds,#1
765656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	bne	.Lmix
766656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
767656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	mov	r0,#0
768392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom#if __ARM_ARCH__>=5
769392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	ldmia	sp!,{r4-r12,pc}
770392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom#else
771656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	ldmia   sp!,{r4-r12,lr}
772656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	tst	lr,#1
773656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	moveq	pc,lr			@ be binary compatible with V4, yet
774656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	bx	lr			@ interoperable with Thumb ISA:-)
775392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom#endif
776392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom.size	private_AES_set_decrypt_key,.-private_AES_set_decrypt_key
777656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
778656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.type	AES_Td,%object
779656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.align	5
780656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source ProjectAES_Td:
781656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word	0x51f4a750, 0x7e416553, 0x1a17a4c3, 0x3a275e96
782656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word	0x3bab6bcb, 0x1f9d45f1, 0xacfa58ab, 0x4be30393
783656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word	0x2030fa55, 0xad766df6, 0x88cc7691, 0xf5024c25
784656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word	0x4fe5d7fc, 0xc52acbd7, 0x26354480, 0xb562a38f
785656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word	0xdeb15a49, 0x25ba1b67, 0x45ea0e98, 0x5dfec0e1
786656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word	0xc32f7502, 0x814cf012, 0x8d4697a3, 0x6bd3f9c6
787656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word	0x038f5fe7, 0x15929c95, 0xbf6d7aeb, 0x955259da
788656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word	0xd4be832d, 0x587421d3, 0x49e06929, 0x8ec9c844
789656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word	0x75c2896a, 0xf48e7978, 0x99583e6b, 0x27b971dd
790656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word	0xbee14fb6, 0xf088ad17, 0xc920ac66, 0x7dce3ab4
791656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word	0x63df4a18, 0xe51a3182, 0x97513360, 0x62537f45
792656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word	0xb16477e0, 0xbb6bae84, 0xfe81a01c, 0xf9082b94
793656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word	0x70486858, 0x8f45fd19, 0x94de6c87, 0x527bf8b7
794656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word	0xab73d323, 0x724b02e2, 0xe31f8f57, 0x6655ab2a
795656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word	0xb2eb2807, 0x2fb5c203, 0x86c57b9a, 0xd33708a5
796656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word	0x302887f2, 0x23bfa5b2, 0x02036aba, 0xed16825c
797656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word	0x8acf1c2b, 0xa779b492, 0xf307f2f0, 0x4e69e2a1
798656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word	0x65daf4cd, 0x0605bed5, 0xd134621f, 0xc4a6fe8a
799656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word	0x342e539d, 0xa2f355a0, 0x058ae132, 0xa4f6eb75
800656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word	0x0b83ec39, 0x4060efaa, 0x5e719f06, 0xbd6e1051
801656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word	0x3e218af9, 0x96dd063d, 0xdd3e05ae, 0x4de6bd46
802656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word	0x91548db5, 0x71c45d05, 0x0406d46f, 0x605015ff
803656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word	0x1998fb24, 0xd6bde997, 0x894043cc, 0x67d99e77
804656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word	0xb0e842bd, 0x07898b88, 0xe7195b38, 0x79c8eedb
805656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word	0xa17c0a47, 0x7c420fe9, 0xf8841ec9, 0x00000000
806656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word	0x09808683, 0x322bed48, 0x1e1170ac, 0x6c5a724e
807656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word	0xfd0efffb, 0x0f853856, 0x3daed51e, 0x362d3927
808656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word	0x0a0fd964, 0x685ca621, 0x9b5b54d1, 0x24362e3a
809656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word	0x0c0a67b1, 0x9357e70f, 0xb4ee96d2, 0x1b9b919e
810656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word	0x80c0c54f, 0x61dc20a2, 0x5a774b69, 0x1c121a16
811656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word	0xe293ba0a, 0xc0a02ae5, 0x3c22e043, 0x121b171d
812656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word	0x0e090d0b, 0xf28bc7ad, 0x2db6a8b9, 0x141ea9c8
813656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word	0x57f11985, 0xaf75074c, 0xee99ddbb, 0xa37f60fd
814656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word	0xf701269f, 0x5c72f5bc, 0x44663bc5, 0x5bfb7e34
815656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word	0x8b432976, 0xcb23c6dc, 0xb6edfc68, 0xb8e4f163
816656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word	0xd731dcca, 0x42638510, 0x13972240, 0x84c61120
817656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word	0x854a247d, 0xd2bb3df8, 0xaef93211, 0xc729a16d
818656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word	0x1d9e2f4b, 0xdcb230f3, 0x0d8652ec, 0x77c1e3d0
819656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word	0x2bb3166c, 0xa970b999, 0x119448fa, 0x47e96422
820656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word	0xa8fc8cc4, 0xa0f03f1a, 0x567d2cd8, 0x223390ef
821656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word	0x87494ec7, 0xd938d1c1, 0x8ccaa2fe, 0x98d40b36
822656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word	0xa6f581cf, 0xa57ade28, 0xdab78e26, 0x3fadbfa4
823656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word	0x2c3a9de4, 0x5078920d, 0x6a5fcc9b, 0x547e4662
824656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word	0xf68d13c2, 0x90d8b8e8, 0x2e39f75e, 0x82c3aff5
825656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word	0x9f5d80be, 0x69d0937c, 0x6fd52da9, 0xcf2512b3
826656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word	0xc8ac993b, 0x10187da7, 0xe89c636e, 0xdb3bbb7b
827656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word	0xcd267809, 0x6e5918f4, 0xec9ab701, 0x834f9aa8
828656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word	0xe6956e65, 0xaaffe67e, 0x21bccf08, 0xef15e8e6
829656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word	0xbae79bd9, 0x4a6f36ce, 0xea9f09d4, 0x29b07cd6
830656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word	0x31a4b2af, 0x2a3f2331, 0xc6a59430, 0x35a266c0
831656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word	0x744ebc37, 0xfc82caa6, 0xe090d0b0, 0x33a7d815
832656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word	0xf104984a, 0x41ecdaf7, 0x7fcd500e, 0x1791f62f
833656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word	0x764dd68d, 0x43efb04d, 0xccaa4d54, 0xe49604df
834656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word	0x9ed1b5e3, 0x4c6a881b, 0xc12c1fb8, 0x4665517f
835656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word	0x9d5eea04, 0x018c355d, 0xfa877473, 0xfb0b412e
836656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word	0xb3671d5a, 0x92dbd252, 0xe9105633, 0x6dd64713
837656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word	0x9ad7618c, 0x37a10c7a, 0x59f8148e, 0xeb133c89
838656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word	0xcea927ee, 0xb761c935, 0xe11ce5ed, 0x7a47b13c
839656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word	0x9cd2df59, 0x55f2733f, 0x1814ce79, 0x73c737bf
840656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word	0x53f7cdea, 0x5ffdaa5b, 0xdf3d6f14, 0x7844db86
841656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word	0xcaaff381, 0xb968c43e, 0x3824342c, 0xc2a3405f
842656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word	0x161dc372, 0xbce2250c, 0x283c498b, 0xff0d9541
843656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word	0x39a80171, 0x080cb3de, 0xd8b4e49c, 0x6456c190
844656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word	0x7bcb8461, 0xd532b670, 0x486c5c74, 0xd0b85742
845656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project@ Td4[256]
846656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.byte	0x52, 0x09, 0x6a, 0xd5, 0x30, 0x36, 0xa5, 0x38
847656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.byte	0xbf, 0x40, 0xa3, 0x9e, 0x81, 0xf3, 0xd7, 0xfb
848656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.byte	0x7c, 0xe3, 0x39, 0x82, 0x9b, 0x2f, 0xff, 0x87
849656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.byte	0x34, 0x8e, 0x43, 0x44, 0xc4, 0xde, 0xe9, 0xcb
850656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.byte	0x54, 0x7b, 0x94, 0x32, 0xa6, 0xc2, 0x23, 0x3d
851656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.byte	0xee, 0x4c, 0x95, 0x0b, 0x42, 0xfa, 0xc3, 0x4e
852656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.byte	0x08, 0x2e, 0xa1, 0x66, 0x28, 0xd9, 0x24, 0xb2
853656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.byte	0x76, 0x5b, 0xa2, 0x49, 0x6d, 0x8b, 0xd1, 0x25
854656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.byte	0x72, 0xf8, 0xf6, 0x64, 0x86, 0x68, 0x98, 0x16
855656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.byte	0xd4, 0xa4, 0x5c, 0xcc, 0x5d, 0x65, 0xb6, 0x92
856656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.byte	0x6c, 0x70, 0x48, 0x50, 0xfd, 0xed, 0xb9, 0xda
857656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.byte	0x5e, 0x15, 0x46, 0x57, 0xa7, 0x8d, 0x9d, 0x84
858656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.byte	0x90, 0xd8, 0xab, 0x00, 0x8c, 0xbc, 0xd3, 0x0a
859656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.byte	0xf7, 0xe4, 0x58, 0x05, 0xb8, 0xb3, 0x45, 0x06
860656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.byte	0xd0, 0x2c, 0x1e, 0x8f, 0xca, 0x3f, 0x0f, 0x02
861656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.byte	0xc1, 0xaf, 0xbd, 0x03, 0x01, 0x13, 0x8a, 0x6b
862656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.byte	0x3a, 0x91, 0x11, 0x41, 0x4f, 0x67, 0xdc, 0xea
863656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.byte	0x97, 0xf2, 0xcf, 0xce, 0xf0, 0xb4, 0xe6, 0x73
864656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.byte	0x96, 0xac, 0x74, 0x22, 0xe7, 0xad, 0x35, 0x85
865656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.byte	0xe2, 0xf9, 0x37, 0xe8, 0x1c, 0x75, 0xdf, 0x6e
866656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.byte	0x47, 0xf1, 0x1a, 0x71, 0x1d, 0x29, 0xc5, 0x89
867656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.byte	0x6f, 0xb7, 0x62, 0x0e, 0xaa, 0x18, 0xbe, 0x1b
868656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.byte	0xfc, 0x56, 0x3e, 0x4b, 0xc6, 0xd2, 0x79, 0x20
869656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.byte	0x9a, 0xdb, 0xc0, 0xfe, 0x78, 0xcd, 0x5a, 0xf4
870656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.byte	0x1f, 0xdd, 0xa8, 0x33, 0x88, 0x07, 0xc7, 0x31
871656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.byte	0xb1, 0x12, 0x10, 0x59, 0x27, 0x80, 0xec, 0x5f
872656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.byte	0x60, 0x51, 0x7f, 0xa9, 0x19, 0xb5, 0x4a, 0x0d
873656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.byte	0x2d, 0xe5, 0x7a, 0x9f, 0x93, 0xc9, 0x9c, 0xef
874656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.byte	0xa0, 0xe0, 0x3b, 0x4d, 0xae, 0x2a, 0xf5, 0xb0
875656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.byte	0xc8, 0xeb, 0xbb, 0x3c, 0x83, 0x53, 0x99, 0x61
876656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.byte	0x17, 0x2b, 0x04, 0x7e, 0xba, 0x77, 0xd6, 0x26
877656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.byte	0xe1, 0x69, 0x14, 0x63, 0x55, 0x21, 0x0c, 0x7d
878656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.size	AES_Td,.-AES_Td
879656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
880656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project@ void AES_decrypt(const unsigned char *in, unsigned char *out,
881656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project@ 		 const AES_KEY *key) {
882656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.global AES_decrypt
883656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.type   AES_decrypt,%function
884656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.align	5
885656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source ProjectAES_decrypt:
886656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	sub	r3,pc,#8		@ AES_decrypt
887656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	stmdb   sp!,{r1,r4-r12,lr}
888656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	mov	$rounds,r0		@ inp
889656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	mov	$key,r2
890656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	sub	$tbl,r3,#AES_decrypt-AES_Td		@ Td
891392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom#if __ARM_ARCH__<7
892656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	ldrb	$s0,[$rounds,#3]	@ load input data in endian-neutral
893656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	ldrb	$t1,[$rounds,#2]	@ manner...
894656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	ldrb	$t2,[$rounds,#1]
895656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	ldrb	$t3,[$rounds,#0]
896656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	orr	$s0,$s0,$t1,lsl#8
897656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	ldrb	$s1,[$rounds,#7]
89843c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom	orr	$s0,$s0,$t2,lsl#16
899656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	ldrb	$t1,[$rounds,#6]
90043c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom	orr	$s0,$s0,$t3,lsl#24
901656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	ldrb	$t2,[$rounds,#5]
902656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	ldrb	$t3,[$rounds,#4]
903656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	orr	$s1,$s1,$t1,lsl#8
904656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	ldrb	$s2,[$rounds,#11]
90543c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom	orr	$s1,$s1,$t2,lsl#16
906656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	ldrb	$t1,[$rounds,#10]
90743c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom	orr	$s1,$s1,$t3,lsl#24
908656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	ldrb	$t2,[$rounds,#9]
909656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	ldrb	$t3,[$rounds,#8]
910656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	orr	$s2,$s2,$t1,lsl#8
911656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	ldrb	$s3,[$rounds,#15]
91243c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom	orr	$s2,$s2,$t2,lsl#16
913656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	ldrb	$t1,[$rounds,#14]
91443c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom	orr	$s2,$s2,$t3,lsl#24
915656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	ldrb	$t2,[$rounds,#13]
916656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	ldrb	$t3,[$rounds,#12]
917656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	orr	$s3,$s3,$t1,lsl#8
918656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	orr	$s3,$s3,$t2,lsl#16
919656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	orr	$s3,$s3,$t3,lsl#24
920392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom#else
921392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	ldr	$s0,[$rounds,#0]
922392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	ldr	$s1,[$rounds,#4]
923392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	ldr	$s2,[$rounds,#8]
924392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	ldr	$s3,[$rounds,#12]
925392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom#ifdef __ARMEL__
926392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	rev	$s0,$s0
927392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	rev	$s1,$s1
928392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	rev	$s2,$s2
929392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	rev	$s3,$s3
930392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom#endif
931392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom#endif
932656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	bl	_armv4_AES_decrypt
933656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
934656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	ldr	$rounds,[sp],#4		@ pop out
935392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom#if __ARM_ARCH__>=7
936392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom#ifdef __ARMEL__
937392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	rev	$s0,$s0
938392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	rev	$s1,$s1
939392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	rev	$s2,$s2
940392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	rev	$s3,$s3
941392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom#endif
942392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	str	$s0,[$rounds,#0]
943392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	str	$s1,[$rounds,#4]
944392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	str	$s2,[$rounds,#8]
945392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	str	$s3,[$rounds,#12]
946392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom#else
947656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	mov	$t1,$s0,lsr#24		@ write output in endian-neutral
948656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	mov	$t2,$s0,lsr#16		@ manner...
949656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	mov	$t3,$s0,lsr#8
950656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	strb	$t1,[$rounds,#0]
951656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	strb	$t2,[$rounds,#1]
952656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	mov	$t1,$s1,lsr#24
95343c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom	strb	$t3,[$rounds,#2]
954656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	mov	$t2,$s1,lsr#16
95543c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom	strb	$s0,[$rounds,#3]
956656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	mov	$t3,$s1,lsr#8
957656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	strb	$t1,[$rounds,#4]
958656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	strb	$t2,[$rounds,#5]
959656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	mov	$t1,$s2,lsr#24
96043c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom	strb	$t3,[$rounds,#6]
961656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	mov	$t2,$s2,lsr#16
96243c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom	strb	$s1,[$rounds,#7]
963656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	mov	$t3,$s2,lsr#8
964656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	strb	$t1,[$rounds,#8]
965656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	strb	$t2,[$rounds,#9]
966656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	mov	$t1,$s3,lsr#24
96743c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom	strb	$t3,[$rounds,#10]
968656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	mov	$t2,$s3,lsr#16
96943c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom	strb	$s2,[$rounds,#11]
970656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	mov	$t3,$s3,lsr#8
971656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	strb	$t1,[$rounds,#12]
972656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	strb	$t2,[$rounds,#13]
973656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	strb	$t3,[$rounds,#14]
974656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	strb	$s3,[$rounds,#15]
975392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom#endif
976392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom#if __ARM_ARCH__>=5
977392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	ldmia	sp!,{r4-r12,pc}
978392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom#else
979656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	ldmia   sp!,{r4-r12,lr}
980656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	tst	lr,#1
981656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	moveq	pc,lr			@ be binary compatible with V4, yet
982656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	bx	lr			@ interoperable with Thumb ISA:-)
983392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom#endif
984656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.size	AES_decrypt,.-AES_decrypt
985656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
986656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.type   _armv4_AES_decrypt,%function
987656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.align	2
988656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project_armv4_AES_decrypt:
989656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	str	lr,[sp,#-4]!		@ push lr
99043c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom	ldmia	$key!,{$t1-$i1}
991656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	eor	$s0,$s0,$t1
99243c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom	ldr	$rounds,[$key,#240-16]
993656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	eor	$s1,$s1,$t2
994656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	eor	$s2,$s2,$t3
995656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	eor	$s3,$s3,$i1
996656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	sub	$rounds,$rounds,#1
997656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	mov	lr,#255
998656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
999656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	and	$i1,lr,$s0,lsr#16
1000656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	and	$i2,lr,$s0,lsr#8
1001656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	and	$i3,lr,$s0
1002656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	mov	$s0,$s0,lsr#24
100343c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom.Ldec_loop:
1004656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	ldr	$t1,[$tbl,$i1,lsl#2]	@ Td1[s0>>16]
1005656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	and	$i1,lr,$s1		@ i0
100643c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom	ldr	$t2,[$tbl,$i2,lsl#2]	@ Td2[s0>>8]
1007656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	and	$i2,lr,$s1,lsr#16
100843c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom	ldr	$t3,[$tbl,$i3,lsl#2]	@ Td3[s0>>0]
1009656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	and	$i3,lr,$s1,lsr#8
101043c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom	ldr	$s0,[$tbl,$s0,lsl#2]	@ Td0[s0>>24]
1011656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	mov	$s1,$s1,lsr#24
101243c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom
1013656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	ldr	$i1,[$tbl,$i1,lsl#2]	@ Td3[s1>>0]
1014656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	ldr	$i2,[$tbl,$i2,lsl#2]	@ Td1[s1>>16]
1015656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	ldr	$i3,[$tbl,$i3,lsl#2]	@ Td2[s1>>8]
1016656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	eor	$s0,$s0,$i1,ror#24
101743c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom	ldr	$s1,[$tbl,$s1,lsl#2]	@ Td0[s1>>24]
1018656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	and	$i1,lr,$s2,lsr#8	@ i0
101943c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom	eor	$t2,$i2,$t2,ror#8
1020656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	and	$i2,lr,$s2		@ i1
102143c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom	eor	$t3,$i3,$t3,ror#8
1022656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	and	$i3,lr,$s2,lsr#16
1023656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	ldr	$i1,[$tbl,$i1,lsl#2]	@ Td2[s2>>8]
1024392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	eor	$s1,$s1,$t1,ror#8
1025392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	ldr	$i2,[$tbl,$i2,lsl#2]	@ Td3[s2>>0]
102643c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom	mov	$s2,$s2,lsr#24
102743c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom
1028656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	ldr	$i3,[$tbl,$i3,lsl#2]	@ Td1[s2>>16]
1029656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	eor	$s0,$s0,$i1,ror#16
103043c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom	ldr	$s2,[$tbl,$s2,lsl#2]	@ Td0[s2>>24]
1031656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	and	$i1,lr,$s3,lsr#16	@ i0
103243c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom	eor	$s1,$s1,$i2,ror#24
1033656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	and	$i2,lr,$s3,lsr#8	@ i1
103443c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom	eor	$t3,$i3,$t3,ror#8
1035656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	and	$i3,lr,$s3		@ i2
1036656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	ldr	$i1,[$tbl,$i1,lsl#2]	@ Td1[s3>>16]
1037392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	eor	$s2,$s2,$t2,ror#8
1038392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	ldr	$i2,[$tbl,$i2,lsl#2]	@ Td2[s3>>8]
103943c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom	mov	$s3,$s3,lsr#24
104043c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom
1041656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	ldr	$i3,[$tbl,$i3,lsl#2]	@ Td3[s3>>0]
1042656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	eor	$s0,$s0,$i1,ror#8
1043392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	ldr	$i1,[$key],#16
1044656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	eor	$s1,$s1,$i2,ror#16
1045392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	ldr	$s3,[$tbl,$s3,lsl#2]	@ Td0[s3>>24]
1046656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	eor	$s2,$s2,$i3,ror#24
1047656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
104843c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom	ldr	$t1,[$key,#-12]
104943c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom	eor	$s0,$s0,$i1
1050392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	ldr	$t2,[$key,#-8]
1051392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	eor	$s3,$s3,$t3,ror#8
105243c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom	ldr	$t3,[$key,#-4]
105343c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom	and	$i1,lr,$s0,lsr#16
105443c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom	eor	$s1,$s1,$t1
105543c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom	and	$i2,lr,$s0,lsr#8
105643c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom	eor	$s2,$s2,$t2
105743c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom	and	$i3,lr,$s0
105843c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom	eor	$s3,$s3,$t3
105943c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom	mov	$s0,$s0,lsr#24
1060656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
1061656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	subs	$rounds,$rounds,#1
1062656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	bne	.Ldec_loop
1063656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
1064656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	add	$tbl,$tbl,#1024
1065656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
106643c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom	ldr	$t2,[$tbl,#0]		@ prefetch Td4
106743c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom	ldr	$t3,[$tbl,#32]
106843c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom	ldr	$t1,[$tbl,#64]
106943c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom	ldr	$t2,[$tbl,#96]
107043c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom	ldr	$t3,[$tbl,#128]
107143c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom	ldr	$t1,[$tbl,#160]
107243c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom	ldr	$t2,[$tbl,#192]
107343c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom	ldr	$t3,[$tbl,#224]
1074656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
107543c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom	ldrb	$s0,[$tbl,$s0]		@ Td4[s0>>24]
1076656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	ldrb	$t1,[$tbl,$i1]		@ Td4[s0>>16]
1077656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	and	$i1,lr,$s1		@ i0
107843c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom	ldrb	$t2,[$tbl,$i2]		@ Td4[s0>>8]
1079656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	and	$i2,lr,$s1,lsr#16
108043c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom	ldrb	$t3,[$tbl,$i3]		@ Td4[s0>>0]
1081656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	and	$i3,lr,$s1,lsr#8
108243c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom
1083656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	ldrb	$i1,[$tbl,$i1]		@ Td4[s1>>0]
1084656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	ldrb	$s1,[$tbl,$s1,lsr#24]	@ Td4[s1>>24]
1085656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	ldrb	$i2,[$tbl,$i2]		@ Td4[s1>>16]
1086656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	eor	$s0,$i1,$s0,lsl#24
108743c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom	ldrb	$i3,[$tbl,$i3]		@ Td4[s1>>8]
1088656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	eor	$s1,$t1,$s1,lsl#8
1089656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	and	$i1,lr,$s2,lsr#8	@ i0
109043c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom	eor	$t2,$t2,$i2,lsl#8
1091656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	and	$i2,lr,$s2		@ i1
1092656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	ldrb	$i1,[$tbl,$i1]		@ Td4[s2>>8]
1093392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	eor	$t3,$t3,$i3,lsl#8
1094392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	ldrb	$i2,[$tbl,$i2]		@ Td4[s2>>0]
109543c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom	and	$i3,lr,$s2,lsr#16
109643c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom
1097656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	ldrb	$s2,[$tbl,$s2,lsr#24]	@ Td4[s2>>24]
1098656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	eor	$s0,$s0,$i1,lsl#8
109943c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom	ldrb	$i3,[$tbl,$i3]		@ Td4[s2>>16]
1100656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	eor	$s1,$i2,$s1,lsl#16
1101656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	and	$i1,lr,$s3,lsr#16	@ i0
110243c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom	eor	$s2,$t2,$s2,lsl#16
1103656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	and	$i2,lr,$s3,lsr#8	@ i1
1104656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	ldrb	$i1,[$tbl,$i1]		@ Td4[s3>>16]
1105392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	eor	$t3,$t3,$i3,lsl#16
1106392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	ldrb	$i2,[$tbl,$i2]		@ Td4[s3>>8]
110743c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom	and	$i3,lr,$s3		@ i2
110843c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom
1109656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	ldrb	$i3,[$tbl,$i3]		@ Td4[s3>>0]
1110656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	ldrb	$s3,[$tbl,$s3,lsr#24]	@ Td4[s3>>24]
1111656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	eor	$s0,$s0,$i1,lsl#16
111243c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom	ldr	$i1,[$key,#0]
1113656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	eor	$s1,$s1,$i2,lsl#8
111443c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom	ldr	$t1,[$key,#4]
1115656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	eor	$s2,$i3,$s2,lsl#8
111643c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom	ldr	$t2,[$key,#8]
1117656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	eor	$s3,$t3,$s3,lsl#24
111843c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom	ldr	$t3,[$key,#12]
1119656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
112043c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom	eor	$s0,$s0,$i1
112143c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom	eor	$s1,$s1,$t1
112243c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom	eor	$s2,$s2,$t2
112343c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom	eor	$s3,$s3,$t3
1124656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
1125656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	sub	$tbl,$tbl,#1024
112643c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom	ldr	pc,[sp],#4		@ pop and return
1127656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.size	_armv4_AES_decrypt,.-_armv4_AES_decrypt
1128656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.asciz	"AES for ARMv4, CRYPTOGAMS by <appro\@openssl.org>"
1129221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom.align	2
1130656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project___
1131656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
1132656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project$code =~ s/\bbx\s+lr\b/.word\t0xe12fff1e/gm;	# make it possible to compile with -march=armv4
1133656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectprint $code;
113443c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstromclose STDOUT;	# enforce flush
1135