1 1.1 mrg dnl S/390-32 mpn_rshift. 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 6 35 1.1 mrg C z990 3 36 1.1 mrg C z9 ? 37 1.1 mrg C z10 ? 38 1.1 mrg C z196 ? 39 1.1 mrg 40 1.1 mrg C TODO 41 1.1 mrg C * 42 1.1 mrg 43 1.1 mrg C INPUT PARAMETERS 44 1.1 mrg define(`rp', `%r2') 45 1.1 mrg define(`up', `%r3') 46 1.1 mrg define(`n', `%r4') 47 1.1 mrg define(`cnt', `%r5') 48 1.1 mrg 49 1.1 mrg ASM_START() 50 1.1 mrg PROLOGUE(mpn_rshift) 51 1.1 mrg stm %r6, %r12, 24(%r15) 52 1.1 mrg lhi %r8, 32 53 1.1 mrg sr %r8, cnt 54 1.1 mrg l %r12, 0(up) 55 1.1 mrg sll %r12, 0(%r8) C return value 56 1.1 mrg lhi %r7, 3 57 1.1 mrg nr %r7, n 58 1.1 mrg srl n, 2 59 1.1 mrg je L(b0) 60 1.1 mrg chi %r7, 2 61 1.1 mrg jl L(b1) 62 1.1 mrg je L(b2) 63 1.1 mrg 64 1.1 mrg L(b3): l %r11, 0(up) 65 1.1 mrg l %r10, 4(up) 66 1.1 mrg l %r8, 8(up) 67 1.1 mrg ahi up, 8 68 1.1 mrg lr %r9, %r10 69 1.1 mrg srdl %r10, 0(cnt) 70 1.1 mrg srdl %r8, 0(cnt) 71 1.1 mrg st %r11, 0(rp) 72 1.1 mrg st %r9, 4(rp) 73 1.1 mrg ahi rp, 8 74 1.1 mrg ltr n, n 75 1.1 mrg je L(end) 76 1.1 mrg j L(top) 77 1.1 mrg 78 1.1 mrg L(b2): l %r11, 0(up) 79 1.1 mrg l %r10, 4(up) 80 1.1 mrg ahi up, 4 81 1.1 mrg srdl %r10, 0(cnt) 82 1.1 mrg st %r11, 0(rp) 83 1.1 mrg ahi rp, 4 84 1.1 mrg ltr n, n 85 1.1 mrg je L(end) 86 1.1 mrg j L(top) 87 1.1 mrg 88 1.1 mrg L(b1): ltr n, n 89 1.1 mrg je L(end) 90 1.1 mrg j L(top) 91 1.1 mrg 92 1.1 mrg L(b0): l %r11, 0(up) 93 1.1 mrg l %r9, 4(up) 94 1.1 mrg l %r7, 8(up) 95 1.1 mrg l %r1, 12(up) 96 1.1 mrg ahi up, 12 97 1.1 mrg lr %r10, %r9 98 1.1 mrg lr %r8, %r7 99 1.1 mrg lr %r6, %r1 100 1.1 mrg srdl %r10, 0(cnt) 101 1.1 mrg srdl %r8, 0(cnt) 102 1.1 mrg srdl %r6, 0(cnt) 103 1.1 mrg st %r11, 0(rp) 104 1.1 mrg st %r9, 4(rp) 105 1.1 mrg st %r7, 8(rp) 106 1.1 mrg ahi rp, 12 107 1.1 mrg ahi n, -1 108 1.1 mrg je L(end) 109 1.1 mrg 110 1.1 mrg ALIGN(8) 111 1.1 mrg L(top): l %r11, 0(up) 112 1.1 mrg l %r9, 4(up) 113 1.1 mrg l %r7, 8(up) 114 1.1 mrg l %r1, 12(up) 115 1.1 mrg l %r0, 16(up) 116 1.1 mrg lr %r10, %r9 117 1.1 mrg lr %r8, %r7 118 1.1 mrg lr %r6, %r1 119 1.1 mrg ahi up, 16 120 1.1 mrg srdl %r10, 0(cnt) 121 1.1 mrg srdl %r8, 0(cnt) 122 1.1 mrg srdl %r6, 0(cnt) 123 1.1 mrg srdl %r0, 0(cnt) 124 1.1 mrg st %r11, 0(rp) 125 1.1 mrg st %r9, 4(rp) 126 1.1 mrg st %r7, 8(rp) 127 1.1 mrg st %r1, 12(rp) 128 1.1 mrg ahi rp, 16 129 1.1 mrg brct n, L(top) 130 1.1 mrg 131 1.1 mrg L(end): l %r11, 0(up) 132 1.1 mrg srl %r11, 0(cnt) 133 1.1 mrg st %r11, 0(rp) 134 1.1 mrg 135 1.1 mrg lr %r2, %r12 136 1.1 mrg lm %r6, %r12, 24(%r15) 137 1.1 mrg br %r14 138 1.1 mrg EPILOGUE() 139