1 1.1 mrg dnl HP-PA 2.0 mpn_lshift -- Left shift. 2 1.1 mrg 3 1.1 mrg dnl Copyright 1997, 2000, 2002, 2003 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 32 1.1 mrg dnl This runs at 1.5 cycles/limb on PA8000 and 1.0 cycles/limb on PA8500. 33 1.1 mrg 34 1.1 mrg include(`../config.m4') 35 1.1 mrg 36 1.1 mrg dnl INPUT PARAMETERS 37 1.1 mrg define(`rp',`%r26') 38 1.1 mrg define(`up',`%r25') 39 1.1 mrg define(`n',`%r24') 40 1.1 mrg define(`cnt',`%r23') 41 1.1 mrg 42 1.1 mrg ifdef(`HAVE_ABI_2_0w', 43 1.1 mrg ` .level 2.0w 44 1.1 mrg ',` .level 2.0 45 1.1 mrg ') 46 1.1 mrg PROLOGUE(mpn_lshift) 47 1.1 mrg shladd n, 3, up, up 48 1.1 mrg shladd n, 3, rp, rp 49 1.1 mrg subi 64, cnt, cnt 50 1.1 mrg mtsar cnt 51 1.1 mrg ldd -8(up), %r21 52 1.1 mrg addib,= -1, n, L(end) 53 1.1 mrg shrpd %r0, %r21, %sar, %r29 C compute carry out limb 54 1.1 mrg depw,z n, 31, 3, %r28 C r28 = (size & 7) 55 1.1 mrg sub %r0, n, %r22 56 1.1 mrg depw,z %r22, 28, 3, %r22 C r22 = 8 * (-size & 7) 57 1.1 mrg add up, %r22, up C offset up 58 1.1 mrg blr %r28, %r0 C branch into jump table 59 1.1 mrg add rp, %r22, rp C offset rp 60 1.1 mrg b L(0) 61 1.1 mrg nop 62 1.1 mrg b L(1) 63 1.1 mrg copy %r21, %r20 64 1.1 mrg b L(2) 65 1.1 mrg nop 66 1.1 mrg b L(3) 67 1.1 mrg copy %r21, %r20 68 1.1 mrg b L(4) 69 1.1 mrg nop 70 1.1 mrg b L(5) 71 1.1 mrg copy %r21, %r20 72 1.1 mrg b L(6) 73 1.1 mrg nop 74 1.1 mrg b L(7) 75 1.1 mrg copy %r21, %r20 76 1.1 mrg 77 1.1 mrg LDEF(loop) 78 1.1 mrg LDEF(0) ldd -16(up), %r20 79 1.1 mrg shrpd %r21, %r20, %sar, %r21 80 1.1 mrg std %r21, -8(rp) 81 1.1 mrg LDEF(7) ldd -24(up), %r21 82 1.1 mrg shrpd %r20, %r21, %sar, %r20 83 1.1 mrg std %r20, -16(rp) 84 1.1 mrg LDEF(6) ldd -32(up), %r20 85 1.1 mrg shrpd %r21, %r20, %sar, %r21 86 1.1 mrg std %r21, -24(rp) 87 1.1 mrg LDEF(5) ldd -40(up), %r21 88 1.1 mrg shrpd %r20, %r21, %sar, %r20 89 1.1 mrg std %r20, -32(rp) 90 1.1 mrg LDEF(4) ldd -48(up), %r20 91 1.1 mrg shrpd %r21, %r20, %sar, %r21 92 1.1 mrg std %r21, -40(rp) 93 1.1 mrg LDEF(3) ldd -56(up), %r21 94 1.1 mrg shrpd %r20, %r21, %sar, %r20 95 1.1 mrg std %r20, -48(rp) 96 1.1 mrg LDEF(2) ldd -64(up), %r20 97 1.1 mrg shrpd %r21, %r20, %sar, %r21 98 1.1 mrg std %r21, -56(rp) 99 1.1 mrg LDEF(1) ldd -72(up), %r21 100 1.1 mrg ldo -64(up), up 101 1.1 mrg shrpd %r20, %r21, %sar, %r20 102 1.1 mrg std %r20, -64(rp) 103 1.1 mrg addib,> -8, n, L(loop) 104 1.1 mrg ldo -64(rp), rp 105 1.1 mrg 106 1.1 mrg LDEF(end) 107 1.1 mrg shrpd %r21, %r0, %sar, %r21 108 1.1 mrg std %r21, -8(rp) 109 1.1 mrg bve (%r2) 110 1.1 mrg ifdef(`HAVE_ABI_2_0w', 111 1.1 mrg ` copy %r29,%r28 112 1.1 mrg ',` extrd,u %r29, 31, 32, %r28 113 1.1 mrg ') 114 1.1 mrg EPILOGUE(mpn_lshift) 115