3 # ====================================================================
4 # Written by Andy Polyakov <appro@openssl.org> for the OpenSSL
5 # project. The module is, however, dual licensed under OpenSSL and
6 # CRYPTOGAMS licenses depending on where you obtain it. For further
7 # details see http://www.openssl.org/~appro/cryptogams/.
8 # ====================================================================
14 # Code uses 1K[+256B] S-box and on single-issue core [such as R5000]
15 # spends ~68 cycles per byte processed with 128-bit key. This is ~16%
16 # faster than gcc-generated code, which is not very impressive. But
17 # recall that compressed S-box requires extra processing, namely
18 # additional rotations. Rotations are implemented with lwl/lwr pairs,
19 # which is normally used for loading unaligned data. Another cool
20 # thing about this module is its endian neutrality, which means that
21 # it processes data without ever changing byte order...
23 ######################################################################
24 # There is a number of MIPS ABI in use, O32 and N32/64 are most
25 # widely used. Then there is a new contender: NUBI. It appears that if
26 # one picks the latter, it's possible to arrange code in ABI neutral
27 # manner. Therefore let's stick to NUBI register layout:
29 ($zero,$at,$t0,$t1,$t2)=map("\$$_",(0..2,24,25));
30 ($a0,$a1,$a2,$a3,$a4,$a5,$a6,$a7)=map("\$$_",(4..11));
31 ($s0,$s1,$s2,$s3,$s4,$s5,$s6,$s7,$s8,$s9,$s10,$s11)=map("\$$_",(12..23));
32 ($gp,$tp,$sp,$fp,$ra)=map("\$$_",(3,28..31));
34 # The return value is placed in $a0. Following coding rules facilitate
37 # - never ever touch $tp, "thread pointer", former $gp;
38 # - copy return value to $t0, former $v0 [or to $a0 if you're adapting
40 # - on O32 populate $a4-$a7 with 'lw $aN,4*N($sp)' if necessary;
42 # For reference here is register layout for N32/64 MIPS ABIs:
44 # ($zero,$at,$v0,$v1)=map("\$$_",(0..3));
45 # ($a0,$a1,$a2,$a3,$a4,$a5,$a6,$a7)=map("\$$_",(4..11));
46 # ($t0,$t1,$t2,$t3,$t8,$t9)=map("\$$_",(12..15,24,25));
47 # ($s0,$s1,$s2,$s3,$s4,$s5,$s6,$s7)=map("\$$_",(16..23));
48 # ($gp,$sp,$fp,$ra)=map("\$$_",(28..31));
50 $flavour = shift; # supported flavours are o32,n32,64,nubi32,nubi64
52 if ($flavour =~ /64|n32/i) {
53 $PTR_ADD="dadd"; # incidentally works even on n32
54 $PTR_SUB="dsub"; # incidentally works even on n32
57 $PTR_SLL="dsll"; # incidentally works even on n32
67 $pf = ($flavour =~ /nubi/i) ?
$t0 : $t2;
71 ######################################################################
73 $big_endian=(`echo MIPSEL | $ENV{CC} -E -P -`=~/MIPSEL/)?
1:0;
75 for (@ARGV) { $output=$_ if (/^\w[\w\-]*\.\w+$/); }
76 open STDOUT
,">$output";
78 if (!defined($big_endian))
79 { $big_endian=(unpack('L',pack('N',1))==1); }
81 while (($output=shift) && ($output!~/^\w[\w\-]*\.\w+$/)) {}
82 open STDOUT
,">$output";
84 my ($MSB,$LSB)=(0,3); # automatically converted to little-endian
88 #ifdef OPENSSL_FIPSCANISTER
89 # include <openssl/fipssyms.h>
92 #if !defined(__vxworks) || defined(__pic__)
99 my $FRAMESIZE=16*$SZREG;
100 my $SAVED_REGS_MASK = ($flavour =~ /nubi/i) ?
0xc0fff008 : 0xc0ff0000;
102 my ($inp,$out,$key,$Tbl,$s0,$s1,$s2,$s3)=($a0,$a1,$a2,$a3,$a4,$a5,$a6,$a7);
103 my ($i0,$i1,$i2,$i3)=($at,$t0,$t1,$t2);
104 my ($t0,$t1,$t2,$t3,$t4,$t5,$t6,$t7,$t8,$t9,$t10,$t11) = map("\$$_",(12..23));
105 my ($key0,$cnt)=($gp,$fp);
107 # instuction ordering is "stolen" from output from MIPSpro assembler
108 # invoked with -mips3 -O3 arguments...
111 .ent _mips_AES_encrypt
120 $PTR_ADD $key0,$key,16
141 lwl
$t0,3($i0) # Te1[s1>>16]
142 lwl
$t1,3($i1) # Te1[s2>>16]
143 lwl
$t2,3($i2) # Te1[s3>>16]
144 lwl
$t3,3($i3) # Te1[s0>>16]
145 lwr
$t0,2($i0) # Te1[s1>>16]
146 lwr
$t1,2($i1) # Te1[s2>>16]
147 lwr
$t2,2($i2) # Te1[s3>>16]
148 lwr
$t3,2($i3) # Te1[s0>>16]
162 lwl
$t4,2($i0) # Te2[s2>>8]
163 lwl
$t5,2($i1) # Te2[s3>>8]
164 lwl
$t6,2($i2) # Te2[s0>>8]
165 lwl
$t7,2($i3) # Te2[s1>>8]
166 lwr
$t4,1($i0) # Te2[s2>>8]
167 lwr
$t5,1($i1) # Te2[s3>>8]
168 lwr
$t6,1($i2) # Te2[s0>>8]
169 lwr
$t7,1($i3) # Te2[s1>>8]
183 lwl
$t8,1($i0) # Te3[s3]
184 lwl
$t9,1($i1) # Te3[s0]
185 lwl
$t10,1($i2) # Te3[s1]
186 lwl
$t11,1($i3) # Te3[s2]
187 lwr
$t8,0($i0) # Te3[s3]
188 lwr
$t9,0($i1) # Te3[s0]
189 lwr
$t10,0($i2) # Te3[s1]
190 lwr
$t11,0($i3) # Te3[s2]
208 lw
$t4,0($i0) # Te0[s0>>24]
209 lw
$t5,0($i1) # Te0[s1>>24]
210 lw
$t6,0($i2) # Te0[s2>>24]
211 lw
$t7,0($i3) # Te0[s3>>24]
250 lbu
$t0,2($i0) # Te4[s1>>16]
251 lbu
$t1,2($i1) # Te4[s2>>16]
252 lbu
$t2,2($i2) # Te4[s3>>16]
253 lbu
$t3,2($i3) # Te4[s0>>16]
267 lbu
$t4,2($i0) # Te4[s2>>8]
268 lbu
$t5,2($i1) # Te4[s3>>8]
269 lbu
$t6,2($i2) # Te4[s0>>8]
270 lbu
$t7,2($i3) # Te4[s1>>8]
284 lbu
$t8,2($i0) # Te4[s0>>24]
285 lbu
$t9,2($i1) # Te4[s1>>24]
286 lbu
$t10,2($i2) # Te4[s2>>24]
287 lbu
$t11,2($i3) # Te4[s3>>24]
317 lbu
$t4,2($i0) # Te4[s3]
318 lbu
$t5,2($i1) # Te4[s0]
319 lbu
$t6,2($i2) # Te4[s1]
320 lbu
$t7,2($i3) # Te4[s2]
353 .end _mips_AES_encrypt
359 .frame
$sp,$FRAMESIZE,$ra
360 .mask
$SAVED_REGS_MASK,-$SZREG
363 $code.=<<___
if ($flavour =~ /o32/i); # o32 PIC-ification
367 $PTR_SUB $sp,$FRAMESIZE
368 $REG_S $ra,$FRAMESIZE-1*$SZREG($sp)
369 $REG_S $fp,$FRAMESIZE-2*$SZREG($sp)
370 $REG_S $s11,$FRAMESIZE-3*$SZREG($sp)
371 $REG_S $s10,$FRAMESIZE-4*$SZREG($sp)
372 $REG_S $s9,$FRAMESIZE-5*$SZREG($sp)
373 $REG_S $s8,$FRAMESIZE-6*$SZREG($sp)
374 $REG_S $s7,$FRAMESIZE-7*$SZREG($sp)
375 $REG_S $s6,$FRAMESIZE-8*$SZREG($sp)
376 $REG_S $s5,$FRAMESIZE-9*$SZREG($sp)
377 $REG_S $s4,$FRAMESIZE-10*$SZREG($sp)
379 $code.=<<___
if ($flavour =~ /nubi/i); # optimize non-nubi prologue
380 $REG_S \
$15,$FRAMESIZE-11*$SZREG($sp)
381 $REG_S \
$14,$FRAMESIZE-12*$SZREG($sp)
382 $REG_S \
$13,$FRAMESIZE-13*$SZREG($sp)
383 $REG_S \
$12,$FRAMESIZE-14*$SZREG($sp)
384 $REG_S $gp,$FRAMESIZE-15*$SZREG($sp)
386 $code.=<<___
if ($flavour !~ /o32/i); # non-o32 PIC-ification
388 .cpsetup
$pf,$zero,AES_encrypt
392 la
$Tbl,AES_Te
# PIC-ified 'load address'
397 lwl
$s3,12+$MSB($inp)
401 lwr
$s3,12+$LSB($inp)
403 bal _mips_AES_encrypt
408 swr
$s3,12+$LSB($out)
412 swl
$s3,12+$MSB($out)
415 $REG_L $ra,$FRAMESIZE-1*$SZREG($sp)
416 $REG_L $fp,$FRAMESIZE-2*$SZREG($sp)
417 $REG_L $s11,$FRAMESIZE-3*$SZREG($sp)
418 $REG_L $s10,$FRAMESIZE-4*$SZREG($sp)
419 $REG_L $s9,$FRAMESIZE-5*$SZREG($sp)
420 $REG_L $s8,$FRAMESIZE-6*$SZREG($sp)
421 $REG_L $s7,$FRAMESIZE-7*$SZREG($sp)
422 $REG_L $s6,$FRAMESIZE-8*$SZREG($sp)
423 $REG_L $s5,$FRAMESIZE-9*$SZREG($sp)
424 $REG_L $s4,$FRAMESIZE-10*$SZREG($sp)
426 $code.=<<___
if ($flavour =~ /nubi/i);
427 $REG_L \
$15,$FRAMESIZE-11*$SZREG($sp)
428 $REG_L \
$14,$FRAMESIZE-12*$SZREG($sp)
429 $REG_L \
$13,$FRAMESIZE-13*$SZREG($sp)
430 $REG_L \
$12,$FRAMESIZE-14*$SZREG($sp)
431 $REG_L $gp,$FRAMESIZE-15*$SZREG($sp)
435 $PTR_ADD $sp,$FRAMESIZE
441 .ent _mips_AES_decrypt
450 $PTR_ADD $key0,$key,16
471 lwl
$t0,3($i0) # Td1[s3>>16]
472 lwl
$t1,3($i1) # Td1[s0>>16]
473 lwl
$t2,3($i2) # Td1[s1>>16]
474 lwl
$t3,3($i3) # Td1[s2>>16]
475 lwr
$t0,2($i0) # Td1[s3>>16]
476 lwr
$t1,2($i1) # Td1[s0>>16]
477 lwr
$t2,2($i2) # Td1[s1>>16]
478 lwr
$t3,2($i3) # Td1[s2>>16]
492 lwl
$t4,2($i0) # Td2[s2>>8]
493 lwl
$t5,2($i1) # Td2[s3>>8]
494 lwl
$t6,2($i2) # Td2[s0>>8]
495 lwl
$t7,2($i3) # Td2[s1>>8]
496 lwr
$t4,1($i0) # Td2[s2>>8]
497 lwr
$t5,1($i1) # Td2[s3>>8]
498 lwr
$t6,1($i2) # Td2[s0>>8]
499 lwr
$t7,1($i3) # Td2[s1>>8]
513 lwl
$t8,1($i0) # Td3[s1]
514 lwl
$t9,1($i1) # Td3[s2]
515 lwl
$t10,1($i2) # Td3[s3]
516 lwl
$t11,1($i3) # Td3[s0]
517 lwr
$t8,0($i0) # Td3[s1]
518 lwr
$t9,0($i1) # Td3[s2]
519 lwr
$t10,0($i2) # Td3[s3]
520 lwr
$t11,0($i3) # Td3[s0]
541 lw
$t4,0($i0) # Td0[s0>>24]
542 lw
$t5,0($i1) # Td0[s1>>24]
543 lw
$t6,0($i2) # Td0[s2>>24]
544 lw
$t7,0($i3) # Td0[s3>>24]
572 lw
$t4,1024($Tbl) # prefetch Td4
576 lw
$t8,1024+128($Tbl)
577 lw
$t9,1024+160($Tbl)
578 lw
$t10,1024+192($Tbl)
579 lw
$t11,1024+224($Tbl)
593 lbu
$t0,1024($i0) # Td4[s3>>16]
594 lbu
$t1,1024($i1) # Td4[s0>>16]
595 lbu
$t2,1024($i2) # Td4[s1>>16]
596 lbu
$t3,1024($i3) # Td4[s2>>16]
610 lbu
$t4,1024($i0) # Td4[s2>>8]
611 lbu
$t5,1024($i1) # Td4[s3>>8]
612 lbu
$t6,1024($i2) # Td4[s0>>8]
613 lbu
$t7,1024($i3) # Td4[s1>>8]
623 lbu
$t8,1024($i0) # Td4[s0>>24]
624 lbu
$t9,1024($i1) # Td4[s1>>24]
625 lbu
$t10,1024($i2) # Td4[s2>>24]
626 lbu
$t11,1024($i3) # Td4[s3>>24]
652 lbu
$t4,1024($i0) # Td4[s1]
653 lbu
$t5,1024($i1) # Td4[s2]
654 lbu
$t6,1024($i2) # Td4[s3]
655 lbu
$t7,1024($i3) # Td4[s0]
689 .end _mips_AES_decrypt
695 .frame
$sp,$FRAMESIZE,$ra
696 .mask
$SAVED_REGS_MASK,-$SZREG
699 $code.=<<___
if ($flavour =~ /o32/i); # o32 PIC-ification
703 $PTR_SUB $sp,$FRAMESIZE
704 $REG_S $ra,$FRAMESIZE-1*$SZREG($sp)
705 $REG_S $fp,$FRAMESIZE-2*$SZREG($sp)
706 $REG_S $s11,$FRAMESIZE-3*$SZREG($sp)
707 $REG_S $s10,$FRAMESIZE-4*$SZREG($sp)
708 $REG_S $s9,$FRAMESIZE-5*$SZREG($sp)
709 $REG_S $s8,$FRAMESIZE-6*$SZREG($sp)
710 $REG_S $s7,$FRAMESIZE-7*$SZREG($sp)
711 $REG_S $s6,$FRAMESIZE-8*$SZREG($sp)
712 $REG_S $s5,$FRAMESIZE-9*$SZREG($sp)
713 $REG_S $s4,$FRAMESIZE-10*$SZREG($sp)
715 $code.=<<___
if ($flavour =~ /nubi/i); # optimize non-nubi prologue
716 $REG_S \
$15,$FRAMESIZE-11*$SZREG($sp)
717 $REG_S \
$14,$FRAMESIZE-12*$SZREG($sp)
718 $REG_S \
$13,$FRAMESIZE-13*$SZREG($sp)
719 $REG_S \
$12,$FRAMESIZE-14*$SZREG($sp)
720 $REG_S $gp,$FRAMESIZE-15*$SZREG($sp)
722 $code.=<<___
if ($flavour !~ /o32/i); # non-o32 PIC-ification
724 .cpsetup
$pf,$zero,AES_decrypt
728 la
$Tbl,AES_Td
# PIC-ified 'load address'
733 lwl
$s3,12+$MSB($inp)
737 lwr
$s3,12+$LSB($inp)
739 bal _mips_AES_decrypt
744 swr
$s3,12+$LSB($out)
748 swl
$s3,12+$MSB($out)
751 $REG_L $ra,$FRAMESIZE-1*$SZREG($sp)
752 $REG_L $fp,$FRAMESIZE-2*$SZREG($sp)
753 $REG_L $s11,$FRAMESIZE-3*$SZREG($sp)
754 $REG_L $s10,$FRAMESIZE-4*$SZREG($sp)
755 $REG_L $s9,$FRAMESIZE-5*$SZREG($sp)
756 $REG_L $s8,$FRAMESIZE-6*$SZREG($sp)
757 $REG_L $s7,$FRAMESIZE-7*$SZREG($sp)
758 $REG_L $s6,$FRAMESIZE-8*$SZREG($sp)
759 $REG_L $s5,$FRAMESIZE-9*$SZREG($sp)
760 $REG_L $s4,$FRAMESIZE-10*$SZREG($sp)
762 $code.=<<___
if ($flavour =~ /nubi/i);
763 $REG_L \
$15,$FRAMESIZE-11*$SZREG($sp)
764 $REG_L \
$14,$FRAMESIZE-12*$SZREG($sp)
765 $REG_L \
$13,$FRAMESIZE-13*$SZREG($sp)
766 $REG_L \
$12,$FRAMESIZE-14*$SZREG($sp)
767 $REG_L $gp,$FRAMESIZE-15*$SZREG($sp)
771 $PTR_ADD $sp,$FRAMESIZE
777 my $FRAMESIZE=8*$SZREG;
778 my $SAVED_REGS_MASK = ($flavour =~ /nubi/i) ?
0xc000f008 : 0xc0000000;
780 my ($inp,$bits,$key,$Tbl)=($a0,$a1,$a2,$a3);
781 my ($rk0,$rk1,$rk2,$rk3,$rk4,$rk5,$rk6,$rk7)=($a4,$a5,$a6,$a7,$s0,$s1,$s2,$s3);
782 my ($i0,$i1,$i2,$i3)=($at,$t0,$t1,$t2);
783 my ($rcon,$cnt)=($gp,$fp);
787 .ent _mips_AES_set_encrypt_key
788 _mips_AES_set_encrypt_key
:
791 beqz
$inp,.Lekey_done
793 beqz
$key,.Lekey_done
794 $PTR_ADD $rcon,$Tbl,1024+256
797 lwl
$rk0,0+$MSB($inp) # load 128 bits
798 lwl
$rk1,4+$MSB($inp)
799 lwl
$rk2,8+$MSB($inp)
800 lwl
$rk3,12+$MSB($inp)
802 lwr
$rk0,0+$LSB($inp)
803 lwr
$rk1,4+$LSB($inp)
804 lwr
$rk2,8+$LSB($inp)
805 lwr
$rk3,12+$LSB($inp)
807 beq
$bits,$at,.L128bits
811 lwl
$rk4,16+$MSB($inp) # load 192 bits
812 lwl
$rk5,20+$MSB($inp)
814 lwr
$rk4,16+$LSB($inp)
815 lwr
$rk5,20+$LSB($inp)
817 beq
$bits,$at,.L192bits
821 lwl
$rk6,24+$MSB($inp) # load 256 bits
822 lwl
$rk7,28+$MSB($inp)
824 lwr
$rk6,24+$LSB($inp)
825 lwr
$rk7,28+$LSB($inp)
827 beq
$bits,$at,.L256bits
990 beqz
$cnt,.L256bits_done
1037 .end _mips_AES_set_encrypt_key
1039 .globl private_AES_set_encrypt_key
1040 .ent private_AES_set_encrypt_key
1041 private_AES_set_encrypt_key
:
1042 .frame
$sp,$FRAMESIZE,$ra
1043 .mask
$SAVED_REGS_MASK,-$SZREG
1046 $code.=<<___
if ($flavour =~ /o32/i); # o32 PIC-ification
1050 $PTR_SUB $sp,$FRAMESIZE
1051 $REG_S $ra,$FRAMESIZE-1*$SZREG($sp)
1052 $REG_S $fp,$FRAMESIZE-2*$SZREG($sp)
1054 $code.=<<___
if ($flavour =~ /nubi/i); # optimize non-nubi prologue
1055 $REG_S $s3,$FRAMESIZE-3*$SZREG($sp)
1056 $REG_S $s2,$FRAMESIZE-4*$SZREG($sp)
1057 $REG_S $s1,$FRAMESIZE-5*$SZREG($sp)
1058 $REG_S $s0,$FRAMESIZE-6*$SZREG($sp)
1059 $REG_S $gp,$FRAMESIZE-7*$SZREG($sp)
1061 $code.=<<___
if ($flavour !~ /o32/i); # non-o32 PIC-ification
1063 .cpsetup
$pf,$zero,private_AES_set_encrypt_key
1067 la
$Tbl,AES_Te
# PIC-ified 'load address'
1069 bal _mips_AES_set_encrypt_key
1073 $REG_L $ra,$FRAMESIZE-1*$SZREG($sp)
1074 $REG_L $fp,$FRAMESIZE-2*$SZREG($sp)
1076 $code.=<<___
if ($flavour =~ /nubi/i);
1077 $REG_L $s3,$FRAMESIZE-11*$SZREG($sp)
1078 $REG_L $s2,$FRAMESIZE-12*$SZREG($sp)
1079 $REG_L $s1,$FRAMESIZE-13*$SZREG($sp)
1080 $REG_L $s0,$FRAMESIZE-14*$SZREG($sp)
1081 $REG_L $gp,$FRAMESIZE-15*$SZREG($sp)
1085 $PTR_ADD $sp,$FRAMESIZE
1086 .end private_AES_set_encrypt_key
1089 my ($head,$tail)=($inp,$bits);
1090 my ($tp1,$tp2,$tp4,$tp8,$tp9,$tpb,$tpd,$tpe)=($a4,$a5,$a6,$a7,$s0,$s1,$s2,$s3);
1091 my ($m,$x80808080,$x7f7f7f7f,$x1b1b1b1b)=($at,$t0,$t1,$t2);
1094 .globl private_AES_set_decrypt_key
1095 .ent private_AES_set_decrypt_key
1096 private_AES_set_decrypt_key
:
1097 .frame
$sp,$FRAMESIZE,$ra
1098 .mask
$SAVED_REGS_MASK,-$SZREG
1101 $code.=<<___
if ($flavour =~ /o32/i); # o32 PIC-ification
1105 $PTR_SUB $sp,$FRAMESIZE
1106 $REG_S $ra,$FRAMESIZE-1*$SZREG($sp)
1107 $REG_S $fp,$FRAMESIZE-2*$SZREG($sp)
1109 $code.=<<___
if ($flavour =~ /nubi/i); # optimize non-nubi prologue
1110 $REG_S $s3,$FRAMESIZE-3*$SZREG($sp)
1111 $REG_S $s2,$FRAMESIZE-4*$SZREG($sp)
1112 $REG_S $s1,$FRAMESIZE-5*$SZREG($sp)
1113 $REG_S $s0,$FRAMESIZE-6*$SZREG($sp)
1114 $REG_S $gp,$FRAMESIZE-7*$SZREG($sp)
1116 $code.=<<___
if ($flavour !~ /o32/i); # non-o32 PIC-ification
1118 .cpsetup
$pf,$zero,private_AES_set_decrypt_key
1122 la
$Tbl,AES_Te
# PIC-ified 'load address'
1124 bal _mips_AES_set_encrypt_key
1126 bltz
$t0,.Ldkey_done
1129 $PTR_ADD $head,$key,0
1130 $PTR_ADD $tail,$key,$at
1151 bne
$head,$tail,.Lswap
1153 lw
$tp1,16($key) # modulo-scheduled
1154 lui
$x80808080,0x8080
1156 or $x80808080,0x8080
1159 lui
$x1b1b1b1b,0x1b1b
1160 nor
$x7f7f7f7f,$zero,$x80808080
1161 or $x1b1b1b1b,0x1b1b
1164 and $m,$tp1,$x80808080
1165 and $tp2,$tp1,$x7f7f7f7f
1167 addu
$tp2,$tp2 # tp2<<1
1172 and $m,$tp2,$x80808080
1173 and $tp4,$tp2,$x7f7f7f7f
1175 addu
$tp4,$tp4 # tp4<<1
1180 and $m,$tp4,$x80808080
1181 and $tp8,$tp4,$x7f7f7f7f
1183 addu
$tp8,$tp8 # tp8<<1
1205 lw
$tp1,4($key) # modulo-scheduled
1216 $REG_L $ra,$FRAMESIZE-1*$SZREG($sp)
1217 $REG_L $fp,$FRAMESIZE-2*$SZREG($sp)
1219 $code.=<<___
if ($flavour =~ /nubi/i);
1220 $REG_L $s3,$FRAMESIZE-11*$SZREG($sp)
1221 $REG_L $s2,$FRAMESIZE-12*$SZREG($sp)
1222 $REG_L $s1,$FRAMESIZE-13*$SZREG($sp)
1223 $REG_L $s0,$FRAMESIZE-14*$SZREG($sp)
1224 $REG_L $gp,$FRAMESIZE-15*$SZREG($sp)
1228 $PTR_ADD $sp,$FRAMESIZE
1229 .end private_AES_set_decrypt_key
1233 ######################################################################
1234 # Tables are kept in endian-neutral manner
1239 .byte
0xc6,0x63,0x63,0xa5, 0xf8,0x7c,0x7c,0x84 # Te0
1240 .byte
0xee,0x77,0x77,0x99, 0xf6,0x7b,0x7b,0x8d
1241 .byte
0xff,0xf2,0xf2,0x0d, 0xd6,0x6b,0x6b,0xbd
1242 .byte
0xde,0x6f,0x6f,0xb1, 0x91,0xc5,0xc5,0x54
1243 .byte
0x60,0x30,0x30,0x50, 0x02,0x01,0x01,0x03
1244 .byte
0xce,0x67,0x67,0xa9, 0x56,0x2b,0x2b,0x7d
1245 .byte
0xe7,0xfe,0xfe,0x19, 0xb5,0xd7,0xd7,0x62
1246 .byte
0x4d,0xab,0xab,0xe6, 0xec,0x76,0x76,0x9a
1247 .byte
0x8f,0xca,0xca,0x45, 0x1f,0x82,0x82,0x9d
1248 .byte
0x89,0xc9,0xc9,0x40, 0xfa,0x7d,0x7d,0x87
1249 .byte
0xef,0xfa,0xfa,0x15, 0xb2,0x59,0x59,0xeb
1250 .byte
0x8e,0x47,0x47,0xc9, 0xfb,0xf0,0xf0,0x0b
1251 .byte
0x41,0xad,0xad,0xec, 0xb3,0xd4,0xd4,0x67
1252 .byte
0x5f,0xa2,0xa2,0xfd, 0x45,0xaf,0xaf,0xea
1253 .byte
0x23,0x9c,0x9c,0xbf, 0x53,0xa4,0xa4,0xf7
1254 .byte
0xe4,0x72,0x72,0x96, 0x9b,0xc0,0xc0,0x5b
1255 .byte
0x75,0xb7,0xb7,0xc2, 0xe1,0xfd,0xfd,0x1c
1256 .byte
0x3d,0x93,0x93,0xae, 0x4c,0x26,0x26,0x6a
1257 .byte
0x6c,0x36,0x36,0x5a, 0x7e,0x3f,0x3f,0x41
1258 .byte
0xf5,0xf7,0xf7,0x02, 0x83,0xcc,0xcc,0x4f
1259 .byte
0x68,0x34,0x34,0x5c, 0x51,0xa5,0xa5,0xf4
1260 .byte
0xd1,0xe5,0xe5,0x34, 0xf9,0xf1,0xf1,0x08
1261 .byte
0xe2,0x71,0x71,0x93, 0xab,0xd8,0xd8,0x73
1262 .byte
0x62,0x31,0x31,0x53, 0x2a,0x15,0x15,0x3f
1263 .byte
0x08,0x04,0x04,0x0c, 0x95,0xc7,0xc7,0x52
1264 .byte
0x46,0x23,0x23,0x65, 0x9d,0xc3,0xc3,0x5e
1265 .byte
0x30,0x18,0x18,0x28, 0x37,0x96,0x96,0xa1
1266 .byte
0x0a,0x05,0x05,0x0f, 0x2f,0x9a,0x9a,0xb5
1267 .byte
0x0e,0x07,0x07,0x09, 0x24,0x12,0x12,0x36
1268 .byte
0x1b,0x80,0x80,0x9b, 0xdf,0xe2,0xe2,0x3d
1269 .byte
0xcd,0xeb,0xeb,0x26, 0x4e,0x27,0x27,0x69
1270 .byte
0x7f,0xb2,0xb2,0xcd, 0xea,0x75,0x75,0x9f
1271 .byte
0x12,0x09,0x09,0x1b, 0x1d,0x83,0x83,0x9e
1272 .byte
0x58,0x2c,0x2c,0x74, 0x34,0x1a,0x1a,0x2e
1273 .byte
0x36,0x1b,0x1b,0x2d, 0xdc,0x6e,0x6e,0xb2
1274 .byte
0xb4,0x5a,0x5a,0xee, 0x5b,0xa0,0xa0,0xfb
1275 .byte
0xa4,0x52,0x52,0xf6, 0x76,0x3b,0x3b,0x4d
1276 .byte
0xb7,0xd6,0xd6,0x61, 0x7d,0xb3,0xb3,0xce
1277 .byte
0x52,0x29,0x29,0x7b, 0xdd,0xe3,0xe3,0x3e
1278 .byte
0x5e,0x2f,0x2f,0x71, 0x13,0x84,0x84,0x97
1279 .byte
0xa6,0x53,0x53,0xf5, 0xb9,0xd1,0xd1,0x68
1280 .byte
0x00,0x00,0x00,0x00, 0xc1,0xed,0xed,0x2c
1281 .byte
0x40,0x20,0x20,0x60, 0xe3,0xfc,0xfc,0x1f
1282 .byte
0x79,0xb1,0xb1,0xc8, 0xb6,0x5b,0x5b,0xed
1283 .byte
0xd4,0x6a,0x6a,0xbe, 0x8d,0xcb,0xcb,0x46
1284 .byte
0x67,0xbe,0xbe,0xd9, 0x72,0x39,0x39,0x4b
1285 .byte
0x94,0x4a,0x4a,0xde, 0x98,0x4c,0x4c,0xd4
1286 .byte
0xb0,0x58,0x58,0xe8, 0x85,0xcf,0xcf,0x4a
1287 .byte
0xbb,0xd0,0xd0,0x6b, 0xc5,0xef,0xef,0x2a
1288 .byte
0x4f,0xaa,0xaa,0xe5, 0xed,0xfb,0xfb,0x16
1289 .byte
0x86,0x43,0x43,0xc5, 0x9a,0x4d,0x4d,0xd7
1290 .byte
0x66,0x33,0x33,0x55, 0x11,0x85,0x85,0x94
1291 .byte
0x8a,0x45,0x45,0xcf, 0xe9,0xf9,0xf9,0x10
1292 .byte
0x04,0x02,0x02,0x06, 0xfe,0x7f,0x7f,0x81
1293 .byte
0xa0,0x50,0x50,0xf0, 0x78,0x3c,0x3c,0x44
1294 .byte
0x25,0x9f,0x9f,0xba, 0x4b,0xa8,0xa8,0xe3
1295 .byte
0xa2,0x51,0x51,0xf3, 0x5d,0xa3,0xa3,0xfe
1296 .byte
0x80,0x40,0x40,0xc0, 0x05,0x8f,0x8f,0x8a
1297 .byte
0x3f,0x92,0x92,0xad, 0x21,0x9d,0x9d,0xbc
1298 .byte
0x70,0x38,0x38,0x48, 0xf1,0xf5,0xf5,0x04
1299 .byte
0x63,0xbc,0xbc,0xdf, 0x77,0xb6,0xb6,0xc1
1300 .byte
0xaf,0xda,0xda,0x75, 0x42,0x21,0x21,0x63
1301 .byte
0x20,0x10,0x10,0x30, 0xe5,0xff,0xff,0x1a
1302 .byte
0xfd,0xf3,0xf3,0x0e, 0xbf,0xd2,0xd2,0x6d
1303 .byte
0x81,0xcd,0xcd,0x4c, 0x18,0x0c,0x0c,0x14
1304 .byte
0x26,0x13,0x13,0x35, 0xc3,0xec,0xec,0x2f
1305 .byte
0xbe,0x5f,0x5f,0xe1, 0x35,0x97,0x97,0xa2
1306 .byte
0x88,0x44,0x44,0xcc, 0x2e,0x17,0x17,0x39
1307 .byte
0x93,0xc4,0xc4,0x57, 0x55,0xa7,0xa7,0xf2
1308 .byte
0xfc,0x7e,0x7e,0x82, 0x7a,0x3d,0x3d,0x47
1309 .byte
0xc8,0x64,0x64,0xac, 0xba,0x5d,0x5d,0xe7
1310 .byte
0x32,0x19,0x19,0x2b, 0xe6,0x73,0x73,0x95
1311 .byte
0xc0,0x60,0x60,0xa0, 0x19,0x81,0x81,0x98
1312 .byte
0x9e,0x4f,0x4f,0xd1, 0xa3,0xdc,0xdc,0x7f
1313 .byte
0x44,0x22,0x22,0x66, 0x54,0x2a,0x2a,0x7e
1314 .byte
0x3b,0x90,0x90,0xab, 0x0b,0x88,0x88,0x83
1315 .byte
0x8c,0x46,0x46,0xca, 0xc7,0xee,0xee,0x29
1316 .byte
0x6b,0xb8,0xb8,0xd3, 0x28,0x14,0x14,0x3c
1317 .byte
0xa7,0xde,0xde,0x79, 0xbc,0x5e,0x5e,0xe2
1318 .byte
0x16,0x0b,0x0b,0x1d, 0xad,0xdb,0xdb,0x76
1319 .byte
0xdb,0xe0,0xe0,0x3b, 0x64,0x32,0x32,0x56
1320 .byte
0x74,0x3a,0x3a,0x4e, 0x14,0x0a,0x0a,0x1e
1321 .byte
0x92,0x49,0x49,0xdb, 0x0c,0x06,0x06,0x0a
1322 .byte
0x48,0x24,0x24,0x6c, 0xb8,0x5c,0x5c,0xe4
1323 .byte
0x9f,0xc2,0xc2,0x5d, 0xbd,0xd3,0xd3,0x6e
1324 .byte
0x43,0xac,0xac,0xef, 0xc4,0x62,0x62,0xa6
1325 .byte
0x39,0x91,0x91,0xa8, 0x31,0x95,0x95,0xa4
1326 .byte
0xd3,0xe4,0xe4,0x37, 0xf2,0x79,0x79,0x8b
1327 .byte
0xd5,0xe7,0xe7,0x32, 0x8b,0xc8,0xc8,0x43
1328 .byte
0x6e,0x37,0x37,0x59, 0xda,0x6d,0x6d,0xb7
1329 .byte
0x01,0x8d,0x8d,0x8c, 0xb1,0xd5,0xd5,0x64
1330 .byte
0x9c,0x4e,0x4e,0xd2, 0x49,0xa9,0xa9,0xe0
1331 .byte
0xd8,0x6c,0x6c,0xb4, 0xac,0x56,0x56,0xfa
1332 .byte
0xf3,0xf4,0xf4,0x07, 0xcf,0xea,0xea,0x25
1333 .byte
0xca,0x65,0x65,0xaf, 0xf4,0x7a,0x7a,0x8e
1334 .byte
0x47,0xae,0xae,0xe9, 0x10,0x08,0x08,0x18
1335 .byte
0x6f,0xba,0xba,0xd5, 0xf0,0x78,0x78,0x88
1336 .byte
0x4a,0x25,0x25,0x6f, 0x5c,0x2e,0x2e,0x72
1337 .byte
0x38,0x1c,0x1c,0x24, 0x57,0xa6,0xa6,0xf1
1338 .byte
0x73,0xb4,0xb4,0xc7, 0x97,0xc6,0xc6,0x51
1339 .byte
0xcb,0xe8,0xe8,0x23, 0xa1,0xdd,0xdd,0x7c
1340 .byte
0xe8,0x74,0x74,0x9c, 0x3e,0x1f,0x1f,0x21
1341 .byte
0x96,0x4b,0x4b,0xdd, 0x61,0xbd,0xbd,0xdc
1342 .byte
0x0d,0x8b,0x8b,0x86, 0x0f,0x8a,0x8a,0x85
1343 .byte
0xe0,0x70,0x70,0x90, 0x7c,0x3e,0x3e,0x42
1344 .byte
0x71,0xb5,0xb5,0xc4, 0xcc,0x66,0x66,0xaa
1345 .byte
0x90,0x48,0x48,0xd8, 0x06,0x03,0x03,0x05
1346 .byte
0xf7,0xf6,0xf6,0x01, 0x1c,0x0e,0x0e,0x12
1347 .byte
0xc2,0x61,0x61,0xa3, 0x6a,0x35,0x35,0x5f
1348 .byte
0xae,0x57,0x57,0xf9, 0x69,0xb9,0xb9,0xd0
1349 .byte
0x17,0x86,0x86,0x91, 0x99,0xc1,0xc1,0x58
1350 .byte
0x3a,0x1d,0x1d,0x27, 0x27,0x9e,0x9e,0xb9
1351 .byte
0xd9,0xe1,0xe1,0x38, 0xeb,0xf8,0xf8,0x13
1352 .byte
0x2b,0x98,0x98,0xb3, 0x22,0x11,0x11,0x33
1353 .byte
0xd2,0x69,0x69,0xbb, 0xa9,0xd9,0xd9,0x70
1354 .byte
0x07,0x8e,0x8e,0x89, 0x33,0x94,0x94,0xa7
1355 .byte
0x2d,0x9b,0x9b,0xb6, 0x3c,0x1e,0x1e,0x22
1356 .byte
0x15,0x87,0x87,0x92, 0xc9,0xe9,0xe9,0x20
1357 .byte
0x87,0xce,0xce,0x49, 0xaa,0x55,0x55,0xff
1358 .byte
0x50,0x28,0x28,0x78, 0xa5,0xdf,0xdf,0x7a
1359 .byte
0x03,0x8c,0x8c,0x8f, 0x59,0xa1,0xa1,0xf8
1360 .byte
0x09,0x89,0x89,0x80, 0x1a,0x0d,0x0d,0x17
1361 .byte
0x65,0xbf,0xbf,0xda, 0xd7,0xe6,0xe6,0x31
1362 .byte
0x84,0x42,0x42,0xc6, 0xd0,0x68,0x68,0xb8
1363 .byte
0x82,0x41,0x41,0xc3, 0x29,0x99,0x99,0xb0
1364 .byte
0x5a,0x2d,0x2d,0x77, 0x1e,0x0f,0x0f,0x11
1365 .byte
0x7b,0xb0,0xb0,0xcb, 0xa8,0x54,0x54,0xfc
1366 .byte
0x6d,0xbb,0xbb,0xd6, 0x2c,0x16,0x16,0x3a
1368 .byte
0x63, 0x7c, 0x77, 0x7b, 0xf2, 0x6b, 0x6f, 0xc5 # Te4
1369 .byte
0x30, 0x01, 0x67, 0x2b, 0xfe, 0xd7, 0xab, 0x76
1370 .byte
0xca, 0x82, 0xc9, 0x7d, 0xfa, 0x59, 0x47, 0xf0
1371 .byte
0xad, 0xd4, 0xa2, 0xaf, 0x9c, 0xa4, 0x72, 0xc0
1372 .byte
0xb7, 0xfd, 0x93, 0x26, 0x36, 0x3f, 0xf7, 0xcc
1373 .byte
0x34, 0xa5, 0xe5, 0xf1, 0x71, 0xd8, 0x31, 0x15
1374 .byte
0x04, 0xc7, 0x23, 0xc3, 0x18, 0x96, 0x05, 0x9a
1375 .byte
0x07, 0x12, 0x80, 0xe2, 0xeb, 0x27, 0xb2, 0x75
1376 .byte
0x09, 0x83, 0x2c, 0x1a, 0x1b, 0x6e, 0x5a, 0xa0
1377 .byte
0x52, 0x3b, 0xd6, 0xb3, 0x29, 0xe3, 0x2f, 0x84
1378 .byte
0x53, 0xd1, 0x00, 0xed, 0x20, 0xfc, 0xb1, 0x5b
1379 .byte
0x6a, 0xcb, 0xbe, 0x39, 0x4a, 0x4c, 0x58, 0xcf
1380 .byte
0xd0, 0xef, 0xaa, 0xfb, 0x43, 0x4d, 0x33, 0x85
1381 .byte
0x45, 0xf9, 0x02, 0x7f, 0x50, 0x3c, 0x9f, 0xa8
1382 .byte
0x51, 0xa3, 0x40, 0x8f, 0x92, 0x9d, 0x38, 0xf5
1383 .byte
0xbc, 0xb6, 0xda, 0x21, 0x10, 0xff, 0xf3, 0xd2
1384 .byte
0xcd, 0x0c, 0x13, 0xec, 0x5f, 0x97, 0x44, 0x17
1385 .byte
0xc4, 0xa7, 0x7e, 0x3d, 0x64, 0x5d, 0x19, 0x73
1386 .byte
0x60, 0x81, 0x4f, 0xdc, 0x22, 0x2a, 0x90, 0x88
1387 .byte
0x46, 0xee, 0xb8, 0x14, 0xde, 0x5e, 0x0b, 0xdb
1388 .byte
0xe0, 0x32, 0x3a, 0x0a, 0x49, 0x06, 0x24, 0x5c
1389 .byte
0xc2, 0xd3, 0xac, 0x62, 0x91, 0x95, 0xe4, 0x79
1390 .byte
0xe7, 0xc8, 0x37, 0x6d, 0x8d, 0xd5, 0x4e, 0xa9
1391 .byte
0x6c, 0x56, 0xf4, 0xea, 0x65, 0x7a, 0xae, 0x08
1392 .byte
0xba, 0x78, 0x25, 0x2e, 0x1c, 0xa6, 0xb4, 0xc6
1393 .byte
0xe8, 0xdd, 0x74, 0x1f, 0x4b, 0xbd, 0x8b, 0x8a
1394 .byte
0x70, 0x3e, 0xb5, 0x66, 0x48, 0x03, 0xf6, 0x0e
1395 .byte
0x61, 0x35, 0x57, 0xb9, 0x86, 0xc1, 0x1d, 0x9e
1396 .byte
0xe1, 0xf8, 0x98, 0x11, 0x69, 0xd9, 0x8e, 0x94
1397 .byte
0x9b, 0x1e, 0x87, 0xe9, 0xce, 0x55, 0x28, 0xdf
1398 .byte
0x8c, 0xa1, 0x89, 0x0d, 0xbf, 0xe6, 0x42, 0x68
1399 .byte
0x41, 0x99, 0x2d, 0x0f, 0xb0, 0x54, 0xbb, 0x16
1401 .byte
0x01,0x00,0x00,0x00, 0x02,0x00,0x00,0x00 # rcon
1402 .byte
0x04,0x00,0x00,0x00, 0x08,0x00,0x00,0x00
1403 .byte
0x10,0x00,0x00,0x00, 0x20,0x00,0x00,0x00
1404 .byte
0x40,0x00,0x00,0x00, 0x80,0x00,0x00,0x00
1405 .byte
0x1B,0x00,0x00,0x00, 0x36,0x00,0x00,0x00
1409 .byte
0x51,0xf4,0xa7,0x50, 0x7e,0x41,0x65,0x53 # Td0
1410 .byte
0x1a,0x17,0xa4,0xc3, 0x3a,0x27,0x5e,0x96
1411 .byte
0x3b,0xab,0x6b,0xcb, 0x1f,0x9d,0x45,0xf1
1412 .byte
0xac,0xfa,0x58,0xab, 0x4b,0xe3,0x03,0x93
1413 .byte
0x20,0x30,0xfa,0x55, 0xad,0x76,0x6d,0xf6
1414 .byte
0x88,0xcc,0x76,0x91, 0xf5,0x02,0x4c,0x25
1415 .byte
0x4f,0xe5,0xd7,0xfc, 0xc5,0x2a,0xcb,0xd7
1416 .byte
0x26,0x35,0x44,0x80, 0xb5,0x62,0xa3,0x8f
1417 .byte
0xde,0xb1,0x5a,0x49, 0x25,0xba,0x1b,0x67
1418 .byte
0x45,0xea,0x0e,0x98, 0x5d,0xfe,0xc0,0xe1
1419 .byte
0xc3,0x2f,0x75,0x02, 0x81,0x4c,0xf0,0x12
1420 .byte
0x8d,0x46,0x97,0xa3, 0x6b,0xd3,0xf9,0xc6
1421 .byte
0x03,0x8f,0x5f,0xe7, 0x15,0x92,0x9c,0x95
1422 .byte
0xbf,0x6d,0x7a,0xeb, 0x95,0x52,0x59,0xda
1423 .byte
0xd4,0xbe,0x83,0x2d, 0x58,0x74,0x21,0xd3
1424 .byte
0x49,0xe0,0x69,0x29, 0x8e,0xc9,0xc8,0x44
1425 .byte
0x75,0xc2,0x89,0x6a, 0xf4,0x8e,0x79,0x78
1426 .byte
0x99,0x58,0x3e,0x6b, 0x27,0xb9,0x71,0xdd
1427 .byte
0xbe,0xe1,0x4f,0xb6, 0xf0,0x88,0xad,0x17
1428 .byte
0xc9,0x20,0xac,0x66, 0x7d,0xce,0x3a,0xb4
1429 .byte
0x63,0xdf,0x4a,0x18, 0xe5,0x1a,0x31,0x82
1430 .byte
0x97,0x51,0x33,0x60, 0x62,0x53,0x7f,0x45
1431 .byte
0xb1,0x64,0x77,0xe0, 0xbb,0x6b,0xae,0x84
1432 .byte
0xfe,0x81,0xa0,0x1c, 0xf9,0x08,0x2b,0x94
1433 .byte
0x70,0x48,0x68,0x58, 0x8f,0x45,0xfd,0x19
1434 .byte
0x94,0xde,0x6c,0x87, 0x52,0x7b,0xf8,0xb7
1435 .byte
0xab,0x73,0xd3,0x23, 0x72,0x4b,0x02,0xe2
1436 .byte
0xe3,0x1f,0x8f,0x57, 0x66,0x55,0xab,0x2a
1437 .byte
0xb2,0xeb,0x28,0x07, 0x2f,0xb5,0xc2,0x03
1438 .byte
0x86,0xc5,0x7b,0x9a, 0xd3,0x37,0x08,0xa5
1439 .byte
0x30,0x28,0x87,0xf2, 0x23,0xbf,0xa5,0xb2
1440 .byte
0x02,0x03,0x6a,0xba, 0xed,0x16,0x82,0x5c
1441 .byte
0x8a,0xcf,0x1c,0x2b, 0xa7,0x79,0xb4,0x92
1442 .byte
0xf3,0x07,0xf2,0xf0, 0x4e,0x69,0xe2,0xa1
1443 .byte
0x65,0xda,0xf4,0xcd, 0x06,0x05,0xbe,0xd5
1444 .byte
0xd1,0x34,0x62,0x1f, 0xc4,0xa6,0xfe,0x8a
1445 .byte
0x34,0x2e,0x53,0x9d, 0xa2,0xf3,0x55,0xa0
1446 .byte
0x05,0x8a,0xe1,0x32, 0xa4,0xf6,0xeb,0x75
1447 .byte
0x0b,0x83,0xec,0x39, 0x40,0x60,0xef,0xaa
1448 .byte
0x5e,0x71,0x9f,0x06, 0xbd,0x6e,0x10,0x51
1449 .byte
0x3e,0x21,0x8a,0xf9, 0x96,0xdd,0x06,0x3d
1450 .byte
0xdd,0x3e,0x05,0xae, 0x4d,0xe6,0xbd,0x46
1451 .byte
0x91,0x54,0x8d,0xb5, 0x71,0xc4,0x5d,0x05
1452 .byte
0x04,0x06,0xd4,0x6f, 0x60,0x50,0x15,0xff
1453 .byte
0x19,0x98,0xfb,0x24, 0xd6,0xbd,0xe9,0x97
1454 .byte
0x89,0x40,0x43,0xcc, 0x67,0xd9,0x9e,0x77
1455 .byte
0xb0,0xe8,0x42,0xbd, 0x07,0x89,0x8b,0x88
1456 .byte
0xe7,0x19,0x5b,0x38, 0x79,0xc8,0xee,0xdb
1457 .byte
0xa1,0x7c,0x0a,0x47, 0x7c,0x42,0x0f,0xe9
1458 .byte
0xf8,0x84,0x1e,0xc9, 0x00,0x00,0x00,0x00
1459 .byte
0x09,0x80,0x86,0x83, 0x32,0x2b,0xed,0x48
1460 .byte
0x1e,0x11,0x70,0xac, 0x6c,0x5a,0x72,0x4e
1461 .byte
0xfd,0x0e,0xff,0xfb, 0x0f,0x85,0x38,0x56
1462 .byte
0x3d,0xae,0xd5,0x1e, 0x36,0x2d,0x39,0x27
1463 .byte
0x0a,0x0f,0xd9,0x64, 0x68,0x5c,0xa6,0x21
1464 .byte
0x9b,0x5b,0x54,0xd1, 0x24,0x36,0x2e,0x3a
1465 .byte
0x0c,0x0a,0x67,0xb1, 0x93,0x57,0xe7,0x0f
1466 .byte
0xb4,0xee,0x96,0xd2, 0x1b,0x9b,0x91,0x9e
1467 .byte
0x80,0xc0,0xc5,0x4f, 0x61,0xdc,0x20,0xa2
1468 .byte
0x5a,0x77,0x4b,0x69, 0x1c,0x12,0x1a,0x16
1469 .byte
0xe2,0x93,0xba,0x0a, 0xc0,0xa0,0x2a,0xe5
1470 .byte
0x3c,0x22,0xe0,0x43, 0x12,0x1b,0x17,0x1d
1471 .byte
0x0e,0x09,0x0d,0x0b, 0xf2,0x8b,0xc7,0xad
1472 .byte
0x2d,0xb6,0xa8,0xb9, 0x14,0x1e,0xa9,0xc8
1473 .byte
0x57,0xf1,0x19,0x85, 0xaf,0x75,0x07,0x4c
1474 .byte
0xee,0x99,0xdd,0xbb, 0xa3,0x7f,0x60,0xfd
1475 .byte
0xf7,0x01,0x26,0x9f, 0x5c,0x72,0xf5,0xbc
1476 .byte
0x44,0x66,0x3b,0xc5, 0x5b,0xfb,0x7e,0x34
1477 .byte
0x8b,0x43,0x29,0x76, 0xcb,0x23,0xc6,0xdc
1478 .byte
0xb6,0xed,0xfc,0x68, 0xb8,0xe4,0xf1,0x63
1479 .byte
0xd7,0x31,0xdc,0xca, 0x42,0x63,0x85,0x10
1480 .byte
0x13,0x97,0x22,0x40, 0x84,0xc6,0x11,0x20
1481 .byte
0x85,0x4a,0x24,0x7d, 0xd2,0xbb,0x3d,0xf8
1482 .byte
0xae,0xf9,0x32,0x11, 0xc7,0x29,0xa1,0x6d
1483 .byte
0x1d,0x9e,0x2f,0x4b, 0xdc,0xb2,0x30,0xf3
1484 .byte
0x0d,0x86,0x52,0xec, 0x77,0xc1,0xe3,0xd0
1485 .byte
0x2b,0xb3,0x16,0x6c, 0xa9,0x70,0xb9,0x99
1486 .byte
0x11,0x94,0x48,0xfa, 0x47,0xe9,0x64,0x22
1487 .byte
0xa8,0xfc,0x8c,0xc4, 0xa0,0xf0,0x3f,0x1a
1488 .byte
0x56,0x7d,0x2c,0xd8, 0x22,0x33,0x90,0xef
1489 .byte
0x87,0x49,0x4e,0xc7, 0xd9,0x38,0xd1,0xc1
1490 .byte
0x8c,0xca,0xa2,0xfe, 0x98,0xd4,0x0b,0x36
1491 .byte
0xa6,0xf5,0x81,0xcf, 0xa5,0x7a,0xde,0x28
1492 .byte
0xda,0xb7,0x8e,0x26, 0x3f,0xad,0xbf,0xa4
1493 .byte
0x2c,0x3a,0x9d,0xe4, 0x50,0x78,0x92,0x0d
1494 .byte
0x6a,0x5f,0xcc,0x9b, 0x54,0x7e,0x46,0x62
1495 .byte
0xf6,0x8d,0x13,0xc2, 0x90,0xd8,0xb8,0xe8
1496 .byte
0x2e,0x39,0xf7,0x5e, 0x82,0xc3,0xaf,0xf5
1497 .byte
0x9f,0x5d,0x80,0xbe, 0x69,0xd0,0x93,0x7c
1498 .byte
0x6f,0xd5,0x2d,0xa9, 0xcf,0x25,0x12,0xb3
1499 .byte
0xc8,0xac,0x99,0x3b, 0x10,0x18,0x7d,0xa7
1500 .byte
0xe8,0x9c,0x63,0x6e, 0xdb,0x3b,0xbb,0x7b
1501 .byte
0xcd,0x26,0x78,0x09, 0x6e,0x59,0x18,0xf4
1502 .byte
0xec,0x9a,0xb7,0x01, 0x83,0x4f,0x9a,0xa8
1503 .byte
0xe6,0x95,0x6e,0x65, 0xaa,0xff,0xe6,0x7e
1504 .byte
0x21,0xbc,0xcf,0x08, 0xef,0x15,0xe8,0xe6
1505 .byte
0xba,0xe7,0x9b,0xd9, 0x4a,0x6f,0x36,0xce
1506 .byte
0xea,0x9f,0x09,0xd4, 0x29,0xb0,0x7c,0xd6
1507 .byte
0x31,0xa4,0xb2,0xaf, 0x2a,0x3f,0x23,0x31
1508 .byte
0xc6,0xa5,0x94,0x30, 0x35,0xa2,0x66,0xc0
1509 .byte
0x74,0x4e,0xbc,0x37, 0xfc,0x82,0xca,0xa6
1510 .byte
0xe0,0x90,0xd0,0xb0, 0x33,0xa7,0xd8,0x15
1511 .byte
0xf1,0x04,0x98,0x4a, 0x41,0xec,0xda,0xf7
1512 .byte
0x7f,0xcd,0x50,0x0e, 0x17,0x91,0xf6,0x2f
1513 .byte
0x76,0x4d,0xd6,0x8d, 0x43,0xef,0xb0,0x4d
1514 .byte
0xcc,0xaa,0x4d,0x54, 0xe4,0x96,0x04,0xdf
1515 .byte
0x9e,0xd1,0xb5,0xe3, 0x4c,0x6a,0x88,0x1b
1516 .byte
0xc1,0x2c,0x1f,0xb8, 0x46,0x65,0x51,0x7f
1517 .byte
0x9d,0x5e,0xea,0x04, 0x01,0x8c,0x35,0x5d
1518 .byte
0xfa,0x87,0x74,0x73, 0xfb,0x0b,0x41,0x2e
1519 .byte
0xb3,0x67,0x1d,0x5a, 0x92,0xdb,0xd2,0x52
1520 .byte
0xe9,0x10,0x56,0x33, 0x6d,0xd6,0x47,0x13
1521 .byte
0x9a,0xd7,0x61,0x8c, 0x37,0xa1,0x0c,0x7a
1522 .byte
0x59,0xf8,0x14,0x8e, 0xeb,0x13,0x3c,0x89
1523 .byte
0xce,0xa9,0x27,0xee, 0xb7,0x61,0xc9,0x35
1524 .byte
0xe1,0x1c,0xe5,0xed, 0x7a,0x47,0xb1,0x3c
1525 .byte
0x9c,0xd2,0xdf,0x59, 0x55,0xf2,0x73,0x3f
1526 .byte
0x18,0x14,0xce,0x79, 0x73,0xc7,0x37,0xbf
1527 .byte
0x53,0xf7,0xcd,0xea, 0x5f,0xfd,0xaa,0x5b
1528 .byte
0xdf,0x3d,0x6f,0x14, 0x78,0x44,0xdb,0x86
1529 .byte
0xca,0xaf,0xf3,0x81, 0xb9,0x68,0xc4,0x3e
1530 .byte
0x38,0x24,0x34,0x2c, 0xc2,0xa3,0x40,0x5f
1531 .byte
0x16,0x1d,0xc3,0x72, 0xbc,0xe2,0x25,0x0c
1532 .byte
0x28,0x3c,0x49,0x8b, 0xff,0x0d,0x95,0x41
1533 .byte
0x39,0xa8,0x01,0x71, 0x08,0x0c,0xb3,0xde
1534 .byte
0xd8,0xb4,0xe4,0x9c, 0x64,0x56,0xc1,0x90
1535 .byte
0x7b,0xcb,0x84,0x61, 0xd5,0x32,0xb6,0x70
1536 .byte
0x48,0x6c,0x5c,0x74, 0xd0,0xb8,0x57,0x42
1538 .byte
0x52, 0x09, 0x6a, 0xd5, 0x30, 0x36, 0xa5, 0x38 # Td4
1539 .byte
0xbf, 0x40, 0xa3, 0x9e, 0x81, 0xf3, 0xd7, 0xfb
1540 .byte
0x7c, 0xe3, 0x39, 0x82, 0x9b, 0x2f, 0xff, 0x87
1541 .byte
0x34, 0x8e, 0x43, 0x44, 0xc4, 0xde, 0xe9, 0xcb
1542 .byte
0x54, 0x7b, 0x94, 0x32, 0xa6, 0xc2, 0x23, 0x3d
1543 .byte
0xee, 0x4c, 0x95, 0x0b, 0x42, 0xfa, 0xc3, 0x4e
1544 .byte
0x08, 0x2e, 0xa1, 0x66, 0x28, 0xd9, 0x24, 0xb2
1545 .byte
0x76, 0x5b, 0xa2, 0x49, 0x6d, 0x8b, 0xd1, 0x25
1546 .byte
0x72, 0xf8, 0xf6, 0x64, 0x86, 0x68, 0x98, 0x16
1547 .byte
0xd4, 0xa4, 0x5c, 0xcc, 0x5d, 0x65, 0xb6, 0x92
1548 .byte
0x6c, 0x70, 0x48, 0x50, 0xfd, 0xed, 0xb9, 0xda
1549 .byte
0x5e, 0x15, 0x46, 0x57, 0xa7, 0x8d, 0x9d, 0x84
1550 .byte
0x90, 0xd8, 0xab, 0x00, 0x8c, 0xbc, 0xd3, 0x0a
1551 .byte
0xf7, 0xe4, 0x58, 0x05, 0xb8, 0xb3, 0x45, 0x06
1552 .byte
0xd0, 0x2c, 0x1e, 0x8f, 0xca, 0x3f, 0x0f, 0x02
1553 .byte
0xc1, 0xaf, 0xbd, 0x03, 0x01, 0x13, 0x8a, 0x6b
1554 .byte
0x3a, 0x91, 0x11, 0x41, 0x4f, 0x67, 0xdc, 0xea
1555 .byte
0x97, 0xf2, 0xcf, 0xce, 0xf0, 0xb4, 0xe6, 0x73
1556 .byte
0x96, 0xac, 0x74, 0x22, 0xe7, 0xad, 0x35, 0x85
1557 .byte
0xe2, 0xf9, 0x37, 0xe8, 0x1c, 0x75, 0xdf, 0x6e
1558 .byte
0x47, 0xf1, 0x1a, 0x71, 0x1d, 0x29, 0xc5, 0x89
1559 .byte
0x6f, 0xb7, 0x62, 0x0e, 0xaa, 0x18, 0xbe, 0x1b
1560 .byte
0xfc, 0x56, 0x3e, 0x4b, 0xc6, 0xd2, 0x79, 0x20
1561 .byte
0x9a, 0xdb, 0xc0, 0xfe, 0x78, 0xcd, 0x5a, 0xf4
1562 .byte
0x1f, 0xdd, 0xa8, 0x33, 0x88, 0x07, 0xc7, 0x31
1563 .byte
0xb1, 0x12, 0x10, 0x59, 0x27, 0x80, 0xec, 0x5f
1564 .byte
0x60, 0x51, 0x7f, 0xa9, 0x19, 0xb5, 0x4a, 0x0d
1565 .byte
0x2d, 0xe5, 0x7a, 0x9f, 0x93, 0xc9, 0x9c, 0xef
1566 .byte
0xa0, 0xe0, 0x3b, 0x4d, 0xae, 0x2a, 0xf5, 0xb0
1567 .byte
0xc8, 0xeb, 0xbb, 0x3c, 0x83, 0x53, 0x99, 0x61
1568 .byte
0x17, 0x2b, 0x04, 0x7e, 0xba, 0x77, 0xd6, 0x26
1569 .byte
0xe1, 0x69, 0x14, 0x63, 0x55, 0x21, 0x0c, 0x7d
1572 foreach (split("\n",$code)) {
1573 s/\`([^\`]*)\`/eval $1/ge;
1575 # made-up _instructions, _xtr, _ins, _ror and _bias, cope
1576 # with byte order dependencies...
1578 s/(_[a-z]+\s+)(\$[0-9]+),([^,]+)(#.*)*$/$1$2,$2,$3/;
1580 s
/_xtr\s+(\$[0-9]+),(\$[0-9]+),([0-9]+(\-2)*)/
1581 sprintf("srl\t$1,$2,%d",$big_endian ?
eval($3)
1582 : eval("24-$3"))/e
or
1583 s
/_ins\s+(\$[0-9]+),(\$[0-9]+),([0-9]+)/
1584 sprintf("sll\t$1,$2,%d",$big_endian ?
eval($3)
1585 : eval("24-$3"))/e
or
1586 s
/_ror\s+(\$[0-9]+),(\$[0-9]+),(\-?[0-9]+)/
1587 sprintf("srl\t$1,$2,%d",$big_endian ?
eval($3)
1588 : eval("$3*-1"))/e
or
1589 s
/_bias\s+(\$[0-9]+),(\$[0-9]+),([0-9]+)/
1590 sprintf("sll\t$1,$2,%d",$big_endian ?
eval($3)
1591 : eval("($3-16)&31"))/e
;
1593 s
/srl\s+(\$[0-9]+),(\$[0-9]+),\-([0-9]+)/
1594 sprintf("sll\t$1,$2,$3")/e
or
1595 s
/srl\s+(\$[0-9]+),(\$[0-9]+),0/
1596 sprintf("and\t$1,$2,0xff")/e
or
1597 s/(sll\s+\$[0-9]+,\$[0-9]+,0)/#$1/;
1600 # convert lwl/lwr and swr/swl to little-endian order
1601 if (!$big_endian && /^\s+[sl]w[lr]\s+/) {
1602 s
/([sl]wl.*)([0-9]+)\((\$[0-9]+)\)/
1603 sprintf("$1%d($3)",eval("$2-$2%4+($2%4-1)&3"))/e
or
1604 s
/([sl]wr.*)([0-9]+)\((\$[0-9]+)\)/
1605 sprintf("$1%d($3)",eval("$2-$2%4+($2%4+1)&3"))/e
;