1 1.1 mrg dnl S/390-64 mpn_sublsh1_n 2 1.1 mrg 3 1.1 mrg dnl Copyright 2011 Free Software Foundation, Inc. 4 1.1 mrg 5 1.1 mrg dnl This file is part of the GNU MP Library. 6 1.1.1.2 mrg dnl 7 1.1 mrg dnl The GNU MP Library is free software; you can redistribute it and/or modify 8 1.1.1.2 mrg dnl it under the terms of either: 9 1.1.1.2 mrg dnl 10 1.1.1.2 mrg dnl * the GNU Lesser General Public License as published by the Free 11 1.1.1.2 mrg dnl Software Foundation; either version 3 of the License, or (at your 12 1.1.1.2 mrg dnl option) any later version. 13 1.1.1.2 mrg dnl 14 1.1.1.2 mrg dnl or 15 1.1.1.2 mrg dnl 16 1.1.1.2 mrg dnl * the GNU General Public License as published by the Free Software 17 1.1.1.2 mrg dnl Foundation; either version 2 of the License, or (at your option) any 18 1.1.1.2 mrg dnl later version. 19 1.1.1.2 mrg dnl 20 1.1.1.2 mrg dnl or both in parallel, as here. 21 1.1.1.2 mrg dnl 22 1.1 mrg dnl The GNU MP Library is distributed in the hope that it will be useful, but 23 1.1 mrg dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY 24 1.1.1.2 mrg dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 25 1.1.1.2 mrg dnl for more details. 26 1.1.1.2 mrg dnl 27 1.1.1.2 mrg dnl You should have received copies of the GNU General Public License and the 28 1.1.1.2 mrg dnl GNU Lesser General Public License along with the GNU MP Library. If not, 29 1.1.1.2 mrg dnl see https://www.gnu.org/licenses/. 30 1.1 mrg 31 1.1 mrg include(`../config.m4') 32 1.1 mrg 33 1.1 mrg C cycles/limb 34 1.1 mrg C z900 10 35 1.1 mrg C z990 5 36 1.1 mrg C z9 ? 37 1.1.1.2 mrg C z10 12 38 1.1 mrg C z196 ? 39 1.1 mrg 40 1.1 mrg C TODO 41 1.1 mrg C * Optimise for small n 42 1.1 mrg C * Compute RETVAL for sublsh1_n less stupidly 43 1.1 mrg 44 1.1 mrg C INPUT PARAMETERS 45 1.1 mrg define(`rp', `%r2') 46 1.1 mrg define(`up', `%r3') 47 1.1 mrg define(`vp', `%r4') 48 1.1 mrg define(`n', `%r5') 49 1.1 mrg 50 1.1 mrg ifdef(`OPERATION_addlsh1_n',` 51 1.1 mrg define(ADSBR, algr) 52 1.1 mrg define(ADSBCR, alcgr) 53 1.1 mrg define(INITCY, `lghi %r13, -1') 54 1.1 mrg define(RETVAL, `la %r2, 2(%r1,%r13)') 55 1.1 mrg define(func, mpn_addlsh1_n) 56 1.1 mrg ') 57 1.1 mrg ifdef(`OPERATION_sublsh1_n',` 58 1.1 mrg define(ADSBR, slgr) 59 1.1 mrg define(ADSBCR, slbgr) 60 1.1 mrg define(INITCY, `lghi %r13, 0') 61 1.1 mrg define(RETVAL,`dnl 62 1.1 mrg slgr %r1, %r13 63 1.1 mrg lghi %r2, 1 64 1.1 mrg algr %r2, %r1') 65 1.1 mrg define(func, mpn_sublsh1_n) 66 1.1 mrg ') 67 1.1 mrg 68 1.1 mrg ASM_START() 69 1.1 mrg PROLOGUE(mpn_sublsh1_n) 70 1.1 mrg stmg %r6, %r13, 48(%r15) 71 1.1 mrg 72 1.1 mrg aghi n, 3 73 1.1 mrg lghi %r7, 3 74 1.1 mrg srlg %r0, n, 2 75 1.1 mrg ngr %r7, n C n mod 4 76 1.1 mrg je L(b1) 77 1.1 mrg cghi %r7, 2 78 1.1 mrg jl L(b2) 79 1.1 mrg jne L(b0) 80 1.1 mrg 81 1.1 mrg L(b3): lmg %r5, %r7, 0(up) 82 1.1 mrg la up, 24(up) 83 1.1 mrg lmg %r9, %r11, 0(vp) 84 1.1 mrg la vp, 24(vp) 85 1.1 mrg 86 1.1 mrg algr %r9, %r9 87 1.1 mrg alcgr %r10, %r10 88 1.1 mrg alcgr %r11, %r11 89 1.1 mrg slbgr %r1, %r1 90 1.1 mrg 91 1.1 mrg ADSBR %r5, %r9 92 1.1 mrg ADSBCR %r6, %r10 93 1.1 mrg ADSBCR %r7, %r11 94 1.1 mrg slbgr %r13, %r13 95 1.1 mrg 96 1.1 mrg stmg %r5, %r7, 0(rp) 97 1.1 mrg la rp, 24(rp) 98 1.1 mrg brctg %r0, L(top) 99 1.1 mrg j L(end) 100 1.1 mrg 101 1.1 mrg L(b0): lghi %r1, -1 102 1.1 mrg INITCY 103 1.1 mrg j L(top) 104 1.1 mrg 105 1.1 mrg L(b1): lg %r5, 0(up) 106 1.1 mrg la up, 8(up) 107 1.1 mrg lg %r9, 0(vp) 108 1.1 mrg la vp, 8(vp) 109 1.1 mrg 110 1.1 mrg algr %r9, %r9 111 1.1 mrg slbgr %r1, %r1 112 1.1 mrg ADSBR %r5, %r9 113 1.1 mrg slbgr %r13, %r13 114 1.1 mrg 115 1.1 mrg stg %r5, 0(rp) 116 1.1 mrg la rp, 8(rp) 117 1.1 mrg brctg %r0, L(top) 118 1.1 mrg j L(end) 119 1.1 mrg 120 1.1 mrg L(b2): lmg %r5, %r6, 0(up) 121 1.1 mrg la up, 16(up) 122 1.1 mrg lmg %r9, %r10, 0(vp) 123 1.1 mrg la vp, 16(vp) 124 1.1 mrg 125 1.1 mrg algr %r9, %r9 126 1.1 mrg alcgr %r10, %r10 127 1.1 mrg slbgr %r1, %r1 128 1.1 mrg 129 1.1 mrg ADSBR %r5, %r9 130 1.1 mrg ADSBCR %r6, %r10 131 1.1 mrg slbgr %r13, %r13 132 1.1 mrg 133 1.1 mrg stmg %r5, %r6, 0(rp) 134 1.1 mrg la rp, 16(rp) 135 1.1 mrg brctg %r0, L(top) 136 1.1 mrg j L(end) 137 1.1 mrg 138 1.1 mrg L(top): lmg %r9, %r12, 0(vp) 139 1.1 mrg la vp, 32(vp) 140 1.1 mrg 141 1.1 mrg aghi %r1, 1 C restore carry 142 1.1 mrg 143 1.1 mrg alcgr %r9, %r9 144 1.1 mrg alcgr %r10, %r10 145 1.1 mrg alcgr %r11, %r11 146 1.1 mrg alcgr %r12, %r12 147 1.1 mrg 148 1.1 mrg slbgr %r1, %r1 C save carry 149 1.1 mrg 150 1.1 mrg lmg %r5, %r8, 0(up) 151 1.1 mrg la up, 32(up) 152 1.1 mrg 153 1.1 mrg aghi %r13, 1 C restore carry 154 1.1 mrg 155 1.1 mrg ADSBCR %r5, %r9 156 1.1 mrg ADSBCR %r6, %r10 157 1.1 mrg ADSBCR %r7, %r11 158 1.1 mrg ADSBCR %r8, %r12 159 1.1 mrg 160 1.1 mrg slbgr %r13, %r13 C save carry 161 1.1 mrg 162 1.1 mrg stmg %r5, %r8, 0(rp) 163 1.1 mrg la rp, 32(rp) 164 1.1 mrg brctg %r0, L(top) 165 1.1 mrg 166 1.1 mrg L(end): RETVAL 167 1.1 mrg lmg %r6, %r13, 48(%r15) 168 1.1 mrg br %r14 169 1.1 mrg EPILOGUE() 170