FIX BUILD (with GHC 6.2.x): System.Directory.Internals is no more
[ghc-hetmet.git] / rts / gmp / mpn / a29k / rshift.s
1 ; 29000 __gmpn_rshift --
2
3 ; Copyright (C) 1992, 1994, 2000 Free Software Foundation, Inc.
4
5 ; This file is part of the GNU MP Library.
6
7 ; The GNU MP Library is free software; you can redistribute it and/or modify
8 ; it under the terms of the GNU Lesser General Public License as published by
9 ; the Free Software Foundation; either version 2.1 of the License, or (at your
10 ; option) any later version.
11
12 ; The GNU MP Library is distributed in the hope that it will be useful, but
13 ; WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
14 ; or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU Lesser General Public
15 ; License for more details.
16
17 ; You should have received a copy of the GNU Lesser General Public License
18 ; along with the GNU MP Library; see the file COPYING.LIB.  If not, write to
19 ; the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston,
20 ; MA 02111-1307, USA.
21
22
23 ; INPUT PARAMETERS
24 ; res_ptr       lr2
25 ; s1_ptr        lr3
26 ; s2_ptr        lr4
27 ; size          lr5
28
29 ; We use the loadm/storem instructions and operate on chunks of 8
30 ; limbs/per iteration, until less than 8 limbs remain.
31
32         .sect .lit,lit
33         .text
34         .align  4
35         .global ___gmpn_rshift
36         .word   0x60000
37 ___gmpn_rshift:
38         load    0,0,gr119,lr3
39         add     lr3,lr3,4
40
41         subr    gr116,lr5,32
42         sll     gr96,gr119,gr116        ; return value
43         sub     lr4,lr4,1               ; actual loop count is SIZE - 1
44
45         srl     gr117,lr4,3             ; chuck count = (actual count) / 8
46         cpeq    gr118,gr117,0
47         jmpt    gr118,Ltail
48          mtsr   fc,gr116
49
50         sub     gr117,gr117,2           ; count for jmpfdec
51
52 ; Main loop working 8 limbs/iteration.
53 Loop:   mtsrim  cr,(8-1)
54         loadm   0,0,gr100,lr3
55         add     lr3,lr3,32
56
57         extract gr98,gr100,gr119
58         extract gr99,gr101,gr100
59         extract gr100,gr102,gr101
60         extract gr101,gr103,gr102
61         extract gr102,gr104,gr103
62         extract gr103,gr105,gr104
63         extract gr104,gr106,gr105
64         extract gr105,gr107,gr106
65
66         mtsrim  cr,(8-1)
67         storem  0,0,gr98,lr2
68         add     lr2,lr2,32
69         jmpfdec gr117,Loop
70          or     gr119,gr107,0
71
72 ; Code for the last up-to-7 limbs.
73
74         and     lr4,lr4,(8-1)
75 Ltail:  cpeq    gr118,lr4,0
76         jmpt    gr118,Lend
77          sub    lr4,lr4,2               ; count for jmpfdec
78
79 Loop2:  load    0,0,gr100,lr3
80         add     lr3,lr3,4
81         extract gr117,gr100,gr119
82         store   0,0,gr117,lr2
83         add     lr2,lr2,4
84         jmpfdec lr4,Loop2
85          or     gr119,gr100,0
86
87 Lend:   srl     gr117,gr119,lr5
88         jmpi    lr0
89          store  0,0,gr117,lr2