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

数学计算

开发平台:

Unix_Linux

  1. dnl  x86 mpn_bdiv_dbm1.
  2. dnl  Copyright 2008 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 K7:  3.5
  17. C P4 m0:   ?
  18. C P4 m1:   ?
  19. C P4 m2: 13.67
  20. C P4 m3:   ?
  21. C P4 m4:   ?
  22. C P6-13:  5.1
  23. C TODO
  24. C  * Optimize for more x86 processors
  25. ASM_START()
  26. TEXT
  27. ALIGN(16)
  28. PROLOGUE(mpn_bdiv_dbm1c)
  29. mov 16(%esp), %ecx C d
  30. push %esi
  31. mov 12(%esp), %esi C ap
  32. push %edi
  33. mov 12(%esp), %edi C qp
  34. push %ebp
  35. mov 24(%esp), %ebp C n
  36. push %ebx
  37. mov (%esi), %eax
  38. mul %ecx
  39. mov 36(%esp), %ebx
  40. sub %eax, %ebx
  41. mov %ebx, (%edi)
  42. sbb %edx, %ebx
  43. mov %ebp, %eax
  44. and $3, %eax
  45. jz L(b0)
  46. cmp $2, %eax
  47. jc L(b1)
  48. jz L(b2)
  49. jmp L(b3)
  50. L(b0): mov 4(%esi), %eax
  51. lea -4(%esi), %esi
  52. lea 12(%edi), %edi
  53. add $-4, %ebp
  54. jmp L(0)
  55. L(b3):
  56. lea -8(%esi), %esi
  57. lea 8(%edi), %edi
  58. add $-3, %ebp
  59. jmp L(3)
  60. L(b2): mov 4(%esi), %eax
  61. lea 4(%esi), %esi
  62. lea 4(%edi), %edi
  63. add $-2, %ebp
  64. jmp L(2)
  65. ALIGN(8)
  66. L(top):
  67. mov 4(%esi), %eax
  68. mul %ecx
  69. lea 16(%edi), %edi
  70. sub %eax, %ebx
  71. mov 8(%esi), %eax
  72. mov %ebx, -12(%edi)
  73. sbb %edx, %ebx
  74. L(0): mul %ecx
  75. sub %eax, %ebx
  76. mov %ebx, -8(%edi)
  77. sbb %edx, %ebx
  78. L(3): mov 12(%esi), %eax
  79. mul %ecx
  80. sub %eax, %ebx
  81. mov %ebx, -4(%edi)
  82. mov 16(%esi), %eax
  83. lea 16(%esi), %esi
  84. sbb %edx, %ebx
  85. L(2): mul %ecx
  86. sub %eax, %ebx
  87. mov %ebx, 0(%edi)
  88. sbb %edx, %ebx
  89. L(b1): add $-4, %ebp
  90. jns L(top)
  91. mov %ebx, %eax
  92. pop %ebx
  93. pop %ebp
  94. pop %edi
  95. pop %esi
  96. ret
  97. EPILOGUE()