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

数学计算

开发平台:

Unix_Linux

  1. # VAX __gmpn_addmul_1 -- Multiply a limb vector with a limb and add
  2. # the result to a second limb vector.
  3. # Copyright 1992, 1994, 1996, 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. # INPUT PARAMETERS
  16. # res_ptr (sp + 4)
  17. # s1_ptr (sp + 8)
  18. # size (sp + 12)
  19. # s2_limb (sp + 16)
  20. .text
  21. .align 1
  22. .globl ___gmpn_addmul_1
  23. ___gmpn_addmul_1:
  24. .word 0xfc0
  25. movl 12(ap),r4
  26. movl 8(ap),r8
  27. movl 4(ap),r9
  28. movl 16(ap),r6
  29. jlss s2_big
  30. clrl r3
  31. incl r4
  32. ashl $-1,r4,r7
  33. jlbc r4,L1
  34. clrl r11
  35. # Loop for S2_LIMB < 0x80000000
  36. Loop1: movl (r8)+,r1
  37. jlss L1n0
  38. emul r1,r6,$0,r2
  39. addl2 r11,r2
  40. adwc $0,r3
  41. addl2 r2,(r9)+
  42. adwc $0,r3
  43. L1: movl (r8)+,r1
  44. jlss L1n1
  45. L1p1: emul r1,r6,$0,r10
  46. addl2 r3,r10
  47. adwc $0,r11
  48. addl2 r10,(r9)+
  49. adwc $0,r11
  50. sobgtr r7,Loop1
  51. movl r11,r0
  52. ret
  53. L1n0: emul r1,r6,$0,r2
  54. addl2 r11,r2
  55. adwc r6,r3
  56. addl2 r2,(r9)+
  57. adwc $0,r3
  58. movl (r8)+,r1
  59. jgeq L1p1
  60. L1n1: emul r1,r6,$0,r10
  61. addl2 r3,r10
  62. adwc r6,r11
  63. addl2 r10,(r9)+
  64. adwc $0,r11
  65. sobgtr r7,Loop1
  66. movl r11,r0
  67. ret
  68. s2_big: clrl r3
  69. incl r4
  70. ashl $-1,r4,r7
  71. jlbc r4,L2
  72. clrl r11
  73. # Loop for S2_LIMB >= 0x80000000
  74. Loop2: movl (r8)+,r1
  75. jlss L2n0
  76. emul r1,r6,$0,r2
  77. addl2 r11,r2
  78. adwc r1,r3
  79. addl2 r2,(r9)+
  80. adwc $0,r3
  81. L2: movl (r8)+,r1
  82. jlss L2n1
  83. L2p1: emul r1,r6,$0,r10
  84. addl2 r3,r10
  85. adwc r1,r11
  86. addl2 r10,(r9)+
  87. adwc $0,r11
  88. sobgtr r7,Loop2
  89. movl r11,r0
  90. ret
  91. L2n0: emul r1,r6,$0,r2
  92. addl2 r11,r2
  93. adwc r6,r3
  94. addl2 r2,(r9)+
  95. adwc r1,r3
  96. movl (r8)+,r1
  97. jgeq L2p1
  98. L2n1: emul r1,r6,$0,r10
  99. addl2 r3,r10
  100. adwc r6,r11
  101. addl2 r10,(r9)+
  102. adwc r1,r11
  103. sobgtr r7,Loop2
  104. movl r11,r0
  105. ret