tishift.S 1.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  1. /* SPDX-License-Identifier: GPL-2.0-only */
  2. /*
  3. * Copyright (C) 2018 Free Software Foundation, Inc.
  4. */
  5. #include <linux/linkage.h>
  6. #include <asm-generic/export.h>
  7. SYM_FUNC_START(__lshrti3)
  8. beqz a2, .L1
  9. li a5,64
  10. sub a5,a5,a2
  11. sext.w a4,a5
  12. blez a5, .L2
  13. sext.w a2,a2
  14. srl a0,a0,a2
  15. sll a4,a1,a4
  16. srl a2,a1,a2
  17. or a0,a0,a4
  18. mv a1,a2
  19. .L1:
  20. ret
  21. .L2:
  22. negw a0,a4
  23. li a2,0
  24. srl a0,a1,a0
  25. mv a1,a2
  26. ret
  27. SYM_FUNC_END(__lshrti3)
  28. EXPORT_SYMBOL(__lshrti3)
  29. SYM_FUNC_START(__ashrti3)
  30. beqz a2, .L3
  31. li a5,64
  32. sub a5,a5,a2
  33. sext.w a4,a5
  34. blez a5, .L4
  35. sext.w a2,a2
  36. srl a0,a0,a2
  37. sll a4,a1,a4
  38. sra a2,a1,a2
  39. or a0,a0,a4
  40. mv a1,a2
  41. .L3:
  42. ret
  43. .L4:
  44. negw a0,a4
  45. srai a2,a1,0x3f
  46. sra a0,a1,a0
  47. mv a1,a2
  48. ret
  49. SYM_FUNC_END(__ashrti3)
  50. EXPORT_SYMBOL(__ashrti3)
  51. SYM_FUNC_START(__ashlti3)
  52. beqz a2, .L5
  53. li a5,64
  54. sub a5,a5,a2
  55. sext.w a4,a5
  56. blez a5, .L6
  57. sext.w a2,a2
  58. sll a1,a1,a2
  59. srl a4,a0,a4
  60. sll a2,a0,a2
  61. or a1,a1,a4
  62. mv a0,a2
  63. .L5:
  64. ret
  65. .L6:
  66. negw a1,a4
  67. li a2,0
  68. sll a1,a0,a1
  69. mv a0,a2
  70. ret
  71. SYM_FUNC_END(__ashlti3)
  72. EXPORT_SYMBOL(__ashlti3)