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

数学计算

开发平台:

Unix_Linux

  1. dnl  HP-PA 2.0 64-bit mpn_sqr_diagonal.
  2. dnl  Copyright 2001, 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 code runs at 7.25 cycles/limb on PA8000 and 7.75 cycles/limb on
  15. dnl  PA8500.  The cache would saturate at 5 cycles/limb, so there is some room
  16. dnl  for optimization.
  17. include(`../config.m4')
  18. C INPUT PARAMETERS
  19. define(`rp',`%r26')
  20. define(`up',`%r25')
  21. define(`n',`%r24')
  22. define(`p00',`%r28')
  23. define(`p32',`%r29')
  24. define(`p64',`%r31')
  25. define(`t0',`%r19')
  26. define(`t1',`%r20')
  27. ifdef(`HAVE_ABI_2_0w',
  28. ` .level 2.0w
  29. ',` .level 2.0
  30. ')
  31. PROLOGUE(mpn_sqr_diagonal)
  32. ldo 128(%r30),%r30
  33. fldds,ma 8(up),%fr8
  34. addib,= -1,n,L(end1)
  35. nop
  36. fldds,ma 8(up),%fr4
  37. xmpyu %fr8l,%fr8r,%fr10
  38. fstd %fr10,-120(%r30)
  39. xmpyu %fr8r,%fr8r,%fr9
  40. fstd %fr9,0(rp)
  41. xmpyu %fr8l,%fr8l,%fr11
  42. fstd %fr11,8(rp)
  43. addib,= -1,n,L(end2)
  44. ldo 16(rp),rp
  45. LDEF(loop)
  46. fldds,ma 8(up),%fr8 C load next up limb
  47. xmpyu %fr4l,%fr4r,%fr6
  48. fstd %fr6,-128(%r30)
  49. xmpyu %fr4r,%fr4r,%fr5 C multiply in fp regs
  50. fstd %fr5,0(rp)
  51. xmpyu %fr4l,%fr4l,%fr7
  52. fstd %fr7,8(rp)
  53. ldd -120(%r30),p32
  54. ldd -16(rp),p00 C accumulate in int regs
  55. ldd -8(rp),p64
  56. depd,z p32,30,31,t0
  57. add t0,p00,p00
  58. std p00,-16(rp)
  59. extrd,u p32,32,33,t1
  60. add,dc t1,p64,p64
  61. std p64,-8(rp)
  62. addib,= -1,n,L(exit)
  63. ldo 16(rp),rp
  64. fldds,ma 8(up),%fr4
  65. xmpyu %fr8l,%fr8r,%fr10
  66. fstd %fr10,-120(%r30)
  67. xmpyu %fr8r,%fr8r,%fr9
  68. fstd %fr9,0(rp)
  69. xmpyu %fr8l,%fr8l,%fr11
  70. fstd %fr11,8(rp)
  71. ldd -128(%r30),p32
  72. ldd -16(rp),p00
  73. ldd -8(rp),p64
  74. depd,z p32,30,31,t0
  75. add t0,p00,p00
  76. std p00,-16(rp)
  77. extrd,u p32,32,33,t1
  78. add,dc t1,p64,p64
  79. std p64,-8(rp)
  80. addib,<> -1,n,L(loop)
  81. ldo 16(rp),rp
  82. LDEF(end2)
  83. xmpyu %fr4l,%fr4r,%fr6
  84. fstd %fr6,-128(%r30)
  85. xmpyu %fr4r,%fr4r,%fr5
  86. fstd %fr5,0(rp)
  87. xmpyu %fr4l,%fr4l,%fr7
  88. fstd %fr7,8(rp)
  89. ldd -120(%r30),p32
  90. ldd -16(rp),p00
  91. ldd -8(rp),p64
  92. depd,z p32,30,31,t0
  93. add t0,p00,p00
  94. std p00,-16(rp)
  95. extrd,u p32,32,33,t1
  96. add,dc t1,p64,p64
  97. std p64,-8(rp)
  98. ldo 16(rp),rp
  99. ldd -128(%r30),p32
  100. ldd -16(rp),p00
  101. ldd -8(rp),p64
  102. depd,z p32,30,31,t0
  103. add t0,p00,p00
  104. std p00,-16(rp)
  105. extrd,u p32,32,33,t1
  106. add,dc t1,p64,p64
  107. std p64,-8(rp)
  108. bve (%r2)
  109. ldo -128(%r30),%r30
  110. LDEF(exit)
  111. xmpyu %fr8l,%fr8r,%fr10
  112. fstd %fr10,-120(%r30)
  113. xmpyu %fr8r,%fr8r,%fr9
  114. fstd %fr9,0(rp)
  115. xmpyu %fr8l,%fr8l,%fr11
  116. fstd %fr11,8(rp)
  117. ldd -128(%r30),p32
  118. ldd -16(rp),p00
  119. ldd -8(rp),p64
  120. depd,z p32,31,32,t0
  121. add t0,p00,p00
  122. extrd,u p32,31,32,t1
  123. add,dc t1,p64,p64
  124. add t0,p00,p00
  125. add,dc t1,p64,p64
  126. std p00,-16(rp)
  127. std p64,-8(rp)
  128. ldo 16(rp),rp
  129. ldd -120(%r30),p32
  130. ldd -16(rp),p00
  131. ldd -8(rp),p64
  132. depd,z p32,31,32,t0
  133. add t0,p00,p00
  134. extrd,u p32,31,32,t1
  135. add,dc t1,p64,p64
  136. add t0,p00,p00
  137. add,dc t1,p64,p64
  138. std p00,-16(rp)
  139. std p64,-8(rp)
  140. bve (%r2)
  141. ldo -128(%r30),%r30
  142. LDEF(end1)
  143. xmpyu %fr8l,%fr8r,%fr10
  144. fstd %fr10,-128(%r30)
  145. xmpyu %fr8r,%fr8r,%fr9
  146. fstd %fr9,0(rp)
  147. xmpyu %fr8l,%fr8l,%fr11
  148. fstd %fr11,8(rp)
  149. ldo 16(rp),rp
  150. ldd -128(%r30),p32
  151. ldd -16(rp),p00
  152. ldd -8(rp),p64
  153. depd,z p32,31,32,t0
  154. add t0,p00,p00
  155. extrd,u p32,31,32,t1
  156. add,dc t1,p64,p64
  157. add t0,p00,p00
  158. add,dc t1,p64,p64
  159. std p00,-16(rp)
  160. std p64,-8(rp)
  161. bve (%r2)
  162. ldo -128(%r30),%r30
  163. EPILOGUE(mpn_sqr_diagonal)