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