Tizen 2.1 base
[external/gmp.git] / mpn / pa32 / hppa1_1 / pa7100 / rshift.asm
1 dnl  HP-PA  mpn_rshift -- Shift a number right.
2 dnl  Optimized for the PA7100, where is runs at 3.25 cycles/limb.
3
4 dnl  Copyright 1992, 1994, 2000, 2001, 2002, 2003 Free Software Foundation,
5 dnl  Inc.
6
7 dnl  This file is part of the GNU MP Library.
8
9 dnl  The GNU MP Library is free software; you can redistribute it and/or modify
10 dnl  it under the terms of the GNU Lesser General Public License as published
11 dnl  by the Free Software Foundation; either version 3 of the License, or (at
12 dnl  your option) any later version.
13
14 dnl  The GNU MP Library is distributed in the hope that it will be useful, but
15 dnl  WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
16 dnl  or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU Lesser General Public
17 dnl  License for more details.
18
19 dnl  You should have received a copy of the GNU Lesser General Public License
20 dnl  along with the GNU MP Library.  If not, see http://www.gnu.org/licenses/.
21
22 include(`../config.m4')
23
24 C INPUT PARAMETERS
25 C res_ptr       r26
26 C s_ptr         r25
27 C size          r24
28 C cnt           r23
29
30 ASM_START()
31 PROLOGUE(mpn_rshift)
32         ldws,ma         4(0,%r25),%r22
33         mtsar           %r23
34         addib,=         -1,%r24,L(0004)
35         vshd            %r22,%r0,%r28           C compute carry out limb
36         ldws,ma         4(0,%r25),%r29
37         addib,<=        -5,%r24,L(rest)
38         vshd            %r29,%r22,%r20
39
40 LDEF(loop)
41         ldws,ma         4(0,%r25),%r22
42         stws,ma         %r20,4(0,%r26)
43         vshd            %r22,%r29,%r20
44         ldws,ma         4(0,%r25),%r29
45         stws,ma         %r20,4(0,%r26)
46         vshd            %r29,%r22,%r20
47         ldws,ma         4(0,%r25),%r22
48         stws,ma         %r20,4(0,%r26)
49         vshd            %r22,%r29,%r20
50         ldws,ma         4(0,%r25),%r29
51         stws,ma         %r20,4(0,%r26)
52         addib,>         -4,%r24,L(loop)
53         vshd            %r29,%r22,%r20
54
55 LDEF(rest)
56         addib,=         4,%r24,L(end1)
57         nop
58
59 LDEF(eloop)
60         ldws,ma         4(0,%r25),%r22
61         stws,ma         %r20,4(0,%r26)
62         addib,<=        -1,%r24,L(end2)
63         vshd            %r22,%r29,%r20
64         ldws,ma         4(0,%r25),%r29
65         stws,ma         %r20,4(0,%r26)
66         addib,>         -1,%r24,L(eloop)
67         vshd            %r29,%r22,%r20
68
69 LDEF(end1)
70         stws,ma         %r20,4(0,%r26)
71         vshd            %r0,%r29,%r20
72         bv              0(%r2)
73         stw             %r20,0(0,%r26)
74
75 LDEF(end2)
76         stws,ma         %r20,4(0,%r26)
77
78 LDEF(0004)
79         vshd            %r0,%r22,%r20
80         bv              0(%r2)
81         stw             %r20,0(0,%r26)
82 EPILOGUE()