github.com/aergoio/aergo@v1.3.1/libtool/src/gmp-6.1.2/mpn/s390_32/esame/aorslsh1_n.asm (about) 1 dnl S/390-32 mpn_addlsh1_n 2 3 dnl Copyright 2011 Free Software Foundation, Inc. 4 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/. 30 31 include(`../config.m4') 32 33 C cycles/limb 34 C z900 9.25 35 C z990 5 36 C z9 ? 37 C z10 ? 38 C z196 ? 39 40 C TODO 41 C * Optimise for small n 42 C * Compute RETVAL for sublsh1_n less stupidly 43 44 C INPUT PARAMETERS 45 define(`rp', `%r2') 46 define(`up', `%r3') 47 define(`vp', `%r4') 48 define(`n', `%r5') 49 50 ifdef(`OPERATION_addlsh1_n',` 51 define(ADDSUBC, alr) 52 define(ADDSUBE, alcr) 53 define(INITCY, `lhi %r13, -1') 54 define(RETVAL, `alr %r1, %r13 55 lhi %r2, 2 56 alr %r2, %r1') 57 define(func, mpn_addlsh1_n) 58 ') 59 ifdef(`OPERATION_sublsh1_n',` 60 define(ADDSUBC, slr) 61 define(ADDSUBE, slbr) 62 define(INITCY, `lhi %r13, 0') 63 define(RETVAL, `slr %r1, %r13 64 lhi %r2, 1 65 alr %r2, %r1') 66 define(func, mpn_sublsh1_n) 67 ') 68 69 MULFUNC_PROLOGUE(mpn_addlsh1_n mpn_sublsh1_n) 70 71 ASM_START() 72 PROLOGUE(func) 73 stm %r6, %r13, 24(%r15) 74 75 la %r0, 3(n) 76 lhi %r7, 3 77 srl %r0, 2 78 nr %r7, n C n mod 4 79 je L(b0) 80 chi %r7, 2 81 jl L(b1) 82 je L(b2) 83 84 L(b3): lm %r5, %r7, 0(up) 85 la up, 12(up) 86 lm %r9, %r11, 0(vp) 87 la vp, 12(vp) 88 89 alr %r9, %r9 90 alcr %r10, %r10 91 alcr %r11, %r11 92 slbr %r1, %r1 93 94 ADDSUBC %r5, %r9 95 ADDSUBE %r6, %r10 96 ADDSUBE %r7, %r11 97 slbr %r13, %r13 98 99 stm %r5, %r7, 0(rp) 100 la rp, 12(rp) 101 brct %r0, L(top) 102 j L(end) 103 104 L(b0): lhi %r1, -1 105 INITCY 106 j L(top) 107 108 L(b1): l %r5, 0(up) 109 la up, 4(up) 110 l %r9, 0(vp) 111 la vp, 4(vp) 112 113 alr %r9, %r9 114 slbr %r1, %r1 115 ADDSUBC %r5, %r9 116 slbr %r13, %r13 117 118 st %r5, 0(rp) 119 la rp, 4(rp) 120 brct %r0, L(top) 121 j L(end) 122 123 L(b2): lm %r5, %r6, 0(up) 124 la up, 8(up) 125 lm %r9, %r10, 0(vp) 126 la vp, 8(vp) 127 128 alr %r9, %r9 129 alcr %r10, %r10 130 slbr %r1, %r1 131 132 ADDSUBC %r5, %r9 133 ADDSUBE %r6, %r10 134 slbr %r13, %r13 135 136 stm %r5, %r6, 0(rp) 137 la rp, 8(rp) 138 brct %r0, L(top) 139 j L(end) 140 141 L(top): lm %r9, %r12, 0(vp) 142 la vp, 16(vp) 143 144 ahi %r1, 1 C restore carry 145 146 alcr %r9, %r9 147 alcr %r10, %r10 148 alcr %r11, %r11 149 alcr %r12, %r12 150 151 slbr %r1, %r1 C save carry 152 153 lm %r5, %r8, 0(up) 154 la up, 16(up) 155 156 ahi %r13, 1 C restore carry 157 158 ADDSUBE %r5, %r9 159 ADDSUBE %r6, %r10 160 ADDSUBE %r7, %r11 161 ADDSUBE %r8, %r12 162 163 slbr %r13, %r13 164 165 stm %r5, %r8, 0(rp) 166 la rp, 16(rp) 167 brct %r0, L(top) 168 169 L(end): 170 RETVAL 171 lm %r6, %r13, 24(%r15) 172 br %r14 173 EPILOGUE()