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