Import from 1.9a8 tarball
[mozilla-nss.git] / security / nss / lib / freebl / mpi / montmulf.il
blob8c047cf6afa0e7af6759450179bb02bfdef94ca5
1 !  
2 ! ***** BEGIN LICENSE BLOCK *****
3 ! Version: MPL 1.1/GPL 2.0/LGPL 2.1
5 ! The contents of this file are subject to the Mozilla Public License Version
6 ! 1.1 (the "License"); you may not use this file except in compliance with
7 ! the License. You may obtain a copy of the License at
8 ! http://www.mozilla.org/MPL/
10 ! Software distributed under the License is distributed on an "AS IS" basis,
11 ! WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
12 ! for the specific language governing rights and limitations under the
13 ! License.
15 ! The Original Code is inline macros for SPARC Montgomery multiply functions.
17 ! The Initial Developer of the Original Code is
18 ! Sun Microsystems Inc.
19 ! Portions created by the Initial Developer are Copyright (C) 1999-2000
20 ! the Initial Developer. All Rights Reserved.
22 ! Contributor(s):
24 ! Alternatively, the contents of this file may be used under the terms of
25 ! either the GNU General Public License Version 2 or later (the "GPL"), or
26 ! the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
27 ! in which case the provisions of the GPL or the LGPL are applicable instead
28 ! of those above. If you wish to allow use of your version of this file only
29 ! under the terms of either the GPL or the LGPL, and not to allow others to
30 ! use your version of this file under the terms of the MPL, indicate your
31 ! decision by deleting the provisions above and replace them with the notice
32 ! and other provisions required by the GPL or the LGPL. If you do not delete
33 ! the provisions above, a recipient may use your version of this file under
34 ! the terms of any one of the MPL, the GPL or the LGPL.
36 ! ***** END LICENSE BLOCK *****
37 ! $Id: montmulf.il,v 1.4 2004/04/27 23:04:36 gerv%gerv.net Exp $
40 ! double upper32(double /*frs1*/);
42         .inline upper32,8
43         std     %o0,[%sp+0x48]
44         ldd     [%sp+0x48],%f10
46         fdtox   %f10,%f10
47         fitod   %f10,%f0
48         .end
51 ! double lower32(double /*frs1*/, double /* Zero */);
53         .inline lower32,8
54         std     %o0,[%sp+0x48]
55         ldd     [%sp+0x48],%f10
56         std     %o2,[%sp+0x48]
57         ldd     [%sp+0x48],%f12
59         fdtox   %f10,%f10
60         fmovs   %f12,%f10
61         fxtod   %f10,%f0
62         .end
65 ! double mod(double /*x*/, double /*1/m*/, double /*m*/);
67         .inline mod,12
68         std     %o0,[%sp+0x48]
69         ldd     [%sp+0x48],%f2
70         std     %o2,[%sp+0x48]
71         ldd     [%sp+0x48],%f4
72         std     %o4,[%sp+0x48]
73         ldd     [%sp+0x48],%f6
75         fmuld   %f2,%f4,%f4
76         fdtox   %f4,%f4
77         fxtod   %f4,%f4
78         fmuld   %f4,%f6,%f4
79         fsubd   %f2,%f4,%f0
80         .end
84 ! void i16_to_d16_and_d32x4(double * /*1/(2^16)*/, double * /* 2^16*/,
85 !                           double * /* 0 */,
86 !                           double * /*result16*/, double * /* result32 */
87 !                           float *  /*source - should be unsigned int*
88 !                                      converted to float* */);
90         .inline i16_to_d16_and_d32x4,24
91         ldd     [%o0],%f2  ! 1/(2^16)
92         ldd     [%o1],%f4  ! 2^16
93         ldd     [%o2],%f22
95         fmovd   %f22,%f6
96         ld      [%o5],%f7
97         fmovd   %f22,%f10
98         ld      [%o5+4],%f11
99         fmovd   %f22,%f14
100         ld      [%o5+8],%f15
101         fmovd   %f22,%f18
102         ld      [%o5+12],%f19
103         fxtod   %f6,%f6
104         std     %f6,[%o4]
105         fxtod   %f10,%f10
106         std     %f10,[%o4+8]
107         fxtod   %f14,%f14
108         std     %f14,[%o4+16]
109         fxtod   %f18,%f18
110         std     %f18,[%o4+24]
111         fmuld   %f2,%f6,%f8
112         fmuld   %f2,%f10,%f12
113         fmuld   %f2,%f14,%f16
114         fmuld   %f2,%f18,%f20
115         fdtox   %f8,%f8
116         fdtox   %f12,%f12
117         fdtox   %f16,%f16
118         fdtox   %f20,%f20
119         fxtod   %f8,%f8
120         std     %f8,[%o3+8]
121         fxtod   %f12,%f12
122         std     %f12,[%o3+24]
123         fxtod   %f16,%f16
124         std     %f16,[%o3+40]
125         fxtod   %f20,%f20
126         std     %f20,[%o3+56]
127         fmuld   %f8,%f4,%f8
128         fmuld   %f12,%f4,%f12
129         fmuld   %f16,%f4,%f16
130         fmuld   %f20,%f4,%f20
131         fsubd   %f6,%f8,%f8
132         std     %f8,[%o3]
133         fsubd   %f10,%f12,%f12
134         std     %f12,[%o3+16]
135         fsubd   %f14,%f16,%f16
136         std     %f16,[%o3+32]
137         fsubd   %f18,%f20,%f20
138         std     %f20,[%o3+48]
139         .end