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