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

数学计算

开发平台:

Unix_Linux

  1. ; 29000 __gmpn_lshift --
  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_lshift
  25. .word 0x60000
  26. ___gmpn_lshift:
  27. sll gr116,lr4,2
  28. add lr3,gr116,lr3
  29. add lr2,gr116,lr2
  30. sub lr3,lr3,4
  31. load 0,0,gr119,lr3
  32. subr gr116,lr5,32
  33. srl gr96,gr119,gr116 ; return value
  34. sub lr4,lr4,1 ; actual loop count is SIZE - 1
  35. srl gr117,lr4,3 ; chuck count = (actual count) / 8
  36. cpeq gr118,gr117,0
  37. jmpt gr118,Ltail
  38.  mtsr fc,lr5
  39. sub gr117,gr117,2 ; count for jmpfdec
  40. ; Main loop working 8 limbs/iteration.
  41. Loop: sub lr3,lr3,32
  42. mtsrim cr,(8-1)
  43. loadm 0,0,gr100,lr3
  44. extract gr109,gr119,gr107
  45. extract gr108,gr107,gr106
  46. extract gr107,gr106,gr105
  47. extract gr106,gr105,gr104
  48. extract gr105,gr104,gr103
  49. extract gr104,gr103,gr102
  50. extract gr103,gr102,gr101
  51. extract gr102,gr101,gr100
  52. sub lr2,lr2,32
  53. mtsrim cr,(8-1)
  54. storem 0,0,gr102,lr2
  55. jmpfdec gr117,Loop
  56.  or gr119,gr100,0
  57. ; Code for the last up-to-7 limbs.
  58. and lr4,lr4,(8-1)
  59. Ltail: cpeq gr118,lr4,0
  60. jmpt gr118,Lend
  61.  sub lr4,lr4,2 ; count for jmpfdec
  62. Loop2: sub lr3,lr3,4
  63. load 0,0,gr116,lr3
  64. extract gr117,gr119,gr116
  65. sub lr2,lr2,4
  66. store 0,0,gr117,lr2
  67. jmpfdec lr4,Loop2
  68.  or gr119,gr116,0
  69. Lend: extract gr117,gr119,0
  70. sub lr2,lr2,4
  71. jmpi lr0
  72.  store 0,0,gr117,lr2