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

数学计算

开发平台:

Unix_Linux

  1. ; 29000 __gmpn_submul_1 -- Multiply a limb vector with a single limb and
  2. ; subtract the product from a second limb vector.
  3. ; Copyright 1992, 1994, 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 lr2
  17. ; s1_ptr lr3
  18. ; size lr4
  19. ; s2_limb lr5
  20. .cputype 29050
  21. .sect .lit,lit
  22. .text
  23. .align 4
  24. .global ___gmpn_submul_1
  25. .word 0x60000
  26. ___gmpn_submul_1:
  27. sub lr4,lr4,8
  28. jmpt lr4,Ltail
  29.  const gr120,0 ; init cylimb reg
  30. srl gr117,lr4,3 ; divide by 8
  31. sub gr117,gr117,1 ; count for jmpfdec
  32. Loop: mtsrim cr,(8-1)
  33. loadm 0,0,gr96,lr3
  34. add lr3,lr3,32
  35. multiplu gr104,gr96,lr5
  36. multmu  gr96,gr96,lr5
  37. multiplu gr105,gr97,lr5
  38. multmu  gr97,gr97,lr5
  39. multiplu gr106,gr98,lr5
  40. multmu  gr98,gr98,lr5
  41. multiplu gr107,gr99,lr5
  42. multmu  gr99,gr99,lr5
  43. multiplu gr108,gr100,lr5
  44. multmu  gr100,gr100,lr5
  45. multiplu gr109,gr101,lr5
  46. multmu  gr101,gr101,lr5
  47. multiplu gr110,gr102,lr5
  48. multmu  gr102,gr102,lr5
  49. multiplu gr111,gr103,lr5
  50. multmu  gr103,gr103,lr5
  51. add gr104,gr104,gr120
  52. addc gr105,gr105,gr96
  53. addc gr106,gr106,gr97
  54. addc gr107,gr107,gr98
  55. addc gr108,gr108,gr99
  56. addc gr109,gr109,gr100
  57. addc gr110,gr110,gr101
  58. addc gr111,gr111,gr102
  59. addc gr120,gr103,0
  60. mtsrim cr,(8-1)
  61. loadm 0,0,gr96,lr2
  62. sub gr96,gr96,gr104
  63. subc gr97,gr97,gr105
  64. subc gr98,gr98,gr106
  65. subc gr99,gr99,gr107
  66. subc gr100,gr100,gr108
  67. subc gr101,gr101,gr109
  68. subc gr102,gr102,gr110
  69. subc gr103,gr103,gr111
  70. add gr104,gr103,gr111 ; invert carry from previous sub
  71. addc gr120,gr120,0
  72. mtsrim cr,(8-1)
  73. storem 0,0,gr96,lr2
  74. jmpfdec gr117,Loop
  75.  add lr2,lr2,32
  76. Ltail: and lr4,lr4,(8-1)
  77. sub gr118,lr4,1 ; count for CR
  78. jmpt gr118,Lend
  79.  sub lr4,lr4,2
  80. sub lr2,lr2,4 ; offset res_ptr by one limb
  81. Loop2: load 0,0,gr116,lr3
  82. add lr3,lr3,4
  83. multiplu gr117,gr116,lr5
  84. multmu gr118,gr116,lr5
  85. add lr2,lr2,4
  86. load 0,0,gr119,lr2
  87. add gr117,gr117,gr120
  88. addc gr118,gr118,0
  89. sub gr119,gr119,gr117
  90. add gr104,gr119,gr117 ; invert carry from previous sub
  91. store 0,0,gr119,lr2
  92. jmpfdec lr4,Loop2
  93.  addc gr120,gr118,0
  94. Lend: jmpi lr0
  95.  or gr96,gr120,0 ; copy