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