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

数学计算

开发平台:

Unix_Linux

  1. # Pyramid __gmpn_add_n -- Add two limb vectors of the same length > 0 and store
  2. # sum in a third limb vector.
  3. # Copyright 1995, 2000 Free Software Foundation, Inc.
  4. # This file is part of the GNU MP Library.
  5. # The GNU MP Library is free software; you can redistribute it and/or modify
  6. # it under the terms of the GNU Lesser General Public License as published by
  7. # the Free Software Foundation; either version 3 of the License, or (at your
  8. # option) any later version.
  9. # The GNU MP Library is distributed in the hope that it will be useful, but
  10. # WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
  11. # or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU Lesser General Public
  12. # License for more details.
  13. # You should have received a copy of the GNU Lesser General Public License
  14. # along with the GNU MP Library.  If not, see http://www.gnu.org/licenses/.
  15. .text
  16. .align 2
  17. .globl ___gmpn_add_n
  18. ___gmpn_add_n:
  19. movw $-1,tr0 # representation for carry clear
  20. movw pr3,tr2
  21. andw $3,tr2
  22. beq Lend0
  23. subw tr2,pr3
  24. Loop0: rsubw $0,tr0 # restore carry bit from carry-save register
  25. movw (pr1),tr1
  26. addwc (pr2),tr1
  27. movw tr1,(pr0)
  28. subwb tr0,tr0
  29. addw $4,pr0
  30. addw $4,pr1
  31. addw $4,pr2
  32. addw $-1,tr2
  33. bne Loop0
  34. mtstw pr3,pr3
  35. beq Lend
  36. Lend0:
  37. Loop: rsubw $0,tr0 # restore carry bit from carry-save register
  38. movw (pr1),tr1
  39. addwc (pr2),tr1
  40. movw tr1,(pr0)
  41. movw 4(pr1),tr1
  42. addwc 4(pr2),tr1
  43. movw tr1,4(pr0)
  44. movw 8(pr1),tr1
  45. addwc 8(pr2),tr1
  46. movw tr1,8(pr0)
  47. movw 12(pr1),tr1
  48. addwc 12(pr2),tr1
  49. movw tr1,12(pr0)
  50. subwb tr0,tr0
  51. addw $16,pr0
  52. addw $16,pr1
  53. addw $16,pr2
  54. addw $-4,pr3
  55. bne Loop
  56. Lend:
  57. mnegw tr0,pr0
  58. ret