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

数学计算

开发平台:

Unix_Linux

  1. ; 29000 __gmpn_rshift --
  2. ; Copyright 1992, 1994, 2000 Free Software Foundation, Inc.
  3. ; This file is part of the GNU MP Library.
  4. ; The GNU MP Library is free software; you can redistribute it and/or modify
  5. ; it under the terms of the GNU Lesser General Public License as published by
  6. ; the Free Software Foundation; either version 3 of the License, or (at your
  7. ; option) any later version.
  8. ; The GNU MP Library is distributed in the hope that it will be useful, but
  9. ; WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
  10. ; or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU Lesser General Public
  11. ; License for more details.
  12. ; You should have received a copy of the GNU Lesser General Public License
  13. ; along with the GNU MP Library.  If not, see http://www.gnu.org/licenses/.
  14. ; INPUT PARAMETERS
  15. ; res_ptr lr2
  16. ; s1_ptr lr3
  17. ; s2_ptr lr4
  18. ; size lr5
  19. ; We use the loadm/storem instructions and operate on chunks of 8
  20. ; limbs/per iteration, until less than 8 limbs remain.
  21. .sect .lit,lit
  22. .text
  23. .align 4
  24. .global ___gmpn_rshift
  25. .word 0x60000
  26. ___gmpn_rshift:
  27. load 0,0,gr119,lr3
  28. add lr3,lr3,4
  29. subr gr116,lr5,32
  30. sll gr96,gr119,gr116 ; return value
  31. sub lr4,lr4,1 ; actual loop count is SIZE - 1
  32. srl gr117,lr4,3 ; chuck count = (actual count) / 8
  33. cpeq gr118,gr117,0
  34. jmpt gr118,Ltail
  35.  mtsr fc,gr116
  36. sub gr117,gr117,2 ; count for jmpfdec
  37. ; Main loop working 8 limbs/iteration.
  38. Loop: mtsrim cr,(8-1)
  39. loadm 0,0,gr100,lr3
  40. add lr3,lr3,32
  41. extract gr98,gr100,gr119
  42. extract gr99,gr101,gr100
  43. extract gr100,gr102,gr101
  44. extract gr101,gr103,gr102
  45. extract gr102,gr104,gr103
  46. extract gr103,gr105,gr104
  47. extract gr104,gr106,gr105
  48. extract gr105,gr107,gr106
  49. mtsrim cr,(8-1)
  50. storem 0,0,gr98,lr2
  51. add lr2,lr2,32
  52. jmpfdec gr117,Loop
  53.  or gr119,gr107,0
  54. ; Code for the last up-to-7 limbs.
  55. and lr4,lr4,(8-1)
  56. Ltail: cpeq gr118,lr4,0
  57. jmpt gr118,Lend
  58.  sub lr4,lr4,2 ; count for jmpfdec
  59. Loop2: load 0,0,gr100,lr3
  60. add lr3,lr3,4
  61. extract gr117,gr100,gr119
  62. store 0,0,gr117,lr2
  63. add lr2,lr2,4
  64. jmpfdec lr4,Loop2
  65.  or gr119,gr100,0
  66. Lend: srl gr117,gr119,lr5
  67. jmpi lr0
  68.  store 0,0,gr117,lr2