1 dnl Alpha EV5 __gmpn_sub_n -- Subtract two limb vectors of the same length > 0
2 dnl and store difference in a third limb vector.
4 dnl Copyright (C) 1995, 1999, 2000 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 the GNU Lesser General Public License as published by
10 dnl the Free Software Foundation; either version 2.1 of the License, or (at your
11 dnl option) any later version.
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.
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.
23 include(`../config.m4')
33 bis r31,r31,r25 C clear cy
34 subq r19,4,r19 C decr loop cnt
35 blt r19,$Lend2 C if less than 4 limbs, goto 2nd loop
36 C Start software pipeline for 1st loop
41 addq r17,32,r17 C update s1_ptr
43 subq r4,r0,r20 C 1st main subtract
45 subq r19,4,r19 C decr loop cnt
47 cmpult r4,r0,r25 C compute cy from last subtract
49 subq r5,r1,r28 C 2nd main subtract
50 addq r18,32,r18 C update s2_ptr
51 subq r28,r25,r21 C 2nd carry subtract
52 cmpult r5,r1,r8 C compute cy from last subtract
53 blt r19,$Lend1 C if less than 4 limbs remain, jump
54 C 1st loop handles groups of 4 limbs in a software pipeline
56 $Loop: cmpult r28,r25,r25 C compute cy from last subtract
58 bis r8,r25,r25 C combine cy from the two subtracts
60 subq r6,r2,r28 C 3rd main subtract
62 subq r28,r25,r22 C 3rd carry subtract
64 cmpult r6,r2,r8 C compute cy from last subtract
65 cmpult r28,r25,r25 C compute cy from last subtract
67 bis r8,r25,r25 C combine cy from the two subtracts
69 subq r7,r3,r28 C 4th main subtract
70 subq r28,r25,r23 C 4th carry subtract
71 cmpult r7,r3,r8 C compute cy from last subtract
72 cmpult r28,r25,r25 C compute cy from last subtract
73 addq r17,32,r17 C update s1_ptr
74 bis r8,r25,r25 C combine cy from the two subtracts
75 addq r16,32,r16 C update res_ptr
76 subq r4,r0,r28 C 1st main subtract
78 subq r28,r25,r20 C 1st carry subtract
80 cmpult r4,r0,r8 C compute cy from last subtract
82 cmpult r28,r25,r25 C compute cy from last subtract
84 bis r8,r25,r25 C combine cy from the two subtracts
85 subq r19,4,r19 C decr loop cnt
87 subq r5,r1,r28 C 2nd main subtract
89 subq r28,r25,r21 C 2nd carry subtract
90 addq r18,32,r18 C update s2_ptr
91 cmpult r5,r1,r8 C compute cy from last subtract
93 C Finish software pipeline for 1st loop
94 $Lend1: cmpult r28,r25,r25 C compute cy from last subtract
95 bis r8,r25,r25 C combine cy from the two subtracts
96 subq r6,r2,r28 C cy add
97 subq r28,r25,r22 C 3rd main subtract
98 cmpult r6,r2,r8 C compute cy from last subtract
99 cmpult r28,r25,r25 C compute cy from last subtract
101 bis r8,r25,r25 C combine cy from the two subtracts
103 subq r7,r3,r28 C cy add
104 subq r28,r25,r23 C 4th main subtract
105 cmpult r7,r3,r8 C compute cy from last subtract
106 cmpult r28,r25,r25 C compute cy from last subtract
107 bis r8,r25,r25 C combine cy from the two subtracts
108 addq r16,32,r16 C update res_ptr
111 $Lend2: addq r19,4,r19 C restore loop cnt
113 C Start software pipeline for 2nd loop
118 C 2nd loop handles remaining 1-3 limbs
120 $Loop0: subq r4,r0,r28 C main subtract
121 cmpult r4,r0,r8 C compute cy from last subtract
124 subq r28,r25,r20 C carry subtract
128 cmpult r28,r25,r25 C compute cy from last subtract
129 subq r19,1,r19 C decr loop cnt
130 bis r8,r25,r25 C combine cy from the two subtracts
133 $Lend0: subq r4,r0,r28 C main subtract
134 subq r28,r25,r20 C carry subtract
135 cmpult r4,r0,r8 C compute cy from last subtract
136 cmpult r28,r25,r25 C compute cy from last subtract
138 bis r8,r25,r25 C combine cy from the two subtracts
140 $Lret: bis r25,r31,r0 C return cy