components/openssl/openssl-1.0.1/inline-t4/sparct4-mont.pl
author Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
Tue, 06 Aug 2013 08:08:18 -0700
branchs11-update
changeset 2717 da0ef75be98f
permissions -rw-r--r--
15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src 16921388 T4 DES should be embedded in the OpenSSL upstream src 17193314 ssh dumps core when using aes128-cbc cipher on T4
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
2717
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
     1
#!/usr/bin/env perl
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
     2
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
     3
# ====================================================================
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
     4
# Written by David S. Miller <[email protected]> and Andy Polyakov
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
     5
# <[email protected]>. The module is licensed under 2-clause BSD
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
     6
# license. November 2012. All rights reserved.
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
     7
# ====================================================================
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
     8
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
     9
######################################################################
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
    10
# Montgomery squaring-n-multiplication module for SPARC T4.
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
    11
#
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
    12
# The module consists of three parts:
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
    13
#
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
    14
# 1) collection of "single-op" subroutines that perform single
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
    15
#    operation, Montgomery squaring or multiplication, on 512-,
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
    16
#    1024-, 1536- and 2048-bit operands;
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
    17
# 2) collection of "multi-op" subroutines that perform 5 squaring and
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
    18
#    1 multiplication operations on operands of above lengths;
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
    19
# 3) fall-back and helper VIS3 subroutines.
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
    20
#
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
    21
# RSA sign is dominated by multi-op subroutine, while RSA verify and
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
    22
# DSA - by single-op. Special note about 4096-bit RSA verify result.
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
    23
# Operands are too long for dedicated hardware and it's handled by
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
    24
# VIS3 code, which is why you don't see any improvement. It's surely
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
    25
# possible to improve it [by deploying 'mpmul' instruction], maybe in
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
    26
# the future...
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
    27
#
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
    28
# Performance improvement.
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
    29
#
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
    30
# 64-bit process, VIS3:
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
    31
#                   sign    verify    sign/s verify/s
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
    32
# rsa 1024 bits 0.000628s 0.000028s   1592.4  35434.4
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
    33
# rsa 2048 bits 0.003282s 0.000106s    304.7   9438.3
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
    34
# rsa 4096 bits 0.025866s 0.000340s     38.7   2940.9
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
    35
# dsa 1024 bits 0.000301s 0.000332s   3323.7   3013.9
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
    36
# dsa 2048 bits 0.001056s 0.001233s    946.9    810.8
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
    37
#
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
    38
# 64-bit process, this module:
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
    39
#                   sign    verify    sign/s verify/s
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
    40
# rsa 1024 bits 0.000256s 0.000016s   3904.4  61411.9
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
    41
# rsa 2048 bits 0.000946s 0.000029s   1056.8  34292.7
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
    42
# rsa 4096 bits 0.005061s 0.000340s    197.6   2940.5
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
    43
# dsa 1024 bits 0.000176s 0.000195s   5674.7   5130.5
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
    44
# dsa 2048 bits 0.000296s 0.000354s   3383.2   2827.6
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
    45
#
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
    46
######################################################################
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
    47
# 32-bit process, VIS3:
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
    48
#                   sign    verify    sign/s verify/s
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
    49
# rsa 1024 bits 0.000665s 0.000028s   1504.8  35233.3
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
    50
# rsa 2048 bits 0.003349s 0.000106s    298.6   9433.4
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
    51
# rsa 4096 bits 0.025959s 0.000341s     38.5   2934.8
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
    52
# dsa 1024 bits 0.000320s 0.000341s   3123.3   2929.6
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
    53
# dsa 2048 bits 0.001101s 0.001260s    908.2    793.4
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
    54
#
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
    55
# 32-bit process, this module:
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
    56
#                   sign    verify    sign/s verify/s
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
    57
# rsa 1024 bits 0.000301s 0.000017s   3317.1  60240.0
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
    58
# rsa 2048 bits 0.001034s 0.000030s    966.9  33812.7
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
    59
# rsa 4096 bits 0.005244s 0.000341s    190.7   2935.4
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
    60
# dsa 1024 bits 0.000201s 0.000205s   4976.1   4879.2
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
    61
# dsa 2048 bits 0.000328s 0.000360s   3051.1   2774.2
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
    62
#
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
    63
# 32-bit code is prone to performance degradation as interrupt rate
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
    64
# dispatched to CPU executing the code grows. This is because in
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
    65
# standard process of handling interrupt in 32-bit process context
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
    66
# upper halves of most integer registers used as input or output are
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
    67
# zeroed. This renders result invalid, and operation has to be re-run.
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
    68
# If CPU is "bothered" with timer interrupts only, the penalty is
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
    69
# hardly measurable. But in order to mitigate this problem for higher
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
    70
# interrupt rates contemporary Linux kernel recognizes biased stack
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
    71
# even in 32-bit process context and preserves full register contents.
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
    72
# See http://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/?id=517ffce4e1a03aea979fe3a18a3dd1761a24fafb
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
    73
# for details.
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
    74
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
    75
$0 =~ m/(.*[\/\\])[^\/\\]+$/; $dir=$1;
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
    76
push(@INC,"${dir}","${dir}../../perlasm");
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
    77
require "sparcv9_modes.pl";
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
    78
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
    79
$code.=<<___;
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
    80
#include "sparc_arch.h"
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
    81
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
    82
#ifdef	__arch64__
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
    83
.register	%g2,#scratch
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
    84
.register	%g3,#scratch
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
    85
#endif
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
    86
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
    87
.section	".text",#alloc,#execinstr
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
    88
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
    89
#ifdef	__PIC__
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
    90
SPARC_PIC_THUNK(%g1)
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
    91
#endif
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
    92
___
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
    93
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
    94
########################################################################
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
    95
# Register layout for mont[mul|sqr] instructions.
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
    96
# For details see "Oracle SPARC Architecture 2011" manual at
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
    97
# http://www.oracle.com/technetwork/server-storage/sun-sparc-enterprise/documentation/.
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
    98
#
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
    99
my @R=map("%f".2*$_,(0..11,30,31,12..29));
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   100
my @N=(map("%l$_",(0..7)),map("%o$_",(0..5))); @N=(@N,@N,@N[0..3]);
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   101
my @A=(@N[0..13],@R[14..31]);
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   102
my @B=(map("%i$_",(0..5)),map("%l$_",(0..7))); @B=(@B,@B,map("%o$_",(0..3)));
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   103

da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   104
########################################################################
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   105
# int bn_mul_mont_t4_$NUM(u64 *rp,const u64 *ap,const u64 *bp,
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   106
#			  const u64 *np,const BN_ULONG *n0);
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   107
#
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   108
sub generate_bn_mul_mont_t4() {
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   109
my $NUM=shift;
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   110
my ($rp,$ap,$bp,$np,$sentinel)=map("%g$_",(1..5));
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   111
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   112
$code.=<<___;
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   113
.globl	bn_mul_mont_t4_$NUM
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   114
.align	32
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   115
bn_mul_mont_t4_$NUM:
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   116
#ifdef	__arch64__
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   117
	mov	0,$sentinel
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   118
	mov	-128,%g4
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   119
#elif defined(SPARCV9_64BIT_STACK)
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   120
	SPARC_LOAD_ADDRESS_LEAF(OPENSSL_sparcv9cap_P,%g1,%g5)
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   121
	ld	[%g1+0],%g1	! OPENSSL_sparcv9_P[0]
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   122
	mov	-2047,%g4
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   123
	and	%g1,SPARCV9_64BIT_STACK,%g1
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   124
	movrz	%g1,0,%g4
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   125
	mov	-1,$sentinel
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   126
	add	%g4,-128,%g4
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   127
#else
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   128
	mov	-1,$sentinel
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   129
	mov	-128,%g4
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   130
#endif
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   131
	sllx	$sentinel,32,$sentinel
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   132
	save	%sp,%g4,%sp
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   133
#ifndef	__arch64__
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   134
	save	%sp,-128,%sp	! warm it up
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   135
	save	%sp,-128,%sp
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   136
	save	%sp,-128,%sp
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   137
	save	%sp,-128,%sp
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   138
	save	%sp,-128,%sp
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   139
	save	%sp,-128,%sp
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   140
	restore
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   141
	restore
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   142
	restore
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   143
	restore
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   144
	restore
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   145
	restore
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   146
#endif
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   147
	and	%sp,1,%g4
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   148
	or	$sentinel,%fp,%fp
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   149
	or	%g4,$sentinel,$sentinel
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   150
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   151
	! copy arguments to global registers
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   152
	mov	%i0,$rp
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   153
	mov	%i1,$ap
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   154
	mov	%i2,$bp
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   155
	mov	%i3,$np
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   156
	ld	[%i4+0],%f1	! load *n0
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   157
	ld	[%i4+4],%f0
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   158
	fsrc2	%f0,%f60
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   159
___
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   160

da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   161
# load ap[$NUM] ########################################################
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   162
$code.=<<___;
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   163
	save	%sp,-128,%sp;		or	$sentinel,%fp,%fp
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   164
___
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   165
for($i=0; $i<14 && $i<$NUM; $i++) {
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   166
my $lo=$i<13?@A[$i+1]:"%o7";
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   167
$code.=<<___;
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   168
	ld	[$ap+$i*8+0],$lo
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   169
	ld	[$ap+$i*8+4],@A[$i]
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   170
	sllx	@A[$i],32,@A[$i]
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   171
	or	$lo,@A[$i],@A[$i]
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   172
___
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   173
}
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   174
for(; $i<$NUM; $i++) {
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   175
my ($hi,$lo)=("%f".2*($i%4),"%f".(2*($i%4)+1));
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   176
$code.=<<___;
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   177
	ld	[$ap+$i*8+0],$lo
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   178
	ld	[$ap+$i*8+4],$hi
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   179
	fsrc2	$hi,@A[$i]
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   180
___
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   181
}
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   182
# load np[$NUM] ########################################################
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   183
$code.=<<___;
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   184
	save	%sp,-128,%sp;		or	$sentinel,%fp,%fp
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   185
___
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   186
for($i=0; $i<14 && $i<$NUM; $i++) {
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   187
my $lo=$i<13?@N[$i+1]:"%o7";
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   188
$code.=<<___;
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   189
	ld	[$np+$i*8+0],$lo
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   190
	ld	[$np+$i*8+4],@N[$i]
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   191
	sllx	@N[$i],32,@N[$i]
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   192
	or	$lo,@N[$i],@N[$i]
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   193
___
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   194
}
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   195
$code.=<<___;
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   196
	save	%sp,-128,%sp;		or	$sentinel,%fp,%fp
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   197
___
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   198
for(; $i<28 && $i<$NUM; $i++) {
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   199
my $lo=$i<27?@N[$i+1]:"%o7";
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   200
$code.=<<___;
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   201
	ld	[$np+$i*8+0],$lo
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   202
	ld	[$np+$i*8+4],@N[$i]
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   203
	sllx	@N[$i],32,@N[$i]
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   204
	or	$lo,@N[$i],@N[$i]
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   205
___
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   206
}
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   207
$code.=<<___;
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   208
	save	%sp,-128,%sp;		or	$sentinel,%fp,%fp
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   209
___
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   210
for(; $i<$NUM; $i++) {
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   211
my $lo=($i<$NUM-1)?@N[$i+1]:"%o7";
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   212
$code.=<<___;
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   213
	ld	[$np+$i*8+0],$lo
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   214
	ld	[$np+$i*8+4],@N[$i]
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   215
	sllx	@N[$i],32,@N[$i]
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   216
	or	$lo,@N[$i],@N[$i]
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   217
___
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   218
}
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   219
$code.=<<___;
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   220
	cmp	$ap,$bp
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   221
	be	SIZE_T_CC,.Lmsquare_$NUM
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   222
	nop
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   223
___
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   224

da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   225
# load bp[$NUM] ########################################################
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   226
$code.=<<___;
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   227
	save	%sp,-128,%sp;		or	$sentinel,%fp,%fp
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   228
___
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   229
for($i=0; $i<14 && $i<$NUM; $i++) {
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   230
my $lo=$i<13?@B[$i+1]:"%o7";
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   231
$code.=<<___;
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   232
	ld	[$bp+$i*8+0],$lo
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   233
	ld	[$bp+$i*8+4],@B[$i]
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   234
	sllx	@B[$i],32,@B[$i]
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   235
	or	$lo,@B[$i],@B[$i]
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   236
___
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   237
}
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   238
$code.=<<___;
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   239
	save	%sp,-128,%sp;		or	$sentinel,%fp,%fp
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   240
___
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   241
for(; $i<$NUM; $i++) {
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   242
my $lo=($i<$NUM-1)?@B[$i+1]:"%o7";
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   243
$code.=<<___;
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   244
	ld	[$bp+$i*8+0],$lo
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   245
	ld	[$bp+$i*8+4],@B[$i]
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   246
	sllx	@B[$i],32,@B[$i]
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   247
	or	$lo,@B[$i],@B[$i]
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   248
___
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   249
}
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   250
# magic ################################################################
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   251
$code.=<<___;
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   252
	.word	0x81b02920+$NUM-1	! montmul	$NUM-1
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   253
.Lmresume_$NUM:
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   254
	fbu,pn	%fcc3,.Lmabort_$NUM
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   255
#ifndef	__arch64__
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   256
	and	%fp,$sentinel,$sentinel
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   257
	brz,pn	$sentinel,.Lmabort_$NUM
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   258
#endif
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   259
	nop
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   260
#ifdef	__arch64__
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   261
	restore
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   262
	restore
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   263
	restore
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   264
	restore
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   265
	restore
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   266
#else
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   267
	restore;		and	%fp,$sentinel,$sentinel
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   268
	restore;		and	%fp,$sentinel,$sentinel
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   269
	restore;		and	%fp,$sentinel,$sentinel
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   270
	restore;		and	%fp,$sentinel,$sentinel
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   271
	 brz,pn	$sentinel,.Lmabort1_$NUM
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   272
	restore
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   273
#endif
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   274
___
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   275

da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   276
# save tp[$NUM] ########################################################
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   277
for($i=0; $i<14 && $i<$NUM; $i++) {
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   278
$code.=<<___;
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   279
	movxtod	@A[$i],@R[$i]
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   280
___
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   281
}
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   282
$code.=<<___;
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   283
#ifdef	__arch64__
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   284
	restore
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   285
#else
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   286
	 and	%fp,$sentinel,$sentinel
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   287
	restore
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   288
	 and	$sentinel,1,%o7
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   289
	 and	%fp,$sentinel,$sentinel
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   290
	 srl	%fp,0,%fp		! just in case?
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   291
	 or	%o7,$sentinel,$sentinel
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   292
	brz,a,pn $sentinel,.Lmdone_$NUM
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   293
	mov	0,%i0		! return failure
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   294
#endif
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   295
___
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   296
for($i=0; $i<12 && $i<$NUM; $i++) {
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   297
@R[$i] =~ /%f([0-9]+)/;
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   298
my $lo = "%f".($1+1);
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   299
$code.=<<___;
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   300
	st	$lo,[$rp+$i*8+0]
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   301
	st	@R[$i],[$rp+$i*8+4]
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   302
___
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   303
}
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   304
for(; $i<$NUM; $i++) {
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   305
my ($hi,$lo)=("%f".2*($i%4),"%f".(2*($i%4)+1));
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   306
$code.=<<___;
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   307
	fsrc2	@R[$i],$hi
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   308
	st	$lo,[$rp+$i*8+0]
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   309
	st	$hi,[$rp+$i*8+4]
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   310
___
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   311
}
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   312
$code.=<<___;
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   313
	mov	1,%i0		! return success
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   314
.Lmdone_$NUM:
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   315
	ret
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   316
	restore
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   317
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   318
.Lmabort_$NUM:
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   319
	restore
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   320
	restore
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   321
	restore
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   322
	restore
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   323
	restore
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   324
.Lmabort1_$NUM:
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   325
	restore
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   326
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   327
	mov	0,%i0		! return failure
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   328
	ret
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   329
	restore
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   330
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   331
.align	32
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   332
.Lmsquare_$NUM:
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   333
	save	%sp,-128,%sp;		or	$sentinel,%fp,%fp
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   334
	save	%sp,-128,%sp;		or	$sentinel,%fp,%fp
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   335
	.word   0x81b02940+$NUM-1	! montsqr	$NUM-1
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   336
	ba	.Lmresume_$NUM
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   337
	nop
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   338
.type	bn_mul_mont_t4_$NUM, #function
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   339
.size	bn_mul_mont_t4_$NUM, .-bn_mul_mont_t4_$NUM
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   340
___
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   341
}
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   342
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   343
for ($i=8;$i<=32;$i+=8) {
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   344
	&generate_bn_mul_mont_t4($i);
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   345
}
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   346

da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   347
########################################################################
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   348
#
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   349
sub load_ccr {
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   350
my ($ptbl,$pwr,$ccr,$skip_wr)=@_;
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   351
$code.=<<___;
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   352
	srl	$pwr,	2,	%o4
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   353
	and	$pwr,	3,	%o5
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   354
	and	%o4,	7,	%o4
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   355
	sll	%o5,	3,	%o5	! offset within first cache line
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   356
	add	%o5,	$ptbl,	$ptbl	! of the pwrtbl
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   357
	or	%g0,	1,	%o5
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   358
	sll	%o5,	%o4,	$ccr
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   359
___
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   360
$code.=<<___	if (!$skip_wr);
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   361
	wr	$ccr,	%g0,	%ccr
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   362
___
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   363
}
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   364
sub load_b_pair {
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   365
my ($pwrtbl,$B0,$B1)=@_;
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   366
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   367
$code.=<<___;
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   368
	ldx	[$pwrtbl+0*32],	$B0
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   369
	ldx	[$pwrtbl+8*32],	$B1
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   370
	ldx	[$pwrtbl+1*32],	%o4
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   371
	ldx	[$pwrtbl+9*32],	%o5
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   372
	movvs	%icc,	%o4,	$B0
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   373
	ldx	[$pwrtbl+2*32],	%o4
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   374
	movvs	%icc,	%o5,	$B1
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   375
	ldx	[$pwrtbl+10*32],%o5
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   376
	move	%icc,	%o4,	$B0
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   377
	ldx	[$pwrtbl+3*32],	%o4
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   378
	move	%icc,	%o5,	$B1
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   379
	ldx	[$pwrtbl+11*32],%o5
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   380
	movneg	%icc,	%o4,	$B0
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   381
	ldx	[$pwrtbl+4*32],	%o4
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   382
	movneg	%icc,	%o5,	$B1
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   383
	ldx	[$pwrtbl+12*32],%o5
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   384
	movcs	%xcc,	%o4,	$B0
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   385
	ldx	[$pwrtbl+5*32],%o4
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   386
	movcs	%xcc,	%o5,	$B1
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   387
	ldx	[$pwrtbl+13*32],%o5
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   388
	movvs	%xcc,	%o4,	$B0
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   389
	ldx	[$pwrtbl+6*32],	%o4
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   390
	movvs	%xcc,	%o5,	$B1
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   391
	ldx	[$pwrtbl+14*32],%o5
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   392
	move	%xcc,	%o4,	$B0
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   393
	ldx	[$pwrtbl+7*32],	%o4
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   394
	move	%xcc,	%o5,	$B1
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   395
	ldx	[$pwrtbl+15*32],%o5
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   396
	movneg	%xcc,	%o4,	$B0
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   397
	add	$pwrtbl,16*32,	$pwrtbl
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   398
	movneg	%xcc,	%o5,	$B1
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   399
___
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   400
}
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   401
sub load_b {
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   402
my ($pwrtbl,$Bi)=@_;
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   403
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   404
$code.=<<___;
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   405
	ldx	[$pwrtbl+0*32],	$Bi
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   406
	ldx	[$pwrtbl+1*32],	%o4
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   407
	ldx	[$pwrtbl+2*32],	%o5
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   408
	movvs	%icc,	%o4,	$Bi
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   409
	ldx	[$pwrtbl+3*32],	%o4
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   410
	move	%icc,	%o5,	$Bi
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   411
	ldx	[$pwrtbl+4*32],	%o5
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   412
	movneg	%icc,	%o4,	$Bi
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   413
	ldx	[$pwrtbl+5*32],	%o4
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   414
	movcs	%xcc,	%o5,	$Bi
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   415
	ldx	[$pwrtbl+6*32],	%o5
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   416
	movvs	%xcc,	%o4,	$Bi
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   417
	ldx	[$pwrtbl+7*32],	%o4
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   418
	move	%xcc,	%o5,	$Bi
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   419
	add	$pwrtbl,8*32,	$pwrtbl
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   420
	movneg	%xcc,	%o4,	$Bi
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   421
___
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   422
}
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   423

da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   424
########################################################################
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   425
# int bn_pwr5_mont_t4_$NUM(u64 *tp,const u64 *np,const BN_ULONG *n0,
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   426
#			   const u64 *pwrtbl,int pwr,int stride);
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   427
#
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   428
sub generate_bn_pwr5_mont_t4() {
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   429
my $NUM=shift;
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   430
my ($tp,$np,$pwrtbl,$pwr,$sentinel)=map("%g$_",(1..5));
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   431
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   432
$code.=<<___;
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   433
.globl	bn_pwr5_mont_t4_$NUM
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   434
.align	32
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   435
bn_pwr5_mont_t4_$NUM:
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   436
#ifdef	__arch64__
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   437
	mov	0,$sentinel
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   438
	mov	-128,%g4
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   439
#elif defined(SPARCV9_64BIT_STACK)
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   440
	SPARC_LOAD_ADDRESS_LEAF(OPENSSL_sparcv9cap_P,%g1,%g5)
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   441
	ld	[%g1+0],%g1	! OPENSSL_sparcv9_P[0]
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   442
	mov	-2047,%g4
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   443
	and	%g1,SPARCV9_64BIT_STACK,%g1
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   444
	movrz	%g1,0,%g4
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   445
	mov	-1,$sentinel
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   446
	add	%g4,-128,%g4
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   447
#else
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   448
	mov	-1,$sentinel
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   449
	mov	-128,%g4
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   450
#endif
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   451
	sllx	$sentinel,32,$sentinel
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   452
	save	%sp,%g4,%sp
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   453
#ifndef	__arch64__
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   454
	save	%sp,-128,%sp	! warm it up
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   455
	save	%sp,-128,%sp
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   456
	save	%sp,-128,%sp
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   457
	save	%sp,-128,%sp
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   458
	save	%sp,-128,%sp
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   459
	save	%sp,-128,%sp
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   460
	restore
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   461
	restore
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   462
	restore
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   463
	restore
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   464
	restore
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   465
	restore
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   466
#endif
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   467
	and	%sp,1,%g4
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   468
	or	$sentinel,%fp,%fp
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   469
	or	%g4,$sentinel,$sentinel
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   470
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   471
	! copy arguments to global registers
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   472
	mov	%i0,$tp
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   473
	mov	%i1,$np
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   474
	ld	[%i2+0],%f1	! load *n0
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   475
	ld	[%i2+4],%f0
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   476
	mov	%i3,$pwrtbl
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   477
	srl	%i4,%g0,%i4	! pack last arguments
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   478
	sllx	%i5,32,$pwr
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   479
	or	%i4,$pwr,$pwr
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   480
	fsrc2	%f0,%f60
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   481
___
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   482

da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   483
# load tp[$NUM] ########################################################
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   484
$code.=<<___;
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   485
	save	%sp,-128,%sp;		or	$sentinel,%fp,%fp
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   486
___
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   487
for($i=0; $i<14 && $i<$NUM; $i++) {
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   488
$code.=<<___;
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   489
	ldx	[$tp+$i*8],@A[$i]
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   490
___
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   491
}
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   492
for(; $i<$NUM; $i++) {
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   493
$code.=<<___;
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   494
	ldd	[$tp+$i*8],@A[$i]
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   495
___
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   496
}
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   497
# load np[$NUM] ########################################################
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   498
$code.=<<___;
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   499
	save	%sp,-128,%sp;		or	$sentinel,%fp,%fp
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   500
___
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   501
for($i=0; $i<14 && $i<$NUM; $i++) {
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   502
$code.=<<___;
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   503
	ldx	[$np+$i*8],@N[$i]
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   504
___
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   505
}
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   506
$code.=<<___;
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   507
	save	%sp,-128,%sp;		or	$sentinel,%fp,%fp
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   508
___
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   509
for(; $i<28 && $i<$NUM; $i++) {
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   510
$code.=<<___;
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   511
	ldx	[$np+$i*8],@N[$i]
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   512
___
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   513
}
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   514
$code.=<<___;
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   515
	save	%sp,-128,%sp;		or	$sentinel,%fp,%fp
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   516
___
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   517
for(; $i<$NUM; $i++) {
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   518
$code.=<<___;
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   519
	ldx	[$np+$i*8],@N[$i]
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   520
___
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   521
}
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   522
# load pwrtbl[pwr] ########################################################
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   523
$code.=<<___;
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   524
	save	%sp,-128,%sp;		or	$sentinel,%fp,%fp
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   525
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   526
	srlx	$pwr,	32,	%o4		! unpack $pwr
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   527
	srl	$pwr,	%g0,	%o5
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   528
	sub	%o4,	5,	%o4
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   529
	mov	$pwrtbl,	%o7
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   530
	sllx	%o4,	32,	$pwr		! re-pack $pwr
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   531
	or	%o5,	$pwr,	$pwr
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   532
	srl	%o5,	%o4,	%o5
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   533
___
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   534
	&load_ccr("%o7","%o5","%o4");
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   535
$code.=<<___;
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   536
	b	.Lstride_$NUM
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   537
	nop
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   538
.align	16
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   539
.Lstride_$NUM:
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   540
___
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   541
for($i=0; $i<14 && $i<$NUM; $i+=2) {
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   542
	&load_b_pair("%o7",@B[$i],@B[$i+1]);
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   543
}
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   544
$code.=<<___;
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   545
	save	%sp,-128,%sp;		or	$sentinel,%fp,%fp
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   546
___
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   547
for(; $i<$NUM; $i+=2) {
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   548
	&load_b_pair("%i7",@B[$i],@B[$i+1]);
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   549
}
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   550
$code.=<<___;
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   551
	srax	$pwr,	32,	%o4		! unpack $pwr
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   552
	srl	$pwr,	%g0,	%o5
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   553
	sub	%o4,	5,	%o4
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   554
	mov	$pwrtbl,	%i7
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   555
	sllx	%o4,	32,	$pwr		! re-pack $pwr
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   556
	or	%o5,	$pwr,	$pwr
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   557
	srl	%o5,	%o4,	%o5
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   558
___
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   559
	&load_ccr("%i7","%o5","%o4",1);
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   560

da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   561
# magic ################################################################
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   562
for($i=0; $i<5; $i++) {
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   563
$code.=<<___;
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   564
	.word	0x81b02940+$NUM-1	! montsqr	$NUM-1
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   565
	fbu,pn	%fcc3,.Labort_$NUM
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   566
#ifndef	__arch64__
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   567
	and	%fp,$sentinel,$sentinel
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   568
	brz,pn	$sentinel,.Labort_$NUM
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   569
#endif
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   570
	nop
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   571
___
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   572
}
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   573
$code.=<<___;
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   574
	wr	%o4,	%g0,	%ccr
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   575
	.word	0x81b02920+$NUM-1	! montmul	$NUM-1
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   576
	fbu,pn	%fcc3,.Labort_$NUM
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   577
#ifndef	__arch64__
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   578
	and	%fp,$sentinel,$sentinel
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   579
	brz,pn	$sentinel,.Labort_$NUM
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   580
#endif
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   581
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   582
	srax	$pwr,	32,	%o4
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   583
#ifdef	__arch64__
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   584
	brgez	%o4,.Lstride_$NUM
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   585
	restore
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   586
	restore
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   587
	restore
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   588
	restore
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   589
	restore
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   590
#else
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   591
	brgez	%o4,.Lstride_$NUM
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   592
	restore;		and	%fp,$sentinel,$sentinel
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   593
	restore;		and	%fp,$sentinel,$sentinel
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   594
	restore;		and	%fp,$sentinel,$sentinel
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   595
	restore;		and	%fp,$sentinel,$sentinel
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   596
	 brz,pn	$sentinel,.Labort1_$NUM
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   597
	restore
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   598
#endif
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   599
___
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   600

da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   601
# save tp[$NUM] ########################################################
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   602
for($i=0; $i<14 && $i<$NUM; $i++) {
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   603
$code.=<<___;
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   604
	movxtod	@A[$i],@R[$i]
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   605
___
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   606
}
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   607
$code.=<<___;
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   608
#ifdef	__arch64__
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   609
	restore
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   610
#else
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   611
	 and	%fp,$sentinel,$sentinel
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   612
	restore
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   613
	 and	$sentinel,1,%o7
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   614
	 and	%fp,$sentinel,$sentinel
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   615
	 srl	%fp,0,%fp		! just in case?
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   616
	 or	%o7,$sentinel,$sentinel
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   617
	brz,a,pn $sentinel,.Ldone_$NUM
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   618
	mov	0,%i0		! return failure
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   619
#endif
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   620
___
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   621
for($i=0; $i<$NUM; $i++) {
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   622
$code.=<<___;
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   623
	std	@R[$i],[$tp+$i*8]
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   624
___
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   625
}
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   626
$code.=<<___;
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   627
	mov	1,%i0		! return success
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   628
.Ldone_$NUM:
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   629
	ret
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   630
	restore
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   631
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   632
.Labort_$NUM:
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   633
	restore
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   634
	restore
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   635
	restore
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   636
	restore
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   637
	restore
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   638
.Labort1_$NUM:
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   639
	restore
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   640
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   641
	mov	0,%i0		! return failure
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   642
	ret
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   643
	restore
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   644
.type	bn_pwr5_mont_t4_$NUM, #function
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   645
.size	bn_pwr5_mont_t4_$NUM, .-bn_pwr5_mont_t4_$NUM
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   646
___
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   647
}
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   648
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   649
for ($i=8;$i<=32;$i+=8) {
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   650
	&generate_bn_pwr5_mont_t4($i);
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   651
}
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   652

da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   653
{
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   654
########################################################################
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   655
# Fall-back subroutines
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   656
#
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   657
# copy of bn_mul_mont_vis3 adjusted for vectors of 64-bit values
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   658
#
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   659
($n0,$m0,$m1,$lo0,$hi0, $lo1,$hi1,$aj,$alo,$nj,$nlo,$tj)=
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   660
	(map("%g$_",(1..5)),map("%o$_",(0..5,7)));
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   661
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   662
# int bn_mul_mont(
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   663
$rp="%o0";	# u64 *rp,
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   664
$ap="%o1";	# const u64 *ap,
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   665
$bp="%o2";	# const u64 *bp,
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   666
$np="%o3";	# const u64 *np,
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   667
$n0p="%o4";	# const BN_ULONG *n0,
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   668
$num="%o5";	# int num);	# caller ensures that num is >=3
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   669
$code.=<<___;
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   670
.globl	bn_mul_mont_t4
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   671
.align	32
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   672
bn_mul_mont_t4:
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   673
	add	%sp,	STACK_BIAS,	%g4	! real top of stack
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   674
	sll	$num,	3,	$num		! size in bytes
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   675
	add	$num,	63,	%g1
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   676
	andn	%g1,	63,	%g1		! buffer size rounded up to 64 bytes
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   677
	sub	%g4,	%g1,	%g1
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   678
	andn	%g1,	63,	%g1		! align at 64 byte
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   679
	sub	%g1,	STACK_FRAME,	%g1	! new top of stack
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   680
	sub	%g1,	%g4,	%g1
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   681
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   682
	save	%sp,	%g1,	%sp
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   683
___
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   684
#	+-------------------------------+<-----	%sp
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   685
#	.				.
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   686
#	+-------------------------------+<-----	aligned at 64 bytes
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   687
#	| __int64 tmp[0]		|
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   688
#	+-------------------------------+
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   689
#	.				.
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   690
#	.				.
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   691
#	+-------------------------------+<-----	aligned at 64 bytes
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   692
#	.				.
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   693
($rp,$ap,$bp,$np,$n0p,$num)=map("%i$_",(0..5));
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   694
($t0,$t1,$t2,$t3,$cnt,$tp,$bufsz)=map("%l$_",(0..7));
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   695
($ovf,$i)=($t0,$t1);
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   696
$code.=<<___;
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   697
	ld	[$n0p+0],	$t0	! pull n0[0..1] value
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   698
	ld	[$n0p+4],	$t1
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   699
	add	%sp, STACK_BIAS+STACK_FRAME, $tp
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   700
	ldx	[$bp+0],	$m0	! m0=bp[0]
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   701
	sllx	$t1,	32,	$n0
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   702
	add	$bp,	8,	$bp
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   703
	or	$t0,	$n0,	$n0
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   704

da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   705
	ldx	[$ap+0],	$aj	! ap[0]
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   706
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   707
	mulx	$aj,	$m0,	$lo0	! ap[0]*bp[0]
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   708
	umulxhi	$aj,	$m0,	$hi0
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   709
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   710
	ldx	[$ap+8],	$aj	! ap[1]
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   711
	add	$ap,	16,	$ap
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   712
	ldx	[$np+0],	$nj	! np[0]
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   713
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   714
	mulx	$lo0,	$n0,	$m1	! "tp[0]"*n0
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   715
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   716
	mulx	$aj,	$m0,	$alo	! ap[1]*bp[0]
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   717
	umulxhi	$aj,	$m0,	$aj	! ahi=aj
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   718
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   719
	mulx	$nj,	$m1,	$lo1	! np[0]*m1
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   720
	umulxhi	$nj,	$m1,	$hi1
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   721
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   722
	ldx	[$np+8],	$nj	! np[1]
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   723
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   724
	addcc	$lo0,	$lo1,	$lo1
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   725
	add	$np,	16,	$np
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   726
	addxc	%g0,	$hi1,	$hi1
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   727
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   728
	mulx	$nj,	$m1,	$nlo	! np[1]*m1
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   729
	umulxhi	$nj,	$m1,	$nj	! nhi=nj
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   730

da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   731
	ba	.L1st
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   732
	sub	$num,	24,	$cnt	! cnt=num-3
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   733
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   734
.align	16
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   735
.L1st:
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   736
	addcc	$alo,	$hi0,	$lo0
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   737
	addxc	$aj,	%g0,	$hi0
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   738
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   739
	ldx	[$ap+0],	$aj	! ap[j]
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   740
	addcc	$nlo,	$hi1,	$lo1
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   741
	add	$ap,	8,	$ap
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   742
	addxc	$nj,	%g0,	$hi1	! nhi=nj
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   743
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   744
	ldx	[$np+0],	$nj	! np[j]
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   745
	mulx	$aj,	$m0,	$alo	! ap[j]*bp[0]
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   746
	add	$np,	8,	$np
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   747
	umulxhi	$aj,	$m0,	$aj	! ahi=aj
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   748
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   749
	mulx	$nj,	$m1,	$nlo	! np[j]*m1
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   750
	addcc	$lo0,	$lo1,	$lo1	! np[j]*m1+ap[j]*bp[0]
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   751
	umulxhi	$nj,	$m1,	$nj	! nhi=nj
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   752
	addxc	%g0,	$hi1,	$hi1
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   753
	stxa	$lo1,	[$tp]0xe2	! tp[j-1]
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   754
	add	$tp,	8,	$tp	! tp++
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   755
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   756
	brnz,pt	$cnt,	.L1st
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   757
	sub	$cnt,	8,	$cnt	! j--
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   758
!.L1st
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   759
	addcc	$alo,	$hi0,	$lo0
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   760
	addxc	$aj,	%g0,	$hi0	! ahi=aj
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   761
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   762
	addcc	$nlo,	$hi1,	$lo1
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   763
	addxc	$nj,	%g0,	$hi1
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   764
	addcc	$lo0,	$lo1,	$lo1	! np[j]*m1+ap[j]*bp[0]
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   765
	addxc	%g0,	$hi1,	$hi1
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   766
	stxa	$lo1,	[$tp]0xe2	! tp[j-1]
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   767
	add	$tp,	8,	$tp
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   768
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   769
	addcc	$hi0,	$hi1,	$hi1
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   770
	addxc	%g0,	%g0,	$ovf	! upmost overflow bit
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   771
	stxa	$hi1,	[$tp]0xe2
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   772
	add	$tp,	8,	$tp
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   773

da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   774
	ba	.Louter
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   775
	sub	$num,	16,	$i	! i=num-2
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   776
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   777
.align	16
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   778
.Louter:
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   779
	ldx	[$bp+0],	$m0	! m0=bp[i]
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   780
	add	$bp,	8,	$bp
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   781
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   782
	sub	$ap,	$num,	$ap	! rewind
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   783
	sub	$np,	$num,	$np
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   784
	sub	$tp,	$num,	$tp
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   785
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   786
	ldx	[$ap+0],	$aj	! ap[0]
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   787
	ldx	[$np+0],	$nj	! np[0]
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   788
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   789
	mulx	$aj,	$m0,	$lo0	! ap[0]*bp[i]
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   790
	ldx	[$tp],		$tj	! tp[0]
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   791
	umulxhi	$aj,	$m0,	$hi0
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   792
	ldx	[$ap+8],	$aj	! ap[1]
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   793
	addcc	$lo0,	$tj,	$lo0	! ap[0]*bp[i]+tp[0]
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   794
	mulx	$aj,	$m0,	$alo	! ap[1]*bp[i]
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   795
	addxc	%g0,	$hi0,	$hi0
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   796
	mulx	$lo0,	$n0,	$m1	! tp[0]*n0
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   797
	umulxhi	$aj,	$m0,	$aj	! ahi=aj
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   798
	mulx	$nj,	$m1,	$lo1	! np[0]*m1
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   799
	add	$ap,	16,	$ap
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   800
	umulxhi	$nj,	$m1,	$hi1
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   801
	ldx	[$np+8],	$nj	! np[1]
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   802
	add	$np,	16,	$np
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   803
	addcc	$lo1,	$lo0,	$lo1
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   804
	mulx	$nj,	$m1,	$nlo	! np[1]*m1
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   805
	addxc	%g0,	$hi1,	$hi1
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   806
	umulxhi	$nj,	$m1,	$nj	! nhi=nj
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   807

da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   808
	ba	.Linner
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   809
	sub	$num,	24,	$cnt	! cnt=num-3
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   810
.align	16
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   811
.Linner:
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   812
	addcc	$alo,	$hi0,	$lo0
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   813
	ldx	[$tp+8],	$tj	! tp[j]
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   814
	addxc	$aj,	%g0,	$hi0	! ahi=aj
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   815
	ldx	[$ap+0],	$aj	! ap[j]
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   816
	add	$ap,	8,	$ap
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   817
	addcc	$nlo,	$hi1,	$lo1
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   818
	mulx	$aj,	$m0,	$alo	! ap[j]*bp[i]
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   819
	addxc	$nj,	%g0,	$hi1	! nhi=nj
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   820
	ldx	[$np+0],	$nj	! np[j]
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   821
	add	$np,	8,	$np
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   822
	umulxhi	$aj,	$m0,	$aj	! ahi=aj
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   823
	addcc	$lo0,	$tj,	$lo0	! ap[j]*bp[i]+tp[j]
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   824
	mulx	$nj,	$m1,	$nlo	! np[j]*m1
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   825
	addxc	%g0,	$hi0,	$hi0
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   826
	umulxhi	$nj,	$m1,	$nj	! nhi=nj
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   827
	addcc	$lo1,	$lo0,	$lo1	! np[j]*m1+ap[j]*bp[i]+tp[j]
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   828
	addxc	%g0,	$hi1,	$hi1
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   829
	stx	$lo1,	[$tp]		! tp[j-1]
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   830
	add	$tp,	8,	$tp
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   831
	brnz,pt	$cnt,	.Linner
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   832
	sub	$cnt,	8,	$cnt
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   833
!.Linner
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   834
	ldx	[$tp+8],	$tj	! tp[j]
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   835
	addcc	$alo,	$hi0,	$lo0
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   836
	addxc	$aj,	%g0,	$hi0	! ahi=aj
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   837
	addcc	$lo0,	$tj,	$lo0	! ap[j]*bp[i]+tp[j]
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   838
	addxc	%g0,	$hi0,	$hi0
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   839
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   840
	addcc	$nlo,	$hi1,	$lo1
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   841
	addxc	$nj,	%g0,	$hi1	! nhi=nj
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   842
	addcc	$lo1,	$lo0,	$lo1	! np[j]*m1+ap[j]*bp[i]+tp[j]
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   843
	addxc	%g0,	$hi1,	$hi1
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   844
	stx	$lo1,	[$tp]		! tp[j-1]
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   845
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   846
	subcc	%g0,	$ovf,	%g0	! move upmost overflow to CCR.xcc
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   847
	addxccc	$hi1,	$hi0,	$hi1
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   848
	addxc	%g0,	%g0,	$ovf
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   849
	stx	$hi1,	[$tp+8]
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   850
	add	$tp,	16,	$tp
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   851
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   852
	brnz,pt	$i,	.Louter
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   853
	sub	$i,	8,	$i
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   854

da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   855
	sub	$ap,	$num,	$ap	! rewind
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   856
	sub	$np,	$num,	$np
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   857
	sub	$tp,	$num,	$tp
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   858
	ba	.Lsub
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   859
	subcc	$num,	8,	$cnt	! cnt=num-1 and clear CCR.xcc
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   860
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   861
.align	16
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   862
.Lsub:
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   863
	ldx	[$tp],		$tj
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   864
	add	$tp,	8,	$tp
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   865
	ldx	[$np+0],	$nj
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   866
	add	$np,	8,	$np
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   867
	subccc	$tj,	$nj,	$t2	! tp[j]-np[j]
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   868
	srlx	$tj,	32,	$tj
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   869
	srlx	$nj,	32,	$nj
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   870
	subccc	$tj,	$nj,	$t3
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   871
	add	$rp,	8,	$rp
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   872
	st	$t2,	[$rp-4]		! reverse order
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   873
	st	$t3,	[$rp-8]
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   874
	brnz,pt	$cnt,	.Lsub
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   875
	sub	$cnt,	8,	$cnt
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   876
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   877
	sub	$np,	$num,	$np	! rewind
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   878
	sub	$tp,	$num,	$tp
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   879
	sub	$rp,	$num,	$rp
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   880
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   881
	subc	$ovf,	%g0,	$ovf	! handle upmost overflow bit
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   882
	and	$tp,	$ovf,	$ap
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   883
	andn	$rp,	$ovf,	$np
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   884
	or	$np,	$ap,	$ap	! ap=borrow?tp:rp
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   885
	ba	.Lcopy
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   886
	sub	$num,	8,	$cnt
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   887
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   888
.align	16
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   889
.Lcopy:					! copy or in-place refresh
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   890
	ldx	[$ap+0],	$t2
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   891
	add	$ap,	8,	$ap
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   892
	stx	%g0,	[$tp]		! zap
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   893
	add	$tp,	8,	$tp
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   894
	stx	$t2,	[$rp+0]
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   895
	add	$rp,	8,	$rp
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   896
	brnz	$cnt,	.Lcopy
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   897
	sub	$cnt,	8,	$cnt
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   898
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   899
	mov	1,	%o0
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   900
	ret
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   901
	restore
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   902
.type	bn_mul_mont_t4, #function
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   903
.size	bn_mul_mont_t4, .-bn_mul_mont_t4
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   904
___
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   905

da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   906
# int bn_mul_mont_gather5(
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   907
$rp="%o0";	# u64 *rp,
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   908
$ap="%o1";	# const u64 *ap,
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   909
$bp="%o2";	# const u64 *pwrtbl,
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   910
$np="%o3";	# const u64 *np,
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   911
$n0p="%o4";	# const BN_ULONG *n0,
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   912
$num="%o5";	# int num,	# caller ensures that num is >=3
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   913
		# int power);
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   914
$code.=<<___;
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   915
.globl	bn_mul_mont_gather5_t4
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   916
.align	32
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   917
bn_mul_mont_gather5_t4:
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   918
	add	%sp,	STACK_BIAS,	%g4	! real top of stack
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   919
	sll	$num,	3,	$num		! size in bytes
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   920
	add	$num,	63,	%g1
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   921
	andn	%g1,	63,	%g1		! buffer size rounded up to 64 bytes
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   922
	sub	%g4,	%g1,	%g1
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   923
	andn	%g1,	63,	%g1		! align at 64 byte
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   924
	sub	%g1,	STACK_FRAME,	%g1	! new top of stack
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   925
	sub	%g1,	%g4,	%g1
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   926
	LDPTR	[%sp+STACK_7thARG],	%g4	! load power, 7th argument
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   927
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   928
	save	%sp,	%g1,	%sp
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   929
___
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   930
#	+-------------------------------+<-----	%sp
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   931
#	.				.
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   932
#	+-------------------------------+<-----	aligned at 64 bytes
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   933
#	| __int64 tmp[0]		|
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   934
#	+-------------------------------+
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   935
#	.				.
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   936
#	.				.
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   937
#	+-------------------------------+<-----	aligned at 64 bytes
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   938
#	.				.
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   939
($rp,$ap,$bp,$np,$n0p,$num)=map("%i$_",(0..5));
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   940
($t0,$t1,$t2,$t3,$cnt,$tp,$bufsz,$ccr)=map("%l$_",(0..7));
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   941
($ovf,$i)=($t0,$t1);
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   942
	&load_ccr($bp,"%g4",$ccr);
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   943
	&load_b($bp,$m0,"%o7");		# m0=bp[0]
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   944
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   945
$code.=<<___;
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   946
	ld	[$n0p+0],	$t0	! pull n0[0..1] value
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   947
	ld	[$n0p+4],	$t1
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   948
	add	%sp, STACK_BIAS+STACK_FRAME, $tp
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   949
	sllx	$t1,	32,	$n0
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   950
	or	$t0,	$n0,	$n0
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   951

da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   952
	ldx	[$ap+0],	$aj	! ap[0]
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   953
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   954
	mulx	$aj,	$m0,	$lo0	! ap[0]*bp[0]
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   955
	umulxhi	$aj,	$m0,	$hi0
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   956
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   957
	ldx	[$ap+8],	$aj	! ap[1]
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   958
	add	$ap,	16,	$ap
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   959
	ldx	[$np+0],	$nj	! np[0]
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   960
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   961
	mulx	$lo0,	$n0,	$m1	! "tp[0]"*n0
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   962
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   963
	mulx	$aj,	$m0,	$alo	! ap[1]*bp[0]
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   964
	umulxhi	$aj,	$m0,	$aj	! ahi=aj
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   965
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   966
	mulx	$nj,	$m1,	$lo1	! np[0]*m1
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   967
	umulxhi	$nj,	$m1,	$hi1
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   968
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   969
	ldx	[$np+8],	$nj	! np[1]
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   970
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   971
	addcc	$lo0,	$lo1,	$lo1
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   972
	add	$np,	16,	$np
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   973
	addxc	%g0,	$hi1,	$hi1
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   974
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   975
	mulx	$nj,	$m1,	$nlo	! np[1]*m1
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   976
	umulxhi	$nj,	$m1,	$nj	! nhi=nj
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   977

da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   978
	ba	.L1st_g5
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   979
	sub	$num,	24,	$cnt	! cnt=num-3
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   980
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   981
.align	16
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   982
.L1st_g5:
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   983
	addcc	$alo,	$hi0,	$lo0
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   984
	addxc	$aj,	%g0,	$hi0
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   985
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   986
	ldx	[$ap+0],	$aj	! ap[j]
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   987
	addcc	$nlo,	$hi1,	$lo1
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   988
	add	$ap,	8,	$ap
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   989
	addxc	$nj,	%g0,	$hi1	! nhi=nj
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   990
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   991
	ldx	[$np+0],	$nj	! np[j]
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   992
	mulx	$aj,	$m0,	$alo	! ap[j]*bp[0]
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   993
	add	$np,	8,	$np
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   994
	umulxhi	$aj,	$m0,	$aj	! ahi=aj
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   995
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   996
	mulx	$nj,	$m1,	$nlo	! np[j]*m1
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   997
	addcc	$lo0,	$lo1,	$lo1	! np[j]*m1+ap[j]*bp[0]
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   998
	umulxhi	$nj,	$m1,	$nj	! nhi=nj
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   999
	addxc	%g0,	$hi1,	$hi1
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
  1000
	stxa	$lo1,	[$tp]0xe2	! tp[j-1]
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
  1001
	add	$tp,	8,	$tp	! tp++
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
  1002
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
  1003
	brnz,pt	$cnt,	.L1st_g5
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
  1004
	sub	$cnt,	8,	$cnt	! j--
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
  1005
!.L1st_g5
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
  1006
	addcc	$alo,	$hi0,	$lo0
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
  1007
	addxc	$aj,	%g0,	$hi0	! ahi=aj
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
  1008
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
  1009
	addcc	$nlo,	$hi1,	$lo1
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
  1010
	addxc	$nj,	%g0,	$hi1
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
  1011
	addcc	$lo0,	$lo1,	$lo1	! np[j]*m1+ap[j]*bp[0]
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
  1012
	addxc	%g0,	$hi1,	$hi1
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
  1013
	stxa	$lo1,	[$tp]0xe2	! tp[j-1]
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
  1014
	add	$tp,	8,	$tp
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
  1015
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
  1016
	addcc	$hi0,	$hi1,	$hi1
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
  1017
	addxc	%g0,	%g0,	$ovf	! upmost overflow bit
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
  1018
	stxa	$hi1,	[$tp]0xe2
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
  1019
	add	$tp,	8,	$tp
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
  1020

da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
  1021
	ba	.Louter_g5
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
  1022
	sub	$num,	16,	$i	! i=num-2
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
  1023
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
  1024
.align	16
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
  1025
.Louter_g5:
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
  1026
	wr	$ccr,	%g0,	%ccr
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
  1027
___
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
  1028
	&load_b($bp,$m0);		# m0=bp[i]
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
  1029
$code.=<<___;
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
  1030
	sub	$ap,	$num,	$ap	! rewind
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
  1031
	sub	$np,	$num,	$np
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
  1032
	sub	$tp,	$num,	$tp
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
  1033
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
  1034
	ldx	[$ap+0],	$aj	! ap[0]
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
  1035
	ldx	[$np+0],	$nj	! np[0]
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
  1036
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
  1037
	mulx	$aj,	$m0,	$lo0	! ap[0]*bp[i]
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
  1038
	ldx	[$tp],		$tj	! tp[0]
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
  1039
	umulxhi	$aj,	$m0,	$hi0
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
  1040
	ldx	[$ap+8],	$aj	! ap[1]
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
  1041
	addcc	$lo0,	$tj,	$lo0	! ap[0]*bp[i]+tp[0]
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
  1042
	mulx	$aj,	$m0,	$alo	! ap[1]*bp[i]
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
  1043
	addxc	%g0,	$hi0,	$hi0
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
  1044
	mulx	$lo0,	$n0,	$m1	! tp[0]*n0
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
  1045
	umulxhi	$aj,	$m0,	$aj	! ahi=aj
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
  1046
	mulx	$nj,	$m1,	$lo1	! np[0]*m1
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
  1047
	add	$ap,	16,	$ap
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
  1048
	umulxhi	$nj,	$m1,	$hi1
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
  1049
	ldx	[$np+8],	$nj	! np[1]
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
  1050
	add	$np,	16,	$np
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
  1051
	addcc	$lo1,	$lo0,	$lo1
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
  1052
	mulx	$nj,	$m1,	$nlo	! np[1]*m1
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
  1053
	addxc	%g0,	$hi1,	$hi1
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
  1054
	umulxhi	$nj,	$m1,	$nj	! nhi=nj
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
  1055

da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
  1056
	ba	.Linner_g5
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
  1057
	sub	$num,	24,	$cnt	! cnt=num-3
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
  1058
.align	16
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
  1059
.Linner_g5:
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
  1060
	addcc	$alo,	$hi0,	$lo0
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
  1061
	ldx	[$tp+8],	$tj	! tp[j]
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
  1062
	addxc	$aj,	%g0,	$hi0	! ahi=aj
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
  1063
	ldx	[$ap+0],	$aj	! ap[j]
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
  1064
	add	$ap,	8,	$ap
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
  1065
	addcc	$nlo,	$hi1,	$lo1
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
  1066
	mulx	$aj,	$m0,	$alo	! ap[j]*bp[i]
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
  1067
	addxc	$nj,	%g0,	$hi1	! nhi=nj
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
  1068
	ldx	[$np+0],	$nj	! np[j]
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
  1069
	add	$np,	8,	$np
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
  1070
	umulxhi	$aj,	$m0,	$aj	! ahi=aj
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
  1071
	addcc	$lo0,	$tj,	$lo0	! ap[j]*bp[i]+tp[j]
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
  1072
	mulx	$nj,	$m1,	$nlo	! np[j]*m1
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
  1073
	addxc	%g0,	$hi0,	$hi0
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
  1074
	umulxhi	$nj,	$m1,	$nj	! nhi=nj
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
  1075
	addcc	$lo1,	$lo0,	$lo1	! np[j]*m1+ap[j]*bp[i]+tp[j]
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
  1076
	addxc	%g0,	$hi1,	$hi1
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
  1077
	stx	$lo1,	[$tp]		! tp[j-1]
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
  1078
	add	$tp,	8,	$tp
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
  1079
	brnz,pt	$cnt,	.Linner_g5
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
  1080
	sub	$cnt,	8,	$cnt
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
  1081
!.Linner_g5
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
  1082
	ldx	[$tp+8],	$tj	! tp[j]
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
  1083
	addcc	$alo,	$hi0,	$lo0
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
  1084
	addxc	$aj,	%g0,	$hi0	! ahi=aj
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
  1085
	addcc	$lo0,	$tj,	$lo0	! ap[j]*bp[i]+tp[j]
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
  1086
	addxc	%g0,	$hi0,	$hi0
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
  1087
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
  1088
	addcc	$nlo,	$hi1,	$lo1
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
  1089
	addxc	$nj,	%g0,	$hi1	! nhi=nj
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
  1090
	addcc	$lo1,	$lo0,	$lo1	! np[j]*m1+ap[j]*bp[i]+tp[j]
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
  1091
	addxc	%g0,	$hi1,	$hi1
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
  1092
	stx	$lo1,	[$tp]		! tp[j-1]
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
  1093
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
  1094
	subcc	%g0,	$ovf,	%g0	! move upmost overflow to CCR.xcc
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
  1095
	addxccc	$hi1,	$hi0,	$hi1
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
  1096
	addxc	%g0,	%g0,	$ovf
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
  1097
	stx	$hi1,	[$tp+8]
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
  1098
	add	$tp,	16,	$tp
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
  1099
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
  1100
	brnz,pt	$i,	.Louter_g5
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
  1101
	sub	$i,	8,	$i
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
  1102

da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
  1103
	sub	$ap,	$num,	$ap	! rewind
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
  1104
	sub	$np,	$num,	$np
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
  1105
	sub	$tp,	$num,	$tp
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
  1106
	ba	.Lsub_g5
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
  1107
	subcc	$num,	8,	$cnt	! cnt=num-1 and clear CCR.xcc
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
  1108
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
  1109
.align	16
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
  1110
.Lsub_g5:
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
  1111
	ldx	[$tp],		$tj
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
  1112
	add	$tp,	8,	$tp
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
  1113
	ldx	[$np+0],	$nj
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
  1114
	add	$np,	8,	$np
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
  1115
	subccc	$tj,	$nj,	$t2	! tp[j]-np[j]
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
  1116
	srlx	$tj,	32,	$tj
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
  1117
	srlx	$nj,	32,	$nj
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
  1118
	subccc	$tj,	$nj,	$t3
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
  1119
	add	$rp,	8,	$rp
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
  1120
	st	$t2,	[$rp-4]		! reverse order
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
  1121
	st	$t3,	[$rp-8]
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
  1122
	brnz,pt	$cnt,	.Lsub_g5
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
  1123
	sub	$cnt,	8,	$cnt
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
  1124
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
  1125
	sub	$np,	$num,	$np	! rewind
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
  1126
	sub	$tp,	$num,	$tp
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
  1127
	sub	$rp,	$num,	$rp
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
  1128
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
  1129
	subc	$ovf,	%g0,	$ovf	! handle upmost overflow bit
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
  1130
	and	$tp,	$ovf,	$ap
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
  1131
	andn	$rp,	$ovf,	$np
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
  1132
	or	$np,	$ap,	$ap	! ap=borrow?tp:rp
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
  1133
	ba	.Lcopy_g5
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
  1134
	sub	$num,	8,	$cnt
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
  1135
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
  1136
.align	16
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
  1137
.Lcopy_g5:				! copy or in-place refresh
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
  1138
	ldx	[$ap+0],	$t2
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
  1139
	add	$ap,	8,	$ap
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
  1140
	stx	%g0,	[$tp]		! zap
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
  1141
	add	$tp,	8,	$tp
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
  1142
	stx	$t2,	[$rp+0]
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
  1143
	add	$rp,	8,	$rp
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
  1144
	brnz	$cnt,	.Lcopy_g5
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
  1145
	sub	$cnt,	8,	$cnt
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
  1146
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
  1147
	mov	1,	%o0
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
  1148
	ret
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
  1149
	restore
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
  1150
.type	bn_mul_mont_gather5_t4, #function
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
  1151
.size	bn_mul_mont_gather5_t4, .-bn_mul_mont_gather5_t4
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
  1152
___
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
  1153
}
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
  1154

da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
  1155
$code.=<<___;
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
  1156
.globl	bn_flip_t4
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
  1157
.align	32
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
  1158
bn_flip_t4:
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
  1159
.Loop_flip:
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
  1160
	ld	[%o1+0],	%o4
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
  1161
	sub	%o2,	1,	%o2
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
  1162
	ld	[%o1+4],	%o5
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
  1163
	add	%o1,	8,	%o1
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
  1164
	st	%o5,	[%o0+0]
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
  1165
	st	%o4,	[%o0+4]
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
  1166
	brnz	%o2,	.Loop_flip
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
  1167
	add	%o0,	8,	%o0
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
  1168
	retl
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
  1169
	nop
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
  1170
.type	bn_flip_t4, #function
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
  1171
.size	bn_flip_t4, .-bn_flip_t4
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
  1172
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
  1173
.globl	bn_flip_n_scatter5_t4
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
  1174
.align	32
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
  1175
bn_flip_n_scatter5_t4:
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
  1176
	sll	%o3,	3,	%o3
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
  1177
	srl	%o1,	1,	%o1
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
  1178
	add	%o3,	%o2,	%o2	! &pwrtbl[pwr]
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
  1179
	sub	%o1,	1,	%o1
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
  1180
.Loop_flip_n_scatter5:
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
  1181
	ld	[%o0+0],	%o4	! inp[i]
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
  1182
	ld	[%o0+4],	%o5
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
  1183
	add	%o0,	8,	%o0
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
  1184
	sllx	%o5,	32,	%o5
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
  1185
	or	%o4,	%o5,	%o5
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
  1186
	stx	%o5,	[%o2]
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
  1187
	add	%o2,	32*8,	%o2
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
  1188
	brnz	%o1,	.Loop_flip_n_scatter5
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
  1189
	sub	%o1,	1,	%o1
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
  1190
	retl
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
  1191
	nop
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
  1192
.type	bn_flip_n_scatter5_t4, #function
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
  1193
.size	bn_flip_n_scatter5_t4, .-bn_flip_n_scatter5_t4
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
  1194
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
  1195
.globl	bn_gather5_t4
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
  1196
.align	32
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
  1197
bn_gather5_t4:
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
  1198
___
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
  1199
	&load_ccr("%o2","%o3","%g1");
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
  1200
$code.=<<___;
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
  1201
	sub	%o1,	1,	%o1
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
  1202
.Loop_gather5:
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
  1203
___
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
  1204
	&load_b("%o2","%g1");
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
  1205
$code.=<<___;
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
  1206
	stx	%g1,	[%o0]
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
  1207
	add	%o0,	8,	%o0
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
  1208
	brnz	%o1,	.Loop_gather5
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
  1209
	sub	%o1,	1,	%o1
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
  1210
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
  1211
	retl
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
  1212
	nop
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
  1213
.type	bn_gather5_t4, #function
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
  1214
.size	bn_gather5_t4, .-bn_gather5_t4
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
  1215
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
  1216
.asciz	"Montgomery Multiplication for SPARC T4, David S. Miller, Andy Polyakov"
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
  1217
.align	4
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
  1218
___
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
  1219
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
  1220
&emit_assembler();
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
  1221
da0ef75be98f 15824600 SUNBT7206152 T4 montmul should be embedded in the OpenSSL upstream src
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
  1222
close STDOUT;