Update.
[glibc.git] / sysdeps / mips / mul_1.s
blobd006fa12219d8408fd433a4c0d3e16f4f4893910
1 # MIPS __mpn_mul_1 -- Multiply a limb vector with a single limb and
2 # store the product in a second limb vector.
4 # Copyright (C) 1992, 1994, 1996 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 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.
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.
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., 59 Temple Place - Suite 330, Boston,
21 # MA 02111-1307, USA.
24 # INPUT PARAMETERS
25 # res_ptr $4
26 # s1_ptr $5
27 # size $6
28 # s2_limb $7
30 .text
31 .align 4
32 .globl __mpn_mul_1
33 .ent __mpn_mul_1
34 __mpn_mul_1:
35 .set noreorder
36 .set nomacro
38 # warm up phase 0
39 lw $8,0($5)
41 # warm up phase 1
42 addiu $5,$5,4
43 multu $8,$7
45 addiu $6,$6,-1
46 beq $6,$0,$LC0
47 move $2,$0 # zero cy2
49 addiu $6,$6,-1
50 beq $6,$0,$LC1
51 lw $8,0($5) # load new s1 limb as early as possible
53 Loop: mflo $10
54 mfhi $9
55 addiu $5,$5,4
56 addu $10,$10,$2 # add old carry limb to low product limb
57 multu $8,$7
58 lw $8,0($5) # load new s1 limb as early as possible
59 addiu $6,$6,-1 # decrement loop counter
60 sltu $2,$10,$2 # carry from previous addition -> $2
61 sw $10,0($4)
62 addiu $4,$4,4
63 bne $6,$0,Loop
64 addu $2,$9,$2 # add high product limb and carry from addition
66 # cool down phase 1
67 $LC1: mflo $10
68 mfhi $9
69 addu $10,$10,$2
70 sltu $2,$10,$2
71 multu $8,$7
72 sw $10,0($4)
73 addiu $4,$4,4
74 addu $2,$9,$2 # add high product limb and carry from addition
76 # cool down phase 0
77 $LC0: mflo $10
78 mfhi $9
79 addu $10,$10,$2
80 sltu $2,$10,$2
81 sw $10,0($4)
82 j $31
83 addu $2,$9,$2 # add high product limb and carry from addition
85 .end __mpn_mul_1