beta-0.89.2
[luatex.git] / source / libs / gmp / gmp-src / mpn / m88k / mc88110 / mul_1.s
blob28fd14b77b157182d0d0fd06201e511d148bd481
1 ; mc88110 __gmpn_mul_1 -- Multiply a limb vector with a single limb and
2 ; store the product in a second limb vector.
4 ; Copyright 1992, 1994, 1995, 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 either:
11 ; * the GNU Lesser General Public License as published by the Free
12 ; Software Foundation; either version 3 of the License, or (at your
13 ; option) any later version.
15 ; or
17 ; * the GNU General Public License as published by the Free Software
18 ; Foundation; either version 2 of the License, or (at your option) any
19 ; later version.
21 ; or both in parallel, as here.
23 ; The GNU MP Library is distributed in the hope that it will be useful, but
24 ; WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
25 ; or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
26 ; for more details.
28 ; You should have received copies of the GNU General Public License and the
29 ; GNU Lesser General Public License along with the GNU MP Library. If not,
30 ; see https://www.gnu.org/licenses/.
33 ; INPUT PARAMETERS
34 ; res_ptr r2
35 ; s1_ptr r3
36 ; size r4
37 ; s2_limb r5
39 text
40 align 16
41 global ___gmpn_mul_1
42 ___gmpn_mul_1:
43 ; Make S1_PTR and RES_PTR point at the end of their blocks
44 ; and negate SIZE.
45 lda r3,r3[r4]
46 lda r8,r2[r4] ; RES_PTR in r8 since r2 is retval
47 subu r4,r0,r4
49 addu.co r2,r0,r0 ; r2 = cy = 0
51 ld r6,r3[r4]
52 addu r4,r4,1
53 mulu.d r10,r6,r5
54 bcnd.n eq0,r4,Lend
55 subu r8,r8,8
57 Loop: ld r6,r3[r4]
58 addu.cio r9,r11,r2
59 or r2,r10,r0 ; could be avoided if unrolled
60 addu r4,r4,1
61 mulu.d r10,r6,r5
62 bcnd.n ne0,r4,Loop
63 st r9,r8[r4]
65 Lend: addu.cio r9,r11,r2
66 st r9,r8,4
67 jmp.n r1
68 addu.ci r2,r10,r0