Switched to GPLv3.
[gnupg.git] / mpi / mips3 / mpih-rshift.S
1 /* mips3    rshift
2  *
3  *      Copyright (C) 1995, 1998, 2000
4  *                    2001 Free Software Foundation, Inc.
5  *
6  * This file is part of GnuPG.
7  *
8  * GnuPG is free software; you can redistribute it and/or modify
9  * it under the terms of the GNU General Public License as published by
10  * the Free Software Foundation; either version 3 of the License, or
11  * (at your option) any later version.
12  *
13  * GnuPG is distributed in the hope that it will be useful,
14  * but WITHOUT ANY WARRANTY; without even the implied warranty of
15  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16  * GNU General Public License for more details.
17  *
18  * You should have received a copy of the GNU General Public License
19  * along with this program; if not, see <http://www.gnu.org/licenses/>.
20  */
21
22 /*******************
23  * mpi_limb_t
24  * mpihelp_rshift( mpi_ptr_t wp,        ($4)
25  *                 mpi_ptr_t up,        ($5)
26  *                 mpi_size_t usize,    ($6)
27  *                 unsigned cnt)        ($7)
28  */
29
30         .text
31         .align  2
32         .globl  mpihelp_rshift
33         .ent    mpihelp_rshift
34 mpihelp_rshift:
35         .set    noreorder
36         .set    nomacro
37
38         ld      $10,0($5)       # load first limb
39         dsubu   $13,$0,$7
40         daddiu  $6,$6,-1
41         and     $9,$6,4-1       # number of limbs in first loop
42         beq     $9,$0,.L0       # if multiple of 4 limbs, skip first loop
43          dsll   $2,$10,$13      # compute function result
44
45         dsubu   $6,$6,$9
46
47 .Loop0: ld      $3,8($5)
48         daddiu  $4,$4,8
49         daddiu  $5,$5,8
50         daddiu  $9,$9,-1
51         dsrl    $11,$10,$7
52         dsll    $12,$3,$13
53         move    $10,$3
54         or      $8,$11,$12
55         bne     $9,$0,.Loop0
56          sd     $8,-8($4)
57
58 .L0:    beq     $6,$0,.Lend
59          nop
60
61 .Loop:  ld      $3,8($5)
62         daddiu  $4,$4,32
63         daddiu  $6,$6,-4
64         dsrl    $11,$10,$7
65         dsll    $12,$3,$13
66
67         ld      $10,16($5)
68         dsrl    $14,$3,$7
69         or      $8,$11,$12
70         sd      $8,-32($4)
71         dsll    $9,$10,$13
72
73         ld      $3,24($5)
74         dsrl    $11,$10,$7
75         or      $8,$14,$9
76         sd      $8,-24($4)
77         dsll    $12,$3,$13
78
79         ld      $10,32($5)
80         dsrl    $14,$3,$7
81         or      $8,$11,$12
82         sd      $8,-16($4)
83         dsll    $9,$10,$13
84
85         daddiu  $5,$5,32
86         or      $8,$14,$9
87         bgtz    $6,.Loop
88          sd     $8,-8($4)
89
90 .Lend:  dsrl    $8,$10,$7
91         j       $31
92         sd      $8,0($4)
93         .end    mpihelp_rshift
94