1 dnl Alpha mpn_sub_n
-- Subtract two limb vectors of the same
length > 0
2 dnl
and store difference
in a third limb vector.
4 dnl Copyright
1995, 1999, 2000, 2005, 2011 Free Software Foundation
, Inc.
6 dnl
This file is part of the GNU MP Library.
8 dnl The GNU MP Library is free software
; you can redistribute it and/or modify
9 dnl it under the terms of
either:
11 dnl
* the GNU Lesser General
Public License as published by the Free
12 dnl Software Foundation
; either version 3 of the License, or (at your
13 dnl option
) any later version.
17 dnl
* the GNU General
Public License as published by the Free Software
18 dnl Foundation
; either version 2 of the License, or (at your option) any
21 dnl
or both
in parallel
, as here.
23 dnl The GNU MP Library is distributed
in the hope that it will be useful
, but
24 dnl WITHOUT ANY WARRANTY
; without even the implied warranty of MERCHANTABILITY
25 dnl
or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
Public License
28 dnl You should have received copies of the GNU General
Public License
and the
29 dnl GNU Lesser General
Public License along with the GNU MP Library. If
not,
30 dnl see
https://www.gnu.
org/licenses
/.
32 include(`..
/config.m4
')
51 bis r31,r31,r25 C clear cy
52 L(com): subq r19,4,r19 C decr loop cnt
53 blt r19,$Lend2 C if less than 4 limbs, goto 2nd loop
54 C Start software pipeline for 1st loop
59 addq r17,32,r17 C update s1_ptr
60 subq r4,r0,r28 C 1st main subtract
62 subq r28,r25,r20 C 1st carry subtract
64 cmpult r4,r0,r8 C compute cy from last subtract
66 cmpult r28,r25,r25 C compute cy from last subtract
68 bis r8,r25,r25 C combine cy from the two subtracts
69 subq r19,4,r19 C decr loop cnt
70 subq r5,r1,r28 C 2nd main subtract
71 addq r18,32,r18 C update s2_ptr
72 subq r28,r25,r21 C 2nd carry subtract
73 cmpult r5,r1,r8 C compute cy from last subtract
74 blt r19,$Lend1 C if less than 4 limbs remain, jump
75 C 1st loop handles groups of 4 limbs in a software pipeline
77 $Loop: cmpult r28,r25,r25 C compute cy from last subtract
79 bis r8,r25,r25 C combine cy from the two subtracts
81 subq r6,r2,r28 C 3rd main subtract
83 subq r28,r25,r22 C 3rd carry subtract
85 cmpult r6,r2,r8 C compute cy from last subtract
86 cmpult r28,r25,r25 C compute cy from last subtract
88 bis r8,r25,r25 C combine cy from the two subtracts
90 subq r7,r3,r28 C 4th main subtract
91 subq r28,r25,r23 C 4th carry subtract
92 cmpult r7,r3,r8 C compute cy from last subtract
93 cmpult r28,r25,r25 C compute cy from last subtract
94 addq r17,32,r17 C update s1_ptr
95 bis r8,r25,r25 C combine cy from the two subtracts
96 addq r16,32,r16 C update res_ptr
97 subq r4,r0,r28 C 1st main subtract
99 subq r28,r25,r20 C 1st carry subtract
101 cmpult r4,r0,r8 C compute cy from last subtract
103 cmpult r28,r25,r25 C compute cy from last subtract
105 bis r8,r25,r25 C combine cy from the two subtracts
106 subq r19,4,r19 C decr loop cnt
108 subq r5,r1,r28 C 2nd main subtract
110 subq r28,r25,r21 C 2nd carry subtract
111 addq r18,32,r18 C update s2_ptr
112 cmpult r5,r1,r8 C compute cy from last subtract
114 C Finish software pipeline for 1st loop
115 $Lend1: cmpult r28,r25,r25 C compute cy from last subtract
116 bis r8,r25,r25 C combine cy from the two subtracts
117 subq r6,r2,r28 C cy add
118 subq r28,r25,r22 C 3rd main subtract
119 cmpult r6,r2,r8 C compute cy from last subtract
120 cmpult r28,r25,r25 C compute cy from last subtract
122 bis r8,r25,r25 C combine cy from the two subtracts
124 subq r7,r3,r28 C cy add
125 subq r28,r25,r23 C 4th main subtract
126 cmpult r7,r3,r8 C compute cy from last subtract
127 cmpult r28,r25,r25 C compute cy from last subtract
128 bis r8,r25,r25 C combine cy from the two subtracts
129 addq r16,32,r16 C update res_ptr
132 $Lend2: addq r19,4,r19 C restore loop cnt
134 C Start software pipeline for 2nd loop
139 C 2nd loop handles remaining 1-3 limbs
141 $Loop0: subq r4,r0,r28 C main subtract
142 cmpult r4,r0,r8 C compute cy from last subtract
145 subq r28,r25,r20 C carry subtract
149 cmpult r28,r25,r25 C compute cy from last subtract
150 subq r19,1,r19 C decr loop cnt
151 bis r8,r25,r25 C combine cy from the two subtracts
154 $Lend0: subq r4,r0,r28 C main subtract
155 subq r28,r25,r20 C carry subtract
156 cmpult r4,r0,r8 C compute cy from last subtract
157 cmpult r28,r25,r25 C compute cy from last subtract
159 bis r8,r25,r25 C combine cy from the two subtracts
161 $Lret: bis r25,r31,r0 C return cy