some more internall structure changes
[gnupg.git] / mpi / alpha / mpih-sub1.S
1 /* Alpha  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,   (r16)
26  *                 mpi_ptr_t s1_ptr,    (r17)
27  *                 mpi_ptr_t s2_ptr,    (r18)
28  *                 mpi_size_t size)     (r19)
29  */
30
31         .set    noreorder
32         .set    noat
33 .text
34         .align  3
35         .globl  mpihelp_sub_n
36         .ent    mpihelp_sub_n
37 mpihelp_sub_n:
38         .frame  $30,0,$26,0
39
40         ldq     $3,0($17)
41         ldq     $4,0($18)
42
43         subq    $19,1,$19
44         and     $19,4-1,$2      # number of limbs in first loop
45         bis     $31,$31,$0
46         beq     $2,.L0          # if multiple of 4 limbs, skip first loop
47
48         subq    $19,$2,$19
49
50 .Loop0: subq    $2,1,$2
51         ldq     $5,8($17)
52         addq    $4,$0,$4
53         ldq     $6,8($18)
54         cmpult  $4,$0,$1
55         subq    $3,$4,$4
56         cmpult  $3,$4,$0
57         stq     $4,0($16)
58         or      $0,$1,$0
59
60         addq    $17,8,$17
61         addq    $18,8,$18
62         bis     $5,$5,$3
63         bis     $6,$6,$4
64         addq    $16,8,$16
65         bne     $2,.Loop0
66
67 .L0:    beq     $19,.Lend
68
69         .align  3
70 .Loop:  subq    $19,4,$19
71
72         ldq     $5,8($17)
73         addq    $4,$0,$4
74         ldq     $6,8($18)
75         cmpult  $4,$0,$1
76         subq    $3,$4,$4
77         cmpult  $3,$4,$0
78         stq     $4,0($16)
79         or      $0,$1,$0
80
81         ldq     $3,16($17)
82         addq    $6,$0,$6
83         ldq     $4,16($18)
84         cmpult  $6,$0,$1
85         subq    $5,$6,$6
86         cmpult  $5,$6,$0
87         stq     $6,8($16)
88         or      $0,$1,$0
89
90         ldq     $5,24($17)
91         addq    $4,$0,$4
92         ldq     $6,24($18)
93         cmpult  $4,$0,$1
94         subq    $3,$4,$4
95         cmpult  $3,$4,$0
96         stq     $4,16($16)
97         or      $0,$1,$0
98
99         ldq     $3,32($17)
100         addq    $6,$0,$6
101         ldq     $4,32($18)
102         cmpult  $6,$0,$1
103         subq    $5,$6,$6
104         cmpult  $5,$6,$0
105         stq     $6,24($16)
106         or      $0,$1,$0
107
108         addq    $17,32,$17
109         addq    $18,32,$18
110         addq    $16,32,$16
111         bne     $19,.Loop
112
113 .Lend:  addq    $4,$0,$4
114         cmpult  $4,$0,$1
115         subq    $3,$4,$4
116         cmpult  $3,$4,$0
117         stq     $4,0($16)
118         or      $0,$1,$0
119         ret     $31,($26),1
120
121         .end    mpihelp_sub_n
122
123