0003-m68k-Use-M68K_SCALE_AVAILABLE-on-__mpn_lshift-and-__.patch 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293
  1. From 87ced255bdf2681f5bf6c89d7121e59f6f342161 Mon Sep 17 00:00:00 2001
  2. From: Adhemerval Zanella <adhemerval.zanella@linaro.org>
  3. Date: Fri, 18 Aug 2023 14:49:31 -0300
  4. Subject: [PATCH] m68k: Use M68K_SCALE_AVAILABLE on __mpn_lshift and
  5. __mpn_rshift
  6. This patch adds a new macro, M68K_SCALE_AVAILABLE, similar to gmp
  7. scale_available_p (mpn/m68k/m68k-defs.m4) that expand to 1 if a
  8. scale factor can be used in addressing modes. This is used
  9. instead of __mc68020__ for some optimization decisions.
  10. Checked on a build for m68k-linux-gnu target mc68020 and mc68040.
  11. Signed-off-by: Waldemar Brodkorb <wbx@openadk.org>
  12. Upstream: https://sourceware.org/git/?p=glibc.git;a=commitdiff;h=87ced255bdf2681f5bf6c89d7121e59f6f342161
  13. ---
  14. sysdeps/m68k/m680x0/lshift.S | 6 +++---
  15. sysdeps/m68k/m680x0/rshift.S | 8 ++++----
  16. sysdeps/m68k/m680x0/sysdep.h | 7 +++++++
  17. 3 files changed, 14 insertions(+), 7 deletions(-)
  18. diff --git a/sysdeps/m68k/m680x0/lshift.S b/sysdeps/m68k/m680x0/lshift.S
  19. index 4240738959..74de90380b 100644
  20. --- a/sysdeps/m68k/m680x0/lshift.S
  21. +++ b/sysdeps/m68k/m680x0/lshift.S
  22. @@ -57,9 +57,9 @@ ENTRY(__mpn_lshift)
  23. bne L(Lnormal)
  24. cmpl R(s_ptr),R(res_ptr)
  25. bls L(Lspecial) /* jump if s_ptr >= res_ptr */
  26. -#if (defined (__mc68020__) || defined (__NeXT__) || defined(mc68020))
  27. +#if M68K_SCALE_AVAILABLE
  28. lea MEM_INDX1(s_ptr,s_size,l,4),R(a2)
  29. -#else /* not mc68020 */
  30. +#else
  31. movel R(s_size),R(d0)
  32. asll #2,R(d0)
  33. lea MEM_INDX(s_ptr,d0,l),R(a2)
  34. @@ -71,7 +71,7 @@ L(Lnormal:)
  35. moveql #32,R(d5)
  36. subl R(cnt),R(d5)
  37. -#if (defined (__mc68020__) || defined (__NeXT__) || defined(mc68020))
  38. +#if M68K_SCALE_AVAILABLE
  39. lea MEM_INDX1(s_ptr,s_size,l,4),R(s_ptr)
  40. lea MEM_INDX1(res_ptr,s_size,l,4),R(res_ptr)
  41. #else /* not mc68000 */
  42. diff --git a/sysdeps/m68k/m680x0/rshift.S b/sysdeps/m68k/m680x0/rshift.S
  43. index d56a2b4a44..d398d0287e 100644
  44. --- a/sysdeps/m68k/m680x0/rshift.S
  45. +++ b/sysdeps/m68k/m680x0/rshift.S
  46. @@ -56,9 +56,9 @@ ENTRY(__mpn_rshift)
  47. bne L(Lnormal)
  48. cmpl R(res_ptr),R(s_ptr)
  49. bls L(Lspecial) /* jump if res_ptr >= s_ptr */
  50. -#if (defined (__mc68020__) || defined (__NeXT__) || defined(mc68020))
  51. +#if M68K_SCALE_AVAILABLE
  52. lea MEM_INDX1(res_ptr,s_size,l,4),R(a2)
  53. -#else /* not mc68020 */
  54. +#else
  55. movel R(s_size),R(d0)
  56. asll #2,R(d0)
  57. lea MEM_INDX(res_ptr,d0,l),R(a2)
  58. @@ -121,10 +121,10 @@ L(Lend:)
  59. cfi_restore_state
  60. L(Lspecial:)
  61. -#if (defined (__mc68020__) || defined (__NeXT__) || defined(mc68020))
  62. +#if M68K_SCALE_AVAILABLE
  63. lea MEM_INDX1(s_ptr,s_size,l,4),R(s_ptr)
  64. lea MEM_INDX1(res_ptr,s_size,l,4),R(res_ptr)
  65. -#else /* not mc68000 */
  66. +#else
  67. movel R(s_size),R(d0)
  68. asll #2,R(d0)
  69. addl R(d0),R(s_ptr)
  70. diff --git a/sysdeps/m68k/m680x0/sysdep.h b/sysdeps/m68k/m680x0/sysdep.h
  71. index b31e101273..bee5b3391c 100644
  72. --- a/sysdeps/m68k/m680x0/sysdep.h
  73. +++ b/sysdeps/m68k/m680x0/sysdep.h
  74. @@ -37,3 +37,10 @@
  75. OP " " SRC "(" PC "), " DST
  76. #endif /* __ASSEMBLER__ */
  77. +
  78. +# if defined __mc68020__ || defined __mc68030__ || defined __mc68040__ \
  79. + || defined __mc68060__
  80. +# define M68K_SCALE_AVAILABLE 1
  81. +# else
  82. +# define M68K_SCALE_AVAILABLE 0
  83. +# endif
  84. --
  85. 2.39.2