author | Misaki Miyashita <misaki.miyashita@oracle.com> |
Wed, 02 Nov 2016 19:15:09 -0700 | |
changeset 7239 | 81dd404b35f2 |
permissions | -rw-r--r-- |
7239
81dd404b35f2
24830961 OpenSSL FIPS work based on 1.0.2 for Oracle Solaris: Phase II
Misaki Miyashita <misaki.miyashita@oracle.com>
parents:
diff
changeset
|
1 |
#!/usr/bin/env perl |
81dd404b35f2
24830961 OpenSSL FIPS work based on 1.0.2 for Oracle Solaris: Phase II
Misaki Miyashita <misaki.miyashita@oracle.com>
parents:
diff
changeset
|
2 |
|
81dd404b35f2
24830961 OpenSSL FIPS work based on 1.0.2 for Oracle Solaris: Phase II
Misaki Miyashita <misaki.miyashita@oracle.com>
parents:
diff
changeset
|
3 |
# ==================================================================== |
81dd404b35f2
24830961 OpenSSL FIPS work based on 1.0.2 for Oracle Solaris: Phase II
Misaki Miyashita <misaki.miyashita@oracle.com>
parents:
diff
changeset
|
4 |
# Written by Andy Polyakov <[email protected]> for the OpenSSL |
81dd404b35f2
24830961 OpenSSL FIPS work based on 1.0.2 for Oracle Solaris: Phase II
Misaki Miyashita <misaki.miyashita@oracle.com>
parents:
diff
changeset
|
5 |
# project. The module is, however, dual licensed under OpenSSL and |
81dd404b35f2
24830961 OpenSSL FIPS work based on 1.0.2 for Oracle Solaris: Phase II
Misaki Miyashita <misaki.miyashita@oracle.com>
parents:
diff
changeset
|
6 |
# CRYPTOGAMS licenses depending on where you obtain it. For further |
81dd404b35f2
24830961 OpenSSL FIPS work based on 1.0.2 for Oracle Solaris: Phase II
Misaki Miyashita <misaki.miyashita@oracle.com>
parents:
diff
changeset
|
7 |
# details see http://www.openssl.org/~appro/cryptogams/. |
81dd404b35f2
24830961 OpenSSL FIPS work based on 1.0.2 for Oracle Solaris: Phase II
Misaki Miyashita <misaki.miyashita@oracle.com>
parents:
diff
changeset
|
8 |
# |
81dd404b35f2
24830961 OpenSSL FIPS work based on 1.0.2 for Oracle Solaris: Phase II
Misaki Miyashita <misaki.miyashita@oracle.com>
parents:
diff
changeset
|
9 |
# Hardware SPARC T4 support by David S. Miller <[email protected]>. |
81dd404b35f2
24830961 OpenSSL FIPS work based on 1.0.2 for Oracle Solaris: Phase II
Misaki Miyashita <misaki.miyashita@oracle.com>
parents:
diff
changeset
|
10 |
# ==================================================================== |
81dd404b35f2
24830961 OpenSSL FIPS work based on 1.0.2 for Oracle Solaris: Phase II
Misaki Miyashita <misaki.miyashita@oracle.com>
parents:
diff
changeset
|
11 |
|
81dd404b35f2
24830961 OpenSSL FIPS work based on 1.0.2 for Oracle Solaris: Phase II
Misaki Miyashita <misaki.miyashita@oracle.com>
parents:
diff
changeset
|
12 |
# Performance improvement is not really impressive on pre-T1 CPU: +8% |
81dd404b35f2
24830961 OpenSSL FIPS work based on 1.0.2 for Oracle Solaris: Phase II
Misaki Miyashita <misaki.miyashita@oracle.com>
parents:
diff
changeset
|
13 |
# over Sun C and +25% over gcc [3.3]. While on T1, a.k.a. Niagara, it |
81dd404b35f2
24830961 OpenSSL FIPS work based on 1.0.2 for Oracle Solaris: Phase II
Misaki Miyashita <misaki.miyashita@oracle.com>
parents:
diff
changeset
|
14 |
# turned to be 40% faster than 64-bit code generated by Sun C 5.8 and |
81dd404b35f2
24830961 OpenSSL FIPS work based on 1.0.2 for Oracle Solaris: Phase II
Misaki Miyashita <misaki.miyashita@oracle.com>
parents:
diff
changeset
|
15 |
# >2x than 64-bit code generated by gcc 3.4. And there is a gimmick. |
81dd404b35f2
24830961 OpenSSL FIPS work based on 1.0.2 for Oracle Solaris: Phase II
Misaki Miyashita <misaki.miyashita@oracle.com>
parents:
diff
changeset
|
16 |
# X[16] vector is packed to 8 64-bit registers and as result nothing |
81dd404b35f2
24830961 OpenSSL FIPS work based on 1.0.2 for Oracle Solaris: Phase II
Misaki Miyashita <misaki.miyashita@oracle.com>
parents:
diff
changeset
|
17 |
# is spilled on stack. In addition input data is loaded in compact |
81dd404b35f2
24830961 OpenSSL FIPS work based on 1.0.2 for Oracle Solaris: Phase II
Misaki Miyashita <misaki.miyashita@oracle.com>
parents:
diff
changeset
|
18 |
# instruction sequence, thus minimizing the window when the code is |
81dd404b35f2
24830961 OpenSSL FIPS work based on 1.0.2 for Oracle Solaris: Phase II
Misaki Miyashita <misaki.miyashita@oracle.com>
parents:
diff
changeset
|
19 |
# subject to [inter-thread] cache-thrashing hazard. The goal is to |
81dd404b35f2
24830961 OpenSSL FIPS work based on 1.0.2 for Oracle Solaris: Phase II
Misaki Miyashita <misaki.miyashita@oracle.com>
parents:
diff
changeset
|
20 |
# ensure scalability on UltraSPARC T1, or rather to avoid decay when |
81dd404b35f2
24830961 OpenSSL FIPS work based on 1.0.2 for Oracle Solaris: Phase II
Misaki Miyashita <misaki.miyashita@oracle.com>
parents:
diff
changeset
|
21 |
# amount of active threads exceeds the number of physical cores. |
81dd404b35f2
24830961 OpenSSL FIPS work based on 1.0.2 for Oracle Solaris: Phase II
Misaki Miyashita <misaki.miyashita@oracle.com>
parents:
diff
changeset
|
22 |
|
81dd404b35f2
24830961 OpenSSL FIPS work based on 1.0.2 for Oracle Solaris: Phase II
Misaki Miyashita <misaki.miyashita@oracle.com>
parents:
diff
changeset
|
23 |
# SPARC T4 SHA1 hardware achieves 3.72 cycles per byte, which is 3.1x |
81dd404b35f2
24830961 OpenSSL FIPS work based on 1.0.2 for Oracle Solaris: Phase II
Misaki Miyashita <misaki.miyashita@oracle.com>
parents:
diff
changeset
|
24 |
# faster than software. Multi-process benchmark saturates at 11x |
81dd404b35f2
24830961 OpenSSL FIPS work based on 1.0.2 for Oracle Solaris: Phase II
Misaki Miyashita <misaki.miyashita@oracle.com>
parents:
diff
changeset
|
25 |
# single-process result on 8-core processor, or ~9GBps per 2.85GHz |
81dd404b35f2
24830961 OpenSSL FIPS work based on 1.0.2 for Oracle Solaris: Phase II
Misaki Miyashita <misaki.miyashita@oracle.com>
parents:
diff
changeset
|
26 |
# socket. |
81dd404b35f2
24830961 OpenSSL FIPS work based on 1.0.2 for Oracle Solaris: Phase II
Misaki Miyashita <misaki.miyashita@oracle.com>
parents:
diff
changeset
|
27 |
|
81dd404b35f2
24830961 OpenSSL FIPS work based on 1.0.2 for Oracle Solaris: Phase II
Misaki Miyashita <misaki.miyashita@oracle.com>
parents:
diff
changeset
|
28 |
$output=shift; |
81dd404b35f2
24830961 OpenSSL FIPS work based on 1.0.2 for Oracle Solaris: Phase II
Misaki Miyashita <misaki.miyashita@oracle.com>
parents:
diff
changeset
|
29 |
open STDOUT,">$output"; |
81dd404b35f2
24830961 OpenSSL FIPS work based on 1.0.2 for Oracle Solaris: Phase II
Misaki Miyashita <misaki.miyashita@oracle.com>
parents:
diff
changeset
|
30 |
|
81dd404b35f2
24830961 OpenSSL FIPS work based on 1.0.2 for Oracle Solaris: Phase II
Misaki Miyashita <misaki.miyashita@oracle.com>
parents:
diff
changeset
|
31 |
@X=("%o0","%o1","%o2","%o3","%o4","%o5","%g1","%o7"); |
81dd404b35f2
24830961 OpenSSL FIPS work based on 1.0.2 for Oracle Solaris: Phase II
Misaki Miyashita <misaki.miyashita@oracle.com>
parents:
diff
changeset
|
32 |
$rot1m="%g2"; |
81dd404b35f2
24830961 OpenSSL FIPS work based on 1.0.2 for Oracle Solaris: Phase II
Misaki Miyashita <misaki.miyashita@oracle.com>
parents:
diff
changeset
|
33 |
$tmp64="%g3"; |
81dd404b35f2
24830961 OpenSSL FIPS work based on 1.0.2 for Oracle Solaris: Phase II
Misaki Miyashita <misaki.miyashita@oracle.com>
parents:
diff
changeset
|
34 |
$Xi="%g4"; |
81dd404b35f2
24830961 OpenSSL FIPS work based on 1.0.2 for Oracle Solaris: Phase II
Misaki Miyashita <misaki.miyashita@oracle.com>
parents:
diff
changeset
|
35 |
$A="%l0"; |
81dd404b35f2
24830961 OpenSSL FIPS work based on 1.0.2 for Oracle Solaris: Phase II
Misaki Miyashita <misaki.miyashita@oracle.com>
parents:
diff
changeset
|
36 |
$B="%l1"; |
81dd404b35f2
24830961 OpenSSL FIPS work based on 1.0.2 for Oracle Solaris: Phase II
Misaki Miyashita <misaki.miyashita@oracle.com>
parents:
diff
changeset
|
37 |
$C="%l2"; |
81dd404b35f2
24830961 OpenSSL FIPS work based on 1.0.2 for Oracle Solaris: Phase II
Misaki Miyashita <misaki.miyashita@oracle.com>
parents:
diff
changeset
|
38 |
$D="%l3"; |
81dd404b35f2
24830961 OpenSSL FIPS work based on 1.0.2 for Oracle Solaris: Phase II
Misaki Miyashita <misaki.miyashita@oracle.com>
parents:
diff
changeset
|
39 |
$E="%l4"; |
81dd404b35f2
24830961 OpenSSL FIPS work based on 1.0.2 for Oracle Solaris: Phase II
Misaki Miyashita <misaki.miyashita@oracle.com>
parents:
diff
changeset
|
40 |
@V=($A,$B,$C,$D,$E); |
81dd404b35f2
24830961 OpenSSL FIPS work based on 1.0.2 for Oracle Solaris: Phase II
Misaki Miyashita <misaki.miyashita@oracle.com>
parents:
diff
changeset
|
41 |
$K_00_19="%l5"; |
81dd404b35f2
24830961 OpenSSL FIPS work based on 1.0.2 for Oracle Solaris: Phase II
Misaki Miyashita <misaki.miyashita@oracle.com>
parents:
diff
changeset
|
42 |
$K_20_39="%l6"; |
81dd404b35f2
24830961 OpenSSL FIPS work based on 1.0.2 for Oracle Solaris: Phase II
Misaki Miyashita <misaki.miyashita@oracle.com>
parents:
diff
changeset
|
43 |
$K_40_59="%l7"; |
81dd404b35f2
24830961 OpenSSL FIPS work based on 1.0.2 for Oracle Solaris: Phase II
Misaki Miyashita <misaki.miyashita@oracle.com>
parents:
diff
changeset
|
44 |
$K_60_79="%g5"; |
81dd404b35f2
24830961 OpenSSL FIPS work based on 1.0.2 for Oracle Solaris: Phase II
Misaki Miyashita <misaki.miyashita@oracle.com>
parents:
diff
changeset
|
45 |
@K=($K_00_19,$K_20_39,$K_40_59,$K_60_79); |
81dd404b35f2
24830961 OpenSSL FIPS work based on 1.0.2 for Oracle Solaris: Phase II
Misaki Miyashita <misaki.miyashita@oracle.com>
parents:
diff
changeset
|
46 |
|
81dd404b35f2
24830961 OpenSSL FIPS work based on 1.0.2 for Oracle Solaris: Phase II
Misaki Miyashita <misaki.miyashita@oracle.com>
parents:
diff
changeset
|
47 |
$ctx="%i0"; |
81dd404b35f2
24830961 OpenSSL FIPS work based on 1.0.2 for Oracle Solaris: Phase II
Misaki Miyashita <misaki.miyashita@oracle.com>
parents:
diff
changeset
|
48 |
$inp="%i1"; |
81dd404b35f2
24830961 OpenSSL FIPS work based on 1.0.2 for Oracle Solaris: Phase II
Misaki Miyashita <misaki.miyashita@oracle.com>
parents:
diff
changeset
|
49 |
$len="%i2"; |
81dd404b35f2
24830961 OpenSSL FIPS work based on 1.0.2 for Oracle Solaris: Phase II
Misaki Miyashita <misaki.miyashita@oracle.com>
parents:
diff
changeset
|
50 |
$tmp0="%i3"; |
81dd404b35f2
24830961 OpenSSL FIPS work based on 1.0.2 for Oracle Solaris: Phase II
Misaki Miyashita <misaki.miyashita@oracle.com>
parents:
diff
changeset
|
51 |
$tmp1="%i4"; |
81dd404b35f2
24830961 OpenSSL FIPS work based on 1.0.2 for Oracle Solaris: Phase II
Misaki Miyashita <misaki.miyashita@oracle.com>
parents:
diff
changeset
|
52 |
$tmp2="%i5"; |
81dd404b35f2
24830961 OpenSSL FIPS work based on 1.0.2 for Oracle Solaris: Phase II
Misaki Miyashita <misaki.miyashita@oracle.com>
parents:
diff
changeset
|
53 |
|
81dd404b35f2
24830961 OpenSSL FIPS work based on 1.0.2 for Oracle Solaris: Phase II
Misaki Miyashita <misaki.miyashita@oracle.com>
parents:
diff
changeset
|
54 |
sub BODY_00_15 { |
81dd404b35f2
24830961 OpenSSL FIPS work based on 1.0.2 for Oracle Solaris: Phase II
Misaki Miyashita <misaki.miyashita@oracle.com>
parents:
diff
changeset
|
55 |
my ($i,$a,$b,$c,$d,$e)=@_; |
81dd404b35f2
24830961 OpenSSL FIPS work based on 1.0.2 for Oracle Solaris: Phase II
Misaki Miyashita <misaki.miyashita@oracle.com>
parents:
diff
changeset
|
56 |
my $xi=($i&1)?@X[($i/2)%8]:$Xi; |
81dd404b35f2
24830961 OpenSSL FIPS work based on 1.0.2 for Oracle Solaris: Phase II
Misaki Miyashita <misaki.miyashita@oracle.com>
parents:
diff
changeset
|
57 |
|
81dd404b35f2
24830961 OpenSSL FIPS work based on 1.0.2 for Oracle Solaris: Phase II
Misaki Miyashita <misaki.miyashita@oracle.com>
parents:
diff
changeset
|
58 |
$code.=<<___; |
81dd404b35f2
24830961 OpenSSL FIPS work based on 1.0.2 for Oracle Solaris: Phase II
Misaki Miyashita <misaki.miyashita@oracle.com>
parents:
diff
changeset
|
59 |
sll $a,5,$tmp0 !! $i |
81dd404b35f2
24830961 OpenSSL FIPS work based on 1.0.2 for Oracle Solaris: Phase II
Misaki Miyashita <misaki.miyashita@oracle.com>
parents:
diff
changeset
|
60 |
add @K[$i/20],$e,$e |
81dd404b35f2
24830961 OpenSSL FIPS work based on 1.0.2 for Oracle Solaris: Phase II
Misaki Miyashita <misaki.miyashita@oracle.com>
parents:
diff
changeset
|
61 |
srl $a,27,$tmp1 |
81dd404b35f2
24830961 OpenSSL FIPS work based on 1.0.2 for Oracle Solaris: Phase II
Misaki Miyashita <misaki.miyashita@oracle.com>
parents:
diff
changeset
|
62 |
add $tmp0,$e,$e |
81dd404b35f2
24830961 OpenSSL FIPS work based on 1.0.2 for Oracle Solaris: Phase II
Misaki Miyashita <misaki.miyashita@oracle.com>
parents:
diff
changeset
|
63 |
and $c,$b,$tmp0 |
81dd404b35f2
24830961 OpenSSL FIPS work based on 1.0.2 for Oracle Solaris: Phase II
Misaki Miyashita <misaki.miyashita@oracle.com>
parents:
diff
changeset
|
64 |
add $tmp1,$e,$e |
81dd404b35f2
24830961 OpenSSL FIPS work based on 1.0.2 for Oracle Solaris: Phase II
Misaki Miyashita <misaki.miyashita@oracle.com>
parents:
diff
changeset
|
65 |
sll $b,30,$tmp2 |
81dd404b35f2
24830961 OpenSSL FIPS work based on 1.0.2 for Oracle Solaris: Phase II
Misaki Miyashita <misaki.miyashita@oracle.com>
parents:
diff
changeset
|
66 |
andn $d,$b,$tmp1 |
81dd404b35f2
24830961 OpenSSL FIPS work based on 1.0.2 for Oracle Solaris: Phase II
Misaki Miyashita <misaki.miyashita@oracle.com>
parents:
diff
changeset
|
67 |
srl $b,2,$b |
81dd404b35f2
24830961 OpenSSL FIPS work based on 1.0.2 for Oracle Solaris: Phase II
Misaki Miyashita <misaki.miyashita@oracle.com>
parents:
diff
changeset
|
68 |
or $tmp1,$tmp0,$tmp1 |
81dd404b35f2
24830961 OpenSSL FIPS work based on 1.0.2 for Oracle Solaris: Phase II
Misaki Miyashita <misaki.miyashita@oracle.com>
parents:
diff
changeset
|
69 |
or $tmp2,$b,$b |
81dd404b35f2
24830961 OpenSSL FIPS work based on 1.0.2 for Oracle Solaris: Phase II
Misaki Miyashita <misaki.miyashita@oracle.com>
parents:
diff
changeset
|
70 |
add $xi,$e,$e |
81dd404b35f2
24830961 OpenSSL FIPS work based on 1.0.2 for Oracle Solaris: Phase II
Misaki Miyashita <misaki.miyashita@oracle.com>
parents:
diff
changeset
|
71 |
___ |
81dd404b35f2
24830961 OpenSSL FIPS work based on 1.0.2 for Oracle Solaris: Phase II
Misaki Miyashita <misaki.miyashita@oracle.com>
parents:
diff
changeset
|
72 |
if ($i&1 && $i<15) { |
81dd404b35f2
24830961 OpenSSL FIPS work based on 1.0.2 for Oracle Solaris: Phase II
Misaki Miyashita <misaki.miyashita@oracle.com>
parents:
diff
changeset
|
73 |
$code.= |
81dd404b35f2
24830961 OpenSSL FIPS work based on 1.0.2 for Oracle Solaris: Phase II
Misaki Miyashita <misaki.miyashita@oracle.com>
parents:
diff
changeset
|
74 |
" srlx @X[(($i+1)/2)%8],32,$Xi\n"; |
81dd404b35f2
24830961 OpenSSL FIPS work based on 1.0.2 for Oracle Solaris: Phase II
Misaki Miyashita <misaki.miyashita@oracle.com>
parents:
diff
changeset
|
75 |
} |
81dd404b35f2
24830961 OpenSSL FIPS work based on 1.0.2 for Oracle Solaris: Phase II
Misaki Miyashita <misaki.miyashita@oracle.com>
parents:
diff
changeset
|
76 |
$code.=<<___; |
81dd404b35f2
24830961 OpenSSL FIPS work based on 1.0.2 for Oracle Solaris: Phase II
Misaki Miyashita <misaki.miyashita@oracle.com>
parents:
diff
changeset
|
77 |
add $tmp1,$e,$e |
81dd404b35f2
24830961 OpenSSL FIPS work based on 1.0.2 for Oracle Solaris: Phase II
Misaki Miyashita <misaki.miyashita@oracle.com>
parents:
diff
changeset
|
78 |
___ |
81dd404b35f2
24830961 OpenSSL FIPS work based on 1.0.2 for Oracle Solaris: Phase II
Misaki Miyashita <misaki.miyashita@oracle.com>
parents:
diff
changeset
|
79 |
} |
81dd404b35f2
24830961 OpenSSL FIPS work based on 1.0.2 for Oracle Solaris: Phase II
Misaki Miyashita <misaki.miyashita@oracle.com>
parents:
diff
changeset
|
80 |
|
81dd404b35f2
24830961 OpenSSL FIPS work based on 1.0.2 for Oracle Solaris: Phase II
Misaki Miyashita <misaki.miyashita@oracle.com>
parents:
diff
changeset
|
81 |
sub Xupdate { |
81dd404b35f2
24830961 OpenSSL FIPS work based on 1.0.2 for Oracle Solaris: Phase II
Misaki Miyashita <misaki.miyashita@oracle.com>
parents:
diff
changeset
|
82 |
my ($i,$a,$b,$c,$d,$e)=@_; |
81dd404b35f2
24830961 OpenSSL FIPS work based on 1.0.2 for Oracle Solaris: Phase II
Misaki Miyashita <misaki.miyashita@oracle.com>
parents:
diff
changeset
|
83 |
my $j=$i/2; |
81dd404b35f2
24830961 OpenSSL FIPS work based on 1.0.2 for Oracle Solaris: Phase II
Misaki Miyashita <misaki.miyashita@oracle.com>
parents:
diff
changeset
|
84 |
|
81dd404b35f2
24830961 OpenSSL FIPS work based on 1.0.2 for Oracle Solaris: Phase II
Misaki Miyashita <misaki.miyashita@oracle.com>
parents:
diff
changeset
|
85 |
if ($i&1) { |
81dd404b35f2
24830961 OpenSSL FIPS work based on 1.0.2 for Oracle Solaris: Phase II
Misaki Miyashita <misaki.miyashita@oracle.com>
parents:
diff
changeset
|
86 |
$code.=<<___; |
81dd404b35f2
24830961 OpenSSL FIPS work based on 1.0.2 for Oracle Solaris: Phase II
Misaki Miyashita <misaki.miyashita@oracle.com>
parents:
diff
changeset
|
87 |
sll $a,5,$tmp0 !! $i |
81dd404b35f2
24830961 OpenSSL FIPS work based on 1.0.2 for Oracle Solaris: Phase II
Misaki Miyashita <misaki.miyashita@oracle.com>
parents:
diff
changeset
|
88 |
add @K[$i/20],$e,$e |
81dd404b35f2
24830961 OpenSSL FIPS work based on 1.0.2 for Oracle Solaris: Phase II
Misaki Miyashita <misaki.miyashita@oracle.com>
parents:
diff
changeset
|
89 |
srl $a,27,$tmp1 |
81dd404b35f2
24830961 OpenSSL FIPS work based on 1.0.2 for Oracle Solaris: Phase II
Misaki Miyashita <misaki.miyashita@oracle.com>
parents:
diff
changeset
|
90 |
___ |
81dd404b35f2
24830961 OpenSSL FIPS work based on 1.0.2 for Oracle Solaris: Phase II
Misaki Miyashita <misaki.miyashita@oracle.com>
parents:
diff
changeset
|
91 |
} else { |
81dd404b35f2
24830961 OpenSSL FIPS work based on 1.0.2 for Oracle Solaris: Phase II
Misaki Miyashita <misaki.miyashita@oracle.com>
parents:
diff
changeset
|
92 |
$code.=<<___; |
81dd404b35f2
24830961 OpenSSL FIPS work based on 1.0.2 for Oracle Solaris: Phase II
Misaki Miyashita <misaki.miyashita@oracle.com>
parents:
diff
changeset
|
93 |
sllx @X[($j+6)%8],32,$Xi ! Xupdate($i) |
81dd404b35f2
24830961 OpenSSL FIPS work based on 1.0.2 for Oracle Solaris: Phase II
Misaki Miyashita <misaki.miyashita@oracle.com>
parents:
diff
changeset
|
94 |
xor @X[($j+1)%8],@X[$j%8],@X[$j%8] |
81dd404b35f2
24830961 OpenSSL FIPS work based on 1.0.2 for Oracle Solaris: Phase II
Misaki Miyashita <misaki.miyashita@oracle.com>
parents:
diff
changeset
|
95 |
srlx @X[($j+7)%8],32,$tmp1 |
81dd404b35f2
24830961 OpenSSL FIPS work based on 1.0.2 for Oracle Solaris: Phase II
Misaki Miyashita <misaki.miyashita@oracle.com>
parents:
diff
changeset
|
96 |
xor @X[($j+4)%8],@X[$j%8],@X[$j%8] |
81dd404b35f2
24830961 OpenSSL FIPS work based on 1.0.2 for Oracle Solaris: Phase II
Misaki Miyashita <misaki.miyashita@oracle.com>
parents:
diff
changeset
|
97 |
sll $a,5,$tmp0 !! $i |
81dd404b35f2
24830961 OpenSSL FIPS work based on 1.0.2 for Oracle Solaris: Phase II
Misaki Miyashita <misaki.miyashita@oracle.com>
parents:
diff
changeset
|
98 |
or $tmp1,$Xi,$Xi |
81dd404b35f2
24830961 OpenSSL FIPS work based on 1.0.2 for Oracle Solaris: Phase II
Misaki Miyashita <misaki.miyashita@oracle.com>
parents:
diff
changeset
|
99 |
add @K[$i/20],$e,$e !! |
81dd404b35f2
24830961 OpenSSL FIPS work based on 1.0.2 for Oracle Solaris: Phase II
Misaki Miyashita <misaki.miyashita@oracle.com>
parents:
diff
changeset
|
100 |
xor $Xi,@X[$j%8],@X[$j%8] |
81dd404b35f2
24830961 OpenSSL FIPS work based on 1.0.2 for Oracle Solaris: Phase II
Misaki Miyashita <misaki.miyashita@oracle.com>
parents:
diff
changeset
|
101 |
srlx @X[$j%8],31,$Xi |
81dd404b35f2
24830961 OpenSSL FIPS work based on 1.0.2 for Oracle Solaris: Phase II
Misaki Miyashita <misaki.miyashita@oracle.com>
parents:
diff
changeset
|
102 |
add @X[$j%8],@X[$j%8],@X[$j%8] |
81dd404b35f2
24830961 OpenSSL FIPS work based on 1.0.2 for Oracle Solaris: Phase II
Misaki Miyashita <misaki.miyashita@oracle.com>
parents:
diff
changeset
|
103 |
and $Xi,$rot1m,$Xi |
81dd404b35f2
24830961 OpenSSL FIPS work based on 1.0.2 for Oracle Solaris: Phase II
Misaki Miyashita <misaki.miyashita@oracle.com>
parents:
diff
changeset
|
104 |
andn @X[$j%8],$rot1m,@X[$j%8] |
81dd404b35f2
24830961 OpenSSL FIPS work based on 1.0.2 for Oracle Solaris: Phase II
Misaki Miyashita <misaki.miyashita@oracle.com>
parents:
diff
changeset
|
105 |
srl $a,27,$tmp1 !! |
81dd404b35f2
24830961 OpenSSL FIPS work based on 1.0.2 for Oracle Solaris: Phase II
Misaki Miyashita <misaki.miyashita@oracle.com>
parents:
diff
changeset
|
106 |
or $Xi,@X[$j%8],@X[$j%8] |
81dd404b35f2
24830961 OpenSSL FIPS work based on 1.0.2 for Oracle Solaris: Phase II
Misaki Miyashita <misaki.miyashita@oracle.com>
parents:
diff
changeset
|
107 |
___ |
81dd404b35f2
24830961 OpenSSL FIPS work based on 1.0.2 for Oracle Solaris: Phase II
Misaki Miyashita <misaki.miyashita@oracle.com>
parents:
diff
changeset
|
108 |
} |
81dd404b35f2
24830961 OpenSSL FIPS work based on 1.0.2 for Oracle Solaris: Phase II
Misaki Miyashita <misaki.miyashita@oracle.com>
parents:
diff
changeset
|
109 |
} |
81dd404b35f2
24830961 OpenSSL FIPS work based on 1.0.2 for Oracle Solaris: Phase II
Misaki Miyashita <misaki.miyashita@oracle.com>
parents:
diff
changeset
|
110 |
|
81dd404b35f2
24830961 OpenSSL FIPS work based on 1.0.2 for Oracle Solaris: Phase II
Misaki Miyashita <misaki.miyashita@oracle.com>
parents:
diff
changeset
|
111 |
sub BODY_16_19 { |
81dd404b35f2
24830961 OpenSSL FIPS work based on 1.0.2 for Oracle Solaris: Phase II
Misaki Miyashita <misaki.miyashita@oracle.com>
parents:
diff
changeset
|
112 |
my ($i,$a,$b,$c,$d,$e)=@_; |
81dd404b35f2
24830961 OpenSSL FIPS work based on 1.0.2 for Oracle Solaris: Phase II
Misaki Miyashita <misaki.miyashita@oracle.com>
parents:
diff
changeset
|
113 |
|
81dd404b35f2
24830961 OpenSSL FIPS work based on 1.0.2 for Oracle Solaris: Phase II
Misaki Miyashita <misaki.miyashita@oracle.com>
parents:
diff
changeset
|
114 |
&Xupdate(@_); |
81dd404b35f2
24830961 OpenSSL FIPS work based on 1.0.2 for Oracle Solaris: Phase II
Misaki Miyashita <misaki.miyashita@oracle.com>
parents:
diff
changeset
|
115 |
if ($i&1) { |
81dd404b35f2
24830961 OpenSSL FIPS work based on 1.0.2 for Oracle Solaris: Phase II
Misaki Miyashita <misaki.miyashita@oracle.com>
parents:
diff
changeset
|
116 |
$xi=@X[($i/2)%8]; |
81dd404b35f2
24830961 OpenSSL FIPS work based on 1.0.2 for Oracle Solaris: Phase II
Misaki Miyashita <misaki.miyashita@oracle.com>
parents:
diff
changeset
|
117 |
} else { |
81dd404b35f2
24830961 OpenSSL FIPS work based on 1.0.2 for Oracle Solaris: Phase II
Misaki Miyashita <misaki.miyashita@oracle.com>
parents:
diff
changeset
|
118 |
$xi=$Xi; |
81dd404b35f2
24830961 OpenSSL FIPS work based on 1.0.2 for Oracle Solaris: Phase II
Misaki Miyashita <misaki.miyashita@oracle.com>
parents:
diff
changeset
|
119 |
$code.="\tsrlx @X[($i/2)%8],32,$xi\n"; |
81dd404b35f2
24830961 OpenSSL FIPS work based on 1.0.2 for Oracle Solaris: Phase II
Misaki Miyashita <misaki.miyashita@oracle.com>
parents:
diff
changeset
|
120 |
} |
81dd404b35f2
24830961 OpenSSL FIPS work based on 1.0.2 for Oracle Solaris: Phase II
Misaki Miyashita <misaki.miyashita@oracle.com>
parents:
diff
changeset
|
121 |
$code.=<<___; |
81dd404b35f2
24830961 OpenSSL FIPS work based on 1.0.2 for Oracle Solaris: Phase II
Misaki Miyashita <misaki.miyashita@oracle.com>
parents:
diff
changeset
|
122 |
add $tmp0,$e,$e !! |
81dd404b35f2
24830961 OpenSSL FIPS work based on 1.0.2 for Oracle Solaris: Phase II
Misaki Miyashita <misaki.miyashita@oracle.com>
parents:
diff
changeset
|
123 |
and $c,$b,$tmp0 |
81dd404b35f2
24830961 OpenSSL FIPS work based on 1.0.2 for Oracle Solaris: Phase II
Misaki Miyashita <misaki.miyashita@oracle.com>
parents:
diff
changeset
|
124 |
add $tmp1,$e,$e |
81dd404b35f2
24830961 OpenSSL FIPS work based on 1.0.2 for Oracle Solaris: Phase II
Misaki Miyashita <misaki.miyashita@oracle.com>
parents:
diff
changeset
|
125 |
sll $b,30,$tmp2 |
81dd404b35f2
24830961 OpenSSL FIPS work based on 1.0.2 for Oracle Solaris: Phase II
Misaki Miyashita <misaki.miyashita@oracle.com>
parents:
diff
changeset
|
126 |
add $xi,$e,$e |
81dd404b35f2
24830961 OpenSSL FIPS work based on 1.0.2 for Oracle Solaris: Phase II
Misaki Miyashita <misaki.miyashita@oracle.com>
parents:
diff
changeset
|
127 |
andn $d,$b,$tmp1 |
81dd404b35f2
24830961 OpenSSL FIPS work based on 1.0.2 for Oracle Solaris: Phase II
Misaki Miyashita <misaki.miyashita@oracle.com>
parents:
diff
changeset
|
128 |
srl $b,2,$b |
81dd404b35f2
24830961 OpenSSL FIPS work based on 1.0.2 for Oracle Solaris: Phase II
Misaki Miyashita <misaki.miyashita@oracle.com>
parents:
diff
changeset
|
129 |
or $tmp1,$tmp0,$tmp1 |
81dd404b35f2
24830961 OpenSSL FIPS work based on 1.0.2 for Oracle Solaris: Phase II
Misaki Miyashita <misaki.miyashita@oracle.com>
parents:
diff
changeset
|
130 |
or $tmp2,$b,$b |
81dd404b35f2
24830961 OpenSSL FIPS work based on 1.0.2 for Oracle Solaris: Phase II
Misaki Miyashita <misaki.miyashita@oracle.com>
parents:
diff
changeset
|
131 |
add $tmp1,$e,$e |
81dd404b35f2
24830961 OpenSSL FIPS work based on 1.0.2 for Oracle Solaris: Phase II
Misaki Miyashita <misaki.miyashita@oracle.com>
parents:
diff
changeset
|
132 |
___ |
81dd404b35f2
24830961 OpenSSL FIPS work based on 1.0.2 for Oracle Solaris: Phase II
Misaki Miyashita <misaki.miyashita@oracle.com>
parents:
diff
changeset
|
133 |
} |
81dd404b35f2
24830961 OpenSSL FIPS work based on 1.0.2 for Oracle Solaris: Phase II
Misaki Miyashita <misaki.miyashita@oracle.com>
parents:
diff
changeset
|
134 |
|
81dd404b35f2
24830961 OpenSSL FIPS work based on 1.0.2 for Oracle Solaris: Phase II
Misaki Miyashita <misaki.miyashita@oracle.com>
parents:
diff
changeset
|
135 |
sub BODY_20_39 { |
81dd404b35f2
24830961 OpenSSL FIPS work based on 1.0.2 for Oracle Solaris: Phase II
Misaki Miyashita <misaki.miyashita@oracle.com>
parents:
diff
changeset
|
136 |
my ($i,$a,$b,$c,$d,$e)=@_; |
81dd404b35f2
24830961 OpenSSL FIPS work based on 1.0.2 for Oracle Solaris: Phase II
Misaki Miyashita <misaki.miyashita@oracle.com>
parents:
diff
changeset
|
137 |
my $xi; |
81dd404b35f2
24830961 OpenSSL FIPS work based on 1.0.2 for Oracle Solaris: Phase II
Misaki Miyashita <misaki.miyashita@oracle.com>
parents:
diff
changeset
|
138 |
&Xupdate(@_); |
81dd404b35f2
24830961 OpenSSL FIPS work based on 1.0.2 for Oracle Solaris: Phase II
Misaki Miyashita <misaki.miyashita@oracle.com>
parents:
diff
changeset
|
139 |
if ($i&1) { |
81dd404b35f2
24830961 OpenSSL FIPS work based on 1.0.2 for Oracle Solaris: Phase II
Misaki Miyashita <misaki.miyashita@oracle.com>
parents:
diff
changeset
|
140 |
$xi=@X[($i/2)%8]; |
81dd404b35f2
24830961 OpenSSL FIPS work based on 1.0.2 for Oracle Solaris: Phase II
Misaki Miyashita <misaki.miyashita@oracle.com>
parents:
diff
changeset
|
141 |
} else { |
81dd404b35f2
24830961 OpenSSL FIPS work based on 1.0.2 for Oracle Solaris: Phase II
Misaki Miyashita <misaki.miyashita@oracle.com>
parents:
diff
changeset
|
142 |
$xi=$Xi; |
81dd404b35f2
24830961 OpenSSL FIPS work based on 1.0.2 for Oracle Solaris: Phase II
Misaki Miyashita <misaki.miyashita@oracle.com>
parents:
diff
changeset
|
143 |
$code.="\tsrlx @X[($i/2)%8],32,$xi\n"; |
81dd404b35f2
24830961 OpenSSL FIPS work based on 1.0.2 for Oracle Solaris: Phase II
Misaki Miyashita <misaki.miyashita@oracle.com>
parents:
diff
changeset
|
144 |
} |
81dd404b35f2
24830961 OpenSSL FIPS work based on 1.0.2 for Oracle Solaris: Phase II
Misaki Miyashita <misaki.miyashita@oracle.com>
parents:
diff
changeset
|
145 |
$code.=<<___; |
81dd404b35f2
24830961 OpenSSL FIPS work based on 1.0.2 for Oracle Solaris: Phase II
Misaki Miyashita <misaki.miyashita@oracle.com>
parents:
diff
changeset
|
146 |
add $tmp0,$e,$e !! |
81dd404b35f2
24830961 OpenSSL FIPS work based on 1.0.2 for Oracle Solaris: Phase II
Misaki Miyashita <misaki.miyashita@oracle.com>
parents:
diff
changeset
|
147 |
xor $c,$b,$tmp0 |
81dd404b35f2
24830961 OpenSSL FIPS work based on 1.0.2 for Oracle Solaris: Phase II
Misaki Miyashita <misaki.miyashita@oracle.com>
parents:
diff
changeset
|
148 |
add $tmp1,$e,$e |
81dd404b35f2
24830961 OpenSSL FIPS work based on 1.0.2 for Oracle Solaris: Phase II
Misaki Miyashita <misaki.miyashita@oracle.com>
parents:
diff
changeset
|
149 |
sll $b,30,$tmp2 |
81dd404b35f2
24830961 OpenSSL FIPS work based on 1.0.2 for Oracle Solaris: Phase II
Misaki Miyashita <misaki.miyashita@oracle.com>
parents:
diff
changeset
|
150 |
xor $d,$tmp0,$tmp1 |
81dd404b35f2
24830961 OpenSSL FIPS work based on 1.0.2 for Oracle Solaris: Phase II
Misaki Miyashita <misaki.miyashita@oracle.com>
parents:
diff
changeset
|
151 |
srl $b,2,$b |
81dd404b35f2
24830961 OpenSSL FIPS work based on 1.0.2 for Oracle Solaris: Phase II
Misaki Miyashita <misaki.miyashita@oracle.com>
parents:
diff
changeset
|
152 |
add $tmp1,$e,$e |
81dd404b35f2
24830961 OpenSSL FIPS work based on 1.0.2 for Oracle Solaris: Phase II
Misaki Miyashita <misaki.miyashita@oracle.com>
parents:
diff
changeset
|
153 |
or $tmp2,$b,$b |
81dd404b35f2
24830961 OpenSSL FIPS work based on 1.0.2 for Oracle Solaris: Phase II
Misaki Miyashita <misaki.miyashita@oracle.com>
parents:
diff
changeset
|
154 |
add $xi,$e,$e |
81dd404b35f2
24830961 OpenSSL FIPS work based on 1.0.2 for Oracle Solaris: Phase II
Misaki Miyashita <misaki.miyashita@oracle.com>
parents:
diff
changeset
|
155 |
___ |
81dd404b35f2
24830961 OpenSSL FIPS work based on 1.0.2 for Oracle Solaris: Phase II
Misaki Miyashita <misaki.miyashita@oracle.com>
parents:
diff
changeset
|
156 |
} |
81dd404b35f2
24830961 OpenSSL FIPS work based on 1.0.2 for Oracle Solaris: Phase II
Misaki Miyashita <misaki.miyashita@oracle.com>
parents:
diff
changeset
|
157 |
|
81dd404b35f2
24830961 OpenSSL FIPS work based on 1.0.2 for Oracle Solaris: Phase II
Misaki Miyashita <misaki.miyashita@oracle.com>
parents:
diff
changeset
|
158 |
sub BODY_40_59 { |
81dd404b35f2
24830961 OpenSSL FIPS work based on 1.0.2 for Oracle Solaris: Phase II
Misaki Miyashita <misaki.miyashita@oracle.com>
parents:
diff
changeset
|
159 |
my ($i,$a,$b,$c,$d,$e)=@_; |
81dd404b35f2
24830961 OpenSSL FIPS work based on 1.0.2 for Oracle Solaris: Phase II
Misaki Miyashita <misaki.miyashita@oracle.com>
parents:
diff
changeset
|
160 |
my $xi; |
81dd404b35f2
24830961 OpenSSL FIPS work based on 1.0.2 for Oracle Solaris: Phase II
Misaki Miyashita <misaki.miyashita@oracle.com>
parents:
diff
changeset
|
161 |
&Xupdate(@_); |
81dd404b35f2
24830961 OpenSSL FIPS work based on 1.0.2 for Oracle Solaris: Phase II
Misaki Miyashita <misaki.miyashita@oracle.com>
parents:
diff
changeset
|
162 |
if ($i&1) { |
81dd404b35f2
24830961 OpenSSL FIPS work based on 1.0.2 for Oracle Solaris: Phase II
Misaki Miyashita <misaki.miyashita@oracle.com>
parents:
diff
changeset
|
163 |
$xi=@X[($i/2)%8]; |
81dd404b35f2
24830961 OpenSSL FIPS work based on 1.0.2 for Oracle Solaris: Phase II
Misaki Miyashita <misaki.miyashita@oracle.com>
parents:
diff
changeset
|
164 |
} else { |
81dd404b35f2
24830961 OpenSSL FIPS work based on 1.0.2 for Oracle Solaris: Phase II
Misaki Miyashita <misaki.miyashita@oracle.com>
parents:
diff
changeset
|
165 |
$xi=$Xi; |
81dd404b35f2
24830961 OpenSSL FIPS work based on 1.0.2 for Oracle Solaris: Phase II
Misaki Miyashita <misaki.miyashita@oracle.com>
parents:
diff
changeset
|
166 |
$code.="\tsrlx @X[($i/2)%8],32,$xi\n"; |
81dd404b35f2
24830961 OpenSSL FIPS work based on 1.0.2 for Oracle Solaris: Phase II
Misaki Miyashita <misaki.miyashita@oracle.com>
parents:
diff
changeset
|
167 |
} |
81dd404b35f2
24830961 OpenSSL FIPS work based on 1.0.2 for Oracle Solaris: Phase II
Misaki Miyashita <misaki.miyashita@oracle.com>
parents:
diff
changeset
|
168 |
$code.=<<___; |
81dd404b35f2
24830961 OpenSSL FIPS work based on 1.0.2 for Oracle Solaris: Phase II
Misaki Miyashita <misaki.miyashita@oracle.com>
parents:
diff
changeset
|
169 |
add $tmp0,$e,$e !! |
81dd404b35f2
24830961 OpenSSL FIPS work based on 1.0.2 for Oracle Solaris: Phase II
Misaki Miyashita <misaki.miyashita@oracle.com>
parents:
diff
changeset
|
170 |
and $c,$b,$tmp0 |
81dd404b35f2
24830961 OpenSSL FIPS work based on 1.0.2 for Oracle Solaris: Phase II
Misaki Miyashita <misaki.miyashita@oracle.com>
parents:
diff
changeset
|
171 |
add $tmp1,$e,$e |
81dd404b35f2
24830961 OpenSSL FIPS work based on 1.0.2 for Oracle Solaris: Phase II
Misaki Miyashita <misaki.miyashita@oracle.com>
parents:
diff
changeset
|
172 |
sll $b,30,$tmp2 |
81dd404b35f2
24830961 OpenSSL FIPS work based on 1.0.2 for Oracle Solaris: Phase II
Misaki Miyashita <misaki.miyashita@oracle.com>
parents:
diff
changeset
|
173 |
or $c,$b,$tmp1 |
81dd404b35f2
24830961 OpenSSL FIPS work based on 1.0.2 for Oracle Solaris: Phase II
Misaki Miyashita <misaki.miyashita@oracle.com>
parents:
diff
changeset
|
174 |
srl $b,2,$b |
81dd404b35f2
24830961 OpenSSL FIPS work based on 1.0.2 for Oracle Solaris: Phase II
Misaki Miyashita <misaki.miyashita@oracle.com>
parents:
diff
changeset
|
175 |
and $d,$tmp1,$tmp1 |
81dd404b35f2
24830961 OpenSSL FIPS work based on 1.0.2 for Oracle Solaris: Phase II
Misaki Miyashita <misaki.miyashita@oracle.com>
parents:
diff
changeset
|
176 |
add $xi,$e,$e |
81dd404b35f2
24830961 OpenSSL FIPS work based on 1.0.2 for Oracle Solaris: Phase II
Misaki Miyashita <misaki.miyashita@oracle.com>
parents:
diff
changeset
|
177 |
or $tmp1,$tmp0,$tmp1 |
81dd404b35f2
24830961 OpenSSL FIPS work based on 1.0.2 for Oracle Solaris: Phase II
Misaki Miyashita <misaki.miyashita@oracle.com>
parents:
diff
changeset
|
178 |
or $tmp2,$b,$b |
81dd404b35f2
24830961 OpenSSL FIPS work based on 1.0.2 for Oracle Solaris: Phase II
Misaki Miyashita <misaki.miyashita@oracle.com>
parents:
diff
changeset
|
179 |
add $tmp1,$e,$e |
81dd404b35f2
24830961 OpenSSL FIPS work based on 1.0.2 for Oracle Solaris: Phase II
Misaki Miyashita <misaki.miyashita@oracle.com>
parents:
diff
changeset
|
180 |
___ |
81dd404b35f2
24830961 OpenSSL FIPS work based on 1.0.2 for Oracle Solaris: Phase II
Misaki Miyashita <misaki.miyashita@oracle.com>
parents:
diff
changeset
|
181 |
} |
81dd404b35f2
24830961 OpenSSL FIPS work based on 1.0.2 for Oracle Solaris: Phase II
Misaki Miyashita <misaki.miyashita@oracle.com>
parents:
diff
changeset
|
182 |
|
81dd404b35f2
24830961 OpenSSL FIPS work based on 1.0.2 for Oracle Solaris: Phase II
Misaki Miyashita <misaki.miyashita@oracle.com>
parents:
diff
changeset
|
183 |
$code.=<<___; |
81dd404b35f2
24830961 OpenSSL FIPS work based on 1.0.2 for Oracle Solaris: Phase II
Misaki Miyashita <misaki.miyashita@oracle.com>
parents:
diff
changeset
|
184 |
#include "sparc_arch.h" |
81dd404b35f2
24830961 OpenSSL FIPS work based on 1.0.2 for Oracle Solaris: Phase II
Misaki Miyashita <misaki.miyashita@oracle.com>
parents:
diff
changeset
|
185 |
#include <openssl/fipssyms.h> |
81dd404b35f2
24830961 OpenSSL FIPS work based on 1.0.2 for Oracle Solaris: Phase II
Misaki Miyashita <misaki.miyashita@oracle.com>
parents:
diff
changeset
|
186 |
|
81dd404b35f2
24830961 OpenSSL FIPS work based on 1.0.2 for Oracle Solaris: Phase II
Misaki Miyashita <misaki.miyashita@oracle.com>
parents:
diff
changeset
|
187 |
#ifdef __arch64__ |
81dd404b35f2
24830961 OpenSSL FIPS work based on 1.0.2 for Oracle Solaris: Phase II
Misaki Miyashita <misaki.miyashita@oracle.com>
parents:
diff
changeset
|
188 |
.register %g2,#scratch |
81dd404b35f2
24830961 OpenSSL FIPS work based on 1.0.2 for Oracle Solaris: Phase II
Misaki Miyashita <misaki.miyashita@oracle.com>
parents:
diff
changeset
|
189 |
.register %g3,#scratch |
81dd404b35f2
24830961 OpenSSL FIPS work based on 1.0.2 for Oracle Solaris: Phase II
Misaki Miyashita <misaki.miyashita@oracle.com>
parents:
diff
changeset
|
190 |
#endif |
81dd404b35f2
24830961 OpenSSL FIPS work based on 1.0.2 for Oracle Solaris: Phase II
Misaki Miyashita <misaki.miyashita@oracle.com>
parents:
diff
changeset
|
191 |
|
81dd404b35f2
24830961 OpenSSL FIPS work based on 1.0.2 for Oracle Solaris: Phase II
Misaki Miyashita <misaki.miyashita@oracle.com>
parents:
diff
changeset
|
192 |
.section ".text",#alloc,#execinstr |
81dd404b35f2
24830961 OpenSSL FIPS work based on 1.0.2 for Oracle Solaris: Phase II
Misaki Miyashita <misaki.miyashita@oracle.com>
parents:
diff
changeset
|
193 |
|
81dd404b35f2
24830961 OpenSSL FIPS work based on 1.0.2 for Oracle Solaris: Phase II
Misaki Miyashita <misaki.miyashita@oracle.com>
parents:
diff
changeset
|
194 |
#ifdef __PIC__ |
81dd404b35f2
24830961 OpenSSL FIPS work based on 1.0.2 for Oracle Solaris: Phase II
Misaki Miyashita <misaki.miyashita@oracle.com>
parents:
diff
changeset
|
195 |
SPARC_PIC_THUNK(%g1) |
81dd404b35f2
24830961 OpenSSL FIPS work based on 1.0.2 for Oracle Solaris: Phase II
Misaki Miyashita <misaki.miyashita@oracle.com>
parents:
diff
changeset
|
196 |
#endif |
81dd404b35f2
24830961 OpenSSL FIPS work based on 1.0.2 for Oracle Solaris: Phase II
Misaki Miyashita <misaki.miyashita@oracle.com>
parents:
diff
changeset
|
197 |
|
81dd404b35f2
24830961 OpenSSL FIPS work based on 1.0.2 for Oracle Solaris: Phase II
Misaki Miyashita <misaki.miyashita@oracle.com>
parents:
diff
changeset
|
198 |
.align 32 |
81dd404b35f2
24830961 OpenSSL FIPS work based on 1.0.2 for Oracle Solaris: Phase II
Misaki Miyashita <misaki.miyashita@oracle.com>
parents:
diff
changeset
|
199 |
.globl sha1_block_data_order |
81dd404b35f2
24830961 OpenSSL FIPS work based on 1.0.2 for Oracle Solaris: Phase II
Misaki Miyashita <misaki.miyashita@oracle.com>
parents:
diff
changeset
|
200 |
sha1_block_data_order: |
81dd404b35f2
24830961 OpenSSL FIPS work based on 1.0.2 for Oracle Solaris: Phase II
Misaki Miyashita <misaki.miyashita@oracle.com>
parents:
diff
changeset
|
201 |
SPARC_LOAD_ADDRESS_LEAF(OPENSSL_sparcv9cap_P,%g1,%g5) |
81dd404b35f2
24830961 OpenSSL FIPS work based on 1.0.2 for Oracle Solaris: Phase II
Misaki Miyashita <misaki.miyashita@oracle.com>
parents:
diff
changeset
|
202 |
ld [%g1+4],%g1 ! OPENSSL_sparcv9cap_P[1] |
81dd404b35f2
24830961 OpenSSL FIPS work based on 1.0.2 for Oracle Solaris: Phase II
Misaki Miyashita <misaki.miyashita@oracle.com>
parents:
diff
changeset
|
203 |
|
81dd404b35f2
24830961 OpenSSL FIPS work based on 1.0.2 for Oracle Solaris: Phase II
Misaki Miyashita <misaki.miyashita@oracle.com>
parents:
diff
changeset
|
204 |
andcc %g1, CFR_SHA1, %g0 |
81dd404b35f2
24830961 OpenSSL FIPS work based on 1.0.2 for Oracle Solaris: Phase II
Misaki Miyashita <misaki.miyashita@oracle.com>
parents:
diff
changeset
|
205 |
be .Lsoftware |
81dd404b35f2
24830961 OpenSSL FIPS work based on 1.0.2 for Oracle Solaris: Phase II
Misaki Miyashita <misaki.miyashita@oracle.com>
parents:
diff
changeset
|
206 |
nop |
81dd404b35f2
24830961 OpenSSL FIPS work based on 1.0.2 for Oracle Solaris: Phase II
Misaki Miyashita <misaki.miyashita@oracle.com>
parents:
diff
changeset
|
207 |
|
81dd404b35f2
24830961 OpenSSL FIPS work based on 1.0.2 for Oracle Solaris: Phase II
Misaki Miyashita <misaki.miyashita@oracle.com>
parents:
diff
changeset
|
208 |
ld [%o0 + 0x00], %f0 ! load context |
81dd404b35f2
24830961 OpenSSL FIPS work based on 1.0.2 for Oracle Solaris: Phase II
Misaki Miyashita <misaki.miyashita@oracle.com>
parents:
diff
changeset
|
209 |
ld [%o0 + 0x04], %f1 |
81dd404b35f2
24830961 OpenSSL FIPS work based on 1.0.2 for Oracle Solaris: Phase II
Misaki Miyashita <misaki.miyashita@oracle.com>
parents:
diff
changeset
|
210 |
ld [%o0 + 0x08], %f2 |
81dd404b35f2
24830961 OpenSSL FIPS work based on 1.0.2 for Oracle Solaris: Phase II
Misaki Miyashita <misaki.miyashita@oracle.com>
parents:
diff
changeset
|
211 |
andcc %o1, 0x7, %g0 |
81dd404b35f2
24830961 OpenSSL FIPS work based on 1.0.2 for Oracle Solaris: Phase II
Misaki Miyashita <misaki.miyashita@oracle.com>
parents:
diff
changeset
|
212 |
ld [%o0 + 0x0c], %f3 |
81dd404b35f2
24830961 OpenSSL FIPS work based on 1.0.2 for Oracle Solaris: Phase II
Misaki Miyashita <misaki.miyashita@oracle.com>
parents:
diff
changeset
|
213 |
bne,pn %icc, .Lhwunaligned |
81dd404b35f2
24830961 OpenSSL FIPS work based on 1.0.2 for Oracle Solaris: Phase II
Misaki Miyashita <misaki.miyashita@oracle.com>
parents:
diff
changeset
|
214 |
ld [%o0 + 0x10], %f4 |
81dd404b35f2
24830961 OpenSSL FIPS work based on 1.0.2 for Oracle Solaris: Phase II
Misaki Miyashita <misaki.miyashita@oracle.com>
parents:
diff
changeset
|
215 |
|
81dd404b35f2
24830961 OpenSSL FIPS work based on 1.0.2 for Oracle Solaris: Phase II
Misaki Miyashita <misaki.miyashita@oracle.com>
parents:
diff
changeset
|
216 |
.Lhw_loop: |
81dd404b35f2
24830961 OpenSSL FIPS work based on 1.0.2 for Oracle Solaris: Phase II
Misaki Miyashita <misaki.miyashita@oracle.com>
parents:
diff
changeset
|
217 |
ldd [%o1 + 0x00], %f8 |
81dd404b35f2
24830961 OpenSSL FIPS work based on 1.0.2 for Oracle Solaris: Phase II
Misaki Miyashita <misaki.miyashita@oracle.com>
parents:
diff
changeset
|
218 |
ldd [%o1 + 0x08], %f10 |
81dd404b35f2
24830961 OpenSSL FIPS work based on 1.0.2 for Oracle Solaris: Phase II
Misaki Miyashita <misaki.miyashita@oracle.com>
parents:
diff
changeset
|
219 |
ldd [%o1 + 0x10], %f12 |
81dd404b35f2
24830961 OpenSSL FIPS work based on 1.0.2 for Oracle Solaris: Phase II
Misaki Miyashita <misaki.miyashita@oracle.com>
parents:
diff
changeset
|
220 |
ldd [%o1 + 0x18], %f14 |
81dd404b35f2
24830961 OpenSSL FIPS work based on 1.0.2 for Oracle Solaris: Phase II
Misaki Miyashita <misaki.miyashita@oracle.com>
parents:
diff
changeset
|
221 |
ldd [%o1 + 0x20], %f16 |
81dd404b35f2
24830961 OpenSSL FIPS work based on 1.0.2 for Oracle Solaris: Phase II
Misaki Miyashita <misaki.miyashita@oracle.com>
parents:
diff
changeset
|
222 |
ldd [%o1 + 0x28], %f18 |
81dd404b35f2
24830961 OpenSSL FIPS work based on 1.0.2 for Oracle Solaris: Phase II
Misaki Miyashita <misaki.miyashita@oracle.com>
parents:
diff
changeset
|
223 |
ldd [%o1 + 0x30], %f20 |
81dd404b35f2
24830961 OpenSSL FIPS work based on 1.0.2 for Oracle Solaris: Phase II
Misaki Miyashita <misaki.miyashita@oracle.com>
parents:
diff
changeset
|
224 |
subcc %o2, 1, %o2 ! done yet? |
81dd404b35f2
24830961 OpenSSL FIPS work based on 1.0.2 for Oracle Solaris: Phase II
Misaki Miyashita <misaki.miyashita@oracle.com>
parents:
diff
changeset
|
225 |
ldd [%o1 + 0x38], %f22 |
81dd404b35f2
24830961 OpenSSL FIPS work based on 1.0.2 for Oracle Solaris: Phase II
Misaki Miyashita <misaki.miyashita@oracle.com>
parents:
diff
changeset
|
226 |
add %o1, 0x40, %o1 |
81dd404b35f2
24830961 OpenSSL FIPS work based on 1.0.2 for Oracle Solaris: Phase II
Misaki Miyashita <misaki.miyashita@oracle.com>
parents:
diff
changeset
|
227 |
prefetch [%o1 + 63], 20 |
81dd404b35f2
24830961 OpenSSL FIPS work based on 1.0.2 for Oracle Solaris: Phase II
Misaki Miyashita <misaki.miyashita@oracle.com>
parents:
diff
changeset
|
228 |
|
81dd404b35f2
24830961 OpenSSL FIPS work based on 1.0.2 for Oracle Solaris: Phase II
Misaki Miyashita <misaki.miyashita@oracle.com>
parents:
diff
changeset
|
229 |
.word 0x81b02820 ! SHA1 |
81dd404b35f2
24830961 OpenSSL FIPS work based on 1.0.2 for Oracle Solaris: Phase II
Misaki Miyashita <misaki.miyashita@oracle.com>
parents:
diff
changeset
|
230 |
|
81dd404b35f2
24830961 OpenSSL FIPS work based on 1.0.2 for Oracle Solaris: Phase II
Misaki Miyashita <misaki.miyashita@oracle.com>
parents:
diff
changeset
|
231 |
bne,pt SIZE_T_CC, .Lhw_loop |
81dd404b35f2
24830961 OpenSSL FIPS work based on 1.0.2 for Oracle Solaris: Phase II
Misaki Miyashita <misaki.miyashita@oracle.com>
parents:
diff
changeset
|
232 |
nop |
81dd404b35f2
24830961 OpenSSL FIPS work based on 1.0.2 for Oracle Solaris: Phase II
Misaki Miyashita <misaki.miyashita@oracle.com>
parents:
diff
changeset
|
233 |
|
81dd404b35f2
24830961 OpenSSL FIPS work based on 1.0.2 for Oracle Solaris: Phase II
Misaki Miyashita <misaki.miyashita@oracle.com>
parents:
diff
changeset
|
234 |
.Lhwfinish: |
81dd404b35f2
24830961 OpenSSL FIPS work based on 1.0.2 for Oracle Solaris: Phase II
Misaki Miyashita <misaki.miyashita@oracle.com>
parents:
diff
changeset
|
235 |
st %f0, [%o0 + 0x00] ! store context |
81dd404b35f2
24830961 OpenSSL FIPS work based on 1.0.2 for Oracle Solaris: Phase II
Misaki Miyashita <misaki.miyashita@oracle.com>
parents:
diff
changeset
|
236 |
st %f1, [%o0 + 0x04] |
81dd404b35f2
24830961 OpenSSL FIPS work based on 1.0.2 for Oracle Solaris: Phase II
Misaki Miyashita <misaki.miyashita@oracle.com>
parents:
diff
changeset
|
237 |
st %f2, [%o0 + 0x08] |
81dd404b35f2
24830961 OpenSSL FIPS work based on 1.0.2 for Oracle Solaris: Phase II
Misaki Miyashita <misaki.miyashita@oracle.com>
parents:
diff
changeset
|
238 |
st %f3, [%o0 + 0x0c] |
81dd404b35f2
24830961 OpenSSL FIPS work based on 1.0.2 for Oracle Solaris: Phase II
Misaki Miyashita <misaki.miyashita@oracle.com>
parents:
diff
changeset
|
239 |
retl |
81dd404b35f2
24830961 OpenSSL FIPS work based on 1.0.2 for Oracle Solaris: Phase II
Misaki Miyashita <misaki.miyashita@oracle.com>
parents:
diff
changeset
|
240 |
st %f4, [%o0 + 0x10] |
81dd404b35f2
24830961 OpenSSL FIPS work based on 1.0.2 for Oracle Solaris: Phase II
Misaki Miyashita <misaki.miyashita@oracle.com>
parents:
diff
changeset
|
241 |
|
81dd404b35f2
24830961 OpenSSL FIPS work based on 1.0.2 for Oracle Solaris: Phase II
Misaki Miyashita <misaki.miyashita@oracle.com>
parents:
diff
changeset
|
242 |
.align 8 |
81dd404b35f2
24830961 OpenSSL FIPS work based on 1.0.2 for Oracle Solaris: Phase II
Misaki Miyashita <misaki.miyashita@oracle.com>
parents:
diff
changeset
|
243 |
.Lhwunaligned: |
81dd404b35f2
24830961 OpenSSL FIPS work based on 1.0.2 for Oracle Solaris: Phase II
Misaki Miyashita <misaki.miyashita@oracle.com>
parents:
diff
changeset
|
244 |
alignaddr %o1, %g0, %o1 |
81dd404b35f2
24830961 OpenSSL FIPS work based on 1.0.2 for Oracle Solaris: Phase II
Misaki Miyashita <misaki.miyashita@oracle.com>
parents:
diff
changeset
|
245 |
|
81dd404b35f2
24830961 OpenSSL FIPS work based on 1.0.2 for Oracle Solaris: Phase II
Misaki Miyashita <misaki.miyashita@oracle.com>
parents:
diff
changeset
|
246 |
ldd [%o1 + 0x00], %f10 |
81dd404b35f2
24830961 OpenSSL FIPS work based on 1.0.2 for Oracle Solaris: Phase II
Misaki Miyashita <misaki.miyashita@oracle.com>
parents:
diff
changeset
|
247 |
.Lhwunaligned_loop: |
81dd404b35f2
24830961 OpenSSL FIPS work based on 1.0.2 for Oracle Solaris: Phase II
Misaki Miyashita <misaki.miyashita@oracle.com>
parents:
diff
changeset
|
248 |
ldd [%o1 + 0x08], %f12 |
81dd404b35f2
24830961 OpenSSL FIPS work based on 1.0.2 for Oracle Solaris: Phase II
Misaki Miyashita <misaki.miyashita@oracle.com>
parents:
diff
changeset
|
249 |
ldd [%o1 + 0x10], %f14 |
81dd404b35f2
24830961 OpenSSL FIPS work based on 1.0.2 for Oracle Solaris: Phase II
Misaki Miyashita <misaki.miyashita@oracle.com>
parents:
diff
changeset
|
250 |
ldd [%o1 + 0x18], %f16 |
81dd404b35f2
24830961 OpenSSL FIPS work based on 1.0.2 for Oracle Solaris: Phase II
Misaki Miyashita <misaki.miyashita@oracle.com>
parents:
diff
changeset
|
251 |
ldd [%o1 + 0x20], %f18 |
81dd404b35f2
24830961 OpenSSL FIPS work based on 1.0.2 for Oracle Solaris: Phase II
Misaki Miyashita <misaki.miyashita@oracle.com>
parents:
diff
changeset
|
252 |
ldd [%o1 + 0x28], %f20 |
81dd404b35f2
24830961 OpenSSL FIPS work based on 1.0.2 for Oracle Solaris: Phase II
Misaki Miyashita <misaki.miyashita@oracle.com>
parents:
diff
changeset
|
253 |
ldd [%o1 + 0x30], %f22 |
81dd404b35f2
24830961 OpenSSL FIPS work based on 1.0.2 for Oracle Solaris: Phase II
Misaki Miyashita <misaki.miyashita@oracle.com>
parents:
diff
changeset
|
254 |
ldd [%o1 + 0x38], %f24 |
81dd404b35f2
24830961 OpenSSL FIPS work based on 1.0.2 for Oracle Solaris: Phase II
Misaki Miyashita <misaki.miyashita@oracle.com>
parents:
diff
changeset
|
255 |
subcc %o2, 1, %o2 ! done yet? |
81dd404b35f2
24830961 OpenSSL FIPS work based on 1.0.2 for Oracle Solaris: Phase II
Misaki Miyashita <misaki.miyashita@oracle.com>
parents:
diff
changeset
|
256 |
ldd [%o1 + 0x40], %f26 |
81dd404b35f2
24830961 OpenSSL FIPS work based on 1.0.2 for Oracle Solaris: Phase II
Misaki Miyashita <misaki.miyashita@oracle.com>
parents:
diff
changeset
|
257 |
add %o1, 0x40, %o1 |
81dd404b35f2
24830961 OpenSSL FIPS work based on 1.0.2 for Oracle Solaris: Phase II
Misaki Miyashita <misaki.miyashita@oracle.com>
parents:
diff
changeset
|
258 |
prefetch [%o1 + 63], 20 |
81dd404b35f2
24830961 OpenSSL FIPS work based on 1.0.2 for Oracle Solaris: Phase II
Misaki Miyashita <misaki.miyashita@oracle.com>
parents:
diff
changeset
|
259 |
|
81dd404b35f2
24830961 OpenSSL FIPS work based on 1.0.2 for Oracle Solaris: Phase II
Misaki Miyashita <misaki.miyashita@oracle.com>
parents:
diff
changeset
|
260 |
faligndata %f10, %f12, %f8 |
81dd404b35f2
24830961 OpenSSL FIPS work based on 1.0.2 for Oracle Solaris: Phase II
Misaki Miyashita <misaki.miyashita@oracle.com>
parents:
diff
changeset
|
261 |
faligndata %f12, %f14, %f10 |
81dd404b35f2
24830961 OpenSSL FIPS work based on 1.0.2 for Oracle Solaris: Phase II
Misaki Miyashita <misaki.miyashita@oracle.com>
parents:
diff
changeset
|
262 |
faligndata %f14, %f16, %f12 |
81dd404b35f2
24830961 OpenSSL FIPS work based on 1.0.2 for Oracle Solaris: Phase II
Misaki Miyashita <misaki.miyashita@oracle.com>
parents:
diff
changeset
|
263 |
faligndata %f16, %f18, %f14 |
81dd404b35f2
24830961 OpenSSL FIPS work based on 1.0.2 for Oracle Solaris: Phase II
Misaki Miyashita <misaki.miyashita@oracle.com>
parents:
diff
changeset
|
264 |
faligndata %f18, %f20, %f16 |
81dd404b35f2
24830961 OpenSSL FIPS work based on 1.0.2 for Oracle Solaris: Phase II
Misaki Miyashita <misaki.miyashita@oracle.com>
parents:
diff
changeset
|
265 |
faligndata %f20, %f22, %f18 |
81dd404b35f2
24830961 OpenSSL FIPS work based on 1.0.2 for Oracle Solaris: Phase II
Misaki Miyashita <misaki.miyashita@oracle.com>
parents:
diff
changeset
|
266 |
faligndata %f22, %f24, %f20 |
81dd404b35f2
24830961 OpenSSL FIPS work based on 1.0.2 for Oracle Solaris: Phase II
Misaki Miyashita <misaki.miyashita@oracle.com>
parents:
diff
changeset
|
267 |
faligndata %f24, %f26, %f22 |
81dd404b35f2
24830961 OpenSSL FIPS work based on 1.0.2 for Oracle Solaris: Phase II
Misaki Miyashita <misaki.miyashita@oracle.com>
parents:
diff
changeset
|
268 |
|
81dd404b35f2
24830961 OpenSSL FIPS work based on 1.0.2 for Oracle Solaris: Phase II
Misaki Miyashita <misaki.miyashita@oracle.com>
parents:
diff
changeset
|
269 |
.word 0x81b02820 ! SHA1 |
81dd404b35f2
24830961 OpenSSL FIPS work based on 1.0.2 for Oracle Solaris: Phase II
Misaki Miyashita <misaki.miyashita@oracle.com>
parents:
diff
changeset
|
270 |
|
81dd404b35f2
24830961 OpenSSL FIPS work based on 1.0.2 for Oracle Solaris: Phase II
Misaki Miyashita <misaki.miyashita@oracle.com>
parents:
diff
changeset
|
271 |
bne,pt SIZE_T_CC, .Lhwunaligned_loop |
81dd404b35f2
24830961 OpenSSL FIPS work based on 1.0.2 for Oracle Solaris: Phase II
Misaki Miyashita <misaki.miyashita@oracle.com>
parents:
diff
changeset
|
272 |
for %f26, %f26, %f10 ! %f10=%f26 |
81dd404b35f2
24830961 OpenSSL FIPS work based on 1.0.2 for Oracle Solaris: Phase II
Misaki Miyashita <misaki.miyashita@oracle.com>
parents:
diff
changeset
|
273 |
|
81dd404b35f2
24830961 OpenSSL FIPS work based on 1.0.2 for Oracle Solaris: Phase II
Misaki Miyashita <misaki.miyashita@oracle.com>
parents:
diff
changeset
|
274 |
ba .Lhwfinish |
81dd404b35f2
24830961 OpenSSL FIPS work based on 1.0.2 for Oracle Solaris: Phase II
Misaki Miyashita <misaki.miyashita@oracle.com>
parents:
diff
changeset
|
275 |
nop |
81dd404b35f2
24830961 OpenSSL FIPS work based on 1.0.2 for Oracle Solaris: Phase II
Misaki Miyashita <misaki.miyashita@oracle.com>
parents:
diff
changeset
|
276 |
|
81dd404b35f2
24830961 OpenSSL FIPS work based on 1.0.2 for Oracle Solaris: Phase II
Misaki Miyashita <misaki.miyashita@oracle.com>
parents:
diff
changeset
|
277 |
.align 16 |
81dd404b35f2
24830961 OpenSSL FIPS work based on 1.0.2 for Oracle Solaris: Phase II
Misaki Miyashita <misaki.miyashita@oracle.com>
parents:
diff
changeset
|
278 |
.Lsoftware: |
81dd404b35f2
24830961 OpenSSL FIPS work based on 1.0.2 for Oracle Solaris: Phase II
Misaki Miyashita <misaki.miyashita@oracle.com>
parents:
diff
changeset
|
279 |
save %sp,-STACK_FRAME,%sp |
81dd404b35f2
24830961 OpenSSL FIPS work based on 1.0.2 for Oracle Solaris: Phase II
Misaki Miyashita <misaki.miyashita@oracle.com>
parents:
diff
changeset
|
280 |
sllx $len,6,$len |
81dd404b35f2
24830961 OpenSSL FIPS work based on 1.0.2 for Oracle Solaris: Phase II
Misaki Miyashita <misaki.miyashita@oracle.com>
parents:
diff
changeset
|
281 |
add $inp,$len,$len |
81dd404b35f2
24830961 OpenSSL FIPS work based on 1.0.2 for Oracle Solaris: Phase II
Misaki Miyashita <misaki.miyashita@oracle.com>
parents:
diff
changeset
|
282 |
|
81dd404b35f2
24830961 OpenSSL FIPS work based on 1.0.2 for Oracle Solaris: Phase II
Misaki Miyashita <misaki.miyashita@oracle.com>
parents:
diff
changeset
|
283 |
or %g0,1,$rot1m |
81dd404b35f2
24830961 OpenSSL FIPS work based on 1.0.2 for Oracle Solaris: Phase II
Misaki Miyashita <misaki.miyashita@oracle.com>
parents:
diff
changeset
|
284 |
sllx $rot1m,32,$rot1m |
81dd404b35f2
24830961 OpenSSL FIPS work based on 1.0.2 for Oracle Solaris: Phase II
Misaki Miyashita <misaki.miyashita@oracle.com>
parents:
diff
changeset
|
285 |
or $rot1m,1,$rot1m |
81dd404b35f2
24830961 OpenSSL FIPS work based on 1.0.2 for Oracle Solaris: Phase II
Misaki Miyashita <misaki.miyashita@oracle.com>
parents:
diff
changeset
|
286 |
|
81dd404b35f2
24830961 OpenSSL FIPS work based on 1.0.2 for Oracle Solaris: Phase II
Misaki Miyashita <misaki.miyashita@oracle.com>
parents:
diff
changeset
|
287 |
ld [$ctx+0],$A |
81dd404b35f2
24830961 OpenSSL FIPS work based on 1.0.2 for Oracle Solaris: Phase II
Misaki Miyashita <misaki.miyashita@oracle.com>
parents:
diff
changeset
|
288 |
ld [$ctx+4],$B |
81dd404b35f2
24830961 OpenSSL FIPS work based on 1.0.2 for Oracle Solaris: Phase II
Misaki Miyashita <misaki.miyashita@oracle.com>
parents:
diff
changeset
|
289 |
ld [$ctx+8],$C |
81dd404b35f2
24830961 OpenSSL FIPS work based on 1.0.2 for Oracle Solaris: Phase II
Misaki Miyashita <misaki.miyashita@oracle.com>
parents:
diff
changeset
|
290 |
ld [$ctx+12],$D |
81dd404b35f2
24830961 OpenSSL FIPS work based on 1.0.2 for Oracle Solaris: Phase II
Misaki Miyashita <misaki.miyashita@oracle.com>
parents:
diff
changeset
|
291 |
ld [$ctx+16],$E |
81dd404b35f2
24830961 OpenSSL FIPS work based on 1.0.2 for Oracle Solaris: Phase II
Misaki Miyashita <misaki.miyashita@oracle.com>
parents:
diff
changeset
|
292 |
andn $inp,7,$tmp0 |
81dd404b35f2
24830961 OpenSSL FIPS work based on 1.0.2 for Oracle Solaris: Phase II
Misaki Miyashita <misaki.miyashita@oracle.com>
parents:
diff
changeset
|
293 |
|
81dd404b35f2
24830961 OpenSSL FIPS work based on 1.0.2 for Oracle Solaris: Phase II
Misaki Miyashita <misaki.miyashita@oracle.com>
parents:
diff
changeset
|
294 |
sethi %hi(0x5a827999),$K_00_19 |
81dd404b35f2
24830961 OpenSSL FIPS work based on 1.0.2 for Oracle Solaris: Phase II
Misaki Miyashita <misaki.miyashita@oracle.com>
parents:
diff
changeset
|
295 |
or $K_00_19,%lo(0x5a827999),$K_00_19 |
81dd404b35f2
24830961 OpenSSL FIPS work based on 1.0.2 for Oracle Solaris: Phase II
Misaki Miyashita <misaki.miyashita@oracle.com>
parents:
diff
changeset
|
296 |
sethi %hi(0x6ed9eba1),$K_20_39 |
81dd404b35f2
24830961 OpenSSL FIPS work based on 1.0.2 for Oracle Solaris: Phase II
Misaki Miyashita <misaki.miyashita@oracle.com>
parents:
diff
changeset
|
297 |
or $K_20_39,%lo(0x6ed9eba1),$K_20_39 |
81dd404b35f2
24830961 OpenSSL FIPS work based on 1.0.2 for Oracle Solaris: Phase II
Misaki Miyashita <misaki.miyashita@oracle.com>
parents:
diff
changeset
|
298 |
sethi %hi(0x8f1bbcdc),$K_40_59 |
81dd404b35f2
24830961 OpenSSL FIPS work based on 1.0.2 for Oracle Solaris: Phase II
Misaki Miyashita <misaki.miyashita@oracle.com>
parents:
diff
changeset
|
299 |
or $K_40_59,%lo(0x8f1bbcdc),$K_40_59 |
81dd404b35f2
24830961 OpenSSL FIPS work based on 1.0.2 for Oracle Solaris: Phase II
Misaki Miyashita <misaki.miyashita@oracle.com>
parents:
diff
changeset
|
300 |
sethi %hi(0xca62c1d6),$K_60_79 |
81dd404b35f2
24830961 OpenSSL FIPS work based on 1.0.2 for Oracle Solaris: Phase II
Misaki Miyashita <misaki.miyashita@oracle.com>
parents:
diff
changeset
|
301 |
or $K_60_79,%lo(0xca62c1d6),$K_60_79 |
81dd404b35f2
24830961 OpenSSL FIPS work based on 1.0.2 for Oracle Solaris: Phase II
Misaki Miyashita <misaki.miyashita@oracle.com>
parents:
diff
changeset
|
302 |
|
81dd404b35f2
24830961 OpenSSL FIPS work based on 1.0.2 for Oracle Solaris: Phase II
Misaki Miyashita <misaki.miyashita@oracle.com>
parents:
diff
changeset
|
303 |
.Lloop: |
81dd404b35f2
24830961 OpenSSL FIPS work based on 1.0.2 for Oracle Solaris: Phase II
Misaki Miyashita <misaki.miyashita@oracle.com>
parents:
diff
changeset
|
304 |
ldx [$tmp0+0],@X[0] |
81dd404b35f2
24830961 OpenSSL FIPS work based on 1.0.2 for Oracle Solaris: Phase II
Misaki Miyashita <misaki.miyashita@oracle.com>
parents:
diff
changeset
|
305 |
ldx [$tmp0+16],@X[2] |
81dd404b35f2
24830961 OpenSSL FIPS work based on 1.0.2 for Oracle Solaris: Phase II
Misaki Miyashita <misaki.miyashita@oracle.com>
parents:
diff
changeset
|
306 |
ldx [$tmp0+32],@X[4] |
81dd404b35f2
24830961 OpenSSL FIPS work based on 1.0.2 for Oracle Solaris: Phase II
Misaki Miyashita <misaki.miyashita@oracle.com>
parents:
diff
changeset
|
307 |
ldx [$tmp0+48],@X[6] |
81dd404b35f2
24830961 OpenSSL FIPS work based on 1.0.2 for Oracle Solaris: Phase II
Misaki Miyashita <misaki.miyashita@oracle.com>
parents:
diff
changeset
|
308 |
and $inp,7,$tmp1 |
81dd404b35f2
24830961 OpenSSL FIPS work based on 1.0.2 for Oracle Solaris: Phase II
Misaki Miyashita <misaki.miyashita@oracle.com>
parents:
diff
changeset
|
309 |
ldx [$tmp0+8],@X[1] |
81dd404b35f2
24830961 OpenSSL FIPS work based on 1.0.2 for Oracle Solaris: Phase II
Misaki Miyashita <misaki.miyashita@oracle.com>
parents:
diff
changeset
|
310 |
sll $tmp1,3,$tmp1 |
81dd404b35f2
24830961 OpenSSL FIPS work based on 1.0.2 for Oracle Solaris: Phase II
Misaki Miyashita <misaki.miyashita@oracle.com>
parents:
diff
changeset
|
311 |
ldx [$tmp0+24],@X[3] |
81dd404b35f2
24830961 OpenSSL FIPS work based on 1.0.2 for Oracle Solaris: Phase II
Misaki Miyashita <misaki.miyashita@oracle.com>
parents:
diff
changeset
|
312 |
subcc %g0,$tmp1,$tmp2 ! should be 64-$tmp1, but -$tmp1 works too |
81dd404b35f2
24830961 OpenSSL FIPS work based on 1.0.2 for Oracle Solaris: Phase II
Misaki Miyashita <misaki.miyashita@oracle.com>
parents:
diff
changeset
|
313 |
ldx [$tmp0+40],@X[5] |
81dd404b35f2
24830961 OpenSSL FIPS work based on 1.0.2 for Oracle Solaris: Phase II
Misaki Miyashita <misaki.miyashita@oracle.com>
parents:
diff
changeset
|
314 |
bz,pt %icc,.Laligned |
81dd404b35f2
24830961 OpenSSL FIPS work based on 1.0.2 for Oracle Solaris: Phase II
Misaki Miyashita <misaki.miyashita@oracle.com>
parents:
diff
changeset
|
315 |
ldx [$tmp0+56],@X[7] |
81dd404b35f2
24830961 OpenSSL FIPS work based on 1.0.2 for Oracle Solaris: Phase II
Misaki Miyashita <misaki.miyashita@oracle.com>
parents:
diff
changeset
|
316 |
|
81dd404b35f2
24830961 OpenSSL FIPS work based on 1.0.2 for Oracle Solaris: Phase II
Misaki Miyashita <misaki.miyashita@oracle.com>
parents:
diff
changeset
|
317 |
sllx @X[0],$tmp1,@X[0] |
81dd404b35f2
24830961 OpenSSL FIPS work based on 1.0.2 for Oracle Solaris: Phase II
Misaki Miyashita <misaki.miyashita@oracle.com>
parents:
diff
changeset
|
318 |
ldx [$tmp0+64],$tmp64 |
81dd404b35f2
24830961 OpenSSL FIPS work based on 1.0.2 for Oracle Solaris: Phase II
Misaki Miyashita <misaki.miyashita@oracle.com>
parents:
diff
changeset
|
319 |
___ |
81dd404b35f2
24830961 OpenSSL FIPS work based on 1.0.2 for Oracle Solaris: Phase II
Misaki Miyashita <misaki.miyashita@oracle.com>
parents:
diff
changeset
|
320 |
for($i=0;$i<7;$i++) |
81dd404b35f2
24830961 OpenSSL FIPS work based on 1.0.2 for Oracle Solaris: Phase II
Misaki Miyashita <misaki.miyashita@oracle.com>
parents:
diff
changeset
|
321 |
{ $code.=<<___; |
81dd404b35f2
24830961 OpenSSL FIPS work based on 1.0.2 for Oracle Solaris: Phase II
Misaki Miyashita <misaki.miyashita@oracle.com>
parents:
diff
changeset
|
322 |
srlx @X[$i+1],$tmp2,$Xi |
81dd404b35f2
24830961 OpenSSL FIPS work based on 1.0.2 for Oracle Solaris: Phase II
Misaki Miyashita <misaki.miyashita@oracle.com>
parents:
diff
changeset
|
323 |
sllx @X[$i+1],$tmp1,@X[$i+1] |
81dd404b35f2
24830961 OpenSSL FIPS work based on 1.0.2 for Oracle Solaris: Phase II
Misaki Miyashita <misaki.miyashita@oracle.com>
parents:
diff
changeset
|
324 |
or $Xi,@X[$i],@X[$i] |
81dd404b35f2
24830961 OpenSSL FIPS work based on 1.0.2 for Oracle Solaris: Phase II
Misaki Miyashita <misaki.miyashita@oracle.com>
parents:
diff
changeset
|
325 |
___ |
81dd404b35f2
24830961 OpenSSL FIPS work based on 1.0.2 for Oracle Solaris: Phase II
Misaki Miyashita <misaki.miyashita@oracle.com>
parents:
diff
changeset
|
326 |
} |
81dd404b35f2
24830961 OpenSSL FIPS work based on 1.0.2 for Oracle Solaris: Phase II
Misaki Miyashita <misaki.miyashita@oracle.com>
parents:
diff
changeset
|
327 |
$code.=<<___; |
81dd404b35f2
24830961 OpenSSL FIPS work based on 1.0.2 for Oracle Solaris: Phase II
Misaki Miyashita <misaki.miyashita@oracle.com>
parents:
diff
changeset
|
328 |
srlx $tmp64,$tmp2,$tmp64 |
81dd404b35f2
24830961 OpenSSL FIPS work based on 1.0.2 for Oracle Solaris: Phase II
Misaki Miyashita <misaki.miyashita@oracle.com>
parents:
diff
changeset
|
329 |
or $tmp64,@X[7],@X[7] |
81dd404b35f2
24830961 OpenSSL FIPS work based on 1.0.2 for Oracle Solaris: Phase II
Misaki Miyashita <misaki.miyashita@oracle.com>
parents:
diff
changeset
|
330 |
.Laligned: |
81dd404b35f2
24830961 OpenSSL FIPS work based on 1.0.2 for Oracle Solaris: Phase II
Misaki Miyashita <misaki.miyashita@oracle.com>
parents:
diff
changeset
|
331 |
srlx @X[0],32,$Xi |
81dd404b35f2
24830961 OpenSSL FIPS work based on 1.0.2 for Oracle Solaris: Phase II
Misaki Miyashita <misaki.miyashita@oracle.com>
parents:
diff
changeset
|
332 |
___ |
81dd404b35f2
24830961 OpenSSL FIPS work based on 1.0.2 for Oracle Solaris: Phase II
Misaki Miyashita <misaki.miyashita@oracle.com>
parents:
diff
changeset
|
333 |
for ($i=0;$i<16;$i++) { &BODY_00_15($i,@V); unshift(@V,pop(@V)); } |
81dd404b35f2
24830961 OpenSSL FIPS work based on 1.0.2 for Oracle Solaris: Phase II
Misaki Miyashita <misaki.miyashita@oracle.com>
parents:
diff
changeset
|
334 |
for (;$i<20;$i++) { &BODY_16_19($i,@V); unshift(@V,pop(@V)); } |
81dd404b35f2
24830961 OpenSSL FIPS work based on 1.0.2 for Oracle Solaris: Phase II
Misaki Miyashita <misaki.miyashita@oracle.com>
parents:
diff
changeset
|
335 |
for (;$i<40;$i++) { &BODY_20_39($i,@V); unshift(@V,pop(@V)); } |
81dd404b35f2
24830961 OpenSSL FIPS work based on 1.0.2 for Oracle Solaris: Phase II
Misaki Miyashita <misaki.miyashita@oracle.com>
parents:
diff
changeset
|
336 |
for (;$i<60;$i++) { &BODY_40_59($i,@V); unshift(@V,pop(@V)); } |
81dd404b35f2
24830961 OpenSSL FIPS work based on 1.0.2 for Oracle Solaris: Phase II
Misaki Miyashita <misaki.miyashita@oracle.com>
parents:
diff
changeset
|
337 |
for (;$i<80;$i++) { &BODY_20_39($i,@V); unshift(@V,pop(@V)); } |
81dd404b35f2
24830961 OpenSSL FIPS work based on 1.0.2 for Oracle Solaris: Phase II
Misaki Miyashita <misaki.miyashita@oracle.com>
parents:
diff
changeset
|
338 |
$code.=<<___; |
81dd404b35f2
24830961 OpenSSL FIPS work based on 1.0.2 for Oracle Solaris: Phase II
Misaki Miyashita <misaki.miyashita@oracle.com>
parents:
diff
changeset
|
339 |
|
81dd404b35f2
24830961 OpenSSL FIPS work based on 1.0.2 for Oracle Solaris: Phase II
Misaki Miyashita <misaki.miyashita@oracle.com>
parents:
diff
changeset
|
340 |
ld [$ctx+0],@X[0] |
81dd404b35f2
24830961 OpenSSL FIPS work based on 1.0.2 for Oracle Solaris: Phase II
Misaki Miyashita <misaki.miyashita@oracle.com>
parents:
diff
changeset
|
341 |
ld [$ctx+4],@X[1] |
81dd404b35f2
24830961 OpenSSL FIPS work based on 1.0.2 for Oracle Solaris: Phase II
Misaki Miyashita <misaki.miyashita@oracle.com>
parents:
diff
changeset
|
342 |
ld [$ctx+8],@X[2] |
81dd404b35f2
24830961 OpenSSL FIPS work based on 1.0.2 for Oracle Solaris: Phase II
Misaki Miyashita <misaki.miyashita@oracle.com>
parents:
diff
changeset
|
343 |
ld [$ctx+12],@X[3] |
81dd404b35f2
24830961 OpenSSL FIPS work based on 1.0.2 for Oracle Solaris: Phase II
Misaki Miyashita <misaki.miyashita@oracle.com>
parents:
diff
changeset
|
344 |
add $inp,64,$inp |
81dd404b35f2
24830961 OpenSSL FIPS work based on 1.0.2 for Oracle Solaris: Phase II
Misaki Miyashita <misaki.miyashita@oracle.com>
parents:
diff
changeset
|
345 |
ld [$ctx+16],@X[4] |
81dd404b35f2
24830961 OpenSSL FIPS work based on 1.0.2 for Oracle Solaris: Phase II
Misaki Miyashita <misaki.miyashita@oracle.com>
parents:
diff
changeset
|
346 |
cmp $inp,$len |
81dd404b35f2
24830961 OpenSSL FIPS work based on 1.0.2 for Oracle Solaris: Phase II
Misaki Miyashita <misaki.miyashita@oracle.com>
parents:
diff
changeset
|
347 |
|
81dd404b35f2
24830961 OpenSSL FIPS work based on 1.0.2 for Oracle Solaris: Phase II
Misaki Miyashita <misaki.miyashita@oracle.com>
parents:
diff
changeset
|
348 |
add $A,@X[0],$A |
81dd404b35f2
24830961 OpenSSL FIPS work based on 1.0.2 for Oracle Solaris: Phase II
Misaki Miyashita <misaki.miyashita@oracle.com>
parents:
diff
changeset
|
349 |
st $A,[$ctx+0] |
81dd404b35f2
24830961 OpenSSL FIPS work based on 1.0.2 for Oracle Solaris: Phase II
Misaki Miyashita <misaki.miyashita@oracle.com>
parents:
diff
changeset
|
350 |
add $B,@X[1],$B |
81dd404b35f2
24830961 OpenSSL FIPS work based on 1.0.2 for Oracle Solaris: Phase II
Misaki Miyashita <misaki.miyashita@oracle.com>
parents:
diff
changeset
|
351 |
st $B,[$ctx+4] |
81dd404b35f2
24830961 OpenSSL FIPS work based on 1.0.2 for Oracle Solaris: Phase II
Misaki Miyashita <misaki.miyashita@oracle.com>
parents:
diff
changeset
|
352 |
add $C,@X[2],$C |
81dd404b35f2
24830961 OpenSSL FIPS work based on 1.0.2 for Oracle Solaris: Phase II
Misaki Miyashita <misaki.miyashita@oracle.com>
parents:
diff
changeset
|
353 |
st $C,[$ctx+8] |
81dd404b35f2
24830961 OpenSSL FIPS work based on 1.0.2 for Oracle Solaris: Phase II
Misaki Miyashita <misaki.miyashita@oracle.com>
parents:
diff
changeset
|
354 |
add $D,@X[3],$D |
81dd404b35f2
24830961 OpenSSL FIPS work based on 1.0.2 for Oracle Solaris: Phase II
Misaki Miyashita <misaki.miyashita@oracle.com>
parents:
diff
changeset
|
355 |
st $D,[$ctx+12] |
81dd404b35f2
24830961 OpenSSL FIPS work based on 1.0.2 for Oracle Solaris: Phase II
Misaki Miyashita <misaki.miyashita@oracle.com>
parents:
diff
changeset
|
356 |
add $E,@X[4],$E |
81dd404b35f2
24830961 OpenSSL FIPS work based on 1.0.2 for Oracle Solaris: Phase II
Misaki Miyashita <misaki.miyashita@oracle.com>
parents:
diff
changeset
|
357 |
st $E,[$ctx+16] |
81dd404b35f2
24830961 OpenSSL FIPS work based on 1.0.2 for Oracle Solaris: Phase II
Misaki Miyashita <misaki.miyashita@oracle.com>
parents:
diff
changeset
|
358 |
|
81dd404b35f2
24830961 OpenSSL FIPS work based on 1.0.2 for Oracle Solaris: Phase II
Misaki Miyashita <misaki.miyashita@oracle.com>
parents:
diff
changeset
|
359 |
bne SIZE_T_CC,.Lloop |
81dd404b35f2
24830961 OpenSSL FIPS work based on 1.0.2 for Oracle Solaris: Phase II
Misaki Miyashita <misaki.miyashita@oracle.com>
parents:
diff
changeset
|
360 |
andn $inp,7,$tmp0 |
81dd404b35f2
24830961 OpenSSL FIPS work based on 1.0.2 for Oracle Solaris: Phase II
Misaki Miyashita <misaki.miyashita@oracle.com>
parents:
diff
changeset
|
361 |
|
81dd404b35f2
24830961 OpenSSL FIPS work based on 1.0.2 for Oracle Solaris: Phase II
Misaki Miyashita <misaki.miyashita@oracle.com>
parents:
diff
changeset
|
362 |
ret |
81dd404b35f2
24830961 OpenSSL FIPS work based on 1.0.2 for Oracle Solaris: Phase II
Misaki Miyashita <misaki.miyashita@oracle.com>
parents:
diff
changeset
|
363 |
restore |
81dd404b35f2
24830961 OpenSSL FIPS work based on 1.0.2 for Oracle Solaris: Phase II
Misaki Miyashita <misaki.miyashita@oracle.com>
parents:
diff
changeset
|
364 |
.type sha1_block_data_order,#function |
81dd404b35f2
24830961 OpenSSL FIPS work based on 1.0.2 for Oracle Solaris: Phase II
Misaki Miyashita <misaki.miyashita@oracle.com>
parents:
diff
changeset
|
365 |
.size sha1_block_data_order,(.-sha1_block_data_order) |
81dd404b35f2
24830961 OpenSSL FIPS work based on 1.0.2 for Oracle Solaris: Phase II
Misaki Miyashita <misaki.miyashita@oracle.com>
parents:
diff
changeset
|
366 |
.asciz "SHA1 block transform for SPARCv9, CRYPTOGAMS by <appro\@openssl.org>" |
81dd404b35f2
24830961 OpenSSL FIPS work based on 1.0.2 for Oracle Solaris: Phase II
Misaki Miyashita <misaki.miyashita@oracle.com>
parents:
diff
changeset
|
367 |
.align 4 |
81dd404b35f2
24830961 OpenSSL FIPS work based on 1.0.2 for Oracle Solaris: Phase II
Misaki Miyashita <misaki.miyashita@oracle.com>
parents:
diff
changeset
|
368 |
___ |
81dd404b35f2
24830961 OpenSSL FIPS work based on 1.0.2 for Oracle Solaris: Phase II
Misaki Miyashita <misaki.miyashita@oracle.com>
parents:
diff
changeset
|
369 |
|
81dd404b35f2
24830961 OpenSSL FIPS work based on 1.0.2 for Oracle Solaris: Phase II
Misaki Miyashita <misaki.miyashita@oracle.com>
parents:
diff
changeset
|
370 |
# Purpose of these subroutines is to explicitly encode VIS instructions, |
81dd404b35f2
24830961 OpenSSL FIPS work based on 1.0.2 for Oracle Solaris: Phase II
Misaki Miyashita <misaki.miyashita@oracle.com>
parents:
diff
changeset
|
371 |
# so that one can compile the module without having to specify VIS |
81dd404b35f2
24830961 OpenSSL FIPS work based on 1.0.2 for Oracle Solaris: Phase II
Misaki Miyashita <misaki.miyashita@oracle.com>
parents:
diff
changeset
|
372 |
# extentions on compiler command line, e.g. -xarch=v9 vs. -xarch=v9a. |
81dd404b35f2
24830961 OpenSSL FIPS work based on 1.0.2 for Oracle Solaris: Phase II
Misaki Miyashita <misaki.miyashita@oracle.com>
parents:
diff
changeset
|
373 |
# Idea is to reserve for option to produce "universal" binary and let |
81dd404b35f2
24830961 OpenSSL FIPS work based on 1.0.2 for Oracle Solaris: Phase II
Misaki Miyashita <misaki.miyashita@oracle.com>
parents:
diff
changeset
|
374 |
# programmer detect if current CPU is VIS capable at run-time. |
81dd404b35f2
24830961 OpenSSL FIPS work based on 1.0.2 for Oracle Solaris: Phase II
Misaki Miyashita <misaki.miyashita@oracle.com>
parents:
diff
changeset
|
375 |
sub unvis { |
81dd404b35f2
24830961 OpenSSL FIPS work based on 1.0.2 for Oracle Solaris: Phase II
Misaki Miyashita <misaki.miyashita@oracle.com>
parents:
diff
changeset
|
376 |
my ($mnemonic,$rs1,$rs2,$rd)=@_; |
81dd404b35f2
24830961 OpenSSL FIPS work based on 1.0.2 for Oracle Solaris: Phase II
Misaki Miyashita <misaki.miyashita@oracle.com>
parents:
diff
changeset
|
377 |
my $ref,$opf; |
81dd404b35f2
24830961 OpenSSL FIPS work based on 1.0.2 for Oracle Solaris: Phase II
Misaki Miyashita <misaki.miyashita@oracle.com>
parents:
diff
changeset
|
378 |
my %visopf = ( "faligndata" => 0x048, |
81dd404b35f2
24830961 OpenSSL FIPS work based on 1.0.2 for Oracle Solaris: Phase II
Misaki Miyashita <misaki.miyashita@oracle.com>
parents:
diff
changeset
|
379 |
"for" => 0x07c ); |
81dd404b35f2
24830961 OpenSSL FIPS work based on 1.0.2 for Oracle Solaris: Phase II
Misaki Miyashita <misaki.miyashita@oracle.com>
parents:
diff
changeset
|
380 |
|
81dd404b35f2
24830961 OpenSSL FIPS work based on 1.0.2 for Oracle Solaris: Phase II
Misaki Miyashita <misaki.miyashita@oracle.com>
parents:
diff
changeset
|
381 |
$ref = "$mnemonic\t$rs1,$rs2,$rd"; |
81dd404b35f2
24830961 OpenSSL FIPS work based on 1.0.2 for Oracle Solaris: Phase II
Misaki Miyashita <misaki.miyashita@oracle.com>
parents:
diff
changeset
|
382 |
|
81dd404b35f2
24830961 OpenSSL FIPS work based on 1.0.2 for Oracle Solaris: Phase II
Misaki Miyashita <misaki.miyashita@oracle.com>
parents:
diff
changeset
|
383 |
if ($opf=$visopf{$mnemonic}) { |
81dd404b35f2
24830961 OpenSSL FIPS work based on 1.0.2 for Oracle Solaris: Phase II
Misaki Miyashita <misaki.miyashita@oracle.com>
parents:
diff
changeset
|
384 |
foreach ($rs1,$rs2,$rd) { |
81dd404b35f2
24830961 OpenSSL FIPS work based on 1.0.2 for Oracle Solaris: Phase II
Misaki Miyashita <misaki.miyashita@oracle.com>
parents:
diff
changeset
|
385 |
return $ref if (!/%f([0-9]{1,2})/); |
81dd404b35f2
24830961 OpenSSL FIPS work based on 1.0.2 for Oracle Solaris: Phase II
Misaki Miyashita <misaki.miyashita@oracle.com>
parents:
diff
changeset
|
386 |
$_=$1; |
81dd404b35f2
24830961 OpenSSL FIPS work based on 1.0.2 for Oracle Solaris: Phase II
Misaki Miyashita <misaki.miyashita@oracle.com>
parents:
diff
changeset
|
387 |
if ($1>=32) { |
81dd404b35f2
24830961 OpenSSL FIPS work based on 1.0.2 for Oracle Solaris: Phase II
Misaki Miyashita <misaki.miyashita@oracle.com>
parents:
diff
changeset
|
388 |
return $ref if ($1&1); |
81dd404b35f2
24830961 OpenSSL FIPS work based on 1.0.2 for Oracle Solaris: Phase II
Misaki Miyashita <misaki.miyashita@oracle.com>
parents:
diff
changeset
|
389 |
# re-encode for upper double register addressing |
81dd404b35f2
24830961 OpenSSL FIPS work based on 1.0.2 for Oracle Solaris: Phase II
Misaki Miyashita <misaki.miyashita@oracle.com>
parents:
diff
changeset
|
390 |
$_=($1|$1>>5)&31; |
81dd404b35f2
24830961 OpenSSL FIPS work based on 1.0.2 for Oracle Solaris: Phase II
Misaki Miyashita <misaki.miyashita@oracle.com>
parents:
diff
changeset
|
391 |
} |
81dd404b35f2
24830961 OpenSSL FIPS work based on 1.0.2 for Oracle Solaris: Phase II
Misaki Miyashita <misaki.miyashita@oracle.com>
parents:
diff
changeset
|
392 |
} |
81dd404b35f2
24830961 OpenSSL FIPS work based on 1.0.2 for Oracle Solaris: Phase II
Misaki Miyashita <misaki.miyashita@oracle.com>
parents:
diff
changeset
|
393 |
|
81dd404b35f2
24830961 OpenSSL FIPS work based on 1.0.2 for Oracle Solaris: Phase II
Misaki Miyashita <misaki.miyashita@oracle.com>
parents:
diff
changeset
|
394 |
return sprintf ".word\t0x%08x !%s", |
81dd404b35f2
24830961 OpenSSL FIPS work based on 1.0.2 for Oracle Solaris: Phase II
Misaki Miyashita <misaki.miyashita@oracle.com>
parents:
diff
changeset
|
395 |
0x81b00000|$rd<<25|$rs1<<14|$opf<<5|$rs2, |
81dd404b35f2
24830961 OpenSSL FIPS work based on 1.0.2 for Oracle Solaris: Phase II
Misaki Miyashita <misaki.miyashita@oracle.com>
parents:
diff
changeset
|
396 |
$ref; |
81dd404b35f2
24830961 OpenSSL FIPS work based on 1.0.2 for Oracle Solaris: Phase II
Misaki Miyashita <misaki.miyashita@oracle.com>
parents:
diff
changeset
|
397 |
} else { |
81dd404b35f2
24830961 OpenSSL FIPS work based on 1.0.2 for Oracle Solaris: Phase II
Misaki Miyashita <misaki.miyashita@oracle.com>
parents:
diff
changeset
|
398 |
return $ref; |
81dd404b35f2
24830961 OpenSSL FIPS work based on 1.0.2 for Oracle Solaris: Phase II
Misaki Miyashita <misaki.miyashita@oracle.com>
parents:
diff
changeset
|
399 |
} |
81dd404b35f2
24830961 OpenSSL FIPS work based on 1.0.2 for Oracle Solaris: Phase II
Misaki Miyashita <misaki.miyashita@oracle.com>
parents:
diff
changeset
|
400 |
} |
81dd404b35f2
24830961 OpenSSL FIPS work based on 1.0.2 for Oracle Solaris: Phase II
Misaki Miyashita <misaki.miyashita@oracle.com>
parents:
diff
changeset
|
401 |
sub unalignaddr { |
81dd404b35f2
24830961 OpenSSL FIPS work based on 1.0.2 for Oracle Solaris: Phase II
Misaki Miyashita <misaki.miyashita@oracle.com>
parents:
diff
changeset
|
402 |
my ($mnemonic,$rs1,$rs2,$rd)=@_; |
81dd404b35f2
24830961 OpenSSL FIPS work based on 1.0.2 for Oracle Solaris: Phase II
Misaki Miyashita <misaki.miyashita@oracle.com>
parents:
diff
changeset
|
403 |
my %bias = ( "g" => 0, "o" => 8, "l" => 16, "i" => 24 ); |
81dd404b35f2
24830961 OpenSSL FIPS work based on 1.0.2 for Oracle Solaris: Phase II
Misaki Miyashita <misaki.miyashita@oracle.com>
parents:
diff
changeset
|
404 |
my $ref="$mnemonic\t$rs1,$rs2,$rd"; |
81dd404b35f2
24830961 OpenSSL FIPS work based on 1.0.2 for Oracle Solaris: Phase II
Misaki Miyashita <misaki.miyashita@oracle.com>
parents:
diff
changeset
|
405 |
|
81dd404b35f2
24830961 OpenSSL FIPS work based on 1.0.2 for Oracle Solaris: Phase II
Misaki Miyashita <misaki.miyashita@oracle.com>
parents:
diff
changeset
|
406 |
foreach ($rs1,$rs2,$rd) { |
81dd404b35f2
24830961 OpenSSL FIPS work based on 1.0.2 for Oracle Solaris: Phase II
Misaki Miyashita <misaki.miyashita@oracle.com>
parents:
diff
changeset
|
407 |
if (/%([goli])([0-7])/) { $_=$bias{$1}+$2; } |
81dd404b35f2
24830961 OpenSSL FIPS work based on 1.0.2 for Oracle Solaris: Phase II
Misaki Miyashita <misaki.miyashita@oracle.com>
parents:
diff
changeset
|
408 |
else { return $ref; } |
81dd404b35f2
24830961 OpenSSL FIPS work based on 1.0.2 for Oracle Solaris: Phase II
Misaki Miyashita <misaki.miyashita@oracle.com>
parents:
diff
changeset
|
409 |
} |
81dd404b35f2
24830961 OpenSSL FIPS work based on 1.0.2 for Oracle Solaris: Phase II
Misaki Miyashita <misaki.miyashita@oracle.com>
parents:
diff
changeset
|
410 |
return sprintf ".word\t0x%08x !%s", |
81dd404b35f2
24830961 OpenSSL FIPS work based on 1.0.2 for Oracle Solaris: Phase II
Misaki Miyashita <misaki.miyashita@oracle.com>
parents:
diff
changeset
|
411 |
0x81b00300|$rd<<25|$rs1<<14|$rs2, |
81dd404b35f2
24830961 OpenSSL FIPS work based on 1.0.2 for Oracle Solaris: Phase II
Misaki Miyashita <misaki.miyashita@oracle.com>
parents:
diff
changeset
|
412 |
$ref; |
81dd404b35f2
24830961 OpenSSL FIPS work based on 1.0.2 for Oracle Solaris: Phase II
Misaki Miyashita <misaki.miyashita@oracle.com>
parents:
diff
changeset
|
413 |
} |
81dd404b35f2
24830961 OpenSSL FIPS work based on 1.0.2 for Oracle Solaris: Phase II
Misaki Miyashita <misaki.miyashita@oracle.com>
parents:
diff
changeset
|
414 |
|
81dd404b35f2
24830961 OpenSSL FIPS work based on 1.0.2 for Oracle Solaris: Phase II
Misaki Miyashita <misaki.miyashita@oracle.com>
parents:
diff
changeset
|
415 |
foreach (split("\n",$code)) { |
81dd404b35f2
24830961 OpenSSL FIPS work based on 1.0.2 for Oracle Solaris: Phase II
Misaki Miyashita <misaki.miyashita@oracle.com>
parents:
diff
changeset
|
416 |
s/\`([^\`]*)\`/eval $1/ge; |
81dd404b35f2
24830961 OpenSSL FIPS work based on 1.0.2 for Oracle Solaris: Phase II
Misaki Miyashita <misaki.miyashita@oracle.com>
parents:
diff
changeset
|
417 |
|
81dd404b35f2
24830961 OpenSSL FIPS work based on 1.0.2 for Oracle Solaris: Phase II
Misaki Miyashita <misaki.miyashita@oracle.com>
parents:
diff
changeset
|
418 |
s/\b(f[^\s]*)\s+(%f[0-9]{1,2}),\s*(%f[0-9]{1,2}),\s*(%f[0-9]{1,2})/ |
81dd404b35f2
24830961 OpenSSL FIPS work based on 1.0.2 for Oracle Solaris: Phase II
Misaki Miyashita <misaki.miyashita@oracle.com>
parents:
diff
changeset
|
419 |
&unvis($1,$2,$3,$4) |
81dd404b35f2
24830961 OpenSSL FIPS work based on 1.0.2 for Oracle Solaris: Phase II
Misaki Miyashita <misaki.miyashita@oracle.com>
parents:
diff
changeset
|
420 |
/ge; |
81dd404b35f2
24830961 OpenSSL FIPS work based on 1.0.2 for Oracle Solaris: Phase II
Misaki Miyashita <misaki.miyashita@oracle.com>
parents:
diff
changeset
|
421 |
s/\b(alignaddr)\s+(%[goli][0-7]),\s*(%[goli][0-7]),\s*(%[goli][0-7])/ |
81dd404b35f2
24830961 OpenSSL FIPS work based on 1.0.2 for Oracle Solaris: Phase II
Misaki Miyashita <misaki.miyashita@oracle.com>
parents:
diff
changeset
|
422 |
&unalignaddr($1,$2,$3,$4) |
81dd404b35f2
24830961 OpenSSL FIPS work based on 1.0.2 for Oracle Solaris: Phase II
Misaki Miyashita <misaki.miyashita@oracle.com>
parents:
diff
changeset
|
423 |
/ge; |
81dd404b35f2
24830961 OpenSSL FIPS work based on 1.0.2 for Oracle Solaris: Phase II
Misaki Miyashita <misaki.miyashita@oracle.com>
parents:
diff
changeset
|
424 |
|
81dd404b35f2
24830961 OpenSSL FIPS work based on 1.0.2 for Oracle Solaris: Phase II
Misaki Miyashita <misaki.miyashita@oracle.com>
parents:
diff
changeset
|
425 |
print $_,"\n"; |
81dd404b35f2
24830961 OpenSSL FIPS work based on 1.0.2 for Oracle Solaris: Phase II
Misaki Miyashita <misaki.miyashita@oracle.com>
parents:
diff
changeset
|
426 |
} |
81dd404b35f2
24830961 OpenSSL FIPS work based on 1.0.2 for Oracle Solaris: Phase II
Misaki Miyashita <misaki.miyashita@oracle.com>
parents:
diff
changeset
|
427 |
|
81dd404b35f2
24830961 OpenSSL FIPS work based on 1.0.2 for Oracle Solaris: Phase II
Misaki Miyashita <misaki.miyashita@oracle.com>
parents:
diff
changeset
|
428 |
close STDOUT; |