~ubuntu-branches/ubuntu/quantal/gclcvs/quantal

« back to all changes in this revision

Viewing changes to gmp3/mpn/pa64/umul_ppmm.S

  • Committer: Bazaar Package Importer
  • Author(s): Camm Maguire
  • Date: 2004-06-24 15:13:46 UTC
  • Revision ID: james.westby@ubuntu.com-20040624151346-xh0xaaktyyp7aorc
Tags: 2.7.0-26
C_GC_OFFSET is 2 on m68k-linux

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
; Copyright 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