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