Annotation of OpenXM_contrib/gmp/mpn/pa64/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.0n
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: depd %r25,31,32,%r26
37: std %r26,-64(%r30)
38: depd %r23,31,32,%r24
39: std %r24,-56(%r30)
40:
41: ldw -180(%r30),%r31
42:
43: fldd -64(%r30),%fr4
44: fldd -56(%r30),%fr5
45:
46: xmpyu %fr5R,%fr4R,%fr6
47: fstd %fr6,-128(%r30)
48: xmpyu %fr5R,%fr4L,%fr7
49: fstd %fr7,-120(%r30)
50: xmpyu %fr5L,%fr4R,%fr8
51: fstd %fr8,-112(%r30)
52: xmpyu %fr5L,%fr4L,%fr9
53: fstd %fr9,-104(%r30)
54:
55: depdi,z 1,31,1,t32 ; t32 = 2^32
56:
57: ldd -128(%r30),p0 ; lo = low 64 bit of product
58: ldd -120(%r30),m0 ; m0 = mid0 64 bit of product
59: ldd -112(%r30),m1 ; m1 = mid1 64 bit of product
60: ldd -104(%r30),p1 ; hi = high 64 bit of product
61:
62: add,l,*nuv m0,m1,x ; x = m1+m0
63: add,l t32,p1,p1 ; propagate carry to mid of p1
64: depd,z x,31,32,t0 ; lo32(m1+m0)
65: add t0,p0,p0
66: extrd,u x,31,32,t1 ; hi32(m1+m0)
67: add,dc t1,p1,p1
68:
69: std p0,0(%r31) ; store low half of product
70: extrd,u p1,31,32,%r28 ; return high half of product
71: bve (%r2)
72: .exit
73: ldo -128(%r30),%r30
74: .procend
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>