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