1392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom#!/usr/bin/env perl
2392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom
3392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom# ====================================================================
4392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom# Written by Andy Polyakov <appro@fy.chalmers.se> for the OpenSSL
5392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom# project. The module is, however, dual licensed under OpenSSL and
6392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom# CRYPTOGAMS licenses depending on where you obtain it. For further
7392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom# details see http://www.openssl.org/~appro/cryptogams/.
8392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom# ====================================================================
9392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom
10392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom# AES for PA-RISC.
11392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom#
12392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom# June 2009.
13392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom#
14392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom# The module is mechanical transliteration of aes-sparcv9.pl, but with
15392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom# a twist: S-boxes are compressed even further down to 1K+256B. On
16392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom# PA-7100LC performance is ~40% better than gcc 3.2 generated code and
17392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom# is about 33 cycles per byte processed with 128-bit key. Newer CPUs
18392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom# perform at 16 cycles per byte. It's not faster than code generated
19392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom# by vendor compiler, but recall that it has compressed S-boxes, which
20392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom# requires extra processing.
21392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom#
22392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom# Special thanks to polarhome.com for providing HP-UX account.
23392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom
24392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom$flavour = shift;
25392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom$output = shift;
26392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstromopen STDOUT,">$output";
27392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom
28392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstromif ($flavour =~ /64/) {
29392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	$LEVEL		="2.0W";
30392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	$SIZE_T		=8;
31392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	$FRAME_MARKER	=80;
32392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	$SAVED_RP	=16;
33392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	$PUSH		="std";
34392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	$PUSHMA		="std,ma";
35392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	$POP		="ldd";
36392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	$POPMB		="ldd,mb";
37392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom} else {
38392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	$LEVEL		="1.0";
39392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	$SIZE_T		=4;
40392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	$FRAME_MARKER	=48;
41392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	$SAVED_RP	=20;
42392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	$PUSH		="stw";
43392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	$PUSHMA		="stwm";
44392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	$POP		="ldw";
45392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	$POPMB		="ldwm";
46392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom}
47392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom
48392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom$FRAME=16*$SIZE_T+$FRAME_MARKER;# 16 saved regs + frame marker
49392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom				#                 [+ argument transfer]
50392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom$inp="%r26";	# arg0
51392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom$out="%r25";	# arg1
52392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom$key="%r24";	# arg2
53392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom
54392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom($s0,$s1,$s2,$s3) = ("%r1","%r2","%r3","%r4");
55392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom($t0,$t1,$t2,$t3) = ("%r5","%r6","%r7","%r8");
56392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom
57392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom($acc0, $acc1, $acc2, $acc3, $acc4, $acc5, $acc6, $acc7,
58392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom $acc8, $acc9,$acc10,$acc11,$acc12,$acc13,$acc14,$acc15) =
59392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom("%r9","%r10","%r11","%r12","%r13","%r14","%r15","%r16",
60392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom"%r17","%r18","%r19","%r20","%r21","%r22","%r23","%r26");
61392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom
62392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom$tbl="%r28";
63392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom$rounds="%r29";
64392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom
65392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom$code=<<___;
66392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	.LEVEL	$LEVEL
67392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	.SPACE	\$TEXT\$
68392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	.SUBSPA	\$CODE\$,QUAD=0,ALIGN=8,ACCESS=0x2C,CODE_ONLY
69392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom
70392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	.EXPORT	AES_encrypt,ENTRY,ARGW0=GR,ARGW1=GR,ARGW2=GR
71392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	.ALIGN	64
72392aa7cc7d2b122614c5393c3e357da07fd07af3Brian CarlstromAES_encrypt
73392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	.PROC
74392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	.CALLINFO	FRAME=`$FRAME-16*$SIZE_T`,NO_CALLS,SAVE_RP,ENTRY_GR=18
75392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	.ENTRY
76392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	$PUSH	%r2,-$SAVED_RP(%sp)	; standard prologue
77392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	$PUSHMA	%r3,$FRAME(%sp)
78392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	$PUSH	%r4,`-$FRAME+1*$SIZE_T`(%sp)
79392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	$PUSH	%r5,`-$FRAME+2*$SIZE_T`(%sp)
80392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	$PUSH	%r6,`-$FRAME+3*$SIZE_T`(%sp)
81392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	$PUSH	%r7,`-$FRAME+4*$SIZE_T`(%sp)
82392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	$PUSH	%r8,`-$FRAME+5*$SIZE_T`(%sp)
83392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	$PUSH	%r9,`-$FRAME+6*$SIZE_T`(%sp)
84392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	$PUSH	%r10,`-$FRAME+7*$SIZE_T`(%sp)
85392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	$PUSH	%r11,`-$FRAME+8*$SIZE_T`(%sp)
86392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	$PUSH	%r12,`-$FRAME+9*$SIZE_T`(%sp)
87392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	$PUSH	%r13,`-$FRAME+10*$SIZE_T`(%sp)
88392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	$PUSH	%r14,`-$FRAME+11*$SIZE_T`(%sp)
89392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	$PUSH	%r15,`-$FRAME+12*$SIZE_T`(%sp)
90392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	$PUSH	%r16,`-$FRAME+13*$SIZE_T`(%sp)
91392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	$PUSH	%r17,`-$FRAME+14*$SIZE_T`(%sp)
92392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	$PUSH	%r18,`-$FRAME+15*$SIZE_T`(%sp)
93392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom
94392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	blr	%r0,$tbl
95392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	ldi	3,$t0
96392aa7cc7d2b122614c5393c3e357da07fd07af3Brian CarlstromL\$enc_pic
97392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	andcm	$tbl,$t0,$tbl
98392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	ldo	L\$AES_Te-L\$enc_pic($tbl),$tbl
99392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom
100392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	and	$inp,$t0,$t0
101392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	sub	$inp,$t0,$inp
102392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	ldw	0($inp),$s0
103392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	ldw	4($inp),$s1
104392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	ldw	8($inp),$s2
105392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	comib,=	0,$t0,L\$enc_inp_aligned
106392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	ldw	12($inp),$s3
107392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom
108392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	sh3addl	$t0,%r0,$t0
109392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	subi	32,$t0,$t0
110392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	mtctl	$t0,%cr11
111392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	ldw	16($inp),$t1
112392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vshd	$s0,$s1,$s0
113392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vshd	$s1,$s2,$s1
114392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vshd	$s2,$s3,$s2
115392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vshd	$s3,$t1,$s3
116392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom
117392aa7cc7d2b122614c5393c3e357da07fd07af3Brian CarlstromL\$enc_inp_aligned
118392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	bl	_parisc_AES_encrypt,%r31
119392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	nop
120392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom
121392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	extru,<> $out,31,2,%r0
122392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	b	L\$enc_out_aligned
123392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	nop
124392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom
125392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	_srm	$s0,24,$acc0
126392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	_srm	$s0,16,$acc1
127392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	stb	$acc0,0($out)
128392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	_srm	$s0,8,$acc2
129392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	stb	$acc1,1($out)
130392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	_srm	$s1,24,$acc4
131392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	stb	$acc2,2($out)
132392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	_srm	$s1,16,$acc5
133392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	stb	$s0,3($out)
134392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	_srm	$s1,8,$acc6
135392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	stb	$acc4,4($out)
136392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	_srm	$s2,24,$acc0
137392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	stb	$acc5,5($out)
138392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	_srm	$s2,16,$acc1
139392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	stb	$acc6,6($out)
140392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	_srm	$s2,8,$acc2
141392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	stb	$s1,7($out)
142392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	_srm	$s3,24,$acc4
143392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	stb	$acc0,8($out)
144392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	_srm	$s3,16,$acc5
145392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	stb	$acc1,9($out)
146392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	_srm	$s3,8,$acc6
147392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	stb	$acc2,10($out)
148392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	stb	$s2,11($out)
149392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	stb	$acc4,12($out)
150392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	stb	$acc5,13($out)
151392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	stb	$acc6,14($out)
152392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	b	L\$enc_done
153392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	stb	$s3,15($out)
154392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom
155392aa7cc7d2b122614c5393c3e357da07fd07af3Brian CarlstromL\$enc_out_aligned
156392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	stw	$s0,0($out)
157392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	stw	$s1,4($out)
158392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	stw	$s2,8($out)
159392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	stw	$s3,12($out)
160392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom
161392aa7cc7d2b122614c5393c3e357da07fd07af3Brian CarlstromL\$enc_done
162392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	$POP	`-$FRAME-$SAVED_RP`(%sp),%r2	; standard epilogue
163392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	$POP	`-$FRAME+1*$SIZE_T`(%sp),%r4
164392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	$POP	`-$FRAME+2*$SIZE_T`(%sp),%r5
165392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	$POP	`-$FRAME+3*$SIZE_T`(%sp),%r6
166392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	$POP	`-$FRAME+4*$SIZE_T`(%sp),%r7
167392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	$POP	`-$FRAME+5*$SIZE_T`(%sp),%r8
168392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	$POP	`-$FRAME+6*$SIZE_T`(%sp),%r9
169392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	$POP	`-$FRAME+7*$SIZE_T`(%sp),%r10
170392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	$POP	`-$FRAME+8*$SIZE_T`(%sp),%r11
171392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	$POP	`-$FRAME+9*$SIZE_T`(%sp),%r12
172392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	$POP	`-$FRAME+10*$SIZE_T`(%sp),%r13
173392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	$POP	`-$FRAME+11*$SIZE_T`(%sp),%r14
174392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	$POP	`-$FRAME+12*$SIZE_T`(%sp),%r15
175392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	$POP	`-$FRAME+13*$SIZE_T`(%sp),%r16
176392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	$POP	`-$FRAME+14*$SIZE_T`(%sp),%r17
177392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	$POP	`-$FRAME+15*$SIZE_T`(%sp),%r18
178392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	bv	(%r2)
179392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	.EXIT
180392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	$POPMB	-$FRAME(%sp),%r3
181392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	.PROCEND
182392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom
183392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	.ALIGN	16
184392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom_parisc_AES_encrypt
185392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	.PROC
186392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	.CALLINFO	MILLICODE
187392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	.ENTRY
188392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	ldw	240($key),$rounds
189392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	ldw	0($key),$t0
190392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	ldw	4($key),$t1
191392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	ldw	8($key),$t2
192392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	_srm	$rounds,1,$rounds
193392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	xor	$t0,$s0,$s0
194392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	ldw	12($key),$t3
195392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	_srm	$s0,24,$acc0
196392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	xor	$t1,$s1,$s1
197392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	ldw	16($key),$t0
198392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	_srm	$s1,16,$acc1
199392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	xor	$t2,$s2,$s2
200392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	ldw	20($key),$t1
201392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	xor	$t3,$s3,$s3
202392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	ldw	24($key),$t2
203392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	ldw	28($key),$t3
204392aa7cc7d2b122614c5393c3e357da07fd07af3Brian CarlstromL\$enc_loop
205392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	_srm	$s2,8,$acc2
206392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	ldwx,s	$acc0($tbl),$acc0
207392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	_srm	$s3,0,$acc3
208392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	ldwx,s	$acc1($tbl),$acc1
209392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	_srm	$s1,24,$acc4
210392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	ldwx,s	$acc2($tbl),$acc2
211392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	_srm	$s2,16,$acc5
212392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	ldwx,s	$acc3($tbl),$acc3
213392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	_srm	$s3,8,$acc6
214392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	ldwx,s	$acc4($tbl),$acc4
215392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	_srm	$s0,0,$acc7
216392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	ldwx,s	$acc5($tbl),$acc5
217392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	_srm	$s2,24,$acc8
218392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	ldwx,s	$acc6($tbl),$acc6
219392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	_srm	$s3,16,$acc9
220392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	ldwx,s	$acc7($tbl),$acc7
221392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	_srm	$s0,8,$acc10
222392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	ldwx,s	$acc8($tbl),$acc8
223392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	_srm	$s1,0,$acc11
224392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	ldwx,s	$acc9($tbl),$acc9
225392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	_srm	$s3,24,$acc12
226392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	ldwx,s	$acc10($tbl),$acc10
227392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	_srm	$s0,16,$acc13
228392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	ldwx,s	$acc11($tbl),$acc11
229392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	_srm	$s1,8,$acc14
230392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	ldwx,s	$acc12($tbl),$acc12
231392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	_srm	$s2,0,$acc15
232392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	ldwx,s	$acc13($tbl),$acc13
233392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	ldwx,s	$acc14($tbl),$acc14
234392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	ldwx,s	$acc15($tbl),$acc15
235392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	addib,= -1,$rounds,L\$enc_last
236392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	ldo	32($key),$key
237392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom
238392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom		_ror	$acc1,8,$acc1
239392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom		xor	$acc0,$t0,$t0
240392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	ldw	0($key),$s0
241392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom		_ror	$acc2,16,$acc2
242392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom		xor	$acc1,$t0,$t0
243392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	ldw	4($key),$s1
244392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom		_ror	$acc3,24,$acc3
245392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom		xor	$acc2,$t0,$t0
246392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	ldw	8($key),$s2
247392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom		_ror	$acc5,8,$acc5
248392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom		xor	$acc3,$t0,$t0
249392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	ldw	12($key),$s3
250392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom		_ror	$acc6,16,$acc6
251392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom		xor	$acc4,$t1,$t1
252392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom		_ror	$acc7,24,$acc7
253392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom		xor	$acc5,$t1,$t1
254392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom		_ror	$acc9,8,$acc9
255392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom		xor	$acc6,$t1,$t1
256392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom		_ror	$acc10,16,$acc10
257392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom		xor	$acc7,$t1,$t1
258392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom		_ror	$acc11,24,$acc11
259392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom		xor	$acc8,$t2,$t2
260392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom		_ror	$acc13,8,$acc13
261392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom		xor	$acc9,$t2,$t2
262392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom		_ror	$acc14,16,$acc14
263392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom		xor	$acc10,$t2,$t2
264392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom		_ror	$acc15,24,$acc15
265392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom		xor	$acc11,$t2,$t2
266392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom		xor	$acc12,$acc14,$acc14
267392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom		xor	$acc13,$t3,$t3
268392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	_srm	$t0,24,$acc0
269392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom		xor	$acc14,$t3,$t3
270392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	_srm	$t1,16,$acc1
271392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom		xor	$acc15,$t3,$t3
272392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom
273392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	_srm	$t2,8,$acc2
274392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	ldwx,s	$acc0($tbl),$acc0
275392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	_srm	$t3,0,$acc3
276392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	ldwx,s	$acc1($tbl),$acc1
277392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	_srm	$t1,24,$acc4
278392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	ldwx,s	$acc2($tbl),$acc2
279392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	_srm	$t2,16,$acc5
280392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	ldwx,s	$acc3($tbl),$acc3
281392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	_srm	$t3,8,$acc6
282392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	ldwx,s	$acc4($tbl),$acc4
283392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	_srm	$t0,0,$acc7
284392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	ldwx,s	$acc5($tbl),$acc5
285392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	_srm	$t2,24,$acc8
286392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	ldwx,s	$acc6($tbl),$acc6
287392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	_srm	$t3,16,$acc9
288392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	ldwx,s	$acc7($tbl),$acc7
289392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	_srm	$t0,8,$acc10
290392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	ldwx,s	$acc8($tbl),$acc8
291392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	_srm	$t1,0,$acc11
292392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	ldwx,s	$acc9($tbl),$acc9
293392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	_srm	$t3,24,$acc12
294392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	ldwx,s	$acc10($tbl),$acc10
295392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	_srm	$t0,16,$acc13
296392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	ldwx,s	$acc11($tbl),$acc11
297392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	_srm	$t1,8,$acc14
298392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	ldwx,s	$acc12($tbl),$acc12
299392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	_srm	$t2,0,$acc15
300392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	ldwx,s	$acc13($tbl),$acc13
301392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom		_ror	$acc1,8,$acc1
302392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	ldwx,s	$acc14($tbl),$acc14
303392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom
304392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom		_ror	$acc2,16,$acc2
305392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom		xor	$acc0,$s0,$s0
306392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	ldwx,s	$acc15($tbl),$acc15
307392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom		_ror	$acc3,24,$acc3
308392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom		xor	$acc1,$s0,$s0
309392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	ldw	16($key),$t0
310392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom		_ror	$acc5,8,$acc5
311392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom		xor	$acc2,$s0,$s0
312392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	ldw	20($key),$t1
313392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom		_ror	$acc6,16,$acc6
314392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom		xor	$acc3,$s0,$s0
315392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	ldw	24($key),$t2
316392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom		_ror	$acc7,24,$acc7
317392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom		xor	$acc4,$s1,$s1
318392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	ldw	28($key),$t3
319392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom		_ror	$acc9,8,$acc9
320392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom		xor	$acc5,$s1,$s1
321392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	ldw	1024+0($tbl),%r0		; prefetch te4
322392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom		_ror	$acc10,16,$acc10
323392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom		xor	$acc6,$s1,$s1
324392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	ldw	1024+32($tbl),%r0		; prefetch te4
325392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom		_ror	$acc11,24,$acc11
326392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom		xor	$acc7,$s1,$s1
327392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	ldw	1024+64($tbl),%r0		; prefetch te4
328392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom		_ror	$acc13,8,$acc13
329392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom		xor	$acc8,$s2,$s2
330392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	ldw	1024+96($tbl),%r0		; prefetch te4
331392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom		_ror	$acc14,16,$acc14
332392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom		xor	$acc9,$s2,$s2
333392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	ldw	1024+128($tbl),%r0		; prefetch te4
334392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom		_ror	$acc15,24,$acc15
335392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom		xor	$acc10,$s2,$s2
336392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	ldw	1024+160($tbl),%r0		; prefetch te4
337392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	_srm	$s0,24,$acc0
338392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom		xor	$acc11,$s2,$s2
339392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	ldw	1024+192($tbl),%r0		; prefetch te4
340392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom		xor	$acc12,$acc14,$acc14
341392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom		xor	$acc13,$s3,$s3
342392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	ldw	1024+224($tbl),%r0		; prefetch te4
343392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	_srm	$s1,16,$acc1
344392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom		xor	$acc14,$s3,$s3
345392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	b	L\$enc_loop
346392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom		xor	$acc15,$s3,$s3
347392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom
348392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	.ALIGN	16
349392aa7cc7d2b122614c5393c3e357da07fd07af3Brian CarlstromL\$enc_last
350392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	ldo	1024($tbl),$rounds
351392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom		_ror	$acc1,8,$acc1
352392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom		xor	$acc0,$t0,$t0
353392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	ldw	0($key),$s0
354392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom		_ror	$acc2,16,$acc2
355392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom		xor	$acc1,$t0,$t0
356392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	ldw	4($key),$s1
357392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom		_ror	$acc3,24,$acc3
358392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom		xor	$acc2,$t0,$t0
359392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	ldw	8($key),$s2
360392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom		_ror	$acc5,8,$acc5
361392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom		xor	$acc3,$t0,$t0
362392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	ldw	12($key),$s3
363392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom		_ror	$acc6,16,$acc6
364392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom		xor	$acc4,$t1,$t1
365392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom		_ror	$acc7,24,$acc7
366392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom		xor	$acc5,$t1,$t1
367392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom		_ror	$acc9,8,$acc9
368392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom		xor	$acc6,$t1,$t1
369392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom		_ror	$acc10,16,$acc10
370392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom		xor	$acc7,$t1,$t1
371392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom		_ror	$acc11,24,$acc11
372392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom		xor	$acc8,$t2,$t2
373392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom		_ror	$acc13,8,$acc13
374392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom		xor	$acc9,$t2,$t2
375392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom		_ror	$acc14,16,$acc14
376392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom		xor	$acc10,$t2,$t2
377392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom		_ror	$acc15,24,$acc15
378392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom		xor	$acc11,$t2,$t2
379392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom		xor	$acc12,$acc14,$acc14
380392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom		xor	$acc13,$t3,$t3
381392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	_srm	$t0,24,$acc0
382392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom		xor	$acc14,$t3,$t3
383392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	_srm	$t1,16,$acc1
384392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom		xor	$acc15,$t3,$t3
385392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom
386392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	_srm	$t2,8,$acc2
387392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	ldbx	$acc0($rounds),$acc0
388392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	_srm	$t1,24,$acc4
389392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	ldbx	$acc1($rounds),$acc1
390392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	_srm	$t2,16,$acc5
391392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	_srm	$t3,0,$acc3
392392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	ldbx	$acc2($rounds),$acc2
393392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	ldbx	$acc3($rounds),$acc3
394392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	_srm	$t3,8,$acc6
395392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	ldbx	$acc4($rounds),$acc4
396392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	_srm	$t2,24,$acc8
397392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	ldbx	$acc5($rounds),$acc5
398392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	_srm	$t3,16,$acc9
399392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	_srm	$t0,0,$acc7
400392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	ldbx	$acc6($rounds),$acc6
401392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	ldbx	$acc7($rounds),$acc7
402392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	_srm	$t0,8,$acc10
403392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	ldbx	$acc8($rounds),$acc8
404392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	_srm	$t3,24,$acc12
405392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	ldbx	$acc9($rounds),$acc9
406392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	_srm	$t0,16,$acc13
407392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	_srm	$t1,0,$acc11
408392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	ldbx	$acc10($rounds),$acc10
409392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	_srm	$t1,8,$acc14
410392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	ldbx	$acc11($rounds),$acc11
411392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	ldbx	$acc12($rounds),$acc12
412392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	ldbx	$acc13($rounds),$acc13
413392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	_srm	$t2,0,$acc15
414392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	ldbx	$acc14($rounds),$acc14
415392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom
416392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom		dep	$acc0,7,8,$acc3
417392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	ldbx	$acc15($rounds),$acc15
418392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom		dep	$acc4,7,8,$acc7
419392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom		dep	$acc1,15,8,$acc3
420392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom		dep	$acc5,15,8,$acc7
421392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom		dep	$acc2,23,8,$acc3
422392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom		dep	$acc6,23,8,$acc7
423392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom		xor	$acc3,$s0,$s0
424392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom		xor	$acc7,$s1,$s1
425392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom		dep	$acc8,7,8,$acc11
426392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom		dep	$acc12,7,8,$acc15
427392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom		dep	$acc9,15,8,$acc11
428392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom		dep	$acc13,15,8,$acc15
429392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom		dep	$acc10,23,8,$acc11
430392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom		dep	$acc14,23,8,$acc15
431392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom		xor	$acc11,$s2,$s2
432392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom
433392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	bv	(%r31)
434392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	.EXIT
435392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom		xor	$acc15,$s3,$s3
436392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	.PROCEND
437392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom
438392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	.ALIGN	64
439392aa7cc7d2b122614c5393c3e357da07fd07af3Brian CarlstromL\$AES_Te
440392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	.WORD	0xc66363a5, 0xf87c7c84, 0xee777799, 0xf67b7b8d
441392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	.WORD	0xfff2f20d, 0xd66b6bbd, 0xde6f6fb1, 0x91c5c554
442392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	.WORD	0x60303050, 0x02010103, 0xce6767a9, 0x562b2b7d
443392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	.WORD	0xe7fefe19, 0xb5d7d762, 0x4dababe6, 0xec76769a
444392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	.WORD	0x8fcaca45, 0x1f82829d, 0x89c9c940, 0xfa7d7d87
445392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	.WORD	0xeffafa15, 0xb25959eb, 0x8e4747c9, 0xfbf0f00b
446392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	.WORD	0x41adadec, 0xb3d4d467, 0x5fa2a2fd, 0x45afafea
447392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	.WORD	0x239c9cbf, 0x53a4a4f7, 0xe4727296, 0x9bc0c05b
448392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	.WORD	0x75b7b7c2, 0xe1fdfd1c, 0x3d9393ae, 0x4c26266a
449392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	.WORD	0x6c36365a, 0x7e3f3f41, 0xf5f7f702, 0x83cccc4f
450392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	.WORD	0x6834345c, 0x51a5a5f4, 0xd1e5e534, 0xf9f1f108
451392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	.WORD	0xe2717193, 0xabd8d873, 0x62313153, 0x2a15153f
452392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	.WORD	0x0804040c, 0x95c7c752, 0x46232365, 0x9dc3c35e
453392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	.WORD	0x30181828, 0x379696a1, 0x0a05050f, 0x2f9a9ab5
454392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	.WORD	0x0e070709, 0x24121236, 0x1b80809b, 0xdfe2e23d
455392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	.WORD	0xcdebeb26, 0x4e272769, 0x7fb2b2cd, 0xea75759f
456392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	.WORD	0x1209091b, 0x1d83839e, 0x582c2c74, 0x341a1a2e
457392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	.WORD	0x361b1b2d, 0xdc6e6eb2, 0xb45a5aee, 0x5ba0a0fb
458392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	.WORD	0xa45252f6, 0x763b3b4d, 0xb7d6d661, 0x7db3b3ce
459392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	.WORD	0x5229297b, 0xdde3e33e, 0x5e2f2f71, 0x13848497
460392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	.WORD	0xa65353f5, 0xb9d1d168, 0x00000000, 0xc1eded2c
461392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	.WORD	0x40202060, 0xe3fcfc1f, 0x79b1b1c8, 0xb65b5bed
462392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	.WORD	0xd46a6abe, 0x8dcbcb46, 0x67bebed9, 0x7239394b
463392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	.WORD	0x944a4ade, 0x984c4cd4, 0xb05858e8, 0x85cfcf4a
464392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	.WORD	0xbbd0d06b, 0xc5efef2a, 0x4faaaae5, 0xedfbfb16
465392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	.WORD	0x864343c5, 0x9a4d4dd7, 0x66333355, 0x11858594
466392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	.WORD	0x8a4545cf, 0xe9f9f910, 0x04020206, 0xfe7f7f81
467392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	.WORD	0xa05050f0, 0x783c3c44, 0x259f9fba, 0x4ba8a8e3
468392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	.WORD	0xa25151f3, 0x5da3a3fe, 0x804040c0, 0x058f8f8a
469392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	.WORD	0x3f9292ad, 0x219d9dbc, 0x70383848, 0xf1f5f504
470392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	.WORD	0x63bcbcdf, 0x77b6b6c1, 0xafdada75, 0x42212163
471392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	.WORD	0x20101030, 0xe5ffff1a, 0xfdf3f30e, 0xbfd2d26d
472392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	.WORD	0x81cdcd4c, 0x180c0c14, 0x26131335, 0xc3ecec2f
473392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	.WORD	0xbe5f5fe1, 0x359797a2, 0x884444cc, 0x2e171739
474392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	.WORD	0x93c4c457, 0x55a7a7f2, 0xfc7e7e82, 0x7a3d3d47
475392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	.WORD	0xc86464ac, 0xba5d5de7, 0x3219192b, 0xe6737395
476392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	.WORD	0xc06060a0, 0x19818198, 0x9e4f4fd1, 0xa3dcdc7f
477392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	.WORD	0x44222266, 0x542a2a7e, 0x3b9090ab, 0x0b888883
478392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	.WORD	0x8c4646ca, 0xc7eeee29, 0x6bb8b8d3, 0x2814143c
479392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	.WORD	0xa7dede79, 0xbc5e5ee2, 0x160b0b1d, 0xaddbdb76
480392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	.WORD	0xdbe0e03b, 0x64323256, 0x743a3a4e, 0x140a0a1e
481392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	.WORD	0x924949db, 0x0c06060a, 0x4824246c, 0xb85c5ce4
482392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	.WORD	0x9fc2c25d, 0xbdd3d36e, 0x43acacef, 0xc46262a6
483392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	.WORD	0x399191a8, 0x319595a4, 0xd3e4e437, 0xf279798b
484392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	.WORD	0xd5e7e732, 0x8bc8c843, 0x6e373759, 0xda6d6db7
485392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	.WORD	0x018d8d8c, 0xb1d5d564, 0x9c4e4ed2, 0x49a9a9e0
486392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	.WORD	0xd86c6cb4, 0xac5656fa, 0xf3f4f407, 0xcfeaea25
487392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	.WORD	0xca6565af, 0xf47a7a8e, 0x47aeaee9, 0x10080818
488392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	.WORD	0x6fbabad5, 0xf0787888, 0x4a25256f, 0x5c2e2e72
489392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	.WORD	0x381c1c24, 0x57a6a6f1, 0x73b4b4c7, 0x97c6c651
490392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	.WORD	0xcbe8e823, 0xa1dddd7c, 0xe874749c, 0x3e1f1f21
491392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	.WORD	0x964b4bdd, 0x61bdbddc, 0x0d8b8b86, 0x0f8a8a85
492392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	.WORD	0xe0707090, 0x7c3e3e42, 0x71b5b5c4, 0xcc6666aa
493392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	.WORD	0x904848d8, 0x06030305, 0xf7f6f601, 0x1c0e0e12
494392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	.WORD	0xc26161a3, 0x6a35355f, 0xae5757f9, 0x69b9b9d0
495392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	.WORD	0x17868691, 0x99c1c158, 0x3a1d1d27, 0x279e9eb9
496392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	.WORD	0xd9e1e138, 0xebf8f813, 0x2b9898b3, 0x22111133
497392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	.WORD	0xd26969bb, 0xa9d9d970, 0x078e8e89, 0x339494a7
498392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	.WORD	0x2d9b9bb6, 0x3c1e1e22, 0x15878792, 0xc9e9e920
499392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	.WORD	0x87cece49, 0xaa5555ff, 0x50282878, 0xa5dfdf7a
500392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	.WORD	0x038c8c8f, 0x59a1a1f8, 0x09898980, 0x1a0d0d17
501392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	.WORD	0x65bfbfda, 0xd7e6e631, 0x844242c6, 0xd06868b8
502392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	.WORD	0x824141c3, 0x299999b0, 0x5a2d2d77, 0x1e0f0f11
503392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	.WORD	0x7bb0b0cb, 0xa85454fc, 0x6dbbbbd6, 0x2c16163a
504392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	.BYTE	0x63, 0x7c, 0x77, 0x7b, 0xf2, 0x6b, 0x6f, 0xc5
505392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	.BYTE	0x30, 0x01, 0x67, 0x2b, 0xfe, 0xd7, 0xab, 0x76
506392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	.BYTE	0xca, 0x82, 0xc9, 0x7d, 0xfa, 0x59, 0x47, 0xf0
507392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	.BYTE	0xad, 0xd4, 0xa2, 0xaf, 0x9c, 0xa4, 0x72, 0xc0
508392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	.BYTE	0xb7, 0xfd, 0x93, 0x26, 0x36, 0x3f, 0xf7, 0xcc
509392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	.BYTE	0x34, 0xa5, 0xe5, 0xf1, 0x71, 0xd8, 0x31, 0x15
510392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	.BYTE	0x04, 0xc7, 0x23, 0xc3, 0x18, 0x96, 0x05, 0x9a
511392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	.BYTE	0x07, 0x12, 0x80, 0xe2, 0xeb, 0x27, 0xb2, 0x75
512392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	.BYTE	0x09, 0x83, 0x2c, 0x1a, 0x1b, 0x6e, 0x5a, 0xa0
513392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	.BYTE	0x52, 0x3b, 0xd6, 0xb3, 0x29, 0xe3, 0x2f, 0x84
514392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	.BYTE	0x53, 0xd1, 0x00, 0xed, 0x20, 0xfc, 0xb1, 0x5b
515392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	.BYTE	0x6a, 0xcb, 0xbe, 0x39, 0x4a, 0x4c, 0x58, 0xcf
516392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	.BYTE	0xd0, 0xef, 0xaa, 0xfb, 0x43, 0x4d, 0x33, 0x85
517392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	.BYTE	0x45, 0xf9, 0x02, 0x7f, 0x50, 0x3c, 0x9f, 0xa8
518392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	.BYTE	0x51, 0xa3, 0x40, 0x8f, 0x92, 0x9d, 0x38, 0xf5
519392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	.BYTE	0xbc, 0xb6, 0xda, 0x21, 0x10, 0xff, 0xf3, 0xd2
520392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	.BYTE	0xcd, 0x0c, 0x13, 0xec, 0x5f, 0x97, 0x44, 0x17
521392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	.BYTE	0xc4, 0xa7, 0x7e, 0x3d, 0x64, 0x5d, 0x19, 0x73
522392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	.BYTE	0x60, 0x81, 0x4f, 0xdc, 0x22, 0x2a, 0x90, 0x88
523392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	.BYTE	0x46, 0xee, 0xb8, 0x14, 0xde, 0x5e, 0x0b, 0xdb
524392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	.BYTE	0xe0, 0x32, 0x3a, 0x0a, 0x49, 0x06, 0x24, 0x5c
525392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	.BYTE	0xc2, 0xd3, 0xac, 0x62, 0x91, 0x95, 0xe4, 0x79
526392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	.BYTE	0xe7, 0xc8, 0x37, 0x6d, 0x8d, 0xd5, 0x4e, 0xa9
527392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	.BYTE	0x6c, 0x56, 0xf4, 0xea, 0x65, 0x7a, 0xae, 0x08
528392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	.BYTE	0xba, 0x78, 0x25, 0x2e, 0x1c, 0xa6, 0xb4, 0xc6
529392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	.BYTE	0xe8, 0xdd, 0x74, 0x1f, 0x4b, 0xbd, 0x8b, 0x8a
530392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	.BYTE	0x70, 0x3e, 0xb5, 0x66, 0x48, 0x03, 0xf6, 0x0e
531392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	.BYTE	0x61, 0x35, 0x57, 0xb9, 0x86, 0xc1, 0x1d, 0x9e
532392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	.BYTE	0xe1, 0xf8, 0x98, 0x11, 0x69, 0xd9, 0x8e, 0x94
533392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	.BYTE	0x9b, 0x1e, 0x87, 0xe9, 0xce, 0x55, 0x28, 0xdf
534392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	.BYTE	0x8c, 0xa1, 0x89, 0x0d, 0xbf, 0xe6, 0x42, 0x68
535392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	.BYTE	0x41, 0x99, 0x2d, 0x0f, 0xb0, 0x54, 0xbb, 0x16
536392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom___
537392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom
538392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom$code.=<<___;
539392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	.EXPORT	AES_decrypt,ENTRY,ARGW0=GR,ARGW1=GR,ARGW2=GR
540392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	.ALIGN	16
541392aa7cc7d2b122614c5393c3e357da07fd07af3Brian CarlstromAES_decrypt
542392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	.PROC
543392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	.CALLINFO	FRAME=`$FRAME-16*$SIZE_T`,NO_CALLS,SAVE_RP,ENTRY_GR=18
544392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	.ENTRY
545392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	$PUSH	%r2,-$SAVED_RP(%sp)	; standard prologue
546392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	$PUSHMA	%r3,$FRAME(%sp)
547392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	$PUSH	%r4,`-$FRAME+1*$SIZE_T`(%sp)
548392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	$PUSH	%r5,`-$FRAME+2*$SIZE_T`(%sp)
549392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	$PUSH	%r6,`-$FRAME+3*$SIZE_T`(%sp)
550392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	$PUSH	%r7,`-$FRAME+4*$SIZE_T`(%sp)
551392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	$PUSH	%r8,`-$FRAME+5*$SIZE_T`(%sp)
552392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	$PUSH	%r9,`-$FRAME+6*$SIZE_T`(%sp)
553392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	$PUSH	%r10,`-$FRAME+7*$SIZE_T`(%sp)
554392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	$PUSH	%r11,`-$FRAME+8*$SIZE_T`(%sp)
555392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	$PUSH	%r12,`-$FRAME+9*$SIZE_T`(%sp)
556392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	$PUSH	%r13,`-$FRAME+10*$SIZE_T`(%sp)
557392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	$PUSH	%r14,`-$FRAME+11*$SIZE_T`(%sp)
558392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	$PUSH	%r15,`-$FRAME+12*$SIZE_T`(%sp)
559392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	$PUSH	%r16,`-$FRAME+13*$SIZE_T`(%sp)
560392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	$PUSH	%r17,`-$FRAME+14*$SIZE_T`(%sp)
561392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	$PUSH	%r18,`-$FRAME+15*$SIZE_T`(%sp)
562392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom
563392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	blr	%r0,$tbl
564392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	ldi	3,$t0
565392aa7cc7d2b122614c5393c3e357da07fd07af3Brian CarlstromL\$dec_pic
566392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	andcm	$tbl,$t0,$tbl
567392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	ldo	L\$AES_Td-L\$dec_pic($tbl),$tbl
568392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom
569392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	and	$inp,$t0,$t0
570392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	sub	$inp,$t0,$inp
571392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	ldw	0($inp),$s0
572392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	ldw	4($inp),$s1
573392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	ldw	8($inp),$s2
574392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	comib,=	0,$t0,L\$dec_inp_aligned
575392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	ldw	12($inp),$s3
576392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom
577392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	sh3addl	$t0,%r0,$t0
578392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	subi	32,$t0,$t0
579392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	mtctl	$t0,%cr11
580392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	ldw	16($inp),$t1
581392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vshd	$s0,$s1,$s0
582392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vshd	$s1,$s2,$s1
583392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vshd	$s2,$s3,$s2
584392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vshd	$s3,$t1,$s3
585392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom
586392aa7cc7d2b122614c5393c3e357da07fd07af3Brian CarlstromL\$dec_inp_aligned
587392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	bl	_parisc_AES_decrypt,%r31
588392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	nop
589392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom
590392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	extru,<> $out,31,2,%r0
591392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	b	L\$dec_out_aligned
592392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	nop
593392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom
594392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	_srm	$s0,24,$acc0
595392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	_srm	$s0,16,$acc1
596392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	stb	$acc0,0($out)
597392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	_srm	$s0,8,$acc2
598392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	stb	$acc1,1($out)
599392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	_srm	$s1,24,$acc4
600392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	stb	$acc2,2($out)
601392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	_srm	$s1,16,$acc5
602392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	stb	$s0,3($out)
603392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	_srm	$s1,8,$acc6
604392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	stb	$acc4,4($out)
605392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	_srm	$s2,24,$acc0
606392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	stb	$acc5,5($out)
607392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	_srm	$s2,16,$acc1
608392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	stb	$acc6,6($out)
609392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	_srm	$s2,8,$acc2
610392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	stb	$s1,7($out)
611392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	_srm	$s3,24,$acc4
612392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	stb	$acc0,8($out)
613392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	_srm	$s3,16,$acc5
614392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	stb	$acc1,9($out)
615392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	_srm	$s3,8,$acc6
616392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	stb	$acc2,10($out)
617392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	stb	$s2,11($out)
618392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	stb	$acc4,12($out)
619392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	stb	$acc5,13($out)
620392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	stb	$acc6,14($out)
621392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	b	L\$dec_done
622392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	stb	$s3,15($out)
623392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom
624392aa7cc7d2b122614c5393c3e357da07fd07af3Brian CarlstromL\$dec_out_aligned
625392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	stw	$s0,0($out)
626392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	stw	$s1,4($out)
627392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	stw	$s2,8($out)
628392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	stw	$s3,12($out)
629392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom
630392aa7cc7d2b122614c5393c3e357da07fd07af3Brian CarlstromL\$dec_done
631392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	$POP	`-$FRAME-$SAVED_RP`(%sp),%r2	; standard epilogue
632392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	$POP	`-$FRAME+1*$SIZE_T`(%sp),%r4
633392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	$POP	`-$FRAME+2*$SIZE_T`(%sp),%r5
634392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	$POP	`-$FRAME+3*$SIZE_T`(%sp),%r6
635392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	$POP	`-$FRAME+4*$SIZE_T`(%sp),%r7
636392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	$POP	`-$FRAME+5*$SIZE_T`(%sp),%r8
637392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	$POP	`-$FRAME+6*$SIZE_T`(%sp),%r9
638392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	$POP	`-$FRAME+7*$SIZE_T`(%sp),%r10
639392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	$POP	`-$FRAME+8*$SIZE_T`(%sp),%r11
640392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	$POP	`-$FRAME+9*$SIZE_T`(%sp),%r12
641392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	$POP	`-$FRAME+10*$SIZE_T`(%sp),%r13
642392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	$POP	`-$FRAME+11*$SIZE_T`(%sp),%r14
643392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	$POP	`-$FRAME+12*$SIZE_T`(%sp),%r15
644392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	$POP	`-$FRAME+13*$SIZE_T`(%sp),%r16
645392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	$POP	`-$FRAME+14*$SIZE_T`(%sp),%r17
646392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	$POP	`-$FRAME+15*$SIZE_T`(%sp),%r18
647392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	bv	(%r2)
648392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	.EXIT
649392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	$POPMB	-$FRAME(%sp),%r3
650392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	.PROCEND
651392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom
652392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	.ALIGN	16
653392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom_parisc_AES_decrypt
654392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	.PROC
655392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	.CALLINFO	MILLICODE
656392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	.ENTRY
657392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	ldw	240($key),$rounds
658392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	ldw	0($key),$t0
659392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	ldw	4($key),$t1
660392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	ldw	8($key),$t2
661392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	ldw	12($key),$t3
662392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	_srm	$rounds,1,$rounds
663392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	xor	$t0,$s0,$s0
664392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	ldw	16($key),$t0
665392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	xor	$t1,$s1,$s1
666392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	ldw	20($key),$t1
667392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	_srm	$s0,24,$acc0
668392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	xor	$t2,$s2,$s2
669392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	ldw	24($key),$t2
670392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	xor	$t3,$s3,$s3
671392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	ldw	28($key),$t3
672392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	_srm	$s3,16,$acc1
673392aa7cc7d2b122614c5393c3e357da07fd07af3Brian CarlstromL\$dec_loop
674392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	_srm	$s2,8,$acc2
675392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	ldwx,s	$acc0($tbl),$acc0
676392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	_srm	$s1,0,$acc3
677392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	ldwx,s	$acc1($tbl),$acc1
678392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	_srm	$s1,24,$acc4
679392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	ldwx,s	$acc2($tbl),$acc2
680392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	_srm	$s0,16,$acc5
681392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	ldwx,s	$acc3($tbl),$acc3
682392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	_srm	$s3,8,$acc6
683392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	ldwx,s	$acc4($tbl),$acc4
684392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	_srm	$s2,0,$acc7
685392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	ldwx,s	$acc5($tbl),$acc5
686392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	_srm	$s2,24,$acc8
687392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	ldwx,s	$acc6($tbl),$acc6
688392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	_srm	$s1,16,$acc9
689392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	ldwx,s	$acc7($tbl),$acc7
690392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	_srm	$s0,8,$acc10
691392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	ldwx,s	$acc8($tbl),$acc8
692392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	_srm	$s3,0,$acc11
693392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	ldwx,s	$acc9($tbl),$acc9
694392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	_srm	$s3,24,$acc12
695392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	ldwx,s	$acc10($tbl),$acc10
696392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	_srm	$s2,16,$acc13
697392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	ldwx,s	$acc11($tbl),$acc11
698392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	_srm	$s1,8,$acc14
699392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	ldwx,s	$acc12($tbl),$acc12
700392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	_srm	$s0,0,$acc15
701392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	ldwx,s	$acc13($tbl),$acc13
702392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	ldwx,s	$acc14($tbl),$acc14
703392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	ldwx,s	$acc15($tbl),$acc15
704392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	addib,= -1,$rounds,L\$dec_last
705392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	ldo	32($key),$key
706392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom
707392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom		_ror	$acc1,8,$acc1
708392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom		xor	$acc0,$t0,$t0
709392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	ldw	0($key),$s0
710392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom		_ror	$acc2,16,$acc2
711392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom		xor	$acc1,$t0,$t0
712392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	ldw	4($key),$s1
713392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom		_ror	$acc3,24,$acc3
714392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom		xor	$acc2,$t0,$t0
715392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	ldw	8($key),$s2
716392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom		_ror	$acc5,8,$acc5
717392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom		xor	$acc3,$t0,$t0
718392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	ldw	12($key),$s3
719392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom		_ror	$acc6,16,$acc6
720392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom		xor	$acc4,$t1,$t1
721392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom		_ror	$acc7,24,$acc7
722392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom		xor	$acc5,$t1,$t1
723392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom		_ror	$acc9,8,$acc9
724392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom		xor	$acc6,$t1,$t1
725392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom		_ror	$acc10,16,$acc10
726392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom		xor	$acc7,$t1,$t1
727392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom		_ror	$acc11,24,$acc11
728392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom		xor	$acc8,$t2,$t2
729392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom		_ror	$acc13,8,$acc13
730392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom		xor	$acc9,$t2,$t2
731392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom		_ror	$acc14,16,$acc14
732392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom		xor	$acc10,$t2,$t2
733392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom		_ror	$acc15,24,$acc15
734392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom		xor	$acc11,$t2,$t2
735392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom		xor	$acc12,$acc14,$acc14
736392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom		xor	$acc13,$t3,$t3
737392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	_srm	$t0,24,$acc0
738392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom		xor	$acc14,$t3,$t3
739392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom		xor	$acc15,$t3,$t3
740392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	_srm	$t3,16,$acc1
741392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom
742392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	_srm	$t2,8,$acc2
743392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	ldwx,s	$acc0($tbl),$acc0
744392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	_srm	$t1,0,$acc3
745392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	ldwx,s	$acc1($tbl),$acc1
746392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	_srm	$t1,24,$acc4
747392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	ldwx,s	$acc2($tbl),$acc2
748392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	_srm	$t0,16,$acc5
749392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	ldwx,s	$acc3($tbl),$acc3
750392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	_srm	$t3,8,$acc6
751392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	ldwx,s	$acc4($tbl),$acc4
752392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	_srm	$t2,0,$acc7
753392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	ldwx,s	$acc5($tbl),$acc5
754392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	_srm	$t2,24,$acc8
755392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	ldwx,s	$acc6($tbl),$acc6
756392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	_srm	$t1,16,$acc9
757392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	ldwx,s	$acc7($tbl),$acc7
758392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	_srm	$t0,8,$acc10
759392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	ldwx,s	$acc8($tbl),$acc8
760392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	_srm	$t3,0,$acc11
761392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	ldwx,s	$acc9($tbl),$acc9
762392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	_srm	$t3,24,$acc12
763392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	ldwx,s	$acc10($tbl),$acc10
764392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	_srm	$t2,16,$acc13
765392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	ldwx,s	$acc11($tbl),$acc11
766392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	_srm	$t1,8,$acc14
767392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	ldwx,s	$acc12($tbl),$acc12
768392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	_srm	$t0,0,$acc15
769392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	ldwx,s	$acc13($tbl),$acc13
770392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom		_ror	$acc1,8,$acc1
771392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	ldwx,s	$acc14($tbl),$acc14
772392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom
773392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom		_ror	$acc2,16,$acc2
774392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom		xor	$acc0,$s0,$s0
775392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	ldwx,s	$acc15($tbl),$acc15
776392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom		_ror	$acc3,24,$acc3
777392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom		xor	$acc1,$s0,$s0
778392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	ldw	16($key),$t0
779392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom		_ror	$acc5,8,$acc5
780392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom		xor	$acc2,$s0,$s0
781392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	ldw	20($key),$t1
782392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom		_ror	$acc6,16,$acc6
783392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom		xor	$acc3,$s0,$s0
784392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	ldw	24($key),$t2
785392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom		_ror	$acc7,24,$acc7
786392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom		xor	$acc4,$s1,$s1
787392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	ldw	28($key),$t3
788392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom		_ror	$acc9,8,$acc9
789392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom		xor	$acc5,$s1,$s1
790392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	ldw	1024+0($tbl),%r0		; prefetch td4
791392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom		_ror	$acc10,16,$acc10
792392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom		xor	$acc6,$s1,$s1
793392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	ldw	1024+32($tbl),%r0		; prefetch td4
794392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom		_ror	$acc11,24,$acc11
795392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom		xor	$acc7,$s1,$s1
796392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	ldw	1024+64($tbl),%r0		; prefetch td4
797392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom		_ror	$acc13,8,$acc13
798392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom		xor	$acc8,$s2,$s2
799392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	ldw	1024+96($tbl),%r0		; prefetch td4
800392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom		_ror	$acc14,16,$acc14
801392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom		xor	$acc9,$s2,$s2
802392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	ldw	1024+128($tbl),%r0		; prefetch td4
803392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom		_ror	$acc15,24,$acc15
804392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom		xor	$acc10,$s2,$s2
805392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	ldw	1024+160($tbl),%r0		; prefetch td4
806392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	_srm	$s0,24,$acc0
807392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom		xor	$acc11,$s2,$s2
808392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	ldw	1024+192($tbl),%r0		; prefetch td4
809392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom		xor	$acc12,$acc14,$acc14
810392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom		xor	$acc13,$s3,$s3
811392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	ldw	1024+224($tbl),%r0		; prefetch td4
812392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom		xor	$acc14,$s3,$s3
813392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom		xor	$acc15,$s3,$s3
814392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	b	L\$dec_loop
815392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	_srm	$s3,16,$acc1
816392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom
817392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	.ALIGN	16
818392aa7cc7d2b122614c5393c3e357da07fd07af3Brian CarlstromL\$dec_last
819392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	ldo	1024($tbl),$rounds
820392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom		_ror	$acc1,8,$acc1
821392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom		xor	$acc0,$t0,$t0
822392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	ldw	0($key),$s0
823392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom		_ror	$acc2,16,$acc2
824392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom		xor	$acc1,$t0,$t0
825392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	ldw	4($key),$s1
826392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom		_ror	$acc3,24,$acc3
827392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom		xor	$acc2,$t0,$t0
828392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	ldw	8($key),$s2
829392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom		_ror	$acc5,8,$acc5
830392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom		xor	$acc3,$t0,$t0
831392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	ldw	12($key),$s3
832392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom		_ror	$acc6,16,$acc6
833392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom		xor	$acc4,$t1,$t1
834392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom		_ror	$acc7,24,$acc7
835392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom		xor	$acc5,$t1,$t1
836392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom		_ror	$acc9,8,$acc9
837392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom		xor	$acc6,$t1,$t1
838392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom		_ror	$acc10,16,$acc10
839392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom		xor	$acc7,$t1,$t1
840392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom		_ror	$acc11,24,$acc11
841392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom		xor	$acc8,$t2,$t2
842392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom		_ror	$acc13,8,$acc13
843392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom		xor	$acc9,$t2,$t2
844392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom		_ror	$acc14,16,$acc14
845392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom		xor	$acc10,$t2,$t2
846392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom		_ror	$acc15,24,$acc15
847392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom		xor	$acc11,$t2,$t2
848392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom		xor	$acc12,$acc14,$acc14
849392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom		xor	$acc13,$t3,$t3
850392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	_srm	$t0,24,$acc0
851392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom		xor	$acc14,$t3,$t3
852392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom		xor	$acc15,$t3,$t3
853392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	_srm	$t3,16,$acc1
854392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom
855392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	_srm	$t2,8,$acc2
856392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	ldbx	$acc0($rounds),$acc0
857392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	_srm	$t1,24,$acc4
858392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	ldbx	$acc1($rounds),$acc1
859392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	_srm	$t0,16,$acc5
860392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	_srm	$t1,0,$acc3
861392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	ldbx	$acc2($rounds),$acc2
862392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	ldbx	$acc3($rounds),$acc3
863392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	_srm	$t3,8,$acc6
864392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	ldbx	$acc4($rounds),$acc4
865392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	_srm	$t2,24,$acc8
866392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	ldbx	$acc5($rounds),$acc5
867392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	_srm	$t1,16,$acc9
868392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	_srm	$t2,0,$acc7
869392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	ldbx	$acc6($rounds),$acc6
870392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	ldbx	$acc7($rounds),$acc7
871392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	_srm	$t0,8,$acc10
872392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	ldbx	$acc8($rounds),$acc8
873392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	_srm	$t3,24,$acc12
874392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	ldbx	$acc9($rounds),$acc9
875392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	_srm	$t2,16,$acc13
876392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	_srm	$t3,0,$acc11
877392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	ldbx	$acc10($rounds),$acc10
878392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	_srm	$t1,8,$acc14
879392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	ldbx	$acc11($rounds),$acc11
880392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	ldbx	$acc12($rounds),$acc12
881392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	ldbx	$acc13($rounds),$acc13
882392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	_srm	$t0,0,$acc15
883392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	ldbx	$acc14($rounds),$acc14
884392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom
885392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom		dep	$acc0,7,8,$acc3
886392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	ldbx	$acc15($rounds),$acc15
887392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom		dep	$acc4,7,8,$acc7
888392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom		dep	$acc1,15,8,$acc3
889392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom		dep	$acc5,15,8,$acc7
890392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom		dep	$acc2,23,8,$acc3
891392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom		dep	$acc6,23,8,$acc7
892392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom		xor	$acc3,$s0,$s0
893392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom		xor	$acc7,$s1,$s1
894392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom		dep	$acc8,7,8,$acc11
895392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom		dep	$acc12,7,8,$acc15
896392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom		dep	$acc9,15,8,$acc11
897392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom		dep	$acc13,15,8,$acc15
898392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom		dep	$acc10,23,8,$acc11
899392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom		dep	$acc14,23,8,$acc15
900392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom		xor	$acc11,$s2,$s2
901392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom
902392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	bv	(%r31)
903392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	.EXIT
904392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom		xor	$acc15,$s3,$s3
905392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	.PROCEND
906392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom
907392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	.ALIGN	64
908392aa7cc7d2b122614c5393c3e357da07fd07af3Brian CarlstromL\$AES_Td
909392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	.WORD	0x51f4a750, 0x7e416553, 0x1a17a4c3, 0x3a275e96
910392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	.WORD	0x3bab6bcb, 0x1f9d45f1, 0xacfa58ab, 0x4be30393
911392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	.WORD	0x2030fa55, 0xad766df6, 0x88cc7691, 0xf5024c25
912392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	.WORD	0x4fe5d7fc, 0xc52acbd7, 0x26354480, 0xb562a38f
913392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	.WORD	0xdeb15a49, 0x25ba1b67, 0x45ea0e98, 0x5dfec0e1
914392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	.WORD	0xc32f7502, 0x814cf012, 0x8d4697a3, 0x6bd3f9c6
915392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	.WORD	0x038f5fe7, 0x15929c95, 0xbf6d7aeb, 0x955259da
916392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	.WORD	0xd4be832d, 0x587421d3, 0x49e06929, 0x8ec9c844
917392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	.WORD	0x75c2896a, 0xf48e7978, 0x99583e6b, 0x27b971dd
918392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	.WORD	0xbee14fb6, 0xf088ad17, 0xc920ac66, 0x7dce3ab4
919392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	.WORD	0x63df4a18, 0xe51a3182, 0x97513360, 0x62537f45
920392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	.WORD	0xb16477e0, 0xbb6bae84, 0xfe81a01c, 0xf9082b94
921392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	.WORD	0x70486858, 0x8f45fd19, 0x94de6c87, 0x527bf8b7
922392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	.WORD	0xab73d323, 0x724b02e2, 0xe31f8f57, 0x6655ab2a
923392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	.WORD	0xb2eb2807, 0x2fb5c203, 0x86c57b9a, 0xd33708a5
924392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	.WORD	0x302887f2, 0x23bfa5b2, 0x02036aba, 0xed16825c
925392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	.WORD	0x8acf1c2b, 0xa779b492, 0xf307f2f0, 0x4e69e2a1
926392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	.WORD	0x65daf4cd, 0x0605bed5, 0xd134621f, 0xc4a6fe8a
927392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	.WORD	0x342e539d, 0xa2f355a0, 0x058ae132, 0xa4f6eb75
928392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	.WORD	0x0b83ec39, 0x4060efaa, 0x5e719f06, 0xbd6e1051
929392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	.WORD	0x3e218af9, 0x96dd063d, 0xdd3e05ae, 0x4de6bd46
930392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	.WORD	0x91548db5, 0x71c45d05, 0x0406d46f, 0x605015ff
931392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	.WORD	0x1998fb24, 0xd6bde997, 0x894043cc, 0x67d99e77
932392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	.WORD	0xb0e842bd, 0x07898b88, 0xe7195b38, 0x79c8eedb
933392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	.WORD	0xa17c0a47, 0x7c420fe9, 0xf8841ec9, 0x00000000
934392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	.WORD	0x09808683, 0x322bed48, 0x1e1170ac, 0x6c5a724e
935392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	.WORD	0xfd0efffb, 0x0f853856, 0x3daed51e, 0x362d3927
936392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	.WORD	0x0a0fd964, 0x685ca621, 0x9b5b54d1, 0x24362e3a
937392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	.WORD	0x0c0a67b1, 0x9357e70f, 0xb4ee96d2, 0x1b9b919e
938392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	.WORD	0x80c0c54f, 0x61dc20a2, 0x5a774b69, 0x1c121a16
939392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	.WORD	0xe293ba0a, 0xc0a02ae5, 0x3c22e043, 0x121b171d
940392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	.WORD	0x0e090d0b, 0xf28bc7ad, 0x2db6a8b9, 0x141ea9c8
941392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	.WORD	0x57f11985, 0xaf75074c, 0xee99ddbb, 0xa37f60fd
942392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	.WORD	0xf701269f, 0x5c72f5bc, 0x44663bc5, 0x5bfb7e34
943392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	.WORD	0x8b432976, 0xcb23c6dc, 0xb6edfc68, 0xb8e4f163
944392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	.WORD	0xd731dcca, 0x42638510, 0x13972240, 0x84c61120
945392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	.WORD	0x854a247d, 0xd2bb3df8, 0xaef93211, 0xc729a16d
946392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	.WORD	0x1d9e2f4b, 0xdcb230f3, 0x0d8652ec, 0x77c1e3d0
947392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	.WORD	0x2bb3166c, 0xa970b999, 0x119448fa, 0x47e96422
948392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	.WORD	0xa8fc8cc4, 0xa0f03f1a, 0x567d2cd8, 0x223390ef
949392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	.WORD	0x87494ec7, 0xd938d1c1, 0x8ccaa2fe, 0x98d40b36
950392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	.WORD	0xa6f581cf, 0xa57ade28, 0xdab78e26, 0x3fadbfa4
951392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	.WORD	0x2c3a9de4, 0x5078920d, 0x6a5fcc9b, 0x547e4662
952392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	.WORD	0xf68d13c2, 0x90d8b8e8, 0x2e39f75e, 0x82c3aff5
953392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	.WORD	0x9f5d80be, 0x69d0937c, 0x6fd52da9, 0xcf2512b3
954392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	.WORD	0xc8ac993b, 0x10187da7, 0xe89c636e, 0xdb3bbb7b
955392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	.WORD	0xcd267809, 0x6e5918f4, 0xec9ab701, 0x834f9aa8
956392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	.WORD	0xe6956e65, 0xaaffe67e, 0x21bccf08, 0xef15e8e6
957392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	.WORD	0xbae79bd9, 0x4a6f36ce, 0xea9f09d4, 0x29b07cd6
958392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	.WORD	0x31a4b2af, 0x2a3f2331, 0xc6a59430, 0x35a266c0
959392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	.WORD	0x744ebc37, 0xfc82caa6, 0xe090d0b0, 0x33a7d815
960392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	.WORD	0xf104984a, 0x41ecdaf7, 0x7fcd500e, 0x1791f62f
961392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	.WORD	0x764dd68d, 0x43efb04d, 0xccaa4d54, 0xe49604df
962392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	.WORD	0x9ed1b5e3, 0x4c6a881b, 0xc12c1fb8, 0x4665517f
963392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	.WORD	0x9d5eea04, 0x018c355d, 0xfa877473, 0xfb0b412e
964392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	.WORD	0xb3671d5a, 0x92dbd252, 0xe9105633, 0x6dd64713
965392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	.WORD	0x9ad7618c, 0x37a10c7a, 0x59f8148e, 0xeb133c89
966392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	.WORD	0xcea927ee, 0xb761c935, 0xe11ce5ed, 0x7a47b13c
967392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	.WORD	0x9cd2df59, 0x55f2733f, 0x1814ce79, 0x73c737bf
968392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	.WORD	0x53f7cdea, 0x5ffdaa5b, 0xdf3d6f14, 0x7844db86
969392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	.WORD	0xcaaff381, 0xb968c43e, 0x3824342c, 0xc2a3405f
970392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	.WORD	0x161dc372, 0xbce2250c, 0x283c498b, 0xff0d9541
971392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	.WORD	0x39a80171, 0x080cb3de, 0xd8b4e49c, 0x6456c190
972392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	.WORD	0x7bcb8461, 0xd532b670, 0x486c5c74, 0xd0b85742
973392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	.BYTE	0x52, 0x09, 0x6a, 0xd5, 0x30, 0x36, 0xa5, 0x38
974392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	.BYTE	0xbf, 0x40, 0xa3, 0x9e, 0x81, 0xf3, 0xd7, 0xfb
975392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	.BYTE	0x7c, 0xe3, 0x39, 0x82, 0x9b, 0x2f, 0xff, 0x87
976392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	.BYTE	0x34, 0x8e, 0x43, 0x44, 0xc4, 0xde, 0xe9, 0xcb
977392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	.BYTE	0x54, 0x7b, 0x94, 0x32, 0xa6, 0xc2, 0x23, 0x3d
978392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	.BYTE	0xee, 0x4c, 0x95, 0x0b, 0x42, 0xfa, 0xc3, 0x4e
979392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	.BYTE	0x08, 0x2e, 0xa1, 0x66, 0x28, 0xd9, 0x24, 0xb2
980392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	.BYTE	0x76, 0x5b, 0xa2, 0x49, 0x6d, 0x8b, 0xd1, 0x25
981392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	.BYTE	0x72, 0xf8, 0xf6, 0x64, 0x86, 0x68, 0x98, 0x16
982392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	.BYTE	0xd4, 0xa4, 0x5c, 0xcc, 0x5d, 0x65, 0xb6, 0x92
983392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	.BYTE	0x6c, 0x70, 0x48, 0x50, 0xfd, 0xed, 0xb9, 0xda
984392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	.BYTE	0x5e, 0x15, 0x46, 0x57, 0xa7, 0x8d, 0x9d, 0x84
985392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	.BYTE	0x90, 0xd8, 0xab, 0x00, 0x8c, 0xbc, 0xd3, 0x0a
986392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	.BYTE	0xf7, 0xe4, 0x58, 0x05, 0xb8, 0xb3, 0x45, 0x06
987392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	.BYTE	0xd0, 0x2c, 0x1e, 0x8f, 0xca, 0x3f, 0x0f, 0x02
988392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	.BYTE	0xc1, 0xaf, 0xbd, 0x03, 0x01, 0x13, 0x8a, 0x6b
989392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	.BYTE	0x3a, 0x91, 0x11, 0x41, 0x4f, 0x67, 0xdc, 0xea
990392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	.BYTE	0x97, 0xf2, 0xcf, 0xce, 0xf0, 0xb4, 0xe6, 0x73
991392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	.BYTE	0x96, 0xac, 0x74, 0x22, 0xe7, 0xad, 0x35, 0x85
992392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	.BYTE	0xe2, 0xf9, 0x37, 0xe8, 0x1c, 0x75, 0xdf, 0x6e
993392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	.BYTE	0x47, 0xf1, 0x1a, 0x71, 0x1d, 0x29, 0xc5, 0x89
994392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	.BYTE	0x6f, 0xb7, 0x62, 0x0e, 0xaa, 0x18, 0xbe, 0x1b
995392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	.BYTE	0xfc, 0x56, 0x3e, 0x4b, 0xc6, 0xd2, 0x79, 0x20
996392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	.BYTE	0x9a, 0xdb, 0xc0, 0xfe, 0x78, 0xcd, 0x5a, 0xf4
997392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	.BYTE	0x1f, 0xdd, 0xa8, 0x33, 0x88, 0x07, 0xc7, 0x31
998392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	.BYTE	0xb1, 0x12, 0x10, 0x59, 0x27, 0x80, 0xec, 0x5f
999392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	.BYTE	0x60, 0x51, 0x7f, 0xa9, 0x19, 0xb5, 0x4a, 0x0d
1000392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	.BYTE	0x2d, 0xe5, 0x7a, 0x9f, 0x93, 0xc9, 0x9c, 0xef
1001392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	.BYTE	0xa0, 0xe0, 0x3b, 0x4d, 0xae, 0x2a, 0xf5, 0xb0
1002392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	.BYTE	0xc8, 0xeb, 0xbb, 0x3c, 0x83, 0x53, 0x99, 0x61
1003392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	.BYTE	0x17, 0x2b, 0x04, 0x7e, 0xba, 0x77, 0xd6, 0x26
1004392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	.BYTE	0xe1, 0x69, 0x14, 0x63, 0x55, 0x21, 0x0c, 0x7d
1005392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	.STRINGZ "AES for PA-RISC, CRYPTOGAMS by <appro\@openssl.org>"
1006392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom___
1007392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom
1008392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstromforeach (split("\n",$code)) {
1009392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	s/\`([^\`]*)\`/eval $1/ge;
1010392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom
1011392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	# translate made up instructons: _ror, _srm
1012392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	s/_ror(\s+)(%r[0-9]+),/shd$1$2,$2,/				or
1013392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom
1014392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	s/_srm(\s+%r[0-9]+),([0-9]+),/
1015392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom		$SIZE_T==4 ? sprintf("extru%s,%d,8,",$1,31-$2)
1016392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom		:            sprintf("extrd,u%s,%d,8,",$1,63-$2)/e;
1017392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom
1018392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	s/,\*/,/ if ($SIZE_T==4);
1019392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	print $_,"\n";
1020392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom}
1021392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstromclose STDOUT;
1022