0014-fix-memcmp-bug-relate-to-use-jmp-table.patch 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. From c3dd8b0c45f338b0f5bca70871ea08322fe499d0 Mon Sep 17 00:00:00 2001
  2. From: "demin.han" <demin.han@starfivetech.com>
  3. Date: Fri, 11 Nov 2022 14:29:51 +0800
  4. Subject: [PATCH 14/19] fix memcmp bug relate to use jmp table
  5. jump table tech is not suitable for memcmp
  6. memcmp has order requirement, but jmp table has reverse order feature
  7. ---
  8. sysdeps/riscv/rv64/multiarch/memcmp_as.S | 25 +++++++++++-------------
  9. 1 file changed, 11 insertions(+), 14 deletions(-)
  10. diff --git a/sysdeps/riscv/rv64/multiarch/memcmp_as.S b/sysdeps/riscv/rv64/multiarch/memcmp_as.S
  11. index c9c6b3e909..984aeb7645 100644
  12. --- a/sysdeps/riscv/rv64/multiarch/memcmp_as.S
  13. +++ b/sysdeps/riscv/rv64/multiarch/memcmp_as.S
  14. @@ -113,23 +113,20 @@ ENTRY (memcmp)
  15. bltu a5, a4, .L_loop
  16. beqz a2, .L_end
  17. .L_tail:
  18. - andi a4, a2, -1
  19. -.L_pc:
  20. - auipc a3, 0
  21. - andi a4, a4, -8
  22. - sub a3, a3, a4
  23. - .equ offset, .L_jmp_end - .L_pc
  24. - jalr x0, a3, %lo(offset)
  25. - ld a3, 16(a1)
  26. - ld a0, 16(a5)
  27. - bne a3, a0, .L_end
  28. - ld a3, 8(a1)
  29. - ld a0, 8(a5)
  30. - bne a3, a0, .L_end
  31. + andi a4, a2, -8
  32. + beqz a4, .L_last
  33. + add a4, a4, a5
  34. +0:
  35. ld a3, 0(a1)
  36. ld a0, 0(a5)
  37. bne a3, a0, .L_end
  38. -.L_jmp_end:
  39. + add a5, a5, 8
  40. + add a1, a1, 8
  41. + bltu a5, a4, 0b
  42. +
  43. +.L_last:
  44. + andi a2, a2, (8-1)
  45. + beqz a2, 3f
  46. add a1, a1, a2
  47. add a5, a5, a2
  48. ld a3, -8(a1)
  49. --
  50. 2.25.1