]> git.ipfire.org Git - thirdparty/glibc.git/commitdiff
m68k: Use M68K_SCALE_AVAILABLE on __mpn_lshift and __mpn_rshift
authorAdhemerval Zanella <adhemerval.zanella@linaro.org>
Fri, 18 Aug 2023 17:49:31 +0000 (14:49 -0300)
committerAdhemerval Zanella <adhemerval.zanella@linaro.org>
Fri, 25 Aug 2023 13:07:24 +0000 (10:07 -0300)
This patch adds a new macro, M68K_SCALE_AVAILABLE, similar to gmp
scale_available_p (mpn/m68k/m68k-defs.m4) that expand to 1 if a
scale factor can be used in addressing modes.  This is used
instead of __mc68020__ for some optimization decisions.

Checked on a build for m68k-linux-gnu target mc68020 and mc68040.

sysdeps/m68k/m680x0/lshift.S
sysdeps/m68k/m680x0/rshift.S
sysdeps/m68k/m680x0/sysdep.h

index 4240738959c5da377208b6ef1d603e1f6ed85a68..74de90380bb46be8866d0042b56e993f34b9752d 100644 (file)
@@ -57,9 +57,9 @@ ENTRY(__mpn_lshift)
        bne     L(Lnormal)
        cmpl    R(s_ptr),R(res_ptr)
        bls     L(Lspecial)             /* jump if s_ptr >= res_ptr */
-#if (defined (__mc68020__) || defined (__NeXT__) || defined(mc68020))
+#if M68K_SCALE_AVAILABLE
        lea     MEM_INDX1(s_ptr,s_size,l,4),R(a2)
-#else /* not mc68020 */
+#else
        movel   R(s_size),R(d0)
        asll    #2,R(d0)
        lea     MEM_INDX(s_ptr,d0,l),R(a2)
@@ -71,7 +71,7 @@ L(Lnormal:)
        moveql  #32,R(d5)
        subl    R(cnt),R(d5)
 
-#if (defined (__mc68020__) || defined (__NeXT__) || defined(mc68020))
+#if M68K_SCALE_AVAILABLE
        lea     MEM_INDX1(s_ptr,s_size,l,4),R(s_ptr)
        lea     MEM_INDX1(res_ptr,s_size,l,4),R(res_ptr)
 #else /* not mc68000 */
index d56a2b4a4430ef2f8544f6f1d1bfc954c005d243..d398d0287e889a01a0226d195c846a233c74f00f 100644 (file)
@@ -56,9 +56,9 @@ ENTRY(__mpn_rshift)
        bne     L(Lnormal)
        cmpl    R(res_ptr),R(s_ptr)
        bls     L(Lspecial)             /* jump if res_ptr >= s_ptr */
-#if (defined (__mc68020__) || defined (__NeXT__) || defined(mc68020))
+#if M68K_SCALE_AVAILABLE
        lea     MEM_INDX1(res_ptr,s_size,l,4),R(a2)
-#else /* not mc68020 */
+#else
        movel   R(s_size),R(d0)
        asll    #2,R(d0)
        lea     MEM_INDX(res_ptr,d0,l),R(a2)
@@ -121,10 +121,10 @@ L(Lend:)
 
        cfi_restore_state
 L(Lspecial:)
-#if (defined (__mc68020__) || defined (__NeXT__) || defined(mc68020))
+#if M68K_SCALE_AVAILABLE
        lea     MEM_INDX1(s_ptr,s_size,l,4),R(s_ptr)
        lea     MEM_INDX1(res_ptr,s_size,l,4),R(res_ptr)
-#else /* not mc68000 */
+#else
        movel   R(s_size),R(d0)
        asll    #2,R(d0)
        addl    R(d0),R(s_ptr)
index b31e101273acaa909632bac44f4740791dc7a789..bee5b3391c381d9190beca60b18fe7d1d3dd5497 100644 (file)
   OP " " SRC "(" PC "), " DST
 
 #endif /* __ASSEMBLER__ */
+
+# if defined __mc68020__ || defined __mc68030__ || defined __mc68040__       \
+     || defined __mc68060__
+#  define M68K_SCALE_AVAILABLE 1
+# else
+#  define M68K_SCALE_AVAILABLE 0
+# endif