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