nearly ready for 0.3.0
[libgcrypt.git] / mpi / mips3 / mpih-sub1.S
1 /* mips3  sub_n -- Subtract two limb vectors of the same length > 0 and
2  *                store difference in a third limb vector.
3  * Copyright (C) 1995, 1998 Free Software Foundation, Inc.
4  *
5  * This file is part of GNUPG.
6  *
7  * GNUPG is free software; you can redistribute it and/or modify
8  * it under the terms of the GNU General Public License as published by
9  * the Free Software Foundation; either version 2 of the License, or
10  * (at your option) any later version.
11  *
12  * GNUPG is distributed in the hope that it will be useful,
13  * but WITHOUT ANY WARRANTY; without even the implied warranty of
14  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15  * GNU General Public License for more details.
16  *
17  * You should have received a copy of the GNU General Public License
18  * along with this program; if not, write to the Free Software
19  * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
20  */
21
22
23 /*******************
24  *  mpi_limb_t
25  *  mpihelp_sub_n( mpi_ptr_t res_ptr,   (r4)
26  *                 mpi_ptr_t s1_ptr,    (r5)
27  *                 mpi_ptr_t s2_ptr,    (r6)
28  *                 mpi_size_t size)     (r7)
29  */
30
31
32         .text
33         .align  2
34         .globl  mpihelp_sub_n
35         .ent    mpihelp_sub_n
36 mpihelp_sub_n:
37         .set    noreorder
38         .set    nomacro
39
40         ld      $10,0($5)
41         ld      $11,0($6)
42
43         daddiu  $7,$7,-1
44         and     $9,$7,4-1       # number of limbs in first loop
45         beq     $9,$0,.L0       # if multiple of 4 limbs, skip first loop
46         move   $2,$0
47
48         dsubu   $7,$7,$9
49
50 .Loop0: daddiu  $9,$9,-1
51         ld      $12,8($5)
52         daddu   $11,$11,$2
53         ld      $13,8($6)
54         sltu    $8,$11,$2
55         dsubu   $11,$10,$11
56         sltu    $2,$10,$11
57         sd      $11,0($4)
58         or      $2,$2,$8
59
60         daddiu  $5,$5,8
61         daddiu  $6,$6,8
62         move    $10,$12
63         move    $11,$13
64         bne     $9,$0,.Loop0
65          daddiu $4,$4,8
66
67 .L0:    beq     $7,$0,.Lend
68          nop
69
70 .Loop:  daddiu  $7,$7,-4
71
72         ld      $12,8($5)
73         daddu   $11,$11,$2
74         ld      $13,8($6)
75         sltu    $8,$11,$2
76         dsubu   $11,$10,$11
77         sltu    $2,$10,$11
78         sd      $11,0($4)
79         or      $2,$2,$8
80
81         ld      $10,16($5)
82         daddu   $13,$13,$2
83         ld      $11,16($6)
84         sltu    $8,$13,$2
85         dsubu   $13,$12,$13
86         sltu    $2,$12,$13
87         sd      $13,8($4)
88         or      $2,$2,$8
89
90         ld      $12,24($5)
91         daddu   $11,$11,$2
92         ld      $13,24($6)
93         sltu    $8,$11,$2
94         dsubu   $11,$10,$11
95         sltu    $2,$10,$11
96         sd      $11,16($4)
97         or      $2,$2,$8
98
99         ld      $10,32($5)
100         daddu   $13,$13,$2
101         ld      $11,32($6)
102         sltu    $8,$13,$2
103         dsubu   $13,$12,$13
104         sltu    $2,$12,$13
105         sd      $13,24($4)
106         or      $2,$2,$8
107
108         daddiu  $5,$5,32
109         daddiu  $6,$6,32
110
111         bne     $7,$0,.Loop
112          daddiu $4,$4,32
113
114 .Lend:  daddu   $11,$11,$2
115         sltu    $8,$11,$2
116         dsubu   $11,$10,$11
117         sltu    $2,$10,$11
118         sd      $11,0($4)
119         j       $31
120         or      $2,$2,$8
121
122         .end    mpihelp_sub_n
123         n