~ubuntu-branches/ubuntu/vivid/gcl/vivid

« back to all changes in this revision

Viewing changes to gmp/mpn/mips2/addmul_1.s

  • Committer: Bazaar Package Importer
  • Author(s): Camm Maguire
  • Date: 2002-03-04 14:29:59 UTC
  • Revision ID: james.westby@ubuntu.com-20020304142959-dey14w08kr7lldu3
Tags: upstream-2.5.0.cvs20020219
ImportĀ upstreamĀ versionĀ 2.5.0.cvs20020219

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
 # MIPS __gmpn_addmul_1 -- Multiply a limb vector with a single limb and
 
2
 # add the product to a second limb vector.
 
3
 
 
4
 # Copyright (C) 1992, 1994, 1996, 2000 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 Lesser General Public License as published by
 
10
 # the Free Software Foundation; either version 2.1 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 Lesser General Public
 
16
 # License for more details.
 
17
 
 
18
 # You should have received a copy of the GNU Lesser 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.
 
22
 
 
23
 
 
24
 # INPUT PARAMETERS
 
25
 # res_ptr      $4
 
26
 # s1_ptr       $5
 
27
 # size         $6
 
28
 # s2_limb      $7
 
29
 
 
30
        .text
 
31
        .align   4
 
32
        .globl   __gmpn_addmul_1
 
33
        .ent    __gmpn_addmul_1
 
34
__gmpn_addmul_1:
 
35
        .set    noreorder
 
36
        .set    nomacro
 
37
 
 
38
 # warm up phase 0
 
39
        lw      $8,0($5)
 
40
 
 
41
 # warm up phase 1
 
42
        addiu   $5,$5,4
 
43
        multu   $8,$7
 
44
 
 
45
        addiu   $6,$6,-1
 
46
        beq     $6,$0,$LC0
 
47
         move   $2,$0           # zero cy2
 
48
 
 
49
        addiu   $6,$6,-1
 
50
        beq     $6,$0,$LC1
 
51
        lw      $8,0($5)        # load new s1 limb as early as possible
 
52
 
 
53
Loop:   lw      $10,0($4)
 
54
        mflo    $3
 
55
        mfhi    $9
 
56
        addiu   $5,$5,4
 
57
        addu    $3,$3,$2        # add old carry limb to low product limb
 
58
        multu   $8,$7
 
59
        lw      $8,0($5)        # load new s1 limb as early as possible
 
60
        addiu   $6,$6,-1        # decrement loop counter
 
61
        sltu    $2,$3,$2        # carry from previous addition -> $2
 
62
        addu    $3,$10,$3
 
63
        sltu    $10,$3,$10
 
64
        addu    $2,$2,$10
 
65
        sw      $3,0($4)
 
66
        addiu   $4,$4,4
 
67
        bne     $6,$0,Loop
 
68
         addu   $2,$9,$2        # add high product limb and carry from addition
 
69
 
 
70
 # cool down phase 1
 
71
$LC1:   lw      $10,0($4)
 
72
        mflo    $3
 
73
        mfhi    $9
 
74
        addu    $3,$3,$2
 
75
        sltu    $2,$3,$2
 
76
        multu   $8,$7
 
77
        addu    $3,$10,$3
 
78
        sltu    $10,$3,$10
 
79
        addu    $2,$2,$10
 
80
        sw      $3,0($4)
 
81
        addiu   $4,$4,4
 
82
        addu    $2,$9,$2        # add high product limb and carry from addition
 
83
 
 
84
 # cool down phase 0
 
85
$LC0:   lw      $10,0($4)
 
86
        mflo    $3
 
87
        mfhi    $9
 
88
        addu    $3,$3,$2
 
89
        sltu    $2,$3,$2
 
90
        addu    $3,$10,$3
 
91
        sltu    $10,$3,$10
 
92
        addu    $2,$2,$10
 
93
        sw      $3,0($4)
 
94
        j       $31
 
95
        addu    $2,$9,$2        # add high product limb and carry from addition
 
96
 
 
97
        .end    __gmpn_addmul_1