xor.S 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. /* SPDX-License-Identifier: GPL-2.0-or-later */
  2. /*
  3. * Copyright (C) 2021 SiFive
  4. */
  5. #include <linux/linkage.h>
  6. #include <linux/export.h>
  7. #include <asm/asm.h>
  8. SYM_FUNC_START(xor_regs_2_)
  9. vsetvli a3, a0, e8, m8, ta, ma
  10. vle8.v v0, (a1)
  11. vle8.v v8, (a2)
  12. sub a0, a0, a3
  13. vxor.vv v16, v0, v8
  14. add a2, a2, a3
  15. vse8.v v16, (a1)
  16. add a1, a1, a3
  17. bnez a0, xor_regs_2_
  18. ret
  19. SYM_FUNC_END(xor_regs_2_)
  20. EXPORT_SYMBOL(xor_regs_2_)
  21. SYM_FUNC_START(xor_regs_3_)
  22. vsetvli a4, a0, e8, m8, ta, ma
  23. vle8.v v0, (a1)
  24. vle8.v v8, (a2)
  25. sub a0, a0, a4
  26. vxor.vv v0, v0, v8
  27. vle8.v v16, (a3)
  28. add a2, a2, a4
  29. vxor.vv v16, v0, v16
  30. add a3, a3, a4
  31. vse8.v v16, (a1)
  32. add a1, a1, a4
  33. bnez a0, xor_regs_3_
  34. ret
  35. SYM_FUNC_END(xor_regs_3_)
  36. EXPORT_SYMBOL(xor_regs_3_)
  37. SYM_FUNC_START(xor_regs_4_)
  38. vsetvli a5, a0, e8, m8, ta, ma
  39. vle8.v v0, (a1)
  40. vle8.v v8, (a2)
  41. sub a0, a0, a5
  42. vxor.vv v0, v0, v8
  43. vle8.v v16, (a3)
  44. add a2, a2, a5
  45. vxor.vv v0, v0, v16
  46. vle8.v v24, (a4)
  47. add a3, a3, a5
  48. vxor.vv v16, v0, v24
  49. add a4, a4, a5
  50. vse8.v v16, (a1)
  51. add a1, a1, a5
  52. bnez a0, xor_regs_4_
  53. ret
  54. SYM_FUNC_END(xor_regs_4_)
  55. EXPORT_SYMBOL(xor_regs_4_)
  56. SYM_FUNC_START(xor_regs_5_)
  57. vsetvli a6, a0, e8, m8, ta, ma
  58. vle8.v v0, (a1)
  59. vle8.v v8, (a2)
  60. sub a0, a0, a6
  61. vxor.vv v0, v0, v8
  62. vle8.v v16, (a3)
  63. add a2, a2, a6
  64. vxor.vv v0, v0, v16
  65. vle8.v v24, (a4)
  66. add a3, a3, a6
  67. vxor.vv v0, v0, v24
  68. vle8.v v8, (a5)
  69. add a4, a4, a6
  70. vxor.vv v16, v0, v8
  71. add a5, a5, a6
  72. vse8.v v16, (a1)
  73. add a1, a1, a6
  74. bnez a0, xor_regs_5_
  75. ret
  76. SYM_FUNC_END(xor_regs_5_)
  77. EXPORT_SYMBOL(xor_regs_5_)