1 ; 29000 __gmpn_submul_1 -- Multiply a limb vector with a single limb and
2 ; subtract the product from a second limb vector.
4 ; Copyright 1992, 1994, 2000 Free Software Foundation, Inc.
6 ; This file is part of the GNU MP Library.
8 ; The GNU MP Library is free software; you can redistribute it and/or modify
9 ; it under the terms of the GNU Lesser General Public License as published by
10 ; the Free Software Foundation; either version 3 of the License, or (at your
11 ; option) any later version.
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 Lesser General Public
16 ; License for more details.
18 ; You should have received a copy of the GNU Lesser General Public License
19 ; along with the GNU MP Library. If not, see http://www.gnu.org/licenses/.
32 .global ___gmpn_submul_1
37 const gr120,0 ; init cylimb reg
39 srl gr117,lr4,3 ; divide by 8
40 sub gr117,gr117,1 ; count for jmpfdec
46 multiplu gr104,gr96,lr5
48 multiplu gr105,gr97,lr5
50 multiplu gr106,gr98,lr5
52 multiplu gr107,gr99,lr5
54 multiplu gr108,gr100,lr5
55 multmu gr100,gr100,lr5
56 multiplu gr109,gr101,lr5
57 multmu gr101,gr101,lr5
58 multiplu gr110,gr102,lr5
59 multmu gr102,gr102,lr5
60 multiplu gr111,gr103,lr5
61 multmu gr103,gr103,lr5
68 addc gr109,gr109,gr100
69 addc gr110,gr110,gr101
70 addc gr111,gr111,gr102
80 subc gr100,gr100,gr108
81 subc gr101,gr101,gr109
82 subc gr102,gr102,gr110
83 subc gr103,gr103,gr111
85 add gr104,gr103,gr111 ; invert carry from previous sub
93 Ltail: and lr4,lr4,(8-1)
94 sub gr118,lr4,1 ; count for CR
97 sub lr2,lr2,4 ; offset res_ptr by one limb
99 Loop2: load 0,0,gr116,lr3
101 multiplu gr117,gr116,lr5
102 multmu gr118,gr116,lr5
105 add gr117,gr117,gr120
107 sub gr119,gr119,gr117
108 add gr104,gr119,gr117 ; invert carry from previous sub
114 or gr96,gr120,0 ; copy