tishift.S 909 B

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. /* SPDX-License-Identifier: (GPL-2.0 OR BSD-3-Clause)
  2. *
  3. * Copyright (C) 2017-2018 Jason A. Donenfeld <Jason@zx2c4.com>. All Rights Reserved.
  4. */
  5. #include <linux/linkage.h>
  6. ENTRY(__ashlti3)
  7. cbz x2, 1f
  8. mov x3, #64
  9. sub x3, x3, x2
  10. cmp x3, #0
  11. b.le 2f
  12. lsl x1, x1, x2
  13. lsr x3, x0, x3
  14. lsl x2, x0, x2
  15. orr x1, x1, x3
  16. mov x0, x2
  17. 1:
  18. ret
  19. 2:
  20. neg w1, w3
  21. mov x2, #0
  22. lsl x1, x0, x1
  23. mov x0, x2
  24. ret
  25. ENDPROC(__ashlti3)
  26. ENTRY(__ashrti3)
  27. cbz x2, 1f
  28. mov x3, #64
  29. sub x3, x3, x2
  30. cmp x3, #0
  31. b.le 2f
  32. lsr x0, x0, x2
  33. lsl x3, x1, x3
  34. asr x2, x1, x2
  35. orr x0, x0, x3
  36. mov x1, x2
  37. 1:
  38. ret
  39. 2:
  40. neg w0, w3
  41. asr x2, x1, #63
  42. asr x0, x1, x0
  43. mov x1, x2
  44. ret
  45. ENDPROC(__ashrti3)
  46. ENTRY(__lshrti3)
  47. cbz x2, 1f
  48. mov x3, #64
  49. sub x3, x3, x2
  50. cmp x3, #0
  51. b.le 2f
  52. lsr x0, x0, x2
  53. lsl x3, x1, x3
  54. lsr x2, x1, x2
  55. orr x0, x0, x3
  56. mov x1, x2
  57. 1:
  58. ret
  59. 2:
  60. neg w0, w3
  61. mov x2, #0
  62. lsr x0, x1, x0
  63. mov x1, x2
  64. ret
  65. ENDPROC(__lshrti3)