1238384Sjkim#!/usr/bin/env perl 2238384Sjkim 3238384Sjkim# ==================================================================== 4238384Sjkim# Written by Andy Polyakov <appro@openssl.org> for the OpenSSL 5238384Sjkim# project. The module is, however, dual licensed under OpenSSL and 6238384Sjkim# CRYPTOGAMS licenses depending on where you obtain it. For further 7238384Sjkim# details see http://www.openssl.org/~appro/cryptogams/. 8238384Sjkim# ==================================================================== 9238384Sjkim 10238384Sjkim# AES for MIPS 11238384Sjkim 12238384Sjkim# October 2010 13238384Sjkim# 14238384Sjkim# Code uses 1K[+256B] S-box and on single-issue core [such as R5000] 15238384Sjkim# spends ~68 cycles per byte processed with 128-bit key. This is ~16% 16238384Sjkim# faster than gcc-generated code, which is not very impressive. But 17238384Sjkim# recall that compressed S-box requires extra processing, namely 18238384Sjkim# additional rotations. Rotations are implemented with lwl/lwr pairs, 19238384Sjkim# which is normally used for loading unaligned data. Another cool 20238384Sjkim# thing about this module is its endian neutrality, which means that 21238384Sjkim# it processes data without ever changing byte order... 22238384Sjkim 23238384Sjkim###################################################################### 24238384Sjkim# There is a number of MIPS ABI in use, O32 and N32/64 are most 25238384Sjkim# widely used. Then there is a new contender: NUBI. It appears that if 26238384Sjkim# one picks the latter, it's possible to arrange code in ABI neutral 27238384Sjkim# manner. Therefore let's stick to NUBI register layout: 28238384Sjkim# 29238384Sjkim($zero,$at,$t0,$t1,$t2)=map("\$$_",(0..2,24,25)); 30238384Sjkim($a0,$a1,$a2,$a3,$a4,$a5,$a6,$a7)=map("\$$_",(4..11)); 31238384Sjkim($s0,$s1,$s2,$s3,$s4,$s5,$s6,$s7,$s8,$s9,$s10,$s11)=map("\$$_",(12..23)); 32238384Sjkim($gp,$tp,$sp,$fp,$ra)=map("\$$_",(3,28..31)); 33238384Sjkim# 34238384Sjkim# The return value is placed in $a0. Following coding rules facilitate 35238384Sjkim# interoperability: 36238384Sjkim# 37238384Sjkim# - never ever touch $tp, "thread pointer", former $gp; 38238384Sjkim# - copy return value to $t0, former $v0 [or to $a0 if you're adapting 39238384Sjkim# old code]; 40238384Sjkim# - on O32 populate $a4-$a7 with 'lw $aN,4*N($sp)' if necessary; 41238384Sjkim# 42238384Sjkim# For reference here is register layout for N32/64 MIPS ABIs: 43238384Sjkim# 44238384Sjkim# ($zero,$at,$v0,$v1)=map("\$$_",(0..3)); 45238384Sjkim# ($a0,$a1,$a2,$a3,$a4,$a5,$a6,$a7)=map("\$$_",(4..11)); 46238384Sjkim# ($t0,$t1,$t2,$t3,$t8,$t9)=map("\$$_",(12..15,24,25)); 47238384Sjkim# ($s0,$s1,$s2,$s3,$s4,$s5,$s6,$s7)=map("\$$_",(16..23)); 48238384Sjkim# ($gp,$sp,$fp,$ra)=map("\$$_",(28..31)); 49238384Sjkim# 50238384Sjkim$flavour = shift; # supported flavours are o32,n32,64,nubi32,nubi64 51238384Sjkim 52238384Sjkimif ($flavour =~ /64|n32/i) { 53238384Sjkim $PTR_ADD="dadd"; # incidentally works even on n32 54238384Sjkim $PTR_SUB="dsub"; # incidentally works even on n32 55238384Sjkim $REG_S="sd"; 56238384Sjkim $REG_L="ld"; 57238384Sjkim $PTR_SLL="dsll"; # incidentally works even on n32 58238384Sjkim $SZREG=8; 59238384Sjkim} else { 60238384Sjkim $PTR_ADD="add"; 61238384Sjkim $PTR_SUB="sub"; 62238384Sjkim $REG_S="sw"; 63238384Sjkim $REG_L="lw"; 64238384Sjkim $PTR_SLL="sll"; 65238384Sjkim $SZREG=4; 66238384Sjkim} 67238384Sjkim$pf = ($flavour =~ /nubi/i) ? $t0 : $t2; 68238384Sjkim# 69238384Sjkim# <appro@openssl.org> 70238384Sjkim# 71238384Sjkim###################################################################### 72238384Sjkim 73276864Sjkim$big_endian=(`echo MIPSEL | $ENV{CC} -E -`=~/MIPSEL/)?1:0 if ($ENV{CC}); 74238384Sjkim 75238384Sjkimfor (@ARGV) { $output=$_ if (/^\w[\w\-]*\.\w+$/); } 76238384Sjkimopen STDOUT,">$output"; 77238384Sjkim 78238384Sjkimif (!defined($big_endian)) 79238384Sjkim{ $big_endian=(unpack('L',pack('N',1))==1); } 80238384Sjkim 81238384Sjkimwhile (($output=shift) && ($output!~/^\w[\w\-]*\.\w+$/)) {} 82238384Sjkimopen STDOUT,">$output"; 83238384Sjkim 84238384Sjkimmy ($MSB,$LSB)=(0,3); # automatically converted to little-endian 85238384Sjkim 86238384Sjkim$code.=<<___; 87238384Sjkim.text 88238384Sjkim#ifdef OPENSSL_FIPSCANISTER 89238384Sjkim# include <openssl/fipssyms.h> 90238384Sjkim#endif 91238384Sjkim 92238384Sjkim#if !defined(__vxworks) || defined(__pic__) 93238384Sjkim.option pic2 94238384Sjkim#endif 95238384Sjkim.set noat 96238384Sjkim___ 97238384Sjkim 98238384Sjkim{{{ 99238384Sjkimmy $FRAMESIZE=16*$SZREG; 100238384Sjkimmy $SAVED_REGS_MASK = ($flavour =~ /nubi/i) ? 0xc0fff008 : 0xc0ff0000; 101238384Sjkim 102238384Sjkimmy ($inp,$out,$key,$Tbl,$s0,$s1,$s2,$s3)=($a0,$a1,$a2,$a3,$a4,$a5,$a6,$a7); 103238384Sjkimmy ($i0,$i1,$i2,$i3)=($at,$t0,$t1,$t2); 104238384Sjkimmy ($t0,$t1,$t2,$t3,$t4,$t5,$t6,$t7,$t8,$t9,$t10,$t11) = map("\$$_",(12..23)); 105238384Sjkimmy ($key0,$cnt)=($gp,$fp); 106238384Sjkim 107238384Sjkim# instuction ordering is "stolen" from output from MIPSpro assembler 108238384Sjkim# invoked with -mips3 -O3 arguments... 109238384Sjkim$code.=<<___; 110238384Sjkim.align 5 111238384Sjkim.ent _mips_AES_encrypt 112238384Sjkim_mips_AES_encrypt: 113238384Sjkim .frame $sp,0,$ra 114238384Sjkim .set reorder 115238384Sjkim lw $t0,0($key) 116238384Sjkim lw $t1,4($key) 117238384Sjkim lw $t2,8($key) 118238384Sjkim lw $t3,12($key) 119238384Sjkim lw $cnt,240($key) 120238384Sjkim $PTR_ADD $key0,$key,16 121238384Sjkim 122238384Sjkim xor $s0,$t0 123238384Sjkim xor $s1,$t1 124238384Sjkim xor $s2,$t2 125238384Sjkim xor $s3,$t3 126238384Sjkim 127238384Sjkim sub $cnt,1 128238384Sjkim _xtr $i0,$s1,16-2 129238384Sjkim.Loop_enc: 130238384Sjkim _xtr $i1,$s2,16-2 131238384Sjkim _xtr $i2,$s3,16-2 132238384Sjkim _xtr $i3,$s0,16-2 133238384Sjkim and $i0,0x3fc 134238384Sjkim and $i1,0x3fc 135238384Sjkim and $i2,0x3fc 136238384Sjkim and $i3,0x3fc 137238384Sjkim $PTR_ADD $i0,$Tbl 138238384Sjkim $PTR_ADD $i1,$Tbl 139238384Sjkim $PTR_ADD $i2,$Tbl 140238384Sjkim $PTR_ADD $i3,$Tbl 141238384Sjkim lwl $t0,3($i0) # Te1[s1>>16] 142238384Sjkim lwl $t1,3($i1) # Te1[s2>>16] 143238384Sjkim lwl $t2,3($i2) # Te1[s3>>16] 144238384Sjkim lwl $t3,3($i3) # Te1[s0>>16] 145238384Sjkim lwr $t0,2($i0) # Te1[s1>>16] 146238384Sjkim lwr $t1,2($i1) # Te1[s2>>16] 147238384Sjkim lwr $t2,2($i2) # Te1[s3>>16] 148238384Sjkim lwr $t3,2($i3) # Te1[s0>>16] 149238384Sjkim 150238384Sjkim _xtr $i0,$s2,8-2 151238384Sjkim _xtr $i1,$s3,8-2 152238384Sjkim _xtr $i2,$s0,8-2 153238384Sjkim _xtr $i3,$s1,8-2 154238384Sjkim and $i0,0x3fc 155238384Sjkim and $i1,0x3fc 156238384Sjkim and $i2,0x3fc 157238384Sjkim and $i3,0x3fc 158238384Sjkim $PTR_ADD $i0,$Tbl 159238384Sjkim $PTR_ADD $i1,$Tbl 160238384Sjkim $PTR_ADD $i2,$Tbl 161238384Sjkim $PTR_ADD $i3,$Tbl 162238384Sjkim lwl $t4,2($i0) # Te2[s2>>8] 163238384Sjkim lwl $t5,2($i1) # Te2[s3>>8] 164238384Sjkim lwl $t6,2($i2) # Te2[s0>>8] 165238384Sjkim lwl $t7,2($i3) # Te2[s1>>8] 166238384Sjkim lwr $t4,1($i0) # Te2[s2>>8] 167238384Sjkim lwr $t5,1($i1) # Te2[s3>>8] 168238384Sjkim lwr $t6,1($i2) # Te2[s0>>8] 169238384Sjkim lwr $t7,1($i3) # Te2[s1>>8] 170238384Sjkim 171238384Sjkim _xtr $i0,$s3,0-2 172238384Sjkim _xtr $i1,$s0,0-2 173238384Sjkim _xtr $i2,$s1,0-2 174238384Sjkim _xtr $i3,$s2,0-2 175238384Sjkim and $i0,0x3fc 176238384Sjkim and $i1,0x3fc 177238384Sjkim and $i2,0x3fc 178238384Sjkim and $i3,0x3fc 179238384Sjkim $PTR_ADD $i0,$Tbl 180238384Sjkim $PTR_ADD $i1,$Tbl 181238384Sjkim $PTR_ADD $i2,$Tbl 182238384Sjkim $PTR_ADD $i3,$Tbl 183238384Sjkim lwl $t8,1($i0) # Te3[s3] 184238384Sjkim lwl $t9,1($i1) # Te3[s0] 185238384Sjkim lwl $t10,1($i2) # Te3[s1] 186238384Sjkim lwl $t11,1($i3) # Te3[s2] 187238384Sjkim lwr $t8,0($i0) # Te3[s3] 188238384Sjkim lwr $t9,0($i1) # Te3[s0] 189238384Sjkim lwr $t10,0($i2) # Te3[s1] 190238384Sjkim lwr $t11,0($i3) # Te3[s2] 191238384Sjkim 192238384Sjkim _xtr $i0,$s0,24-2 193238384Sjkim _xtr $i1,$s1,24-2 194238384Sjkim _xtr $i2,$s2,24-2 195238384Sjkim _xtr $i3,$s3,24-2 196238384Sjkim and $i0,0x3fc 197238384Sjkim and $i1,0x3fc 198238384Sjkim and $i2,0x3fc 199238384Sjkim and $i3,0x3fc 200238384Sjkim $PTR_ADD $i0,$Tbl 201238384Sjkim $PTR_ADD $i1,$Tbl 202238384Sjkim $PTR_ADD $i2,$Tbl 203238384Sjkim $PTR_ADD $i3,$Tbl 204238384Sjkim xor $t0,$t4 205238384Sjkim xor $t1,$t5 206238384Sjkim xor $t2,$t6 207238384Sjkim xor $t3,$t7 208238384Sjkim lw $t4,0($i0) # Te0[s0>>24] 209238384Sjkim lw $t5,0($i1) # Te0[s1>>24] 210238384Sjkim lw $t6,0($i2) # Te0[s2>>24] 211238384Sjkim lw $t7,0($i3) # Te0[s3>>24] 212238384Sjkim 213238384Sjkim lw $s0,0($key0) 214238384Sjkim lw $s1,4($key0) 215238384Sjkim lw $s2,8($key0) 216238384Sjkim lw $s3,12($key0) 217238384Sjkim 218238384Sjkim xor $t0,$t8 219238384Sjkim xor $t1,$t9 220238384Sjkim xor $t2,$t10 221238384Sjkim xor $t3,$t11 222238384Sjkim 223238384Sjkim xor $t0,$t4 224238384Sjkim xor $t1,$t5 225238384Sjkim xor $t2,$t6 226238384Sjkim xor $t3,$t7 227238384Sjkim 228238384Sjkim sub $cnt,1 229238384Sjkim $PTR_ADD $key0,16 230238384Sjkim xor $s0,$t0 231238384Sjkim xor $s1,$t1 232238384Sjkim xor $s2,$t2 233238384Sjkim xor $s3,$t3 234238384Sjkim .set noreorder 235238384Sjkim bnez $cnt,.Loop_enc 236238384Sjkim _xtr $i0,$s1,16-2 237238384Sjkim 238238384Sjkim .set reorder 239238384Sjkim _xtr $i1,$s2,16-2 240238384Sjkim _xtr $i2,$s3,16-2 241238384Sjkim _xtr $i3,$s0,16-2 242238384Sjkim and $i0,0x3fc 243238384Sjkim and $i1,0x3fc 244238384Sjkim and $i2,0x3fc 245238384Sjkim and $i3,0x3fc 246238384Sjkim $PTR_ADD $i0,$Tbl 247238384Sjkim $PTR_ADD $i1,$Tbl 248238384Sjkim $PTR_ADD $i2,$Tbl 249238384Sjkim $PTR_ADD $i3,$Tbl 250238384Sjkim lbu $t0,2($i0) # Te4[s1>>16] 251238384Sjkim lbu $t1,2($i1) # Te4[s2>>16] 252238384Sjkim lbu $t2,2($i2) # Te4[s3>>16] 253238384Sjkim lbu $t3,2($i3) # Te4[s0>>16] 254238384Sjkim 255238384Sjkim _xtr $i0,$s2,8-2 256238384Sjkim _xtr $i1,$s3,8-2 257238384Sjkim _xtr $i2,$s0,8-2 258238384Sjkim _xtr $i3,$s1,8-2 259238384Sjkim and $i0,0x3fc 260238384Sjkim and $i1,0x3fc 261238384Sjkim and $i2,0x3fc 262238384Sjkim and $i3,0x3fc 263238384Sjkim $PTR_ADD $i0,$Tbl 264238384Sjkim $PTR_ADD $i1,$Tbl 265238384Sjkim $PTR_ADD $i2,$Tbl 266238384Sjkim $PTR_ADD $i3,$Tbl 267238384Sjkim lbu $t4,2($i0) # Te4[s2>>8] 268238384Sjkim lbu $t5,2($i1) # Te4[s3>>8] 269238384Sjkim lbu $t6,2($i2) # Te4[s0>>8] 270238384Sjkim lbu $t7,2($i3) # Te4[s1>>8] 271238384Sjkim 272238384Sjkim _xtr $i0,$s0,24-2 273238384Sjkim _xtr $i1,$s1,24-2 274238384Sjkim _xtr $i2,$s2,24-2 275238384Sjkim _xtr $i3,$s3,24-2 276238384Sjkim and $i0,0x3fc 277238384Sjkim and $i1,0x3fc 278238384Sjkim and $i2,0x3fc 279238384Sjkim and $i3,0x3fc 280238384Sjkim $PTR_ADD $i0,$Tbl 281238384Sjkim $PTR_ADD $i1,$Tbl 282238384Sjkim $PTR_ADD $i2,$Tbl 283238384Sjkim $PTR_ADD $i3,$Tbl 284238384Sjkim lbu $t8,2($i0) # Te4[s0>>24] 285238384Sjkim lbu $t9,2($i1) # Te4[s1>>24] 286238384Sjkim lbu $t10,2($i2) # Te4[s2>>24] 287238384Sjkim lbu $t11,2($i3) # Te4[s3>>24] 288238384Sjkim 289238384Sjkim _xtr $i0,$s3,0-2 290238384Sjkim _xtr $i1,$s0,0-2 291238384Sjkim _xtr $i2,$s1,0-2 292238384Sjkim _xtr $i3,$s2,0-2 293238384Sjkim and $i0,0x3fc 294238384Sjkim and $i1,0x3fc 295238384Sjkim and $i2,0x3fc 296238384Sjkim and $i3,0x3fc 297238384Sjkim 298238384Sjkim _ins $t0,16 299238384Sjkim _ins $t1,16 300238384Sjkim _ins $t2,16 301238384Sjkim _ins $t3,16 302238384Sjkim 303238384Sjkim _ins $t4,8 304238384Sjkim _ins $t5,8 305238384Sjkim _ins $t6,8 306238384Sjkim _ins $t7,8 307238384Sjkim 308238384Sjkim xor $t0,$t4 309238384Sjkim xor $t1,$t5 310238384Sjkim xor $t2,$t6 311238384Sjkim xor $t3,$t7 312238384Sjkim 313238384Sjkim $PTR_ADD $i0,$Tbl 314238384Sjkim $PTR_ADD $i1,$Tbl 315238384Sjkim $PTR_ADD $i2,$Tbl 316238384Sjkim $PTR_ADD $i3,$Tbl 317238384Sjkim lbu $t4,2($i0) # Te4[s3] 318238384Sjkim lbu $t5,2($i1) # Te4[s0] 319238384Sjkim lbu $t6,2($i2) # Te4[s1] 320238384Sjkim lbu $t7,2($i3) # Te4[s2] 321238384Sjkim 322238384Sjkim _ins $t8,24 323238384Sjkim _ins $t9,24 324238384Sjkim _ins $t10,24 325238384Sjkim _ins $t11,24 326238384Sjkim 327238384Sjkim lw $s0,0($key0) 328238384Sjkim lw $s1,4($key0) 329238384Sjkim lw $s2,8($key0) 330238384Sjkim lw $s3,12($key0) 331238384Sjkim 332238384Sjkim xor $t0,$t8 333238384Sjkim xor $t1,$t9 334238384Sjkim xor $t2,$t10 335238384Sjkim xor $t3,$t11 336238384Sjkim 337238384Sjkim _ins $t4,0 338238384Sjkim _ins $t5,0 339238384Sjkim _ins $t6,0 340238384Sjkim _ins $t7,0 341238384Sjkim 342238384Sjkim xor $t0,$t4 343238384Sjkim xor $t1,$t5 344238384Sjkim xor $t2,$t6 345238384Sjkim xor $t3,$t7 346238384Sjkim 347238384Sjkim xor $s0,$t0 348238384Sjkim xor $s1,$t1 349238384Sjkim xor $s2,$t2 350238384Sjkim xor $s3,$t3 351238384Sjkim 352238384Sjkim jr $ra 353238384Sjkim.end _mips_AES_encrypt 354238384Sjkim 355238384Sjkim.align 5 356238384Sjkim.globl AES_encrypt 357238384Sjkim.ent AES_encrypt 358238384SjkimAES_encrypt: 359238384Sjkim .frame $sp,$FRAMESIZE,$ra 360238384Sjkim .mask $SAVED_REGS_MASK,-$SZREG 361238384Sjkim .set noreorder 362238384Sjkim___ 363238384Sjkim$code.=<<___ if ($flavour =~ /o32/i); # o32 PIC-ification 364238384Sjkim .cpload $pf 365238384Sjkim___ 366238384Sjkim$code.=<<___; 367238384Sjkim $PTR_SUB $sp,$FRAMESIZE 368238384Sjkim $REG_S $ra,$FRAMESIZE-1*$SZREG($sp) 369238384Sjkim $REG_S $fp,$FRAMESIZE-2*$SZREG($sp) 370238384Sjkim $REG_S $s11,$FRAMESIZE-3*$SZREG($sp) 371238384Sjkim $REG_S $s10,$FRAMESIZE-4*$SZREG($sp) 372238384Sjkim $REG_S $s9,$FRAMESIZE-5*$SZREG($sp) 373238384Sjkim $REG_S $s8,$FRAMESIZE-6*$SZREG($sp) 374238384Sjkim $REG_S $s7,$FRAMESIZE-7*$SZREG($sp) 375238384Sjkim $REG_S $s6,$FRAMESIZE-8*$SZREG($sp) 376238384Sjkim $REG_S $s5,$FRAMESIZE-9*$SZREG($sp) 377238384Sjkim $REG_S $s4,$FRAMESIZE-10*$SZREG($sp) 378238384Sjkim___ 379238384Sjkim$code.=<<___ if ($flavour =~ /nubi/i); # optimize non-nubi prologue 380238384Sjkim $REG_S \$15,$FRAMESIZE-11*$SZREG($sp) 381238384Sjkim $REG_S \$14,$FRAMESIZE-12*$SZREG($sp) 382238384Sjkim $REG_S \$13,$FRAMESIZE-13*$SZREG($sp) 383238384Sjkim $REG_S \$12,$FRAMESIZE-14*$SZREG($sp) 384238384Sjkim $REG_S $gp,$FRAMESIZE-15*$SZREG($sp) 385238384Sjkim___ 386238384Sjkim$code.=<<___ if ($flavour !~ /o32/i); # non-o32 PIC-ification 387238384Sjkim .cplocal $Tbl 388238384Sjkim .cpsetup $pf,$zero,AES_encrypt 389238384Sjkim___ 390238384Sjkim$code.=<<___; 391238384Sjkim .set reorder 392238384Sjkim la $Tbl,AES_Te # PIC-ified 'load address' 393238384Sjkim 394238384Sjkim lwl $s0,0+$MSB($inp) 395238384Sjkim lwl $s1,4+$MSB($inp) 396238384Sjkim lwl $s2,8+$MSB($inp) 397238384Sjkim lwl $s3,12+$MSB($inp) 398238384Sjkim lwr $s0,0+$LSB($inp) 399238384Sjkim lwr $s1,4+$LSB($inp) 400238384Sjkim lwr $s2,8+$LSB($inp) 401238384Sjkim lwr $s3,12+$LSB($inp) 402238384Sjkim 403238384Sjkim bal _mips_AES_encrypt 404238384Sjkim 405238384Sjkim swr $s0,0+$LSB($out) 406238384Sjkim swr $s1,4+$LSB($out) 407238384Sjkim swr $s2,8+$LSB($out) 408238384Sjkim swr $s3,12+$LSB($out) 409238384Sjkim swl $s0,0+$MSB($out) 410238384Sjkim swl $s1,4+$MSB($out) 411238384Sjkim swl $s2,8+$MSB($out) 412238384Sjkim swl $s3,12+$MSB($out) 413238384Sjkim 414238384Sjkim .set noreorder 415238384Sjkim $REG_L $ra,$FRAMESIZE-1*$SZREG($sp) 416238384Sjkim $REG_L $fp,$FRAMESIZE-2*$SZREG($sp) 417238384Sjkim $REG_L $s11,$FRAMESIZE-3*$SZREG($sp) 418238384Sjkim $REG_L $s10,$FRAMESIZE-4*$SZREG($sp) 419238384Sjkim $REG_L $s9,$FRAMESIZE-5*$SZREG($sp) 420238384Sjkim $REG_L $s8,$FRAMESIZE-6*$SZREG($sp) 421238384Sjkim $REG_L $s7,$FRAMESIZE-7*$SZREG($sp) 422238384Sjkim $REG_L $s6,$FRAMESIZE-8*$SZREG($sp) 423238384Sjkim $REG_L $s5,$FRAMESIZE-9*$SZREG($sp) 424238384Sjkim $REG_L $s4,$FRAMESIZE-10*$SZREG($sp) 425238384Sjkim___ 426238384Sjkim$code.=<<___ if ($flavour =~ /nubi/i); 427238384Sjkim $REG_L \$15,$FRAMESIZE-11*$SZREG($sp) 428238384Sjkim $REG_L \$14,$FRAMESIZE-12*$SZREG($sp) 429238384Sjkim $REG_L \$13,$FRAMESIZE-13*$SZREG($sp) 430238384Sjkim $REG_L \$12,$FRAMESIZE-14*$SZREG($sp) 431238384Sjkim $REG_L $gp,$FRAMESIZE-15*$SZREG($sp) 432238384Sjkim___ 433238384Sjkim$code.=<<___; 434238384Sjkim jr $ra 435238384Sjkim $PTR_ADD $sp,$FRAMESIZE 436238384Sjkim.end AES_encrypt 437238384Sjkim___ 438238384Sjkim 439238384Sjkim$code.=<<___; 440238384Sjkim.align 5 441238384Sjkim.ent _mips_AES_decrypt 442238384Sjkim_mips_AES_decrypt: 443238384Sjkim .frame $sp,0,$ra 444238384Sjkim .set reorder 445238384Sjkim lw $t0,0($key) 446238384Sjkim lw $t1,4($key) 447238384Sjkim lw $t2,8($key) 448238384Sjkim lw $t3,12($key) 449238384Sjkim lw $cnt,240($key) 450238384Sjkim $PTR_ADD $key0,$key,16 451238384Sjkim 452238384Sjkim xor $s0,$t0 453238384Sjkim xor $s1,$t1 454238384Sjkim xor $s2,$t2 455238384Sjkim xor $s3,$t3 456238384Sjkim 457238384Sjkim sub $cnt,1 458238384Sjkim _xtr $i0,$s3,16-2 459238384Sjkim.Loop_dec: 460238384Sjkim _xtr $i1,$s0,16-2 461238384Sjkim _xtr $i2,$s1,16-2 462238384Sjkim _xtr $i3,$s2,16-2 463238384Sjkim and $i0,0x3fc 464238384Sjkim and $i1,0x3fc 465238384Sjkim and $i2,0x3fc 466238384Sjkim and $i3,0x3fc 467238384Sjkim $PTR_ADD $i0,$Tbl 468238384Sjkim $PTR_ADD $i1,$Tbl 469238384Sjkim $PTR_ADD $i2,$Tbl 470238384Sjkim $PTR_ADD $i3,$Tbl 471238384Sjkim lwl $t0,3($i0) # Td1[s3>>16] 472238384Sjkim lwl $t1,3($i1) # Td1[s0>>16] 473238384Sjkim lwl $t2,3($i2) # Td1[s1>>16] 474238384Sjkim lwl $t3,3($i3) # Td1[s2>>16] 475238384Sjkim lwr $t0,2($i0) # Td1[s3>>16] 476238384Sjkim lwr $t1,2($i1) # Td1[s0>>16] 477238384Sjkim lwr $t2,2($i2) # Td1[s1>>16] 478238384Sjkim lwr $t3,2($i3) # Td1[s2>>16] 479238384Sjkim 480238384Sjkim _xtr $i0,$s2,8-2 481238384Sjkim _xtr $i1,$s3,8-2 482238384Sjkim _xtr $i2,$s0,8-2 483238384Sjkim _xtr $i3,$s1,8-2 484238384Sjkim and $i0,0x3fc 485238384Sjkim and $i1,0x3fc 486238384Sjkim and $i2,0x3fc 487238384Sjkim and $i3,0x3fc 488238384Sjkim $PTR_ADD $i0,$Tbl 489238384Sjkim $PTR_ADD $i1,$Tbl 490238384Sjkim $PTR_ADD $i2,$Tbl 491238384Sjkim $PTR_ADD $i3,$Tbl 492238384Sjkim lwl $t4,2($i0) # Td2[s2>>8] 493238384Sjkim lwl $t5,2($i1) # Td2[s3>>8] 494238384Sjkim lwl $t6,2($i2) # Td2[s0>>8] 495238384Sjkim lwl $t7,2($i3) # Td2[s1>>8] 496238384Sjkim lwr $t4,1($i0) # Td2[s2>>8] 497238384Sjkim lwr $t5,1($i1) # Td2[s3>>8] 498238384Sjkim lwr $t6,1($i2) # Td2[s0>>8] 499238384Sjkim lwr $t7,1($i3) # Td2[s1>>8] 500238384Sjkim 501238384Sjkim _xtr $i0,$s1,0-2 502238384Sjkim _xtr $i1,$s2,0-2 503238384Sjkim _xtr $i2,$s3,0-2 504238384Sjkim _xtr $i3,$s0,0-2 505238384Sjkim and $i0,0x3fc 506238384Sjkim and $i1,0x3fc 507238384Sjkim and $i2,0x3fc 508238384Sjkim and $i3,0x3fc 509238384Sjkim $PTR_ADD $i0,$Tbl 510238384Sjkim $PTR_ADD $i1,$Tbl 511238384Sjkim $PTR_ADD $i2,$Tbl 512238384Sjkim $PTR_ADD $i3,$Tbl 513238384Sjkim lwl $t8,1($i0) # Td3[s1] 514238384Sjkim lwl $t9,1($i1) # Td3[s2] 515238384Sjkim lwl $t10,1($i2) # Td3[s3] 516238384Sjkim lwl $t11,1($i3) # Td3[s0] 517238384Sjkim lwr $t8,0($i0) # Td3[s1] 518238384Sjkim lwr $t9,0($i1) # Td3[s2] 519238384Sjkim lwr $t10,0($i2) # Td3[s3] 520238384Sjkim lwr $t11,0($i3) # Td3[s0] 521238384Sjkim 522238384Sjkim _xtr $i0,$s0,24-2 523238384Sjkim _xtr $i1,$s1,24-2 524238384Sjkim _xtr $i2,$s2,24-2 525238384Sjkim _xtr $i3,$s3,24-2 526238384Sjkim and $i0,0x3fc 527238384Sjkim and $i1,0x3fc 528238384Sjkim and $i2,0x3fc 529238384Sjkim and $i3,0x3fc 530238384Sjkim $PTR_ADD $i0,$Tbl 531238384Sjkim $PTR_ADD $i1,$Tbl 532238384Sjkim $PTR_ADD $i2,$Tbl 533238384Sjkim $PTR_ADD $i3,$Tbl 534238384Sjkim 535238384Sjkim xor $t0,$t4 536238384Sjkim xor $t1,$t5 537238384Sjkim xor $t2,$t6 538238384Sjkim xor $t3,$t7 539238384Sjkim 540238384Sjkim 541238384Sjkim lw $t4,0($i0) # Td0[s0>>24] 542238384Sjkim lw $t5,0($i1) # Td0[s1>>24] 543238384Sjkim lw $t6,0($i2) # Td0[s2>>24] 544238384Sjkim lw $t7,0($i3) # Td0[s3>>24] 545238384Sjkim 546238384Sjkim lw $s0,0($key0) 547238384Sjkim lw $s1,4($key0) 548238384Sjkim lw $s2,8($key0) 549238384Sjkim lw $s3,12($key0) 550238384Sjkim 551238384Sjkim xor $t0,$t8 552238384Sjkim xor $t1,$t9 553238384Sjkim xor $t2,$t10 554238384Sjkim xor $t3,$t11 555238384Sjkim 556238384Sjkim xor $t0,$t4 557238384Sjkim xor $t1,$t5 558238384Sjkim xor $t2,$t6 559238384Sjkim xor $t3,$t7 560238384Sjkim 561238384Sjkim sub $cnt,1 562238384Sjkim $PTR_ADD $key0,16 563238384Sjkim xor $s0,$t0 564238384Sjkim xor $s1,$t1 565238384Sjkim xor $s2,$t2 566238384Sjkim xor $s3,$t3 567238384Sjkim .set noreorder 568238384Sjkim bnez $cnt,.Loop_dec 569238384Sjkim _xtr $i0,$s3,16-2 570238384Sjkim 571238384Sjkim .set reorder 572238384Sjkim lw $t4,1024($Tbl) # prefetch Td4 573238384Sjkim lw $t5,1024+32($Tbl) 574238384Sjkim lw $t6,1024+64($Tbl) 575238384Sjkim lw $t7,1024+96($Tbl) 576238384Sjkim lw $t8,1024+128($Tbl) 577238384Sjkim lw $t9,1024+160($Tbl) 578238384Sjkim lw $t10,1024+192($Tbl) 579238384Sjkim lw $t11,1024+224($Tbl) 580238384Sjkim 581238384Sjkim _xtr $i0,$s3,16 582238384Sjkim _xtr $i1,$s0,16 583238384Sjkim _xtr $i2,$s1,16 584238384Sjkim _xtr $i3,$s2,16 585238384Sjkim and $i0,0xff 586238384Sjkim and $i1,0xff 587238384Sjkim and $i2,0xff 588238384Sjkim and $i3,0xff 589238384Sjkim $PTR_ADD $i0,$Tbl 590238384Sjkim $PTR_ADD $i1,$Tbl 591238384Sjkim $PTR_ADD $i2,$Tbl 592238384Sjkim $PTR_ADD $i3,$Tbl 593238384Sjkim lbu $t0,1024($i0) # Td4[s3>>16] 594238384Sjkim lbu $t1,1024($i1) # Td4[s0>>16] 595238384Sjkim lbu $t2,1024($i2) # Td4[s1>>16] 596238384Sjkim lbu $t3,1024($i3) # Td4[s2>>16] 597238384Sjkim 598238384Sjkim _xtr $i0,$s2,8 599238384Sjkim _xtr $i1,$s3,8 600238384Sjkim _xtr $i2,$s0,8 601238384Sjkim _xtr $i3,$s1,8 602238384Sjkim and $i0,0xff 603238384Sjkim and $i1,0xff 604238384Sjkim and $i2,0xff 605238384Sjkim and $i3,0xff 606238384Sjkim $PTR_ADD $i0,$Tbl 607238384Sjkim $PTR_ADD $i1,$Tbl 608238384Sjkim $PTR_ADD $i2,$Tbl 609238384Sjkim $PTR_ADD $i3,$Tbl 610238384Sjkim lbu $t4,1024($i0) # Td4[s2>>8] 611238384Sjkim lbu $t5,1024($i1) # Td4[s3>>8] 612238384Sjkim lbu $t6,1024($i2) # Td4[s0>>8] 613238384Sjkim lbu $t7,1024($i3) # Td4[s1>>8] 614238384Sjkim 615238384Sjkim _xtr $i0,$s0,24 616238384Sjkim _xtr $i1,$s1,24 617238384Sjkim _xtr $i2,$s2,24 618238384Sjkim _xtr $i3,$s3,24 619238384Sjkim $PTR_ADD $i0,$Tbl 620238384Sjkim $PTR_ADD $i1,$Tbl 621238384Sjkim $PTR_ADD $i2,$Tbl 622238384Sjkim $PTR_ADD $i3,$Tbl 623238384Sjkim lbu $t8,1024($i0) # Td4[s0>>24] 624238384Sjkim lbu $t9,1024($i1) # Td4[s1>>24] 625238384Sjkim lbu $t10,1024($i2) # Td4[s2>>24] 626238384Sjkim lbu $t11,1024($i3) # Td4[s3>>24] 627238384Sjkim 628238384Sjkim _xtr $i0,$s1,0 629238384Sjkim _xtr $i1,$s2,0 630238384Sjkim _xtr $i2,$s3,0 631238384Sjkim _xtr $i3,$s0,0 632238384Sjkim 633238384Sjkim _ins $t0,16 634238384Sjkim _ins $t1,16 635238384Sjkim _ins $t2,16 636238384Sjkim _ins $t3,16 637238384Sjkim 638238384Sjkim _ins $t4,8 639238384Sjkim _ins $t5,8 640238384Sjkim _ins $t6,8 641238384Sjkim _ins $t7,8 642238384Sjkim 643238384Sjkim xor $t0,$t4 644238384Sjkim xor $t1,$t5 645238384Sjkim xor $t2,$t6 646238384Sjkim xor $t3,$t7 647238384Sjkim 648238384Sjkim $PTR_ADD $i0,$Tbl 649238384Sjkim $PTR_ADD $i1,$Tbl 650238384Sjkim $PTR_ADD $i2,$Tbl 651238384Sjkim $PTR_ADD $i3,$Tbl 652238384Sjkim lbu $t4,1024($i0) # Td4[s1] 653238384Sjkim lbu $t5,1024($i1) # Td4[s2] 654238384Sjkim lbu $t6,1024($i2) # Td4[s3] 655238384Sjkim lbu $t7,1024($i3) # Td4[s0] 656238384Sjkim 657238384Sjkim _ins $t8,24 658238384Sjkim _ins $t9,24 659238384Sjkim _ins $t10,24 660238384Sjkim _ins $t11,24 661238384Sjkim 662238384Sjkim lw $s0,0($key0) 663238384Sjkim lw $s1,4($key0) 664238384Sjkim lw $s2,8($key0) 665238384Sjkim lw $s3,12($key0) 666238384Sjkim 667238384Sjkim _ins $t4,0 668238384Sjkim _ins $t5,0 669238384Sjkim _ins $t6,0 670238384Sjkim _ins $t7,0 671238384Sjkim 672238384Sjkim 673238384Sjkim xor $t0,$t8 674238384Sjkim xor $t1,$t9 675238384Sjkim xor $t2,$t10 676238384Sjkim xor $t3,$t11 677238384Sjkim 678238384Sjkim xor $t0,$t4 679238384Sjkim xor $t1,$t5 680238384Sjkim xor $t2,$t6 681238384Sjkim xor $t3,$t7 682238384Sjkim 683238384Sjkim xor $s0,$t0 684238384Sjkim xor $s1,$t1 685238384Sjkim xor $s2,$t2 686238384Sjkim xor $s3,$t3 687238384Sjkim 688238384Sjkim jr $ra 689238384Sjkim.end _mips_AES_decrypt 690238384Sjkim 691238384Sjkim.align 5 692238384Sjkim.globl AES_decrypt 693238384Sjkim.ent AES_decrypt 694238384SjkimAES_decrypt: 695238384Sjkim .frame $sp,$FRAMESIZE,$ra 696238384Sjkim .mask $SAVED_REGS_MASK,-$SZREG 697238384Sjkim .set noreorder 698238384Sjkim___ 699238384Sjkim$code.=<<___ if ($flavour =~ /o32/i); # o32 PIC-ification 700238384Sjkim .cpload $pf 701238384Sjkim___ 702238384Sjkim$code.=<<___; 703238384Sjkim $PTR_SUB $sp,$FRAMESIZE 704238384Sjkim $REG_S $ra,$FRAMESIZE-1*$SZREG($sp) 705238384Sjkim $REG_S $fp,$FRAMESIZE-2*$SZREG($sp) 706238384Sjkim $REG_S $s11,$FRAMESIZE-3*$SZREG($sp) 707238384Sjkim $REG_S $s10,$FRAMESIZE-4*$SZREG($sp) 708238384Sjkim $REG_S $s9,$FRAMESIZE-5*$SZREG($sp) 709238384Sjkim $REG_S $s8,$FRAMESIZE-6*$SZREG($sp) 710238384Sjkim $REG_S $s7,$FRAMESIZE-7*$SZREG($sp) 711238384Sjkim $REG_S $s6,$FRAMESIZE-8*$SZREG($sp) 712238384Sjkim $REG_S $s5,$FRAMESIZE-9*$SZREG($sp) 713238384Sjkim $REG_S $s4,$FRAMESIZE-10*$SZREG($sp) 714238384Sjkim___ 715238384Sjkim$code.=<<___ if ($flavour =~ /nubi/i); # optimize non-nubi prologue 716238384Sjkim $REG_S \$15,$FRAMESIZE-11*$SZREG($sp) 717238384Sjkim $REG_S \$14,$FRAMESIZE-12*$SZREG($sp) 718238384Sjkim $REG_S \$13,$FRAMESIZE-13*$SZREG($sp) 719238384Sjkim $REG_S \$12,$FRAMESIZE-14*$SZREG($sp) 720238384Sjkim $REG_S $gp,$FRAMESIZE-15*$SZREG($sp) 721238384Sjkim___ 722238384Sjkim$code.=<<___ if ($flavour !~ /o32/i); # non-o32 PIC-ification 723238384Sjkim .cplocal $Tbl 724238384Sjkim .cpsetup $pf,$zero,AES_decrypt 725238384Sjkim___ 726238384Sjkim$code.=<<___; 727238384Sjkim .set reorder 728238384Sjkim la $Tbl,AES_Td # PIC-ified 'load address' 729238384Sjkim 730238384Sjkim lwl $s0,0+$MSB($inp) 731238384Sjkim lwl $s1,4+$MSB($inp) 732238384Sjkim lwl $s2,8+$MSB($inp) 733238384Sjkim lwl $s3,12+$MSB($inp) 734238384Sjkim lwr $s0,0+$LSB($inp) 735238384Sjkim lwr $s1,4+$LSB($inp) 736238384Sjkim lwr $s2,8+$LSB($inp) 737238384Sjkim lwr $s3,12+$LSB($inp) 738238384Sjkim 739238384Sjkim bal _mips_AES_decrypt 740238384Sjkim 741238384Sjkim swr $s0,0+$LSB($out) 742238384Sjkim swr $s1,4+$LSB($out) 743238384Sjkim swr $s2,8+$LSB($out) 744238384Sjkim swr $s3,12+$LSB($out) 745238384Sjkim swl $s0,0+$MSB($out) 746238384Sjkim swl $s1,4+$MSB($out) 747238384Sjkim swl $s2,8+$MSB($out) 748238384Sjkim swl $s3,12+$MSB($out) 749238384Sjkim 750238384Sjkim .set noreorder 751238384Sjkim $REG_L $ra,$FRAMESIZE-1*$SZREG($sp) 752238384Sjkim $REG_L $fp,$FRAMESIZE-2*$SZREG($sp) 753238384Sjkim $REG_L $s11,$FRAMESIZE-3*$SZREG($sp) 754238384Sjkim $REG_L $s10,$FRAMESIZE-4*$SZREG($sp) 755238384Sjkim $REG_L $s9,$FRAMESIZE-5*$SZREG($sp) 756238384Sjkim $REG_L $s8,$FRAMESIZE-6*$SZREG($sp) 757238384Sjkim $REG_L $s7,$FRAMESIZE-7*$SZREG($sp) 758238384Sjkim $REG_L $s6,$FRAMESIZE-8*$SZREG($sp) 759238384Sjkim $REG_L $s5,$FRAMESIZE-9*$SZREG($sp) 760238384Sjkim $REG_L $s4,$FRAMESIZE-10*$SZREG($sp) 761238384Sjkim___ 762238384Sjkim$code.=<<___ if ($flavour =~ /nubi/i); 763238384Sjkim $REG_L \$15,$FRAMESIZE-11*$SZREG($sp) 764238384Sjkim $REG_L \$14,$FRAMESIZE-12*$SZREG($sp) 765238384Sjkim $REG_L \$13,$FRAMESIZE-13*$SZREG($sp) 766238384Sjkim $REG_L \$12,$FRAMESIZE-14*$SZREG($sp) 767238384Sjkim $REG_L $gp,$FRAMESIZE-15*$SZREG($sp) 768238384Sjkim___ 769238384Sjkim$code.=<<___; 770238384Sjkim jr $ra 771238384Sjkim $PTR_ADD $sp,$FRAMESIZE 772238384Sjkim.end AES_decrypt 773238384Sjkim___ 774238384Sjkim}}} 775238384Sjkim 776238384Sjkim{{{ 777238384Sjkimmy $FRAMESIZE=8*$SZREG; 778238384Sjkimmy $SAVED_REGS_MASK = ($flavour =~ /nubi/i) ? 0xc000f008 : 0xc0000000; 779238384Sjkim 780238384Sjkimmy ($inp,$bits,$key,$Tbl)=($a0,$a1,$a2,$a3); 781238384Sjkimmy ($rk0,$rk1,$rk2,$rk3,$rk4,$rk5,$rk6,$rk7)=($a4,$a5,$a6,$a7,$s0,$s1,$s2,$s3); 782238384Sjkimmy ($i0,$i1,$i2,$i3)=($at,$t0,$t1,$t2); 783238384Sjkimmy ($rcon,$cnt)=($gp,$fp); 784238384Sjkim 785238384Sjkim$code.=<<___; 786238384Sjkim.align 5 787238384Sjkim.ent _mips_AES_set_encrypt_key 788238384Sjkim_mips_AES_set_encrypt_key: 789238384Sjkim .frame $sp,0,$ra 790238384Sjkim .set noreorder 791238384Sjkim beqz $inp,.Lekey_done 792238384Sjkim li $t0,-1 793238384Sjkim beqz $key,.Lekey_done 794238384Sjkim $PTR_ADD $rcon,$Tbl,1024+256 795238384Sjkim 796238384Sjkim .set reorder 797238384Sjkim lwl $rk0,0+$MSB($inp) # load 128 bits 798238384Sjkim lwl $rk1,4+$MSB($inp) 799238384Sjkim lwl $rk2,8+$MSB($inp) 800238384Sjkim lwl $rk3,12+$MSB($inp) 801238384Sjkim li $at,128 802238384Sjkim lwr $rk0,0+$LSB($inp) 803238384Sjkim lwr $rk1,4+$LSB($inp) 804238384Sjkim lwr $rk2,8+$LSB($inp) 805238384Sjkim lwr $rk3,12+$LSB($inp) 806238384Sjkim .set noreorder 807238384Sjkim beq $bits,$at,.L128bits 808238384Sjkim li $cnt,10 809238384Sjkim 810238384Sjkim .set reorder 811238384Sjkim lwl $rk4,16+$MSB($inp) # load 192 bits 812238384Sjkim lwl $rk5,20+$MSB($inp) 813238384Sjkim li $at,192 814238384Sjkim lwr $rk4,16+$LSB($inp) 815238384Sjkim lwr $rk5,20+$LSB($inp) 816238384Sjkim .set noreorder 817238384Sjkim beq $bits,$at,.L192bits 818238384Sjkim li $cnt,8 819238384Sjkim 820238384Sjkim .set reorder 821238384Sjkim lwl $rk6,24+$MSB($inp) # load 256 bits 822238384Sjkim lwl $rk7,28+$MSB($inp) 823238384Sjkim li $at,256 824238384Sjkim lwr $rk6,24+$LSB($inp) 825238384Sjkim lwr $rk7,28+$LSB($inp) 826238384Sjkim .set noreorder 827238384Sjkim beq $bits,$at,.L256bits 828238384Sjkim li $cnt,7 829238384Sjkim 830238384Sjkim b .Lekey_done 831238384Sjkim li $t0,-2 832238384Sjkim 833238384Sjkim.align 4 834238384Sjkim.L128bits: 835238384Sjkim .set reorder 836238384Sjkim srl $i0,$rk3,16 837238384Sjkim srl $i1,$rk3,8 838238384Sjkim and $i0,0xff 839238384Sjkim and $i1,0xff 840238384Sjkim and $i2,$rk3,0xff 841238384Sjkim srl $i3,$rk3,24 842238384Sjkim $PTR_ADD $i0,$Tbl 843238384Sjkim $PTR_ADD $i1,$Tbl 844238384Sjkim $PTR_ADD $i2,$Tbl 845238384Sjkim $PTR_ADD $i3,$Tbl 846238384Sjkim lbu $i0,1024($i0) 847238384Sjkim lbu $i1,1024($i1) 848238384Sjkim lbu $i2,1024($i2) 849238384Sjkim lbu $i3,1024($i3) 850238384Sjkim 851238384Sjkim sw $rk0,0($key) 852238384Sjkim sw $rk1,4($key) 853238384Sjkim sw $rk2,8($key) 854238384Sjkim sw $rk3,12($key) 855238384Sjkim sub $cnt,1 856238384Sjkim $PTR_ADD $key,16 857238384Sjkim 858238384Sjkim _bias $i0,24 859238384Sjkim _bias $i1,16 860238384Sjkim _bias $i2,8 861238384Sjkim _bias $i3,0 862238384Sjkim 863238384Sjkim xor $rk0,$i0 864238384Sjkim lw $i0,0($rcon) 865238384Sjkim xor $rk0,$i1 866238384Sjkim xor $rk0,$i2 867238384Sjkim xor $rk0,$i3 868238384Sjkim xor $rk0,$i0 869238384Sjkim 870238384Sjkim xor $rk1,$rk0 871238384Sjkim xor $rk2,$rk1 872238384Sjkim xor $rk3,$rk2 873238384Sjkim 874238384Sjkim .set noreorder 875238384Sjkim bnez $cnt,.L128bits 876238384Sjkim $PTR_ADD $rcon,4 877238384Sjkim 878238384Sjkim sw $rk0,0($key) 879238384Sjkim sw $rk1,4($key) 880238384Sjkim sw $rk2,8($key) 881238384Sjkim li $cnt,10 882238384Sjkim sw $rk3,12($key) 883238384Sjkim li $t0,0 884238384Sjkim sw $cnt,80($key) 885238384Sjkim b .Lekey_done 886238384Sjkim $PTR_SUB $key,10*16 887238384Sjkim 888238384Sjkim.align 4 889238384Sjkim.L192bits: 890238384Sjkim .set reorder 891238384Sjkim srl $i0,$rk5,16 892238384Sjkim srl $i1,$rk5,8 893238384Sjkim and $i0,0xff 894238384Sjkim and $i1,0xff 895238384Sjkim and $i2,$rk5,0xff 896238384Sjkim srl $i3,$rk5,24 897238384Sjkim $PTR_ADD $i0,$Tbl 898238384Sjkim $PTR_ADD $i1,$Tbl 899238384Sjkim $PTR_ADD $i2,$Tbl 900238384Sjkim $PTR_ADD $i3,$Tbl 901238384Sjkim lbu $i0,1024($i0) 902238384Sjkim lbu $i1,1024($i1) 903238384Sjkim lbu $i2,1024($i2) 904238384Sjkim lbu $i3,1024($i3) 905238384Sjkim 906238384Sjkim sw $rk0,0($key) 907238384Sjkim sw $rk1,4($key) 908238384Sjkim sw $rk2,8($key) 909238384Sjkim sw $rk3,12($key) 910238384Sjkim sw $rk4,16($key) 911238384Sjkim sw $rk5,20($key) 912238384Sjkim sub $cnt,1 913238384Sjkim $PTR_ADD $key,24 914238384Sjkim 915238384Sjkim _bias $i0,24 916238384Sjkim _bias $i1,16 917238384Sjkim _bias $i2,8 918238384Sjkim _bias $i3,0 919238384Sjkim 920238384Sjkim xor $rk0,$i0 921238384Sjkim lw $i0,0($rcon) 922238384Sjkim xor $rk0,$i1 923238384Sjkim xor $rk0,$i2 924238384Sjkim xor $rk0,$i3 925238384Sjkim xor $rk0,$i0 926238384Sjkim 927238384Sjkim xor $rk1,$rk0 928238384Sjkim xor $rk2,$rk1 929238384Sjkim xor $rk3,$rk2 930238384Sjkim xor $rk4,$rk3 931238384Sjkim xor $rk5,$rk4 932238384Sjkim 933238384Sjkim .set noreorder 934238384Sjkim bnez $cnt,.L192bits 935238384Sjkim $PTR_ADD $rcon,4 936238384Sjkim 937238384Sjkim sw $rk0,0($key) 938238384Sjkim sw $rk1,4($key) 939238384Sjkim sw $rk2,8($key) 940238384Sjkim li $cnt,12 941238384Sjkim sw $rk3,12($key) 942238384Sjkim li $t0,0 943238384Sjkim sw $cnt,48($key) 944238384Sjkim b .Lekey_done 945238384Sjkim $PTR_SUB $key,12*16 946238384Sjkim 947238384Sjkim.align 4 948238384Sjkim.L256bits: 949238384Sjkim .set reorder 950238384Sjkim srl $i0,$rk7,16 951238384Sjkim srl $i1,$rk7,8 952238384Sjkim and $i0,0xff 953238384Sjkim and $i1,0xff 954238384Sjkim and $i2,$rk7,0xff 955238384Sjkim srl $i3,$rk7,24 956238384Sjkim $PTR_ADD $i0,$Tbl 957238384Sjkim $PTR_ADD $i1,$Tbl 958238384Sjkim $PTR_ADD $i2,$Tbl 959238384Sjkim $PTR_ADD $i3,$Tbl 960238384Sjkim lbu $i0,1024($i0) 961238384Sjkim lbu $i1,1024($i1) 962238384Sjkim lbu $i2,1024($i2) 963238384Sjkim lbu $i3,1024($i3) 964238384Sjkim 965238384Sjkim sw $rk0,0($key) 966238384Sjkim sw $rk1,4($key) 967238384Sjkim sw $rk2,8($key) 968238384Sjkim sw $rk3,12($key) 969238384Sjkim sw $rk4,16($key) 970238384Sjkim sw $rk5,20($key) 971238384Sjkim sw $rk6,24($key) 972238384Sjkim sw $rk7,28($key) 973238384Sjkim sub $cnt,1 974238384Sjkim 975238384Sjkim _bias $i0,24 976238384Sjkim _bias $i1,16 977238384Sjkim _bias $i2,8 978238384Sjkim _bias $i3,0 979238384Sjkim 980238384Sjkim xor $rk0,$i0 981238384Sjkim lw $i0,0($rcon) 982238384Sjkim xor $rk0,$i1 983238384Sjkim xor $rk0,$i2 984238384Sjkim xor $rk0,$i3 985238384Sjkim xor $rk0,$i0 986238384Sjkim 987238384Sjkim xor $rk1,$rk0 988238384Sjkim xor $rk2,$rk1 989238384Sjkim xor $rk3,$rk2 990238384Sjkim beqz $cnt,.L256bits_done 991238384Sjkim 992238384Sjkim srl $i0,$rk3,24 993238384Sjkim srl $i1,$rk3,16 994238384Sjkim srl $i2,$rk3,8 995238384Sjkim and $i3,$rk3,0xff 996238384Sjkim and $i1,0xff 997238384Sjkim and $i2,0xff 998238384Sjkim $PTR_ADD $i0,$Tbl 999238384Sjkim $PTR_ADD $i1,$Tbl 1000238384Sjkim $PTR_ADD $i2,$Tbl 1001238384Sjkim $PTR_ADD $i3,$Tbl 1002238384Sjkim lbu $i0,1024($i0) 1003238384Sjkim lbu $i1,1024($i1) 1004238384Sjkim lbu $i2,1024($i2) 1005238384Sjkim lbu $i3,1024($i3) 1006238384Sjkim sll $i0,24 1007238384Sjkim sll $i1,16 1008238384Sjkim sll $i2,8 1009238384Sjkim 1010238384Sjkim xor $rk4,$i0 1011238384Sjkim xor $rk4,$i1 1012238384Sjkim xor $rk4,$i2 1013238384Sjkim xor $rk4,$i3 1014238384Sjkim 1015238384Sjkim xor $rk5,$rk4 1016238384Sjkim xor $rk6,$rk5 1017238384Sjkim xor $rk7,$rk6 1018238384Sjkim 1019238384Sjkim $PTR_ADD $key,32 1020238384Sjkim .set noreorder 1021238384Sjkim b .L256bits 1022238384Sjkim $PTR_ADD $rcon,4 1023238384Sjkim 1024238384Sjkim.L256bits_done: 1025238384Sjkim sw $rk0,32($key) 1026238384Sjkim sw $rk1,36($key) 1027238384Sjkim sw $rk2,40($key) 1028238384Sjkim li $cnt,14 1029238384Sjkim sw $rk3,44($key) 1030238384Sjkim li $t0,0 1031238384Sjkim sw $cnt,48($key) 1032238384Sjkim $PTR_SUB $key,12*16 1033238384Sjkim 1034238384Sjkim.Lekey_done: 1035238384Sjkim jr $ra 1036238384Sjkim nop 1037238384Sjkim.end _mips_AES_set_encrypt_key 1038238384Sjkim 1039246772Sjkim.globl private_AES_set_encrypt_key 1040246772Sjkim.ent private_AES_set_encrypt_key 1041246772Sjkimprivate_AES_set_encrypt_key: 1042238384Sjkim .frame $sp,$FRAMESIZE,$ra 1043238384Sjkim .mask $SAVED_REGS_MASK,-$SZREG 1044238384Sjkim .set noreorder 1045238384Sjkim___ 1046238384Sjkim$code.=<<___ if ($flavour =~ /o32/i); # o32 PIC-ification 1047238384Sjkim .cpload $pf 1048238384Sjkim___ 1049238384Sjkim$code.=<<___; 1050238384Sjkim $PTR_SUB $sp,$FRAMESIZE 1051238384Sjkim $REG_S $ra,$FRAMESIZE-1*$SZREG($sp) 1052238384Sjkim $REG_S $fp,$FRAMESIZE-2*$SZREG($sp) 1053238384Sjkim___ 1054238384Sjkim$code.=<<___ if ($flavour =~ /nubi/i); # optimize non-nubi prologue 1055238384Sjkim $REG_S $s3,$FRAMESIZE-3*$SZREG($sp) 1056238384Sjkim $REG_S $s2,$FRAMESIZE-4*$SZREG($sp) 1057238384Sjkim $REG_S $s1,$FRAMESIZE-5*$SZREG($sp) 1058238384Sjkim $REG_S $s0,$FRAMESIZE-6*$SZREG($sp) 1059238384Sjkim $REG_S $gp,$FRAMESIZE-7*$SZREG($sp) 1060238384Sjkim___ 1061238384Sjkim$code.=<<___ if ($flavour !~ /o32/i); # non-o32 PIC-ification 1062238384Sjkim .cplocal $Tbl 1063246772Sjkim .cpsetup $pf,$zero,private_AES_set_encrypt_key 1064238384Sjkim___ 1065238384Sjkim$code.=<<___; 1066238384Sjkim .set reorder 1067238384Sjkim la $Tbl,AES_Te # PIC-ified 'load address' 1068238384Sjkim 1069238384Sjkim bal _mips_AES_set_encrypt_key 1070238384Sjkim 1071238384Sjkim .set noreorder 1072238384Sjkim move $a0,$t0 1073238384Sjkim $REG_L $ra,$FRAMESIZE-1*$SZREG($sp) 1074238384Sjkim $REG_L $fp,$FRAMESIZE-2*$SZREG($sp) 1075238384Sjkim___ 1076238384Sjkim$code.=<<___ if ($flavour =~ /nubi/i); 1077238384Sjkim $REG_L $s3,$FRAMESIZE-11*$SZREG($sp) 1078238384Sjkim $REG_L $s2,$FRAMESIZE-12*$SZREG($sp) 1079238384Sjkim $REG_L $s1,$FRAMESIZE-13*$SZREG($sp) 1080238384Sjkim $REG_L $s0,$FRAMESIZE-14*$SZREG($sp) 1081238384Sjkim $REG_L $gp,$FRAMESIZE-15*$SZREG($sp) 1082238384Sjkim___ 1083238384Sjkim$code.=<<___; 1084238384Sjkim jr $ra 1085238384Sjkim $PTR_ADD $sp,$FRAMESIZE 1086246772Sjkim.end private_AES_set_encrypt_key 1087238384Sjkim___ 1088238384Sjkim 1089238384Sjkimmy ($head,$tail)=($inp,$bits); 1090238384Sjkimmy ($tp1,$tp2,$tp4,$tp8,$tp9,$tpb,$tpd,$tpe)=($a4,$a5,$a6,$a7,$s0,$s1,$s2,$s3); 1091238384Sjkimmy ($m,$x80808080,$x7f7f7f7f,$x1b1b1b1b)=($at,$t0,$t1,$t2); 1092238384Sjkim$code.=<<___; 1093238384Sjkim.align 5 1094246772Sjkim.globl private_AES_set_decrypt_key 1095246772Sjkim.ent private_AES_set_decrypt_key 1096246772Sjkimprivate_AES_set_decrypt_key: 1097238384Sjkim .frame $sp,$FRAMESIZE,$ra 1098238384Sjkim .mask $SAVED_REGS_MASK,-$SZREG 1099238384Sjkim .set noreorder 1100238384Sjkim___ 1101238384Sjkim$code.=<<___ if ($flavour =~ /o32/i); # o32 PIC-ification 1102238384Sjkim .cpload $pf 1103238384Sjkim___ 1104238384Sjkim$code.=<<___; 1105238384Sjkim $PTR_SUB $sp,$FRAMESIZE 1106238384Sjkim $REG_S $ra,$FRAMESIZE-1*$SZREG($sp) 1107238384Sjkim $REG_S $fp,$FRAMESIZE-2*$SZREG($sp) 1108238384Sjkim___ 1109238384Sjkim$code.=<<___ if ($flavour =~ /nubi/i); # optimize non-nubi prologue 1110238384Sjkim $REG_S $s3,$FRAMESIZE-3*$SZREG($sp) 1111238384Sjkim $REG_S $s2,$FRAMESIZE-4*$SZREG($sp) 1112238384Sjkim $REG_S $s1,$FRAMESIZE-5*$SZREG($sp) 1113238384Sjkim $REG_S $s0,$FRAMESIZE-6*$SZREG($sp) 1114238384Sjkim $REG_S $gp,$FRAMESIZE-7*$SZREG($sp) 1115238384Sjkim___ 1116238384Sjkim$code.=<<___ if ($flavour !~ /o32/i); # non-o32 PIC-ification 1117238384Sjkim .cplocal $Tbl 1118246772Sjkim .cpsetup $pf,$zero,private_AES_set_decrypt_key 1119238384Sjkim___ 1120238384Sjkim$code.=<<___; 1121238384Sjkim .set reorder 1122238384Sjkim la $Tbl,AES_Te # PIC-ified 'load address' 1123238384Sjkim 1124238384Sjkim bal _mips_AES_set_encrypt_key 1125238384Sjkim 1126238384Sjkim bltz $t0,.Ldkey_done 1127238384Sjkim 1128238384Sjkim sll $at,$cnt,4 1129238384Sjkim $PTR_ADD $head,$key,0 1130238384Sjkim $PTR_ADD $tail,$key,$at 1131238384Sjkim.align 4 1132238384Sjkim.Lswap: 1133238384Sjkim lw $rk0,0($head) 1134238384Sjkim lw $rk1,4($head) 1135238384Sjkim lw $rk2,8($head) 1136238384Sjkim lw $rk3,12($head) 1137238384Sjkim lw $rk4,0($tail) 1138238384Sjkim lw $rk5,4($tail) 1139238384Sjkim lw $rk6,8($tail) 1140238384Sjkim lw $rk7,12($tail) 1141238384Sjkim sw $rk0,0($tail) 1142238384Sjkim sw $rk1,4($tail) 1143238384Sjkim sw $rk2,8($tail) 1144238384Sjkim sw $rk3,12($tail) 1145238384Sjkim $PTR_ADD $head,16 1146238384Sjkim $PTR_SUB $tail,16 1147238384Sjkim sw $rk4,-16($head) 1148238384Sjkim sw $rk5,-12($head) 1149238384Sjkim sw $rk6,-8($head) 1150238384Sjkim sw $rk7,-4($head) 1151238384Sjkim bne $head,$tail,.Lswap 1152238384Sjkim 1153238384Sjkim lw $tp1,16($key) # modulo-scheduled 1154238384Sjkim lui $x80808080,0x8080 1155238384Sjkim sub $cnt,1 1156238384Sjkim or $x80808080,0x8080 1157238384Sjkim sll $cnt,2 1158238384Sjkim $PTR_ADD $key,16 1159238384Sjkim lui $x1b1b1b1b,0x1b1b 1160238384Sjkim nor $x7f7f7f7f,$zero,$x80808080 1161238384Sjkim or $x1b1b1b1b,0x1b1b 1162238384Sjkim.align 4 1163238384Sjkim.Lmix: 1164238384Sjkim and $m,$tp1,$x80808080 1165238384Sjkim and $tp2,$tp1,$x7f7f7f7f 1166238384Sjkim srl $tp4,$m,7 1167238384Sjkim addu $tp2,$tp2 # tp2<<1 1168238384Sjkim subu $m,$tp4 1169238384Sjkim and $m,$x1b1b1b1b 1170238384Sjkim xor $tp2,$m 1171238384Sjkim 1172238384Sjkim and $m,$tp2,$x80808080 1173238384Sjkim and $tp4,$tp2,$x7f7f7f7f 1174238384Sjkim srl $tp8,$m,7 1175238384Sjkim addu $tp4,$tp4 # tp4<<1 1176238384Sjkim subu $m,$tp8 1177238384Sjkim and $m,$x1b1b1b1b 1178238384Sjkim xor $tp4,$m 1179238384Sjkim 1180238384Sjkim and $m,$tp4,$x80808080 1181238384Sjkim and $tp8,$tp4,$x7f7f7f7f 1182238384Sjkim srl $tp9,$m,7 1183238384Sjkim addu $tp8,$tp8 # tp8<<1 1184238384Sjkim subu $m,$tp9 1185238384Sjkim and $m,$x1b1b1b1b 1186238384Sjkim xor $tp8,$m 1187238384Sjkim 1188238384Sjkim xor $tp9,$tp8,$tp1 1189238384Sjkim xor $tpe,$tp8,$tp4 1190238384Sjkim xor $tpb,$tp9,$tp2 1191238384Sjkim xor $tpd,$tp9,$tp4 1192238384Sjkim 1193238384Sjkim _ror $tp1,$tpd,16 1194238384Sjkim xor $tpe,$tp2 1195238384Sjkim _ror $tp2,$tpd,-16 1196238384Sjkim xor $tpe,$tp1 1197238384Sjkim _ror $tp1,$tp9,8 1198238384Sjkim xor $tpe,$tp2 1199238384Sjkim _ror $tp2,$tp9,-24 1200238384Sjkim xor $tpe,$tp1 1201238384Sjkim _ror $tp1,$tpb,24 1202238384Sjkim xor $tpe,$tp2 1203238384Sjkim _ror $tp2,$tpb,-8 1204238384Sjkim xor $tpe,$tp1 1205238384Sjkim lw $tp1,4($key) # modulo-scheduled 1206238384Sjkim xor $tpe,$tp2 1207238384Sjkim sub $cnt,1 1208238384Sjkim sw $tpe,0($key) 1209238384Sjkim $PTR_ADD $key,4 1210238384Sjkim bnez $cnt,.Lmix 1211238384Sjkim 1212238384Sjkim li $t0,0 1213238384Sjkim.Ldkey_done: 1214238384Sjkim .set noreorder 1215238384Sjkim move $a0,$t0 1216238384Sjkim $REG_L $ra,$FRAMESIZE-1*$SZREG($sp) 1217238384Sjkim $REG_L $fp,$FRAMESIZE-2*$SZREG($sp) 1218238384Sjkim___ 1219238384Sjkim$code.=<<___ if ($flavour =~ /nubi/i); 1220238384Sjkim $REG_L $s3,$FRAMESIZE-11*$SZREG($sp) 1221238384Sjkim $REG_L $s2,$FRAMESIZE-12*$SZREG($sp) 1222238384Sjkim $REG_L $s1,$FRAMESIZE-13*$SZREG($sp) 1223238384Sjkim $REG_L $s0,$FRAMESIZE-14*$SZREG($sp) 1224238384Sjkim $REG_L $gp,$FRAMESIZE-15*$SZREG($sp) 1225238384Sjkim___ 1226238384Sjkim$code.=<<___; 1227238384Sjkim jr $ra 1228238384Sjkim $PTR_ADD $sp,$FRAMESIZE 1229246772Sjkim.end private_AES_set_decrypt_key 1230238384Sjkim___ 1231238384Sjkim}}} 1232238384Sjkim 1233238384Sjkim###################################################################### 1234238384Sjkim# Tables are kept in endian-neutral manner 1235238384Sjkim$code.=<<___; 1236238384Sjkim.rdata 1237238384Sjkim.align 6 1238238384SjkimAES_Te: 1239238384Sjkim.byte 0xc6,0x63,0x63,0xa5, 0xf8,0x7c,0x7c,0x84 # Te0 1240238384Sjkim.byte 0xee,0x77,0x77,0x99, 0xf6,0x7b,0x7b,0x8d 1241238384Sjkim.byte 0xff,0xf2,0xf2,0x0d, 0xd6,0x6b,0x6b,0xbd 1242238384Sjkim.byte 0xde,0x6f,0x6f,0xb1, 0x91,0xc5,0xc5,0x54 1243238384Sjkim.byte 0x60,0x30,0x30,0x50, 0x02,0x01,0x01,0x03 1244238384Sjkim.byte 0xce,0x67,0x67,0xa9, 0x56,0x2b,0x2b,0x7d 1245238384Sjkim.byte 0xe7,0xfe,0xfe,0x19, 0xb5,0xd7,0xd7,0x62 1246238384Sjkim.byte 0x4d,0xab,0xab,0xe6, 0xec,0x76,0x76,0x9a 1247238384Sjkim.byte 0x8f,0xca,0xca,0x45, 0x1f,0x82,0x82,0x9d 1248238384Sjkim.byte 0x89,0xc9,0xc9,0x40, 0xfa,0x7d,0x7d,0x87 1249238384Sjkim.byte 0xef,0xfa,0xfa,0x15, 0xb2,0x59,0x59,0xeb 1250238384Sjkim.byte 0x8e,0x47,0x47,0xc9, 0xfb,0xf0,0xf0,0x0b 1251238384Sjkim.byte 0x41,0xad,0xad,0xec, 0xb3,0xd4,0xd4,0x67 1252238384Sjkim.byte 0x5f,0xa2,0xa2,0xfd, 0x45,0xaf,0xaf,0xea 1253238384Sjkim.byte 0x23,0x9c,0x9c,0xbf, 0x53,0xa4,0xa4,0xf7 1254238384Sjkim.byte 0xe4,0x72,0x72,0x96, 0x9b,0xc0,0xc0,0x5b 1255238384Sjkim.byte 0x75,0xb7,0xb7,0xc2, 0xe1,0xfd,0xfd,0x1c 1256238384Sjkim.byte 0x3d,0x93,0x93,0xae, 0x4c,0x26,0x26,0x6a 1257238384Sjkim.byte 0x6c,0x36,0x36,0x5a, 0x7e,0x3f,0x3f,0x41 1258238384Sjkim.byte 0xf5,0xf7,0xf7,0x02, 0x83,0xcc,0xcc,0x4f 1259238384Sjkim.byte 0x68,0x34,0x34,0x5c, 0x51,0xa5,0xa5,0xf4 1260238384Sjkim.byte 0xd1,0xe5,0xe5,0x34, 0xf9,0xf1,0xf1,0x08 1261238384Sjkim.byte 0xe2,0x71,0x71,0x93, 0xab,0xd8,0xd8,0x73 1262238384Sjkim.byte 0x62,0x31,0x31,0x53, 0x2a,0x15,0x15,0x3f 1263238384Sjkim.byte 0x08,0x04,0x04,0x0c, 0x95,0xc7,0xc7,0x52 1264238384Sjkim.byte 0x46,0x23,0x23,0x65, 0x9d,0xc3,0xc3,0x5e 1265238384Sjkim.byte 0x30,0x18,0x18,0x28, 0x37,0x96,0x96,0xa1 1266238384Sjkim.byte 0x0a,0x05,0x05,0x0f, 0x2f,0x9a,0x9a,0xb5 1267238384Sjkim.byte 0x0e,0x07,0x07,0x09, 0x24,0x12,0x12,0x36 1268238384Sjkim.byte 0x1b,0x80,0x80,0x9b, 0xdf,0xe2,0xe2,0x3d 1269238384Sjkim.byte 0xcd,0xeb,0xeb,0x26, 0x4e,0x27,0x27,0x69 1270238384Sjkim.byte 0x7f,0xb2,0xb2,0xcd, 0xea,0x75,0x75,0x9f 1271238384Sjkim.byte 0x12,0x09,0x09,0x1b, 0x1d,0x83,0x83,0x9e 1272238384Sjkim.byte 0x58,0x2c,0x2c,0x74, 0x34,0x1a,0x1a,0x2e 1273238384Sjkim.byte 0x36,0x1b,0x1b,0x2d, 0xdc,0x6e,0x6e,0xb2 1274238384Sjkim.byte 0xb4,0x5a,0x5a,0xee, 0x5b,0xa0,0xa0,0xfb 1275238384Sjkim.byte 0xa4,0x52,0x52,0xf6, 0x76,0x3b,0x3b,0x4d 1276238384Sjkim.byte 0xb7,0xd6,0xd6,0x61, 0x7d,0xb3,0xb3,0xce 1277238384Sjkim.byte 0x52,0x29,0x29,0x7b, 0xdd,0xe3,0xe3,0x3e 1278238384Sjkim.byte 0x5e,0x2f,0x2f,0x71, 0x13,0x84,0x84,0x97 1279238384Sjkim.byte 0xa6,0x53,0x53,0xf5, 0xb9,0xd1,0xd1,0x68 1280238384Sjkim.byte 0x00,0x00,0x00,0x00, 0xc1,0xed,0xed,0x2c 1281238384Sjkim.byte 0x40,0x20,0x20,0x60, 0xe3,0xfc,0xfc,0x1f 1282238384Sjkim.byte 0x79,0xb1,0xb1,0xc8, 0xb6,0x5b,0x5b,0xed 1283238384Sjkim.byte 0xd4,0x6a,0x6a,0xbe, 0x8d,0xcb,0xcb,0x46 1284238384Sjkim.byte 0x67,0xbe,0xbe,0xd9, 0x72,0x39,0x39,0x4b 1285238384Sjkim.byte 0x94,0x4a,0x4a,0xde, 0x98,0x4c,0x4c,0xd4 1286238384Sjkim.byte 0xb0,0x58,0x58,0xe8, 0x85,0xcf,0xcf,0x4a 1287238384Sjkim.byte 0xbb,0xd0,0xd0,0x6b, 0xc5,0xef,0xef,0x2a 1288238384Sjkim.byte 0x4f,0xaa,0xaa,0xe5, 0xed,0xfb,0xfb,0x16 1289238384Sjkim.byte 0x86,0x43,0x43,0xc5, 0x9a,0x4d,0x4d,0xd7 1290238384Sjkim.byte 0x66,0x33,0x33,0x55, 0x11,0x85,0x85,0x94 1291238384Sjkim.byte 0x8a,0x45,0x45,0xcf, 0xe9,0xf9,0xf9,0x10 1292238384Sjkim.byte 0x04,0x02,0x02,0x06, 0xfe,0x7f,0x7f,0x81 1293238384Sjkim.byte 0xa0,0x50,0x50,0xf0, 0x78,0x3c,0x3c,0x44 1294238384Sjkim.byte 0x25,0x9f,0x9f,0xba, 0x4b,0xa8,0xa8,0xe3 1295238384Sjkim.byte 0xa2,0x51,0x51,0xf3, 0x5d,0xa3,0xa3,0xfe 1296238384Sjkim.byte 0x80,0x40,0x40,0xc0, 0x05,0x8f,0x8f,0x8a 1297238384Sjkim.byte 0x3f,0x92,0x92,0xad, 0x21,0x9d,0x9d,0xbc 1298238384Sjkim.byte 0x70,0x38,0x38,0x48, 0xf1,0xf5,0xf5,0x04 1299238384Sjkim.byte 0x63,0xbc,0xbc,0xdf, 0x77,0xb6,0xb6,0xc1 1300238384Sjkim.byte 0xaf,0xda,0xda,0x75, 0x42,0x21,0x21,0x63 1301238384Sjkim.byte 0x20,0x10,0x10,0x30, 0xe5,0xff,0xff,0x1a 1302238384Sjkim.byte 0xfd,0xf3,0xf3,0x0e, 0xbf,0xd2,0xd2,0x6d 1303238384Sjkim.byte 0x81,0xcd,0xcd,0x4c, 0x18,0x0c,0x0c,0x14 1304238384Sjkim.byte 0x26,0x13,0x13,0x35, 0xc3,0xec,0xec,0x2f 1305238384Sjkim.byte 0xbe,0x5f,0x5f,0xe1, 0x35,0x97,0x97,0xa2 1306238384Sjkim.byte 0x88,0x44,0x44,0xcc, 0x2e,0x17,0x17,0x39 1307238384Sjkim.byte 0x93,0xc4,0xc4,0x57, 0x55,0xa7,0xa7,0xf2 1308238384Sjkim.byte 0xfc,0x7e,0x7e,0x82, 0x7a,0x3d,0x3d,0x47 1309238384Sjkim.byte 0xc8,0x64,0x64,0xac, 0xba,0x5d,0x5d,0xe7 1310238384Sjkim.byte 0x32,0x19,0x19,0x2b, 0xe6,0x73,0x73,0x95 1311238384Sjkim.byte 0xc0,0x60,0x60,0xa0, 0x19,0x81,0x81,0x98 1312238384Sjkim.byte 0x9e,0x4f,0x4f,0xd1, 0xa3,0xdc,0xdc,0x7f 1313238384Sjkim.byte 0x44,0x22,0x22,0x66, 0x54,0x2a,0x2a,0x7e 1314238384Sjkim.byte 0x3b,0x90,0x90,0xab, 0x0b,0x88,0x88,0x83 1315238384Sjkim.byte 0x8c,0x46,0x46,0xca, 0xc7,0xee,0xee,0x29 1316238384Sjkim.byte 0x6b,0xb8,0xb8,0xd3, 0x28,0x14,0x14,0x3c 1317238384Sjkim.byte 0xa7,0xde,0xde,0x79, 0xbc,0x5e,0x5e,0xe2 1318238384Sjkim.byte 0x16,0x0b,0x0b,0x1d, 0xad,0xdb,0xdb,0x76 1319238384Sjkim.byte 0xdb,0xe0,0xe0,0x3b, 0x64,0x32,0x32,0x56 1320238384Sjkim.byte 0x74,0x3a,0x3a,0x4e, 0x14,0x0a,0x0a,0x1e 1321238384Sjkim.byte 0x92,0x49,0x49,0xdb, 0x0c,0x06,0x06,0x0a 1322238384Sjkim.byte 0x48,0x24,0x24,0x6c, 0xb8,0x5c,0x5c,0xe4 1323238384Sjkim.byte 0x9f,0xc2,0xc2,0x5d, 0xbd,0xd3,0xd3,0x6e 1324238384Sjkim.byte 0x43,0xac,0xac,0xef, 0xc4,0x62,0x62,0xa6 1325238384Sjkim.byte 0x39,0x91,0x91,0xa8, 0x31,0x95,0x95,0xa4 1326238384Sjkim.byte 0xd3,0xe4,0xe4,0x37, 0xf2,0x79,0x79,0x8b 1327238384Sjkim.byte 0xd5,0xe7,0xe7,0x32, 0x8b,0xc8,0xc8,0x43 1328238384Sjkim.byte 0x6e,0x37,0x37,0x59, 0xda,0x6d,0x6d,0xb7 1329238384Sjkim.byte 0x01,0x8d,0x8d,0x8c, 0xb1,0xd5,0xd5,0x64 1330238384Sjkim.byte 0x9c,0x4e,0x4e,0xd2, 0x49,0xa9,0xa9,0xe0 1331238384Sjkim.byte 0xd8,0x6c,0x6c,0xb4, 0xac,0x56,0x56,0xfa 1332238384Sjkim.byte 0xf3,0xf4,0xf4,0x07, 0xcf,0xea,0xea,0x25 1333238384Sjkim.byte 0xca,0x65,0x65,0xaf, 0xf4,0x7a,0x7a,0x8e 1334238384Sjkim.byte 0x47,0xae,0xae,0xe9, 0x10,0x08,0x08,0x18 1335238384Sjkim.byte 0x6f,0xba,0xba,0xd5, 0xf0,0x78,0x78,0x88 1336238384Sjkim.byte 0x4a,0x25,0x25,0x6f, 0x5c,0x2e,0x2e,0x72 1337238384Sjkim.byte 0x38,0x1c,0x1c,0x24, 0x57,0xa6,0xa6,0xf1 1338238384Sjkim.byte 0x73,0xb4,0xb4,0xc7, 0x97,0xc6,0xc6,0x51 1339238384Sjkim.byte 0xcb,0xe8,0xe8,0x23, 0xa1,0xdd,0xdd,0x7c 1340238384Sjkim.byte 0xe8,0x74,0x74,0x9c, 0x3e,0x1f,0x1f,0x21 1341238384Sjkim.byte 0x96,0x4b,0x4b,0xdd, 0x61,0xbd,0xbd,0xdc 1342238384Sjkim.byte 0x0d,0x8b,0x8b,0x86, 0x0f,0x8a,0x8a,0x85 1343238384Sjkim.byte 0xe0,0x70,0x70,0x90, 0x7c,0x3e,0x3e,0x42 1344238384Sjkim.byte 0x71,0xb5,0xb5,0xc4, 0xcc,0x66,0x66,0xaa 1345238384Sjkim.byte 0x90,0x48,0x48,0xd8, 0x06,0x03,0x03,0x05 1346238384Sjkim.byte 0xf7,0xf6,0xf6,0x01, 0x1c,0x0e,0x0e,0x12 1347238384Sjkim.byte 0xc2,0x61,0x61,0xa3, 0x6a,0x35,0x35,0x5f 1348238384Sjkim.byte 0xae,0x57,0x57,0xf9, 0x69,0xb9,0xb9,0xd0 1349238384Sjkim.byte 0x17,0x86,0x86,0x91, 0x99,0xc1,0xc1,0x58 1350238384Sjkim.byte 0x3a,0x1d,0x1d,0x27, 0x27,0x9e,0x9e,0xb9 1351238384Sjkim.byte 0xd9,0xe1,0xe1,0x38, 0xeb,0xf8,0xf8,0x13 1352238384Sjkim.byte 0x2b,0x98,0x98,0xb3, 0x22,0x11,0x11,0x33 1353238384Sjkim.byte 0xd2,0x69,0x69,0xbb, 0xa9,0xd9,0xd9,0x70 1354238384Sjkim.byte 0x07,0x8e,0x8e,0x89, 0x33,0x94,0x94,0xa7 1355238384Sjkim.byte 0x2d,0x9b,0x9b,0xb6, 0x3c,0x1e,0x1e,0x22 1356238384Sjkim.byte 0x15,0x87,0x87,0x92, 0xc9,0xe9,0xe9,0x20 1357238384Sjkim.byte 0x87,0xce,0xce,0x49, 0xaa,0x55,0x55,0xff 1358238384Sjkim.byte 0x50,0x28,0x28,0x78, 0xa5,0xdf,0xdf,0x7a 1359238384Sjkim.byte 0x03,0x8c,0x8c,0x8f, 0x59,0xa1,0xa1,0xf8 1360238384Sjkim.byte 0x09,0x89,0x89,0x80, 0x1a,0x0d,0x0d,0x17 1361238384Sjkim.byte 0x65,0xbf,0xbf,0xda, 0xd7,0xe6,0xe6,0x31 1362238384Sjkim.byte 0x84,0x42,0x42,0xc6, 0xd0,0x68,0x68,0xb8 1363238384Sjkim.byte 0x82,0x41,0x41,0xc3, 0x29,0x99,0x99,0xb0 1364238384Sjkim.byte 0x5a,0x2d,0x2d,0x77, 0x1e,0x0f,0x0f,0x11 1365238384Sjkim.byte 0x7b,0xb0,0xb0,0xcb, 0xa8,0x54,0x54,0xfc 1366238384Sjkim.byte 0x6d,0xbb,0xbb,0xd6, 0x2c,0x16,0x16,0x3a 1367238384Sjkim 1368238384Sjkim.byte 0x63, 0x7c, 0x77, 0x7b, 0xf2, 0x6b, 0x6f, 0xc5 # Te4 1369238384Sjkim.byte 0x30, 0x01, 0x67, 0x2b, 0xfe, 0xd7, 0xab, 0x76 1370238384Sjkim.byte 0xca, 0x82, 0xc9, 0x7d, 0xfa, 0x59, 0x47, 0xf0 1371238384Sjkim.byte 0xad, 0xd4, 0xa2, 0xaf, 0x9c, 0xa4, 0x72, 0xc0 1372238384Sjkim.byte 0xb7, 0xfd, 0x93, 0x26, 0x36, 0x3f, 0xf7, 0xcc 1373238384Sjkim.byte 0x34, 0xa5, 0xe5, 0xf1, 0x71, 0xd8, 0x31, 0x15 1374238384Sjkim.byte 0x04, 0xc7, 0x23, 0xc3, 0x18, 0x96, 0x05, 0x9a 1375238384Sjkim.byte 0x07, 0x12, 0x80, 0xe2, 0xeb, 0x27, 0xb2, 0x75 1376238384Sjkim.byte 0x09, 0x83, 0x2c, 0x1a, 0x1b, 0x6e, 0x5a, 0xa0 1377238384Sjkim.byte 0x52, 0x3b, 0xd6, 0xb3, 0x29, 0xe3, 0x2f, 0x84 1378238384Sjkim.byte 0x53, 0xd1, 0x00, 0xed, 0x20, 0xfc, 0xb1, 0x5b 1379238384Sjkim.byte 0x6a, 0xcb, 0xbe, 0x39, 0x4a, 0x4c, 0x58, 0xcf 1380238384Sjkim.byte 0xd0, 0xef, 0xaa, 0xfb, 0x43, 0x4d, 0x33, 0x85 1381238384Sjkim.byte 0x45, 0xf9, 0x02, 0x7f, 0x50, 0x3c, 0x9f, 0xa8 1382238384Sjkim.byte 0x51, 0xa3, 0x40, 0x8f, 0x92, 0x9d, 0x38, 0xf5 1383238384Sjkim.byte 0xbc, 0xb6, 0xda, 0x21, 0x10, 0xff, 0xf3, 0xd2 1384238384Sjkim.byte 0xcd, 0x0c, 0x13, 0xec, 0x5f, 0x97, 0x44, 0x17 1385238384Sjkim.byte 0xc4, 0xa7, 0x7e, 0x3d, 0x64, 0x5d, 0x19, 0x73 1386238384Sjkim.byte 0x60, 0x81, 0x4f, 0xdc, 0x22, 0x2a, 0x90, 0x88 1387238384Sjkim.byte 0x46, 0xee, 0xb8, 0x14, 0xde, 0x5e, 0x0b, 0xdb 1388238384Sjkim.byte 0xe0, 0x32, 0x3a, 0x0a, 0x49, 0x06, 0x24, 0x5c 1389238384Sjkim.byte 0xc2, 0xd3, 0xac, 0x62, 0x91, 0x95, 0xe4, 0x79 1390238384Sjkim.byte 0xe7, 0xc8, 0x37, 0x6d, 0x8d, 0xd5, 0x4e, 0xa9 1391238384Sjkim.byte 0x6c, 0x56, 0xf4, 0xea, 0x65, 0x7a, 0xae, 0x08 1392238384Sjkim.byte 0xba, 0x78, 0x25, 0x2e, 0x1c, 0xa6, 0xb4, 0xc6 1393238384Sjkim.byte 0xe8, 0xdd, 0x74, 0x1f, 0x4b, 0xbd, 0x8b, 0x8a 1394238384Sjkim.byte 0x70, 0x3e, 0xb5, 0x66, 0x48, 0x03, 0xf6, 0x0e 1395238384Sjkim.byte 0x61, 0x35, 0x57, 0xb9, 0x86, 0xc1, 0x1d, 0x9e 1396238384Sjkim.byte 0xe1, 0xf8, 0x98, 0x11, 0x69, 0xd9, 0x8e, 0x94 1397238384Sjkim.byte 0x9b, 0x1e, 0x87, 0xe9, 0xce, 0x55, 0x28, 0xdf 1398238384Sjkim.byte 0x8c, 0xa1, 0x89, 0x0d, 0xbf, 0xe6, 0x42, 0x68 1399238384Sjkim.byte 0x41, 0x99, 0x2d, 0x0f, 0xb0, 0x54, 0xbb, 0x16 1400238384Sjkim 1401238384Sjkim.byte 0x01,0x00,0x00,0x00, 0x02,0x00,0x00,0x00 # rcon 1402238384Sjkim.byte 0x04,0x00,0x00,0x00, 0x08,0x00,0x00,0x00 1403238384Sjkim.byte 0x10,0x00,0x00,0x00, 0x20,0x00,0x00,0x00 1404238384Sjkim.byte 0x40,0x00,0x00,0x00, 0x80,0x00,0x00,0x00 1405238384Sjkim.byte 0x1B,0x00,0x00,0x00, 0x36,0x00,0x00,0x00 1406238384Sjkim 1407238384Sjkim.align 6 1408238384SjkimAES_Td: 1409238384Sjkim.byte 0x51,0xf4,0xa7,0x50, 0x7e,0x41,0x65,0x53 # Td0 1410238384Sjkim.byte 0x1a,0x17,0xa4,0xc3, 0x3a,0x27,0x5e,0x96 1411238384Sjkim.byte 0x3b,0xab,0x6b,0xcb, 0x1f,0x9d,0x45,0xf1 1412238384Sjkim.byte 0xac,0xfa,0x58,0xab, 0x4b,0xe3,0x03,0x93 1413238384Sjkim.byte 0x20,0x30,0xfa,0x55, 0xad,0x76,0x6d,0xf6 1414238384Sjkim.byte 0x88,0xcc,0x76,0x91, 0xf5,0x02,0x4c,0x25 1415238384Sjkim.byte 0x4f,0xe5,0xd7,0xfc, 0xc5,0x2a,0xcb,0xd7 1416238384Sjkim.byte 0x26,0x35,0x44,0x80, 0xb5,0x62,0xa3,0x8f 1417238384Sjkim.byte 0xde,0xb1,0x5a,0x49, 0x25,0xba,0x1b,0x67 1418238384Sjkim.byte 0x45,0xea,0x0e,0x98, 0x5d,0xfe,0xc0,0xe1 1419238384Sjkim.byte 0xc3,0x2f,0x75,0x02, 0x81,0x4c,0xf0,0x12 1420238384Sjkim.byte 0x8d,0x46,0x97,0xa3, 0x6b,0xd3,0xf9,0xc6 1421238384Sjkim.byte 0x03,0x8f,0x5f,0xe7, 0x15,0x92,0x9c,0x95 1422238384Sjkim.byte 0xbf,0x6d,0x7a,0xeb, 0x95,0x52,0x59,0xda 1423238384Sjkim.byte 0xd4,0xbe,0x83,0x2d, 0x58,0x74,0x21,0xd3 1424238384Sjkim.byte 0x49,0xe0,0x69,0x29, 0x8e,0xc9,0xc8,0x44 1425238384Sjkim.byte 0x75,0xc2,0x89,0x6a, 0xf4,0x8e,0x79,0x78 1426238384Sjkim.byte 0x99,0x58,0x3e,0x6b, 0x27,0xb9,0x71,0xdd 1427238384Sjkim.byte 0xbe,0xe1,0x4f,0xb6, 0xf0,0x88,0xad,0x17 1428238384Sjkim.byte 0xc9,0x20,0xac,0x66, 0x7d,0xce,0x3a,0xb4 1429238384Sjkim.byte 0x63,0xdf,0x4a,0x18, 0xe5,0x1a,0x31,0x82 1430238384Sjkim.byte 0x97,0x51,0x33,0x60, 0x62,0x53,0x7f,0x45 1431238384Sjkim.byte 0xb1,0x64,0x77,0xe0, 0xbb,0x6b,0xae,0x84 1432238384Sjkim.byte 0xfe,0x81,0xa0,0x1c, 0xf9,0x08,0x2b,0x94 1433238384Sjkim.byte 0x70,0x48,0x68,0x58, 0x8f,0x45,0xfd,0x19 1434238384Sjkim.byte 0x94,0xde,0x6c,0x87, 0x52,0x7b,0xf8,0xb7 1435238384Sjkim.byte 0xab,0x73,0xd3,0x23, 0x72,0x4b,0x02,0xe2 1436238384Sjkim.byte 0xe3,0x1f,0x8f,0x57, 0x66,0x55,0xab,0x2a 1437238384Sjkim.byte 0xb2,0xeb,0x28,0x07, 0x2f,0xb5,0xc2,0x03 1438238384Sjkim.byte 0x86,0xc5,0x7b,0x9a, 0xd3,0x37,0x08,0xa5 1439238384Sjkim.byte 0x30,0x28,0x87,0xf2, 0x23,0xbf,0xa5,0xb2 1440238384Sjkim.byte 0x02,0x03,0x6a,0xba, 0xed,0x16,0x82,0x5c 1441238384Sjkim.byte 0x8a,0xcf,0x1c,0x2b, 0xa7,0x79,0xb4,0x92 1442238384Sjkim.byte 0xf3,0x07,0xf2,0xf0, 0x4e,0x69,0xe2,0xa1 1443238384Sjkim.byte 0x65,0xda,0xf4,0xcd, 0x06,0x05,0xbe,0xd5 1444238384Sjkim.byte 0xd1,0x34,0x62,0x1f, 0xc4,0xa6,0xfe,0x8a 1445238384Sjkim.byte 0x34,0x2e,0x53,0x9d, 0xa2,0xf3,0x55,0xa0 1446238384Sjkim.byte 0x05,0x8a,0xe1,0x32, 0xa4,0xf6,0xeb,0x75 1447238384Sjkim.byte 0x0b,0x83,0xec,0x39, 0x40,0x60,0xef,0xaa 1448238384Sjkim.byte 0x5e,0x71,0x9f,0x06, 0xbd,0x6e,0x10,0x51 1449238384Sjkim.byte 0x3e,0x21,0x8a,0xf9, 0x96,0xdd,0x06,0x3d 1450238384Sjkim.byte 0xdd,0x3e,0x05,0xae, 0x4d,0xe6,0xbd,0x46 1451238384Sjkim.byte 0x91,0x54,0x8d,0xb5, 0x71,0xc4,0x5d,0x05 1452238384Sjkim.byte 0x04,0x06,0xd4,0x6f, 0x60,0x50,0x15,0xff 1453238384Sjkim.byte 0x19,0x98,0xfb,0x24, 0xd6,0xbd,0xe9,0x97 1454238384Sjkim.byte 0x89,0x40,0x43,0xcc, 0x67,0xd9,0x9e,0x77 1455238384Sjkim.byte 0xb0,0xe8,0x42,0xbd, 0x07,0x89,0x8b,0x88 1456238384Sjkim.byte 0xe7,0x19,0x5b,0x38, 0x79,0xc8,0xee,0xdb 1457238384Sjkim.byte 0xa1,0x7c,0x0a,0x47, 0x7c,0x42,0x0f,0xe9 1458238384Sjkim.byte 0xf8,0x84,0x1e,0xc9, 0x00,0x00,0x00,0x00 1459238384Sjkim.byte 0x09,0x80,0x86,0x83, 0x32,0x2b,0xed,0x48 1460238384Sjkim.byte 0x1e,0x11,0x70,0xac, 0x6c,0x5a,0x72,0x4e 1461238384Sjkim.byte 0xfd,0x0e,0xff,0xfb, 0x0f,0x85,0x38,0x56 1462238384Sjkim.byte 0x3d,0xae,0xd5,0x1e, 0x36,0x2d,0x39,0x27 1463238384Sjkim.byte 0x0a,0x0f,0xd9,0x64, 0x68,0x5c,0xa6,0x21 1464238384Sjkim.byte 0x9b,0x5b,0x54,0xd1, 0x24,0x36,0x2e,0x3a 1465238384Sjkim.byte 0x0c,0x0a,0x67,0xb1, 0x93,0x57,0xe7,0x0f 1466238384Sjkim.byte 0xb4,0xee,0x96,0xd2, 0x1b,0x9b,0x91,0x9e 1467238384Sjkim.byte 0x80,0xc0,0xc5,0x4f, 0x61,0xdc,0x20,0xa2 1468238384Sjkim.byte 0x5a,0x77,0x4b,0x69, 0x1c,0x12,0x1a,0x16 1469238384Sjkim.byte 0xe2,0x93,0xba,0x0a, 0xc0,0xa0,0x2a,0xe5 1470238384Sjkim.byte 0x3c,0x22,0xe0,0x43, 0x12,0x1b,0x17,0x1d 1471238384Sjkim.byte 0x0e,0x09,0x0d,0x0b, 0xf2,0x8b,0xc7,0xad 1472238384Sjkim.byte 0x2d,0xb6,0xa8,0xb9, 0x14,0x1e,0xa9,0xc8 1473238384Sjkim.byte 0x57,0xf1,0x19,0x85, 0xaf,0x75,0x07,0x4c 1474238384Sjkim.byte 0xee,0x99,0xdd,0xbb, 0xa3,0x7f,0x60,0xfd 1475238384Sjkim.byte 0xf7,0x01,0x26,0x9f, 0x5c,0x72,0xf5,0xbc 1476238384Sjkim.byte 0x44,0x66,0x3b,0xc5, 0x5b,0xfb,0x7e,0x34 1477238384Sjkim.byte 0x8b,0x43,0x29,0x76, 0xcb,0x23,0xc6,0xdc 1478238384Sjkim.byte 0xb6,0xed,0xfc,0x68, 0xb8,0xe4,0xf1,0x63 1479238384Sjkim.byte 0xd7,0x31,0xdc,0xca, 0x42,0x63,0x85,0x10 1480238384Sjkim.byte 0x13,0x97,0x22,0x40, 0x84,0xc6,0x11,0x20 1481238384Sjkim.byte 0x85,0x4a,0x24,0x7d, 0xd2,0xbb,0x3d,0xf8 1482238384Sjkim.byte 0xae,0xf9,0x32,0x11, 0xc7,0x29,0xa1,0x6d 1483238384Sjkim.byte 0x1d,0x9e,0x2f,0x4b, 0xdc,0xb2,0x30,0xf3 1484238384Sjkim.byte 0x0d,0x86,0x52,0xec, 0x77,0xc1,0xe3,0xd0 1485238384Sjkim.byte 0x2b,0xb3,0x16,0x6c, 0xa9,0x70,0xb9,0x99 1486238384Sjkim.byte 0x11,0x94,0x48,0xfa, 0x47,0xe9,0x64,0x22 1487238384Sjkim.byte 0xa8,0xfc,0x8c,0xc4, 0xa0,0xf0,0x3f,0x1a 1488238384Sjkim.byte 0x56,0x7d,0x2c,0xd8, 0x22,0x33,0x90,0xef 1489238384Sjkim.byte 0x87,0x49,0x4e,0xc7, 0xd9,0x38,0xd1,0xc1 1490238384Sjkim.byte 0x8c,0xca,0xa2,0xfe, 0x98,0xd4,0x0b,0x36 1491238384Sjkim.byte 0xa6,0xf5,0x81,0xcf, 0xa5,0x7a,0xde,0x28 1492238384Sjkim.byte 0xda,0xb7,0x8e,0x26, 0x3f,0xad,0xbf,0xa4 1493238384Sjkim.byte 0x2c,0x3a,0x9d,0xe4, 0x50,0x78,0x92,0x0d 1494238384Sjkim.byte 0x6a,0x5f,0xcc,0x9b, 0x54,0x7e,0x46,0x62 1495238384Sjkim.byte 0xf6,0x8d,0x13,0xc2, 0x90,0xd8,0xb8,0xe8 1496238384Sjkim.byte 0x2e,0x39,0xf7,0x5e, 0x82,0xc3,0xaf,0xf5 1497238384Sjkim.byte 0x9f,0x5d,0x80,0xbe, 0x69,0xd0,0x93,0x7c 1498238384Sjkim.byte 0x6f,0xd5,0x2d,0xa9, 0xcf,0x25,0x12,0xb3 1499238384Sjkim.byte 0xc8,0xac,0x99,0x3b, 0x10,0x18,0x7d,0xa7 1500238384Sjkim.byte 0xe8,0x9c,0x63,0x6e, 0xdb,0x3b,0xbb,0x7b 1501238384Sjkim.byte 0xcd,0x26,0x78,0x09, 0x6e,0x59,0x18,0xf4 1502238384Sjkim.byte 0xec,0x9a,0xb7,0x01, 0x83,0x4f,0x9a,0xa8 1503238384Sjkim.byte 0xe6,0x95,0x6e,0x65, 0xaa,0xff,0xe6,0x7e 1504238384Sjkim.byte 0x21,0xbc,0xcf,0x08, 0xef,0x15,0xe8,0xe6 1505238384Sjkim.byte 0xba,0xe7,0x9b,0xd9, 0x4a,0x6f,0x36,0xce 1506238384Sjkim.byte 0xea,0x9f,0x09,0xd4, 0x29,0xb0,0x7c,0xd6 1507238384Sjkim.byte 0x31,0xa4,0xb2,0xaf, 0x2a,0x3f,0x23,0x31 1508238384Sjkim.byte 0xc6,0xa5,0x94,0x30, 0x35,0xa2,0x66,0xc0 1509238384Sjkim.byte 0x74,0x4e,0xbc,0x37, 0xfc,0x82,0xca,0xa6 1510238384Sjkim.byte 0xe0,0x90,0xd0,0xb0, 0x33,0xa7,0xd8,0x15 1511238384Sjkim.byte 0xf1,0x04,0x98,0x4a, 0x41,0xec,0xda,0xf7 1512238384Sjkim.byte 0x7f,0xcd,0x50,0x0e, 0x17,0x91,0xf6,0x2f 1513238384Sjkim.byte 0x76,0x4d,0xd6,0x8d, 0x43,0xef,0xb0,0x4d 1514238384Sjkim.byte 0xcc,0xaa,0x4d,0x54, 0xe4,0x96,0x04,0xdf 1515238384Sjkim.byte 0x9e,0xd1,0xb5,0xe3, 0x4c,0x6a,0x88,0x1b 1516238384Sjkim.byte 0xc1,0x2c,0x1f,0xb8, 0x46,0x65,0x51,0x7f 1517238384Sjkim.byte 0x9d,0x5e,0xea,0x04, 0x01,0x8c,0x35,0x5d 1518238384Sjkim.byte 0xfa,0x87,0x74,0x73, 0xfb,0x0b,0x41,0x2e 1519238384Sjkim.byte 0xb3,0x67,0x1d,0x5a, 0x92,0xdb,0xd2,0x52 1520238384Sjkim.byte 0xe9,0x10,0x56,0x33, 0x6d,0xd6,0x47,0x13 1521238384Sjkim.byte 0x9a,0xd7,0x61,0x8c, 0x37,0xa1,0x0c,0x7a 1522238384Sjkim.byte 0x59,0xf8,0x14,0x8e, 0xeb,0x13,0x3c,0x89 1523238384Sjkim.byte 0xce,0xa9,0x27,0xee, 0xb7,0x61,0xc9,0x35 1524238384Sjkim.byte 0xe1,0x1c,0xe5,0xed, 0x7a,0x47,0xb1,0x3c 1525238384Sjkim.byte 0x9c,0xd2,0xdf,0x59, 0x55,0xf2,0x73,0x3f 1526238384Sjkim.byte 0x18,0x14,0xce,0x79, 0x73,0xc7,0x37,0xbf 1527238384Sjkim.byte 0x53,0xf7,0xcd,0xea, 0x5f,0xfd,0xaa,0x5b 1528238384Sjkim.byte 0xdf,0x3d,0x6f,0x14, 0x78,0x44,0xdb,0x86 1529238384Sjkim.byte 0xca,0xaf,0xf3,0x81, 0xb9,0x68,0xc4,0x3e 1530238384Sjkim.byte 0x38,0x24,0x34,0x2c, 0xc2,0xa3,0x40,0x5f 1531238384Sjkim.byte 0x16,0x1d,0xc3,0x72, 0xbc,0xe2,0x25,0x0c 1532238384Sjkim.byte 0x28,0x3c,0x49,0x8b, 0xff,0x0d,0x95,0x41 1533238384Sjkim.byte 0x39,0xa8,0x01,0x71, 0x08,0x0c,0xb3,0xde 1534238384Sjkim.byte 0xd8,0xb4,0xe4,0x9c, 0x64,0x56,0xc1,0x90 1535238384Sjkim.byte 0x7b,0xcb,0x84,0x61, 0xd5,0x32,0xb6,0x70 1536238384Sjkim.byte 0x48,0x6c,0x5c,0x74, 0xd0,0xb8,0x57,0x42 1537238384Sjkim 1538238384Sjkim.byte 0x52, 0x09, 0x6a, 0xd5, 0x30, 0x36, 0xa5, 0x38 # Td4 1539238384Sjkim.byte 0xbf, 0x40, 0xa3, 0x9e, 0x81, 0xf3, 0xd7, 0xfb 1540238384Sjkim.byte 0x7c, 0xe3, 0x39, 0x82, 0x9b, 0x2f, 0xff, 0x87 1541238384Sjkim.byte 0x34, 0x8e, 0x43, 0x44, 0xc4, 0xde, 0xe9, 0xcb 1542238384Sjkim.byte 0x54, 0x7b, 0x94, 0x32, 0xa6, 0xc2, 0x23, 0x3d 1543238384Sjkim.byte 0xee, 0x4c, 0x95, 0x0b, 0x42, 0xfa, 0xc3, 0x4e 1544238384Sjkim.byte 0x08, 0x2e, 0xa1, 0x66, 0x28, 0xd9, 0x24, 0xb2 1545238384Sjkim.byte 0x76, 0x5b, 0xa2, 0x49, 0x6d, 0x8b, 0xd1, 0x25 1546238384Sjkim.byte 0x72, 0xf8, 0xf6, 0x64, 0x86, 0x68, 0x98, 0x16 1547238384Sjkim.byte 0xd4, 0xa4, 0x5c, 0xcc, 0x5d, 0x65, 0xb6, 0x92 1548238384Sjkim.byte 0x6c, 0x70, 0x48, 0x50, 0xfd, 0xed, 0xb9, 0xda 1549238384Sjkim.byte 0x5e, 0x15, 0x46, 0x57, 0xa7, 0x8d, 0x9d, 0x84 1550238384Sjkim.byte 0x90, 0xd8, 0xab, 0x00, 0x8c, 0xbc, 0xd3, 0x0a 1551238384Sjkim.byte 0xf7, 0xe4, 0x58, 0x05, 0xb8, 0xb3, 0x45, 0x06 1552238384Sjkim.byte 0xd0, 0x2c, 0x1e, 0x8f, 0xca, 0x3f, 0x0f, 0x02 1553238384Sjkim.byte 0xc1, 0xaf, 0xbd, 0x03, 0x01, 0x13, 0x8a, 0x6b 1554238384Sjkim.byte 0x3a, 0x91, 0x11, 0x41, 0x4f, 0x67, 0xdc, 0xea 1555238384Sjkim.byte 0x97, 0xf2, 0xcf, 0xce, 0xf0, 0xb4, 0xe6, 0x73 1556238384Sjkim.byte 0x96, 0xac, 0x74, 0x22, 0xe7, 0xad, 0x35, 0x85 1557238384Sjkim.byte 0xe2, 0xf9, 0x37, 0xe8, 0x1c, 0x75, 0xdf, 0x6e 1558238384Sjkim.byte 0x47, 0xf1, 0x1a, 0x71, 0x1d, 0x29, 0xc5, 0x89 1559238384Sjkim.byte 0x6f, 0xb7, 0x62, 0x0e, 0xaa, 0x18, 0xbe, 0x1b 1560238384Sjkim.byte 0xfc, 0x56, 0x3e, 0x4b, 0xc6, 0xd2, 0x79, 0x20 1561238384Sjkim.byte 0x9a, 0xdb, 0xc0, 0xfe, 0x78, 0xcd, 0x5a, 0xf4 1562238384Sjkim.byte 0x1f, 0xdd, 0xa8, 0x33, 0x88, 0x07, 0xc7, 0x31 1563238384Sjkim.byte 0xb1, 0x12, 0x10, 0x59, 0x27, 0x80, 0xec, 0x5f 1564238384Sjkim.byte 0x60, 0x51, 0x7f, 0xa9, 0x19, 0xb5, 0x4a, 0x0d 1565238384Sjkim.byte 0x2d, 0xe5, 0x7a, 0x9f, 0x93, 0xc9, 0x9c, 0xef 1566238384Sjkim.byte 0xa0, 0xe0, 0x3b, 0x4d, 0xae, 0x2a, 0xf5, 0xb0 1567238384Sjkim.byte 0xc8, 0xeb, 0xbb, 0x3c, 0x83, 0x53, 0x99, 0x61 1568238384Sjkim.byte 0x17, 0x2b, 0x04, 0x7e, 0xba, 0x77, 0xd6, 0x26 1569238384Sjkim.byte 0xe1, 0x69, 0x14, 0x63, 0x55, 0x21, 0x0c, 0x7d 1570238384Sjkim___ 1571238384Sjkim 1572238384Sjkimforeach (split("\n",$code)) { 1573238384Sjkim s/\`([^\`]*)\`/eval $1/ge; 1574238384Sjkim 1575238384Sjkim # made-up _instructions, _xtr, _ins, _ror and _bias, cope 1576238384Sjkim # with byte order dependencies... 1577238384Sjkim if (/^\s+_/) { 1578238384Sjkim s/(_[a-z]+\s+)(\$[0-9]+),([^,]+)(#.*)*$/$1$2,$2,$3/; 1579238384Sjkim 1580238384Sjkim s/_xtr\s+(\$[0-9]+),(\$[0-9]+),([0-9]+(\-2)*)/ 1581238384Sjkim sprintf("srl\t$1,$2,%d",$big_endian ? eval($3) 1582238384Sjkim : eval("24-$3"))/e or 1583238384Sjkim s/_ins\s+(\$[0-9]+),(\$[0-9]+),([0-9]+)/ 1584238384Sjkim sprintf("sll\t$1,$2,%d",$big_endian ? eval($3) 1585238384Sjkim : eval("24-$3"))/e or 1586238384Sjkim s/_ror\s+(\$[0-9]+),(\$[0-9]+),(\-?[0-9]+)/ 1587238384Sjkim sprintf("srl\t$1,$2,%d",$big_endian ? eval($3) 1588238384Sjkim : eval("$3*-1"))/e or 1589238384Sjkim s/_bias\s+(\$[0-9]+),(\$[0-9]+),([0-9]+)/ 1590238384Sjkim sprintf("sll\t$1,$2,%d",$big_endian ? eval($3) 1591238384Sjkim : eval("($3-16)&31"))/e; 1592238384Sjkim 1593238384Sjkim s/srl\s+(\$[0-9]+),(\$[0-9]+),\-([0-9]+)/ 1594238384Sjkim sprintf("sll\t$1,$2,$3")/e or 1595238384Sjkim s/srl\s+(\$[0-9]+),(\$[0-9]+),0/ 1596238384Sjkim sprintf("and\t$1,$2,0xff")/e or 1597238384Sjkim s/(sll\s+\$[0-9]+,\$[0-9]+,0)/#$1/; 1598238384Sjkim } 1599238384Sjkim 1600238384Sjkim # convert lwl/lwr and swr/swl to little-endian order 1601238384Sjkim if (!$big_endian && /^\s+[sl]w[lr]\s+/) { 1602238384Sjkim s/([sl]wl.*)([0-9]+)\((\$[0-9]+)\)/ 1603238384Sjkim sprintf("$1%d($3)",eval("$2-$2%4+($2%4-1)&3"))/e or 1604238384Sjkim s/([sl]wr.*)([0-9]+)\((\$[0-9]+)\)/ 1605238384Sjkim sprintf("$1%d($3)",eval("$2-$2%4+($2%4+1)&3"))/e; 1606238384Sjkim } 1607238384Sjkim 1608238384Sjkim print $_,"\n"; 1609238384Sjkim} 1610238384Sjkim 1611238384Sjkimclose STDOUT; 1612