Updated from ../=mpn/gmp-1.906.7
[kopensolaris-gnu/glibc.git] / sysdeps / m88k / m88110 / mul_1.s
1 ; mc88110 __mpn_mul_1 -- Multiply a limb vector with a single limb and
2 ; store the product in a second limb vector.
3
4 ; Copyright (C) 1992, 1994 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., 675 Mass Ave, Cambridge, MA 02139, USA.
21
22
23 ; INPUT PARAMETERS
24 ; res_ptr       r2
25 ; s1_ptr        r3
26 ; size          r4
27 ; s2_limb       r5
28
29         text
30         align   16
31         global  ___mpn_mul_1
32 ___mpn_mul_1:
33         ; Make S1_PTR and RES_PTR point at the end of their blocks
34         ; and negate SIZE.
35         lda      r3,r3[r4]
36         lda      r8,r2[r4]              ; RES_PTR in r8 since r2 is retval
37         subu     r4,r0,r4
38
39         addu.co  r2,r0,r0               ; r2 = cy = 0
40
41         ld       r6,r3[r4]
42         addu     r4,r4,1
43         mulu.d   r10,r6,r5
44         bcnd.n   eq0,r4,Lend
45          subu    r8,r8,8
46
47 Loop:   ld       r6,r3[r4]
48         addu.cio r9,r11,r2
49         or       r2,r10,r0              ; could be avoided if unrolled
50         addu     r4,r4,1
51         mulu.d   r10,r6,r5
52         bcnd.n   ne0,r4,Loop
53          st      r9,r8[r4]
54
55 Lend:   addu.cio r9,r11,r2
56         st       r9,r8,4
57         jmp.n    r1
58          addu.ci r2,r10,r0
59
60 ; This is the Right Way to do this on '110.  4 cycles / 64-bit limb.
61 ;       ld.d    r10,
62 ;       mulu.d
63 ;       addu.cio
64 ;       addu.cio
65 ;       st.d
66 ;       mulu.d  ,r11,r5
67 ;       ld.d    r12,
68 ;       mulu.d  ,r10,r5
69 ;       addu.cio
70 ;       addu.cio
71 ;       st.d
72 ;       mulu.d
73 ;       ld.d    r10,
74 ;       mulu.d
75 ;       addu.cio
76 ;       addu.cio
77 ;       st.d
78 ;       mulu.d
79 ;       ld.d    r10,
80 ;       mulu.d
81 ;       addu.cio
82 ;       addu.cio
83 ;       st.d
84 ;       mulu.d