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

数学计算

开发平台:

Unix_Linux

  1. dnl  HP-PA  __udiv_qrnnd division support, used from longlong.h.
  2. dnl  This version runs fast on PA 7000 and later.
  3. dnl  Copyright 1993, 1994, 2000, 2001, 2003 Free Software Foundation, Inc.
  4. dnl  This file is part of the GNU MP Library.
  5. dnl  The GNU MP Library is free software; you can redistribute it and/or modify
  6. dnl  it under the terms of the GNU Lesser General Public License as published
  7. dnl  by the Free Software Foundation; either version 3 of the License, or (at
  8. dnl  your option) any later version.
  9. dnl  The GNU MP Library is distributed in the hope that it will be useful, but
  10. dnl  WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
  11. dnl  or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU Lesser General Public
  12. dnl  License for more details.
  13. dnl  You should have received a copy of the GNU Lesser General Public License
  14. dnl  along with the GNU MP Library.  If not, see http://www.gnu.org/licenses/.
  15. include(`../config.m4')
  16. C INPUT PARAMETERS
  17. C rem_ptr gr26
  18. C n1 gr25
  19. C n0 gr24
  20. C d gr23
  21. C This file has caused a lot of trouble, since it demands PIC reference to
  22. C static data, which triggers bugs in gas (at least version 2.7 through
  23. C 2.11.2).  When the bug is triggered, many bogus relocs are generated.  The
  24. C current solution is to stuff data right into the code, and refer it using
  25. C absolute offsets.  Fragile to be sure, but nothing else seems to work.
  26. ASM_START()
  27. ifdef(`PIC',`',
  28. ` RODATA
  29. INT64(0000, 0x43f00000, 0x0) C 2^64
  30. ')
  31. PROLOGUE(mpn_udiv_qrnnd)
  32. C .callinfo frame=64,no_calls
  33. ldo 64(%r30),%r30
  34. stws %r25,-16(0,%r30) C n_hi
  35. stws %r24,-12(0,%r30) C n_lo
  36. ifdef(`PIC',
  37. ` bl .+20,%r31
  38. dep %r0,31,2,%r31
  39. .word 0x0 C padding for alignment
  40. .word 0x43f00000, 0x0 C 2^64
  41. ldo 4(%r31),%r31',
  42. ` ldil `L'%L(0000),%r31
  43. ldo R%L(0000)(%r31),%r31')
  44. fldds -16(0,%r30),%fr5
  45. stws %r23,-12(0,%r30)
  46. comib,<= 0,%r25,L(1)
  47. fcnvxf,dbl,dbl %fr5,%fr5
  48. fldds 0(0,%r31),%fr4
  49. fadd,dbl %fr4,%fr5,%fr5
  50. LDEF(1)
  51. fcpy,sgl %fr0,%fr6L
  52. fldws -12(0,%r30),%fr6R
  53. fcnvxf,dbl,dbl %fr6,%fr4
  54. fdiv,dbl %fr5,%fr4,%fr5
  55. fcnvfx,dbl,dbl %fr5,%fr4
  56. fstws %fr4R,-16(%r30)
  57. xmpyu %fr4R,%fr6R,%fr6
  58. ldws -16(%r30),%r28
  59. fstds %fr6,-16(0,%r30)
  60. ldws -12(0,%r30),%r21
  61. ldws -16(0,%r30),%r20
  62. sub %r24,%r21,%r22
  63. subb %r25,%r20,%r20
  64. comib,= 0,%r20,L(2)
  65. ldo -64(%r30),%r30
  66. add %r22,%r23,%r22
  67. ldo -1(%r28),%r28
  68. LDEF(2)
  69. bv 0(%r2)
  70. stws %r22,0(0,%r26)
  71. EPILOGUE(mpn_udiv_qrnnd)