author | Drew Fisher <drew.fisher@oracle.com> |
Fri, 13 Jun 2014 10:00:52 -0600 | |
changeset 1947 | b80524cd88bc |
parent 1382 | 3515c1afdfc8 |
permissions | -rw-r--r-- |
1382
3515c1afdfc8
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
1 |
#!/usr/bin/env perl |
3515c1afdfc8
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
2 |
# |
3515c1afdfc8
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
3 |
# ==================================================================== |
3515c1afdfc8
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
4 |
# Written by Andy Polyakov <[email protected]> for the OpenSSL |
3515c1afdfc8
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
5 |
# project. The module is, however, dual licensed under OpenSSL and |
3515c1afdfc8
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
6 |
# CRYPTOGAMS licenses depending on where you obtain it. For further |
3515c1afdfc8
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
7 |
# details see http://www.openssl.org/~appro/cryptogams/. |
3515c1afdfc8
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
8 |
# ==================================================================== |
3515c1afdfc8
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
9 |
# |
3515c1afdfc8
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
10 |
# October 2012 |
3515c1afdfc8
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
11 |
# |
3515c1afdfc8
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
12 |
# The module implements bn_GF2m_mul_2x2 polynomial multiplication used |
3515c1afdfc8
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
13 |
# in bn_gf2m.c. It's kind of low-hanging mechanical port from C for |
3515c1afdfc8
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
14 |
# the time being... Except that it has two code paths: one suitable |
3515c1afdfc8
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
15 |
# for all SPARCv9 processors and one for VIS3-capable ones. Former |
3515c1afdfc8
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
16 |
# delivers ~25-45% more, more for longer keys, heaviest DH and DSA |
3515c1afdfc8
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
17 |
# verify operations on venerable UltraSPARC II. On T4 VIS3 code is |
3515c1afdfc8
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
18 |
# ~100-230% faster than gcc-generated code and ~35-90% faster than |
3515c1afdfc8
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
19 |
# the pure SPARCv9 code path. |
3515c1afdfc8
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
20 |
|
3515c1afdfc8
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
21 |
$bits=32; |
3515c1afdfc8
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
22 |
for (@ARGV) { $bits=64 if (/\-m64/ || /\-xarch\=v9/); } |
3515c1afdfc8
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
23 |
if ($bits==64) { $bias=2047; $frame=192; } |
3515c1afdfc8
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
24 |
else { $bias=0; $frame=112; } |
3515c1afdfc8
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
25 |
|
3515c1afdfc8
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
26 |
$locals=16*8; |
3515c1afdfc8
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
27 |
|
3515c1afdfc8
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
28 |
$code.=<<___; |
3515c1afdfc8
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
29 |
#include <sparc_arch.h> |
3515c1afdfc8
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
30 |
|
3515c1afdfc8
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
31 |
.section ".text",#alloc,#execinstr |
3515c1afdfc8
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
32 |
___ |
3515c1afdfc8
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
33 |
$code.=<<___ if ($bits==64); |
3515c1afdfc8
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
34 |
.register %g2,#scratch |
3515c1afdfc8
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
35 |
.register %g3,#scratch |
3515c1afdfc8
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
36 |
___ |
3515c1afdfc8
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
37 |
|
3515c1afdfc8
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
38 |
$tab="%l0"; |
3515c1afdfc8
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
39 |
|
3515c1afdfc8
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
40 |
@T=("%g2","%g3"); |
3515c1afdfc8
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
41 |
@i=("%g4","%g5"); |
3515c1afdfc8
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
42 |
|
3515c1afdfc8
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
43 |
($a1,$a2,$a4,$a8,$a12,$a48)=map("%o$_",(0..5)); |
3515c1afdfc8
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
44 |
($lo,$hi,$b)=("%g1",$a8,"%o7"); $a=$lo; |
3515c1afdfc8
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
45 |
|
3515c1afdfc8
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
46 |
$code.=<<___; |
3515c1afdfc8
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
47 |
#ifdef __PIC__ |
3515c1afdfc8
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
48 |
SPARC_PIC_THUNK(%g1) |
3515c1afdfc8
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
49 |
#endif |
3515c1afdfc8
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
50 |
|
3515c1afdfc8
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
51 |
.globl bn_GF2m_mul_2x2 |
3515c1afdfc8
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
52 |
.align 16 |
3515c1afdfc8
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
53 |
bn_GF2m_mul_2x2: |
3515c1afdfc8
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
54 |
SPARC_LOAD_ADDRESS_LEAF(OPENSSL_sparcv9cap_P,%g1,%g5) |
3515c1afdfc8
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
55 |
ld [%g1+0],%g1 ! OPENSSL_sparcv9cap_P[0] |
3515c1afdfc8
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
56 |
|
3515c1afdfc8
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
57 |
andcc %g1, SPARCV9_VIS3, %g0 |
3515c1afdfc8
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
58 |
bz,pn %icc,.Lsoftware |
3515c1afdfc8
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
59 |
nop |
3515c1afdfc8
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
60 |
|
3515c1afdfc8
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
61 |
sllx %o1, 32, %o1 |
3515c1afdfc8
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
62 |
sllx %o3, 32, %o3 |
3515c1afdfc8
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
63 |
or %o2, %o1, %o1 |
3515c1afdfc8
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
64 |
or %o4, %o3, %o3 |
3515c1afdfc8
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
65 |
.word 0x95b262ab ! xmulx %o1, %o3, %o2 |
3515c1afdfc8
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
66 |
.word 0x99b262cb ! xmulxhi %o1, %o3, %o4 |
3515c1afdfc8
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
67 |
srlx %o2, 32, %o1 ! 13 cycles later |
3515c1afdfc8
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
68 |
st %o2, [%o0+0] |
3515c1afdfc8
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
69 |
st %o1, [%o0+4] |
3515c1afdfc8
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
70 |
srlx %o4, 32, %o3 |
3515c1afdfc8
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
71 |
st %o4, [%o0+8] |
3515c1afdfc8
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
72 |
retl |
3515c1afdfc8
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
73 |
st %o3, [%o0+12] |
3515c1afdfc8
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
74 |
|
3515c1afdfc8
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
75 |
.align 16 |
3515c1afdfc8
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
76 |
.Lsoftware: |
3515c1afdfc8
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
77 |
save %sp,-$frame-$locals,%sp |
3515c1afdfc8
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
78 |
|
3515c1afdfc8
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
79 |
sllx %i1,32,$a |
3515c1afdfc8
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
80 |
mov -1,$a12 |
3515c1afdfc8
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
81 |
sllx %i3,32,$b |
3515c1afdfc8
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
82 |
or %i2,$a,$a |
3515c1afdfc8
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
83 |
srlx $a12,1,$a48 ! 0x7fff... |
3515c1afdfc8
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
84 |
or %i4,$b,$b |
3515c1afdfc8
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
85 |
srlx $a12,2,$a12 ! 0x3fff... |
3515c1afdfc8
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
86 |
add %sp,$bias+$frame,$tab |
3515c1afdfc8
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
87 |
|
3515c1afdfc8
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
88 |
sllx $a,2,$a4 |
3515c1afdfc8
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
89 |
mov $a,$a1 |
3515c1afdfc8
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
90 |
sllx $a,1,$a2 |
3515c1afdfc8
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
91 |
|
3515c1afdfc8
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
92 |
srax $a4,63,@i[1] ! broadcast 61st bit |
3515c1afdfc8
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
93 |
and $a48,$a4,$a4 ! (a<<2)&0x7fff... |
3515c1afdfc8
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
94 |
srlx $a48,2,$a48 |
3515c1afdfc8
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
95 |
srax $a2,63,@i[0] ! broadcast 62nd bit |
3515c1afdfc8
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
96 |
and $a12,$a2,$a2 ! (a<<1)&0x3fff... |
3515c1afdfc8
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
97 |
srax $a1,63,$lo ! broadcast 63rd bit |
3515c1afdfc8
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
98 |
and $a48,$a1,$a1 ! (a<<0)&0x1fff... |
3515c1afdfc8
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
99 |
|
3515c1afdfc8
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
100 |
sllx $a1,3,$a8 |
3515c1afdfc8
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
101 |
and $b,$lo,$lo |
3515c1afdfc8
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
102 |
and $b,@i[0],@i[0] |
3515c1afdfc8
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
103 |
and $b,@i[1],@i[1] |
3515c1afdfc8
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
104 |
|
3515c1afdfc8
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
105 |
stx %g0,[$tab+0*8] ! tab[0]=0 |
3515c1afdfc8
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
106 |
xor $a1,$a2,$a12 |
3515c1afdfc8
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
107 |
stx $a1,[$tab+1*8] ! tab[1]=a1 |
3515c1afdfc8
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
108 |
stx $a2,[$tab+2*8] ! tab[2]=a2 |
3515c1afdfc8
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
109 |
xor $a4,$a8,$a48 |
3515c1afdfc8
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
110 |
stx $a12,[$tab+3*8] ! tab[3]=a1^a2 |
3515c1afdfc8
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
111 |
xor $a4,$a1,$a1 |
3515c1afdfc8
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
112 |
|
3515c1afdfc8
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
113 |
stx $a4,[$tab+4*8] ! tab[4]=a4 |
3515c1afdfc8
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
114 |
xor $a4,$a2,$a2 |
3515c1afdfc8
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
115 |
stx $a1,[$tab+5*8] ! tab[5]=a1^a4 |
3515c1afdfc8
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
116 |
xor $a4,$a12,$a12 |
3515c1afdfc8
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
117 |
stx $a2,[$tab+6*8] ! tab[6]=a2^a4 |
3515c1afdfc8
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
118 |
xor $a48,$a1,$a1 |
3515c1afdfc8
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
119 |
stx $a12,[$tab+7*8] ! tab[7]=a1^a2^a4 |
3515c1afdfc8
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
120 |
xor $a48,$a2,$a2 |
3515c1afdfc8
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
121 |
|
3515c1afdfc8
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
122 |
stx $a8,[$tab+8*8] ! tab[8]=a8 |
3515c1afdfc8
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
123 |
xor $a48,$a12,$a12 |
3515c1afdfc8
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
124 |
stx $a1,[$tab+9*8] ! tab[9]=a1^a8 |
3515c1afdfc8
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
125 |
xor $a4,$a1,$a1 |
3515c1afdfc8
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
126 |
stx $a2,[$tab+10*8] ! tab[10]=a2^a8 |
3515c1afdfc8
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
127 |
xor $a4,$a2,$a2 |
3515c1afdfc8
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
128 |
stx $a12,[$tab+11*8] ! tab[11]=a1^a2^a8 |
3515c1afdfc8
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
129 |
|
3515c1afdfc8
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
130 |
xor $a4,$a12,$a12 |
3515c1afdfc8
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
131 |
stx $a48,[$tab+12*8] ! tab[12]=a4^a8 |
3515c1afdfc8
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
132 |
srlx $lo,1,$hi |
3515c1afdfc8
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
133 |
stx $a1,[$tab+13*8] ! tab[13]=a1^a4^a8 |
3515c1afdfc8
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
134 |
sllx $lo,63,$lo |
3515c1afdfc8
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
135 |
stx $a2,[$tab+14*8] ! tab[14]=a2^a4^a8 |
3515c1afdfc8
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
136 |
srlx @i[0],2,@T[0] |
3515c1afdfc8
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
137 |
stx $a12,[$tab+15*8] ! tab[15]=a1^a2^a4^a8 |
3515c1afdfc8
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
138 |
|
3515c1afdfc8
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
139 |
sllx @i[0],62,$a1 |
3515c1afdfc8
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
140 |
sllx $b,3,@i[0] |
3515c1afdfc8
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
141 |
srlx @i[1],3,@T[1] |
3515c1afdfc8
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
142 |
and @i[0],`0xf<<3`,@i[0] |
3515c1afdfc8
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
143 |
sllx @i[1],61,$a2 |
3515c1afdfc8
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
144 |
ldx [$tab+@i[0]],@i[0] |
3515c1afdfc8
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
145 |
srlx $b,4-3,@i[1] |
3515c1afdfc8
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
146 |
xor @T[0],$hi,$hi |
3515c1afdfc8
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
147 |
and @i[1],`0xf<<3`,@i[1] |
3515c1afdfc8
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
148 |
xor $a1,$lo,$lo |
3515c1afdfc8
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
149 |
ldx [$tab+@i[1]],@i[1] |
3515c1afdfc8
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
150 |
xor @T[1],$hi,$hi |
3515c1afdfc8
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
151 |
|
3515c1afdfc8
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
152 |
xor @i[0],$lo,$lo |
3515c1afdfc8
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
153 |
srlx $b,8-3,@i[0] |
3515c1afdfc8
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
154 |
xor $a2,$lo,$lo |
3515c1afdfc8
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
155 |
and @i[0],`0xf<<3`,@i[0] |
3515c1afdfc8
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
156 |
___ |
3515c1afdfc8
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
157 |
for($n=1;$n<14;$n++) { |
3515c1afdfc8
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
158 |
$code.=<<___; |
3515c1afdfc8
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
159 |
sllx @i[1],`$n*4`,@T[0] |
3515c1afdfc8
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
160 |
ldx [$tab+@i[0]],@i[0] |
3515c1afdfc8
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
161 |
srlx @i[1],`64-$n*4`,@T[1] |
3515c1afdfc8
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
162 |
xor @T[0],$lo,$lo |
3515c1afdfc8
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
163 |
srlx $b,`($n+2)*4`-3,@i[1] |
3515c1afdfc8
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
164 |
xor @T[1],$hi,$hi |
3515c1afdfc8
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
165 |
and @i[1],`0xf<<3`,@i[1] |
3515c1afdfc8
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
166 |
___ |
3515c1afdfc8
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
167 |
push(@i,shift(@i)); push(@T,shift(@T)); |
3515c1afdfc8
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
168 |
} |
3515c1afdfc8
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
169 |
$code.=<<___; |
3515c1afdfc8
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
170 |
sllx @i[1],`$n*4`,@T[0] |
3515c1afdfc8
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
171 |
ldx [$tab+@i[0]],@i[0] |
3515c1afdfc8
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
172 |
srlx @i[1],`64-$n*4`,@T[1] |
3515c1afdfc8
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
173 |
xor @T[0],$lo,$lo |
3515c1afdfc8
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
174 |
|
3515c1afdfc8
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
175 |
sllx @i[0],`($n+1)*4`,@T[0] |
3515c1afdfc8
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
176 |
xor @T[1],$hi,$hi |
3515c1afdfc8
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
177 |
srlx @i[0],`64-($n+1)*4`,@T[1] |
3515c1afdfc8
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
178 |
xor @T[0],$lo,$lo |
3515c1afdfc8
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
179 |
xor @T[1],$hi,$hi |
3515c1afdfc8
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
180 |
|
3515c1afdfc8
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
181 |
srlx $lo,32,%i1 |
3515c1afdfc8
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
182 |
st $lo,[%i0+0] |
3515c1afdfc8
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
183 |
st %i1,[%i0+4] |
3515c1afdfc8
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
184 |
srlx $hi,32,%i2 |
3515c1afdfc8
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
185 |
st $hi,[%i0+8] |
3515c1afdfc8
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
186 |
st %i2,[%i0+12] |
3515c1afdfc8
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
187 |
|
3515c1afdfc8
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
188 |
ret |
3515c1afdfc8
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
189 |
restore |
3515c1afdfc8
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
190 |
.type bn_GF2m_mul_2x2,#function |
3515c1afdfc8
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
191 |
.size bn_GF2m_mul_2x2,.-bn_GF2m_mul_2x2 |
3515c1afdfc8
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
192 |
.asciz "GF(2^m) Multiplication for SPARCv9, CRYPTOGAMS by <appro\@openssl.org>" |
3515c1afdfc8
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
193 |
.align 4 |
3515c1afdfc8
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
194 |
___ |
3515c1afdfc8
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
195 |
|
3515c1afdfc8
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
196 |
$code =~ s/\`([^\`]*)\`/eval($1)/gem; |
3515c1afdfc8
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
197 |
print $code; |
3515c1afdfc8
PSARC 2013/034 OpenSSL 1.0.1
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
198 |
close STDOUT; |