VirtualBox

source: vbox/trunk/src/libs/openssl-3.1.0/crypto/aes/asm/aes-mips.pl@ 99371

最後變更 在這個檔案從99371是 99366,由 vboxsync 提交於 23 月 前

openssl-3.1.0: Applied and adjusted our OpenSSL changes to 3.0.7. bugref:10418

檔案大小: 53.2 KB
 
1#! /usr/bin/env perl
2# Copyright 2010-2020 The OpenSSL Project Authors. All Rights Reserved.
3#
4# Licensed under the Apache License 2.0 (the "License"). You may not use
5# this file except in compliance with the License. You can obtain a copy
6# in the file LICENSE in the source distribution or at
7# https://www.openssl.org/source/license.html
8
9
10# ====================================================================
11# Written by Andy Polyakov <[email protected]> for the OpenSSL
12# project. The module is, however, dual licensed under OpenSSL and
13# CRYPTOGAMS licenses depending on where you obtain it. For further
14# details see http://www.openssl.org/~appro/cryptogams/.
15# ====================================================================
16
17# AES for MIPS
18
19# October 2010
20#
21# Code uses 1K[+256B] S-box and on single-issue core [such as R5000]
22# spends ~68 cycles per byte processed with 128-bit key. This is ~16%
23# faster than gcc-generated code, which is not very impressive. But
24# recall that compressed S-box requires extra processing, namely
25# additional rotations. Rotations are implemented with lwl/lwr pairs,
26# which is normally used for loading unaligned data. Another cool
27# thing about this module is its endian neutrality, which means that
28# it processes data without ever changing byte order...
29
30# September 2012
31#
32# Add MIPS32R2 (~10% less instructions) and SmartMIPS ASE (further
33# ~25% less instructions) code. Note that there is no run-time switch,
34# instead, code path is chosen upon pre-process time, pass -mips32r2
35# or/and -msmartmips.
36
37# February 2019
38#
39# Normalize MIPS32R2 AES table address calculation by always using EXT
40# instruction. This reduces the standard codebase by another 10%.
41
42######################################################################
43# There is a number of MIPS ABI in use, O32 and N32/64 are most
44# widely used. Then there is a new contender: NUBI. It appears that if
45# one picks the latter, it's possible to arrange code in ABI neutral
46# manner. Therefore let's stick to NUBI register layout:
47#
48($zero,$at,$t0,$t1,$t2)=map("\$$_",(0..2,24,25));
49($a0,$a1,$a2,$a3,$a4,$a5,$a6,$a7)=map("\$$_",(4..11));
50($s0,$s1,$s2,$s3,$s4,$s5,$s6,$s7,$s8,$s9,$s10,$s11)=map("\$$_",(12..23));
51($gp,$tp,$sp,$fp,$ra)=map("\$$_",(3,28..31));
52#
53# The return value is placed in $a0. Following coding rules facilitate
54# interoperability:
55#
56# - never ever touch $tp, "thread pointer", former $gp;
57# - copy return value to $t0, former $v0 [or to $a0 if you're adapting
58# old code];
59# - on O32 populate $a4-$a7 with 'lw $aN,4*N($sp)' if necessary;
60#
61# For reference here is register layout for N32/64 MIPS ABIs:
62#
63# ($zero,$at,$v0,$v1)=map("\$$_",(0..3));
64# ($a0,$a1,$a2,$a3,$a4,$a5,$a6,$a7)=map("\$$_",(4..11));
65# ($t0,$t1,$t2,$t3,$t8,$t9)=map("\$$_",(12..15,24,25));
66# ($s0,$s1,$s2,$s3,$s4,$s5,$s6,$s7)=map("\$$_",(16..23));
67# ($gp,$sp,$fp,$ra)=map("\$$_",(28..31));
68
69# $output is the last argument if it looks like a file (it has an extension)
70# $flavour is the first argument if it doesn't look like a file
71$output = $#ARGV >= 0 && $ARGV[$#ARGV] =~ m|\.\w+$| ? pop : undef;
72$flavour = $#ARGV >= 0 && $ARGV[0] !~ m|\.| ? shift : undef;
73$flavour ||= "o32"; # supported flavours are o32,n32,64,nubi32,nubi64
74
75if ($flavour =~ /64|n32/i) {
76 $PTR_LA="dla";
77 $PTR_ADD="daddu"; # incidentally works even on n32
78 $PTR_SUB="dsubu"; # incidentally works even on n32
79 $PTR_INS="dins";
80 $REG_S="sd";
81 $REG_L="ld";
82 $PTR_SLL="dsll"; # incidentally works even on n32
83 $SZREG=8;
84} else {
85 $PTR_LA="la";
86 $PTR_ADD="addu";
87 $PTR_SUB="subu";
88 $PTR_INS="ins";
89 $REG_S="sw";
90 $REG_L="lw";
91 $PTR_SLL="sll";
92 $SZREG=4;
93}
94$pf = ($flavour =~ /nubi/i) ? $t0 : $t2;
95#
96# <[email protected]>
97#
98######################################################################
99
100$big_endian=(`echo MIPSEB | $ENV{CC} -E -`=~/MIPSEB/)?0:1 if ($ENV{CC});
101
102if (!defined($big_endian))
103{ $big_endian=(unpack('L',pack('N',1))==1); }
104
105my ($MSB,$LSB)=(0,3); # automatically converted to little-endian
106
107$output and open STDOUT,">$output";
108
109$code.=<<___;
110#include "mips_arch.h"
111
112.text
113#if !defined(__mips_eabi) && (!defined(__vxworks) || defined(__pic__))
114.option pic2
115#endif
116.set noat
117___
118
119
120{{{
121my $FRAMESIZE=16*$SZREG;
122my $SAVED_REGS_MASK = ($flavour =~ /nubi/i) ? "0xc0fff008" : "0xc0ff0000";
123
124my ($inp,$out,$key,$Tbl,$s0,$s1,$s2,$s3)=($a0,$a1,$a2,$a3,$a4,$a5,$a6,$a7);
125my ($i0,$i1,$i2,$i3)=($at,$t0,$t1,$t2);
126my ($t0,$t1,$t2,$t3,$t4,$t5,$t6,$t7,$t8,$t9,$t10,$t11) = map("\$$_",(12..23));
127my ($key0,$cnt)=($gp,$fp);
128
129# instruction ordering is "stolen" from output from MIPSpro assembler
130# invoked with -mips3 -O3 arguments...
131$code.=<<___;
132.align 5
133.ent _mips_AES_encrypt
134_mips_AES_encrypt:
135 .frame $sp,0,$ra
136 .set reorder
137 lw $t0,0($key)
138 lw $t1,4($key)
139 lw $t2,8($key)
140 lw $t3,12($key)
141 lw $cnt,240($key)
142 $PTR_ADD $key0,$key,16
143
144 xor $s0,$t0
145 xor $s1,$t1
146 xor $s2,$t2
147 xor $s3,$t3
148
149 subu $cnt,1
150#if defined(__mips_smartmips)
151 ext $i0,$s1,16,8
152.Loop_enc:
153 ext $i1,$s2,16,8
154 ext $i2,$s3,16,8
155 ext $i3,$s0,16,8
156 lwxs $t0,$i0($Tbl) # Te1[s1>>16]
157 ext $i0,$s2,8,8
158 lwxs $t1,$i1($Tbl) # Te1[s2>>16]
159 ext $i1,$s3,8,8
160 lwxs $t2,$i2($Tbl) # Te1[s3>>16]
161 ext $i2,$s0,8,8
162 lwxs $t3,$i3($Tbl) # Te1[s0>>16]
163 ext $i3,$s1,8,8
164
165 lwxs $t4,$i0($Tbl) # Te2[s2>>8]
166 ext $i0,$s3,0,8
167 lwxs $t5,$i1($Tbl) # Te2[s3>>8]
168 ext $i1,$s0,0,8
169 lwxs $t6,$i2($Tbl) # Te2[s0>>8]
170 ext $i2,$s1,0,8
171 lwxs $t7,$i3($Tbl) # Te2[s1>>8]
172 ext $i3,$s2,0,8
173
174 lwxs $t8,$i0($Tbl) # Te3[s3]
175 ext $i0,$s0,24,8
176 lwxs $t9,$i1($Tbl) # Te3[s0]
177 ext $i1,$s1,24,8
178 lwxs $t10,$i2($Tbl) # Te3[s1]
179 ext $i2,$s2,24,8
180 lwxs $t11,$i3($Tbl) # Te3[s2]
181 ext $i3,$s3,24,8
182
183 rotr $t0,$t0,8
184 rotr $t1,$t1,8
185 rotr $t2,$t2,8
186 rotr $t3,$t3,8
187
188 rotr $t4,$t4,16
189 rotr $t5,$t5,16
190 rotr $t6,$t6,16
191 rotr $t7,$t7,16
192
193 xor $t0,$t4
194 lwxs $t4,$i0($Tbl) # Te0[s0>>24]
195 xor $t1,$t5
196 lwxs $t5,$i1($Tbl) # Te0[s1>>24]
197 xor $t2,$t6
198 lwxs $t6,$i2($Tbl) # Te0[s2>>24]
199 xor $t3,$t7
200 lwxs $t7,$i3($Tbl) # Te0[s3>>24]
201
202 rotr $t8,$t8,24
203 lw $s0,0($key0)
204 rotr $t9,$t9,24
205 lw $s1,4($key0)
206 rotr $t10,$t10,24
207 lw $s2,8($key0)
208 rotr $t11,$t11,24
209 lw $s3,12($key0)
210
211 xor $t0,$t8
212 xor $t1,$t9
213 xor $t2,$t10
214 xor $t3,$t11
215
216 xor $t0,$t4
217 xor $t1,$t5
218 xor $t2,$t6
219 xor $t3,$t7
220
221 subu $cnt,1
222 $PTR_ADD $key0,16
223 xor $s0,$t0
224 xor $s1,$t1
225 xor $s2,$t2
226 xor $s3,$t3
227 .set noreorder
228 bnez $cnt,.Loop_enc
229 ext $i0,$s1,16,8
230
231 _xtr $i0,$s1,16-2
232#else
233#if defined(_MIPS_ARCH_MIPS32R2) || defined(_MIPS_ARCH_MIPS64R2)
234 move $i0,$Tbl
235 move $i1,$Tbl
236 move $i2,$Tbl
237 move $i3,$Tbl
238 ext $t0,$s1,16,8
239.Loop_enc:
240 ext $t1,$s2,16,8
241 ext $t2,$s3,16,8
242 ext $t3,$s0,16,8
243 $PTR_INS $i0,$t0,2,8
244 $PTR_INS $i1,$t1,2,8
245 $PTR_INS $i2,$t2,2,8
246 $PTR_INS $i3,$t3,2,8
247 lw $t0,0($i0) # Te1[s1>>16]
248 ext $t4,$s2,8,8
249 lw $t1,0($i1) # Te1[s2>>16]
250 ext $t5,$s3,8,8
251 lw $t2,0($i2) # Te1[s3>>16]
252 ext $t6,$s0,8,8
253 lw $t3,0($i3) # Te1[s0>>16]
254 ext $t7,$s1,8,8
255 $PTR_INS $i0,$t4,2,8
256 $PTR_INS $i1,$t5,2,8
257 $PTR_INS $i2,$t6,2,8
258 $PTR_INS $i3,$t7,2,8
259#else
260 _xtr $i0,$s1,16-2
261.Loop_enc:
262 _xtr $i1,$s2,16-2
263 _xtr $i2,$s3,16-2
264 _xtr $i3,$s0,16-2
265 and $i0,0x3fc
266 and $i1,0x3fc
267 and $i2,0x3fc
268 and $i3,0x3fc
269 $PTR_ADD $i0,$Tbl
270 $PTR_ADD $i1,$Tbl
271 $PTR_ADD $i2,$Tbl
272 $PTR_ADD $i3,$Tbl
273 lwl $t0,3($i0) # Te1[s1>>16]
274 lwl $t1,3($i1) # Te1[s2>>16]
275 lwl $t2,3($i2) # Te1[s3>>16]
276 lwl $t3,3($i3) # Te1[s0>>16]
277 lwr $t0,2($i0) # Te1[s1>>16]
278 _xtr $i0,$s2,8-2
279 lwr $t1,2($i1) # Te1[s2>>16]
280 _xtr $i1,$s3,8-2
281 lwr $t2,2($i2) # Te1[s3>>16]
282 _xtr $i2,$s0,8-2
283 lwr $t3,2($i3) # Te1[s0>>16]
284 _xtr $i3,$s1,8-2
285 and $i0,0x3fc
286 and $i1,0x3fc
287 and $i2,0x3fc
288 and $i3,0x3fc
289 $PTR_ADD $i0,$Tbl
290 $PTR_ADD $i1,$Tbl
291 $PTR_ADD $i2,$Tbl
292 $PTR_ADD $i3,$Tbl
293#endif
294#if defined(_MIPS_ARCH_MIPS32R2) || defined(_MIPS_ARCH_MIPS64R2)
295 rotr $t0,$t0,8
296 rotr $t1,$t1,8
297 rotr $t2,$t2,8
298 rotr $t3,$t3,8
299# if defined(_MIPSEL)
300 lw $t4,0($i0) # Te2[s2>>8]
301 ext $t8,$s3,0,8
302 lw $t5,0($i1) # Te2[s3>>8]
303 ext $t9,$s0,0,8
304 lw $t6,0($i2) # Te2[s0>>8]
305 ext $t10,$s1,0,8
306 lw $t7,0($i3) # Te2[s1>>8]
307 ext $t11,$s2,0,8
308 $PTR_INS $i0,$t8,2,8
309 $PTR_INS $i1,$t9,2,8
310 $PTR_INS $i2,$t10,2,8
311 $PTR_INS $i3,$t11,2,8
312
313 lw $t8,0($i0) # Te3[s3]
314 $PTR_INS $i0,$s0,2,8
315 lw $t9,0($i1) # Te3[s0]
316 $PTR_INS $i1,$s1,2,8
317 lw $t10,0($i2) # Te3[s1]
318 $PTR_INS $i2,$s2,2,8
319 lw $t11,0($i3) # Te3[s2]
320 $PTR_INS $i3,$s3,2,8
321# else
322 lw $t4,0($i0) # Te2[s2>>8]
323 $PTR_INS $i0,$s3,2,8
324 lw $t5,0($i1) # Te2[s3>>8]
325 $PTR_INS $i1,$s0,2,8
326 lw $t6,0($i2) # Te2[s0>>8]
327 $PTR_INS $i2,$s1,2,8
328 lw $t7,0($i3) # Te2[s1>>8]
329 $PTR_INS $i3,$s2,2,8
330
331 lw $t8,0($i0) # Te3[s3]
332 _xtr $i0,$s0,24-2
333 lw $t9,0($i1) # Te3[s0]
334 _xtr $i1,$s1,24-2
335 lw $t10,0($i2) # Te3[s1]
336 _xtr $i2,$s2,24-2
337 lw $t11,0($i3) # Te3[s2]
338 _xtr $i3,$s3,24-2
339
340 and $i0,0x3fc
341 and $i1,0x3fc
342 and $i2,0x3fc
343 and $i3,0x3fc
344 $PTR_ADD $i0,$Tbl
345 $PTR_ADD $i1,$Tbl
346 $PTR_ADD $i2,$Tbl
347 $PTR_ADD $i3,$Tbl
348# endif
349 rotr $t4,$t4,16
350 rotr $t5,$t5,16
351 rotr $t6,$t6,16
352 rotr $t7,$t7,16
353
354 rotr $t8,$t8,24
355 rotr $t9,$t9,24
356 rotr $t10,$t10,24
357 rotr $t11,$t11,24
358#else
359 lwl $t4,2($i0) # Te2[s2>>8]
360 lwl $t5,2($i1) # Te2[s3>>8]
361 lwl $t6,2($i2) # Te2[s0>>8]
362 lwl $t7,2($i3) # Te2[s1>>8]
363 lwr $t4,1($i0) # Te2[s2>>8]
364 _xtr $i0,$s3,0-2
365 lwr $t5,1($i1) # Te2[s3>>8]
366 _xtr $i1,$s0,0-2
367 lwr $t6,1($i2) # Te2[s0>>8]
368 _xtr $i2,$s1,0-2
369 lwr $t7,1($i3) # Te2[s1>>8]
370 _xtr $i3,$s2,0-2
371
372 and $i0,0x3fc
373 and $i1,0x3fc
374 and $i2,0x3fc
375 and $i3,0x3fc
376 $PTR_ADD $i0,$Tbl
377 $PTR_ADD $i1,$Tbl
378 $PTR_ADD $i2,$Tbl
379 $PTR_ADD $i3,$Tbl
380 lwl $t8,1($i0) # Te3[s3]
381 lwl $t9,1($i1) # Te3[s0]
382 lwl $t10,1($i2) # Te3[s1]
383 lwl $t11,1($i3) # Te3[s2]
384 lwr $t8,0($i0) # Te3[s3]
385 _xtr $i0,$s0,24-2
386 lwr $t9,0($i1) # Te3[s0]
387 _xtr $i1,$s1,24-2
388 lwr $t10,0($i2) # Te3[s1]
389 _xtr $i2,$s2,24-2
390 lwr $t11,0($i3) # Te3[s2]
391 _xtr $i3,$s3,24-2
392
393 and $i0,0x3fc
394 and $i1,0x3fc
395 and $i2,0x3fc
396 and $i3,0x3fc
397 $PTR_ADD $i0,$Tbl
398 $PTR_ADD $i1,$Tbl
399 $PTR_ADD $i2,$Tbl
400 $PTR_ADD $i3,$Tbl
401#endif
402 xor $t0,$t4
403 lw $t4,0($i0) # Te0[s0>>24]
404 xor $t1,$t5
405 lw $t5,0($i1) # Te0[s1>>24]
406 xor $t2,$t6
407 lw $t6,0($i2) # Te0[s2>>24]
408 xor $t3,$t7
409 lw $t7,0($i3) # Te0[s3>>24]
410
411 xor $t0,$t8
412 lw $s0,0($key0)
413 xor $t1,$t9
414 lw $s1,4($key0)
415 xor $t2,$t10
416 lw $s2,8($key0)
417 xor $t3,$t11
418 lw $s3,12($key0)
419
420 xor $t0,$t4
421 xor $t1,$t5
422 xor $t2,$t6
423 xor $t3,$t7
424
425 subu $cnt,1
426 $PTR_ADD $key0,16
427 xor $s0,$t0
428 xor $s1,$t1
429 xor $s2,$t2
430 xor $s3,$t3
431 .set noreorder
432 bnez $cnt,.Loop_enc
433#if defined(_MIPS_ARCH_MIPS32R2) || defined(_MIPS_ARCH_MIPS64R2)
434 ext $t0,$s1,16,8
435#endif
436 _xtr $i0,$s1,16-2
437#endif
438
439 .set reorder
440 _xtr $i1,$s2,16-2
441 _xtr $i2,$s3,16-2
442 _xtr $i3,$s0,16-2
443 and $i0,0x3fc
444 and $i1,0x3fc
445 and $i2,0x3fc
446 and $i3,0x3fc
447 $PTR_ADD $i0,$Tbl
448 $PTR_ADD $i1,$Tbl
449 $PTR_ADD $i2,$Tbl
450 $PTR_ADD $i3,$Tbl
451 lbu $t0,2($i0) # Te4[s1>>16]
452 _xtr $i0,$s2,8-2
453 lbu $t1,2($i1) # Te4[s2>>16]
454 _xtr $i1,$s3,8-2
455 lbu $t2,2($i2) # Te4[s3>>16]
456 _xtr $i2,$s0,8-2
457 lbu $t3,2($i3) # Te4[s0>>16]
458 _xtr $i3,$s1,8-2
459
460 and $i0,0x3fc
461 and $i1,0x3fc
462 and $i2,0x3fc
463 and $i3,0x3fc
464 $PTR_ADD $i0,$Tbl
465 $PTR_ADD $i1,$Tbl
466 $PTR_ADD $i2,$Tbl
467 $PTR_ADD $i3,$Tbl
468#if defined(_MIPS_ARCH_MIPS32R2) || defined(_MIPS_ARCH_MIPS64R2)
469# if defined(_MIPSEL)
470 lbu $t4,2($i0) # Te4[s2>>8]
471 $PTR_INS $i0,$s0,2,8
472 lbu $t5,2($i1) # Te4[s3>>8]
473 $PTR_INS $i1,$s1,2,8
474 lbu $t6,2($i2) # Te4[s0>>8]
475 $PTR_INS $i2,$s2,2,8
476 lbu $t7,2($i3) # Te4[s1>>8]
477 $PTR_INS $i3,$s3,2,8
478
479 lbu $t8,2($i0) # Te4[s0>>24]
480 _xtr $i0,$s3,0-2
481 lbu $t9,2($i1) # Te4[s1>>24]
482 _xtr $i1,$s0,0-2
483 lbu $t10,2($i2) # Te4[s2>>24]
484 _xtr $i2,$s1,0-2
485 lbu $t11,2($i3) # Te4[s3>>24]
486 _xtr $i3,$s2,0-2
487
488 and $i0,0x3fc
489 and $i1,0x3fc
490 and $i2,0x3fc
491 and $i3,0x3fc
492 $PTR_ADD $i0,$Tbl
493 $PTR_ADD $i1,$Tbl
494 $PTR_ADD $i2,$Tbl
495 $PTR_ADD $i3,$Tbl
496# else
497 lbu $t4,2($i0) # Te4[s2>>8]
498 _xtr $i0,$s0,24-2
499 lbu $t5,2($i1) # Te4[s3>>8]
500 _xtr $i1,$s1,24-2
501 lbu $t6,2($i2) # Te4[s0>>8]
502 _xtr $i2,$s2,24-2
503 lbu $t7,2($i3) # Te4[s1>>8]
504 _xtr $i3,$s3,24-2
505
506 and $i0,0x3fc
507 and $i1,0x3fc
508 and $i2,0x3fc
509 and $i3,0x3fc
510 $PTR_ADD $i0,$Tbl
511 $PTR_ADD $i1,$Tbl
512 $PTR_ADD $i2,$Tbl
513 $PTR_ADD $i3,$Tbl
514 lbu $t8,2($i0) # Te4[s0>>24]
515 $PTR_INS $i0,$s3,2,8
516 lbu $t9,2($i1) # Te4[s1>>24]
517 $PTR_INS $i1,$s0,2,8
518 lbu $t10,2($i2) # Te4[s2>>24]
519 $PTR_INS $i2,$s1,2,8
520 lbu $t11,2($i3) # Te4[s3>>24]
521 $PTR_INS $i3,$s2,2,8
522# endif
523 _ins $t0,16
524 _ins $t1,16
525 _ins $t2,16
526 _ins $t3,16
527
528 _ins2 $t0,$t4,8
529 lbu $t4,2($i0) # Te4[s3]
530 _ins2 $t1,$t5,8
531 lbu $t5,2($i1) # Te4[s0]
532 _ins2 $t2,$t6,8
533 lbu $t6,2($i2) # Te4[s1]
534 _ins2 $t3,$t7,8
535 lbu $t7,2($i3) # Te4[s2]
536
537 _ins2 $t0,$t8,24
538 lw $s0,0($key0)
539 _ins2 $t1,$t9,24
540 lw $s1,4($key0)
541 _ins2 $t2,$t10,24
542 lw $s2,8($key0)
543 _ins2 $t3,$t11,24
544 lw $s3,12($key0)
545
546 _ins2 $t0,$t4,0
547 _ins2 $t1,$t5,0
548 _ins2 $t2,$t6,0
549 _ins2 $t3,$t7,0
550#else
551 lbu $t4,2($i0) # Te4[s2>>8]
552 _xtr $i0,$s0,24-2
553 lbu $t5,2($i1) # Te4[s3>>8]
554 _xtr $i1,$s1,24-2
555 lbu $t6,2($i2) # Te4[s0>>8]
556 _xtr $i2,$s2,24-2
557 lbu $t7,2($i3) # Te4[s1>>8]
558 _xtr $i3,$s3,24-2
559
560 and $i0,0x3fc
561 and $i1,0x3fc
562 and $i2,0x3fc
563 and $i3,0x3fc
564 $PTR_ADD $i0,$Tbl
565 $PTR_ADD $i1,$Tbl
566 $PTR_ADD $i2,$Tbl
567 $PTR_ADD $i3,$Tbl
568 lbu $t8,2($i0) # Te4[s0>>24]
569 _xtr $i0,$s3,0-2
570 lbu $t9,2($i1) # Te4[s1>>24]
571 _xtr $i1,$s0,0-2
572 lbu $t10,2($i2) # Te4[s2>>24]
573 _xtr $i2,$s1,0-2
574 lbu $t11,2($i3) # Te4[s3>>24]
575 _xtr $i3,$s2,0-2
576
577 and $i0,0x3fc
578 and $i1,0x3fc
579 and $i2,0x3fc
580 and $i3,0x3fc
581 $PTR_ADD $i0,$Tbl
582 $PTR_ADD $i1,$Tbl
583 $PTR_ADD $i2,$Tbl
584 $PTR_ADD $i3,$Tbl
585
586 _ins $t0,16
587 _ins $t1,16
588 _ins $t2,16
589 _ins $t3,16
590
591 _ins $t4,8
592 _ins $t5,8
593 _ins $t6,8
594 _ins $t7,8
595
596 xor $t0,$t4
597 lbu $t4,2($i0) # Te4[s3]
598 xor $t1,$t5
599 lbu $t5,2($i1) # Te4[s0]
600 xor $t2,$t6
601 lbu $t6,2($i2) # Te4[s1]
602 xor $t3,$t7
603 lbu $t7,2($i3) # Te4[s2]
604
605 _ins $t8,24
606 lw $s0,0($key0)
607 _ins $t9,24
608 lw $s1,4($key0)
609 _ins $t10,24
610 lw $s2,8($key0)
611 _ins $t11,24
612 lw $s3,12($key0)
613
614 xor $t0,$t8
615 xor $t1,$t9
616 xor $t2,$t10
617 xor $t3,$t11
618
619 _ins $t4,0
620 _ins $t5,0
621 _ins $t6,0
622 _ins $t7,0
623
624 xor $t0,$t4
625 xor $t1,$t5
626 xor $t2,$t6
627 xor $t3,$t7
628#endif
629 xor $s0,$t0
630 xor $s1,$t1
631 xor $s2,$t2
632 xor $s3,$t3
633
634 jr $ra
635.end _mips_AES_encrypt
636
637.align 5
638.globl AES_encrypt
639.ent AES_encrypt
640AES_encrypt:
641 .frame $sp,$FRAMESIZE,$ra
642 .mask $SAVED_REGS_MASK,-$SZREG
643 .set noreorder
644___
645$code.=<<___ if ($flavour =~ /o32/i); # o32 PIC-ification
646 .cpload $pf
647___
648$code.=<<___;
649 $PTR_SUB $sp,$FRAMESIZE
650 $REG_S $ra,$FRAMESIZE-1*$SZREG($sp)
651 $REG_S $fp,$FRAMESIZE-2*$SZREG($sp)
652 $REG_S $s11,$FRAMESIZE-3*$SZREG($sp)
653 $REG_S $s10,$FRAMESIZE-4*$SZREG($sp)
654 $REG_S $s9,$FRAMESIZE-5*$SZREG($sp)
655 $REG_S $s8,$FRAMESIZE-6*$SZREG($sp)
656 $REG_S $s7,$FRAMESIZE-7*$SZREG($sp)
657 $REG_S $s6,$FRAMESIZE-8*$SZREG($sp)
658 $REG_S $s5,$FRAMESIZE-9*$SZREG($sp)
659 $REG_S $s4,$FRAMESIZE-10*$SZREG($sp)
660___
661$code.=<<___ if ($flavour =~ /nubi/i); # optimize non-nubi prologue
662 $REG_S \$15,$FRAMESIZE-11*$SZREG($sp)
663 $REG_S \$14,$FRAMESIZE-12*$SZREG($sp)
664 $REG_S \$13,$FRAMESIZE-13*$SZREG($sp)
665 $REG_S \$12,$FRAMESIZE-14*$SZREG($sp)
666 $REG_S $gp,$FRAMESIZE-15*$SZREG($sp)
667___
668$code.=<<___ if ($flavour !~ /o32/i); # non-o32 PIC-ification
669 .cplocal $Tbl
670 .cpsetup $pf,$zero,AES_encrypt
671___
672$code.=<<___;
673 .set reorder
674 $PTR_LA $Tbl,AES_Te # PIC-ified 'load address'
675
676#if defined(_MIPS_ARCH_MIPS32R6) || defined(_MIPS_ARCH_MIPS64R6)
677 lw $s0,0($inp)
678 lw $s1,4($inp)
679 lw $s2,8($inp)
680 lw $s3,12($inp)
681#else
682 lwl $s0,0+$MSB($inp)
683 lwl $s1,4+$MSB($inp)
684 lwl $s2,8+$MSB($inp)
685 lwl $s3,12+$MSB($inp)
686 lwr $s0,0+$LSB($inp)
687 lwr $s1,4+$LSB($inp)
688 lwr $s2,8+$LSB($inp)
689 lwr $s3,12+$LSB($inp)
690#endif
691
692 bal _mips_AES_encrypt
693
694#if defined(_MIPS_ARCH_MIPS32R6) || defined(_MIPS_ARCH_MIPS64R6)
695 sw $s0,0($out)
696 sw $s1,4($out)
697 sw $s2,8($out)
698 sw $s3,12($out)
699#else
700 swr $s0,0+$LSB($out)
701 swr $s1,4+$LSB($out)
702 swr $s2,8+$LSB($out)
703 swr $s3,12+$LSB($out)
704 swl $s0,0+$MSB($out)
705 swl $s1,4+$MSB($out)
706 swl $s2,8+$MSB($out)
707 swl $s3,12+$MSB($out)
708#endif
709
710 .set noreorder
711 $REG_L $ra,$FRAMESIZE-1*$SZREG($sp)
712 $REG_L $fp,$FRAMESIZE-2*$SZREG($sp)
713 $REG_L $s11,$FRAMESIZE-3*$SZREG($sp)
714 $REG_L $s10,$FRAMESIZE-4*$SZREG($sp)
715 $REG_L $s9,$FRAMESIZE-5*$SZREG($sp)
716 $REG_L $s8,$FRAMESIZE-6*$SZREG($sp)
717 $REG_L $s7,$FRAMESIZE-7*$SZREG($sp)
718 $REG_L $s6,$FRAMESIZE-8*$SZREG($sp)
719 $REG_L $s5,$FRAMESIZE-9*$SZREG($sp)
720 $REG_L $s4,$FRAMESIZE-10*$SZREG($sp)
721___
722$code.=<<___ if ($flavour =~ /nubi/i);
723 $REG_L \$15,$FRAMESIZE-11*$SZREG($sp)
724 $REG_L \$14,$FRAMESIZE-12*$SZREG($sp)
725 $REG_L \$13,$FRAMESIZE-13*$SZREG($sp)
726 $REG_L \$12,$FRAMESIZE-14*$SZREG($sp)
727 $REG_L $gp,$FRAMESIZE-15*$SZREG($sp)
728___
729$code.=<<___;
730 jr $ra
731 $PTR_ADD $sp,$FRAMESIZE
732.end AES_encrypt
733___
734
735
736$code.=<<___;
737.align 5
738.ent _mips_AES_decrypt
739_mips_AES_decrypt:
740 .frame $sp,0,$ra
741 .set reorder
742 lw $t0,0($key)
743 lw $t1,4($key)
744 lw $t2,8($key)
745 lw $t3,12($key)
746 lw $cnt,240($key)
747 $PTR_ADD $key0,$key,16
748
749 xor $s0,$t0
750 xor $s1,$t1
751 xor $s2,$t2
752 xor $s3,$t3
753
754 subu $cnt,1
755#if defined(__mips_smartmips)
756 ext $i0,$s3,16,8
757.Loop_dec:
758 ext $i1,$s0,16,8
759 ext $i2,$s1,16,8
760 ext $i3,$s2,16,8
761 lwxs $t0,$i0($Tbl) # Td1[s3>>16]
762 ext $i0,$s2,8,8
763 lwxs $t1,$i1($Tbl) # Td1[s0>>16]
764 ext $i1,$s3,8,8
765 lwxs $t2,$i2($Tbl) # Td1[s1>>16]
766 ext $i2,$s0,8,8
767 lwxs $t3,$i3($Tbl) # Td1[s2>>16]
768 ext $i3,$s1,8,8
769
770 lwxs $t4,$i0($Tbl) # Td2[s2>>8]
771 ext $i0,$s1,0,8
772 lwxs $t5,$i1($Tbl) # Td2[s3>>8]
773 ext $i1,$s2,0,8
774 lwxs $t6,$i2($Tbl) # Td2[s0>>8]
775 ext $i2,$s3,0,8
776 lwxs $t7,$i3($Tbl) # Td2[s1>>8]
777 ext $i3,$s0,0,8
778
779 lwxs $t8,$i0($Tbl) # Td3[s1]
780 ext $i0,$s0,24,8
781 lwxs $t9,$i1($Tbl) # Td3[s2]
782 ext $i1,$s1,24,8
783 lwxs $t10,$i2($Tbl) # Td3[s3]
784 ext $i2,$s2,24,8
785 lwxs $t11,$i3($Tbl) # Td3[s0]
786 ext $i3,$s3,24,8
787
788 rotr $t0,$t0,8
789 rotr $t1,$t1,8
790 rotr $t2,$t2,8
791 rotr $t3,$t3,8
792
793 rotr $t4,$t4,16
794 rotr $t5,$t5,16
795 rotr $t6,$t6,16
796 rotr $t7,$t7,16
797
798 xor $t0,$t4
799 lwxs $t4,$i0($Tbl) # Td0[s0>>24]
800 xor $t1,$t5
801 lwxs $t5,$i1($Tbl) # Td0[s1>>24]
802 xor $t2,$t6
803 lwxs $t6,$i2($Tbl) # Td0[s2>>24]
804 xor $t3,$t7
805 lwxs $t7,$i3($Tbl) # Td0[s3>>24]
806
807 rotr $t8,$t8,24
808 lw $s0,0($key0)
809 rotr $t9,$t9,24
810 lw $s1,4($key0)
811 rotr $t10,$t10,24
812 lw $s2,8($key0)
813 rotr $t11,$t11,24
814 lw $s3,12($key0)
815
816 xor $t0,$t8
817 xor $t1,$t9
818 xor $t2,$t10
819 xor $t3,$t11
820
821 xor $t0,$t4
822 xor $t1,$t5
823 xor $t2,$t6
824 xor $t3,$t7
825
826 subu $cnt,1
827 $PTR_ADD $key0,16
828 xor $s0,$t0
829 xor $s1,$t1
830 xor $s2,$t2
831 xor $s3,$t3
832 .set noreorder
833 bnez $cnt,.Loop_dec
834 ext $i0,$s3,16,8
835
836 _xtr $i0,$s3,16-2
837#else
838#if defined(_MIPS_ARCH_MIPS32R2) || defined(_MIPS_ARCH_MIPS64R2)
839 move $i0,$Tbl
840 move $i1,$Tbl
841 move $i2,$Tbl
842 move $i3,$Tbl
843 ext $t0,$s3,16,8
844.Loop_dec:
845 ext $t1,$s0,16,8
846 ext $t2,$s1,16,8
847 ext $t3,$s2,16,8
848 $PTR_INS $i0,$t0,2,8
849 $PTR_INS $i1,$t1,2,8
850 $PTR_INS $i2,$t2,2,8
851 $PTR_INS $i3,$t3,2,8
852 lw $t0,0($i0) # Td1[s3>>16]
853 ext $t4,$s2,8,8
854 lw $t1,0($i1) # Td1[s0>>16]
855 ext $t5,$s3,8,8
856 lw $t2,0($i2) # Td1[s1>>16]
857 ext $t6,$s0,8,8
858 lw $t3,0($i3) # Td1[s2>>16]
859 ext $t7,$s1,8,8
860 $PTR_INS $i0,$t4,2,8
861 $PTR_INS $i1,$t5,2,8
862 $PTR_INS $i2,$t6,2,8
863 $PTR_INS $i3,$t7,2,8
864#else
865 _xtr $i0,$s3,16-2
866.Loop_dec:
867 _xtr $i1,$s0,16-2
868 _xtr $i2,$s1,16-2
869 _xtr $i3,$s2,16-2
870 and $i0,0x3fc
871 and $i1,0x3fc
872 and $i2,0x3fc
873 and $i3,0x3fc
874 $PTR_ADD $i0,$Tbl
875 $PTR_ADD $i1,$Tbl
876 $PTR_ADD $i2,$Tbl
877 $PTR_ADD $i3,$Tbl
878 lwl $t0,3($i0) # Td1[s3>>16]
879 lwl $t1,3($i1) # Td1[s0>>16]
880 lwl $t2,3($i2) # Td1[s1>>16]
881 lwl $t3,3($i3) # Td1[s2>>16]
882 lwr $t0,2($i0) # Td1[s3>>16]
883 _xtr $i0,$s2,8-2
884 lwr $t1,2($i1) # Td1[s0>>16]
885 _xtr $i1,$s3,8-2
886 lwr $t2,2($i2) # Td1[s1>>16]
887 _xtr $i2,$s0,8-2
888 lwr $t3,2($i3) # Td1[s2>>16]
889 _xtr $i3,$s1,8-2
890 and $i0,0x3fc
891 and $i1,0x3fc
892 and $i2,0x3fc
893 and $i3,0x3fc
894 $PTR_ADD $i0,$Tbl
895 $PTR_ADD $i1,$Tbl
896 $PTR_ADD $i2,$Tbl
897 $PTR_ADD $i3,$Tbl
898#endif
899#if defined(_MIPS_ARCH_MIPS32R2) || defined(_MIPS_ARCH_MIPS64R2)
900 rotr $t0,$t0,8
901 rotr $t1,$t1,8
902 rotr $t2,$t2,8
903 rotr $t3,$t3,8
904# if defined(_MIPSEL)
905 lw $t4,0($i0) # Td2[s2>>8]
906 ext $t8,$s1,0,8
907 lw $t5,0($i1) # Td2[s3>>8]
908 ext $t9,$s2,0,8
909 lw $t6,0($i2) # Td2[s0>>8]
910 ext $t10,$s3,0,8
911 lw $t7,0($i3) # Td2[s1>>8]
912 ext $t11,$s0,0,8
913 $PTR_INS $i0,$t8,2,8
914 $PTR_INS $i1,$t9,2,8
915 $PTR_INS $i2,$t10,2,8
916 $PTR_INS $i3,$t11,2,8
917 lw $t8,0($i0) # Td3[s1]
918 $PTR_INS $i0,$s0,2,8
919 lw $t9,0($i1) # Td3[s2]
920 $PTR_INS $i1,$s1,2,8
921 lw $t10,0($i2) # Td3[s3]
922 $PTR_INS $i2,$s2,2,8
923 lw $t11,0($i3) # Td3[s0]
924 $PTR_INS $i3,$s3,2,8
925#else
926 lw $t4,0($i0) # Td2[s2>>8]
927 $PTR_INS $i0,$s1,2,8
928 lw $t5,0($i1) # Td2[s3>>8]
929 $PTR_INS $i1,$s2,2,8
930 lw $t6,0($i2) # Td2[s0>>8]
931 $PTR_INS $i2,$s3,2,8
932 lw $t7,0($i3) # Td2[s1>>8]
933 $PTR_INS $i3,$s0,2,8
934
935 lw $t8,0($i0) # Td3[s1]
936 _xtr $i0,$s0,24-2
937 lw $t9,0($i1) # Td3[s2]
938 _xtr $i1,$s1,24-2
939 lw $t10,0($i2) # Td3[s3]
940 _xtr $i2,$s2,24-2
941 lw $t11,0($i3) # Td3[s0]
942 _xtr $i3,$s3,24-2
943
944 and $i0,0x3fc
945 and $i1,0x3fc
946 and $i2,0x3fc
947 and $i3,0x3fc
948 $PTR_ADD $i0,$Tbl
949 $PTR_ADD $i1,$Tbl
950 $PTR_ADD $i2,$Tbl
951 $PTR_ADD $i3,$Tbl
952#endif
953 rotr $t4,$t4,16
954 rotr $t5,$t5,16
955 rotr $t6,$t6,16
956 rotr $t7,$t7,16
957
958 rotr $t8,$t8,24
959 rotr $t9,$t9,24
960 rotr $t10,$t10,24
961 rotr $t11,$t11,24
962#else
963 lwl $t4,2($i0) # Td2[s2>>8]
964 lwl $t5,2($i1) # Td2[s3>>8]
965 lwl $t6,2($i2) # Td2[s0>>8]
966 lwl $t7,2($i3) # Td2[s1>>8]
967 lwr $t4,1($i0) # Td2[s2>>8]
968 _xtr $i0,$s1,0-2
969 lwr $t5,1($i1) # Td2[s3>>8]
970 _xtr $i1,$s2,0-2
971 lwr $t6,1($i2) # Td2[s0>>8]
972 _xtr $i2,$s3,0-2
973 lwr $t7,1($i3) # Td2[s1>>8]
974 _xtr $i3,$s0,0-2
975
976 and $i0,0x3fc
977 and $i1,0x3fc
978 and $i2,0x3fc
979 and $i3,0x3fc
980 $PTR_ADD $i0,$Tbl
981 $PTR_ADD $i1,$Tbl
982 $PTR_ADD $i2,$Tbl
983 $PTR_ADD $i3,$Tbl
984 lwl $t8,1($i0) # Td3[s1]
985 lwl $t9,1($i1) # Td3[s2]
986 lwl $t10,1($i2) # Td3[s3]
987 lwl $t11,1($i3) # Td3[s0]
988 lwr $t8,0($i0) # Td3[s1]
989 _xtr $i0,$s0,24-2
990 lwr $t9,0($i1) # Td3[s2]
991 _xtr $i1,$s1,24-2
992 lwr $t10,0($i2) # Td3[s3]
993 _xtr $i2,$s2,24-2
994 lwr $t11,0($i3) # Td3[s0]
995 _xtr $i3,$s3,24-2
996
997 and $i0,0x3fc
998 and $i1,0x3fc
999 and $i2,0x3fc
1000 and $i3,0x3fc
1001 $PTR_ADD $i0,$Tbl
1002 $PTR_ADD $i1,$Tbl
1003 $PTR_ADD $i2,$Tbl
1004 $PTR_ADD $i3,$Tbl
1005#endif
1006
1007 xor $t0,$t4
1008 lw $t4,0($i0) # Td0[s0>>24]
1009 xor $t1,$t5
1010 lw $t5,0($i1) # Td0[s1>>24]
1011 xor $t2,$t6
1012 lw $t6,0($i2) # Td0[s2>>24]
1013 xor $t3,$t7
1014 lw $t7,0($i3) # Td0[s3>>24]
1015
1016 xor $t0,$t8
1017 lw $s0,0($key0)
1018 xor $t1,$t9
1019 lw $s1,4($key0)
1020 xor $t2,$t10
1021 lw $s2,8($key0)
1022 xor $t3,$t11
1023 lw $s3,12($key0)
1024
1025 xor $t0,$t4
1026 xor $t1,$t5
1027 xor $t2,$t6
1028 xor $t3,$t7
1029
1030 subu $cnt,1
1031 $PTR_ADD $key0,16
1032 xor $s0,$t0
1033 xor $s1,$t1
1034 xor $s2,$t2
1035 xor $s3,$t3
1036 .set noreorder
1037 bnez $cnt,.Loop_dec
1038#if defined(_MIPS_ARCH_MIPS32R2) || defined(_MIPS_ARCH_MIPS64R2)
1039 ext $t0,$s3,16,8
1040#endif
1041
1042 _xtr $i0,$s3,16-2
1043#endif
1044
1045 .set reorder
1046 lw $t4,1024($Tbl) # prefetch Td4
1047 _xtr $i0,$s3,16
1048 lw $t5,1024+32($Tbl)
1049 _xtr $i1,$s0,16
1050 lw $t6,1024+64($Tbl)
1051 _xtr $i2,$s1,16
1052 lw $t7,1024+96($Tbl)
1053 _xtr $i3,$s2,16
1054 lw $t8,1024+128($Tbl)
1055 and $i0,0xff
1056 lw $t9,1024+160($Tbl)
1057 and $i1,0xff
1058 lw $t10,1024+192($Tbl)
1059 and $i2,0xff
1060 lw $t11,1024+224($Tbl)
1061 and $i3,0xff
1062
1063 $PTR_ADD $i0,$Tbl
1064 $PTR_ADD $i1,$Tbl
1065 $PTR_ADD $i2,$Tbl
1066 $PTR_ADD $i3,$Tbl
1067 lbu $t0,1024($i0) # Td4[s3>>16]
1068 _xtr $i0,$s2,8
1069 lbu $t1,1024($i1) # Td4[s0>>16]
1070 _xtr $i1,$s3,8
1071 lbu $t2,1024($i2) # Td4[s1>>16]
1072 _xtr $i2,$s0,8
1073 lbu $t3,1024($i3) # Td4[s2>>16]
1074 _xtr $i3,$s1,8
1075
1076 and $i0,0xff
1077 and $i1,0xff
1078 and $i2,0xff
1079 and $i3,0xff
1080 $PTR_ADD $i0,$Tbl
1081 $PTR_ADD $i1,$Tbl
1082 $PTR_ADD $i2,$Tbl
1083 $PTR_ADD $i3,$Tbl
1084#if defined(_MIPS_ARCH_MIPS32R2) || defined(_MIPS_ARCH_MIPS64R2)
1085# if defined(_MIPSEL)
1086 lbu $t4,1024($i0) # Td4[s2>>8]
1087 $PTR_INS $i0,$s0,0,8
1088 lbu $t5,1024($i1) # Td4[s3>>8]
1089 $PTR_INS $i1,$s1,0,8
1090 lbu $t6,1024($i2) # Td4[s0>>8]
1091 $PTR_INS $i2,$s2,0,8
1092 lbu $t7,1024($i3) # Td4[s1>>8]
1093 $PTR_INS $i3,$s3,0,8
1094
1095 lbu $t8,1024($i0) # Td4[s0>>24]
1096 _xtr $i0,$s1,0
1097 lbu $t9,1024($i1) # Td4[s1>>24]
1098 _xtr $i1,$s2,0
1099 lbu $t10,1024($i2) # Td4[s2>>24]
1100 _xtr $i2,$s3,0
1101 lbu $t11,1024($i3) # Td4[s3>>24]
1102 _xtr $i3,$s0,0
1103
1104 $PTR_ADD $i0,$Tbl
1105 $PTR_ADD $i1,$Tbl
1106 $PTR_ADD $i2,$Tbl
1107 $PTR_ADD $i3,$Tbl
1108# else
1109 lbu $t4,1024($i0) # Td4[s2>>8]
1110 _xtr $i0,$s0,24
1111 lbu $t5,1024($i1) # Td4[s3>>8]
1112 _xtr $i1,$s1,24
1113 lbu $t6,1024($i2) # Td4[s0>>8]
1114 _xtr $i2,$s2,24
1115 lbu $t7,1024($i3) # Td4[s1>>8]
1116 _xtr $i3,$s3,24
1117
1118 $PTR_ADD $i0,$Tbl
1119 $PTR_ADD $i1,$Tbl
1120 $PTR_ADD $i2,$Tbl
1121 $PTR_ADD $i3,$Tbl
1122 lbu $t8,1024($i0) # Td4[s0>>24]
1123 $PTR_INS $i0,$s1,0,8
1124 lbu $t9,1024($i1) # Td4[s1>>24]
1125 $PTR_INS $i1,$s2,0,8
1126 lbu $t10,1024($i2) # Td4[s2>>24]
1127 $PTR_INS $i2,$s3,0,8
1128 lbu $t11,1024($i3) # Td4[s3>>24]
1129 $PTR_INS $i3,$s0,0,8
1130# endif
1131 _ins $t0,16
1132 _ins $t1,16
1133 _ins $t2,16
1134 _ins $t3,16
1135
1136 _ins2 $t0,$t4,8
1137 lbu $t4,1024($i0) # Td4[s1]
1138 _ins2 $t1,$t5,8
1139 lbu $t5,1024($i1) # Td4[s2]
1140 _ins2 $t2,$t6,8
1141 lbu $t6,1024($i2) # Td4[s3]
1142 _ins2 $t3,$t7,8
1143 lbu $t7,1024($i3) # Td4[s0]
1144
1145 _ins2 $t0,$t8,24
1146 lw $s0,0($key0)
1147 _ins2 $t1,$t9,24
1148 lw $s1,4($key0)
1149 _ins2 $t2,$t10,24
1150 lw $s2,8($key0)
1151 _ins2 $t3,$t11,24
1152 lw $s3,12($key0)
1153
1154 _ins2 $t0,$t4,0
1155 _ins2 $t1,$t5,0
1156 _ins2 $t2,$t6,0
1157 _ins2 $t3,$t7,0
1158#else
1159 lbu $t4,1024($i0) # Td4[s2>>8]
1160 _xtr $i0,$s0,24
1161 lbu $t5,1024($i1) # Td4[s3>>8]
1162 _xtr $i1,$s1,24
1163 lbu $t6,1024($i2) # Td4[s0>>8]
1164 _xtr $i2,$s2,24
1165 lbu $t7,1024($i3) # Td4[s1>>8]
1166 _xtr $i3,$s3,24
1167
1168 $PTR_ADD $i0,$Tbl
1169 $PTR_ADD $i1,$Tbl
1170 $PTR_ADD $i2,$Tbl
1171 $PTR_ADD $i3,$Tbl
1172 lbu $t8,1024($i0) # Td4[s0>>24]
1173 _xtr $i0,$s1,0
1174 lbu $t9,1024($i1) # Td4[s1>>24]
1175 _xtr $i1,$s2,0
1176 lbu $t10,1024($i2) # Td4[s2>>24]
1177 _xtr $i2,$s3,0
1178 lbu $t11,1024($i3) # Td4[s3>>24]
1179 _xtr $i3,$s0,0
1180
1181 $PTR_ADD $i0,$Tbl
1182 $PTR_ADD $i1,$Tbl
1183 $PTR_ADD $i2,$Tbl
1184 $PTR_ADD $i3,$Tbl
1185
1186 _ins $t0,16
1187 _ins $t1,16
1188 _ins $t2,16
1189 _ins $t3,16
1190
1191 _ins $t4,8
1192 _ins $t5,8
1193 _ins $t6,8
1194 _ins $t7,8
1195
1196 xor $t0,$t4
1197 lbu $t4,1024($i0) # Td4[s1]
1198 xor $t1,$t5
1199 lbu $t5,1024($i1) # Td4[s2]
1200 xor $t2,$t6
1201 lbu $t6,1024($i2) # Td4[s3]
1202 xor $t3,$t7
1203 lbu $t7,1024($i3) # Td4[s0]
1204
1205 _ins $t8,24
1206 lw $s0,0($key0)
1207 _ins $t9,24
1208 lw $s1,4($key0)
1209 _ins $t10,24
1210 lw $s2,8($key0)
1211 _ins $t11,24
1212 lw $s3,12($key0)
1213
1214 xor $t0,$t8
1215 xor $t1,$t9
1216 xor $t2,$t10
1217 xor $t3,$t11
1218
1219 _ins $t4,0
1220 _ins $t5,0
1221 _ins $t6,0
1222 _ins $t7,0
1223
1224 xor $t0,$t4
1225 xor $t1,$t5
1226 xor $t2,$t6
1227 xor $t3,$t7
1228#endif
1229
1230 xor $s0,$t0
1231 xor $s1,$t1
1232 xor $s2,$t2
1233 xor $s3,$t3
1234
1235 jr $ra
1236.end _mips_AES_decrypt
1237
1238.align 5
1239.globl AES_decrypt
1240.ent AES_decrypt
1241AES_decrypt:
1242 .frame $sp,$FRAMESIZE,$ra
1243 .mask $SAVED_REGS_MASK,-$SZREG
1244 .set noreorder
1245___
1246$code.=<<___ if ($flavour =~ /o32/i); # o32 PIC-ification
1247 .cpload $pf
1248___
1249$code.=<<___;
1250 $PTR_SUB $sp,$FRAMESIZE
1251 $REG_S $ra,$FRAMESIZE-1*$SZREG($sp)
1252 $REG_S $fp,$FRAMESIZE-2*$SZREG($sp)
1253 $REG_S $s11,$FRAMESIZE-3*$SZREG($sp)
1254 $REG_S $s10,$FRAMESIZE-4*$SZREG($sp)
1255 $REG_S $s9,$FRAMESIZE-5*$SZREG($sp)
1256 $REG_S $s8,$FRAMESIZE-6*$SZREG($sp)
1257 $REG_S $s7,$FRAMESIZE-7*$SZREG($sp)
1258 $REG_S $s6,$FRAMESIZE-8*$SZREG($sp)
1259 $REG_S $s5,$FRAMESIZE-9*$SZREG($sp)
1260 $REG_S $s4,$FRAMESIZE-10*$SZREG($sp)
1261___
1262$code.=<<___ if ($flavour =~ /nubi/i); # optimize non-nubi prologue
1263 $REG_S \$15,$FRAMESIZE-11*$SZREG($sp)
1264 $REG_S \$14,$FRAMESIZE-12*$SZREG($sp)
1265 $REG_S \$13,$FRAMESIZE-13*$SZREG($sp)
1266 $REG_S \$12,$FRAMESIZE-14*$SZREG($sp)
1267 $REG_S $gp,$FRAMESIZE-15*$SZREG($sp)
1268___
1269$code.=<<___ if ($flavour !~ /o32/i); # non-o32 PIC-ification
1270 .cplocal $Tbl
1271 .cpsetup $pf,$zero,AES_decrypt
1272___
1273$code.=<<___;
1274 .set reorder
1275 $PTR_LA $Tbl,AES_Td # PIC-ified 'load address'
1276
1277#if defined(_MIPS_ARCH_MIPS32R6) || defined(_MIPS_ARCH_MIPS64R6)
1278 lw $s0,0($inp)
1279 lw $s1,4($inp)
1280 lw $s2,8($inp)
1281 lw $s3,12($inp)
1282#else
1283 lwl $s0,0+$MSB($inp)
1284 lwl $s1,4+$MSB($inp)
1285 lwl $s2,8+$MSB($inp)
1286 lwl $s3,12+$MSB($inp)
1287 lwr $s0,0+$LSB($inp)
1288 lwr $s1,4+$LSB($inp)
1289 lwr $s2,8+$LSB($inp)
1290 lwr $s3,12+$LSB($inp)
1291#endif
1292
1293 bal _mips_AES_decrypt
1294
1295#if defined(_MIPS_ARCH_MIPS32R6) || defined(_MIPS_ARCH_MIPS64R6)
1296 sw $s0,0($out)
1297 sw $s1,4($out)
1298 sw $s2,8($out)
1299 sw $s3,12($out)
1300#else
1301 swr $s0,0+$LSB($out)
1302 swr $s1,4+$LSB($out)
1303 swr $s2,8+$LSB($out)
1304 swr $s3,12+$LSB($out)
1305 swl $s0,0+$MSB($out)
1306 swl $s1,4+$MSB($out)
1307 swl $s2,8+$MSB($out)
1308 swl $s3,12+$MSB($out)
1309#endif
1310
1311 .set noreorder
1312 $REG_L $ra,$FRAMESIZE-1*$SZREG($sp)
1313 $REG_L $fp,$FRAMESIZE-2*$SZREG($sp)
1314 $REG_L $s11,$FRAMESIZE-3*$SZREG($sp)
1315 $REG_L $s10,$FRAMESIZE-4*$SZREG($sp)
1316 $REG_L $s9,$FRAMESIZE-5*$SZREG($sp)
1317 $REG_L $s8,$FRAMESIZE-6*$SZREG($sp)
1318 $REG_L $s7,$FRAMESIZE-7*$SZREG($sp)
1319 $REG_L $s6,$FRAMESIZE-8*$SZREG($sp)
1320 $REG_L $s5,$FRAMESIZE-9*$SZREG($sp)
1321 $REG_L $s4,$FRAMESIZE-10*$SZREG($sp)
1322___
1323$code.=<<___ if ($flavour =~ /nubi/i);
1324 $REG_L \$15,$FRAMESIZE-11*$SZREG($sp)
1325 $REG_L \$14,$FRAMESIZE-12*$SZREG($sp)
1326 $REG_L \$13,$FRAMESIZE-13*$SZREG($sp)
1327 $REG_L \$12,$FRAMESIZE-14*$SZREG($sp)
1328 $REG_L $gp,$FRAMESIZE-15*$SZREG($sp)
1329___
1330$code.=<<___;
1331 jr $ra
1332 $PTR_ADD $sp,$FRAMESIZE
1333.end AES_decrypt
1334___
1335}}}
1336
1337
1338{{{
1339my $FRAMESIZE=8*$SZREG;
1340my $SAVED_REGS_MASK = ($flavour =~ /nubi/i) ? "0xc000f008" : "0xc0000000";
1341
1342my ($inp,$bits,$key,$Tbl)=($a0,$a1,$a2,$a3);
1343my ($rk0,$rk1,$rk2,$rk3,$rk4,$rk5,$rk6,$rk7)=($a4,$a5,$a6,$a7,$s0,$s1,$s2,$s3);
1344my ($i0,$i1,$i2,$i3)=($at,$t0,$t1,$t2);
1345my ($rcon,$cnt)=($gp,$fp);
1346
1347$code.=<<___;
1348.align 5
1349.ent _mips_AES_set_encrypt_key
1350_mips_AES_set_encrypt_key:
1351 .frame $sp,0,$ra
1352 .set noreorder
1353 beqz $inp,.Lekey_done
1354 li $t0,-1
1355 beqz $key,.Lekey_done
1356 $PTR_ADD $rcon,$Tbl,256
1357
1358 .set reorder
1359#if defined(_MIPS_ARCH_MIPS32R6) || defined(_MIPS_ARCH_MIPS64R6)
1360 lw $rk0,0($inp) # load 128 bits
1361 lw $rk1,4($inp)
1362 lw $rk2,8($inp)
1363 lw $rk3,12($inp)
1364#else
1365 lwl $rk0,0+$MSB($inp) # load 128 bits
1366 lwl $rk1,4+$MSB($inp)
1367 lwl $rk2,8+$MSB($inp)
1368 lwl $rk3,12+$MSB($inp)
1369 lwr $rk0,0+$LSB($inp)
1370 lwr $rk1,4+$LSB($inp)
1371 lwr $rk2,8+$LSB($inp)
1372 lwr $rk3,12+$LSB($inp)
1373#endif
1374 li $at,128
1375 .set noreorder
1376 beq $bits,$at,.L128bits
1377 li $cnt,10
1378
1379 .set reorder
1380#if defined(_MIPS_ARCH_MIPS32R6) || defined(_MIPS_ARCH_MIPS64R6)
1381 lw $rk4,16($inp) # load 192 bits
1382 lw $rk5,20($inp)
1383#else
1384 lwl $rk4,16+$MSB($inp) # load 192 bits
1385 lwl $rk5,20+$MSB($inp)
1386 lwr $rk4,16+$LSB($inp)
1387 lwr $rk5,20+$LSB($inp)
1388#endif
1389 li $at,192
1390 .set noreorder
1391 beq $bits,$at,.L192bits
1392 li $cnt,8
1393
1394 .set reorder
1395#if defined(_MIPS_ARCH_MIPS32R6) || defined(_MIPS_ARCH_MIPS64R6)
1396 lw $rk6,24($inp) # load 256 bits
1397 lw $rk7,28($inp)
1398#else
1399 lwl $rk6,24+$MSB($inp) # load 256 bits
1400 lwl $rk7,28+$MSB($inp)
1401 lwr $rk6,24+$LSB($inp)
1402 lwr $rk7,28+$LSB($inp)
1403#endif
1404 li $at,256
1405 .set noreorder
1406 beq $bits,$at,.L256bits
1407 li $cnt,7
1408
1409 b .Lekey_done
1410 li $t0,-2
1411
1412.align 4
1413.L128bits:
1414 .set reorder
1415 srl $i0,$rk3,16
1416 srl $i1,$rk3,8
1417 and $i0,0xff
1418 and $i1,0xff
1419 and $i2,$rk3,0xff
1420 srl $i3,$rk3,24
1421 $PTR_ADD $i0,$Tbl
1422 $PTR_ADD $i1,$Tbl
1423 $PTR_ADD $i2,$Tbl
1424 $PTR_ADD $i3,$Tbl
1425 lbu $i0,0($i0)
1426 lbu $i1,0($i1)
1427 lbu $i2,0($i2)
1428 lbu $i3,0($i3)
1429
1430 sw $rk0,0($key)
1431 sw $rk1,4($key)
1432 sw $rk2,8($key)
1433 sw $rk3,12($key)
1434 subu $cnt,1
1435 $PTR_ADD $key,16
1436
1437 _bias $i0,24
1438 _bias $i1,16
1439 _bias $i2,8
1440 _bias $i3,0
1441
1442 xor $rk0,$i0
1443 lw $i0,0($rcon)
1444 xor $rk0,$i1
1445 xor $rk0,$i2
1446 xor $rk0,$i3
1447 xor $rk0,$i0
1448
1449 xor $rk1,$rk0
1450 xor $rk2,$rk1
1451 xor $rk3,$rk2
1452
1453 .set noreorder
1454 bnez $cnt,.L128bits
1455 $PTR_ADD $rcon,4
1456
1457 sw $rk0,0($key)
1458 sw $rk1,4($key)
1459 sw $rk2,8($key)
1460 li $cnt,10
1461 sw $rk3,12($key)
1462 li $t0,0
1463 sw $cnt,80($key)
1464 b .Lekey_done
1465 $PTR_SUB $key,10*16
1466
1467.align 4
1468.L192bits:
1469 .set reorder
1470 srl $i0,$rk5,16
1471 srl $i1,$rk5,8
1472 and $i0,0xff
1473 and $i1,0xff
1474 and $i2,$rk5,0xff
1475 srl $i3,$rk5,24
1476 $PTR_ADD $i0,$Tbl
1477 $PTR_ADD $i1,$Tbl
1478 $PTR_ADD $i2,$Tbl
1479 $PTR_ADD $i3,$Tbl
1480 lbu $i0,0($i0)
1481 lbu $i1,0($i1)
1482 lbu $i2,0($i2)
1483 lbu $i3,0($i3)
1484
1485 sw $rk0,0($key)
1486 sw $rk1,4($key)
1487 sw $rk2,8($key)
1488 sw $rk3,12($key)
1489 sw $rk4,16($key)
1490 sw $rk5,20($key)
1491 subu $cnt,1
1492 $PTR_ADD $key,24
1493
1494 _bias $i0,24
1495 _bias $i1,16
1496 _bias $i2,8
1497 _bias $i3,0
1498
1499 xor $rk0,$i0
1500 lw $i0,0($rcon)
1501 xor $rk0,$i1
1502 xor $rk0,$i2
1503 xor $rk0,$i3
1504 xor $rk0,$i0
1505
1506 xor $rk1,$rk0
1507 xor $rk2,$rk1
1508 xor $rk3,$rk2
1509 xor $rk4,$rk3
1510 xor $rk5,$rk4
1511
1512 .set noreorder
1513 bnez $cnt,.L192bits
1514 $PTR_ADD $rcon,4
1515
1516 sw $rk0,0($key)
1517 sw $rk1,4($key)
1518 sw $rk2,8($key)
1519 li $cnt,12
1520 sw $rk3,12($key)
1521 li $t0,0
1522 sw $cnt,48($key)
1523 b .Lekey_done
1524 $PTR_SUB $key,12*16
1525
1526.align 4
1527.L256bits:
1528 .set reorder
1529 srl $i0,$rk7,16
1530 srl $i1,$rk7,8
1531 and $i0,0xff
1532 and $i1,0xff
1533 and $i2,$rk7,0xff
1534 srl $i3,$rk7,24
1535 $PTR_ADD $i0,$Tbl
1536 $PTR_ADD $i1,$Tbl
1537 $PTR_ADD $i2,$Tbl
1538 $PTR_ADD $i3,$Tbl
1539 lbu $i0,0($i0)
1540 lbu $i1,0($i1)
1541 lbu $i2,0($i2)
1542 lbu $i3,0($i3)
1543
1544 sw $rk0,0($key)
1545 sw $rk1,4($key)
1546 sw $rk2,8($key)
1547 sw $rk3,12($key)
1548 sw $rk4,16($key)
1549 sw $rk5,20($key)
1550 sw $rk6,24($key)
1551 sw $rk7,28($key)
1552 subu $cnt,1
1553
1554 _bias $i0,24
1555 _bias $i1,16
1556 _bias $i2,8
1557 _bias $i3,0
1558
1559 xor $rk0,$i0
1560 lw $i0,0($rcon)
1561 xor $rk0,$i1
1562 xor $rk0,$i2
1563 xor $rk0,$i3
1564 xor $rk0,$i0
1565
1566 xor $rk1,$rk0
1567 xor $rk2,$rk1
1568 xor $rk3,$rk2
1569 beqz $cnt,.L256bits_done
1570
1571 srl $i0,$rk3,24
1572 srl $i1,$rk3,16
1573 srl $i2,$rk3,8
1574 and $i3,$rk3,0xff
1575 and $i1,0xff
1576 and $i2,0xff
1577 $PTR_ADD $i0,$Tbl
1578 $PTR_ADD $i1,$Tbl
1579 $PTR_ADD $i2,$Tbl
1580 $PTR_ADD $i3,$Tbl
1581 lbu $i0,0($i0)
1582 lbu $i1,0($i1)
1583 lbu $i2,0($i2)
1584 lbu $i3,0($i3)
1585 sll $i0,24
1586 sll $i1,16
1587 sll $i2,8
1588
1589 xor $rk4,$i0
1590 xor $rk4,$i1
1591 xor $rk4,$i2
1592 xor $rk4,$i3
1593
1594 xor $rk5,$rk4
1595 xor $rk6,$rk5
1596 xor $rk7,$rk6
1597
1598 $PTR_ADD $key,32
1599 .set noreorder
1600 b .L256bits
1601 $PTR_ADD $rcon,4
1602
1603.L256bits_done:
1604 sw $rk0,32($key)
1605 sw $rk1,36($key)
1606 sw $rk2,40($key)
1607 li $cnt,14
1608 sw $rk3,44($key)
1609 li $t0,0
1610 sw $cnt,48($key)
1611 $PTR_SUB $key,12*16
1612
1613.Lekey_done:
1614 jr $ra
1615 nop
1616.end _mips_AES_set_encrypt_key
1617
1618.globl AES_set_encrypt_key
1619.ent AES_set_encrypt_key
1620AES_set_encrypt_key:
1621 .frame $sp,$FRAMESIZE,$ra
1622 .mask $SAVED_REGS_MASK,-$SZREG
1623 .set noreorder
1624___
1625$code.=<<___ if ($flavour =~ /o32/i); # o32 PIC-ification
1626 .cpload $pf
1627___
1628$code.=<<___;
1629 $PTR_SUB $sp,$FRAMESIZE
1630 $REG_S $ra,$FRAMESIZE-1*$SZREG($sp)
1631 $REG_S $fp,$FRAMESIZE-2*$SZREG($sp)
1632___
1633$code.=<<___ if ($flavour =~ /nubi/i); # optimize non-nubi prologue
1634 $REG_S $s3,$FRAMESIZE-3*$SZREG($sp)
1635 $REG_S $s2,$FRAMESIZE-4*$SZREG($sp)
1636 $REG_S $s1,$FRAMESIZE-5*$SZREG($sp)
1637 $REG_S $s0,$FRAMESIZE-6*$SZREG($sp)
1638 $REG_S $gp,$FRAMESIZE-7*$SZREG($sp)
1639___
1640$code.=<<___ if ($flavour !~ /o32/i); # non-o32 PIC-ification
1641 .cplocal $Tbl
1642 .cpsetup $pf,$zero,AES_set_encrypt_key
1643___
1644$code.=<<___;
1645 .set reorder
1646 $PTR_LA $Tbl,AES_Te4 # PIC-ified 'load address'
1647
1648 bal _mips_AES_set_encrypt_key
1649
1650 .set noreorder
1651 move $a0,$t0
1652 $REG_L $ra,$FRAMESIZE-1*$SZREG($sp)
1653 $REG_L $fp,$FRAMESIZE-2*$SZREG($sp)
1654___
1655$code.=<<___ if ($flavour =~ /nubi/i);
1656 $REG_L $s3,$FRAMESIZE-11*$SZREG($sp)
1657 $REG_L $s2,$FRAMESIZE-12*$SZREG($sp)
1658 $REG_L $s1,$FRAMESIZE-13*$SZREG($sp)
1659 $REG_L $s0,$FRAMESIZE-14*$SZREG($sp)
1660 $REG_L $gp,$FRAMESIZE-15*$SZREG($sp)
1661___
1662$code.=<<___;
1663 jr $ra
1664 $PTR_ADD $sp,$FRAMESIZE
1665.end AES_set_encrypt_key
1666___
1667
1668
1669my ($head,$tail)=($inp,$bits);
1670my ($tp1,$tp2,$tp4,$tp8,$tp9,$tpb,$tpd,$tpe)=($a4,$a5,$a6,$a7,$s0,$s1,$s2,$s3);
1671my ($m,$x80808080,$x7f7f7f7f,$x1b1b1b1b)=($at,$t0,$t1,$t2);
1672$code.=<<___;
1673.align 5
1674.globl AES_set_decrypt_key
1675.ent AES_set_decrypt_key
1676AES_set_decrypt_key:
1677 .frame $sp,$FRAMESIZE,$ra
1678 .mask $SAVED_REGS_MASK,-$SZREG
1679 .set noreorder
1680___
1681$code.=<<___ if ($flavour =~ /o32/i); # o32 PIC-ification
1682 .cpload $pf
1683___
1684$code.=<<___;
1685 $PTR_SUB $sp,$FRAMESIZE
1686 $REG_S $ra,$FRAMESIZE-1*$SZREG($sp)
1687 $REG_S $fp,$FRAMESIZE-2*$SZREG($sp)
1688___
1689$code.=<<___ if ($flavour =~ /nubi/i); # optimize non-nubi prologue
1690 $REG_S $s3,$FRAMESIZE-3*$SZREG($sp)
1691 $REG_S $s2,$FRAMESIZE-4*$SZREG($sp)
1692 $REG_S $s1,$FRAMESIZE-5*$SZREG($sp)
1693 $REG_S $s0,$FRAMESIZE-6*$SZREG($sp)
1694 $REG_S $gp,$FRAMESIZE-7*$SZREG($sp)
1695___
1696$code.=<<___ if ($flavour !~ /o32/i); # non-o32 PIC-ification
1697 .cplocal $Tbl
1698 .cpsetup $pf,$zero,AES_set_decrypt_key
1699___
1700$code.=<<___;
1701 .set reorder
1702 $PTR_LA $Tbl,AES_Te4 # PIC-ified 'load address'
1703
1704 bal _mips_AES_set_encrypt_key
1705
1706 bltz $t0,.Ldkey_done
1707
1708 sll $at,$cnt,4
1709 $PTR_ADD $head,$key,0
1710 $PTR_ADD $tail,$key,$at
1711.align 4
1712.Lswap:
1713 lw $rk0,0($head)
1714 lw $rk1,4($head)
1715 lw $rk2,8($head)
1716 lw $rk3,12($head)
1717 lw $rk4,0($tail)
1718 lw $rk5,4($tail)
1719 lw $rk6,8($tail)
1720 lw $rk7,12($tail)
1721 sw $rk0,0($tail)
1722 sw $rk1,4($tail)
1723 sw $rk2,8($tail)
1724 sw $rk3,12($tail)
1725 $PTR_ADD $head,16
1726 $PTR_SUB $tail,16
1727 sw $rk4,-16($head)
1728 sw $rk5,-12($head)
1729 sw $rk6,-8($head)
1730 sw $rk7,-4($head)
1731 bne $head,$tail,.Lswap
1732
1733 lw $tp1,16($key) # modulo-scheduled
1734 lui $x80808080,0x8080
1735 subu $cnt,1
1736 or $x80808080,0x8080
1737 sll $cnt,2
1738 $PTR_ADD $key,16
1739 lui $x1b1b1b1b,0x1b1b
1740 nor $x7f7f7f7f,$zero,$x80808080
1741 or $x1b1b1b1b,0x1b1b
1742.align 4
1743.Lmix:
1744 and $m,$tp1,$x80808080
1745 and $tp2,$tp1,$x7f7f7f7f
1746 srl $tp4,$m,7
1747 addu $tp2,$tp2 # tp2<<1
1748 subu $m,$tp4
1749 and $m,$x1b1b1b1b
1750 xor $tp2,$m
1751
1752 and $m,$tp2,$x80808080
1753 and $tp4,$tp2,$x7f7f7f7f
1754 srl $tp8,$m,7
1755 addu $tp4,$tp4 # tp4<<1
1756 subu $m,$tp8
1757 and $m,$x1b1b1b1b
1758 xor $tp4,$m
1759
1760 and $m,$tp4,$x80808080
1761 and $tp8,$tp4,$x7f7f7f7f
1762 srl $tp9,$m,7
1763 addu $tp8,$tp8 # tp8<<1
1764 subu $m,$tp9
1765 and $m,$x1b1b1b1b
1766 xor $tp8,$m
1767
1768 xor $tp9,$tp8,$tp1
1769 xor $tpe,$tp8,$tp4
1770 xor $tpb,$tp9,$tp2
1771 xor $tpd,$tp9,$tp4
1772
1773#if defined(_MIPS_ARCH_MIPS32R2) || defined(_MIPS_ARCH_MIPS64R2)
1774 rotr $tp1,$tpd,16
1775 xor $tpe,$tp2
1776 rotr $tp2,$tp9,8
1777 xor $tpe,$tp1
1778 rotr $tp4,$tpb,24
1779 xor $tpe,$tp2
1780 lw $tp1,4($key) # modulo-scheduled
1781 xor $tpe,$tp4
1782#else
1783 _ror $tp1,$tpd,16
1784 xor $tpe,$tp2
1785 _ror $tp2,$tpd,-16
1786 xor $tpe,$tp1
1787 _ror $tp1,$tp9,8
1788 xor $tpe,$tp2
1789 _ror $tp2,$tp9,-24
1790 xor $tpe,$tp1
1791 _ror $tp1,$tpb,24
1792 xor $tpe,$tp2
1793 _ror $tp2,$tpb,-8
1794 xor $tpe,$tp1
1795 lw $tp1,4($key) # modulo-scheduled
1796 xor $tpe,$tp2
1797#endif
1798 subu $cnt,1
1799 sw $tpe,0($key)
1800 $PTR_ADD $key,4
1801 bnez $cnt,.Lmix
1802
1803 li $t0,0
1804.Ldkey_done:
1805 .set noreorder
1806 move $a0,$t0
1807 $REG_L $ra,$FRAMESIZE-1*$SZREG($sp)
1808 $REG_L $fp,$FRAMESIZE-2*$SZREG($sp)
1809___
1810$code.=<<___ if ($flavour =~ /nubi/i);
1811 $REG_L $s3,$FRAMESIZE-11*$SZREG($sp)
1812 $REG_L $s2,$FRAMESIZE-12*$SZREG($sp)
1813 $REG_L $s1,$FRAMESIZE-13*$SZREG($sp)
1814 $REG_L $s0,$FRAMESIZE-14*$SZREG($sp)
1815 $REG_L $gp,$FRAMESIZE-15*$SZREG($sp)
1816___
1817$code.=<<___;
1818 jr $ra
1819 $PTR_ADD $sp,$FRAMESIZE
1820.end AES_set_decrypt_key
1821___
1822}}}
1823
1824######################################################################
1825# Tables are kept in endian-neutral manner
1826$code.=<<___;
1827.rdata
1828.align 10
1829AES_Te:
1830.byte 0xc6,0x63,0x63,0xa5, 0xf8,0x7c,0x7c,0x84 # Te0
1831.byte 0xee,0x77,0x77,0x99, 0xf6,0x7b,0x7b,0x8d
1832.byte 0xff,0xf2,0xf2,0x0d, 0xd6,0x6b,0x6b,0xbd
1833.byte 0xde,0x6f,0x6f,0xb1, 0x91,0xc5,0xc5,0x54
1834.byte 0x60,0x30,0x30,0x50, 0x02,0x01,0x01,0x03
1835.byte 0xce,0x67,0x67,0xa9, 0x56,0x2b,0x2b,0x7d
1836.byte 0xe7,0xfe,0xfe,0x19, 0xb5,0xd7,0xd7,0x62
1837.byte 0x4d,0xab,0xab,0xe6, 0xec,0x76,0x76,0x9a
1838.byte 0x8f,0xca,0xca,0x45, 0x1f,0x82,0x82,0x9d
1839.byte 0x89,0xc9,0xc9,0x40, 0xfa,0x7d,0x7d,0x87
1840.byte 0xef,0xfa,0xfa,0x15, 0xb2,0x59,0x59,0xeb
1841.byte 0x8e,0x47,0x47,0xc9, 0xfb,0xf0,0xf0,0x0b
1842.byte 0x41,0xad,0xad,0xec, 0xb3,0xd4,0xd4,0x67
1843.byte 0x5f,0xa2,0xa2,0xfd, 0x45,0xaf,0xaf,0xea
1844.byte 0x23,0x9c,0x9c,0xbf, 0x53,0xa4,0xa4,0xf7
1845.byte 0xe4,0x72,0x72,0x96, 0x9b,0xc0,0xc0,0x5b
1846.byte 0x75,0xb7,0xb7,0xc2, 0xe1,0xfd,0xfd,0x1c
1847.byte 0x3d,0x93,0x93,0xae, 0x4c,0x26,0x26,0x6a
1848.byte 0x6c,0x36,0x36,0x5a, 0x7e,0x3f,0x3f,0x41
1849.byte 0xf5,0xf7,0xf7,0x02, 0x83,0xcc,0xcc,0x4f
1850.byte 0x68,0x34,0x34,0x5c, 0x51,0xa5,0xa5,0xf4
1851.byte 0xd1,0xe5,0xe5,0x34, 0xf9,0xf1,0xf1,0x08
1852.byte 0xe2,0x71,0x71,0x93, 0xab,0xd8,0xd8,0x73
1853.byte 0x62,0x31,0x31,0x53, 0x2a,0x15,0x15,0x3f
1854.byte 0x08,0x04,0x04,0x0c, 0x95,0xc7,0xc7,0x52
1855.byte 0x46,0x23,0x23,0x65, 0x9d,0xc3,0xc3,0x5e
1856.byte 0x30,0x18,0x18,0x28, 0x37,0x96,0x96,0xa1
1857.byte 0x0a,0x05,0x05,0x0f, 0x2f,0x9a,0x9a,0xb5
1858.byte 0x0e,0x07,0x07,0x09, 0x24,0x12,0x12,0x36
1859.byte 0x1b,0x80,0x80,0x9b, 0xdf,0xe2,0xe2,0x3d
1860.byte 0xcd,0xeb,0xeb,0x26, 0x4e,0x27,0x27,0x69
1861.byte 0x7f,0xb2,0xb2,0xcd, 0xea,0x75,0x75,0x9f
1862.byte 0x12,0x09,0x09,0x1b, 0x1d,0x83,0x83,0x9e
1863.byte 0x58,0x2c,0x2c,0x74, 0x34,0x1a,0x1a,0x2e
1864.byte 0x36,0x1b,0x1b,0x2d, 0xdc,0x6e,0x6e,0xb2
1865.byte 0xb4,0x5a,0x5a,0xee, 0x5b,0xa0,0xa0,0xfb
1866.byte 0xa4,0x52,0x52,0xf6, 0x76,0x3b,0x3b,0x4d
1867.byte 0xb7,0xd6,0xd6,0x61, 0x7d,0xb3,0xb3,0xce
1868.byte 0x52,0x29,0x29,0x7b, 0xdd,0xe3,0xe3,0x3e
1869.byte 0x5e,0x2f,0x2f,0x71, 0x13,0x84,0x84,0x97
1870.byte 0xa6,0x53,0x53,0xf5, 0xb9,0xd1,0xd1,0x68
1871.byte 0x00,0x00,0x00,0x00, 0xc1,0xed,0xed,0x2c
1872.byte 0x40,0x20,0x20,0x60, 0xe3,0xfc,0xfc,0x1f
1873.byte 0x79,0xb1,0xb1,0xc8, 0xb6,0x5b,0x5b,0xed
1874.byte 0xd4,0x6a,0x6a,0xbe, 0x8d,0xcb,0xcb,0x46
1875.byte 0x67,0xbe,0xbe,0xd9, 0x72,0x39,0x39,0x4b
1876.byte 0x94,0x4a,0x4a,0xde, 0x98,0x4c,0x4c,0xd4
1877.byte 0xb0,0x58,0x58,0xe8, 0x85,0xcf,0xcf,0x4a
1878.byte 0xbb,0xd0,0xd0,0x6b, 0xc5,0xef,0xef,0x2a
1879.byte 0x4f,0xaa,0xaa,0xe5, 0xed,0xfb,0xfb,0x16
1880.byte 0x86,0x43,0x43,0xc5, 0x9a,0x4d,0x4d,0xd7
1881.byte 0x66,0x33,0x33,0x55, 0x11,0x85,0x85,0x94
1882.byte 0x8a,0x45,0x45,0xcf, 0xe9,0xf9,0xf9,0x10
1883.byte 0x04,0x02,0x02,0x06, 0xfe,0x7f,0x7f,0x81
1884.byte 0xa0,0x50,0x50,0xf0, 0x78,0x3c,0x3c,0x44
1885.byte 0x25,0x9f,0x9f,0xba, 0x4b,0xa8,0xa8,0xe3
1886.byte 0xa2,0x51,0x51,0xf3, 0x5d,0xa3,0xa3,0xfe
1887.byte 0x80,0x40,0x40,0xc0, 0x05,0x8f,0x8f,0x8a
1888.byte 0x3f,0x92,0x92,0xad, 0x21,0x9d,0x9d,0xbc
1889.byte 0x70,0x38,0x38,0x48, 0xf1,0xf5,0xf5,0x04
1890.byte 0x63,0xbc,0xbc,0xdf, 0x77,0xb6,0xb6,0xc1
1891.byte 0xaf,0xda,0xda,0x75, 0x42,0x21,0x21,0x63
1892.byte 0x20,0x10,0x10,0x30, 0xe5,0xff,0xff,0x1a
1893.byte 0xfd,0xf3,0xf3,0x0e, 0xbf,0xd2,0xd2,0x6d
1894.byte 0x81,0xcd,0xcd,0x4c, 0x18,0x0c,0x0c,0x14
1895.byte 0x26,0x13,0x13,0x35, 0xc3,0xec,0xec,0x2f
1896.byte 0xbe,0x5f,0x5f,0xe1, 0x35,0x97,0x97,0xa2
1897.byte 0x88,0x44,0x44,0xcc, 0x2e,0x17,0x17,0x39
1898.byte 0x93,0xc4,0xc4,0x57, 0x55,0xa7,0xa7,0xf2
1899.byte 0xfc,0x7e,0x7e,0x82, 0x7a,0x3d,0x3d,0x47
1900.byte 0xc8,0x64,0x64,0xac, 0xba,0x5d,0x5d,0xe7
1901.byte 0x32,0x19,0x19,0x2b, 0xe6,0x73,0x73,0x95
1902.byte 0xc0,0x60,0x60,0xa0, 0x19,0x81,0x81,0x98
1903.byte 0x9e,0x4f,0x4f,0xd1, 0xa3,0xdc,0xdc,0x7f
1904.byte 0x44,0x22,0x22,0x66, 0x54,0x2a,0x2a,0x7e
1905.byte 0x3b,0x90,0x90,0xab, 0x0b,0x88,0x88,0x83
1906.byte 0x8c,0x46,0x46,0xca, 0xc7,0xee,0xee,0x29
1907.byte 0x6b,0xb8,0xb8,0xd3, 0x28,0x14,0x14,0x3c
1908.byte 0xa7,0xde,0xde,0x79, 0xbc,0x5e,0x5e,0xe2
1909.byte 0x16,0x0b,0x0b,0x1d, 0xad,0xdb,0xdb,0x76
1910.byte 0xdb,0xe0,0xe0,0x3b, 0x64,0x32,0x32,0x56
1911.byte 0x74,0x3a,0x3a,0x4e, 0x14,0x0a,0x0a,0x1e
1912.byte 0x92,0x49,0x49,0xdb, 0x0c,0x06,0x06,0x0a
1913.byte 0x48,0x24,0x24,0x6c, 0xb8,0x5c,0x5c,0xe4
1914.byte 0x9f,0xc2,0xc2,0x5d, 0xbd,0xd3,0xd3,0x6e
1915.byte 0x43,0xac,0xac,0xef, 0xc4,0x62,0x62,0xa6
1916.byte 0x39,0x91,0x91,0xa8, 0x31,0x95,0x95,0xa4
1917.byte 0xd3,0xe4,0xe4,0x37, 0xf2,0x79,0x79,0x8b
1918.byte 0xd5,0xe7,0xe7,0x32, 0x8b,0xc8,0xc8,0x43
1919.byte 0x6e,0x37,0x37,0x59, 0xda,0x6d,0x6d,0xb7
1920.byte 0x01,0x8d,0x8d,0x8c, 0xb1,0xd5,0xd5,0x64
1921.byte 0x9c,0x4e,0x4e,0xd2, 0x49,0xa9,0xa9,0xe0
1922.byte 0xd8,0x6c,0x6c,0xb4, 0xac,0x56,0x56,0xfa
1923.byte 0xf3,0xf4,0xf4,0x07, 0xcf,0xea,0xea,0x25
1924.byte 0xca,0x65,0x65,0xaf, 0xf4,0x7a,0x7a,0x8e
1925.byte 0x47,0xae,0xae,0xe9, 0x10,0x08,0x08,0x18
1926.byte 0x6f,0xba,0xba,0xd5, 0xf0,0x78,0x78,0x88
1927.byte 0x4a,0x25,0x25,0x6f, 0x5c,0x2e,0x2e,0x72
1928.byte 0x38,0x1c,0x1c,0x24, 0x57,0xa6,0xa6,0xf1
1929.byte 0x73,0xb4,0xb4,0xc7, 0x97,0xc6,0xc6,0x51
1930.byte 0xcb,0xe8,0xe8,0x23, 0xa1,0xdd,0xdd,0x7c
1931.byte 0xe8,0x74,0x74,0x9c, 0x3e,0x1f,0x1f,0x21
1932.byte 0x96,0x4b,0x4b,0xdd, 0x61,0xbd,0xbd,0xdc
1933.byte 0x0d,0x8b,0x8b,0x86, 0x0f,0x8a,0x8a,0x85
1934.byte 0xe0,0x70,0x70,0x90, 0x7c,0x3e,0x3e,0x42
1935.byte 0x71,0xb5,0xb5,0xc4, 0xcc,0x66,0x66,0xaa
1936.byte 0x90,0x48,0x48,0xd8, 0x06,0x03,0x03,0x05
1937.byte 0xf7,0xf6,0xf6,0x01, 0x1c,0x0e,0x0e,0x12
1938.byte 0xc2,0x61,0x61,0xa3, 0x6a,0x35,0x35,0x5f
1939.byte 0xae,0x57,0x57,0xf9, 0x69,0xb9,0xb9,0xd0
1940.byte 0x17,0x86,0x86,0x91, 0x99,0xc1,0xc1,0x58
1941.byte 0x3a,0x1d,0x1d,0x27, 0x27,0x9e,0x9e,0xb9
1942.byte 0xd9,0xe1,0xe1,0x38, 0xeb,0xf8,0xf8,0x13
1943.byte 0x2b,0x98,0x98,0xb3, 0x22,0x11,0x11,0x33
1944.byte 0xd2,0x69,0x69,0xbb, 0xa9,0xd9,0xd9,0x70
1945.byte 0x07,0x8e,0x8e,0x89, 0x33,0x94,0x94,0xa7
1946.byte 0x2d,0x9b,0x9b,0xb6, 0x3c,0x1e,0x1e,0x22
1947.byte 0x15,0x87,0x87,0x92, 0xc9,0xe9,0xe9,0x20
1948.byte 0x87,0xce,0xce,0x49, 0xaa,0x55,0x55,0xff
1949.byte 0x50,0x28,0x28,0x78, 0xa5,0xdf,0xdf,0x7a
1950.byte 0x03,0x8c,0x8c,0x8f, 0x59,0xa1,0xa1,0xf8
1951.byte 0x09,0x89,0x89,0x80, 0x1a,0x0d,0x0d,0x17
1952.byte 0x65,0xbf,0xbf,0xda, 0xd7,0xe6,0xe6,0x31
1953.byte 0x84,0x42,0x42,0xc6, 0xd0,0x68,0x68,0xb8
1954.byte 0x82,0x41,0x41,0xc3, 0x29,0x99,0x99,0xb0
1955.byte 0x5a,0x2d,0x2d,0x77, 0x1e,0x0f,0x0f,0x11
1956.byte 0x7b,0xb0,0xb0,0xcb, 0xa8,0x54,0x54,0xfc
1957.byte 0x6d,0xbb,0xbb,0xd6, 0x2c,0x16,0x16,0x3a
1958
1959AES_Td:
1960.byte 0x51,0xf4,0xa7,0x50, 0x7e,0x41,0x65,0x53 # Td0
1961.byte 0x1a,0x17,0xa4,0xc3, 0x3a,0x27,0x5e,0x96
1962.byte 0x3b,0xab,0x6b,0xcb, 0x1f,0x9d,0x45,0xf1
1963.byte 0xac,0xfa,0x58,0xab, 0x4b,0xe3,0x03,0x93
1964.byte 0x20,0x30,0xfa,0x55, 0xad,0x76,0x6d,0xf6
1965.byte 0x88,0xcc,0x76,0x91, 0xf5,0x02,0x4c,0x25
1966.byte 0x4f,0xe5,0xd7,0xfc, 0xc5,0x2a,0xcb,0xd7
1967.byte 0x26,0x35,0x44,0x80, 0xb5,0x62,0xa3,0x8f
1968.byte 0xde,0xb1,0x5a,0x49, 0x25,0xba,0x1b,0x67
1969.byte 0x45,0xea,0x0e,0x98, 0x5d,0xfe,0xc0,0xe1
1970.byte 0xc3,0x2f,0x75,0x02, 0x81,0x4c,0xf0,0x12
1971.byte 0x8d,0x46,0x97,0xa3, 0x6b,0xd3,0xf9,0xc6
1972.byte 0x03,0x8f,0x5f,0xe7, 0x15,0x92,0x9c,0x95
1973.byte 0xbf,0x6d,0x7a,0xeb, 0x95,0x52,0x59,0xda
1974.byte 0xd4,0xbe,0x83,0x2d, 0x58,0x74,0x21,0xd3
1975.byte 0x49,0xe0,0x69,0x29, 0x8e,0xc9,0xc8,0x44
1976.byte 0x75,0xc2,0x89,0x6a, 0xf4,0x8e,0x79,0x78
1977.byte 0x99,0x58,0x3e,0x6b, 0x27,0xb9,0x71,0xdd
1978.byte 0xbe,0xe1,0x4f,0xb6, 0xf0,0x88,0xad,0x17
1979.byte 0xc9,0x20,0xac,0x66, 0x7d,0xce,0x3a,0xb4
1980.byte 0x63,0xdf,0x4a,0x18, 0xe5,0x1a,0x31,0x82
1981.byte 0x97,0x51,0x33,0x60, 0x62,0x53,0x7f,0x45
1982.byte 0xb1,0x64,0x77,0xe0, 0xbb,0x6b,0xae,0x84
1983.byte 0xfe,0x81,0xa0,0x1c, 0xf9,0x08,0x2b,0x94
1984.byte 0x70,0x48,0x68,0x58, 0x8f,0x45,0xfd,0x19
1985.byte 0x94,0xde,0x6c,0x87, 0x52,0x7b,0xf8,0xb7
1986.byte 0xab,0x73,0xd3,0x23, 0x72,0x4b,0x02,0xe2
1987.byte 0xe3,0x1f,0x8f,0x57, 0x66,0x55,0xab,0x2a
1988.byte 0xb2,0xeb,0x28,0x07, 0x2f,0xb5,0xc2,0x03
1989.byte 0x86,0xc5,0x7b,0x9a, 0xd3,0x37,0x08,0xa5
1990.byte 0x30,0x28,0x87,0xf2, 0x23,0xbf,0xa5,0xb2
1991.byte 0x02,0x03,0x6a,0xba, 0xed,0x16,0x82,0x5c
1992.byte 0x8a,0xcf,0x1c,0x2b, 0xa7,0x79,0xb4,0x92
1993.byte 0xf3,0x07,0xf2,0xf0, 0x4e,0x69,0xe2,0xa1
1994.byte 0x65,0xda,0xf4,0xcd, 0x06,0x05,0xbe,0xd5
1995.byte 0xd1,0x34,0x62,0x1f, 0xc4,0xa6,0xfe,0x8a
1996.byte 0x34,0x2e,0x53,0x9d, 0xa2,0xf3,0x55,0xa0
1997.byte 0x05,0x8a,0xe1,0x32, 0xa4,0xf6,0xeb,0x75
1998.byte 0x0b,0x83,0xec,0x39, 0x40,0x60,0xef,0xaa
1999.byte 0x5e,0x71,0x9f,0x06, 0xbd,0x6e,0x10,0x51
2000.byte 0x3e,0x21,0x8a,0xf9, 0x96,0xdd,0x06,0x3d
2001.byte 0xdd,0x3e,0x05,0xae, 0x4d,0xe6,0xbd,0x46
2002.byte 0x91,0x54,0x8d,0xb5, 0x71,0xc4,0x5d,0x05
2003.byte 0x04,0x06,0xd4,0x6f, 0x60,0x50,0x15,0xff
2004.byte 0x19,0x98,0xfb,0x24, 0xd6,0xbd,0xe9,0x97
2005.byte 0x89,0x40,0x43,0xcc, 0x67,0xd9,0x9e,0x77
2006.byte 0xb0,0xe8,0x42,0xbd, 0x07,0x89,0x8b,0x88
2007.byte 0xe7,0x19,0x5b,0x38, 0x79,0xc8,0xee,0xdb
2008.byte 0xa1,0x7c,0x0a,0x47, 0x7c,0x42,0x0f,0xe9
2009.byte 0xf8,0x84,0x1e,0xc9, 0x00,0x00,0x00,0x00
2010.byte 0x09,0x80,0x86,0x83, 0x32,0x2b,0xed,0x48
2011.byte 0x1e,0x11,0x70,0xac, 0x6c,0x5a,0x72,0x4e
2012.byte 0xfd,0x0e,0xff,0xfb, 0x0f,0x85,0x38,0x56
2013.byte 0x3d,0xae,0xd5,0x1e, 0x36,0x2d,0x39,0x27
2014.byte 0x0a,0x0f,0xd9,0x64, 0x68,0x5c,0xa6,0x21
2015.byte 0x9b,0x5b,0x54,0xd1, 0x24,0x36,0x2e,0x3a
2016.byte 0x0c,0x0a,0x67,0xb1, 0x93,0x57,0xe7,0x0f
2017.byte 0xb4,0xee,0x96,0xd2, 0x1b,0x9b,0x91,0x9e
2018.byte 0x80,0xc0,0xc5,0x4f, 0x61,0xdc,0x20,0xa2
2019.byte 0x5a,0x77,0x4b,0x69, 0x1c,0x12,0x1a,0x16
2020.byte 0xe2,0x93,0xba,0x0a, 0xc0,0xa0,0x2a,0xe5
2021.byte 0x3c,0x22,0xe0,0x43, 0x12,0x1b,0x17,0x1d
2022.byte 0x0e,0x09,0x0d,0x0b, 0xf2,0x8b,0xc7,0xad
2023.byte 0x2d,0xb6,0xa8,0xb9, 0x14,0x1e,0xa9,0xc8
2024.byte 0x57,0xf1,0x19,0x85, 0xaf,0x75,0x07,0x4c
2025.byte 0xee,0x99,0xdd,0xbb, 0xa3,0x7f,0x60,0xfd
2026.byte 0xf7,0x01,0x26,0x9f, 0x5c,0x72,0xf5,0xbc
2027.byte 0x44,0x66,0x3b,0xc5, 0x5b,0xfb,0x7e,0x34
2028.byte 0x8b,0x43,0x29,0x76, 0xcb,0x23,0xc6,0xdc
2029.byte 0xb6,0xed,0xfc,0x68, 0xb8,0xe4,0xf1,0x63
2030.byte 0xd7,0x31,0xdc,0xca, 0x42,0x63,0x85,0x10
2031.byte 0x13,0x97,0x22,0x40, 0x84,0xc6,0x11,0x20
2032.byte 0x85,0x4a,0x24,0x7d, 0xd2,0xbb,0x3d,0xf8
2033.byte 0xae,0xf9,0x32,0x11, 0xc7,0x29,0xa1,0x6d
2034.byte 0x1d,0x9e,0x2f,0x4b, 0xdc,0xb2,0x30,0xf3
2035.byte 0x0d,0x86,0x52,0xec, 0x77,0xc1,0xe3,0xd0
2036.byte 0x2b,0xb3,0x16,0x6c, 0xa9,0x70,0xb9,0x99
2037.byte 0x11,0x94,0x48,0xfa, 0x47,0xe9,0x64,0x22
2038.byte 0xa8,0xfc,0x8c,0xc4, 0xa0,0xf0,0x3f,0x1a
2039.byte 0x56,0x7d,0x2c,0xd8, 0x22,0x33,0x90,0xef
2040.byte 0x87,0x49,0x4e,0xc7, 0xd9,0x38,0xd1,0xc1
2041.byte 0x8c,0xca,0xa2,0xfe, 0x98,0xd4,0x0b,0x36
2042.byte 0xa6,0xf5,0x81,0xcf, 0xa5,0x7a,0xde,0x28
2043.byte 0xda,0xb7,0x8e,0x26, 0x3f,0xad,0xbf,0xa4
2044.byte 0x2c,0x3a,0x9d,0xe4, 0x50,0x78,0x92,0x0d
2045.byte 0x6a,0x5f,0xcc,0x9b, 0x54,0x7e,0x46,0x62
2046.byte 0xf6,0x8d,0x13,0xc2, 0x90,0xd8,0xb8,0xe8
2047.byte 0x2e,0x39,0xf7,0x5e, 0x82,0xc3,0xaf,0xf5
2048.byte 0x9f,0x5d,0x80,0xbe, 0x69,0xd0,0x93,0x7c
2049.byte 0x6f,0xd5,0x2d,0xa9, 0xcf,0x25,0x12,0xb3
2050.byte 0xc8,0xac,0x99,0x3b, 0x10,0x18,0x7d,0xa7
2051.byte 0xe8,0x9c,0x63,0x6e, 0xdb,0x3b,0xbb,0x7b
2052.byte 0xcd,0x26,0x78,0x09, 0x6e,0x59,0x18,0xf4
2053.byte 0xec,0x9a,0xb7,0x01, 0x83,0x4f,0x9a,0xa8
2054.byte 0xe6,0x95,0x6e,0x65, 0xaa,0xff,0xe6,0x7e
2055.byte 0x21,0xbc,0xcf,0x08, 0xef,0x15,0xe8,0xe6
2056.byte 0xba,0xe7,0x9b,0xd9, 0x4a,0x6f,0x36,0xce
2057.byte 0xea,0x9f,0x09,0xd4, 0x29,0xb0,0x7c,0xd6
2058.byte 0x31,0xa4,0xb2,0xaf, 0x2a,0x3f,0x23,0x31
2059.byte 0xc6,0xa5,0x94,0x30, 0x35,0xa2,0x66,0xc0
2060.byte 0x74,0x4e,0xbc,0x37, 0xfc,0x82,0xca,0xa6
2061.byte 0xe0,0x90,0xd0,0xb0, 0x33,0xa7,0xd8,0x15
2062.byte 0xf1,0x04,0x98,0x4a, 0x41,0xec,0xda,0xf7
2063.byte 0x7f,0xcd,0x50,0x0e, 0x17,0x91,0xf6,0x2f
2064.byte 0x76,0x4d,0xd6,0x8d, 0x43,0xef,0xb0,0x4d
2065.byte 0xcc,0xaa,0x4d,0x54, 0xe4,0x96,0x04,0xdf
2066.byte 0x9e,0xd1,0xb5,0xe3, 0x4c,0x6a,0x88,0x1b
2067.byte 0xc1,0x2c,0x1f,0xb8, 0x46,0x65,0x51,0x7f
2068.byte 0x9d,0x5e,0xea,0x04, 0x01,0x8c,0x35,0x5d
2069.byte 0xfa,0x87,0x74,0x73, 0xfb,0x0b,0x41,0x2e
2070.byte 0xb3,0x67,0x1d,0x5a, 0x92,0xdb,0xd2,0x52
2071.byte 0xe9,0x10,0x56,0x33, 0x6d,0xd6,0x47,0x13
2072.byte 0x9a,0xd7,0x61,0x8c, 0x37,0xa1,0x0c,0x7a
2073.byte 0x59,0xf8,0x14,0x8e, 0xeb,0x13,0x3c,0x89
2074.byte 0xce,0xa9,0x27,0xee, 0xb7,0x61,0xc9,0x35
2075.byte 0xe1,0x1c,0xe5,0xed, 0x7a,0x47,0xb1,0x3c
2076.byte 0x9c,0xd2,0xdf,0x59, 0x55,0xf2,0x73,0x3f
2077.byte 0x18,0x14,0xce,0x79, 0x73,0xc7,0x37,0xbf
2078.byte 0x53,0xf7,0xcd,0xea, 0x5f,0xfd,0xaa,0x5b
2079.byte 0xdf,0x3d,0x6f,0x14, 0x78,0x44,0xdb,0x86
2080.byte 0xca,0xaf,0xf3,0x81, 0xb9,0x68,0xc4,0x3e
2081.byte 0x38,0x24,0x34,0x2c, 0xc2,0xa3,0x40,0x5f
2082.byte 0x16,0x1d,0xc3,0x72, 0xbc,0xe2,0x25,0x0c
2083.byte 0x28,0x3c,0x49,0x8b, 0xff,0x0d,0x95,0x41
2084.byte 0x39,0xa8,0x01,0x71, 0x08,0x0c,0xb3,0xde
2085.byte 0xd8,0xb4,0xe4,0x9c, 0x64,0x56,0xc1,0x90
2086.byte 0x7b,0xcb,0x84,0x61, 0xd5,0x32,0xb6,0x70
2087.byte 0x48,0x6c,0x5c,0x74, 0xd0,0xb8,0x57,0x42
2088
2089.byte 0x52, 0x09, 0x6a, 0xd5, 0x30, 0x36, 0xa5, 0x38 # Td4
2090.byte 0xbf, 0x40, 0xa3, 0x9e, 0x81, 0xf3, 0xd7, 0xfb
2091.byte 0x7c, 0xe3, 0x39, 0x82, 0x9b, 0x2f, 0xff, 0x87
2092.byte 0x34, 0x8e, 0x43, 0x44, 0xc4, 0xde, 0xe9, 0xcb
2093.byte 0x54, 0x7b, 0x94, 0x32, 0xa6, 0xc2, 0x23, 0x3d
2094.byte 0xee, 0x4c, 0x95, 0x0b, 0x42, 0xfa, 0xc3, 0x4e
2095.byte 0x08, 0x2e, 0xa1, 0x66, 0x28, 0xd9, 0x24, 0xb2
2096.byte 0x76, 0x5b, 0xa2, 0x49, 0x6d, 0x8b, 0xd1, 0x25
2097.byte 0x72, 0xf8, 0xf6, 0x64, 0x86, 0x68, 0x98, 0x16
2098.byte 0xd4, 0xa4, 0x5c, 0xcc, 0x5d, 0x65, 0xb6, 0x92
2099.byte 0x6c, 0x70, 0x48, 0x50, 0xfd, 0xed, 0xb9, 0xda
2100.byte 0x5e, 0x15, 0x46, 0x57, 0xa7, 0x8d, 0x9d, 0x84
2101.byte 0x90, 0xd8, 0xab, 0x00, 0x8c, 0xbc, 0xd3, 0x0a
2102.byte 0xf7, 0xe4, 0x58, 0x05, 0xb8, 0xb3, 0x45, 0x06
2103.byte 0xd0, 0x2c, 0x1e, 0x8f, 0xca, 0x3f, 0x0f, 0x02
2104.byte 0xc1, 0xaf, 0xbd, 0x03, 0x01, 0x13, 0x8a, 0x6b
2105.byte 0x3a, 0x91, 0x11, 0x41, 0x4f, 0x67, 0xdc, 0xea
2106.byte 0x97, 0xf2, 0xcf, 0xce, 0xf0, 0xb4, 0xe6, 0x73
2107.byte 0x96, 0xac, 0x74, 0x22, 0xe7, 0xad, 0x35, 0x85
2108.byte 0xe2, 0xf9, 0x37, 0xe8, 0x1c, 0x75, 0xdf, 0x6e
2109.byte 0x47, 0xf1, 0x1a, 0x71, 0x1d, 0x29, 0xc5, 0x89
2110.byte 0x6f, 0xb7, 0x62, 0x0e, 0xaa, 0x18, 0xbe, 0x1b
2111.byte 0xfc, 0x56, 0x3e, 0x4b, 0xc6, 0xd2, 0x79, 0x20
2112.byte 0x9a, 0xdb, 0xc0, 0xfe, 0x78, 0xcd, 0x5a, 0xf4
2113.byte 0x1f, 0xdd, 0xa8, 0x33, 0x88, 0x07, 0xc7, 0x31
2114.byte 0xb1, 0x12, 0x10, 0x59, 0x27, 0x80, 0xec, 0x5f
2115.byte 0x60, 0x51, 0x7f, 0xa9, 0x19, 0xb5, 0x4a, 0x0d
2116.byte 0x2d, 0xe5, 0x7a, 0x9f, 0x93, 0xc9, 0x9c, 0xef
2117.byte 0xa0, 0xe0, 0x3b, 0x4d, 0xae, 0x2a, 0xf5, 0xb0
2118.byte 0xc8, 0xeb, 0xbb, 0x3c, 0x83, 0x53, 0x99, 0x61
2119.byte 0x17, 0x2b, 0x04, 0x7e, 0xba, 0x77, 0xd6, 0x26
2120.byte 0xe1, 0x69, 0x14, 0x63, 0x55, 0x21, 0x0c, 0x7d
2121
2122AES_Te4:
2123.byte 0x63, 0x7c, 0x77, 0x7b, 0xf2, 0x6b, 0x6f, 0xc5 # Te4
2124.byte 0x30, 0x01, 0x67, 0x2b, 0xfe, 0xd7, 0xab, 0x76
2125.byte 0xca, 0x82, 0xc9, 0x7d, 0xfa, 0x59, 0x47, 0xf0
2126.byte 0xad, 0xd4, 0xa2, 0xaf, 0x9c, 0xa4, 0x72, 0xc0
2127.byte 0xb7, 0xfd, 0x93, 0x26, 0x36, 0x3f, 0xf7, 0xcc
2128.byte 0x34, 0xa5, 0xe5, 0xf1, 0x71, 0xd8, 0x31, 0x15
2129.byte 0x04, 0xc7, 0x23, 0xc3, 0x18, 0x96, 0x05, 0x9a
2130.byte 0x07, 0x12, 0x80, 0xe2, 0xeb, 0x27, 0xb2, 0x75
2131.byte 0x09, 0x83, 0x2c, 0x1a, 0x1b, 0x6e, 0x5a, 0xa0
2132.byte 0x52, 0x3b, 0xd6, 0xb3, 0x29, 0xe3, 0x2f, 0x84
2133.byte 0x53, 0xd1, 0x00, 0xed, 0x20, 0xfc, 0xb1, 0x5b
2134.byte 0x6a, 0xcb, 0xbe, 0x39, 0x4a, 0x4c, 0x58, 0xcf
2135.byte 0xd0, 0xef, 0xaa, 0xfb, 0x43, 0x4d, 0x33, 0x85
2136.byte 0x45, 0xf9, 0x02, 0x7f, 0x50, 0x3c, 0x9f, 0xa8
2137.byte 0x51, 0xa3, 0x40, 0x8f, 0x92, 0x9d, 0x38, 0xf5
2138.byte 0xbc, 0xb6, 0xda, 0x21, 0x10, 0xff, 0xf3, 0xd2
2139.byte 0xcd, 0x0c, 0x13, 0xec, 0x5f, 0x97, 0x44, 0x17
2140.byte 0xc4, 0xa7, 0x7e, 0x3d, 0x64, 0x5d, 0x19, 0x73
2141.byte 0x60, 0x81, 0x4f, 0xdc, 0x22, 0x2a, 0x90, 0x88
2142.byte 0x46, 0xee, 0xb8, 0x14, 0xde, 0x5e, 0x0b, 0xdb
2143.byte 0xe0, 0x32, 0x3a, 0x0a, 0x49, 0x06, 0x24, 0x5c
2144.byte 0xc2, 0xd3, 0xac, 0x62, 0x91, 0x95, 0xe4, 0x79
2145.byte 0xe7, 0xc8, 0x37, 0x6d, 0x8d, 0xd5, 0x4e, 0xa9
2146.byte 0x6c, 0x56, 0xf4, 0xea, 0x65, 0x7a, 0xae, 0x08
2147.byte 0xba, 0x78, 0x25, 0x2e, 0x1c, 0xa6, 0xb4, 0xc6
2148.byte 0xe8, 0xdd, 0x74, 0x1f, 0x4b, 0xbd, 0x8b, 0x8a
2149.byte 0x70, 0x3e, 0xb5, 0x66, 0x48, 0x03, 0xf6, 0x0e
2150.byte 0x61, 0x35, 0x57, 0xb9, 0x86, 0xc1, 0x1d, 0x9e
2151.byte 0xe1, 0xf8, 0x98, 0x11, 0x69, 0xd9, 0x8e, 0x94
2152.byte 0x9b, 0x1e, 0x87, 0xe9, 0xce, 0x55, 0x28, 0xdf
2153.byte 0x8c, 0xa1, 0x89, 0x0d, 0xbf, 0xe6, 0x42, 0x68
2154.byte 0x41, 0x99, 0x2d, 0x0f, 0xb0, 0x54, 0xbb, 0x16
2155
2156.byte 0x01,0x00,0x00,0x00, 0x02,0x00,0x00,0x00 # rcon
2157.byte 0x04,0x00,0x00,0x00, 0x08,0x00,0x00,0x00
2158.byte 0x10,0x00,0x00,0x00, 0x20,0x00,0x00,0x00
2159.byte 0x40,0x00,0x00,0x00, 0x80,0x00,0x00,0x00
2160.byte 0x1B,0x00,0x00,0x00, 0x36,0x00,0x00,0x00
2161___
2162
2163
2164foreach (split("\n",$code)) {
2165 s/\`([^\`]*)\`/eval $1/ge;
2166
2167 # made-up _instructions, _xtr, _ins, _ror and _bias, cope
2168 # with byte order dependencies...
2169 if (/^\s+_/) {
2170 s/(_[a-z]+\s+)(\$[0-9]+),([^,]+)(#.*)*$/$1$2,$2,$3/;
2171
2172 s/_xtr\s+(\$[0-9]+),(\$[0-9]+),([0-9]+(\-2)*)/
2173 sprintf("srl\t$1,$2,%d",$big_endian ? eval($3)
2174 : eval("24-$3"))/e or
2175 s/_ins\s+(\$[0-9]+),(\$[0-9]+),([0-9]+)/
2176 sprintf("sll\t$1,$2,%d",$big_endian ? eval($3)
2177 : eval("24-$3"))/e or
2178 s/_ins2\s+(\$[0-9]+),(\$[0-9]+),([0-9]+)/
2179 sprintf("ins\t$1,$2,%d,8",$big_endian ? eval($3)
2180 : eval("24-$3"))/e or
2181 s/_ror\s+(\$[0-9]+),(\$[0-9]+),(\-?[0-9]+)/
2182 sprintf("srl\t$1,$2,%d",$big_endian ? eval($3)
2183 : eval("$3*-1"))/e or
2184 s/_bias\s+(\$[0-9]+),(\$[0-9]+),([0-9]+)/
2185 sprintf("sll\t$1,$2,%d",$big_endian ? eval($3)
2186 : eval("($3-16)&31"))/e;
2187
2188 s/srl\s+(\$[0-9]+),(\$[0-9]+),\-([0-9]+)/
2189 sprintf("sll\t$1,$2,$3")/e or
2190 s/srl\s+(\$[0-9]+),(\$[0-9]+),0/
2191 sprintf("and\t$1,$2,0xff")/e or
2192 s/(sll\s+\$[0-9]+,\$[0-9]+,0)/#$1/;
2193 }
2194
2195 # convert lwl/lwr and swr/swl to little-endian order
2196 if (!$big_endian && /^\s+[sl]w[lr]\s+/) {
2197 s/([sl]wl.*)([0-9]+)\((\$[0-9]+)\)/
2198 sprintf("$1%d($3)",eval("$2-$2%4+($2%4-1)&3"))/e or
2199 s/([sl]wr.*)([0-9]+)\((\$[0-9]+)\)/
2200 sprintf("$1%d($3)",eval("$2-$2%4+($2%4+1)&3"))/e;
2201 }
2202
2203 if (!$big_endian) {
2204 s/(rotr\s+\$[0-9]+,\$[0-9]+),([0-9]+)/sprintf("$1,%d",32-$2)/e;
2205 s/(ext\s+\$[0-9]+,\$[0-9]+),([0-9]+),8/sprintf("$1,%d,8",24-$2)/e;
2206 }
2207
2208 print $_,"\n";
2209}
2210
2211close STDOUT or die "error closing STDOUT: $!";
注意: 瀏覽 TracBrowser 來幫助您使用儲存庫瀏覽器

© 2024 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette