1; 29000 __gmpn_rshift --
2
3; Copyright 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 3 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.  If not, see http://www.gnu.org/licenses/.
19
20
21; INPUT PARAMETERS
22; res_ptr	lr2
23; s1_ptr	lr3
24; s2_ptr	lr4
25; size		lr5
26
27; We use the loadm/storem instructions and operate on chunks of 8
28; limbs/per iteration, until less than 8 limbs remain.
29
30	.sect .lit,lit
31	.text
32	.align	4
33	.global	___gmpn_rshift
34	.word	0x60000
35___gmpn_rshift:
36	load	0,0,gr119,lr3
37	add	lr3,lr3,4
38
39	subr	gr116,lr5,32
40	sll	gr96,gr119,gr116	; return value
41	sub	lr4,lr4,1		; actual loop count is SIZE - 1
42
43	srl	gr117,lr4,3		; chuck count = (actual count) / 8
44	cpeq	gr118,gr117,0
45	jmpt	gr118,Ltail
46	 mtsr	fc,gr116
47
48	sub	gr117,gr117,2		; count for jmpfdec
49
50; Main loop working 8 limbs/iteration.
51Loop:	mtsrim	cr,(8-1)
52	loadm	0,0,gr100,lr3
53	add	lr3,lr3,32
54
55	extract	gr98,gr100,gr119
56	extract	gr99,gr101,gr100
57	extract	gr100,gr102,gr101
58	extract	gr101,gr103,gr102
59	extract	gr102,gr104,gr103
60	extract	gr103,gr105,gr104
61	extract	gr104,gr106,gr105
62	extract	gr105,gr107,gr106
63
64	mtsrim	cr,(8-1)
65	storem	0,0,gr98,lr2
66	add	lr2,lr2,32
67	jmpfdec	gr117,Loop
68	 or	gr119,gr107,0
69
70; Code for the last up-to-7 limbs.
71
72	and	lr4,lr4,(8-1)
73Ltail:	cpeq	gr118,lr4,0
74	jmpt	gr118,Lend
75	 sub	lr4,lr4,2		; count for jmpfdec
76
77Loop2:	load	0,0,gr100,lr3
78	add	lr3,lr3,4
79	extract	gr117,gr100,gr119
80	store	0,0,gr117,lr2
81	add	lr2,lr2,4
82	jmpfdec	lr4,Loop2
83	 or	gr119,gr100,0
84
85Lend:	srl	gr117,gr119,lr5
86	jmpi	lr0
87	 store	0,0,gr117,lr2
88