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

数学计算

开发平台:

Unix_Linux

  1. dnl  HP-PA 2.0 mpn_rshift -- Right 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_rshift)
  26. mtsar cnt
  27. ldd 0(up), %r21
  28. addib,= -1, n, L(end)
  29. shrpd %r21, %r0, %sar, %r29 C compute carry out limb
  30. depw,z n, 31, 3, %r28 C r28 = (size & 7)
  31. sub %r0, n, %r22
  32. depw,z %r22, 28, 3, %r22 C r22 = 8 * (-size & 7)
  33. sub up, %r22, up C offset up
  34. blr %r28, %r0 C branch into jump table
  35. sub rp, %r22, rp C offset rp
  36. b L(0)
  37. nop
  38. b L(1)
  39. copy %r21, %r20
  40. b L(2)
  41. nop
  42. b L(3)
  43. copy %r21, %r20
  44. b L(4)
  45. nop
  46. b L(5)
  47. copy %r21, %r20
  48. b L(6)
  49. nop
  50. b L(7)
  51. copy %r21, %r20
  52. LDEF(loop)
  53. LDEF(0) ldd 8(up), %r20
  54. shrpd %r20, %r21, %sar, %r21
  55. std %r21, 0(rp)
  56. LDEF(7) ldd 16(up), %r21
  57. shrpd %r21, %r20, %sar, %r20
  58. std %r20, 8(rp)
  59. LDEF(6) ldd 24(up), %r20
  60. shrpd %r20, %r21, %sar, %r21
  61. std %r21, 16(rp)
  62. LDEF(5) ldd 32(up), %r21
  63. shrpd %r21, %r20, %sar, %r20
  64. std %r20, 24(rp)
  65. LDEF(4) ldd 40(up), %r20
  66. shrpd %r20, %r21, %sar, %r21
  67. std %r21, 32(rp)
  68. LDEF(3) ldd 48(up), %r21
  69. shrpd %r21, %r20, %sar, %r20
  70. std %r20, 40(rp)
  71. LDEF(2) ldd 56(up), %r20
  72. shrpd %r20, %r21, %sar, %r21
  73. std %r21, 48(rp)
  74. LDEF(1) ldd 64(up), %r21
  75. ldo 64(up), up
  76. shrpd %r21, %r20, %sar, %r20
  77. std %r20, 56(rp)
  78. addib,> -8, n, L(loop)
  79. ldo 64(rp), rp
  80. LDEF(end)
  81. shrpd %r0, %r21, %sar, %r21
  82. std %r21, 0(rp)
  83. bve (%r2)
  84. ifdef(`HAVE_ABI_2_0w',
  85. ` copy %r29,%r28
  86. ',` extrd,u %r29, 31, 32, %r28
  87. ')
  88. EPILOGUE(mpn_rshift)