~ubuntu-branches/ubuntu/intrepid/ecl/intrepid

« back to all changes in this revision

Viewing changes to msvc/gmp/mpn/x86i/pentium4/sse2/sqr_basecase.asm

  • Committer: Bazaar Package Importer
  • Author(s): Peter Van Eynde
  • Date: 2006-05-17 02:46:26 UTC
  • Revision ID: james.westby@ubuntu.com-20060517024626-lljr08ftv9g9vefl
Tags: upstream-0.9h-20060510
ImportĀ upstreamĀ versionĀ 0.9h-20060510

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
;  Copyright 2001, 2002 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
 
6
;  modify it under the terms of the GNU Lesser General Public License as
 
7
;  published by the Free Software Foundation; either version 2.1 of the
 
8
;  License, or (at your option) any later version.
 
9
 
10
;  The GNU MP Library is distributed in the hope that it will be useful,
 
11
;  but WITHOUT ANY WARRANTY; without even the implied warranty of
 
12
;  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 
13
;  Lesser General Public License for more details.
 
14
 
15
;  You should have received a copy of the GNU Lesser General Public
 
16
;  License along with the GNU MP Library; see the file COPYING.LIB.  If
 
17
;  not, write to the Free Software Foundation, Inc., 59 Temple Place -
 
18
;  Suite 330, Boston, MA 02111-1307, USA.
 
19
;
 
20
; Translation of AT&T syntax code by Brian Gladman 
 
21
 
 
22
        section .text
 
23
 
 
24
        global  ___gmpn_sqr_basecase
 
25
%ifdef  DLL
 
26
        export  ___gmpn_sqr_basecase
 
27
%endif
 
28
 
 
29
        align   8
 
30
___gmpn_sqr_basecase: 
 
31
    mov     edx,[12+esp]
 
32
    mov     eax,[8+esp]
 
33
    mov     ecx,[4+esp]
 
34
    cmp     edx,2
 
35
    je      two_limbs
 
36
    ja      three_or_more
 
37
    mov     eax,[eax]
 
38
    mul     eax
 
39
    mov     [ecx],eax
 
40
    mov     [4+ecx],edx
 
41
    ret
 
42
 
 
43
two_limbs: 
 
44
    movd    mm1,[eax]
 
45
    movd    mm0,[4+eax]
 
46
        pmuludq mm0,mm1
 
47
        pmuludq mm1,mm1
 
48
    movd    mm2,[4+eax]
 
49
        pmuludq mm2,mm2
 
50
    movd    [ecx],mm1
 
51
    psrlq   mm1,32
 
52
    pcmpeqd mm3,mm3
 
53
    psrlq   mm3,32
 
54
    pand    mm3,mm0
 
55
    psrlq   mm0,32
 
56
    psllq   mm3,1
 
57
        paddq   mm1,mm3
 
58
    movd    [4+ecx],mm1
 
59
    pcmpeqd mm4,mm4
 
60
    psrlq   mm4,32
 
61
    pand    mm4,mm2
 
62
    psrlq   mm2,32
 
63
    psllq   mm0,1
 
64
    psrlq   mm1,32
 
65
        paddq   mm0,mm1
 
66
        paddq   mm0,mm4
 
67
    movd    [8+ecx],mm0
 
68
    psrlq   mm0,32
 
69
        paddq   mm0,mm2
 
70
    movd    [12+ecx],mm0
 
71
        emms
 
72
    ret
 
73
 
 
74
three_or_more: 
 
75
    sub     esp,12
 
76
    pxor    mm0,mm0
 
77
    movd    mm7,[eax]
 
78
    mov     [8+esp],esi
 
79
    mov     [4+esp],edi
 
80
    mov     [esp],ebp
 
81
    mov     esi,eax
 
82
    mov     edi,ecx
 
83
    sub     edx,1
 
84
 
 
85
mul1: 
 
86
    movd    mm1,[4+eax]
 
87
    add     eax,4
 
88
        pmuludq mm1,mm7
 
89
        paddq   mm0,mm1
 
90
    movd    [4+ecx],mm0
 
91
    add     ecx,4
 
92
    psrlq   mm0,32
 
93
    sub     edx,1
 
94
    jnz     mul1
 
95
    mov     ebp,[24+esp]
 
96
    sub     ebp,3
 
97
    jz      corner
 
98
 
 
99
outer: 
 
100
    movd    mm7,[4+esi]
 
101
    movd    [4+ecx],mm0
 
102
    lea     eax,[8+esi]
 
103
    add     esi,4
 
104
    lea     ecx,[8+edi]
 
105
    add     edi,8
 
106
    lea     edx,[1+ebp]
 
107
    pxor    mm0,mm0
 
108
 
 
109
inner: 
 
110
    movd    mm1,[eax]
 
111
    lea     eax,[4+eax]
 
112
    movd    mm2,[4+ecx]
 
113
        pmuludq mm1,mm7
 
114
        paddq   mm1,mm2
 
115
        paddq   mm0,mm1
 
116
    sub     edx,1
 
117
    movd    [4+ecx],mm0
 
118
    psrlq   mm0,32
 
119
    lea     ecx,[4+ecx]
 
120
    jnz     inner
 
121
    sub     ebp,1
 
122
    jnz     outer
 
123
 
 
124
corner: 
 
125
    movd    mm1,[4+esi]
 
126
    movd    mm2,[8+esi]
 
127
        pmuludq mm1,mm2
 
128
    mov     eax,[20+esp]
 
129
    movd    mm2,[eax]
 
130
        pmuludq mm2,mm2
 
131
    pcmpeqd mm7,mm7
 
132
    psrlq   mm7,32
 
133
    mov     edx,[16+esp]
 
134
    movd    mm3,[4+edx]
 
135
        paddq   mm0,mm1
 
136
    movd    [12+edi],mm0
 
137
    psrlq   mm0,32
 
138
    movd    [16+edi],mm0
 
139
    movd    [edx],mm2
 
140
    psrlq   mm2,32
 
141
    psllq   mm3,1
 
142
        paddq   mm2,mm3
 
143
    movd    [4+edx],mm2
 
144
    psrlq   mm2,32
 
145
    mov     ecx,[24+esp]
 
146
    sub     ecx,2
 
147
 
 
148
diag: 
 
149
    movd    mm0,[4+eax]
 
150
    add     eax,4
 
151
        pmuludq mm0,mm0
 
152
    movq    mm1,mm7
 
153
    pand    mm1,mm0
 
154
    psrlq   mm0,32
 
155
    movd    mm3,[8+edx]
 
156
    psllq   mm3,1
 
157
        paddq   mm1,mm3
 
158
        paddq   mm2,mm1
 
159
    movd    [8+edx],mm2
 
160
    psrlq   mm2,32
 
161
    movd    mm3,[12+edx]
 
162
    psllq   mm3,1
 
163
        paddq   mm0,mm3
 
164
        paddq   mm2,mm0
 
165
    movd    [12+edx],mm2
 
166
    add     edx,8
 
167
    psrlq   mm2,32
 
168
    sub     ecx,1
 
169
    jnz     diag
 
170
    movd    mm0,[4+eax]
 
171
        pmuludq mm0,mm0
 
172
    pand    mm7,mm0
 
173
    psrlq   mm0,32
 
174
    movd    mm3,[8+edx]
 
175
    psllq   mm3,1
 
176
        paddq   mm7,mm3
 
177
        paddq   mm2,mm7
 
178
    movd    [8+edx],mm2
 
179
    psrlq   mm2,32
 
180
        paddq   mm2,mm0
 
181
    movd    [12+edx],mm2
 
182
    mov     esi,[8+esp]
 
183
    mov     edi,[4+esp]
 
184
    mov     ebp,[esp]
 
185
    add     esp,12
 
186
    emms
 
187
    ret
 
188
 
 
189
        end