Annotation of OpenXM_contrib/gmp/mpn/alpha/sub_n.s, Revision 1.1.1.1
1.1 maekawa 1: # Alpha __mpn_sub_n -- Subtract two limb vectors of the same length > 0 and
2: # store difference in a third limb vector.
3:
4: # Copyright (C) 1995 Free Software Foundation, Inc.
5:
6: # This file is part of the GNU MP Library.
7:
8: # The GNU MP Library is free software; you can redistribute it and/or modify
9: # it under the terms of the GNU Library General Public License as published by
10: # the Free Software Foundation; either version 2 of the License, or (at your
11: # option) any later version.
12:
13: # The GNU MP Library is distributed in the hope that it will be useful, but
14: # WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
15: # or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public
16: # License for more details.
17:
18: # You should have received a copy of the GNU Library General Public License
19: # along with the GNU MP Library; see the file COPYING.LIB. If not, write to
20: # the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston,
21: # MA 02111-1307, USA.
22:
23:
24: # INPUT PARAMETERS
25: # res_ptr $16
26: # s1_ptr $17
27: # s2_ptr $18
28: # size $19
29:
30: .set noreorder
31: .set noat
32: .text
33: .align 3
34: .globl __mpn_sub_n
35: .ent __mpn_sub_n
36: __mpn_sub_n:
37: .frame $30,0,$26,0
38:
39: ldq $3,0($17)
40: ldq $4,0($18)
41:
42: subq $19,1,$19
43: and $19,4-1,$2 # number of limbs in first loop
44: bis $31,$31,$0
45: beq $2,.L0 # if multiple of 4 limbs, skip first loop
46:
47: subq $19,$2,$19
48:
49: .Loop0: subq $2,1,$2
50: ldq $5,8($17)
51: addq $4,$0,$4
52: ldq $6,8($18)
53: cmpult $4,$0,$1
54: subq $3,$4,$4
55: cmpult $3,$4,$0
56: stq $4,0($16)
57: or $0,$1,$0
58:
59: addq $17,8,$17
60: addq $18,8,$18
61: bis $5,$5,$3
62: bis $6,$6,$4
63: addq $16,8,$16
64: bne $2,.Loop0
65:
66: .L0: beq $19,.Lend
67:
68: .align 3
69: .Loop: subq $19,4,$19
70:
71: ldq $5,8($17)
72: addq $4,$0,$4
73: ldq $6,8($18)
74: cmpult $4,$0,$1
75: subq $3,$4,$4
76: cmpult $3,$4,$0
77: stq $4,0($16)
78: or $0,$1,$0
79:
80: ldq $3,16($17)
81: addq $6,$0,$6
82: ldq $4,16($18)
83: cmpult $6,$0,$1
84: subq $5,$6,$6
85: cmpult $5,$6,$0
86: stq $6,8($16)
87: or $0,$1,$0
88:
89: ldq $5,24($17)
90: addq $4,$0,$4
91: ldq $6,24($18)
92: cmpult $4,$0,$1
93: subq $3,$4,$4
94: cmpult $3,$4,$0
95: stq $4,16($16)
96: or $0,$1,$0
97:
98: ldq $3,32($17)
99: addq $6,$0,$6
100: ldq $4,32($18)
101: cmpult $6,$0,$1
102: subq $5,$6,$6
103: cmpult $5,$6,$0
104: stq $6,24($16)
105: or $0,$1,$0
106:
107: addq $17,32,$17
108: addq $18,32,$18
109: addq $16,32,$16
110: bne $19,.Loop
111:
112: .Lend: addq $4,$0,$4
113: cmpult $4,$0,$1
114: subq $3,$4,$4
115: cmpult $3,$4,$0
116: stq $4,0($16)
117: or $0,$1,$0
118: ret $31,($26),1
119:
120: .end __mpn_sub_n
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>