author | Misaki Miyashita <Misaki.Miyashita@Oracle.COM> |
Tue, 11 Jun 2013 12:58:54 -0700 | |
changeset 1341 | af3d6ef22d65 |
child 1373 | 2fd83bee8884 |
permissions | -rw-r--r-- |
1341
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
1 |
#!/usr/bin/env perl |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
2 |
|
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
3 |
# Specific modes implementations for SPARC Architecture 2011. There |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
4 |
# is T4 dependency though, an ASI value that is not specified in the |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
5 |
# Architecture Manual. But as SPARC universe is rather monocultural, |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
6 |
# we imply that processor capable of executing crypto instructions |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
7 |
# can handle the ASI in question as well. This means that we ought to |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
8 |
# keep eyes open when new processors emerge... |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
9 |
# |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
10 |
# As for above mentioned ASI. It's so called "block initializing |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
11 |
# store" which cancels "read" in "read-update-write" on cache lines. |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
12 |
# This is "cooperative" optimization, as it reduces overall pressure |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
13 |
# on memory interface. Benefits can't be observed/quantified with |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
14 |
# usual benchmarks, on the contrary you can notice that single-thread |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
15 |
# performance for parallelizable modes is ~1.5% worse for largest |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
16 |
# block sizes [though few percent better for not so long ones]. All |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
17 |
# this based on suggestions from David Miller. |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
18 |
|
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
19 |
sub asm_init { # to be called with @ARGV as argument |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
20 |
for (@_) { $::abibits=64 if (/\-m64/ || /\-xarch\=v9/); } |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
21 |
if ($::abibits==64) { $::bias=2047; $::frame=192; $::size_t_cc="%xcc"; } |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
22 |
else { $::bias=0; $::frame=112; $::size_t_cc="%icc"; } |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
23 |
} |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
24 |
|
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
25 |
# unified interface |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
26 |
my ($inp,$out,$len,$key,$ivec)=map("%i$_",(0..5)); |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
27 |
# local variables |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
28 |
my ($ileft,$iright,$ooff,$omask,$ivoff,$blk_init)=map("%l$_",(0..7)); |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
29 |
|
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
30 |
sub alg_cbc_encrypt_implement { |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
31 |
my ($alg,$bits) = @_; |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
32 |
|
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
33 |
$::code.=<<___; |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
34 |
.globl ${alg}${bits}_t4_cbc_encrypt |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
35 |
.align 32 |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
36 |
${alg}${bits}_t4_cbc_encrypt: |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
37 |
save %sp, -$::frame, %sp |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
38 |
sub $inp, $out, $blk_init ! $inp!=$out |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
39 |
___ |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
40 |
$::code.=<<___ if (!$::evp); |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
41 |
andcc $ivec, 7, $ivoff |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
42 |
alignaddr $ivec, %g0, $ivec |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
43 |
|
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
44 |
ldd [$ivec + 0], %f0 ! load ivec |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
45 |
bz,pt %icc, 1f |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
46 |
ldd [$ivec + 8], %f2 |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
47 |
ldd [$ivec + 16], %f4 |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
48 |
faligndata %f0, %f2, %f0 |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
49 |
faligndata %f2, %f4, %f2 |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
50 |
1: |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
51 |
___ |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
52 |
$::code.=<<___ if ($::evp); |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
53 |
ld [$ivec + 0], %f0 |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
54 |
ld [$ivec + 4], %f1 |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
55 |
ld [$ivec + 8], %f2 |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
56 |
ld [$ivec + 12], %f3 |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
57 |
___ |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
58 |
$::code.=<<___; |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
59 |
prefetch [$inp], 20 |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
60 |
prefetch [$inp + 63], 20 |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
61 |
call _${alg}${bits}_load_enckey |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
62 |
and $inp, 7, $ileft |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
63 |
andn $inp, 7, $inp |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
64 |
sll $ileft, 3, $ileft |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
65 |
mov 64, $iright |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
66 |
mov 0xff, $omask |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
67 |
sub $iright, $ileft, $iright |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
68 |
and $out, 7, $ooff |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
69 |
cmp $len, 127 |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
70 |
movrnz $ooff, 0, $blk_init ! if ( $out&7 || |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
71 |
movleu $::size_t_cc, 0, $blk_init ! $len<128 || |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
72 |
brnz,pn $blk_init, .L${bits}cbc_enc_blk ! $inp==$out) |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
73 |
srl $omask, $ooff, $omask |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
74 |
|
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
75 |
alignaddrl $out, %g0, $out |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
76 |
srlx $len, 4, $len |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
77 |
prefetch [$out], 22 |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
78 |
|
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
79 |
.L${bits}_cbc_enc_loop: |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
80 |
ldx [$inp + 0], %o0 |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
81 |
brz,pt $ileft, 4f |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
82 |
ldx [$inp + 8], %o1 |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
83 |
|
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
84 |
ldx [$inp + 16], %o2 |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
85 |
sllx %o0, $ileft, %o0 |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
86 |
srlx %o1, $iright, %g1 |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
87 |
sllx %o1, $ileft, %o1 |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
88 |
or %g1, %o0, %o0 |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
89 |
srlx %o2, $iright, %o2 |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
90 |
or %o2, %o1, %o1 |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
91 |
4: |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
92 |
xor %g4, %o0, %o0 ! ^= rk[0] |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
93 |
xor %g5, %o1, %o1 |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
94 |
movxtod %o0, %f12 |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
95 |
movxtod %o1, %f14 |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
96 |
|
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
97 |
fxor %f12, %f0, %f0 ! ^= ivec |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
98 |
fxor %f14, %f2, %f2 |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
99 |
prefetch [$out + 63], 22 |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
100 |
prefetch [$inp + 16+63], 20 |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
101 |
call _${alg}${bits}_encrypt_1x |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
102 |
add $inp, 16, $inp |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
103 |
|
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
104 |
brnz,pn $ooff, 2f |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
105 |
sub $len, 1, $len |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
106 |
|
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
107 |
std %f0, [$out + 0] |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
108 |
std %f2, [$out + 8] |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
109 |
brnz,pt $len, .L${bits}_cbc_enc_loop |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
110 |
add $out, 16, $out |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
111 |
___ |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
112 |
$::code.=<<___ if ($::evp); |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
113 |
st %f0, [$ivec + 0] |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
114 |
st %f1, [$ivec + 4] |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
115 |
st %f2, [$ivec + 8] |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
116 |
st %f3, [$ivec + 12] |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
117 |
___ |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
118 |
$::code.=<<___ if (!$::evp); |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
119 |
brnz,pn $ivoff, 3f |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
120 |
nop |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
121 |
|
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
122 |
std %f0, [$ivec + 0] ! write out ivec |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
123 |
std %f2, [$ivec + 8] |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
124 |
___ |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
125 |
$::code.=<<___; |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
126 |
ret |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
127 |
restore |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
128 |
|
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
129 |
.align 16 |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
130 |
2: ldxa [$inp]0x82, %o0 ! avoid read-after-write hazard |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
131 |
! and ~3x deterioration |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
132 |
! in inp==out case |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
133 |
faligndata %f0, %f0, %f4 ! handle unaligned output |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
134 |
faligndata %f0, %f2, %f6 |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
135 |
faligndata %f2, %f2, %f8 |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
136 |
|
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
137 |
stda %f4, [$out + $omask]0xc0 ! partial store |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
138 |
std %f6, [$out + 8] |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
139 |
add $out, 16, $out |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
140 |
orn %g0, $omask, $omask |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
141 |
stda %f8, [$out + $omask]0xc0 ! partial store |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
142 |
|
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
143 |
brnz,pt $len, .L${bits}_cbc_enc_loop+4 |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
144 |
orn %g0, $omask, $omask |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
145 |
___ |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
146 |
$::code.=<<___ if ($::evp); |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
147 |
st %f0, [$ivec + 0] |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
148 |
st %f1, [$ivec + 4] |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
149 |
st %f2, [$ivec + 8] |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
150 |
st %f3, [$ivec + 12] |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
151 |
___ |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
152 |
$::code.=<<___ if (!$::evp); |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
153 |
brnz,pn $ivoff, 3f |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
154 |
nop |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
155 |
|
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
156 |
std %f0, [$ivec + 0] ! write out ivec |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
157 |
std %f2, [$ivec + 8] |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
158 |
ret |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
159 |
restore |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
160 |
|
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
161 |
.align 16 |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
162 |
3: alignaddrl $ivec, $ivoff, %g0 ! handle unaligned ivec |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
163 |
mov 0xff, $omask |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
164 |
srl $omask, $ivoff, $omask |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
165 |
faligndata %f0, %f0, %f4 |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
166 |
faligndata %f0, %f2, %f6 |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
167 |
faligndata %f2, %f2, %f8 |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
168 |
stda %f4, [$ivec + $omask]0xc0 |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
169 |
std %f6, [$ivec + 8] |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
170 |
add $ivec, 16, $ivec |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
171 |
orn %g0, $omask, $omask |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
172 |
stda %f8, [$ivec + $omask]0xc0 |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
173 |
___ |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
174 |
$::code.=<<___; |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
175 |
ret |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
176 |
restore |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
177 |
|
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
178 |
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
179 |
.align 32 |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
180 |
.L${bits}cbc_enc_blk: |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
181 |
add $out, $len, $blk_init |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
182 |
and $blk_init, 63, $blk_init ! tail |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
183 |
sub $len, $blk_init, $len |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
184 |
add $blk_init, 15, $blk_init ! round up to 16n |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
185 |
srlx $len, 4, $len |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
186 |
srl $blk_init, 4, $blk_init |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
187 |
|
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
188 |
.L${bits}_cbc_enc_blk_loop: |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
189 |
ldx [$inp + 0], %o0 |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
190 |
brz,pt $ileft, 5f |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
191 |
ldx [$inp + 8], %o1 |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
192 |
|
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
193 |
ldx [$inp + 16], %o2 |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
194 |
sllx %o0, $ileft, %o0 |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
195 |
srlx %o1, $iright, %g1 |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
196 |
sllx %o1, $ileft, %o1 |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
197 |
or %g1, %o0, %o0 |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
198 |
srlx %o2, $iright, %o2 |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
199 |
or %o2, %o1, %o1 |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
200 |
5: |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
201 |
xor %g4, %o0, %o0 ! ^= rk[0] |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
202 |
xor %g5, %o1, %o1 |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
203 |
movxtod %o0, %f12 |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
204 |
movxtod %o1, %f14 |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
205 |
|
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
206 |
fxor %f12, %f0, %f0 ! ^= ivec |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
207 |
fxor %f14, %f2, %f2 |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
208 |
prefetch [$inp + 16+63], 20 |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
209 |
call _${alg}${bits}_encrypt_1x |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
210 |
add $inp, 16, $inp |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
211 |
sub $len, 1, $len |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
212 |
|
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
213 |
stda %f0, [$out]0xe2 ! ASI_BLK_INIT, T4-specific |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
214 |
add $out, 8, $out |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
215 |
stda %f2, [$out]0xe2 ! ASI_BLK_INIT, T4-specific |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
216 |
brnz,pt $len, .L${bits}_cbc_enc_blk_loop |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
217 |
add $out, 8, $out |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
218 |
|
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
219 |
membar #StoreLoad|#StoreStore |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
220 |
brnz,pt $blk_init, .L${bits}_cbc_enc_loop |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
221 |
mov $blk_init, $len |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
222 |
___ |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
223 |
$::code.=<<___ if ($::evp); |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
224 |
st %f0, [$ivec + 0] |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
225 |
st %f1, [$ivec + 4] |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
226 |
st %f2, [$ivec + 8] |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
227 |
st %f3, [$ivec + 12] |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
228 |
___ |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
229 |
$::code.=<<___ if (!$::evp); |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
230 |
brnz,pn $ivoff, 3b |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
231 |
nop |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
232 |
|
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
233 |
std %f0, [$ivec + 0] ! write out ivec |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
234 |
std %f2, [$ivec + 8] |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
235 |
___ |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
236 |
$::code.=<<___; |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
237 |
ret |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
238 |
restore |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
239 |
.type ${alg}${bits}_t4_cbc_encrypt,#function |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
240 |
.size ${alg}${bits}_t4_cbc_encrypt,.-${alg}${bits}_t4_cbc_encrypt |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
241 |
___ |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
242 |
} |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
243 |
|
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
244 |
sub alg_cbc_decrypt_implement { |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
245 |
my ($alg,$bits) = @_; |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
246 |
|
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
247 |
$::code.=<<___; |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
248 |
.globl ${alg}${bits}_t4_cbc_decrypt |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
249 |
.align 32 |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
250 |
${alg}${bits}_t4_cbc_decrypt: |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
251 |
save %sp, -$::frame, %sp |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
252 |
sub $inp, $out, $blk_init ! $inp!=$out |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
253 |
___ |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
254 |
$::code.=<<___ if (!$::evp); |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
255 |
andcc $ivec, 7, $ivoff |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
256 |
alignaddr $ivec, %g0, $ivec |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
257 |
|
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
258 |
ldd [$ivec + 0], %f12 ! load ivec |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
259 |
bz,pt %icc, 1f |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
260 |
ldd [$ivec + 8], %f14 |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
261 |
ldd [$ivec + 16], %f0 |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
262 |
faligndata %f12, %f14, %f12 |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
263 |
faligndata %f14, %f0, %f14 |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
264 |
1: |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
265 |
___ |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
266 |
$::code.=<<___ if ($::evp); |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
267 |
ld [$ivec + 0], %f12 ! load ivec |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
268 |
ld [$ivec + 4], %f13 |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
269 |
ld [$ivec + 8], %f14 |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
270 |
ld [$ivec + 12], %f15 |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
271 |
___ |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
272 |
$::code.=<<___; |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
273 |
prefetch [$inp], 20 |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
274 |
prefetch [$inp + 63], 20 |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
275 |
call _${alg}${bits}_load_deckey |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
276 |
and $inp, 7, $ileft |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
277 |
andn $inp, 7, $inp |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
278 |
sll $ileft, 3, $ileft |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
279 |
mov 64, $iright |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
280 |
mov 0xff, $omask |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
281 |
sub $iright, $ileft, $iright |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
282 |
and $out, 7, $ooff |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
283 |
cmp $len, 255 |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
284 |
movrnz $ooff, 0, $blk_init ! if ( $out&7 || |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
285 |
movleu $::size_t_cc, 0, $blk_init ! $len<256 || |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
286 |
brnz,pn $blk_init, .L${bits}cbc_dec_blk ! $inp==$out) |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
287 |
srl $omask, $ooff, $omask |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
288 |
|
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
289 |
andcc $len, 16, %g0 ! is number of blocks even? |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
290 |
srlx $len, 4, $len |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
291 |
alignaddrl $out, %g0, $out |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
292 |
bz %icc, .L${bits}_cbc_dec_loop2x |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
293 |
prefetch [$out], 22 |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
294 |
.L${bits}_cbc_dec_loop: |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
295 |
ldx [$inp + 0], %o0 |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
296 |
brz,pt $ileft, 4f |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
297 |
ldx [$inp + 8], %o1 |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
298 |
|
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
299 |
ldx [$inp + 16], %o2 |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
300 |
sllx %o0, $ileft, %o0 |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
301 |
srlx %o1, $iright, %g1 |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
302 |
sllx %o1, $ileft, %o1 |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
303 |
or %g1, %o0, %o0 |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
304 |
srlx %o2, $iright, %o2 |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
305 |
or %o2, %o1, %o1 |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
306 |
4: |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
307 |
xor %g4, %o0, %o2 ! ^= rk[0] |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
308 |
xor %g5, %o1, %o3 |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
309 |
movxtod %o2, %f0 |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
310 |
movxtod %o3, %f2 |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
311 |
|
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
312 |
prefetch [$out + 63], 22 |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
313 |
prefetch [$inp + 16+63], 20 |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
314 |
call _${alg}${bits}_decrypt_1x |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
315 |
add $inp, 16, $inp |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
316 |
|
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
317 |
fxor %f12, %f0, %f0 ! ^= ivec |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
318 |
fxor %f14, %f2, %f2 |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
319 |
movxtod %o0, %f12 |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
320 |
movxtod %o1, %f14 |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
321 |
|
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
322 |
brnz,pn $ooff, 2f |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
323 |
sub $len, 1, $len |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
324 |
|
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
325 |
std %f0, [$out + 0] |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
326 |
std %f2, [$out + 8] |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
327 |
brnz,pt $len, .L${bits}_cbc_dec_loop2x |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
328 |
add $out, 16, $out |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
329 |
___ |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
330 |
$::code.=<<___ if ($::evp); |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
331 |
st %f12, [$ivec + 0] |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
332 |
st %f13, [$ivec + 4] |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
333 |
st %f14, [$ivec + 8] |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
334 |
st %f15, [$ivec + 12] |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
335 |
___ |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
336 |
$::code.=<<___ if (!$::evp); |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
337 |
brnz,pn $ivoff, .L${bits}_cbc_dec_unaligned_ivec |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
338 |
nop |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
339 |
|
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
340 |
std %f12, [$ivec + 0] ! write out ivec |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
341 |
std %f14, [$ivec + 8] |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
342 |
___ |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
343 |
$::code.=<<___; |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
344 |
ret |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
345 |
restore |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
346 |
|
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
347 |
.align 16 |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
348 |
2: ldxa [$inp]0x82, %o0 ! avoid read-after-write hazard |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
349 |
! and ~3x deterioration |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
350 |
! in inp==out case |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
351 |
faligndata %f0, %f0, %f4 ! handle unaligned output |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
352 |
faligndata %f0, %f2, %f6 |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
353 |
faligndata %f2, %f2, %f8 |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
354 |
|
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
355 |
stda %f4, [$out + $omask]0xc0 ! partial store |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
356 |
std %f6, [$out + 8] |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
357 |
add $out, 16, $out |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
358 |
orn %g0, $omask, $omask |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
359 |
stda %f8, [$out + $omask]0xc0 ! partial store |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
360 |
|
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
361 |
brnz,pt $len, .L${bits}_cbc_dec_loop2x+4 |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
362 |
orn %g0, $omask, $omask |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
363 |
___ |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
364 |
$::code.=<<___ if ($::evp); |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
365 |
st %f12, [$ivec + 0] |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
366 |
st %f13, [$ivec + 4] |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
367 |
st %f14, [$ivec + 8] |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
368 |
st %f15, [$ivec + 12] |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
369 |
___ |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
370 |
$::code.=<<___ if (!$::evp); |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
371 |
brnz,pn $ivoff, .L${bits}_cbc_dec_unaligned_ivec |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
372 |
nop |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
373 |
|
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
374 |
std %f12, [$ivec + 0] ! write out ivec |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
375 |
std %f14, [$ivec + 8] |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
376 |
___ |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
377 |
$::code.=<<___; |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
378 |
ret |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
379 |
restore |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
380 |
|
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
381 |
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
382 |
.align 32 |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
383 |
.L${bits}_cbc_dec_loop2x: |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
384 |
ldx [$inp + 0], %o0 |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
385 |
ldx [$inp + 8], %o1 |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
386 |
ldx [$inp + 16], %o2 |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
387 |
brz,pt $ileft, 4f |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
388 |
ldx [$inp + 24], %o3 |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
389 |
|
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
390 |
ldx [$inp + 32], %o4 |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
391 |
sllx %o0, $ileft, %o0 |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
392 |
srlx %o1, $iright, %g1 |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
393 |
or %g1, %o0, %o0 |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
394 |
sllx %o1, $ileft, %o1 |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
395 |
srlx %o2, $iright, %g1 |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
396 |
or %g1, %o1, %o1 |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
397 |
sllx %o2, $ileft, %o2 |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
398 |
srlx %o3, $iright, %g1 |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
399 |
or %g1, %o2, %o2 |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
400 |
sllx %o3, $ileft, %o3 |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
401 |
srlx %o4, $iright, %o4 |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
402 |
or %o4, %o3, %o3 |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
403 |
4: |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
404 |
xor %g4, %o0, %o4 ! ^= rk[0] |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
405 |
xor %g5, %o1, %o5 |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
406 |
movxtod %o4, %f0 |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
407 |
movxtod %o5, %f2 |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
408 |
xor %g4, %o2, %o4 |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
409 |
xor %g5, %o3, %o5 |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
410 |
movxtod %o4, %f4 |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
411 |
movxtod %o5, %f6 |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
412 |
|
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
413 |
prefetch [$out + 63], 22 |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
414 |
prefetch [$inp + 32+63], 20 |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
415 |
call _${alg}${bits}_decrypt_2x |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
416 |
add $inp, 32, $inp |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
417 |
|
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
418 |
movxtod %o0, %f8 |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
419 |
movxtod %o1, %f10 |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
420 |
fxor %f12, %f0, %f0 ! ^= ivec |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
421 |
fxor %f14, %f2, %f2 |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
422 |
movxtod %o2, %f12 |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
423 |
movxtod %o3, %f14 |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
424 |
fxor %f8, %f4, %f4 |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
425 |
fxor %f10, %f6, %f6 |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
426 |
|
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
427 |
brnz,pn $ooff, 2f |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
428 |
sub $len, 2, $len |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
429 |
|
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
430 |
std %f0, [$out + 0] |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
431 |
std %f2, [$out + 8] |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
432 |
std %f4, [$out + 16] |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
433 |
std %f6, [$out + 24] |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
434 |
brnz,pt $len, .L${bits}_cbc_dec_loop2x |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
435 |
add $out, 32, $out |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
436 |
___ |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
437 |
$::code.=<<___ if ($::evp); |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
438 |
st %f12, [$ivec + 0] |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
439 |
st %f13, [$ivec + 4] |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
440 |
st %f14, [$ivec + 8] |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
441 |
st %f15, [$ivec + 12] |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
442 |
___ |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
443 |
$::code.=<<___ if (!$::evp); |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
444 |
brnz,pn $ivoff, .L${bits}_cbc_dec_unaligned_ivec |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
445 |
nop |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
446 |
|
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
447 |
std %f12, [$ivec + 0] ! write out ivec |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
448 |
std %f14, [$ivec + 8] |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
449 |
___ |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
450 |
$::code.=<<___; |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
451 |
ret |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
452 |
restore |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
453 |
|
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
454 |
.align 16 |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
455 |
2: ldxa [$inp]0x82, %o0 ! avoid read-after-write hazard |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
456 |
! and ~3x deterioration |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
457 |
! in inp==out case |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
458 |
faligndata %f0, %f0, %f8 ! handle unaligned output |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
459 |
faligndata %f0, %f2, %f0 |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
460 |
faligndata %f2, %f4, %f2 |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
461 |
faligndata %f4, %f6, %f4 |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
462 |
faligndata %f6, %f6, %f6 |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
463 |
stda %f8, [$out + $omask]0xc0 ! partial store |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
464 |
std %f0, [$out + 8] |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
465 |
std %f2, [$out + 16] |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
466 |
std %f4, [$out + 24] |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
467 |
add $out, 32, $out |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
468 |
orn %g0, $omask, $omask |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
469 |
stda %f6, [$out + $omask]0xc0 ! partial store |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
470 |
|
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
471 |
brnz,pt $len, .L${bits}_cbc_dec_loop2x+4 |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
472 |
orn %g0, $omask, $omask |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
473 |
___ |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
474 |
$::code.=<<___ if ($::evp); |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
475 |
st %f12, [$ivec + 0] |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
476 |
st %f13, [$ivec + 4] |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
477 |
st %f14, [$ivec + 8] |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
478 |
st %f15, [$ivec + 12] |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
479 |
___ |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
480 |
$::code.=<<___ if (!$::evp); |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
481 |
brnz,pn $ivoff, .L${bits}_cbc_dec_unaligned_ivec |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
482 |
nop |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
483 |
|
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
484 |
std %f12, [$ivec + 0] ! write out ivec |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
485 |
std %f14, [$ivec + 8] |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
486 |
ret |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
487 |
restore |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
488 |
|
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
489 |
.align 16 |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
490 |
.L${bits}_cbc_dec_unaligned_ivec: |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
491 |
alignaddrl $ivec, $ivoff, %g0 ! handle unaligned ivec |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
492 |
mov 0xff, $omask |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
493 |
srl $omask, $ivoff, $omask |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
494 |
faligndata %f12, %f12, %f0 |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
495 |
faligndata %f12, %f14, %f2 |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
496 |
faligndata %f14, %f14, %f4 |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
497 |
stda %f0, [$ivec + $omask]0xc0 |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
498 |
std %f2, [$ivec + 8] |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
499 |
add $ivec, 16, $ivec |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
500 |
orn %g0, $omask, $omask |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
501 |
stda %f4, [$ivec + $omask]0xc0 |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
502 |
___ |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
503 |
$::code.=<<___; |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
504 |
ret |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
505 |
restore |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
506 |
|
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
507 |
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
508 |
.align 32 |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
509 |
.L${bits}cbc_dec_blk: |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
510 |
add $out, $len, $blk_init |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
511 |
and $blk_init, 63, $blk_init ! tail |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
512 |
sub $len, $blk_init, $len |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
513 |
add $blk_init, 15, $blk_init ! round up to 16n |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
514 |
srlx $len, 4, $len |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
515 |
srl $blk_init, 4, $blk_init |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
516 |
sub $len, 1, $len |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
517 |
add $blk_init, 1, $blk_init |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
518 |
|
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
519 |
.L${bits}_cbc_dec_blk_loop2x: |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
520 |
ldx [$inp + 0], %o0 |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
521 |
ldx [$inp + 8], %o1 |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
522 |
ldx [$inp + 16], %o2 |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
523 |
brz,pt $ileft, 5f |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
524 |
ldx [$inp + 24], %o3 |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
525 |
|
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
526 |
ldx [$inp + 32], %o4 |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
527 |
sllx %o0, $ileft, %o0 |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
528 |
srlx %o1, $iright, %g1 |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
529 |
or %g1, %o0, %o0 |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
530 |
sllx %o1, $ileft, %o1 |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
531 |
srlx %o2, $iright, %g1 |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
532 |
or %g1, %o1, %o1 |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
533 |
sllx %o2, $ileft, %o2 |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
534 |
srlx %o3, $iright, %g1 |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
535 |
or %g1, %o2, %o2 |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
536 |
sllx %o3, $ileft, %o3 |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
537 |
srlx %o4, $iright, %o4 |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
538 |
or %o4, %o3, %o3 |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
539 |
5: |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
540 |
xor %g4, %o0, %o4 ! ^= rk[0] |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
541 |
xor %g5, %o1, %o5 |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
542 |
movxtod %o4, %f0 |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
543 |
movxtod %o5, %f2 |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
544 |
xor %g4, %o2, %o4 |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
545 |
xor %g5, %o3, %o5 |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
546 |
movxtod %o4, %f4 |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
547 |
movxtod %o5, %f6 |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
548 |
|
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
549 |
prefetch [$inp + 32+63], 20 |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
550 |
call _${alg}${bits}_decrypt_2x |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
551 |
add $inp, 32, $inp |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
552 |
subcc $len, 2, $len |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
553 |
|
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
554 |
movxtod %o0, %f8 |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
555 |
movxtod %o1, %f10 |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
556 |
fxor %f12, %f0, %f0 ! ^= ivec |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
557 |
fxor %f14, %f2, %f2 |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
558 |
movxtod %o2, %f12 |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
559 |
movxtod %o3, %f14 |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
560 |
fxor %f8, %f4, %f4 |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
561 |
fxor %f10, %f6, %f6 |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
562 |
|
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
563 |
stda %f0, [$out]0xe2 ! ASI_BLK_INIT, T4-specific |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
564 |
add $out, 8, $out |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
565 |
stda %f2, [$out]0xe2 ! ASI_BLK_INIT, T4-specific |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
566 |
add $out, 8, $out |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
567 |
stda %f4, [$out]0xe2 ! ASI_BLK_INIT, T4-specific |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
568 |
add $out, 8, $out |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
569 |
stda %f6, [$out]0xe2 ! ASI_BLK_INIT, T4-specific |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
570 |
bgu,pt $::size_t_cc, .L${bits}_cbc_dec_blk_loop2x |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
571 |
add $out, 8, $out |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
572 |
|
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
573 |
add $blk_init, $len, $len |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
574 |
andcc $len, 1, %g0 ! is number of blocks even? |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
575 |
membar #StoreLoad|#StoreStore |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
576 |
bnz,pt %icc, .L${bits}_cbc_dec_loop |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
577 |
srl $len, 0, $len |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
578 |
brnz,pn $len, .L${bits}_cbc_dec_loop2x |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
579 |
nop |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
580 |
___ |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
581 |
$::code.=<<___ if ($::evp); |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
582 |
st %f12, [$ivec + 0] ! write out ivec |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
583 |
st %f13, [$ivec + 4] |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
584 |
st %f14, [$ivec + 8] |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
585 |
st %f15, [$ivec + 12] |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
586 |
___ |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
587 |
$::code.=<<___ if (!$::evp); |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
588 |
brnz,pn $ivoff, 3b |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
589 |
nop |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
590 |
|
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
591 |
std %f12, [$ivec + 0] ! write out ivec |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
592 |
std %f14, [$ivec + 8] |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
593 |
___ |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
594 |
$::code.=<<___; |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
595 |
ret |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
596 |
restore |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
597 |
.type ${alg}${bits}_t4_cbc_decrypt,#function |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
598 |
.size ${alg}${bits}_t4_cbc_decrypt,.-${alg}${bits}_t4_cbc_decrypt |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
599 |
___ |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
600 |
} |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
601 |
|
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
602 |
sub alg_ctr32_implement { |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
603 |
my ($alg,$bits) = @_; |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
604 |
|
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
605 |
$::code.=<<___; |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
606 |
.globl ${alg}${bits}_t4_ctr32_encrypt |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
607 |
.align 32 |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
608 |
${alg}${bits}_t4_ctr32_encrypt: |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
609 |
save %sp, -$::frame, %sp |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
610 |
|
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
611 |
prefetch [$inp], 20 |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
612 |
prefetch [$inp + 63], 20 |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
613 |
call _${alg}${bits}_load_enckey |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
614 |
sllx $len, 4, $len |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
615 |
|
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
616 |
ld [$ivec + 0], %l4 ! counter |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
617 |
ld [$ivec + 4], %l5 |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
618 |
ld [$ivec + 8], %l6 |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
619 |
ld [$ivec + 12], %l7 |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
620 |
|
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
621 |
sllx %l4, 32, %o5 |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
622 |
or %l5, %o5, %o5 |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
623 |
sllx %l6, 32, %g1 |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
624 |
xor %o5, %g4, %g4 ! ^= rk[0] |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
625 |
xor %g1, %g5, %g5 |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
626 |
movxtod %g4, %f14 ! most significant 64 bits |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
627 |
|
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
628 |
sub $inp, $out, $blk_init ! $inp!=$out |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
629 |
and $inp, 7, $ileft |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
630 |
andn $inp, 7, $inp |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
631 |
sll $ileft, 3, $ileft |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
632 |
mov 64, $iright |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
633 |
mov 0xff, $omask |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
634 |
sub $iright, $ileft, $iright |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
635 |
and $out, 7, $ooff |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
636 |
cmp $len, 255 |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
637 |
movrnz $ooff, 0, $blk_init ! if ( $out&7 || |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
638 |
movleu $::size_t_cc, 0, $blk_init ! $len<256 || |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
639 |
brnz,pn $blk_init, .L${bits}_ctr32_blk ! $inp==$out) |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
640 |
srl $omask, $ooff, $omask |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
641 |
|
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
642 |
andcc $len, 16, %g0 ! is number of blocks even? |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
643 |
alignaddrl $out, %g0, $out |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
644 |
bz %icc, .L${bits}_ctr32_loop2x |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
645 |
srlx $len, 4, $len |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
646 |
.L${bits}_ctr32_loop: |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
647 |
ldx [$inp + 0], %o0 |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
648 |
brz,pt $ileft, 4f |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
649 |
ldx [$inp + 8], %o1 |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
650 |
|
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
651 |
ldx [$inp + 16], %o2 |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
652 |
sllx %o0, $ileft, %o0 |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
653 |
srlx %o1, $iright, %g1 |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
654 |
sllx %o1, $ileft, %o1 |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
655 |
or %g1, %o0, %o0 |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
656 |
srlx %o2, $iright, %o2 |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
657 |
or %o2, %o1, %o1 |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
658 |
4: |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
659 |
xor %g5, %l7, %g1 ! ^= rk[0] |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
660 |
add %l7, 1, %l7 |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
661 |
movxtod %g1, %f2 |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
662 |
srl %l7, 0, %l7 ! clruw |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
663 |
prefetch [$out + 63], 22 |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
664 |
prefetch [$inp + 16+63], 20 |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
665 |
___ |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
666 |
$::code.=<<___ if ($alg eq "aes"); |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
667 |
aes_eround01 %f16, %f14, %f2, %f4 |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
668 |
aes_eround23 %f18, %f14, %f2, %f2 |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
669 |
___ |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
670 |
$::code.=<<___ if ($alg eq "cmll"); |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
671 |
camellia_f %f16, %f2, %f14, %f2 |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
672 |
camellia_f %f18, %f14, %f2, %f0 |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
673 |
___ |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
674 |
$::code.=<<___; |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
675 |
call _${alg}${bits}_encrypt_1x+8 |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
676 |
add $inp, 16, $inp |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
677 |
|
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
678 |
movxtod %o0, %f10 |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
679 |
movxtod %o1, %f12 |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
680 |
fxor %f10, %f0, %f0 ! ^= inp |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
681 |
fxor %f12, %f2, %f2 |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
682 |
|
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
683 |
brnz,pn $ooff, 2f |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
684 |
sub $len, 1, $len |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
685 |
|
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
686 |
std %f0, [$out + 0] |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
687 |
std %f2, [$out + 8] |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
688 |
brnz,pt $len, .L${bits}_ctr32_loop2x |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
689 |
add $out, 16, $out |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
690 |
|
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
691 |
ret |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
692 |
restore |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
693 |
|
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
694 |
.align 16 |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
695 |
2: ldxa [$inp]0x82, %o0 ! avoid read-after-write hazard |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
696 |
! and ~3x deterioration |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
697 |
! in inp==out case |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
698 |
faligndata %f0, %f0, %f4 ! handle unaligned output |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
699 |
faligndata %f0, %f2, %f6 |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
700 |
faligndata %f2, %f2, %f8 |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
701 |
stda %f4, [$out + $omask]0xc0 ! partial store |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
702 |
std %f6, [$out + 8] |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
703 |
add $out, 16, $out |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
704 |
orn %g0, $omask, $omask |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
705 |
stda %f8, [$out + $omask]0xc0 ! partial store |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
706 |
|
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
707 |
brnz,pt $len, .L${bits}_ctr32_loop2x+4 |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
708 |
orn %g0, $omask, $omask |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
709 |
|
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
710 |
ret |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
711 |
restore |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
712 |
|
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
713 |
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
714 |
.align 32 |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
715 |
.L${bits}_ctr32_loop2x: |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
716 |
ldx [$inp + 0], %o0 |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
717 |
ldx [$inp + 8], %o1 |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
718 |
ldx [$inp + 16], %o2 |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
719 |
brz,pt $ileft, 4f |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
720 |
ldx [$inp + 24], %o3 |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
721 |
|
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
722 |
ldx [$inp + 32], %o4 |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
723 |
sllx %o0, $ileft, %o0 |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
724 |
srlx %o1, $iright, %g1 |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
725 |
or %g1, %o0, %o0 |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
726 |
sllx %o1, $ileft, %o1 |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
727 |
srlx %o2, $iright, %g1 |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
728 |
or %g1, %o1, %o1 |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
729 |
sllx %o2, $ileft, %o2 |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
730 |
srlx %o3, $iright, %g1 |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
731 |
or %g1, %o2, %o2 |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
732 |
sllx %o3, $ileft, %o3 |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
733 |
srlx %o4, $iright, %o4 |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
734 |
or %o4, %o3, %o3 |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
735 |
4: |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
736 |
xor %g5, %l7, %g1 ! ^= rk[0] |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
737 |
add %l7, 1, %l7 |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
738 |
movxtod %g1, %f2 |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
739 |
srl %l7, 0, %l7 ! clruw |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
740 |
xor %g5, %l7, %g1 |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
741 |
add %l7, 1, %l7 |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
742 |
movxtod %g1, %f6 |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
743 |
srl %l7, 0, %l7 ! clruw |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
744 |
prefetch [$out + 63], 22 |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
745 |
prefetch [$inp + 32+63], 20 |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
746 |
___ |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
747 |
$::code.=<<___ if ($alg eq "aes"); |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
748 |
aes_eround01 %f16, %f14, %f2, %f8 |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
749 |
aes_eround23 %f18, %f14, %f2, %f2 |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
750 |
aes_eround01 %f16, %f14, %f6, %f10 |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
751 |
aes_eround23 %f18, %f14, %f6, %f6 |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
752 |
___ |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
753 |
$::code.=<<___ if ($alg eq "cmll"); |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
754 |
camellia_f %f16, %f2, %f14, %f2 |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
755 |
camellia_f %f16, %f6, %f14, %f6 |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
756 |
camellia_f %f18, %f14, %f2, %f0 |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
757 |
camellia_f %f18, %f14, %f6, %f4 |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
758 |
___ |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
759 |
$::code.=<<___; |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
760 |
call _${alg}${bits}_encrypt_2x+16 |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
761 |
add $inp, 32, $inp |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
762 |
|
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
763 |
movxtod %o0, %f8 |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
764 |
movxtod %o1, %f10 |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
765 |
movxtod %o2, %f12 |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
766 |
fxor %f8, %f0, %f0 ! ^= inp |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
767 |
movxtod %o3, %f8 |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
768 |
fxor %f10, %f2, %f2 |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
769 |
fxor %f12, %f4, %f4 |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
770 |
fxor %f8, %f6, %f6 |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
771 |
|
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
772 |
brnz,pn $ooff, 2f |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
773 |
sub $len, 2, $len |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
774 |
|
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
775 |
std %f0, [$out + 0] |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
776 |
std %f2, [$out + 8] |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
777 |
std %f4, [$out + 16] |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
778 |
std %f6, [$out + 24] |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
779 |
brnz,pt $len, .L${bits}_ctr32_loop2x |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
780 |
add $out, 32, $out |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
781 |
|
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
782 |
ret |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
783 |
restore |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
784 |
|
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
785 |
.align 16 |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
786 |
2: ldxa [$inp]0x82, %o0 ! avoid read-after-write hazard |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
787 |
! and ~3x deterioration |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
788 |
! in inp==out case |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
789 |
faligndata %f0, %f0, %f8 ! handle unaligned output |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
790 |
faligndata %f0, %f2, %f0 |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
791 |
faligndata %f2, %f4, %f2 |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
792 |
faligndata %f4, %f6, %f4 |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
793 |
faligndata %f6, %f6, %f6 |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
794 |
|
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
795 |
stda %f8, [$out + $omask]0xc0 ! partial store |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
796 |
std %f0, [$out + 8] |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
797 |
std %f2, [$out + 16] |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
798 |
std %f4, [$out + 24] |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
799 |
add $out, 32, $out |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
800 |
orn %g0, $omask, $omask |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
801 |
stda %f6, [$out + $omask]0xc0 ! partial store |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
802 |
|
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
803 |
brnz,pt $len, .L${bits}_ctr32_loop2x+4 |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
804 |
orn %g0, $omask, $omask |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
805 |
|
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
806 |
ret |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
807 |
restore |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
808 |
|
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
809 |
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
810 |
.align 32 |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
811 |
.L${bits}_ctr32_blk: |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
812 |
add $out, $len, $blk_init |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
813 |
and $blk_init, 63, $blk_init ! tail |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
814 |
sub $len, $blk_init, $len |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
815 |
add $blk_init, 15, $blk_init ! round up to 16n |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
816 |
srlx $len, 4, $len |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
817 |
srl $blk_init, 4, $blk_init |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
818 |
sub $len, 1, $len |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
819 |
add $blk_init, 1, $blk_init |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
820 |
|
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
821 |
.L${bits}_ctr32_blk_loop2x: |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
822 |
ldx [$inp + 0], %o0 |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
823 |
ldx [$inp + 8], %o1 |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
824 |
ldx [$inp + 16], %o2 |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
825 |
brz,pt $ileft, 5f |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
826 |
ldx [$inp + 24], %o3 |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
827 |
|
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
828 |
ldx [$inp + 32], %o4 |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
829 |
sllx %o0, $ileft, %o0 |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
830 |
srlx %o1, $iright, %g1 |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
831 |
or %g1, %o0, %o0 |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
832 |
sllx %o1, $ileft, %o1 |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
833 |
srlx %o2, $iright, %g1 |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
834 |
or %g1, %o1, %o1 |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
835 |
sllx %o2, $ileft, %o2 |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
836 |
srlx %o3, $iright, %g1 |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
837 |
or %g1, %o2, %o2 |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
838 |
sllx %o3, $ileft, %o3 |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
839 |
srlx %o4, $iright, %o4 |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
840 |
or %o4, %o3, %o3 |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
841 |
5: |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
842 |
xor %g5, %l7, %g1 ! ^= rk[0] |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
843 |
add %l7, 1, %l7 |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
844 |
movxtod %g1, %f2 |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
845 |
srl %l7, 0, %l7 ! clruw |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
846 |
xor %g5, %l7, %g1 |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
847 |
add %l7, 1, %l7 |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
848 |
movxtod %g1, %f6 |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
849 |
srl %l7, 0, %l7 ! clruw |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
850 |
prefetch [$inp + 32+63], 20 |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
851 |
___ |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
852 |
$::code.=<<___ if ($alg eq "aes"); |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
853 |
aes_eround01 %f16, %f14, %f2, %f8 |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
854 |
aes_eround23 %f18, %f14, %f2, %f2 |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
855 |
aes_eround01 %f16, %f14, %f6, %f10 |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
856 |
aes_eround23 %f18, %f14, %f6, %f6 |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
857 |
___ |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
858 |
$::code.=<<___ if ($alg eq "cmll"); |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
859 |
camellia_f %f16, %f2, %f14, %f2 |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
860 |
camellia_f %f16, %f6, %f14, %f6 |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
861 |
camellia_f %f18, %f14, %f2, %f0 |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
862 |
camellia_f %f18, %f14, %f6, %f4 |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
863 |
___ |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
864 |
$::code.=<<___; |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
865 |
call _${alg}${bits}_encrypt_2x+16 |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
866 |
add $inp, 32, $inp |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
867 |
subcc $len, 2, $len |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
868 |
|
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
869 |
movxtod %o0, %f8 |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
870 |
movxtod %o1, %f10 |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
871 |
movxtod %o2, %f12 |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
872 |
fxor %f8, %f0, %f0 ! ^= inp |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
873 |
movxtod %o3, %f8 |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
874 |
fxor %f10, %f2, %f2 |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
875 |
fxor %f12, %f4, %f4 |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
876 |
fxor %f8, %f6, %f6 |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
877 |
|
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
878 |
stda %f0, [$out]0xe2 ! ASI_BLK_INIT, T4-specific |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
879 |
add $out, 8, $out |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
880 |
stda %f2, [$out]0xe2 ! ASI_BLK_INIT, T4-specific |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
881 |
add $out, 8, $out |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
882 |
stda %f4, [$out]0xe2 ! ASI_BLK_INIT, T4-specific |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
883 |
add $out, 8, $out |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
884 |
stda %f6, [$out]0xe2 ! ASI_BLK_INIT, T4-specific |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
885 |
bgu,pt $::size_t_cc, .L${bits}_ctr32_blk_loop2x |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
886 |
add $out, 8, $out |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
887 |
|
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
888 |
add $blk_init, $len, $len |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
889 |
andcc $len, 1, %g0 ! is number of blocks even? |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
890 |
membar #StoreLoad|#StoreStore |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
891 |
bnz,pt %icc, .L${bits}_ctr32_loop |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
892 |
srl $len, 0, $len |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
893 |
brnz,pn $len, .L${bits}_ctr32_loop2x |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
894 |
nop |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
895 |
|
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
896 |
ret |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
897 |
restore |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
898 |
.type ${alg}${bits}_t4_ctr32_encrypt,#function |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
899 |
.size ${alg}${bits}_t4_ctr32_encrypt,.-${alg}${bits}_t4_ctr32_encrypt |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
900 |
___ |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
901 |
} |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
902 |
|
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
903 |
# Purpose of these subroutines is to explicitly encode VIS instructions, |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
904 |
# so that one can compile the module without having to specify VIS |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
905 |
# extentions on compiler command line, e.g. -xarch=v9 vs. -xarch=v9a. |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
906 |
# Idea is to reserve for option to produce "universal" binary and let |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
907 |
# programmer detect if current CPU is VIS capable at run-time. |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
908 |
sub unvis { |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
909 |
my ($mnemonic,$rs1,$rs2,$rd)=@_; |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
910 |
my ($ref,$opf); |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
911 |
my %visopf = ( "faligndata" => 0x048, |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
912 |
"fnot2" => 0x066, |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
913 |
"fxor" => 0x06c, |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
914 |
"fsrc2" => 0x078 ); |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
915 |
|
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
916 |
$ref = "$mnemonic\t$rs1,$rs2,$rd"; |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
917 |
|
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
918 |
if ($opf=$visopf{$mnemonic}) { |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
919 |
foreach ($rs1,$rs2,$rd) { |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
920 |
return $ref if (!/%f([0-9]{1,2})/); |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
921 |
$_=$1; |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
922 |
if ($1>=32) { |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
923 |
return $ref if ($1&1); |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
924 |
# re-encode for upper double register addressing |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
925 |
$_=($1|$1>>5)&31; |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
926 |
} |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
927 |
} |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
928 |
|
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
929 |
return sprintf ".word\t0x%08x !%s", |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
930 |
0x81b00000|$rd<<25|$rs1<<14|$opf<<5|$rs2, |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
931 |
$ref; |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
932 |
} else { |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
933 |
return $ref; |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
934 |
} |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
935 |
} |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
936 |
sub unvis3 { |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
937 |
my ($mnemonic,$rs1,$rs2,$rd)=@_; |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
938 |
my %bias = ( "g" => 0, "o" => 8, "l" => 16, "i" => 24 ); |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
939 |
my ($ref,$opf); |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
940 |
my %visopf = ( "addxc" => 0x011, |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
941 |
"addxccc" => 0x013, |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
942 |
"umulxhi" => 0x016 ); |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
943 |
|
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
944 |
$ref = "$mnemonic\t$rs1,$rs2,$rd"; |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
945 |
|
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
946 |
if ($opf=$visopf{$mnemonic}) { |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
947 |
foreach ($rs1,$rs2,$rd) { |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
948 |
return $ref if (!/%([goli])([0-9])/); |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
949 |
$_=$bias{$1}+$2; |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
950 |
} |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
951 |
|
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
952 |
return sprintf ".word\t0x%08x !%s", |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
953 |
0x81b00000|$rd<<25|$rs1<<14|$opf<<5|$rs2, |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
954 |
$ref; |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
955 |
} else { |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
956 |
return $ref; |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
957 |
} |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
958 |
} |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
959 |
sub unalignaddr { |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
960 |
my ($mnemonic,$rs1,$rs2,$rd)=@_; |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
961 |
my %bias = ( "g" => 0, "o" => 8, "l" => 16, "i" => 24 ); |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
962 |
my $ref = "$mnemonic\t$rs1,$rs2,$rd"; |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
963 |
my $opf = $mnemonic =~ /l$/ ? 0x01a :0x18; |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
964 |
|
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
965 |
foreach ($rs1,$rs2,$rd) { |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
966 |
if (/%([goli])([0-7])/) { $_=$bias{$1}+$2; } |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
967 |
else { return $ref; } |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
968 |
} |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
969 |
return sprintf ".word\t0x%08x !%s", |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
970 |
0x81b00000|$rd<<25|$rs1<<14|$opf<<5|$rs2, |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
971 |
$ref; |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
972 |
} |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
973 |
|
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
974 |
sub unaes_round { # 4-argument instructions |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
975 |
my ($mnemonic,$rs1,$rs2,$rs3,$rd)=@_; |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
976 |
my ($ref,$opf); |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
977 |
my %aesopf = ( "aes_eround01" => 0, |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
978 |
"aes_eround23" => 1, |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
979 |
"aes_dround01" => 2, |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
980 |
"aes_dround23" => 3, |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
981 |
"aes_eround01_l"=> 4, |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
982 |
"aes_eround23_l"=> 5, |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
983 |
"aes_dround01_l"=> 6, |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
984 |
"aes_dround23_l"=> 7, |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
985 |
"aes_kexpand1" => 8 ); |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
986 |
|
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
987 |
$ref = "$mnemonic\t$rs1,$rs2,$rs3,$rd"; |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
988 |
|
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
989 |
if (defined($opf=$aesopf{$mnemonic})) { |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
990 |
$rs3 = ($rs3 =~ /%f([0-6]*[02468])/) ? (($1|$1>>5)&31) : $rs3; |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
991 |
foreach ($rs1,$rs2,$rd) { |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
992 |
return $ref if (!/%f([0-9]{1,2})/); |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
993 |
$_=$1; |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
994 |
if ($1>=32) { |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
995 |
return $ref if ($1&1); |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
996 |
# re-encode for upper double register addressing |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
997 |
$_=($1|$1>>5)&31; |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
998 |
} |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
999 |
} |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
1000 |
|
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
1001 |
return sprintf ".word\t0x%08x !%s", |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
1002 |
2<<30|$rd<<25|0x19<<19|$rs1<<14|$rs3<<9|$opf<<5|$rs2, |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
1003 |
$ref; |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
1004 |
} else { |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
1005 |
return $ref; |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
1006 |
} |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
1007 |
} |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
1008 |
|
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
1009 |
sub unaes_kexpand { # 3-argument instructions |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
1010 |
my ($mnemonic,$rs1,$rs2,$rd)=@_; |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
1011 |
my ($ref,$opf); |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
1012 |
my %aesopf = ( "aes_kexpand0" => 0x130, |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
1013 |
"aes_kexpand2" => 0x131 ); |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
1014 |
|
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
1015 |
$ref = "$mnemonic\t$rs1,$rs2,$rd"; |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
1016 |
|
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
1017 |
if (defined($opf=$aesopf{$mnemonic})) { |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
1018 |
foreach ($rs1,$rs2,$rd) { |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
1019 |
return $ref if (!/%f([0-9]{1,2})/); |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
1020 |
$_=$1; |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
1021 |
if ($1>=32) { |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
1022 |
return $ref if ($1&1); |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
1023 |
# re-encode for upper double register addressing |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
1024 |
$_=($1|$1>>5)&31; |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
1025 |
} |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
1026 |
} |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
1027 |
|
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
1028 |
return sprintf ".word\t0x%08x !%s", |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
1029 |
2<<30|$rd<<25|0x36<<19|$rs1<<14|$opf<<5|$rs2, |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
1030 |
$ref; |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
1031 |
} else { |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
1032 |
return $ref; |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
1033 |
} |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
1034 |
} |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
1035 |
|
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
1036 |
sub uncamellia_f { # 4-argument instructions |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
1037 |
my ($mnemonic,$rs1,$rs2,$rs3,$rd)=@_; |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
1038 |
my ($ref,$opf); |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
1039 |
|
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
1040 |
$ref = "$mnemonic\t$rs1,$rs2,$rs3,$rd"; |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
1041 |
|
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
1042 |
if (1) { |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
1043 |
$rs3 = ($rs3 =~ /%f([0-6]*[02468])/) ? (($1|$1>>5)&31) : $rs3; |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
1044 |
foreach ($rs1,$rs2,$rd) { |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
1045 |
return $ref if (!/%f([0-9]{1,2})/); |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
1046 |
$_=$1; |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
1047 |
if ($1>=32) { |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
1048 |
return $ref if ($1&1); |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
1049 |
# re-encode for upper double register addressing |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
1050 |
$_=($1|$1>>5)&31; |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
1051 |
} |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
1052 |
} |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
1053 |
|
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
1054 |
return sprintf ".word\t0x%08x !%s", |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
1055 |
2<<30|$rd<<25|0x19<<19|$rs1<<14|$rs3<<9|0xc<<5|$rs2, |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
1056 |
$ref; |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
1057 |
} else { |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
1058 |
return $ref; |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
1059 |
} |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
1060 |
} |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
1061 |
|
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
1062 |
sub uncamellia3 { # 3-argument instructions |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
1063 |
my ($mnemonic,$rs1,$rs2,$rd)=@_; |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
1064 |
my ($ref,$opf); |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
1065 |
my %cmllopf = ( "camellia_fl" => 0x13c, |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
1066 |
"camellia_fli" => 0x13d ); |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
1067 |
|
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
1068 |
$ref = "$mnemonic\t$rs1,$rs2,$rd"; |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
1069 |
|
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
1070 |
if (defined($opf=$cmllopf{$mnemonic})) { |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
1071 |
foreach ($rs1,$rs2,$rd) { |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
1072 |
return $ref if (!/%f([0-9]{1,2})/); |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
1073 |
$_=$1; |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
1074 |
if ($1>=32) { |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
1075 |
return $ref if ($1&1); |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
1076 |
# re-encode for upper double register addressing |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
1077 |
$_=($1|$1>>5)&31; |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
1078 |
} |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
1079 |
} |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
1080 |
|
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
1081 |
return sprintf ".word\t0x%08x !%s", |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
1082 |
2<<30|$rd<<25|0x36<<19|$rs1<<14|$opf<<5|$rs2, |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
1083 |
$ref; |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
1084 |
} else { |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
1085 |
return $ref; |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
1086 |
} |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
1087 |
} |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
1088 |
|
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
1089 |
sub unmovxtox { # 2-argument instructions |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
1090 |
my ($mnemonic,$rs,$rd)=@_; |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
1091 |
my %bias = ( "g" => 0, "o" => 8, "l" => 16, "i" => 24, "f" => 0 ); |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
1092 |
my ($ref,$opf); |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
1093 |
my %movxopf = ( "movdtox" => 0x110, |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
1094 |
"movstouw" => 0x111, |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
1095 |
"movstosw" => 0x113, |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
1096 |
"movxtod" => 0x118, |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
1097 |
"movwtos" => 0x119 ); |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
1098 |
|
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
1099 |
$ref = "$mnemonic\t$rs,$rd"; |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
1100 |
|
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
1101 |
if (defined($opf=$movxopf{$mnemonic})) { |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
1102 |
foreach ($rs,$rd) { |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
1103 |
return $ref if (!/%([fgoli])([0-9]{1,2})/); |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
1104 |
$_=$bias{$1}+$2; |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
1105 |
if ($2>=32) { |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
1106 |
return $ref if ($2&1); |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
1107 |
# re-encode for upper double register addressing |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
1108 |
$_=($2|$2>>5)&31; |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
1109 |
} |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
1110 |
} |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
1111 |
|
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
1112 |
return sprintf ".word\t0x%08x !%s", |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
1113 |
2<<30|$rd<<25|0x36<<19|$opf<<5|$rs, |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
1114 |
$ref; |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
1115 |
} else { |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
1116 |
return $ref; |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
1117 |
} |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
1118 |
} |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
1119 |
|
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
1120 |
sub emit_assembler { |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
1121 |
foreach (split("\n",$::code)) { |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
1122 |
s/\`([^\`]*)\`/eval $1/ge; |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
1123 |
|
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
1124 |
s/\b(f[a-z]+2[sd]*)\s+(%f[0-9]{1,2}),\s*(%f[0-9]{1,2})\s*$/$1\t%f0,$2,$3/g; |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
1125 |
|
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
1126 |
s/\b(aes_[edk][^\s]*)\s+(%f[0-9]{1,2}),\s*(%f[0-9]{1,2}),\s*([%fx0-9]+),\s*(%f[0-9]{1,2})/ |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
1127 |
&unaes_round($1,$2,$3,$4,$5) |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
1128 |
/ge or |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
1129 |
s/\b(aes_kexpand[02])\s+(%f[0-9]{1,2}),\s*(%f[0-9]{1,2}),\s*(%f[0-9]{1,2})/ |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
1130 |
&unaes_kexpand($1,$2,$3,$4) |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
1131 |
/ge or |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
1132 |
s/\b(camellia_f)\s+(%f[0-9]{1,2}),\s*(%f[0-9]{1,2}),\s*([%fx0-9]+),\s*(%f[0-9]{1,2})/ |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
1133 |
&uncamellia_f($1,$2,$3,$4,$5) |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
1134 |
/ge or |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
1135 |
s/\b(camellia_[^s]+)\s+(%f[0-9]{1,2}),\s*(%f[0-9]{1,2}),\s*(%f[0-9]{1,2})/ |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
1136 |
&uncamellia3($1,$2,$3,$4) |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
1137 |
/ge or |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
1138 |
s/\b(mov[ds]to\w+)\s+(%f[0-9]{1,2}),\s*(%[goli][0-7])/ |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
1139 |
&unmovxtox($1,$2,$3) |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
1140 |
/ge or |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
1141 |
s/\b(mov[xw]to[ds])\s+(%[goli][0-7]),\s*(%f[0-9]{1,2})/ |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
1142 |
&unmovxtox($1,$2,$3) |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
1143 |
/ge or |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
1144 |
s/\b(f[^\s]*)\s+(%f[0-9]{1,2}),\s*(%f[0-9]{1,2}),\s*(%f[0-9]{1,2})/ |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
1145 |
&unvis($1,$2,$3,$4) |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
1146 |
/ge or |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
1147 |
s/\b(alignaddr[l]*)\s+(%[goli][0-7]),\s*(%[goli][0-7]),\s*(%[goli][0-7])/ |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
1148 |
&unalignaddr($1,$2,$3,$4) |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
1149 |
/ge or |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
1150 |
s/\b(umulxhi|addxc[c]{0,2})\s+(%[goli][0-7]),\s*(%[goli][0-7]),\s*(%[goli][0-7])/ |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
1151 |
&unvis3($1,$2,$3,$4) |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
1152 |
/ge; |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
1153 |
|
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
1154 |
print $_,"\n"; |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
1155 |
} |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
1156 |
} |
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
1157 |
|
af3d6ef22d65
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
1158 |
1; |