"Fossies" - the Fresh Open Source Software Archive

Member "openssl-1.0.2q/crypto/aes/asm/aes-parisc.pl" (20 Nov 2018, 28832 Bytes) of package /linux/misc/openssl-1.0.2q.tar.gz:


As a special service "Fossies" has tried to format the requested source page into HTML format using (guessed) Perl source code syntax highlighting (style: standard) with prefixed line numbers and code folding option. Alternatively you can here view or download the uninterpreted source code file. For more information about "aes-parisc.pl" see the Fossies "Dox" file reference documentation and the last Fossies "Diffs" side-by-side code changes report: 1.1.1-pre8_vs_1.1.1-pre9.

    1 #!/usr/bin/env perl
    2 
    3 # ====================================================================
    4 # Written by Andy Polyakov <appro@fy.chalmers.se> for the OpenSSL
    5 # project. The module is, however, dual licensed under OpenSSL and
    6 # CRYPTOGAMS licenses depending on where you obtain it. For further
    7 # details see http://www.openssl.org/~appro/cryptogams/.
    8 # ====================================================================
    9 
   10 # AES for PA-RISC.
   11 #
   12 # June 2009.
   13 #
   14 # The module is mechanical transliteration of aes-sparcv9.pl, but with
   15 # a twist: S-boxes are compressed even further down to 1K+256B. On
   16 # PA-7100LC performance is ~40% better than gcc 3.2 generated code and
   17 # is about 33 cycles per byte processed with 128-bit key. Newer CPUs
   18 # perform at 16 cycles per byte. It's not faster than code generated
   19 # by vendor compiler, but recall that it has compressed S-boxes, which
   20 # requires extra processing.
   21 #
   22 # Special thanks to polarhome.com for providing HP-UX account.
   23 
   24 $flavour = shift;
   25 $output = shift;
   26 open STDOUT,">$output";
   27 
   28 if ($flavour =~ /64/) {
   29     $LEVEL      ="2.0W";
   30     $SIZE_T     =8;
   31     $FRAME_MARKER   =80;
   32     $SAVED_RP   =16;
   33     $PUSH       ="std";
   34     $PUSHMA     ="std,ma";
   35     $POP        ="ldd";
   36     $POPMB      ="ldd,mb";
   37 } else {
   38     $LEVEL      ="1.0";
   39     $SIZE_T     =4;
   40     $FRAME_MARKER   =48;
   41     $SAVED_RP   =20;
   42     $PUSH       ="stw";
   43     $PUSHMA     ="stwm";
   44     $POP        ="ldw";
   45     $POPMB      ="ldwm";
   46 }
   47 
   48 $FRAME=16*$SIZE_T+$FRAME_MARKER;# 16 saved regs + frame marker
   49                 #                 [+ argument transfer]
   50 $inp="%r26";    # arg0
   51 $out="%r25";    # arg1
   52 $key="%r24";    # arg2
   53 
   54 ($s0,$s1,$s2,$s3) = ("%r1","%r2","%r3","%r4");
   55 ($t0,$t1,$t2,$t3) = ("%r5","%r6","%r7","%r8");
   56 
   57 ($acc0, $acc1, $acc2, $acc3, $acc4, $acc5, $acc6, $acc7,
   58  $acc8, $acc9,$acc10,$acc11,$acc12,$acc13,$acc14,$acc15) =
   59 ("%r9","%r10","%r11","%r12","%r13","%r14","%r15","%r16",
   60 "%r17","%r18","%r19","%r20","%r21","%r22","%r23","%r26");
   61 
   62 $tbl="%r28";
   63 $rounds="%r29";
   64 
   65 $code=<<___;
   66     .LEVEL  $LEVEL
   67     .SPACE  \$TEXT\$
   68     .SUBSPA \$CODE\$,QUAD=0,ALIGN=8,ACCESS=0x2C,CODE_ONLY
   69 
   70     .EXPORT AES_encrypt,ENTRY,ARGW0=GR,ARGW1=GR,ARGW2=GR
   71     .ALIGN  64
   72 AES_encrypt
   73     .PROC
   74     .CALLINFO   FRAME=`$FRAME-16*$SIZE_T`,NO_CALLS,SAVE_RP,ENTRY_GR=18
   75     .ENTRY
   76     $PUSH   %r2,-$SAVED_RP(%sp) ; standard prologue
   77     $PUSHMA %r3,$FRAME(%sp)
   78     $PUSH   %r4,`-$FRAME+1*$SIZE_T`(%sp)
   79     $PUSH   %r5,`-$FRAME+2*$SIZE_T`(%sp)
   80     $PUSH   %r6,`-$FRAME+3*$SIZE_T`(%sp)
   81     $PUSH   %r7,`-$FRAME+4*$SIZE_T`(%sp)
   82     $PUSH   %r8,`-$FRAME+5*$SIZE_T`(%sp)
   83     $PUSH   %r9,`-$FRAME+6*$SIZE_T`(%sp)
   84     $PUSH   %r10,`-$FRAME+7*$SIZE_T`(%sp)
   85     $PUSH   %r11,`-$FRAME+8*$SIZE_T`(%sp)
   86     $PUSH   %r12,`-$FRAME+9*$SIZE_T`(%sp)
   87     $PUSH   %r13,`-$FRAME+10*$SIZE_T`(%sp)
   88     $PUSH   %r14,`-$FRAME+11*$SIZE_T`(%sp)
   89     $PUSH   %r15,`-$FRAME+12*$SIZE_T`(%sp)
   90     $PUSH   %r16,`-$FRAME+13*$SIZE_T`(%sp)
   91     $PUSH   %r17,`-$FRAME+14*$SIZE_T`(%sp)
   92     $PUSH   %r18,`-$FRAME+15*$SIZE_T`(%sp)
   93 
   94     blr %r0,$tbl
   95     ldi 3,$t0
   96 L\$enc_pic
   97     andcm   $tbl,$t0,$tbl
   98     ldo L\$AES_Te-L\$enc_pic($tbl),$tbl
   99 
  100     and $inp,$t0,$t0
  101     sub $inp,$t0,$inp
  102     ldw 0($inp),$s0
  103     ldw 4($inp),$s1
  104     ldw 8($inp),$s2
  105     comib,= 0,$t0,L\$enc_inp_aligned
  106     ldw 12($inp),$s3
  107 
  108     sh3addl $t0,%r0,$t0
  109     subi    32,$t0,$t0
  110     mtctl   $t0,%cr11
  111     ldw 16($inp),$t1
  112     vshd    $s0,$s1,$s0
  113     vshd    $s1,$s2,$s1
  114     vshd    $s2,$s3,$s2
  115     vshd    $s3,$t1,$s3
  116 
  117 L\$enc_inp_aligned
  118     bl  _parisc_AES_encrypt,%r31
  119     nop
  120 
  121     extru,<> $out,31,2,%r0
  122     b   L\$enc_out_aligned
  123     nop
  124 
  125     _srm    $s0,24,$acc0
  126     _srm    $s0,16,$acc1
  127     stb $acc0,0($out)
  128     _srm    $s0,8,$acc2
  129     stb $acc1,1($out)
  130     _srm    $s1,24,$acc4
  131     stb $acc2,2($out)
  132     _srm    $s1,16,$acc5
  133     stb $s0,3($out)
  134     _srm    $s1,8,$acc6
  135     stb $acc4,4($out)
  136     _srm    $s2,24,$acc0
  137     stb $acc5,5($out)
  138     _srm    $s2,16,$acc1
  139     stb $acc6,6($out)
  140     _srm    $s2,8,$acc2
  141     stb $s1,7($out)
  142     _srm    $s3,24,$acc4
  143     stb $acc0,8($out)
  144     _srm    $s3,16,$acc5
  145     stb $acc1,9($out)
  146     _srm    $s3,8,$acc6
  147     stb $acc2,10($out)
  148     stb $s2,11($out)
  149     stb $acc4,12($out)
  150     stb $acc5,13($out)
  151     stb $acc6,14($out)
  152     b   L\$enc_done
  153     stb $s3,15($out)
  154 
  155 L\$enc_out_aligned
  156     stw $s0,0($out)
  157     stw $s1,4($out)
  158     stw $s2,8($out)
  159     stw $s3,12($out)
  160 
  161 L\$enc_done
  162     $POP    `-$FRAME-$SAVED_RP`(%sp),%r2    ; standard epilogue
  163     $POP    `-$FRAME+1*$SIZE_T`(%sp),%r4
  164     $POP    `-$FRAME+2*$SIZE_T`(%sp),%r5
  165     $POP    `-$FRAME+3*$SIZE_T`(%sp),%r6
  166     $POP    `-$FRAME+4*$SIZE_T`(%sp),%r7
  167     $POP    `-$FRAME+5*$SIZE_T`(%sp),%r8
  168     $POP    `-$FRAME+6*$SIZE_T`(%sp),%r9
  169     $POP    `-$FRAME+7*$SIZE_T`(%sp),%r10
  170     $POP    `-$FRAME+8*$SIZE_T`(%sp),%r11
  171     $POP    `-$FRAME+9*$SIZE_T`(%sp),%r12
  172     $POP    `-$FRAME+10*$SIZE_T`(%sp),%r13
  173     $POP    `-$FRAME+11*$SIZE_T`(%sp),%r14
  174     $POP    `-$FRAME+12*$SIZE_T`(%sp),%r15
  175     $POP    `-$FRAME+13*$SIZE_T`(%sp),%r16
  176     $POP    `-$FRAME+14*$SIZE_T`(%sp),%r17
  177     $POP    `-$FRAME+15*$SIZE_T`(%sp),%r18
  178     bv  (%r2)
  179     .EXIT
  180     $POPMB  -$FRAME(%sp),%r3
  181     .PROCEND
  182 
  183     .ALIGN  16
  184 _parisc_AES_encrypt
  185     .PROC
  186     .CALLINFO   MILLICODE
  187     .ENTRY
  188     ldw 240($key),$rounds
  189     ldw 0($key),$t0
  190     ldw 4($key),$t1
  191     ldw 8($key),$t2
  192     _srm    $rounds,1,$rounds
  193     xor $t0,$s0,$s0
  194     ldw 12($key),$t3
  195     _srm    $s0,24,$acc0
  196     xor $t1,$s1,$s1
  197     ldw 16($key),$t0
  198     _srm    $s1,16,$acc1
  199     xor $t2,$s2,$s2
  200     ldw 20($key),$t1
  201     xor $t3,$s3,$s3
  202     ldw 24($key),$t2
  203     ldw 28($key),$t3
  204 L\$enc_loop
  205     _srm    $s2,8,$acc2
  206     ldwx,s  $acc0($tbl),$acc0
  207     _srm    $s3,0,$acc3
  208     ldwx,s  $acc1($tbl),$acc1
  209     _srm    $s1,24,$acc4
  210     ldwx,s  $acc2($tbl),$acc2
  211     _srm    $s2,16,$acc5
  212     ldwx,s  $acc3($tbl),$acc3
  213     _srm    $s3,8,$acc6
  214     ldwx,s  $acc4($tbl),$acc4
  215     _srm    $s0,0,$acc7
  216     ldwx,s  $acc5($tbl),$acc5
  217     _srm    $s2,24,$acc8
  218     ldwx,s  $acc6($tbl),$acc6
  219     _srm    $s3,16,$acc9
  220     ldwx,s  $acc7($tbl),$acc7
  221     _srm    $s0,8,$acc10
  222     ldwx,s  $acc8($tbl),$acc8
  223     _srm    $s1,0,$acc11
  224     ldwx,s  $acc9($tbl),$acc9
  225     _srm    $s3,24,$acc12
  226     ldwx,s  $acc10($tbl),$acc10
  227     _srm    $s0,16,$acc13
  228     ldwx,s  $acc11($tbl),$acc11
  229     _srm    $s1,8,$acc14
  230     ldwx,s  $acc12($tbl),$acc12
  231     _srm    $s2,0,$acc15
  232     ldwx,s  $acc13($tbl),$acc13
  233     ldwx,s  $acc14($tbl),$acc14
  234     ldwx,s  $acc15($tbl),$acc15
  235     addib,= -1,$rounds,L\$enc_last
  236     ldo 32($key),$key
  237 
  238         _ror    $acc1,8,$acc1
  239         xor $acc0,$t0,$t0
  240     ldw 0($key),$s0
  241         _ror    $acc2,16,$acc2
  242         xor $acc1,$t0,$t0
  243     ldw 4($key),$s1
  244         _ror    $acc3,24,$acc3
  245         xor $acc2,$t0,$t0
  246     ldw 8($key),$s2
  247         _ror    $acc5,8,$acc5
  248         xor $acc3,$t0,$t0
  249     ldw 12($key),$s3
  250         _ror    $acc6,16,$acc6
  251         xor $acc4,$t1,$t1
  252         _ror    $acc7,24,$acc7
  253         xor $acc5,$t1,$t1
  254         _ror    $acc9,8,$acc9
  255         xor $acc6,$t1,$t1
  256         _ror    $acc10,16,$acc10
  257         xor $acc7,$t1,$t1
  258         _ror    $acc11,24,$acc11
  259         xor $acc8,$t2,$t2
  260         _ror    $acc13,8,$acc13
  261         xor $acc9,$t2,$t2
  262         _ror    $acc14,16,$acc14
  263         xor $acc10,$t2,$t2
  264         _ror    $acc15,24,$acc15
  265         xor $acc11,$t2,$t2
  266         xor $acc12,$acc14,$acc14
  267         xor $acc13,$t3,$t3
  268     _srm    $t0,24,$acc0
  269         xor $acc14,$t3,$t3
  270     _srm    $t1,16,$acc1
  271         xor $acc15,$t3,$t3
  272 
  273     _srm    $t2,8,$acc2
  274     ldwx,s  $acc0($tbl),$acc0
  275     _srm    $t3,0,$acc3
  276     ldwx,s  $acc1($tbl),$acc1
  277     _srm    $t1,24,$acc4
  278     ldwx,s  $acc2($tbl),$acc2
  279     _srm    $t2,16,$acc5
  280     ldwx,s  $acc3($tbl),$acc3
  281     _srm    $t3,8,$acc6
  282     ldwx,s  $acc4($tbl),$acc4
  283     _srm    $t0,0,$acc7
  284     ldwx,s  $acc5($tbl),$acc5
  285     _srm    $t2,24,$acc8
  286     ldwx,s  $acc6($tbl),$acc6
  287     _srm    $t3,16,$acc9
  288     ldwx,s  $acc7($tbl),$acc7
  289     _srm    $t0,8,$acc10
  290     ldwx,s  $acc8($tbl),$acc8
  291     _srm    $t1,0,$acc11
  292     ldwx,s  $acc9($tbl),$acc9
  293     _srm    $t3,24,$acc12
  294     ldwx,s  $acc10($tbl),$acc10
  295     _srm    $t0,16,$acc13
  296     ldwx,s  $acc11($tbl),$acc11
  297     _srm    $t1,8,$acc14
  298     ldwx,s  $acc12($tbl),$acc12
  299     _srm    $t2,0,$acc15
  300     ldwx,s  $acc13($tbl),$acc13
  301         _ror    $acc1,8,$acc1
  302     ldwx,s  $acc14($tbl),$acc14
  303 
  304         _ror    $acc2,16,$acc2
  305         xor $acc0,$s0,$s0
  306     ldwx,s  $acc15($tbl),$acc15
  307         _ror    $acc3,24,$acc3
  308         xor $acc1,$s0,$s0
  309     ldw 16($key),$t0
  310         _ror    $acc5,8,$acc5
  311         xor $acc2,$s0,$s0
  312     ldw 20($key),$t1
  313         _ror    $acc6,16,$acc6
  314         xor $acc3,$s0,$s0
  315     ldw 24($key),$t2
  316         _ror    $acc7,24,$acc7
  317         xor $acc4,$s1,$s1
  318     ldw 28($key),$t3
  319         _ror    $acc9,8,$acc9
  320         xor $acc5,$s1,$s1
  321     ldw 1024+0($tbl),%r0        ; prefetch te4
  322         _ror    $acc10,16,$acc10
  323         xor $acc6,$s1,$s1
  324     ldw 1024+32($tbl),%r0       ; prefetch te4
  325         _ror    $acc11,24,$acc11
  326         xor $acc7,$s1,$s1
  327     ldw 1024+64($tbl),%r0       ; prefetch te4
  328         _ror    $acc13,8,$acc13
  329         xor $acc8,$s2,$s2
  330     ldw 1024+96($tbl),%r0       ; prefetch te4
  331         _ror    $acc14,16,$acc14
  332         xor $acc9,$s2,$s2
  333     ldw 1024+128($tbl),%r0      ; prefetch te4
  334         _ror    $acc15,24,$acc15
  335         xor $acc10,$s2,$s2
  336     ldw 1024+160($tbl),%r0      ; prefetch te4
  337     _srm    $s0,24,$acc0
  338         xor $acc11,$s2,$s2
  339     ldw 1024+192($tbl),%r0      ; prefetch te4
  340         xor $acc12,$acc14,$acc14
  341         xor $acc13,$s3,$s3
  342     ldw 1024+224($tbl),%r0      ; prefetch te4
  343     _srm    $s1,16,$acc1
  344         xor $acc14,$s3,$s3
  345     b   L\$enc_loop
  346         xor $acc15,$s3,$s3
  347 
  348     .ALIGN  16
  349 L\$enc_last
  350     ldo 1024($tbl),$rounds
  351         _ror    $acc1,8,$acc1
  352         xor $acc0,$t0,$t0
  353     ldw 0($key),$s0
  354         _ror    $acc2,16,$acc2
  355         xor $acc1,$t0,$t0
  356     ldw 4($key),$s1
  357         _ror    $acc3,24,$acc3
  358         xor $acc2,$t0,$t0
  359     ldw 8($key),$s2
  360         _ror    $acc5,8,$acc5
  361         xor $acc3,$t0,$t0
  362     ldw 12($key),$s3
  363         _ror    $acc6,16,$acc6
  364         xor $acc4,$t1,$t1
  365         _ror    $acc7,24,$acc7
  366         xor $acc5,$t1,$t1
  367         _ror    $acc9,8,$acc9
  368         xor $acc6,$t1,$t1
  369         _ror    $acc10,16,$acc10
  370         xor $acc7,$t1,$t1
  371         _ror    $acc11,24,$acc11
  372         xor $acc8,$t2,$t2
  373         _ror    $acc13,8,$acc13
  374         xor $acc9,$t2,$t2
  375         _ror    $acc14,16,$acc14
  376         xor $acc10,$t2,$t2
  377         _ror    $acc15,24,$acc15
  378         xor $acc11,$t2,$t2
  379         xor $acc12,$acc14,$acc14
  380         xor $acc13,$t3,$t3
  381     _srm    $t0,24,$acc0
  382         xor $acc14,$t3,$t3
  383     _srm    $t1,16,$acc1
  384         xor $acc15,$t3,$t3
  385 
  386     _srm    $t2,8,$acc2
  387     ldbx    $acc0($rounds),$acc0
  388     _srm    $t1,24,$acc4
  389     ldbx    $acc1($rounds),$acc1
  390     _srm    $t2,16,$acc5
  391     _srm    $t3,0,$acc3
  392     ldbx    $acc2($rounds),$acc2
  393     ldbx    $acc3($rounds),$acc3
  394     _srm    $t3,8,$acc6
  395     ldbx    $acc4($rounds),$acc4
  396     _srm    $t2,24,$acc8
  397     ldbx    $acc5($rounds),$acc5
  398     _srm    $t3,16,$acc9
  399     _srm    $t0,0,$acc7
  400     ldbx    $acc6($rounds),$acc6
  401     ldbx    $acc7($rounds),$acc7
  402     _srm    $t0,8,$acc10
  403     ldbx    $acc8($rounds),$acc8
  404     _srm    $t3,24,$acc12
  405     ldbx    $acc9($rounds),$acc9
  406     _srm    $t0,16,$acc13
  407     _srm    $t1,0,$acc11
  408     ldbx    $acc10($rounds),$acc10
  409     _srm    $t1,8,$acc14
  410     ldbx    $acc11($rounds),$acc11
  411     ldbx    $acc12($rounds),$acc12
  412     ldbx    $acc13($rounds),$acc13
  413     _srm    $t2,0,$acc15
  414     ldbx    $acc14($rounds),$acc14
  415 
  416         dep $acc0,7,8,$acc3
  417     ldbx    $acc15($rounds),$acc15
  418         dep $acc4,7,8,$acc7
  419         dep $acc1,15,8,$acc3
  420         dep $acc5,15,8,$acc7
  421         dep $acc2,23,8,$acc3
  422         dep $acc6,23,8,$acc7
  423         xor $acc3,$s0,$s0
  424         xor $acc7,$s1,$s1
  425         dep $acc8,7,8,$acc11
  426         dep $acc12,7,8,$acc15
  427         dep $acc9,15,8,$acc11
  428         dep $acc13,15,8,$acc15
  429         dep $acc10,23,8,$acc11
  430         dep $acc14,23,8,$acc15
  431         xor $acc11,$s2,$s2
  432 
  433     bv  (%r31)
  434     .EXIT
  435         xor $acc15,$s3,$s3
  436     .PROCEND
  437 
  438     .ALIGN  64
  439 L\$AES_Te
  440     .WORD   0xc66363a5, 0xf87c7c84, 0xee777799, 0xf67b7b8d
  441     .WORD   0xfff2f20d, 0xd66b6bbd, 0xde6f6fb1, 0x91c5c554
  442     .WORD   0x60303050, 0x02010103, 0xce6767a9, 0x562b2b7d
  443     .WORD   0xe7fefe19, 0xb5d7d762, 0x4dababe6, 0xec76769a
  444     .WORD   0x8fcaca45, 0x1f82829d, 0x89c9c940, 0xfa7d7d87
  445     .WORD   0xeffafa15, 0xb25959eb, 0x8e4747c9, 0xfbf0f00b
  446     .WORD   0x41adadec, 0xb3d4d467, 0x5fa2a2fd, 0x45afafea
  447     .WORD   0x239c9cbf, 0x53a4a4f7, 0xe4727296, 0x9bc0c05b
  448     .WORD   0x75b7b7c2, 0xe1fdfd1c, 0x3d9393ae, 0x4c26266a
  449     .WORD   0x6c36365a, 0x7e3f3f41, 0xf5f7f702, 0x83cccc4f
  450     .WORD   0x6834345c, 0x51a5a5f4, 0xd1e5e534, 0xf9f1f108
  451     .WORD   0xe2717193, 0xabd8d873, 0x62313153, 0x2a15153f
  452     .WORD   0x0804040c, 0x95c7c752, 0x46232365, 0x9dc3c35e
  453     .WORD   0x30181828, 0x379696a1, 0x0a05050f, 0x2f9a9ab5
  454     .WORD   0x0e070709, 0x24121236, 0x1b80809b, 0xdfe2e23d
  455     .WORD   0xcdebeb26, 0x4e272769, 0x7fb2b2cd, 0xea75759f
  456     .WORD   0x1209091b, 0x1d83839e, 0x582c2c74, 0x341a1a2e
  457     .WORD   0x361b1b2d, 0xdc6e6eb2, 0xb45a5aee, 0x5ba0a0fb
  458     .WORD   0xa45252f6, 0x763b3b4d, 0xb7d6d661, 0x7db3b3ce
  459     .WORD   0x5229297b, 0xdde3e33e, 0x5e2f2f71, 0x13848497
  460     .WORD   0xa65353f5, 0xb9d1d168, 0x00000000, 0xc1eded2c
  461     .WORD   0x40202060, 0xe3fcfc1f, 0x79b1b1c8, 0xb65b5bed
  462     .WORD   0xd46a6abe, 0x8dcbcb46, 0x67bebed9, 0x7239394b
  463     .WORD   0x944a4ade, 0x984c4cd4, 0xb05858e8, 0x85cfcf4a
  464     .WORD   0xbbd0d06b, 0xc5efef2a, 0x4faaaae5, 0xedfbfb16
  465     .WORD   0x864343c5, 0x9a4d4dd7, 0x66333355, 0x11858594
  466     .WORD   0x8a4545cf, 0xe9f9f910, 0x04020206, 0xfe7f7f81
  467     .WORD   0xa05050f0, 0x783c3c44, 0x259f9fba, 0x4ba8a8e3
  468     .WORD   0xa25151f3, 0x5da3a3fe, 0x804040c0, 0x058f8f8a
  469     .WORD   0x3f9292ad, 0x219d9dbc, 0x70383848, 0xf1f5f504
  470     .WORD   0x63bcbcdf, 0x77b6b6c1, 0xafdada75, 0x42212163
  471     .WORD   0x20101030, 0xe5ffff1a, 0xfdf3f30e, 0xbfd2d26d
  472     .WORD   0x81cdcd4c, 0x180c0c14, 0x26131335, 0xc3ecec2f
  473     .WORD   0xbe5f5fe1, 0x359797a2, 0x884444cc, 0x2e171739
  474     .WORD   0x93c4c457, 0x55a7a7f2, 0xfc7e7e82, 0x7a3d3d47
  475     .WORD   0xc86464ac, 0xba5d5de7, 0x3219192b, 0xe6737395
  476     .WORD   0xc06060a0, 0x19818198, 0x9e4f4fd1, 0xa3dcdc7f
  477     .WORD   0x44222266, 0x542a2a7e, 0x3b9090ab, 0x0b888883
  478     .WORD   0x8c4646ca, 0xc7eeee29, 0x6bb8b8d3, 0x2814143c
  479     .WORD   0xa7dede79, 0xbc5e5ee2, 0x160b0b1d, 0xaddbdb76
  480     .WORD   0xdbe0e03b, 0x64323256, 0x743a3a4e, 0x140a0a1e
  481     .WORD   0x924949db, 0x0c06060a, 0x4824246c, 0xb85c5ce4
  482     .WORD   0x9fc2c25d, 0xbdd3d36e, 0x43acacef, 0xc46262a6
  483     .WORD   0x399191a8, 0x319595a4, 0xd3e4e437, 0xf279798b
  484     .WORD   0xd5e7e732, 0x8bc8c843, 0x6e373759, 0xda6d6db7
  485     .WORD   0x018d8d8c, 0xb1d5d564, 0x9c4e4ed2, 0x49a9a9e0
  486     .WORD   0xd86c6cb4, 0xac5656fa, 0xf3f4f407, 0xcfeaea25
  487     .WORD   0xca6565af, 0xf47a7a8e, 0x47aeaee9, 0x10080818
  488     .WORD   0x6fbabad5, 0xf0787888, 0x4a25256f, 0x5c2e2e72
  489     .WORD   0x381c1c24, 0x57a6a6f1, 0x73b4b4c7, 0x97c6c651
  490     .WORD   0xcbe8e823, 0xa1dddd7c, 0xe874749c, 0x3e1f1f21
  491     .WORD   0x964b4bdd, 0x61bdbddc, 0x0d8b8b86, 0x0f8a8a85
  492     .WORD   0xe0707090, 0x7c3e3e42, 0x71b5b5c4, 0xcc6666aa
  493     .WORD   0x904848d8, 0x06030305, 0xf7f6f601, 0x1c0e0e12
  494     .WORD   0xc26161a3, 0x6a35355f, 0xae5757f9, 0x69b9b9d0
  495     .WORD   0x17868691, 0x99c1c158, 0x3a1d1d27, 0x279e9eb9
  496     .WORD   0xd9e1e138, 0xebf8f813, 0x2b9898b3, 0x22111133
  497     .WORD   0xd26969bb, 0xa9d9d970, 0x078e8e89, 0x339494a7
  498     .WORD   0x2d9b9bb6, 0x3c1e1e22, 0x15878792, 0xc9e9e920
  499     .WORD   0x87cece49, 0xaa5555ff, 0x50282878, 0xa5dfdf7a
  500     .WORD   0x038c8c8f, 0x59a1a1f8, 0x09898980, 0x1a0d0d17
  501     .WORD   0x65bfbfda, 0xd7e6e631, 0x844242c6, 0xd06868b8
  502     .WORD   0x824141c3, 0x299999b0, 0x5a2d2d77, 0x1e0f0f11
  503     .WORD   0x7bb0b0cb, 0xa85454fc, 0x6dbbbbd6, 0x2c16163a
  504     .BYTE   0x63, 0x7c, 0x77, 0x7b, 0xf2, 0x6b, 0x6f, 0xc5
  505     .BYTE   0x30, 0x01, 0x67, 0x2b, 0xfe, 0xd7, 0xab, 0x76
  506     .BYTE   0xca, 0x82, 0xc9, 0x7d, 0xfa, 0x59, 0x47, 0xf0
  507     .BYTE   0xad, 0xd4, 0xa2, 0xaf, 0x9c, 0xa4, 0x72, 0xc0
  508     .BYTE   0xb7, 0xfd, 0x93, 0x26, 0x36, 0x3f, 0xf7, 0xcc
  509     .BYTE   0x34, 0xa5, 0xe5, 0xf1, 0x71, 0xd8, 0x31, 0x15
  510     .BYTE   0x04, 0xc7, 0x23, 0xc3, 0x18, 0x96, 0x05, 0x9a
  511     .BYTE   0x07, 0x12, 0x80, 0xe2, 0xeb, 0x27, 0xb2, 0x75
  512     .BYTE   0x09, 0x83, 0x2c, 0x1a, 0x1b, 0x6e, 0x5a, 0xa0
  513     .BYTE   0x52, 0x3b, 0xd6, 0xb3, 0x29, 0xe3, 0x2f, 0x84
  514     .BYTE   0x53, 0xd1, 0x00, 0xed, 0x20, 0xfc, 0xb1, 0x5b
  515     .BYTE   0x6a, 0xcb, 0xbe, 0x39, 0x4a, 0x4c, 0x58, 0xcf
  516     .BYTE   0xd0, 0xef, 0xaa, 0xfb, 0x43, 0x4d, 0x33, 0x85
  517     .BYTE   0x45, 0xf9, 0x02, 0x7f, 0x50, 0x3c, 0x9f, 0xa8
  518     .BYTE   0x51, 0xa3, 0x40, 0x8f, 0x92, 0x9d, 0x38, 0xf5
  519     .BYTE   0xbc, 0xb6, 0xda, 0x21, 0x10, 0xff, 0xf3, 0xd2
  520     .BYTE   0xcd, 0x0c, 0x13, 0xec, 0x5f, 0x97, 0x44, 0x17
  521     .BYTE   0xc4, 0xa7, 0x7e, 0x3d, 0x64, 0x5d, 0x19, 0x73
  522     .BYTE   0x60, 0x81, 0x4f, 0xdc, 0x22, 0x2a, 0x90, 0x88
  523     .BYTE   0x46, 0xee, 0xb8, 0x14, 0xde, 0x5e, 0x0b, 0xdb
  524     .BYTE   0xe0, 0x32, 0x3a, 0x0a, 0x49, 0x06, 0x24, 0x5c
  525     .BYTE   0xc2, 0xd3, 0xac, 0x62, 0x91, 0x95, 0xe4, 0x79
  526     .BYTE   0xe7, 0xc8, 0x37, 0x6d, 0x8d, 0xd5, 0x4e, 0xa9
  527     .BYTE   0x6c, 0x56, 0xf4, 0xea, 0x65, 0x7a, 0xae, 0x08
  528     .BYTE   0xba, 0x78, 0x25, 0x2e, 0x1c, 0xa6, 0xb4, 0xc6
  529     .BYTE   0xe8, 0xdd, 0x74, 0x1f, 0x4b, 0xbd, 0x8b, 0x8a
  530     .BYTE   0x70, 0x3e, 0xb5, 0x66, 0x48, 0x03, 0xf6, 0x0e
  531     .BYTE   0x61, 0x35, 0x57, 0xb9, 0x86, 0xc1, 0x1d, 0x9e
  532     .BYTE   0xe1, 0xf8, 0x98, 0x11, 0x69, 0xd9, 0x8e, 0x94
  533     .BYTE   0x9b, 0x1e, 0x87, 0xe9, 0xce, 0x55, 0x28, 0xdf
  534     .BYTE   0x8c, 0xa1, 0x89, 0x0d, 0xbf, 0xe6, 0x42, 0x68
  535     .BYTE   0x41, 0x99, 0x2d, 0x0f, 0xb0, 0x54, 0xbb, 0x16
  536 ___
  537 
  538 $code.=<<___;
  539     .EXPORT AES_decrypt,ENTRY,ARGW0=GR,ARGW1=GR,ARGW2=GR
  540     .ALIGN  16
  541 AES_decrypt
  542     .PROC
  543     .CALLINFO   FRAME=`$FRAME-16*$SIZE_T`,NO_CALLS,SAVE_RP,ENTRY_GR=18
  544     .ENTRY
  545     $PUSH   %r2,-$SAVED_RP(%sp) ; standard prologue
  546     $PUSHMA %r3,$FRAME(%sp)
  547     $PUSH   %r4,`-$FRAME+1*$SIZE_T`(%sp)
  548     $PUSH   %r5,`-$FRAME+2*$SIZE_T`(%sp)
  549     $PUSH   %r6,`-$FRAME+3*$SIZE_T`(%sp)
  550     $PUSH   %r7,`-$FRAME+4*$SIZE_T`(%sp)
  551     $PUSH   %r8,`-$FRAME+5*$SIZE_T`(%sp)
  552     $PUSH   %r9,`-$FRAME+6*$SIZE_T`(%sp)
  553     $PUSH   %r10,`-$FRAME+7*$SIZE_T`(%sp)
  554     $PUSH   %r11,`-$FRAME+8*$SIZE_T`(%sp)
  555     $PUSH   %r12,`-$FRAME+9*$SIZE_T`(%sp)
  556     $PUSH   %r13,`-$FRAME+10*$SIZE_T`(%sp)
  557     $PUSH   %r14,`-$FRAME+11*$SIZE_T`(%sp)
  558     $PUSH   %r15,`-$FRAME+12*$SIZE_T`(%sp)
  559     $PUSH   %r16,`-$FRAME+13*$SIZE_T`(%sp)
  560     $PUSH   %r17,`-$FRAME+14*$SIZE_T`(%sp)
  561     $PUSH   %r18,`-$FRAME+15*$SIZE_T`(%sp)
  562 
  563     blr %r0,$tbl
  564     ldi 3,$t0
  565 L\$dec_pic
  566     andcm   $tbl,$t0,$tbl
  567     ldo L\$AES_Td-L\$dec_pic($tbl),$tbl
  568 
  569     and $inp,$t0,$t0
  570     sub $inp,$t0,$inp
  571     ldw 0($inp),$s0
  572     ldw 4($inp),$s1
  573     ldw 8($inp),$s2
  574     comib,= 0,$t0,L\$dec_inp_aligned
  575     ldw 12($inp),$s3
  576 
  577     sh3addl $t0,%r0,$t0
  578     subi    32,$t0,$t0
  579     mtctl   $t0,%cr11
  580     ldw 16($inp),$t1
  581     vshd    $s0,$s1,$s0
  582     vshd    $s1,$s2,$s1
  583     vshd    $s2,$s3,$s2
  584     vshd    $s3,$t1,$s3
  585 
  586 L\$dec_inp_aligned
  587     bl  _parisc_AES_decrypt,%r31
  588     nop
  589 
  590     extru,<> $out,31,2,%r0
  591     b   L\$dec_out_aligned
  592     nop
  593 
  594     _srm    $s0,24,$acc0
  595     _srm    $s0,16,$acc1
  596     stb $acc0,0($out)
  597     _srm    $s0,8,$acc2
  598     stb $acc1,1($out)
  599     _srm    $s1,24,$acc4
  600     stb $acc2,2($out)
  601     _srm    $s1,16,$acc5
  602     stb $s0,3($out)
  603     _srm    $s1,8,$acc6
  604     stb $acc4,4($out)
  605     _srm    $s2,24,$acc0
  606     stb $acc5,5($out)
  607     _srm    $s2,16,$acc1
  608     stb $acc6,6($out)
  609     _srm    $s2,8,$acc2
  610     stb $s1,7($out)
  611     _srm    $s3,24,$acc4
  612     stb $acc0,8($out)
  613     _srm    $s3,16,$acc5
  614     stb $acc1,9($out)
  615     _srm    $s3,8,$acc6
  616     stb $acc2,10($out)
  617     stb $s2,11($out)
  618     stb $acc4,12($out)
  619     stb $acc5,13($out)
  620     stb $acc6,14($out)
  621     b   L\$dec_done
  622     stb $s3,15($out)
  623 
  624 L\$dec_out_aligned
  625     stw $s0,0($out)
  626     stw $s1,4($out)
  627     stw $s2,8($out)
  628     stw $s3,12($out)
  629 
  630 L\$dec_done
  631     $POP    `-$FRAME-$SAVED_RP`(%sp),%r2    ; standard epilogue
  632     $POP    `-$FRAME+1*$SIZE_T`(%sp),%r4
  633     $POP    `-$FRAME+2*$SIZE_T`(%sp),%r5
  634     $POP    `-$FRAME+3*$SIZE_T`(%sp),%r6
  635     $POP    `-$FRAME+4*$SIZE_T`(%sp),%r7
  636     $POP    `-$FRAME+5*$SIZE_T`(%sp),%r8
  637     $POP    `-$FRAME+6*$SIZE_T`(%sp),%r9
  638     $POP    `-$FRAME+7*$SIZE_T`(%sp),%r10
  639     $POP    `-$FRAME+8*$SIZE_T`(%sp),%r11
  640     $POP    `-$FRAME+9*$SIZE_T`(%sp),%r12
  641     $POP    `-$FRAME+10*$SIZE_T`(%sp),%r13
  642     $POP    `-$FRAME+11*$SIZE_T`(%sp),%r14
  643     $POP    `-$FRAME+12*$SIZE_T`(%sp),%r15
  644     $POP    `-$FRAME+13*$SIZE_T`(%sp),%r16
  645     $POP    `-$FRAME+14*$SIZE_T`(%sp),%r17
  646     $POP    `-$FRAME+15*$SIZE_T`(%sp),%r18
  647     bv  (%r2)
  648     .EXIT
  649     $POPMB  -$FRAME(%sp),%r3
  650     .PROCEND
  651 
  652     .ALIGN  16
  653 _parisc_AES_decrypt
  654     .PROC
  655     .CALLINFO   MILLICODE
  656     .ENTRY
  657     ldw 240($key),$rounds
  658     ldw 0($key),$t0
  659     ldw 4($key),$t1
  660     ldw 8($key),$t2
  661     ldw 12($key),$t3
  662     _srm    $rounds,1,$rounds
  663     xor $t0,$s0,$s0
  664     ldw 16($key),$t0
  665     xor $t1,$s1,$s1
  666     ldw 20($key),$t1
  667     _srm    $s0,24,$acc0
  668     xor $t2,$s2,$s2
  669     ldw 24($key),$t2
  670     xor $t3,$s3,$s3
  671     ldw 28($key),$t3
  672     _srm    $s3,16,$acc1
  673 L\$dec_loop
  674     _srm    $s2,8,$acc2
  675     ldwx,s  $acc0($tbl),$acc0
  676     _srm    $s1,0,$acc3
  677     ldwx,s  $acc1($tbl),$acc1
  678     _srm    $s1,24,$acc4
  679     ldwx,s  $acc2($tbl),$acc2
  680     _srm    $s0,16,$acc5
  681     ldwx,s  $acc3($tbl),$acc3
  682     _srm    $s3,8,$acc6
  683     ldwx,s  $acc4($tbl),$acc4
  684     _srm    $s2,0,$acc7
  685     ldwx,s  $acc5($tbl),$acc5
  686     _srm    $s2,24,$acc8
  687     ldwx,s  $acc6($tbl),$acc6
  688     _srm    $s1,16,$acc9
  689     ldwx,s  $acc7($tbl),$acc7
  690     _srm    $s0,8,$acc10
  691     ldwx,s  $acc8($tbl),$acc8
  692     _srm    $s3,0,$acc11
  693     ldwx,s  $acc9($tbl),$acc9
  694     _srm    $s3,24,$acc12
  695     ldwx,s  $acc10($tbl),$acc10
  696     _srm    $s2,16,$acc13
  697     ldwx,s  $acc11($tbl),$acc11
  698     _srm    $s1,8,$acc14
  699     ldwx,s  $acc12($tbl),$acc12
  700     _srm    $s0,0,$acc15
  701     ldwx,s  $acc13($tbl),$acc13
  702     ldwx,s  $acc14($tbl),$acc14
  703     ldwx,s  $acc15($tbl),$acc15
  704     addib,= -1,$rounds,L\$dec_last
  705     ldo 32($key),$key
  706 
  707         _ror    $acc1,8,$acc1
  708         xor $acc0,$t0,$t0
  709     ldw 0($key),$s0
  710         _ror    $acc2,16,$acc2
  711         xor $acc1,$t0,$t0
  712     ldw 4($key),$s1
  713         _ror    $acc3,24,$acc3
  714         xor $acc2,$t0,$t0
  715     ldw 8($key),$s2
  716         _ror    $acc5,8,$acc5
  717         xor $acc3,$t0,$t0
  718     ldw 12($key),$s3
  719         _ror    $acc6,16,$acc6
  720         xor $acc4,$t1,$t1
  721         _ror    $acc7,24,$acc7
  722         xor $acc5,$t1,$t1
  723         _ror    $acc9,8,$acc9
  724         xor $acc6,$t1,$t1
  725         _ror    $acc10,16,$acc10
  726         xor $acc7,$t1,$t1
  727         _ror    $acc11,24,$acc11
  728         xor $acc8,$t2,$t2
  729         _ror    $acc13,8,$acc13
  730         xor $acc9,$t2,$t2
  731         _ror    $acc14,16,$acc14
  732         xor $acc10,$t2,$t2
  733         _ror    $acc15,24,$acc15
  734         xor $acc11,$t2,$t2
  735         xor $acc12,$acc14,$acc14
  736         xor $acc13,$t3,$t3
  737     _srm    $t0,24,$acc0
  738         xor $acc14,$t3,$t3
  739         xor $acc15,$t3,$t3
  740     _srm    $t3,16,$acc1
  741 
  742     _srm    $t2,8,$acc2
  743     ldwx,s  $acc0($tbl),$acc0
  744     _srm    $t1,0,$acc3
  745     ldwx,s  $acc1($tbl),$acc1
  746     _srm    $t1,24,$acc4
  747     ldwx,s  $acc2($tbl),$acc2
  748     _srm    $t0,16,$acc5
  749     ldwx,s  $acc3($tbl),$acc3
  750     _srm    $t3,8,$acc6
  751     ldwx,s  $acc4($tbl),$acc4
  752     _srm    $t2,0,$acc7
  753     ldwx,s  $acc5($tbl),$acc5
  754     _srm    $t2,24,$acc8
  755     ldwx,s  $acc6($tbl),$acc6
  756     _srm    $t1,16,$acc9
  757     ldwx,s  $acc7($tbl),$acc7
  758     _srm    $t0,8,$acc10
  759     ldwx,s  $acc8($tbl),$acc8
  760     _srm    $t3,0,$acc11
  761     ldwx,s  $acc9($tbl),$acc9
  762     _srm    $t3,24,$acc12
  763     ldwx,s  $acc10($tbl),$acc10
  764     _srm    $t2,16,$acc13
  765     ldwx,s  $acc11($tbl),$acc11
  766     _srm    $t1,8,$acc14
  767     ldwx,s  $acc12($tbl),$acc12
  768     _srm    $t0,0,$acc15
  769     ldwx,s  $acc13($tbl),$acc13
  770         _ror    $acc1,8,$acc1
  771     ldwx,s  $acc14($tbl),$acc14
  772 
  773         _ror    $acc2,16,$acc2
  774         xor $acc0,$s0,$s0
  775     ldwx,s  $acc15($tbl),$acc15
  776         _ror    $acc3,24,$acc3
  777         xor $acc1,$s0,$s0
  778     ldw 16($key),$t0
  779         _ror    $acc5,8,$acc5
  780         xor $acc2,$s0,$s0
  781     ldw 20($key),$t1
  782         _ror    $acc6,16,$acc6
  783         xor $acc3,$s0,$s0
  784     ldw 24($key),$t2
  785         _ror    $acc7,24,$acc7
  786         xor $acc4,$s1,$s1
  787     ldw 28($key),$t3
  788         _ror    $acc9,8,$acc9
  789         xor $acc5,$s1,$s1
  790     ldw 1024+0($tbl),%r0        ; prefetch td4
  791         _ror    $acc10,16,$acc10
  792         xor $acc6,$s1,$s1
  793     ldw 1024+32($tbl),%r0       ; prefetch td4
  794         _ror    $acc11,24,$acc11
  795         xor $acc7,$s1,$s1
  796     ldw 1024+64($tbl),%r0       ; prefetch td4
  797         _ror    $acc13,8,$acc13
  798         xor $acc8,$s2,$s2
  799     ldw 1024+96($tbl),%r0       ; prefetch td4
  800         _ror    $acc14,16,$acc14
  801         xor $acc9,$s2,$s2
  802     ldw 1024+128($tbl),%r0      ; prefetch td4
  803         _ror    $acc15,24,$acc15
  804         xor $acc10,$s2,$s2
  805     ldw 1024+160($tbl),%r0      ; prefetch td4
  806     _srm    $s0,24,$acc0
  807         xor $acc11,$s2,$s2
  808     ldw 1024+192($tbl),%r0      ; prefetch td4
  809         xor $acc12,$acc14,$acc14
  810         xor $acc13,$s3,$s3
  811     ldw 1024+224($tbl),%r0      ; prefetch td4
  812         xor $acc14,$s3,$s3
  813         xor $acc15,$s3,$s3
  814     b   L\$dec_loop
  815     _srm    $s3,16,$acc1
  816 
  817     .ALIGN  16
  818 L\$dec_last
  819     ldo 1024($tbl),$rounds
  820         _ror    $acc1,8,$acc1
  821         xor $acc0,$t0,$t0
  822     ldw 0($key),$s0
  823         _ror    $acc2,16,$acc2
  824         xor $acc1,$t0,$t0
  825     ldw 4($key),$s1
  826         _ror    $acc3,24,$acc3
  827         xor $acc2,$t0,$t0
  828     ldw 8($key),$s2
  829         _ror    $acc5,8,$acc5
  830         xor $acc3,$t0,$t0
  831     ldw 12($key),$s3
  832         _ror    $acc6,16,$acc6
  833         xor $acc4,$t1,$t1
  834         _ror    $acc7,24,$acc7
  835         xor $acc5,$t1,$t1
  836         _ror    $acc9,8,$acc9
  837         xor $acc6,$t1,$t1
  838         _ror    $acc10,16,$acc10
  839         xor $acc7,$t1,$t1
  840         _ror    $acc11,24,$acc11
  841         xor $acc8,$t2,$t2
  842         _ror    $acc13,8,$acc13
  843         xor $acc9,$t2,$t2
  844         _ror    $acc14,16,$acc14
  845         xor $acc10,$t2,$t2
  846         _ror    $acc15,24,$acc15
  847         xor $acc11,$t2,$t2
  848         xor $acc12,$acc14,$acc14
  849         xor $acc13,$t3,$t3
  850     _srm    $t0,24,$acc0
  851         xor $acc14,$t3,$t3
  852         xor $acc15,$t3,$t3
  853     _srm    $t3,16,$acc1
  854 
  855     _srm    $t2,8,$acc2
  856     ldbx    $acc0($rounds),$acc0
  857     _srm    $t1,24,$acc4
  858     ldbx    $acc1($rounds),$acc1
  859     _srm    $t0,16,$acc5
  860     _srm    $t1,0,$acc3
  861     ldbx    $acc2($rounds),$acc2
  862     ldbx    $acc3($rounds),$acc3
  863     _srm    $t3,8,$acc6
  864     ldbx    $acc4($rounds),$acc4
  865     _srm    $t2,24,$acc8
  866     ldbx    $acc5($rounds),$acc5
  867     _srm    $t1,16,$acc9
  868     _srm    $t2,0,$acc7
  869     ldbx    $acc6($rounds),$acc6
  870     ldbx    $acc7($rounds),$acc7
  871     _srm    $t0,8,$acc10
  872     ldbx    $acc8($rounds),$acc8
  873     _srm    $t3,24,$acc12
  874     ldbx    $acc9($rounds),$acc9
  875     _srm    $t2,16,$acc13
  876     _srm    $t3,0,$acc11
  877     ldbx    $acc10($rounds),$acc10
  878     _srm    $t1,8,$acc14
  879     ldbx    $acc11($rounds),$acc11
  880     ldbx    $acc12($rounds),$acc12
  881     ldbx    $acc13($rounds),$acc13
  882     _srm    $t0,0,$acc15
  883     ldbx    $acc14($rounds),$acc14
  884 
  885         dep $acc0,7,8,$acc3
  886     ldbx    $acc15($rounds),$acc15
  887         dep $acc4,7,8,$acc7
  888         dep $acc1,15,8,$acc3
  889         dep $acc5,15,8,$acc7
  890         dep $acc2,23,8,$acc3
  891         dep $acc6,23,8,$acc7
  892         xor $acc3,$s0,$s0
  893         xor $acc7,$s1,$s1
  894         dep $acc8,7,8,$acc11
  895         dep $acc12,7,8,$acc15
  896         dep $acc9,15,8,$acc11
  897         dep $acc13,15,8,$acc15
  898         dep $acc10,23,8,$acc11
  899         dep $acc14,23,8,$acc15
  900         xor $acc11,$s2,$s2
  901 
  902     bv  (%r31)
  903     .EXIT
  904         xor $acc15,$s3,$s3
  905     .PROCEND
  906 
  907     .ALIGN  64
  908 L\$AES_Td
  909     .WORD   0x51f4a750, 0x7e416553, 0x1a17a4c3, 0x3a275e96
  910     .WORD   0x3bab6bcb, 0x1f9d45f1, 0xacfa58ab, 0x4be30393
  911     .WORD   0x2030fa55, 0xad766df6, 0x88cc7691, 0xf5024c25
  912     .WORD   0x4fe5d7fc, 0xc52acbd7, 0x26354480, 0xb562a38f
  913     .WORD   0xdeb15a49, 0x25ba1b67, 0x45ea0e98, 0x5dfec0e1
  914     .WORD   0xc32f7502, 0x814cf012, 0x8d4697a3, 0x6bd3f9c6
  915     .WORD   0x038f5fe7, 0x15929c95, 0xbf6d7aeb, 0x955259da
  916     .WORD   0xd4be832d, 0x587421d3, 0x49e06929, 0x8ec9c844
  917     .WORD   0x75c2896a, 0xf48e7978, 0x99583e6b, 0x27b971dd
  918     .WORD   0xbee14fb6, 0xf088ad17, 0xc920ac66, 0x7dce3ab4
  919     .WORD   0x63df4a18, 0xe51a3182, 0x97513360, 0x62537f45
  920     .WORD   0xb16477e0, 0xbb6bae84, 0xfe81a01c, 0xf9082b94
  921     .WORD   0x70486858, 0x8f45fd19, 0x94de6c87, 0x527bf8b7
  922     .WORD   0xab73d323, 0x724b02e2, 0xe31f8f57, 0x6655ab2a
  923     .WORD   0xb2eb2807, 0x2fb5c203, 0x86c57b9a, 0xd33708a5
  924     .WORD   0x302887f2, 0x23bfa5b2, 0x02036aba, 0xed16825c
  925     .WORD   0x8acf1c2b, 0xa779b492, 0xf307f2f0, 0x4e69e2a1
  926     .WORD   0x65daf4cd, 0x0605bed5, 0xd134621f, 0xc4a6fe8a
  927     .WORD   0x342e539d, 0xa2f355a0, 0x058ae132, 0xa4f6eb75
  928     .WORD   0x0b83ec39, 0x4060efaa, 0x5e719f06, 0xbd6e1051
  929     .WORD   0x3e218af9, 0x96dd063d, 0xdd3e05ae, 0x4de6bd46
  930     .WORD   0x91548db5, 0x71c45d05, 0x0406d46f, 0x605015ff
  931     .WORD   0x1998fb24, 0xd6bde997, 0x894043cc, 0x67d99e77
  932     .WORD   0xb0e842bd, 0x07898b88, 0xe7195b38, 0x79c8eedb
  933     .WORD   0xa17c0a47, 0x7c420fe9, 0xf8841ec9, 0x00000000
  934     .WORD   0x09808683, 0x322bed48, 0x1e1170ac, 0x6c5a724e
  935     .WORD   0xfd0efffb, 0x0f853856, 0x3daed51e, 0x362d3927
  936     .WORD   0x0a0fd964, 0x685ca621, 0x9b5b54d1, 0x24362e3a
  937     .WORD   0x0c0a67b1, 0x9357e70f, 0xb4ee96d2, 0x1b9b919e
  938     .WORD   0x80c0c54f, 0x61dc20a2, 0x5a774b69, 0x1c121a16
  939     .WORD   0xe293ba0a, 0xc0a02ae5, 0x3c22e043, 0x121b171d
  940     .WORD   0x0e090d0b, 0xf28bc7ad, 0x2db6a8b9, 0x141ea9c8
  941     .WORD   0x57f11985, 0xaf75074c, 0xee99ddbb, 0xa37f60fd
  942     .WORD   0xf701269f, 0x5c72f5bc, 0x44663bc5, 0x5bfb7e34
  943     .WORD   0x8b432976, 0xcb23c6dc, 0xb6edfc68, 0xb8e4f163
  944     .WORD   0xd731dcca, 0x42638510, 0x13972240, 0x84c61120
  945     .WORD   0x854a247d, 0xd2bb3df8, 0xaef93211, 0xc729a16d
  946     .WORD   0x1d9e2f4b, 0xdcb230f3, 0x0d8652ec, 0x77c1e3d0
  947     .WORD   0x2bb3166c, 0xa970b999, 0x119448fa, 0x47e96422
  948     .WORD   0xa8fc8cc4, 0xa0f03f1a, 0x567d2cd8, 0x223390ef
  949     .WORD   0x87494ec7, 0xd938d1c1, 0x8ccaa2fe, 0x98d40b36
  950     .WORD   0xa6f581cf, 0xa57ade28, 0xdab78e26, 0x3fadbfa4
  951     .WORD   0x2c3a9de4, 0x5078920d, 0x6a5fcc9b, 0x547e4662
  952     .WORD   0xf68d13c2, 0x90d8b8e8, 0x2e39f75e, 0x82c3aff5
  953     .WORD   0x9f5d80be, 0x69d0937c, 0x6fd52da9, 0xcf2512b3
  954     .WORD   0xc8ac993b, 0x10187da7, 0xe89c636e, 0xdb3bbb7b
  955     .WORD   0xcd267809, 0x6e5918f4, 0xec9ab701, 0x834f9aa8
  956     .WORD   0xe6956e65, 0xaaffe67e, 0x21bccf08, 0xef15e8e6
  957     .WORD   0xbae79bd9, 0x4a6f36ce, 0xea9f09d4, 0x29b07cd6
  958     .WORD   0x31a4b2af, 0x2a3f2331, 0xc6a59430, 0x35a266c0
  959     .WORD   0x744ebc37, 0xfc82caa6, 0xe090d0b0, 0x33a7d815
  960     .WORD   0xf104984a, 0x41ecdaf7, 0x7fcd500e, 0x1791f62f
  961     .WORD   0x764dd68d, 0x43efb04d, 0xccaa4d54, 0xe49604df
  962     .WORD   0x9ed1b5e3, 0x4c6a881b, 0xc12c1fb8, 0x4665517f
  963     .WORD   0x9d5eea04, 0x018c355d, 0xfa877473, 0xfb0b412e
  964     .WORD   0xb3671d5a, 0x92dbd252, 0xe9105633, 0x6dd64713
  965     .WORD   0x9ad7618c, 0x37a10c7a, 0x59f8148e, 0xeb133c89
  966     .WORD   0xcea927ee, 0xb761c935, 0xe11ce5ed, 0x7a47b13c
  967     .WORD   0x9cd2df59, 0x55f2733f, 0x1814ce79, 0x73c737bf
  968     .WORD   0x53f7cdea, 0x5ffdaa5b, 0xdf3d6f14, 0x7844db86
  969     .WORD   0xcaaff381, 0xb968c43e, 0x3824342c, 0xc2a3405f
  970     .WORD   0x161dc372, 0xbce2250c, 0x283c498b, 0xff0d9541
  971     .WORD   0x39a80171, 0x080cb3de, 0xd8b4e49c, 0x6456c190
  972     .WORD   0x7bcb8461, 0xd532b670, 0x486c5c74, 0xd0b85742
  973     .BYTE   0x52, 0x09, 0x6a, 0xd5, 0x30, 0x36, 0xa5, 0x38
  974     .BYTE   0xbf, 0x40, 0xa3, 0x9e, 0x81, 0xf3, 0xd7, 0xfb
  975     .BYTE   0x7c, 0xe3, 0x39, 0x82, 0x9b, 0x2f, 0xff, 0x87
  976     .BYTE   0x34, 0x8e, 0x43, 0x44, 0xc4, 0xde, 0xe9, 0xcb
  977     .BYTE   0x54, 0x7b, 0x94, 0x32, 0xa6, 0xc2, 0x23, 0x3d
  978     .BYTE   0xee, 0x4c, 0x95, 0x0b, 0x42, 0xfa, 0xc3, 0x4e
  979     .BYTE   0x08, 0x2e, 0xa1, 0x66, 0x28, 0xd9, 0x24, 0xb2
  980     .BYTE   0x76, 0x5b, 0xa2, 0x49, 0x6d, 0x8b, 0xd1, 0x25
  981     .BYTE   0x72, 0xf8, 0xf6, 0x64, 0x86, 0x68, 0x98, 0x16
  982     .BYTE   0xd4, 0xa4, 0x5c, 0xcc, 0x5d, 0x65, 0xb6, 0x92
  983     .BYTE   0x6c, 0x70, 0x48, 0x50, 0xfd, 0xed, 0xb9, 0xda
  984     .BYTE   0x5e, 0x15, 0x46, 0x57, 0xa7, 0x8d, 0x9d, 0x84
  985     .BYTE   0x90, 0xd8, 0xab, 0x00, 0x8c, 0xbc, 0xd3, 0x0a
  986     .BYTE   0xf7, 0xe4, 0x58, 0x05, 0xb8, 0xb3, 0x45, 0x06
  987     .BYTE   0xd0, 0x2c, 0x1e, 0x8f, 0xca, 0x3f, 0x0f, 0x02
  988     .BYTE   0xc1, 0xaf, 0xbd, 0x03, 0x01, 0x13, 0x8a, 0x6b
  989     .BYTE   0x3a, 0x91, 0x11, 0x41, 0x4f, 0x67, 0xdc, 0xea
  990     .BYTE   0x97, 0xf2, 0xcf, 0xce, 0xf0, 0xb4, 0xe6, 0x73
  991     .BYTE   0x96, 0xac, 0x74, 0x22, 0xe7, 0xad, 0x35, 0x85
  992     .BYTE   0xe2, 0xf9, 0x37, 0xe8, 0x1c, 0x75, 0xdf, 0x6e
  993     .BYTE   0x47, 0xf1, 0x1a, 0x71, 0x1d, 0x29, 0xc5, 0x89
  994     .BYTE   0x6f, 0xb7, 0x62, 0x0e, 0xaa, 0x18, 0xbe, 0x1b
  995     .BYTE   0xfc, 0x56, 0x3e, 0x4b, 0xc6, 0xd2, 0x79, 0x20
  996     .BYTE   0x9a, 0xdb, 0xc0, 0xfe, 0x78, 0xcd, 0x5a, 0xf4
  997     .BYTE   0x1f, 0xdd, 0xa8, 0x33, 0x88, 0x07, 0xc7, 0x31
  998     .BYTE   0xb1, 0x12, 0x10, 0x59, 0x27, 0x80, 0xec, 0x5f
  999     .BYTE   0x60, 0x51, 0x7f, 0xa9, 0x19, 0xb5, 0x4a, 0x0d
 1000     .BYTE   0x2d, 0xe5, 0x7a, 0x9f, 0x93, 0xc9, 0x9c, 0xef
 1001     .BYTE   0xa0, 0xe0, 0x3b, 0x4d, 0xae, 0x2a, 0xf5, 0xb0
 1002     .BYTE   0xc8, 0xeb, 0xbb, 0x3c, 0x83, 0x53, 0x99, 0x61
 1003     .BYTE   0x17, 0x2b, 0x04, 0x7e, 0xba, 0x77, 0xd6, 0x26
 1004     .BYTE   0xe1, 0x69, 0x14, 0x63, 0x55, 0x21, 0x0c, 0x7d
 1005     .STRINGZ "AES for PA-RISC, CRYPTOGAMS by <appro\@openssl.org>"
 1006 ___
 1007 
 1008 foreach (split("\n",$code)) {
 1009     s/\`([^\`]*)\`/eval $1/ge;
 1010 
 1011     # translate made up instructons: _ror, _srm
 1012     s/_ror(\s+)(%r[0-9]+),/shd$1$2,$2,/             or
 1013 
 1014     s/_srm(\s+%r[0-9]+),([0-9]+),/
 1015         $SIZE_T==4 ? sprintf("extru%s,%d,8,",$1,31-$2)
 1016         :            sprintf("extrd,u%s,%d,8,",$1,63-$2)/e;
 1017 
 1018     s/,\*/,/            if ($SIZE_T==4);
 1019     s/\bbv\b(.*\(%r2\))/bve$1/  if ($SIZE_T==8);
 1020     print $_,"\n";
 1021 }
 1022 close STDOUT;