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