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

数学计算

开发平台:

Unix_Linux

  1. dnl  IA-64 mpn_copyd -- copy limb vector, decrementing.
  2. dnl  Copyright 2001, 2002, 2004 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. include(`../config.m4')
  15. C         cycles/limb
  16. C Itanium:    1
  17. C Itanium 2:  0.5
  18. C INPUT PARAMETERS
  19. C rp = r32
  20. C sp = r33
  21. C n = r34
  22. ASM_START()
  23. PROLOGUE(mpn_copyd)
  24. .prologue
  25. .save ar.lc, r2
  26. .body
  27. ifdef(`HAVE_ABI_32',
  28. ` addp4 r32 = 0, r32
  29. addp4 r33 = 0, r33
  30. sxt4 r34 = r34
  31. ;;
  32. ')
  33. {.mmi
  34. shladd r32 = r34, 3, r32
  35. shladd r33 = r34, 3, r33
  36. mov.i r2 = ar.lc
  37. }
  38. {.mmi
  39. and r14 = 3, r34
  40. cmp.ge p14, p15 = 3, r34
  41. add r34 = -4, r34
  42. ;;
  43. }
  44. {.mmi
  45. cmp.eq p8, p0 = 1, r14
  46. cmp.eq p10, p0 = 2, r14
  47. cmp.eq p12, p0 = 3, r14
  48. }
  49. {.bbb
  50.   (p8) br.dptk .Lb01
  51.   (p10) br.dptk .Lb10
  52.   (p12) br.dptk .Lb11
  53. }
  54. .Lb00: C  n = 0, 4, 8, 12, ...
  55. add r32 = -8, r32
  56. add r33 = -8, r33
  57.   (p14) br.dptk .Ls00
  58. ;;
  59. add r21 = -8, r33
  60. ld8 r16 = [r33], -16
  61. shr r15 = r34, 2
  62. ;;
  63. ld8 r17 = [r21], -16
  64. mov.i ar.lc = r15
  65. ld8 r18 = [r33], -16
  66. add r20 = -8, r32
  67. ;;
  68. ld8 r19 = [r21], -16
  69. br.cloop.dptk .Loop
  70. ;;
  71. br.sptk .Lend
  72. ;;
  73. .Lb01: C  n = 1, 5, 9, 13, ...
  74. add r21 = -8, r33
  75. add r20 = -8, r32
  76. add r33 = -16, r33
  77. add r32 = -16, r32
  78. ;;
  79. ld8 r19 = [r21], -16
  80. shr r15 = r34, 2
  81.   (p14) br.dptk .Ls01
  82. ;;
  83. ld8 r16 = [r33], -16
  84. mov.i ar.lc = r15
  85. ;;
  86. ld8 r17 = [r21], -16
  87. ld8 r18 = [r33], -16
  88. br.sptk .Li01
  89. ;;
  90. .Lb10: C  n = 2,6, 10, 14, ...
  91. add r21 = -16, r33
  92. shr r15 = r34, 2
  93. add r20 = -16, r32
  94. add r32 = -8, r32
  95. add r33 = -8, r33
  96. ;;
  97. ld8 r18 = [r33], -16
  98. ld8 r19 = [r21], -16
  99. mov.i ar.lc = r15
  100.   (p14) br.dptk .Ls10
  101. ;;
  102. ld8 r16 = [r33], -16
  103. ld8 r17 = [r21], -16
  104. br.sptk .Li10
  105. ;;
  106. .Lb11: C  n = 3, 7, 11, 15, ...
  107. add r21 = -8, r33
  108. add r20 = -8, r32
  109. add r33 = -16, r33
  110. add r32 = -16, r32
  111. ;;
  112. ld8 r17 = [r21], -16
  113. shr r15 = r34, 2
  114. ;;
  115. ld8 r18 = [r33], -16
  116. mov.i ar.lc = r15
  117. ld8 r19 = [r21], -16
  118.   (p14) br.dptk .Ls11
  119. ;;
  120. ld8 r16 = [r33], -16
  121. br.sptk .Li11
  122. ;;
  123. ALIGN(32)
  124. .Loop:
  125. .Li00:
  126. {.mmb
  127. st8 [r32] = r16, -16
  128. ld8 r16 = [r33], -16
  129. nop.b 0
  130. }
  131. .Li11:
  132. {.mmb
  133. st8 [r20] = r17, -16
  134. ld8 r17 = [r21], -16
  135. nop.b 0
  136. ;;
  137. }
  138. .Li10:
  139. {.mmb
  140. st8 [r32] = r18, -16
  141. ld8 r18 = [r33], -16
  142. nop.b 0
  143. }
  144. .Li01:
  145. {.mmb
  146. st8 [r20] = r19, -16
  147. ld8 r19 = [r21], -16
  148. br.cloop.dptk .Loop
  149. ;;
  150. }
  151. .Lend: st8 [r32] = r16, -16
  152. .Ls11: st8 [r20] = r17, -16
  153. ;;
  154. .Ls10: st8 [r32] = r18, -16
  155. .Ls01: st8 [r20] = r19, -16
  156. .Ls00: mov.i ar.lc = r2
  157. br.ret.sptk.many b0
  158. EPILOGUE()
  159. ASM_END()