memcpy_likely_aligned.S 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  1. /* SPDX-License-Identifier: GPL-2.0-only */
  2. /*
  3. * Copyright (c) 2021, The Linux Foundation. All rights reserved.
  4. */
  5. #include <linux/linkage.h>
  6. SYM_FUNC_START(__hexagon_memcpy_likely_aligned_min32bytes_mult8bytes)
  7. {
  8. p0 = bitsclr(r1,#7)
  9. p0 = bitsclr(r0,#7)
  10. if (p0.new) r5:4 = memd(r1)
  11. if (p0.new) r7:6 = memd(r1+#8)
  12. }
  13. {
  14. if (!p0) jump:nt .Lmemcpy_call
  15. if (p0) r9:8 = memd(r1+#16)
  16. if (p0) r11:10 = memd(r1+#24)
  17. p0 = cmp.gtu(r2,#64)
  18. }
  19. {
  20. if (p0) jump:nt .Lmemcpy_call
  21. if (!p0) memd(r0) = r5:4
  22. if (!p0) memd(r0+#8) = r7:6
  23. p0 = cmp.gtu(r2,#32)
  24. }
  25. {
  26. p1 = cmp.gtu(r2,#40)
  27. p2 = cmp.gtu(r2,#48)
  28. if (p0) r13:12 = memd(r1+#32)
  29. if (p1.new) r15:14 = memd(r1+#40)
  30. }
  31. {
  32. memd(r0+#16) = r9:8
  33. memd(r0+#24) = r11:10
  34. }
  35. {
  36. if (p0) memd(r0+#32) = r13:12
  37. if (p1) memd(r0+#40) = r15:14
  38. if (!p2) jumpr:t r31
  39. }
  40. {
  41. p0 = cmp.gtu(r2,#56)
  42. r5:4 = memd(r1+#48)
  43. if (p0.new) r7:6 = memd(r1+#56)
  44. }
  45. {
  46. memd(r0+#48) = r5:4
  47. if (p0) memd(r0+#56) = r7:6
  48. jumpr r31
  49. }
  50. .Lmemcpy_call:
  51. jump memcpy
  52. SYM_FUNC_END(__hexagon_memcpy_likely_aligned_min32bytes_mult8bytes)