1dnl  S/390-64 mpn_lshiftc.
2
3dnl  Copyright 2011, 2014 Free Software Foundation, Inc.
4
5dnl  This file is part of the GNU MP Library.
6dnl
7dnl  The GNU MP Library is free software; you can redistribute it and/or modify
8dnl  it under the terms of either:
9dnl
10dnl    * the GNU Lesser General Public License as published by the Free
11dnl      Software Foundation; either version 3 of the License, or (at your
12dnl      option) any later version.
13dnl
14dnl  or
15dnl
16dnl    * the GNU General Public License as published by the Free Software
17dnl      Foundation; either version 2 of the License, or (at your option) any
18dnl      later version.
19dnl
20dnl  or both in parallel, as here.
21dnl
22dnl  The GNU MP Library is distributed in the hope that it will be useful, but
23dnl  WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
24dnl  or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
25dnl  for more details.
26dnl
27dnl  You should have received copies of the GNU General Public License and the
28dnl  GNU Lesser General Public License along with the GNU MP Library.  If not,
29dnl  see https://www.gnu.org/licenses/.
30
31include(`../config.m4')
32
33C            cycles/limb
34C z900		 9
35C z990           3.5
36C z9		 ?
37C z10		 7
38C z196		 ?
39
40C NOTES
41C  * See notes in lshift.asm.
42
43C INPUT PARAMETERS
44define(`rp',	`%r2')
45define(`up',	`%r3')
46define(`n',	`%r4')
47define(`cnt',	`%r5')
48
49define(`tnc',	`%r6')
50
51ASM_START()
52PROLOGUE(mpn_lshiftc)
53	cghi	n, 3
54	jh	L(gt1)
55
56	stmg	%r6, %r8, 48(%r15)
57	larl	%r1, L(tab)-4
58	lcgr	tnc, cnt
59	sllg	n, n, 2
60	lghi	%r8, -1
61	b	0(n,%r1)
62L(tab):	j	L(n1)
63	j	L(n2)
64	j	L(n3)
65
66L(n1):	lg	%r1, 0(up)
67	sllg	%r0, %r1, 0(cnt)
68	xgr	%r0, %r8
69	stg	%r0, 0(rp)
70	srlg	%r2, %r1, 0(tnc)
71	lmg	%r6, %r8, 48(%r15)
72	br	%r14
73
74L(n2):	lg	%r1, 8(up)
75	srlg	%r4, %r1, 0(tnc)
76	sllg	%r0, %r1, 0(cnt)
77	j	L(cj)
78
79L(n3):	lg	%r1, 16(up)
80	srlg	%r4, %r1, 0(tnc)
81	sllg	%r0, %r1, 0(cnt)
82	lg	%r1, 8(up)
83	srlg	%r7, %r1, 0(tnc)
84	ogr	%r7, %r0
85	sllg	%r0, %r1, 0(cnt)
86	xgr	%r7, %r8
87	stg	%r7, 16(rp)
88L(cj):	lg	%r1, 0(up)
89	srlg	%r7, %r1, 0(tnc)
90	ogr	%r7, %r0
91	sllg	%r0, %r1, 0(cnt)
92	xgr	%r7, %r8
93	xgr	%r0, %r8
94	stg	%r7, 8(rp)
95	stg	%r0, 0(rp)
96	lgr	%r2, %r4
97	lmg	%r6, %r8, 48(%r15)
98	br	%r14
99
100L(gt1):	stmg	%r6, %r14, 48(%r15)
101	lcgr	tnc, cnt		C tnc = -cnt
102
103	sllg	%r1, n, 3
104	srlg	%r0, n, 2		C loop count
105
106	agr	up, %r1			C point up at end of U
107	agr	rp, %r1			C point rp at end of R
108	aghi	up, -56
109	aghi	rp, -40
110
111	lghi	%r7, 3
112	lghi	%r14, -1
113	ngr	%r7, n
114	je	L(b0)
115	cghi	%r7, 2
116	jl	L(b1)
117	je	L(b2)
118
119L(b3):	lg	%r7, 48(up)
120	srlg	%r9, %r7, 0(tnc)
121	sllg	%r11, %r7, 0(cnt)
122	lg	%r8, 40(up)
123	lg	%r7, 32(up)
124	srlg	%r4, %r8, 0(tnc)
125	sllg	%r13, %r8, 0(cnt)
126	ogr	%r11, %r4
127	la	rp, 16(rp)
128	xgr	%r11, %r14
129	j	L(lm3)
130
131L(b2):	lg	%r8, 48(up)
132	lg	%r7, 40(up)
133	srlg	%r9, %r8, 0(tnc)
134	sllg	%r13, %r8, 0(cnt)
135	la	rp, 24(rp)
136	la	up, 8(up)
137	j	L(lm2)
138
139L(b1):	lg	%r7, 48(up)
140	srlg	%r9, %r7, 0(tnc)
141	sllg	%r11, %r7, 0(cnt)
142	lg	%r8, 40(up)
143	lg	%r7, 32(up)
144	srlg	%r4, %r8, 0(tnc)
145	sllg	%r10, %r8, 0(cnt)
146	ogr	%r11, %r4
147	la	rp, 32(rp)
148	la	up, 16(up)
149	xgr	%r11, %r14
150	j	L(lm1)
151
152L(b0):	lg	%r8, 48(up)
153	lg	%r7, 40(up)
154	srlg	%r9, %r8, 0(tnc)
155	sllg	%r10, %r8, 0(cnt)
156	la	rp, 40(rp)
157	la	up, 24(up)
158	j	L(lm0)
159
160	ALIGN(8)
161L(top):	srlg	%r4, %r8, 0(tnc)
162	sllg	%r13, %r8, 0(cnt)
163	ogr	%r11, %r4
164	xgr	%r10, %r14
165	xgr	%r11, %r14
166	stg	%r10, 24(rp)
167L(lm3):	stg	%r11, 16(rp)
168L(lm2):	srlg	%r12, %r7, 0(tnc)
169	sllg	%r11, %r7, 0(cnt)
170	lg	%r8, 24(up)
171	lg	%r7, 16(up)
172	ogr	%r13, %r12
173	srlg	%r4, %r8, 0(tnc)
174	sllg	%r10, %r8, 0(cnt)
175	ogr	%r11, %r4
176	xgr	%r13, %r14
177	xgr	%r11, %r14
178	stg	%r13, 8(rp)
179L(lm1):	stg	%r11, 0(rp)
180L(lm0):	srlg	%r12, %r7, 0(tnc)
181	aghi	rp, -32
182	sllg	%r11, %r7, 0(cnt)
183	lg	%r8, 8(up)
184	lg	%r7, 0(up)
185	aghi	up, -32
186	ogr	%r10, %r12
187	brctg	%r0, L(top)
188
189L(end):	srlg	%r4, %r8, 0(tnc)
190	sllg	%r13, %r8, 0(cnt)
191	ogr	%r11, %r4
192	xgr	%r10, %r14
193	xgr	%r11, %r14
194	stg	%r10, 24(rp)
195	stg	%r11, 16(rp)
196	srlg	%r12, %r7, 0(tnc)
197	sllg	%r11, %r7, 0(cnt)
198	ogr	%r13, %r12
199	xgr	%r13, %r14
200	xgr	%r11, %r14
201	stg	%r13, 8(rp)
202	stg	%r11, 0(rp)
203	lgr	%r2, %r9
204
205	lmg	%r6, %r14, 48(%r15)
206	br	%r14
207EPILOGUE()
208