Annotation of OpenXM_contrib/gmp/mpn/pa64w/umul_ppmm.S, Revision 1.1.1.1
1.1 maekawa 1: ; Copyright (C) 1999, 2000 Free Software Foundation, Inc.
2:
3: ; This file is part of the GNU MP Library.
4:
5: ; The GNU MP Library is free software; you can redistribute it and/or modify
6: ; it under the terms of the GNU Lesser General Public License as published by
7: ; the Free Software Foundation; either version 2.1 of the License, or (at your
8: ; option) any later version.
9:
10: ; The GNU MP Library is distributed in the hope that it will be useful, but
11: ; WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
12: ; or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public
13: ; License for more details.
14:
15: ; You should have received a copy of the GNU Lesser General Public License
16: ; along with the GNU MP Library; see the file COPYING.LIB. If not, write to
17: ; the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston,
18: ; MA 02111-1307, USA.
19:
20: #define p0 %r28
21: #define p1 %r29
22: #define t32 %r19
23: #define t0 %r20
24: #define t1 %r21
25: #define x %r22
26: #define m0 %r23
27: #define m1 %r24
28: .level 2.0w
29: .code
30: .export __gmpn_umul_ppmm,entry
31: __gmpn_umul_ppmm
32: .proc
33: .callinfo frame=128,no_calls
34: .entry
35: ldo 128(%r30),%r30
36: std %r26,-64(%r30)
37: std %r25,-56(%r30)
38:
39: copy %r24,%r31
40:
41: fldd -64(%r30),%fr4
42: fldd -56(%r30),%fr5
43:
44: xmpyu %fr5R,%fr4R,%fr6
45: fstd %fr6,-128(%r30)
46: xmpyu %fr5R,%fr4L,%fr7
47: fstd %fr7,-120(%r30)
48: xmpyu %fr5L,%fr4R,%fr8
49: fstd %fr8,-112(%r30)
50: xmpyu %fr5L,%fr4L,%fr9
51: fstd %fr9,-104(%r30)
52:
53: depdi,z 1,31,1,t32 ; t32 = 2^32
54:
55: ldd -128(%r30),p0 ; lo = low 64 bit of product
56: ldd -120(%r30),m0 ; m0 = mid0 64 bit of product
57: ldd -112(%r30),m1 ; m1 = mid1 64 bit of product
58: ldd -104(%r30),p1 ; hi = high 64 bit of product
59:
60: add,l,*nuv m0,m1,x ; x = m1+m0
61: add,l t32,p1,p1 ; propagate carry to mid of p1
62: depd,z x,31,32,t0 ; lo32(m1+m0)
63: add t0,p0,p0
64: extrd,u x,31,32,t1 ; hi32(m1+m0)
65: add,dc t1,p1,p1
66:
67: std p0,0(%r31) ; store low half of product
68: copy p1,%r28 ; return high half of product
69: bve (%r2)
70: .exit
71: ldo -128(%r30),%r30
72: .procend
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>