1 1.1 mrg dnl Alpha mpn_rshift -- Shift a number right. 2 1.1 mrg 3 1.1 mrg dnl Copyright 1994, 1995, 2000, 2009 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 EV4: ? 35 1.1 mrg C EV5: 3.25 36 1.1 mrg C EV6: 1.75 37 1.1 mrg 38 1.1 mrg C INPUT PARAMETERS 39 1.1 mrg C rp r16 40 1.1 mrg C up r17 41 1.1 mrg C n r18 42 1.1 mrg C cnt r19 43 1.1 mrg 44 1.1 mrg 45 1.1 mrg ASM_START() 46 1.1 mrg PROLOGUE(mpn_rshift) 47 1.1 mrg ldq r4,0(r17) C load first limb 48 1.1 mrg subq r31,r19,r20 49 1.1 mrg subq r18,1,r18 50 1.1 mrg and r18,4-1,r28 C number of limbs in first loop 51 1.1 mrg sll r4,r20,r0 C compute function result 52 1.1 mrg 53 1.1 mrg beq r28,L(L0) 54 1.1 mrg subq r18,r28,r18 55 1.1 mrg 56 1.1 mrg ALIGN(8) 57 1.1 mrg L(top0): 58 1.1 mrg ldq r3,8(r17) 59 1.1 mrg addq r16,8,r16 60 1.1 mrg srl r4,r19,r5 61 1.1 mrg addq r17,8,r17 62 1.1 mrg subq r28,1,r28 63 1.1 mrg sll r3,r20,r6 64 1.1 mrg bis r3,r3,r4 65 1.1 mrg bis r5,r6,r8 66 1.1 mrg stq r8,-8(r16) 67 1.1 mrg bne r28,L(top0) 68 1.1 mrg 69 1.1 mrg L(L0): srl r4,r19,r24 70 1.1 mrg beq r18,L(end) 71 1.1 mrg C warm up phase 1 72 1.1 mrg ldq r1,8(r17) 73 1.1 mrg subq r18,4,r18 74 1.1 mrg ldq r2,16(r17) 75 1.1 mrg ldq r3,24(r17) 76 1.1 mrg ldq r4,32(r17) 77 1.1 mrg C warm up phase 2 78 1.1 mrg sll r1,r20,r7 79 1.1 mrg srl r1,r19,r21 80 1.1 mrg sll r2,r20,r8 81 1.1 mrg beq r18,L(end1) 82 1.1 mrg ldq r1,40(r17) 83 1.1 mrg srl r2,r19,r22 84 1.1 mrg ldq r2,48(r17) 85 1.1 mrg sll r3,r20,r5 86 1.1 mrg bis r7,r24,r7 87 1.1 mrg srl r3,r19,r23 88 1.1 mrg bis r8,r21,r8 89 1.1 mrg sll r4,r20,r6 90 1.1 mrg ldq r3,56(r17) 91 1.1 mrg srl r4,r19,r24 92 1.1 mrg ldq r4,64(r17) 93 1.1 mrg subq r18,4,r18 94 1.1 mrg beq r18,L(end2) 95 1.1 mrg ALIGN(16) 96 1.1 mrg C main loop 97 1.1 mrg L(top): stq r7,0(r16) 98 1.1 mrg bis r5,r22,r5 99 1.1 mrg stq r8,8(r16) 100 1.1 mrg bis r6,r23,r6 101 1.1 mrg 102 1.1 mrg sll r1,r20,r7 103 1.1 mrg subq r18,4,r18 104 1.1 mrg srl r1,r19,r21 105 1.1 mrg unop C ldq r31,-96(r17) 106 1.1 mrg 107 1.1 mrg sll r2,r20,r8 108 1.1 mrg ldq r1,72(r17) 109 1.1 mrg srl r2,r19,r22 110 1.1 mrg ldq r2,80(r17) 111 1.1 mrg 112 1.1 mrg stq r5,16(r16) 113 1.1 mrg bis r7,r24,r7 114 1.1 mrg stq r6,24(r16) 115 1.1 mrg bis r8,r21,r8 116 1.1 mrg 117 1.1 mrg sll r3,r20,r5 118 1.1 mrg unop C ldq r31,-96(r17) 119 1.1 mrg srl r3,r19,r23 120 1.1 mrg addq r16,32,r16 121 1.1 mrg 122 1.1 mrg sll r4,r20,r6 123 1.1 mrg ldq r3,88(r17) 124 1.1 mrg srl r4,r19,r24 125 1.1 mrg ldq r4,96(r17) 126 1.1 mrg 127 1.1 mrg addq r17,32,r17 128 1.1 mrg bne r18,L(top) 129 1.1 mrg C cool down phase 2/1 130 1.1 mrg L(end2): 131 1.1 mrg stq r7,0(r16) 132 1.1 mrg bis r5,r22,r5 133 1.1 mrg stq r8,8(r16) 134 1.1 mrg bis r6,r23,r6 135 1.1 mrg sll r1,r20,r7 136 1.1 mrg srl r1,r19,r21 137 1.1 mrg sll r2,r20,r8 138 1.1 mrg srl r2,r19,r22 139 1.1 mrg stq r5,16(r16) 140 1.1 mrg bis r7,r24,r7 141 1.1 mrg stq r6,24(r16) 142 1.1 mrg bis r8,r21,r8 143 1.1 mrg sll r3,r20,r5 144 1.1 mrg srl r3,r19,r23 145 1.1 mrg sll r4,r20,r6 146 1.1 mrg srl r4,r19,r24 147 1.1 mrg C cool down phase 2/2 148 1.1 mrg stq r7,32(r16) 149 1.1 mrg bis r5,r22,r5 150 1.1 mrg stq r8,40(r16) 151 1.1 mrg bis r6,r23,r6 152 1.1 mrg stq r5,48(r16) 153 1.1 mrg stq r6,56(r16) 154 1.1 mrg C cool down phase 2/3 155 1.1 mrg stq r24,64(r16) 156 1.1 mrg ret r31,(r26),1 157 1.1 mrg 158 1.1 mrg C cool down phase 1/1 159 1.1 mrg L(end1): 160 1.1 mrg srl r2,r19,r22 161 1.1 mrg sll r3,r20,r5 162 1.1 mrg bis r7,r24,r7 163 1.1 mrg srl r3,r19,r23 164 1.1 mrg bis r8,r21,r8 165 1.1 mrg sll r4,r20,r6 166 1.1 mrg srl r4,r19,r24 167 1.1 mrg C cool down phase 1/2 168 1.1 mrg stq r7,0(r16) 169 1.1 mrg bis r5,r22,r5 170 1.1 mrg stq r8,8(r16) 171 1.1 mrg bis r6,r23,r6 172 1.1 mrg stq r5,16(r16) 173 1.1 mrg stq r6,24(r16) 174 1.1 mrg stq r24,32(r16) 175 1.1 mrg ret r31,(r26),1 176 1.1 mrg 177 1.1 mrg L(end): stq r24,0(r16) 178 1.1 mrg ret r31,(r26),1 179 1.1 mrg EPILOGUE(mpn_rshift) 180 1.1 mrg ASM_END() 181