Re: [RFC PATCH 2/2] arch/m68k: Add CONFIG_CPU_HAS_NO_MULDIV32

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi George,

On 11/05/16 20:25, George Spelvin wrote:
Assembly of 32-bit multiply/divide helpers was dependent on
CONFIG_CPU_HAS_NO_MULDIV64, which is not necessary.

Signed-off-by: George Spelvin <linux@xxxxxxxxxxx>
---
This also turns out to be a very useful symbol for some other work
I'm doing to <linux/hash.h>.

  arch/m68k/Kconfig.cpu  | 11 +++++++++++
  arch/m68k/lib/Makefile |  4 ++--
  2 files changed, 13 insertions(+), 2 deletions(-)

diff --git a/arch/m68k/Kconfig.cpu b/arch/m68k/Kconfig.cpu
index 0dfcf12..3fce7bf 100644
--- a/arch/m68k/Kconfig.cpu
+++ b/arch/m68k/Kconfig.cpu
@@ -37,6 +37,7 @@ config M68000
  	bool "MC68000"
  	depends on !MMU
  	select CPU_HAS_NO_BITFIELDS
+	select CPU_HAS_NO_MULDIV32
  	select CPU_HAS_NO_MULDIV64
  	select CPU_HAS_NO_UNALIGNED
  	select GENERIC_CSUM
@@ -391,8 +392,18 @@ config NODES_SHIFT
  config CPU_HAS_NO_BITFIELDS
  	bool

+config CPU_HAS_NO_MULDIV32
+	bool
+	help
+	  This option indicates the CPU lacks 32x32->32-bit multiply
+	  and divide instructions, and thus requires the GCC helper
+	  functions __mulsi3, __divsi3 __modsi3, etc.
+
  config CPU_HAS_NO_MULDIV64
  	bool
+	help
+	  This option indicates the CPU lacks "widening" 32x32->64-bit
+	  multiply and 64/32->(32,32)-bit divide instructions.

  config CPU_HAS_NO_UNALIGNED
  	bool
diff --git a/arch/m68k/lib/Makefile b/arch/m68k/lib/Makefile
index fcd8eb1..e6553db 100644
--- a/arch/m68k/lib/Makefile
+++ b/arch/m68k/lib/Makefile
@@ -7,8 +7,8 @@ lib-y	:= ashldi3.o ashrdi3.o lshrdi3.o muldi3.o \
  	   memcpy.o memset.o memmove.o

  lib-$(CONFIG_MMU) += uaccess.o
-lib-$(CONFIG_CPU_HAS_NO_MULDIV64) += mulsi3.o divsi3.o udivsi3.o
-lib-$(CONFIG_CPU_HAS_NO_MULDIV64) += modsi3.o umodsi3.o
+lib-$(CONFIG_CPU_HAS_NO_MULDIV32) += mulsi3.o divsi3.o udivsi3.o
+lib-$(CONFIG_CPU_HAS_NO_MULDIV32) += modsi3.o umodsi3.o

Did you intend to no longer compile any of mulsi3.o, etc, for
ColdFire targets?

CPU_HAS_NO_MULDIV64 is selected by both M68000 and ColdFire, so
those functions used to be compiled. But with this change on
only M68000 will compile them.

That causes a problem if we are forced to fallback and use the
gcc -m5200 cpu switch. (That may be the case if the version of
gcc we are compiling with doesn't support the more advanced
ColdFire CPU selection switches).

When compiling with m5200 gcc will generate calls to divsi3,
udivsi3, modsi3 and umodsi3. (As far as I can tell we never need
mulsi3 for ColdFire). So linking will fail with this patch as-is
in that m5200 case.

Regards
Greg

--
To unsubscribe from this list: send the line "unsubscribe linux-m68k" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html



[Index of Archives]     [Video for Linux]     [Yosemite News]     [Linux S/390]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux