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

« back to all changes in this revision

Viewing changes to gmp3/mpn/sparc32/submul_1.asm

  • 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
dnl  SPARC mpn_submul_1 -- Multiply a limb vector with a limb and subtract
 
2
dnl  the result from a second limb vector.
 
3
 
 
4
dnl  Copyright 1992, 1993, 1994, 2000 Free Software Foundation, Inc.
 
5
 
 
6
dnl  This file is part of the GNU MP Library.
 
7
 
 
8
dnl  The GNU MP Library is free software; you can redistribute it and/or modify
 
9
dnl  it under the terms of the GNU Lesser General Public License as published
 
10
dnl  by the Free Software Foundation; either version 2.1 of the License, or (at
 
11
dnl  your option) any later version.
 
12
 
 
13
dnl  The GNU MP Library is distributed in the hope that it will be useful, but
 
14
dnl  WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
 
15
dnl  or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU Lesser General Public
 
16
dnl  License for more details.
 
17
 
 
18
dnl  You should have received a copy of the GNU Lesser General Public License
 
19
dnl  along with the GNU MP Library; see the file COPYING.LIB.  If not, write to
 
20
dnl  the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston,
 
21
dnl  MA 02111-1307, USA.
 
22
 
 
23
 
 
24
include(`../config.m4')
 
25
 
 
26
C INPUT PARAMETERS
 
27
C res_ptr       o0
 
28
C s1_ptr        o1
 
29
C size          o2
 
30
C s2_limb       o3
 
31
 
 
32
ASM_START()
 
33
PROLOGUE(mpn_submul_1)
 
34
        C Make S1_PTR and RES_PTR point at the end of their blocks
 
35
        C and put (- 4 x SIZE) in index/loop counter.
 
36
        sll     %o2,2,%o2
 
37
        add     %o0,%o2,%o4     C RES_PTR in o4 since o0 is retval
 
38
        add     %o1,%o2,%o1
 
39
        sub     %g0,%o2,%o2
 
40
 
 
41
        cmp     %o3,0xfff
 
42
        bgu     L(large)
 
43
        nop
 
44
 
 
45
        ld      [%o1+%o2],%o5
 
46
        mov     0,%o0
 
47
        b       L(0)
 
48
         add    %o4,-4,%o4
 
49
L(loop0):
 
50
        subcc   %o5,%g1,%g1
 
51
        ld      [%o1+%o2],%o5
 
52
        addx    %o0,%g0,%o0
 
53
        st      %g1,[%o4+%o2]
 
54
L(0):   wr      %g0,%o3,%y
 
55
        sra     %o5,31,%g2
 
56
        and     %o3,%g2,%g2
 
57
        andcc   %g1,0,%g1
 
58
        mulscc  %g1,%o5,%g1
 
59
        mulscc  %g1,%o5,%g1
 
60
        mulscc  %g1,%o5,%g1
 
61
        mulscc  %g1,%o5,%g1
 
62
        mulscc  %g1,%o5,%g1
 
63
        mulscc  %g1,%o5,%g1
 
64
        mulscc  %g1,%o5,%g1
 
65
        mulscc  %g1,%o5,%g1
 
66
        mulscc  %g1,%o5,%g1
 
67
        mulscc  %g1,%o5,%g1
 
68
        mulscc  %g1,%o5,%g1
 
69
        mulscc  %g1,%o5,%g1
 
70
        mulscc  %g1,0,%g1
 
71
        sra     %g1,20,%g4
 
72
        sll     %g1,12,%g1
 
73
        rd      %y,%g3
 
74
        srl     %g3,20,%g3
 
75
        or      %g1,%g3,%g1
 
76
 
 
77
        addcc   %g1,%o0,%g1
 
78
        addx    %g2,%g4,%o0     C add sign-compensation and cy to hi limb
 
79
        addcc   %o2,4,%o2       C loop counter
 
80
        bne     L(loop0)
 
81
         ld     [%o4+%o2],%o5
 
82
 
 
83
        subcc   %o5,%g1,%g1
 
84
        addx    %o0,%g0,%o0
 
85
        retl
 
86
        st      %g1,[%o4+%o2]
 
87
 
 
88
L(large):
 
89
        ld      [%o1+%o2],%o5
 
90
        mov     0,%o0
 
91
        sra     %o3,31,%g4      C g4 = mask of ones iff S2_LIMB < 0
 
92
        b       L(1)
 
93
         add    %o4,-4,%o4
 
94
L(loop):
 
95
        subcc   %o5,%g3,%g3
 
96
        ld      [%o1+%o2],%o5
 
97
        addx    %o0,%g0,%o0
 
98
        st      %g3,[%o4+%o2]
 
99
L(1):   wr      %g0,%o5,%y
 
100
        and     %o5,%g4,%g2
 
101
        andcc   %g0,%g0,%g1
 
102
        mulscc  %g1,%o3,%g1
 
103
        mulscc  %g1,%o3,%g1
 
104
        mulscc  %g1,%o3,%g1
 
105
        mulscc  %g1,%o3,%g1
 
106
        mulscc  %g1,%o3,%g1
 
107
        mulscc  %g1,%o3,%g1
 
108
        mulscc  %g1,%o3,%g1
 
109
        mulscc  %g1,%o3,%g1
 
110
        mulscc  %g1,%o3,%g1
 
111
        mulscc  %g1,%o3,%g1
 
112
        mulscc  %g1,%o3,%g1
 
113
        mulscc  %g1,%o3,%g1
 
114
        mulscc  %g1,%o3,%g1
 
115
        mulscc  %g1,%o3,%g1
 
116
        mulscc  %g1,%o3,%g1
 
117
        mulscc  %g1,%o3,%g1
 
118
        mulscc  %g1,%o3,%g1
 
119
        mulscc  %g1,%o3,%g1
 
120
        mulscc  %g1,%o3,%g1
 
121
        mulscc  %g1,%o3,%g1
 
122
        mulscc  %g1,%o3,%g1
 
123
        mulscc  %g1,%o3,%g1
 
124
        mulscc  %g1,%o3,%g1
 
125
        mulscc  %g1,%o3,%g1
 
126
        mulscc  %g1,%o3,%g1
 
127
        mulscc  %g1,%o3,%g1
 
128
        mulscc  %g1,%o3,%g1
 
129
        mulscc  %g1,%o3,%g1
 
130
        mulscc  %g1,%o3,%g1
 
131
        mulscc  %g1,%o3,%g1
 
132
        mulscc  %g1,%o3,%g1
 
133
        mulscc  %g1,%o3,%g1
 
134
        mulscc  %g1,%g0,%g1
 
135
        rd      %y,%g3
 
136
        addcc   %g3,%o0,%g3
 
137
        addx    %g2,%g1,%o0
 
138
        addcc   %o2,4,%o2
 
139
        bne     L(loop)
 
140
         ld     [%o4+%o2],%o5
 
141
 
 
142
        subcc   %o5,%g3,%g3
 
143
        addx    %o0,%g0,%o0
 
144
        retl
 
145
        st      %g3,[%o4+%o2]
 
146
EPILOGUE(mpn_submul_1)