1238384Sjkim#!/usr/bin/env perl 2238384Sjkim 3238384Sjkim# ==================================================================== 4238384Sjkim# Written by Andy Polyakov <appro@fy.chalmers.se> 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 PA-RISC. 11238384Sjkim# 12238384Sjkim# June 2009. 13238384Sjkim# 14238384Sjkim# The module is mechanical transliteration of aes-sparcv9.pl, but with 15238384Sjkim# a twist: S-boxes are compressed even further down to 1K+256B. On 16238384Sjkim# PA-7100LC performance is ~40% better than gcc 3.2 generated code and 17238384Sjkim# is about 33 cycles per byte processed with 128-bit key. Newer CPUs 18238384Sjkim# perform at 16 cycles per byte. It's not faster than code generated 19238384Sjkim# by vendor compiler, but recall that it has compressed S-boxes, which 20238384Sjkim# requires extra processing. 21238384Sjkim# 22238384Sjkim# Special thanks to polarhome.com for providing HP-UX account. 23238384Sjkim 24238384Sjkim$flavour = shift; 25238384Sjkim$output = shift; 26238384Sjkimopen STDOUT,">$output"; 27238384Sjkim 28238384Sjkimif ($flavour =~ /64/) { 29238384Sjkim $LEVEL ="2.0W"; 30238384Sjkim $SIZE_T =8; 31238384Sjkim $FRAME_MARKER =80; 32238384Sjkim $SAVED_RP =16; 33238384Sjkim $PUSH ="std"; 34238384Sjkim $PUSHMA ="std,ma"; 35238384Sjkim $POP ="ldd"; 36238384Sjkim $POPMB ="ldd,mb"; 37238384Sjkim} else { 38238384Sjkim $LEVEL ="1.0"; 39238384Sjkim $SIZE_T =4; 40238384Sjkim $FRAME_MARKER =48; 41238384Sjkim $SAVED_RP =20; 42238384Sjkim $PUSH ="stw"; 43238384Sjkim $PUSHMA ="stwm"; 44238384Sjkim $POP ="ldw"; 45238384Sjkim $POPMB ="ldwm"; 46238384Sjkim} 47238384Sjkim 48238384Sjkim$FRAME=16*$SIZE_T+$FRAME_MARKER;# 16 saved regs + frame marker 49238384Sjkim # [+ argument transfer] 50238384Sjkim$inp="%r26"; # arg0 51238384Sjkim$out="%r25"; # arg1 52238384Sjkim$key="%r24"; # arg2 53238384Sjkim 54238384Sjkim($s0,$s1,$s2,$s3) = ("%r1","%r2","%r3","%r4"); 55238384Sjkim($t0,$t1,$t2,$t3) = ("%r5","%r6","%r7","%r8"); 56238384Sjkim 57238384Sjkim($acc0, $acc1, $acc2, $acc3, $acc4, $acc5, $acc6, $acc7, 58238384Sjkim $acc8, $acc9,$acc10,$acc11,$acc12,$acc13,$acc14,$acc15) = 59238384Sjkim("%r9","%r10","%r11","%r12","%r13","%r14","%r15","%r16", 60238384Sjkim"%r17","%r18","%r19","%r20","%r21","%r22","%r23","%r26"); 61238384Sjkim 62238384Sjkim$tbl="%r28"; 63238384Sjkim$rounds="%r29"; 64238384Sjkim 65238384Sjkim$code=<<___; 66238384Sjkim .LEVEL $LEVEL 67238384Sjkim .SPACE \$TEXT\$ 68238384Sjkim .SUBSPA \$CODE\$,QUAD=0,ALIGN=8,ACCESS=0x2C,CODE_ONLY 69238384Sjkim 70238384Sjkim .EXPORT AES_encrypt,ENTRY,ARGW0=GR,ARGW1=GR,ARGW2=GR 71238384Sjkim .ALIGN 64 72238384SjkimAES_encrypt 73238384Sjkim .PROC 74238384Sjkim .CALLINFO FRAME=`$FRAME-16*$SIZE_T`,NO_CALLS,SAVE_RP,ENTRY_GR=18 75238384Sjkim .ENTRY 76238384Sjkim $PUSH %r2,-$SAVED_RP(%sp) ; standard prologue 77238384Sjkim $PUSHMA %r3,$FRAME(%sp) 78238384Sjkim $PUSH %r4,`-$FRAME+1*$SIZE_T`(%sp) 79238384Sjkim $PUSH %r5,`-$FRAME+2*$SIZE_T`(%sp) 80238384Sjkim $PUSH %r6,`-$FRAME+3*$SIZE_T`(%sp) 81238384Sjkim $PUSH %r7,`-$FRAME+4*$SIZE_T`(%sp) 82238384Sjkim $PUSH %r8,`-$FRAME+5*$SIZE_T`(%sp) 83238384Sjkim $PUSH %r9,`-$FRAME+6*$SIZE_T`(%sp) 84238384Sjkim $PUSH %r10,`-$FRAME+7*$SIZE_T`(%sp) 85238384Sjkim $PUSH %r11,`-$FRAME+8*$SIZE_T`(%sp) 86238384Sjkim $PUSH %r12,`-$FRAME+9*$SIZE_T`(%sp) 87238384Sjkim $PUSH %r13,`-$FRAME+10*$SIZE_T`(%sp) 88238384Sjkim $PUSH %r14,`-$FRAME+11*$SIZE_T`(%sp) 89238384Sjkim $PUSH %r15,`-$FRAME+12*$SIZE_T`(%sp) 90238384Sjkim $PUSH %r16,`-$FRAME+13*$SIZE_T`(%sp) 91238384Sjkim $PUSH %r17,`-$FRAME+14*$SIZE_T`(%sp) 92238384Sjkim $PUSH %r18,`-$FRAME+15*$SIZE_T`(%sp) 93238384Sjkim 94238384Sjkim blr %r0,$tbl 95238384Sjkim ldi 3,$t0 96238384SjkimL\$enc_pic 97238384Sjkim andcm $tbl,$t0,$tbl 98238384Sjkim ldo L\$AES_Te-L\$enc_pic($tbl),$tbl 99238384Sjkim 100238384Sjkim and $inp,$t0,$t0 101238384Sjkim sub $inp,$t0,$inp 102238384Sjkim ldw 0($inp),$s0 103238384Sjkim ldw 4($inp),$s1 104238384Sjkim ldw 8($inp),$s2 105238384Sjkim comib,= 0,$t0,L\$enc_inp_aligned 106238384Sjkim ldw 12($inp),$s3 107238384Sjkim 108238384Sjkim sh3addl $t0,%r0,$t0 109238384Sjkim subi 32,$t0,$t0 110238384Sjkim mtctl $t0,%cr11 111238384Sjkim ldw 16($inp),$t1 112238384Sjkim vshd $s0,$s1,$s0 113238384Sjkim vshd $s1,$s2,$s1 114238384Sjkim vshd $s2,$s3,$s2 115238384Sjkim vshd $s3,$t1,$s3 116238384Sjkim 117238384SjkimL\$enc_inp_aligned 118238384Sjkim bl _parisc_AES_encrypt,%r31 119238384Sjkim nop 120238384Sjkim 121238384Sjkim extru,<> $out,31,2,%r0 122238384Sjkim b L\$enc_out_aligned 123238384Sjkim nop 124238384Sjkim 125238384Sjkim _srm $s0,24,$acc0 126238384Sjkim _srm $s0,16,$acc1 127238384Sjkim stb $acc0,0($out) 128238384Sjkim _srm $s0,8,$acc2 129238384Sjkim stb $acc1,1($out) 130238384Sjkim _srm $s1,24,$acc4 131238384Sjkim stb $acc2,2($out) 132238384Sjkim _srm $s1,16,$acc5 133238384Sjkim stb $s0,3($out) 134238384Sjkim _srm $s1,8,$acc6 135238384Sjkim stb $acc4,4($out) 136238384Sjkim _srm $s2,24,$acc0 137238384Sjkim stb $acc5,5($out) 138238384Sjkim _srm $s2,16,$acc1 139238384Sjkim stb $acc6,6($out) 140238384Sjkim _srm $s2,8,$acc2 141238384Sjkim stb $s1,7($out) 142238384Sjkim _srm $s3,24,$acc4 143238384Sjkim stb $acc0,8($out) 144238384Sjkim _srm $s3,16,$acc5 145238384Sjkim stb $acc1,9($out) 146238384Sjkim _srm $s3,8,$acc6 147238384Sjkim stb $acc2,10($out) 148238384Sjkim stb $s2,11($out) 149238384Sjkim stb $acc4,12($out) 150238384Sjkim stb $acc5,13($out) 151238384Sjkim stb $acc6,14($out) 152238384Sjkim b L\$enc_done 153238384Sjkim stb $s3,15($out) 154238384Sjkim 155238384SjkimL\$enc_out_aligned 156238384Sjkim stw $s0,0($out) 157238384Sjkim stw $s1,4($out) 158238384Sjkim stw $s2,8($out) 159238384Sjkim stw $s3,12($out) 160238384Sjkim 161238384SjkimL\$enc_done 162238384Sjkim $POP `-$FRAME-$SAVED_RP`(%sp),%r2 ; standard epilogue 163238384Sjkim $POP `-$FRAME+1*$SIZE_T`(%sp),%r4 164238384Sjkim $POP `-$FRAME+2*$SIZE_T`(%sp),%r5 165238384Sjkim $POP `-$FRAME+3*$SIZE_T`(%sp),%r6 166238384Sjkim $POP `-$FRAME+4*$SIZE_T`(%sp),%r7 167238384Sjkim $POP `-$FRAME+5*$SIZE_T`(%sp),%r8 168238384Sjkim $POP `-$FRAME+6*$SIZE_T`(%sp),%r9 169238384Sjkim $POP `-$FRAME+7*$SIZE_T`(%sp),%r10 170238384Sjkim $POP `-$FRAME+8*$SIZE_T`(%sp),%r11 171238384Sjkim $POP `-$FRAME+9*$SIZE_T`(%sp),%r12 172238384Sjkim $POP `-$FRAME+10*$SIZE_T`(%sp),%r13 173238384Sjkim $POP `-$FRAME+11*$SIZE_T`(%sp),%r14 174238384Sjkim $POP `-$FRAME+12*$SIZE_T`(%sp),%r15 175238384Sjkim $POP `-$FRAME+13*$SIZE_T`(%sp),%r16 176238384Sjkim $POP `-$FRAME+14*$SIZE_T`(%sp),%r17 177238384Sjkim $POP `-$FRAME+15*$SIZE_T`(%sp),%r18 178238384Sjkim bv (%r2) 179238384Sjkim .EXIT 180238384Sjkim $POPMB -$FRAME(%sp),%r3 181238384Sjkim .PROCEND 182238384Sjkim 183238384Sjkim .ALIGN 16 184238384Sjkim_parisc_AES_encrypt 185238384Sjkim .PROC 186238384Sjkim .CALLINFO MILLICODE 187238384Sjkim .ENTRY 188238384Sjkim ldw 240($key),$rounds 189238384Sjkim ldw 0($key),$t0 190238384Sjkim ldw 4($key),$t1 191238384Sjkim ldw 8($key),$t2 192238384Sjkim _srm $rounds,1,$rounds 193238384Sjkim xor $t0,$s0,$s0 194238384Sjkim ldw 12($key),$t3 195238384Sjkim _srm $s0,24,$acc0 196238384Sjkim xor $t1,$s1,$s1 197238384Sjkim ldw 16($key),$t0 198238384Sjkim _srm $s1,16,$acc1 199238384Sjkim xor $t2,$s2,$s2 200238384Sjkim ldw 20($key),$t1 201238384Sjkim xor $t3,$s3,$s3 202238384Sjkim ldw 24($key),$t2 203238384Sjkim ldw 28($key),$t3 204238384SjkimL\$enc_loop 205238384Sjkim _srm $s2,8,$acc2 206238384Sjkim ldwx,s $acc0($tbl),$acc0 207238384Sjkim _srm $s3,0,$acc3 208238384Sjkim ldwx,s $acc1($tbl),$acc1 209238384Sjkim _srm $s1,24,$acc4 210238384Sjkim ldwx,s $acc2($tbl),$acc2 211238384Sjkim _srm $s2,16,$acc5 212238384Sjkim ldwx,s $acc3($tbl),$acc3 213238384Sjkim _srm $s3,8,$acc6 214238384Sjkim ldwx,s $acc4($tbl),$acc4 215238384Sjkim _srm $s0,0,$acc7 216238384Sjkim ldwx,s $acc5($tbl),$acc5 217238384Sjkim _srm $s2,24,$acc8 218238384Sjkim ldwx,s $acc6($tbl),$acc6 219238384Sjkim _srm $s3,16,$acc9 220238384Sjkim ldwx,s $acc7($tbl),$acc7 221238384Sjkim _srm $s0,8,$acc10 222238384Sjkim ldwx,s $acc8($tbl),$acc8 223238384Sjkim _srm $s1,0,$acc11 224238384Sjkim ldwx,s $acc9($tbl),$acc9 225238384Sjkim _srm $s3,24,$acc12 226238384Sjkim ldwx,s $acc10($tbl),$acc10 227238384Sjkim _srm $s0,16,$acc13 228238384Sjkim ldwx,s $acc11($tbl),$acc11 229238384Sjkim _srm $s1,8,$acc14 230238384Sjkim ldwx,s $acc12($tbl),$acc12 231238384Sjkim _srm $s2,0,$acc15 232238384Sjkim ldwx,s $acc13($tbl),$acc13 233238384Sjkim ldwx,s $acc14($tbl),$acc14 234238384Sjkim ldwx,s $acc15($tbl),$acc15 235238384Sjkim addib,= -1,$rounds,L\$enc_last 236238384Sjkim ldo 32($key),$key 237238384Sjkim 238238384Sjkim _ror $acc1,8,$acc1 239238384Sjkim xor $acc0,$t0,$t0 240238384Sjkim ldw 0($key),$s0 241238384Sjkim _ror $acc2,16,$acc2 242238384Sjkim xor $acc1,$t0,$t0 243238384Sjkim ldw 4($key),$s1 244238384Sjkim _ror $acc3,24,$acc3 245238384Sjkim xor $acc2,$t0,$t0 246238384Sjkim ldw 8($key),$s2 247238384Sjkim _ror $acc5,8,$acc5 248238384Sjkim xor $acc3,$t0,$t0 249238384Sjkim ldw 12($key),$s3 250238384Sjkim _ror $acc6,16,$acc6 251238384Sjkim xor $acc4,$t1,$t1 252238384Sjkim _ror $acc7,24,$acc7 253238384Sjkim xor $acc5,$t1,$t1 254238384Sjkim _ror $acc9,8,$acc9 255238384Sjkim xor $acc6,$t1,$t1 256238384Sjkim _ror $acc10,16,$acc10 257238384Sjkim xor $acc7,$t1,$t1 258238384Sjkim _ror $acc11,24,$acc11 259238384Sjkim xor $acc8,$t2,$t2 260238384Sjkim _ror $acc13,8,$acc13 261238384Sjkim xor $acc9,$t2,$t2 262238384Sjkim _ror $acc14,16,$acc14 263238384Sjkim xor $acc10,$t2,$t2 264238384Sjkim _ror $acc15,24,$acc15 265238384Sjkim xor $acc11,$t2,$t2 266238384Sjkim xor $acc12,$acc14,$acc14 267238384Sjkim xor $acc13,$t3,$t3 268238384Sjkim _srm $t0,24,$acc0 269238384Sjkim xor $acc14,$t3,$t3 270238384Sjkim _srm $t1,16,$acc1 271238384Sjkim xor $acc15,$t3,$t3 272238384Sjkim 273238384Sjkim _srm $t2,8,$acc2 274238384Sjkim ldwx,s $acc0($tbl),$acc0 275238384Sjkim _srm $t3,0,$acc3 276238384Sjkim ldwx,s $acc1($tbl),$acc1 277238384Sjkim _srm $t1,24,$acc4 278238384Sjkim ldwx,s $acc2($tbl),$acc2 279238384Sjkim _srm $t2,16,$acc5 280238384Sjkim ldwx,s $acc3($tbl),$acc3 281238384Sjkim _srm $t3,8,$acc6 282238384Sjkim ldwx,s $acc4($tbl),$acc4 283238384Sjkim _srm $t0,0,$acc7 284238384Sjkim ldwx,s $acc5($tbl),$acc5 285238384Sjkim _srm $t2,24,$acc8 286238384Sjkim ldwx,s $acc6($tbl),$acc6 287238384Sjkim _srm $t3,16,$acc9 288238384Sjkim ldwx,s $acc7($tbl),$acc7 289238384Sjkim _srm $t0,8,$acc10 290238384Sjkim ldwx,s $acc8($tbl),$acc8 291238384Sjkim _srm $t1,0,$acc11 292238384Sjkim ldwx,s $acc9($tbl),$acc9 293238384Sjkim _srm $t3,24,$acc12 294238384Sjkim ldwx,s $acc10($tbl),$acc10 295238384Sjkim _srm $t0,16,$acc13 296238384Sjkim ldwx,s $acc11($tbl),$acc11 297238384Sjkim _srm $t1,8,$acc14 298238384Sjkim ldwx,s $acc12($tbl),$acc12 299238384Sjkim _srm $t2,0,$acc15 300238384Sjkim ldwx,s $acc13($tbl),$acc13 301238384Sjkim _ror $acc1,8,$acc1 302238384Sjkim ldwx,s $acc14($tbl),$acc14 303238384Sjkim 304238384Sjkim _ror $acc2,16,$acc2 305238384Sjkim xor $acc0,$s0,$s0 306238384Sjkim ldwx,s $acc15($tbl),$acc15 307238384Sjkim _ror $acc3,24,$acc3 308238384Sjkim xor $acc1,$s0,$s0 309238384Sjkim ldw 16($key),$t0 310238384Sjkim _ror $acc5,8,$acc5 311238384Sjkim xor $acc2,$s0,$s0 312238384Sjkim ldw 20($key),$t1 313238384Sjkim _ror $acc6,16,$acc6 314238384Sjkim xor $acc3,$s0,$s0 315238384Sjkim ldw 24($key),$t2 316238384Sjkim _ror $acc7,24,$acc7 317238384Sjkim xor $acc4,$s1,$s1 318238384Sjkim ldw 28($key),$t3 319238384Sjkim _ror $acc9,8,$acc9 320238384Sjkim xor $acc5,$s1,$s1 321238384Sjkim ldw 1024+0($tbl),%r0 ; prefetch te4 322238384Sjkim _ror $acc10,16,$acc10 323238384Sjkim xor $acc6,$s1,$s1 324238384Sjkim ldw 1024+32($tbl),%r0 ; prefetch te4 325238384Sjkim _ror $acc11,24,$acc11 326238384Sjkim xor $acc7,$s1,$s1 327238384Sjkim ldw 1024+64($tbl),%r0 ; prefetch te4 328238384Sjkim _ror $acc13,8,$acc13 329238384Sjkim xor $acc8,$s2,$s2 330238384Sjkim ldw 1024+96($tbl),%r0 ; prefetch te4 331238384Sjkim _ror $acc14,16,$acc14 332238384Sjkim xor $acc9,$s2,$s2 333238384Sjkim ldw 1024+128($tbl),%r0 ; prefetch te4 334238384Sjkim _ror $acc15,24,$acc15 335238384Sjkim xor $acc10,$s2,$s2 336238384Sjkim ldw 1024+160($tbl),%r0 ; prefetch te4 337238384Sjkim _srm $s0,24,$acc0 338238384Sjkim xor $acc11,$s2,$s2 339238384Sjkim ldw 1024+192($tbl),%r0 ; prefetch te4 340238384Sjkim xor $acc12,$acc14,$acc14 341238384Sjkim xor $acc13,$s3,$s3 342238384Sjkim ldw 1024+224($tbl),%r0 ; prefetch te4 343238384Sjkim _srm $s1,16,$acc1 344238384Sjkim xor $acc14,$s3,$s3 345238384Sjkim b L\$enc_loop 346238384Sjkim xor $acc15,$s3,$s3 347238384Sjkim 348238384Sjkim .ALIGN 16 349238384SjkimL\$enc_last 350238384Sjkim ldo 1024($tbl),$rounds 351238384Sjkim _ror $acc1,8,$acc1 352238384Sjkim xor $acc0,$t0,$t0 353238384Sjkim ldw 0($key),$s0 354238384Sjkim _ror $acc2,16,$acc2 355238384Sjkim xor $acc1,$t0,$t0 356238384Sjkim ldw 4($key),$s1 357238384Sjkim _ror $acc3,24,$acc3 358238384Sjkim xor $acc2,$t0,$t0 359238384Sjkim ldw 8($key),$s2 360238384Sjkim _ror $acc5,8,$acc5 361238384Sjkim xor $acc3,$t0,$t0 362238384Sjkim ldw 12($key),$s3 363238384Sjkim _ror $acc6,16,$acc6 364238384Sjkim xor $acc4,$t1,$t1 365238384Sjkim _ror $acc7,24,$acc7 366238384Sjkim xor $acc5,$t1,$t1 367238384Sjkim _ror $acc9,8,$acc9 368238384Sjkim xor $acc6,$t1,$t1 369238384Sjkim _ror $acc10,16,$acc10 370238384Sjkim xor $acc7,$t1,$t1 371238384Sjkim _ror $acc11,24,$acc11 372238384Sjkim xor $acc8,$t2,$t2 373238384Sjkim _ror $acc13,8,$acc13 374238384Sjkim xor $acc9,$t2,$t2 375238384Sjkim _ror $acc14,16,$acc14 376238384Sjkim xor $acc10,$t2,$t2 377238384Sjkim _ror $acc15,24,$acc15 378238384Sjkim xor $acc11,$t2,$t2 379238384Sjkim xor $acc12,$acc14,$acc14 380238384Sjkim xor $acc13,$t3,$t3 381238384Sjkim _srm $t0,24,$acc0 382238384Sjkim xor $acc14,$t3,$t3 383238384Sjkim _srm $t1,16,$acc1 384238384Sjkim xor $acc15,$t3,$t3 385238384Sjkim 386238384Sjkim _srm $t2,8,$acc2 387238384Sjkim ldbx $acc0($rounds),$acc0 388238384Sjkim _srm $t1,24,$acc4 389238384Sjkim ldbx $acc1($rounds),$acc1 390238384Sjkim _srm $t2,16,$acc5 391238384Sjkim _srm $t3,0,$acc3 392238384Sjkim ldbx $acc2($rounds),$acc2 393238384Sjkim ldbx $acc3($rounds),$acc3 394238384Sjkim _srm $t3,8,$acc6 395238384Sjkim ldbx $acc4($rounds),$acc4 396238384Sjkim _srm $t2,24,$acc8 397238384Sjkim ldbx $acc5($rounds),$acc5 398238384Sjkim _srm $t3,16,$acc9 399238384Sjkim _srm $t0,0,$acc7 400238384Sjkim ldbx $acc6($rounds),$acc6 401238384Sjkim ldbx $acc7($rounds),$acc7 402238384Sjkim _srm $t0,8,$acc10 403238384Sjkim ldbx $acc8($rounds),$acc8 404238384Sjkim _srm $t3,24,$acc12 405238384Sjkim ldbx $acc9($rounds),$acc9 406238384Sjkim _srm $t0,16,$acc13 407238384Sjkim _srm $t1,0,$acc11 408238384Sjkim ldbx $acc10($rounds),$acc10 409238384Sjkim _srm $t1,8,$acc14 410238384Sjkim ldbx $acc11($rounds),$acc11 411238384Sjkim ldbx $acc12($rounds),$acc12 412238384Sjkim ldbx $acc13($rounds),$acc13 413238384Sjkim _srm $t2,0,$acc15 414238384Sjkim ldbx $acc14($rounds),$acc14 415238384Sjkim 416238384Sjkim dep $acc0,7,8,$acc3 417238384Sjkim ldbx $acc15($rounds),$acc15 418238384Sjkim dep $acc4,7,8,$acc7 419238384Sjkim dep $acc1,15,8,$acc3 420238384Sjkim dep $acc5,15,8,$acc7 421238384Sjkim dep $acc2,23,8,$acc3 422238384Sjkim dep $acc6,23,8,$acc7 423238384Sjkim xor $acc3,$s0,$s0 424238384Sjkim xor $acc7,$s1,$s1 425238384Sjkim dep $acc8,7,8,$acc11 426238384Sjkim dep $acc12,7,8,$acc15 427238384Sjkim dep $acc9,15,8,$acc11 428238384Sjkim dep $acc13,15,8,$acc15 429238384Sjkim dep $acc10,23,8,$acc11 430238384Sjkim dep $acc14,23,8,$acc15 431238384Sjkim xor $acc11,$s2,$s2 432238384Sjkim 433238384Sjkim bv (%r31) 434238384Sjkim .EXIT 435238384Sjkim xor $acc15,$s3,$s3 436238384Sjkim .PROCEND 437238384Sjkim 438238384Sjkim .ALIGN 64 439238384SjkimL\$AES_Te 440238384Sjkim .WORD 0xc66363a5, 0xf87c7c84, 0xee777799, 0xf67b7b8d 441238384Sjkim .WORD 0xfff2f20d, 0xd66b6bbd, 0xde6f6fb1, 0x91c5c554 442238384Sjkim .WORD 0x60303050, 0x02010103, 0xce6767a9, 0x562b2b7d 443238384Sjkim .WORD 0xe7fefe19, 0xb5d7d762, 0x4dababe6, 0xec76769a 444238384Sjkim .WORD 0x8fcaca45, 0x1f82829d, 0x89c9c940, 0xfa7d7d87 445238384Sjkim .WORD 0xeffafa15, 0xb25959eb, 0x8e4747c9, 0xfbf0f00b 446238384Sjkim .WORD 0x41adadec, 0xb3d4d467, 0x5fa2a2fd, 0x45afafea 447238384Sjkim .WORD 0x239c9cbf, 0x53a4a4f7, 0xe4727296, 0x9bc0c05b 448238384Sjkim .WORD 0x75b7b7c2, 0xe1fdfd1c, 0x3d9393ae, 0x4c26266a 449238384Sjkim .WORD 0x6c36365a, 0x7e3f3f41, 0xf5f7f702, 0x83cccc4f 450238384Sjkim .WORD 0x6834345c, 0x51a5a5f4, 0xd1e5e534, 0xf9f1f108 451238384Sjkim .WORD 0xe2717193, 0xabd8d873, 0x62313153, 0x2a15153f 452238384Sjkim .WORD 0x0804040c, 0x95c7c752, 0x46232365, 0x9dc3c35e 453238384Sjkim .WORD 0x30181828, 0x379696a1, 0x0a05050f, 0x2f9a9ab5 454238384Sjkim .WORD 0x0e070709, 0x24121236, 0x1b80809b, 0xdfe2e23d 455238384Sjkim .WORD 0xcdebeb26, 0x4e272769, 0x7fb2b2cd, 0xea75759f 456238384Sjkim .WORD 0x1209091b, 0x1d83839e, 0x582c2c74, 0x341a1a2e 457238384Sjkim .WORD 0x361b1b2d, 0xdc6e6eb2, 0xb45a5aee, 0x5ba0a0fb 458238384Sjkim .WORD 0xa45252f6, 0x763b3b4d, 0xb7d6d661, 0x7db3b3ce 459238384Sjkim .WORD 0x5229297b, 0xdde3e33e, 0x5e2f2f71, 0x13848497 460238384Sjkim .WORD 0xa65353f5, 0xb9d1d168, 0x00000000, 0xc1eded2c 461238384Sjkim .WORD 0x40202060, 0xe3fcfc1f, 0x79b1b1c8, 0xb65b5bed 462238384Sjkim .WORD 0xd46a6abe, 0x8dcbcb46, 0x67bebed9, 0x7239394b 463238384Sjkim .WORD 0x944a4ade, 0x984c4cd4, 0xb05858e8, 0x85cfcf4a 464238384Sjkim .WORD 0xbbd0d06b, 0xc5efef2a, 0x4faaaae5, 0xedfbfb16 465238384Sjkim .WORD 0x864343c5, 0x9a4d4dd7, 0x66333355, 0x11858594 466238384Sjkim .WORD 0x8a4545cf, 0xe9f9f910, 0x04020206, 0xfe7f7f81 467238384Sjkim .WORD 0xa05050f0, 0x783c3c44, 0x259f9fba, 0x4ba8a8e3 468238384Sjkim .WORD 0xa25151f3, 0x5da3a3fe, 0x804040c0, 0x058f8f8a 469238384Sjkim .WORD 0x3f9292ad, 0x219d9dbc, 0x70383848, 0xf1f5f504 470238384Sjkim .WORD 0x63bcbcdf, 0x77b6b6c1, 0xafdada75, 0x42212163 471238384Sjkim .WORD 0x20101030, 0xe5ffff1a, 0xfdf3f30e, 0xbfd2d26d 472238384Sjkim .WORD 0x81cdcd4c, 0x180c0c14, 0x26131335, 0xc3ecec2f 473238384Sjkim .WORD 0xbe5f5fe1, 0x359797a2, 0x884444cc, 0x2e171739 474238384Sjkim .WORD 0x93c4c457, 0x55a7a7f2, 0xfc7e7e82, 0x7a3d3d47 475238384Sjkim .WORD 0xc86464ac, 0xba5d5de7, 0x3219192b, 0xe6737395 476238384Sjkim .WORD 0xc06060a0, 0x19818198, 0x9e4f4fd1, 0xa3dcdc7f 477238384Sjkim .WORD 0x44222266, 0x542a2a7e, 0x3b9090ab, 0x0b888883 478238384Sjkim .WORD 0x8c4646ca, 0xc7eeee29, 0x6bb8b8d3, 0x2814143c 479238384Sjkim .WORD 0xa7dede79, 0xbc5e5ee2, 0x160b0b1d, 0xaddbdb76 480238384Sjkim .WORD 0xdbe0e03b, 0x64323256, 0x743a3a4e, 0x140a0a1e 481238384Sjkim .WORD 0x924949db, 0x0c06060a, 0x4824246c, 0xb85c5ce4 482238384Sjkim .WORD 0x9fc2c25d, 0xbdd3d36e, 0x43acacef, 0xc46262a6 483238384Sjkim .WORD 0x399191a8, 0x319595a4, 0xd3e4e437, 0xf279798b 484238384Sjkim .WORD 0xd5e7e732, 0x8bc8c843, 0x6e373759, 0xda6d6db7 485238384Sjkim .WORD 0x018d8d8c, 0xb1d5d564, 0x9c4e4ed2, 0x49a9a9e0 486238384Sjkim .WORD 0xd86c6cb4, 0xac5656fa, 0xf3f4f407, 0xcfeaea25 487238384Sjkim .WORD 0xca6565af, 0xf47a7a8e, 0x47aeaee9, 0x10080818 488238384Sjkim .WORD 0x6fbabad5, 0xf0787888, 0x4a25256f, 0x5c2e2e72 489238384Sjkim .WORD 0x381c1c24, 0x57a6a6f1, 0x73b4b4c7, 0x97c6c651 490238384Sjkim .WORD 0xcbe8e823, 0xa1dddd7c, 0xe874749c, 0x3e1f1f21 491238384Sjkim .WORD 0x964b4bdd, 0x61bdbddc, 0x0d8b8b86, 0x0f8a8a85 492238384Sjkim .WORD 0xe0707090, 0x7c3e3e42, 0x71b5b5c4, 0xcc6666aa 493238384Sjkim .WORD 0x904848d8, 0x06030305, 0xf7f6f601, 0x1c0e0e12 494238384Sjkim .WORD 0xc26161a3, 0x6a35355f, 0xae5757f9, 0x69b9b9d0 495238384Sjkim .WORD 0x17868691, 0x99c1c158, 0x3a1d1d27, 0x279e9eb9 496238384Sjkim .WORD 0xd9e1e138, 0xebf8f813, 0x2b9898b3, 0x22111133 497238384Sjkim .WORD 0xd26969bb, 0xa9d9d970, 0x078e8e89, 0x339494a7 498238384Sjkim .WORD 0x2d9b9bb6, 0x3c1e1e22, 0x15878792, 0xc9e9e920 499238384Sjkim .WORD 0x87cece49, 0xaa5555ff, 0x50282878, 0xa5dfdf7a 500238384Sjkim .WORD 0x038c8c8f, 0x59a1a1f8, 0x09898980, 0x1a0d0d17 501238384Sjkim .WORD 0x65bfbfda, 0xd7e6e631, 0x844242c6, 0xd06868b8 502238384Sjkim .WORD 0x824141c3, 0x299999b0, 0x5a2d2d77, 0x1e0f0f11 503238384Sjkim .WORD 0x7bb0b0cb, 0xa85454fc, 0x6dbbbbd6, 0x2c16163a 504238384Sjkim .BYTE 0x63, 0x7c, 0x77, 0x7b, 0xf2, 0x6b, 0x6f, 0xc5 505238384Sjkim .BYTE 0x30, 0x01, 0x67, 0x2b, 0xfe, 0xd7, 0xab, 0x76 506238384Sjkim .BYTE 0xca, 0x82, 0xc9, 0x7d, 0xfa, 0x59, 0x47, 0xf0 507238384Sjkim .BYTE 0xad, 0xd4, 0xa2, 0xaf, 0x9c, 0xa4, 0x72, 0xc0 508238384Sjkim .BYTE 0xb7, 0xfd, 0x93, 0x26, 0x36, 0x3f, 0xf7, 0xcc 509238384Sjkim .BYTE 0x34, 0xa5, 0xe5, 0xf1, 0x71, 0xd8, 0x31, 0x15 510238384Sjkim .BYTE 0x04, 0xc7, 0x23, 0xc3, 0x18, 0x96, 0x05, 0x9a 511238384Sjkim .BYTE 0x07, 0x12, 0x80, 0xe2, 0xeb, 0x27, 0xb2, 0x75 512238384Sjkim .BYTE 0x09, 0x83, 0x2c, 0x1a, 0x1b, 0x6e, 0x5a, 0xa0 513238384Sjkim .BYTE 0x52, 0x3b, 0xd6, 0xb3, 0x29, 0xe3, 0x2f, 0x84 514238384Sjkim .BYTE 0x53, 0xd1, 0x00, 0xed, 0x20, 0xfc, 0xb1, 0x5b 515238384Sjkim .BYTE 0x6a, 0xcb, 0xbe, 0x39, 0x4a, 0x4c, 0x58, 0xcf 516238384Sjkim .BYTE 0xd0, 0xef, 0xaa, 0xfb, 0x43, 0x4d, 0x33, 0x85 517238384Sjkim .BYTE 0x45, 0xf9, 0x02, 0x7f, 0x50, 0x3c, 0x9f, 0xa8 518238384Sjkim .BYTE 0x51, 0xa3, 0x40, 0x8f, 0x92, 0x9d, 0x38, 0xf5 519238384Sjkim .BYTE 0xbc, 0xb6, 0xda, 0x21, 0x10, 0xff, 0xf3, 0xd2 520238384Sjkim .BYTE 0xcd, 0x0c, 0x13, 0xec, 0x5f, 0x97, 0x44, 0x17 521238384Sjkim .BYTE 0xc4, 0xa7, 0x7e, 0x3d, 0x64, 0x5d, 0x19, 0x73 522238384Sjkim .BYTE 0x60, 0x81, 0x4f, 0xdc, 0x22, 0x2a, 0x90, 0x88 523238384Sjkim .BYTE 0x46, 0xee, 0xb8, 0x14, 0xde, 0x5e, 0x0b, 0xdb 524238384Sjkim .BYTE 0xe0, 0x32, 0x3a, 0x0a, 0x49, 0x06, 0x24, 0x5c 525238384Sjkim .BYTE 0xc2, 0xd3, 0xac, 0x62, 0x91, 0x95, 0xe4, 0x79 526238384Sjkim .BYTE 0xe7, 0xc8, 0x37, 0x6d, 0x8d, 0xd5, 0x4e, 0xa9 527238384Sjkim .BYTE 0x6c, 0x56, 0xf4, 0xea, 0x65, 0x7a, 0xae, 0x08 528238384Sjkim .BYTE 0xba, 0x78, 0x25, 0x2e, 0x1c, 0xa6, 0xb4, 0xc6 529238384Sjkim .BYTE 0xe8, 0xdd, 0x74, 0x1f, 0x4b, 0xbd, 0x8b, 0x8a 530238384Sjkim .BYTE 0x70, 0x3e, 0xb5, 0x66, 0x48, 0x03, 0xf6, 0x0e 531238384Sjkim .BYTE 0x61, 0x35, 0x57, 0xb9, 0x86, 0xc1, 0x1d, 0x9e 532238384Sjkim .BYTE 0xe1, 0xf8, 0x98, 0x11, 0x69, 0xd9, 0x8e, 0x94 533238384Sjkim .BYTE 0x9b, 0x1e, 0x87, 0xe9, 0xce, 0x55, 0x28, 0xdf 534238384Sjkim .BYTE 0x8c, 0xa1, 0x89, 0x0d, 0xbf, 0xe6, 0x42, 0x68 535238384Sjkim .BYTE 0x41, 0x99, 0x2d, 0x0f, 0xb0, 0x54, 0xbb, 0x16 536238384Sjkim___ 537238384Sjkim 538238384Sjkim$code.=<<___; 539238384Sjkim .EXPORT AES_decrypt,ENTRY,ARGW0=GR,ARGW1=GR,ARGW2=GR 540238384Sjkim .ALIGN 16 541238384SjkimAES_decrypt 542238384Sjkim .PROC 543238384Sjkim .CALLINFO FRAME=`$FRAME-16*$SIZE_T`,NO_CALLS,SAVE_RP,ENTRY_GR=18 544238384Sjkim .ENTRY 545238384Sjkim $PUSH %r2,-$SAVED_RP(%sp) ; standard prologue 546238384Sjkim $PUSHMA %r3,$FRAME(%sp) 547238384Sjkim $PUSH %r4,`-$FRAME+1*$SIZE_T`(%sp) 548238384Sjkim $PUSH %r5,`-$FRAME+2*$SIZE_T`(%sp) 549238384Sjkim $PUSH %r6,`-$FRAME+3*$SIZE_T`(%sp) 550238384Sjkim $PUSH %r7,`-$FRAME+4*$SIZE_T`(%sp) 551238384Sjkim $PUSH %r8,`-$FRAME+5*$SIZE_T`(%sp) 552238384Sjkim $PUSH %r9,`-$FRAME+6*$SIZE_T`(%sp) 553238384Sjkim $PUSH %r10,`-$FRAME+7*$SIZE_T`(%sp) 554238384Sjkim $PUSH %r11,`-$FRAME+8*$SIZE_T`(%sp) 555238384Sjkim $PUSH %r12,`-$FRAME+9*$SIZE_T`(%sp) 556238384Sjkim $PUSH %r13,`-$FRAME+10*$SIZE_T`(%sp) 557238384Sjkim $PUSH %r14,`-$FRAME+11*$SIZE_T`(%sp) 558238384Sjkim $PUSH %r15,`-$FRAME+12*$SIZE_T`(%sp) 559238384Sjkim $PUSH %r16,`-$FRAME+13*$SIZE_T`(%sp) 560238384Sjkim $PUSH %r17,`-$FRAME+14*$SIZE_T`(%sp) 561238384Sjkim $PUSH %r18,`-$FRAME+15*$SIZE_T`(%sp) 562238384Sjkim 563238384Sjkim blr %r0,$tbl 564238384Sjkim ldi 3,$t0 565238384SjkimL\$dec_pic 566238384Sjkim andcm $tbl,$t0,$tbl 567238384Sjkim ldo L\$AES_Td-L\$dec_pic($tbl),$tbl 568238384Sjkim 569238384Sjkim and $inp,$t0,$t0 570238384Sjkim sub $inp,$t0,$inp 571238384Sjkim ldw 0($inp),$s0 572238384Sjkim ldw 4($inp),$s1 573238384Sjkim ldw 8($inp),$s2 574238384Sjkim comib,= 0,$t0,L\$dec_inp_aligned 575238384Sjkim ldw 12($inp),$s3 576238384Sjkim 577238384Sjkim sh3addl $t0,%r0,$t0 578238384Sjkim subi 32,$t0,$t0 579238384Sjkim mtctl $t0,%cr11 580238384Sjkim ldw 16($inp),$t1 581238384Sjkim vshd $s0,$s1,$s0 582238384Sjkim vshd $s1,$s2,$s1 583238384Sjkim vshd $s2,$s3,$s2 584238384Sjkim vshd $s3,$t1,$s3 585238384Sjkim 586238384SjkimL\$dec_inp_aligned 587238384Sjkim bl _parisc_AES_decrypt,%r31 588238384Sjkim nop 589238384Sjkim 590238384Sjkim extru,<> $out,31,2,%r0 591238384Sjkim b L\$dec_out_aligned 592238384Sjkim nop 593238384Sjkim 594238384Sjkim _srm $s0,24,$acc0 595238384Sjkim _srm $s0,16,$acc1 596238384Sjkim stb $acc0,0($out) 597238384Sjkim _srm $s0,8,$acc2 598238384Sjkim stb $acc1,1($out) 599238384Sjkim _srm $s1,24,$acc4 600238384Sjkim stb $acc2,2($out) 601238384Sjkim _srm $s1,16,$acc5 602238384Sjkim stb $s0,3($out) 603238384Sjkim _srm $s1,8,$acc6 604238384Sjkim stb $acc4,4($out) 605238384Sjkim _srm $s2,24,$acc0 606238384Sjkim stb $acc5,5($out) 607238384Sjkim _srm $s2,16,$acc1 608238384Sjkim stb $acc6,6($out) 609238384Sjkim _srm $s2,8,$acc2 610238384Sjkim stb $s1,7($out) 611238384Sjkim _srm $s3,24,$acc4 612238384Sjkim stb $acc0,8($out) 613238384Sjkim _srm $s3,16,$acc5 614238384Sjkim stb $acc1,9($out) 615238384Sjkim _srm $s3,8,$acc6 616238384Sjkim stb $acc2,10($out) 617238384Sjkim stb $s2,11($out) 618238384Sjkim stb $acc4,12($out) 619238384Sjkim stb $acc5,13($out) 620238384Sjkim stb $acc6,14($out) 621238384Sjkim b L\$dec_done 622238384Sjkim stb $s3,15($out) 623238384Sjkim 624238384SjkimL\$dec_out_aligned 625238384Sjkim stw $s0,0($out) 626238384Sjkim stw $s1,4($out) 627238384Sjkim stw $s2,8($out) 628238384Sjkim stw $s3,12($out) 629238384Sjkim 630238384SjkimL\$dec_done 631238384Sjkim $POP `-$FRAME-$SAVED_RP`(%sp),%r2 ; standard epilogue 632238384Sjkim $POP `-$FRAME+1*$SIZE_T`(%sp),%r4 633238384Sjkim $POP `-$FRAME+2*$SIZE_T`(%sp),%r5 634238384Sjkim $POP `-$FRAME+3*$SIZE_T`(%sp),%r6 635238384Sjkim $POP `-$FRAME+4*$SIZE_T`(%sp),%r7 636238384Sjkim $POP `-$FRAME+5*$SIZE_T`(%sp),%r8 637238384Sjkim $POP `-$FRAME+6*$SIZE_T`(%sp),%r9 638238384Sjkim $POP `-$FRAME+7*$SIZE_T`(%sp),%r10 639238384Sjkim $POP `-$FRAME+8*$SIZE_T`(%sp),%r11 640238384Sjkim $POP `-$FRAME+9*$SIZE_T`(%sp),%r12 641238384Sjkim $POP `-$FRAME+10*$SIZE_T`(%sp),%r13 642238384Sjkim $POP `-$FRAME+11*$SIZE_T`(%sp),%r14 643238384Sjkim $POP `-$FRAME+12*$SIZE_T`(%sp),%r15 644238384Sjkim $POP `-$FRAME+13*$SIZE_T`(%sp),%r16 645238384Sjkim $POP `-$FRAME+14*$SIZE_T`(%sp),%r17 646238384Sjkim $POP `-$FRAME+15*$SIZE_T`(%sp),%r18 647238384Sjkim bv (%r2) 648238384Sjkim .EXIT 649238384Sjkim $POPMB -$FRAME(%sp),%r3 650238384Sjkim .PROCEND 651238384Sjkim 652238384Sjkim .ALIGN 16 653238384Sjkim_parisc_AES_decrypt 654238384Sjkim .PROC 655238384Sjkim .CALLINFO MILLICODE 656238384Sjkim .ENTRY 657238384Sjkim ldw 240($key),$rounds 658238384Sjkim ldw 0($key),$t0 659238384Sjkim ldw 4($key),$t1 660238384Sjkim ldw 8($key),$t2 661238384Sjkim ldw 12($key),$t3 662238384Sjkim _srm $rounds,1,$rounds 663238384Sjkim xor $t0,$s0,$s0 664238384Sjkim ldw 16($key),$t0 665238384Sjkim xor $t1,$s1,$s1 666238384Sjkim ldw 20($key),$t1 667238384Sjkim _srm $s0,24,$acc0 668238384Sjkim xor $t2,$s2,$s2 669238384Sjkim ldw 24($key),$t2 670238384Sjkim xor $t3,$s3,$s3 671238384Sjkim ldw 28($key),$t3 672238384Sjkim _srm $s3,16,$acc1 673238384SjkimL\$dec_loop 674238384Sjkim _srm $s2,8,$acc2 675238384Sjkim ldwx,s $acc0($tbl),$acc0 676238384Sjkim _srm $s1,0,$acc3 677238384Sjkim ldwx,s $acc1($tbl),$acc1 678238384Sjkim _srm $s1,24,$acc4 679238384Sjkim ldwx,s $acc2($tbl),$acc2 680238384Sjkim _srm $s0,16,$acc5 681238384Sjkim ldwx,s $acc3($tbl),$acc3 682238384Sjkim _srm $s3,8,$acc6 683238384Sjkim ldwx,s $acc4($tbl),$acc4 684238384Sjkim _srm $s2,0,$acc7 685238384Sjkim ldwx,s $acc5($tbl),$acc5 686238384Sjkim _srm $s2,24,$acc8 687238384Sjkim ldwx,s $acc6($tbl),$acc6 688238384Sjkim _srm $s1,16,$acc9 689238384Sjkim ldwx,s $acc7($tbl),$acc7 690238384Sjkim _srm $s0,8,$acc10 691238384Sjkim ldwx,s $acc8($tbl),$acc8 692238384Sjkim _srm $s3,0,$acc11 693238384Sjkim ldwx,s $acc9($tbl),$acc9 694238384Sjkim _srm $s3,24,$acc12 695238384Sjkim ldwx,s $acc10($tbl),$acc10 696238384Sjkim _srm $s2,16,$acc13 697238384Sjkim ldwx,s $acc11($tbl),$acc11 698238384Sjkim _srm $s1,8,$acc14 699238384Sjkim ldwx,s $acc12($tbl),$acc12 700238384Sjkim _srm $s0,0,$acc15 701238384Sjkim ldwx,s $acc13($tbl),$acc13 702238384Sjkim ldwx,s $acc14($tbl),$acc14 703238384Sjkim ldwx,s $acc15($tbl),$acc15 704238384Sjkim addib,= -1,$rounds,L\$dec_last 705238384Sjkim ldo 32($key),$key 706238384Sjkim 707238384Sjkim _ror $acc1,8,$acc1 708238384Sjkim xor $acc0,$t0,$t0 709238384Sjkim ldw 0($key),$s0 710238384Sjkim _ror $acc2,16,$acc2 711238384Sjkim xor $acc1,$t0,$t0 712238384Sjkim ldw 4($key),$s1 713238384Sjkim _ror $acc3,24,$acc3 714238384Sjkim xor $acc2,$t0,$t0 715238384Sjkim ldw 8($key),$s2 716238384Sjkim _ror $acc5,8,$acc5 717238384Sjkim xor $acc3,$t0,$t0 718238384Sjkim ldw 12($key),$s3 719238384Sjkim _ror $acc6,16,$acc6 720238384Sjkim xor $acc4,$t1,$t1 721238384Sjkim _ror $acc7,24,$acc7 722238384Sjkim xor $acc5,$t1,$t1 723238384Sjkim _ror $acc9,8,$acc9 724238384Sjkim xor $acc6,$t1,$t1 725238384Sjkim _ror $acc10,16,$acc10 726238384Sjkim xor $acc7,$t1,$t1 727238384Sjkim _ror $acc11,24,$acc11 728238384Sjkim xor $acc8,$t2,$t2 729238384Sjkim _ror $acc13,8,$acc13 730238384Sjkim xor $acc9,$t2,$t2 731238384Sjkim _ror $acc14,16,$acc14 732238384Sjkim xor $acc10,$t2,$t2 733238384Sjkim _ror $acc15,24,$acc15 734238384Sjkim xor $acc11,$t2,$t2 735238384Sjkim xor $acc12,$acc14,$acc14 736238384Sjkim xor $acc13,$t3,$t3 737238384Sjkim _srm $t0,24,$acc0 738238384Sjkim xor $acc14,$t3,$t3 739238384Sjkim xor $acc15,$t3,$t3 740238384Sjkim _srm $t3,16,$acc1 741238384Sjkim 742238384Sjkim _srm $t2,8,$acc2 743238384Sjkim ldwx,s $acc0($tbl),$acc0 744238384Sjkim _srm $t1,0,$acc3 745238384Sjkim ldwx,s $acc1($tbl),$acc1 746238384Sjkim _srm $t1,24,$acc4 747238384Sjkim ldwx,s $acc2($tbl),$acc2 748238384Sjkim _srm $t0,16,$acc5 749238384Sjkim ldwx,s $acc3($tbl),$acc3 750238384Sjkim _srm $t3,8,$acc6 751238384Sjkim ldwx,s $acc4($tbl),$acc4 752238384Sjkim _srm $t2,0,$acc7 753238384Sjkim ldwx,s $acc5($tbl),$acc5 754238384Sjkim _srm $t2,24,$acc8 755238384Sjkim ldwx,s $acc6($tbl),$acc6 756238384Sjkim _srm $t1,16,$acc9 757238384Sjkim ldwx,s $acc7($tbl),$acc7 758238384Sjkim _srm $t0,8,$acc10 759238384Sjkim ldwx,s $acc8($tbl),$acc8 760238384Sjkim _srm $t3,0,$acc11 761238384Sjkim ldwx,s $acc9($tbl),$acc9 762238384Sjkim _srm $t3,24,$acc12 763238384Sjkim ldwx,s $acc10($tbl),$acc10 764238384Sjkim _srm $t2,16,$acc13 765238384Sjkim ldwx,s $acc11($tbl),$acc11 766238384Sjkim _srm $t1,8,$acc14 767238384Sjkim ldwx,s $acc12($tbl),$acc12 768238384Sjkim _srm $t0,0,$acc15 769238384Sjkim ldwx,s $acc13($tbl),$acc13 770238384Sjkim _ror $acc1,8,$acc1 771238384Sjkim ldwx,s $acc14($tbl),$acc14 772238384Sjkim 773238384Sjkim _ror $acc2,16,$acc2 774238384Sjkim xor $acc0,$s0,$s0 775238384Sjkim ldwx,s $acc15($tbl),$acc15 776238384Sjkim _ror $acc3,24,$acc3 777238384Sjkim xor $acc1,$s0,$s0 778238384Sjkim ldw 16($key),$t0 779238384Sjkim _ror $acc5,8,$acc5 780238384Sjkim xor $acc2,$s0,$s0 781238384Sjkim ldw 20($key),$t1 782238384Sjkim _ror $acc6,16,$acc6 783238384Sjkim xor $acc3,$s0,$s0 784238384Sjkim ldw 24($key),$t2 785238384Sjkim _ror $acc7,24,$acc7 786238384Sjkim xor $acc4,$s1,$s1 787238384Sjkim ldw 28($key),$t3 788238384Sjkim _ror $acc9,8,$acc9 789238384Sjkim xor $acc5,$s1,$s1 790238384Sjkim ldw 1024+0($tbl),%r0 ; prefetch td4 791238384Sjkim _ror $acc10,16,$acc10 792238384Sjkim xor $acc6,$s1,$s1 793238384Sjkim ldw 1024+32($tbl),%r0 ; prefetch td4 794238384Sjkim _ror $acc11,24,$acc11 795238384Sjkim xor $acc7,$s1,$s1 796238384Sjkim ldw 1024+64($tbl),%r0 ; prefetch td4 797238384Sjkim _ror $acc13,8,$acc13 798238384Sjkim xor $acc8,$s2,$s2 799238384Sjkim ldw 1024+96($tbl),%r0 ; prefetch td4 800238384Sjkim _ror $acc14,16,$acc14 801238384Sjkim xor $acc9,$s2,$s2 802238384Sjkim ldw 1024+128($tbl),%r0 ; prefetch td4 803238384Sjkim _ror $acc15,24,$acc15 804238384Sjkim xor $acc10,$s2,$s2 805238384Sjkim ldw 1024+160($tbl),%r0 ; prefetch td4 806238384Sjkim _srm $s0,24,$acc0 807238384Sjkim xor $acc11,$s2,$s2 808238384Sjkim ldw 1024+192($tbl),%r0 ; prefetch td4 809238384Sjkim xor $acc12,$acc14,$acc14 810238384Sjkim xor $acc13,$s3,$s3 811238384Sjkim ldw 1024+224($tbl),%r0 ; prefetch td4 812238384Sjkim xor $acc14,$s3,$s3 813238384Sjkim xor $acc15,$s3,$s3 814238384Sjkim b L\$dec_loop 815238384Sjkim _srm $s3,16,$acc1 816238384Sjkim 817238384Sjkim .ALIGN 16 818238384SjkimL\$dec_last 819238384Sjkim ldo 1024($tbl),$rounds 820238384Sjkim _ror $acc1,8,$acc1 821238384Sjkim xor $acc0,$t0,$t0 822238384Sjkim ldw 0($key),$s0 823238384Sjkim _ror $acc2,16,$acc2 824238384Sjkim xor $acc1,$t0,$t0 825238384Sjkim ldw 4($key),$s1 826238384Sjkim _ror $acc3,24,$acc3 827238384Sjkim xor $acc2,$t0,$t0 828238384Sjkim ldw 8($key),$s2 829238384Sjkim _ror $acc5,8,$acc5 830238384Sjkim xor $acc3,$t0,$t0 831238384Sjkim ldw 12($key),$s3 832238384Sjkim _ror $acc6,16,$acc6 833238384Sjkim xor $acc4,$t1,$t1 834238384Sjkim _ror $acc7,24,$acc7 835238384Sjkim xor $acc5,$t1,$t1 836238384Sjkim _ror $acc9,8,$acc9 837238384Sjkim xor $acc6,$t1,$t1 838238384Sjkim _ror $acc10,16,$acc10 839238384Sjkim xor $acc7,$t1,$t1 840238384Sjkim _ror $acc11,24,$acc11 841238384Sjkim xor $acc8,$t2,$t2 842238384Sjkim _ror $acc13,8,$acc13 843238384Sjkim xor $acc9,$t2,$t2 844238384Sjkim _ror $acc14,16,$acc14 845238384Sjkim xor $acc10,$t2,$t2 846238384Sjkim _ror $acc15,24,$acc15 847238384Sjkim xor $acc11,$t2,$t2 848238384Sjkim xor $acc12,$acc14,$acc14 849238384Sjkim xor $acc13,$t3,$t3 850238384Sjkim _srm $t0,24,$acc0 851238384Sjkim xor $acc14,$t3,$t3 852238384Sjkim xor $acc15,$t3,$t3 853238384Sjkim _srm $t3,16,$acc1 854238384Sjkim 855238384Sjkim _srm $t2,8,$acc2 856238384Sjkim ldbx $acc0($rounds),$acc0 857238384Sjkim _srm $t1,24,$acc4 858238384Sjkim ldbx $acc1($rounds),$acc1 859238384Sjkim _srm $t0,16,$acc5 860238384Sjkim _srm $t1,0,$acc3 861238384Sjkim ldbx $acc2($rounds),$acc2 862238384Sjkim ldbx $acc3($rounds),$acc3 863238384Sjkim _srm $t3,8,$acc6 864238384Sjkim ldbx $acc4($rounds),$acc4 865238384Sjkim _srm $t2,24,$acc8 866238384Sjkim ldbx $acc5($rounds),$acc5 867238384Sjkim _srm $t1,16,$acc9 868238384Sjkim _srm $t2,0,$acc7 869238384Sjkim ldbx $acc6($rounds),$acc6 870238384Sjkim ldbx $acc7($rounds),$acc7 871238384Sjkim _srm $t0,8,$acc10 872238384Sjkim ldbx $acc8($rounds),$acc8 873238384Sjkim _srm $t3,24,$acc12 874238384Sjkim ldbx $acc9($rounds),$acc9 875238384Sjkim _srm $t2,16,$acc13 876238384Sjkim _srm $t3,0,$acc11 877238384Sjkim ldbx $acc10($rounds),$acc10 878238384Sjkim _srm $t1,8,$acc14 879238384Sjkim ldbx $acc11($rounds),$acc11 880238384Sjkim ldbx $acc12($rounds),$acc12 881238384Sjkim ldbx $acc13($rounds),$acc13 882238384Sjkim _srm $t0,0,$acc15 883238384Sjkim ldbx $acc14($rounds),$acc14 884238384Sjkim 885238384Sjkim dep $acc0,7,8,$acc3 886238384Sjkim ldbx $acc15($rounds),$acc15 887238384Sjkim dep $acc4,7,8,$acc7 888238384Sjkim dep $acc1,15,8,$acc3 889238384Sjkim dep $acc5,15,8,$acc7 890238384Sjkim dep $acc2,23,8,$acc3 891238384Sjkim dep $acc6,23,8,$acc7 892238384Sjkim xor $acc3,$s0,$s0 893238384Sjkim xor $acc7,$s1,$s1 894238384Sjkim dep $acc8,7,8,$acc11 895238384Sjkim dep $acc12,7,8,$acc15 896238384Sjkim dep $acc9,15,8,$acc11 897238384Sjkim dep $acc13,15,8,$acc15 898238384Sjkim dep $acc10,23,8,$acc11 899238384Sjkim dep $acc14,23,8,$acc15 900238384Sjkim xor $acc11,$s2,$s2 901238384Sjkim 902238384Sjkim bv (%r31) 903238384Sjkim .EXIT 904238384Sjkim xor $acc15,$s3,$s3 905238384Sjkim .PROCEND 906238384Sjkim 907238384Sjkim .ALIGN 64 908238384SjkimL\$AES_Td 909238384Sjkim .WORD 0x51f4a750, 0x7e416553, 0x1a17a4c3, 0x3a275e96 910238384Sjkim .WORD 0x3bab6bcb, 0x1f9d45f1, 0xacfa58ab, 0x4be30393 911238384Sjkim .WORD 0x2030fa55, 0xad766df6, 0x88cc7691, 0xf5024c25 912238384Sjkim .WORD 0x4fe5d7fc, 0xc52acbd7, 0x26354480, 0xb562a38f 913238384Sjkim .WORD 0xdeb15a49, 0x25ba1b67, 0x45ea0e98, 0x5dfec0e1 914238384Sjkim .WORD 0xc32f7502, 0x814cf012, 0x8d4697a3, 0x6bd3f9c6 915238384Sjkim .WORD 0x038f5fe7, 0x15929c95, 0xbf6d7aeb, 0x955259da 916238384Sjkim .WORD 0xd4be832d, 0x587421d3, 0x49e06929, 0x8ec9c844 917238384Sjkim .WORD 0x75c2896a, 0xf48e7978, 0x99583e6b, 0x27b971dd 918238384Sjkim .WORD 0xbee14fb6, 0xf088ad17, 0xc920ac66, 0x7dce3ab4 919238384Sjkim .WORD 0x63df4a18, 0xe51a3182, 0x97513360, 0x62537f45 920238384Sjkim .WORD 0xb16477e0, 0xbb6bae84, 0xfe81a01c, 0xf9082b94 921238384Sjkim .WORD 0x70486858, 0x8f45fd19, 0x94de6c87, 0x527bf8b7 922238384Sjkim .WORD 0xab73d323, 0x724b02e2, 0xe31f8f57, 0x6655ab2a 923238384Sjkim .WORD 0xb2eb2807, 0x2fb5c203, 0x86c57b9a, 0xd33708a5 924238384Sjkim .WORD 0x302887f2, 0x23bfa5b2, 0x02036aba, 0xed16825c 925238384Sjkim .WORD 0x8acf1c2b, 0xa779b492, 0xf307f2f0, 0x4e69e2a1 926238384Sjkim .WORD 0x65daf4cd, 0x0605bed5, 0xd134621f, 0xc4a6fe8a 927238384Sjkim .WORD 0x342e539d, 0xa2f355a0, 0x058ae132, 0xa4f6eb75 928238384Sjkim .WORD 0x0b83ec39, 0x4060efaa, 0x5e719f06, 0xbd6e1051 929238384Sjkim .WORD 0x3e218af9, 0x96dd063d, 0xdd3e05ae, 0x4de6bd46 930238384Sjkim .WORD 0x91548db5, 0x71c45d05, 0x0406d46f, 0x605015ff 931238384Sjkim .WORD 0x1998fb24, 0xd6bde997, 0x894043cc, 0x67d99e77 932238384Sjkim .WORD 0xb0e842bd, 0x07898b88, 0xe7195b38, 0x79c8eedb 933238384Sjkim .WORD 0xa17c0a47, 0x7c420fe9, 0xf8841ec9, 0x00000000 934238384Sjkim .WORD 0x09808683, 0x322bed48, 0x1e1170ac, 0x6c5a724e 935238384Sjkim .WORD 0xfd0efffb, 0x0f853856, 0x3daed51e, 0x362d3927 936238384Sjkim .WORD 0x0a0fd964, 0x685ca621, 0x9b5b54d1, 0x24362e3a 937238384Sjkim .WORD 0x0c0a67b1, 0x9357e70f, 0xb4ee96d2, 0x1b9b919e 938238384Sjkim .WORD 0x80c0c54f, 0x61dc20a2, 0x5a774b69, 0x1c121a16 939238384Sjkim .WORD 0xe293ba0a, 0xc0a02ae5, 0x3c22e043, 0x121b171d 940238384Sjkim .WORD 0x0e090d0b, 0xf28bc7ad, 0x2db6a8b9, 0x141ea9c8 941238384Sjkim .WORD 0x57f11985, 0xaf75074c, 0xee99ddbb, 0xa37f60fd 942238384Sjkim .WORD 0xf701269f, 0x5c72f5bc, 0x44663bc5, 0x5bfb7e34 943238384Sjkim .WORD 0x8b432976, 0xcb23c6dc, 0xb6edfc68, 0xb8e4f163 944238384Sjkim .WORD 0xd731dcca, 0x42638510, 0x13972240, 0x84c61120 945238384Sjkim .WORD 0x854a247d, 0xd2bb3df8, 0xaef93211, 0xc729a16d 946238384Sjkim .WORD 0x1d9e2f4b, 0xdcb230f3, 0x0d8652ec, 0x77c1e3d0 947238384Sjkim .WORD 0x2bb3166c, 0xa970b999, 0x119448fa, 0x47e96422 948238384Sjkim .WORD 0xa8fc8cc4, 0xa0f03f1a, 0x567d2cd8, 0x223390ef 949238384Sjkim .WORD 0x87494ec7, 0xd938d1c1, 0x8ccaa2fe, 0x98d40b36 950238384Sjkim .WORD 0xa6f581cf, 0xa57ade28, 0xdab78e26, 0x3fadbfa4 951238384Sjkim .WORD 0x2c3a9de4, 0x5078920d, 0x6a5fcc9b, 0x547e4662 952238384Sjkim .WORD 0xf68d13c2, 0x90d8b8e8, 0x2e39f75e, 0x82c3aff5 953238384Sjkim .WORD 0x9f5d80be, 0x69d0937c, 0x6fd52da9, 0xcf2512b3 954238384Sjkim .WORD 0xc8ac993b, 0x10187da7, 0xe89c636e, 0xdb3bbb7b 955238384Sjkim .WORD 0xcd267809, 0x6e5918f4, 0xec9ab701, 0x834f9aa8 956238384Sjkim .WORD 0xe6956e65, 0xaaffe67e, 0x21bccf08, 0xef15e8e6 957238384Sjkim .WORD 0xbae79bd9, 0x4a6f36ce, 0xea9f09d4, 0x29b07cd6 958238384Sjkim .WORD 0x31a4b2af, 0x2a3f2331, 0xc6a59430, 0x35a266c0 959238384Sjkim .WORD 0x744ebc37, 0xfc82caa6, 0xe090d0b0, 0x33a7d815 960238384Sjkim .WORD 0xf104984a, 0x41ecdaf7, 0x7fcd500e, 0x1791f62f 961238384Sjkim .WORD 0x764dd68d, 0x43efb04d, 0xccaa4d54, 0xe49604df 962238384Sjkim .WORD 0x9ed1b5e3, 0x4c6a881b, 0xc12c1fb8, 0x4665517f 963238384Sjkim .WORD 0x9d5eea04, 0x018c355d, 0xfa877473, 0xfb0b412e 964238384Sjkim .WORD 0xb3671d5a, 0x92dbd252, 0xe9105633, 0x6dd64713 965238384Sjkim .WORD 0x9ad7618c, 0x37a10c7a, 0x59f8148e, 0xeb133c89 966238384Sjkim .WORD 0xcea927ee, 0xb761c935, 0xe11ce5ed, 0x7a47b13c 967238384Sjkim .WORD 0x9cd2df59, 0x55f2733f, 0x1814ce79, 0x73c737bf 968238384Sjkim .WORD 0x53f7cdea, 0x5ffdaa5b, 0xdf3d6f14, 0x7844db86 969238384Sjkim .WORD 0xcaaff381, 0xb968c43e, 0x3824342c, 0xc2a3405f 970238384Sjkim .WORD 0x161dc372, 0xbce2250c, 0x283c498b, 0xff0d9541 971238384Sjkim .WORD 0x39a80171, 0x080cb3de, 0xd8b4e49c, 0x6456c190 972238384Sjkim .WORD 0x7bcb8461, 0xd532b670, 0x486c5c74, 0xd0b85742 973238384Sjkim .BYTE 0x52, 0x09, 0x6a, 0xd5, 0x30, 0x36, 0xa5, 0x38 974238384Sjkim .BYTE 0xbf, 0x40, 0xa3, 0x9e, 0x81, 0xf3, 0xd7, 0xfb 975238384Sjkim .BYTE 0x7c, 0xe3, 0x39, 0x82, 0x9b, 0x2f, 0xff, 0x87 976238384Sjkim .BYTE 0x34, 0x8e, 0x43, 0x44, 0xc4, 0xde, 0xe9, 0xcb 977238384Sjkim .BYTE 0x54, 0x7b, 0x94, 0x32, 0xa6, 0xc2, 0x23, 0x3d 978238384Sjkim .BYTE 0xee, 0x4c, 0x95, 0x0b, 0x42, 0xfa, 0xc3, 0x4e 979238384Sjkim .BYTE 0x08, 0x2e, 0xa1, 0x66, 0x28, 0xd9, 0x24, 0xb2 980238384Sjkim .BYTE 0x76, 0x5b, 0xa2, 0x49, 0x6d, 0x8b, 0xd1, 0x25 981238384Sjkim .BYTE 0x72, 0xf8, 0xf6, 0x64, 0x86, 0x68, 0x98, 0x16 982238384Sjkim .BYTE 0xd4, 0xa4, 0x5c, 0xcc, 0x5d, 0x65, 0xb6, 0x92 983238384Sjkim .BYTE 0x6c, 0x70, 0x48, 0x50, 0xfd, 0xed, 0xb9, 0xda 984238384Sjkim .BYTE 0x5e, 0x15, 0x46, 0x57, 0xa7, 0x8d, 0x9d, 0x84 985238384Sjkim .BYTE 0x90, 0xd8, 0xab, 0x00, 0x8c, 0xbc, 0xd3, 0x0a 986238384Sjkim .BYTE 0xf7, 0xe4, 0x58, 0x05, 0xb8, 0xb3, 0x45, 0x06 987238384Sjkim .BYTE 0xd0, 0x2c, 0x1e, 0x8f, 0xca, 0x3f, 0x0f, 0x02 988238384Sjkim .BYTE 0xc1, 0xaf, 0xbd, 0x03, 0x01, 0x13, 0x8a, 0x6b 989238384Sjkim .BYTE 0x3a, 0x91, 0x11, 0x41, 0x4f, 0x67, 0xdc, 0xea 990238384Sjkim .BYTE 0x97, 0xf2, 0xcf, 0xce, 0xf0, 0xb4, 0xe6, 0x73 991238384Sjkim .BYTE 0x96, 0xac, 0x74, 0x22, 0xe7, 0xad, 0x35, 0x85 992238384Sjkim .BYTE 0xe2, 0xf9, 0x37, 0xe8, 0x1c, 0x75, 0xdf, 0x6e 993238384Sjkim .BYTE 0x47, 0xf1, 0x1a, 0x71, 0x1d, 0x29, 0xc5, 0x89 994238384Sjkim .BYTE 0x6f, 0xb7, 0x62, 0x0e, 0xaa, 0x18, 0xbe, 0x1b 995238384Sjkim .BYTE 0xfc, 0x56, 0x3e, 0x4b, 0xc6, 0xd2, 0x79, 0x20 996238384Sjkim .BYTE 0x9a, 0xdb, 0xc0, 0xfe, 0x78, 0xcd, 0x5a, 0xf4 997238384Sjkim .BYTE 0x1f, 0xdd, 0xa8, 0x33, 0x88, 0x07, 0xc7, 0x31 998238384Sjkim .BYTE 0xb1, 0x12, 0x10, 0x59, 0x27, 0x80, 0xec, 0x5f 999238384Sjkim .BYTE 0x60, 0x51, 0x7f, 0xa9, 0x19, 0xb5, 0x4a, 0x0d 1000238384Sjkim .BYTE 0x2d, 0xe5, 0x7a, 0x9f, 0x93, 0xc9, 0x9c, 0xef 1001238384Sjkim .BYTE 0xa0, 0xe0, 0x3b, 0x4d, 0xae, 0x2a, 0xf5, 0xb0 1002238384Sjkim .BYTE 0xc8, 0xeb, 0xbb, 0x3c, 0x83, 0x53, 0x99, 0x61 1003238384Sjkim .BYTE 0x17, 0x2b, 0x04, 0x7e, 0xba, 0x77, 0xd6, 0x26 1004238384Sjkim .BYTE 0xe1, 0x69, 0x14, 0x63, 0x55, 0x21, 0x0c, 0x7d 1005238384Sjkim .STRINGZ "AES for PA-RISC, CRYPTOGAMS by <appro\@openssl.org>" 1006238384Sjkim___ 1007238384Sjkim 1008238384Sjkimforeach (split("\n",$code)) { 1009238384Sjkim s/\`([^\`]*)\`/eval $1/ge; 1010238384Sjkim 1011238384Sjkim # translate made up instructons: _ror, _srm 1012238384Sjkim s/_ror(\s+)(%r[0-9]+),/shd$1$2,$2,/ or 1013238384Sjkim 1014238384Sjkim s/_srm(\s+%r[0-9]+),([0-9]+),/ 1015238384Sjkim $SIZE_T==4 ? sprintf("extru%s,%d,8,",$1,31-$2) 1016238384Sjkim : sprintf("extrd,u%s,%d,8,",$1,63-$2)/e; 1017238384Sjkim 1018261037Sjkim s/,\*/,/ if ($SIZE_T==4); 1019261037Sjkim s/\bbv\b(.*\(%r2\))/bve$1/ if ($SIZE_T==8); 1020238384Sjkim print $_,"\n"; 1021238384Sjkim} 1022238384Sjkimclose STDOUT; 1023