lshift.asm
上传用户:qaz666999
上传日期:2022-08-06
资源大小:2570k
文件大小:3k
源码类别:

数学计算

开发平台:

Unix_Linux

  1. dnl  HP-PA 2.0 mpn_lshift -- Left shift.
  2. dnl  Copyright 1997, 2000, 2002, 2003 Free Software Foundation, Inc.
  3. dnl  This file is part of the GNU MP Library.
  4. dnl  The GNU MP Library is free software; you can redistribute it and/or modify
  5. dnl  it under the terms of the GNU Lesser General Public License as published
  6. dnl  by the Free Software Foundation; either version 3 of the License, or (at
  7. dnl  your option) any later version.
  8. dnl  The GNU MP Library is distributed in the hope that it will be useful, but
  9. dnl  WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
  10. dnl  or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU Lesser General Public
  11. dnl  License for more details.
  12. dnl  You should have received a copy of the GNU Lesser General Public License
  13. dnl  along with the GNU MP Library.  If not, see http://www.gnu.org/licenses/.
  14. dnl  This runs at 1.5 cycles/limb on PA8000 and 1.0 cycles/limb on PA8500.
  15. include(`../config.m4')
  16. dnl  INPUT PARAMETERS
  17. define(`rp',`%r26')
  18. define(`up',`%r25')
  19. define(`n',`%r24')
  20. define(`cnt',`%r23')
  21. ifdef(`HAVE_ABI_2_0w',
  22. `       .level  2.0w
  23. ',`     .level  2.0
  24. ')
  25. PROLOGUE(mpn_lshift)
  26. shladd n, 3, up, up
  27. shladd n, 3, rp, rp
  28. subi 64, cnt, cnt
  29. mtsar cnt
  30. ldd -8(up), %r21
  31. addib,= -1, n, L(end)
  32. shrpd %r0, %r21, %sar, %r29 C compute carry out limb
  33. depw,z n, 31, 3, %r28 C r28 = (size & 7)
  34. sub %r0, n, %r22
  35. depw,z %r22, 28, 3, %r22 C r22 = 8 * (-size & 7)
  36. add up, %r22, up C offset up
  37. blr %r28, %r0 C branch into jump table
  38. add rp, %r22, rp C offset rp
  39. b L(0)
  40. nop
  41. b L(1)
  42. copy %r21, %r20
  43. b L(2)
  44. nop
  45. b L(3)
  46. copy %r21, %r20
  47. b L(4)
  48. nop
  49. b L(5)
  50. copy %r21, %r20
  51. b L(6)
  52. nop
  53. b L(7)
  54. copy %r21, %r20
  55. LDEF(loop)
  56. LDEF(0) ldd -16(up), %r20
  57. shrpd %r21, %r20, %sar, %r21
  58. std %r21, -8(rp)
  59. LDEF(7) ldd -24(up), %r21
  60. shrpd %r20, %r21, %sar, %r20
  61. std %r20, -16(rp)
  62. LDEF(6) ldd -32(up), %r20
  63. shrpd %r21, %r20, %sar, %r21
  64. std %r21, -24(rp)
  65. LDEF(5) ldd -40(up), %r21
  66. shrpd %r20, %r21, %sar, %r20
  67. std %r20, -32(rp)
  68. LDEF(4) ldd -48(up), %r20
  69. shrpd %r21, %r20, %sar, %r21
  70. std %r21, -40(rp)
  71. LDEF(3) ldd -56(up), %r21
  72. shrpd %r20, %r21, %sar, %r20
  73. std %r20, -48(rp)
  74. LDEF(2) ldd -64(up), %r20
  75. shrpd %r21, %r20, %sar, %r21
  76. std %r21, -56(rp)
  77. LDEF(1) ldd -72(up), %r21
  78. ldo -64(up), up
  79. shrpd %r20, %r21, %sar, %r20
  80. std %r20, -64(rp)
  81. addib,> -8, n, L(loop)
  82. ldo -64(rp), rp
  83. LDEF(end)
  84. shrpd %r21, %r0, %sar, %r21
  85. std %r21, -8(rp)
  86. bve (%r2)
  87. ifdef(`HAVE_ABI_2_0w',
  88. ` copy %r29,%r28
  89. ',` extrd,u %r29, 31, 32, %r28
  90. ')
  91. EPILOGUE(mpn_lshift)