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

数学计算

开发平台:

Unix_Linux

  1. dnl  IA-64 mpn_sqr_diagonal.  Helper for sqr_basecase.
  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:    4
  17. C Itanium 2:  2
  18. C TODO
  19. C  * Perhaps avoid ctop loop.  Unfortunately, a cloop loop running at 1 c/l
  20. C    would need prohibitive 8-way unrolling.
  21. C  * Instead of messing too much with this, write a nifty mpn_sqr_basecase.
  22. C INPUT PARAMETERS
  23. C rp = r32
  24. C sp = r33
  25. C n = r34
  26. ASM_START()
  27. PROLOGUE(mpn_sqr_diagonal)
  28. .prologue
  29. .save ar.lc, r2
  30. .save pr, r15
  31. .body
  32. ifdef(`HAVE_ABI_32',
  33. ` addp4 r32 = 0, r32
  34. addp4 r33 = 0, r33
  35. zxt4 r34 = r34
  36. ;;
  37. ')
  38. ldf8 f32 = [r33], 8 C M load rp[0] early
  39. mov r2 = ar.lc C I0
  40. mov r14 = ar.ec C I0
  41. mov r15 = pr C I0
  42. add r19 = -1, r34 C M I decr n
  43. add r18 = 8, r32 C M I rp for high limb
  44. ;;
  45. mov ar.lc = r19 C I0
  46. mov ar.ec = 5 C I0
  47. mov pr.rot = 1<<16 C I0
  48. ;;
  49. br.cexit.spnt .Ldone C B
  50. ;;
  51. ALIGN(32)
  52. .Loop:
  53.   (p16) ldf8 f32 = [r33], 8 C M
  54.   (p19) xma.l f36 = f35, f35, f0 C F
  55.   (p21) stf8 [r32] = f38, 16 C M2 M3
  56.   (p19) xma.hu f40 = f35, f35, f0 C F
  57.   (p21) stf8 [r18] = f42, 16 C M2 M3
  58. br.ctop.dptk .Loop C B
  59. ;;
  60. .Ldone:
  61. stf8 [r32] = f38 C M2 M3
  62. stf8 [r18] = f42 C M2 M3
  63. mov ar.ec = r14 C I0
  64. ;;
  65. mov pr = r15, 0x1ffff C I0
  66. mov ar.lc = r2 C I0
  67. br.ret.sptk.many b0 C B
  68. EPILOGUE(mpn_sqr_diagonal)
  69. ASM_END()