diff --git a/arch/arm/Kconfig b/arch/arm/Kconfig index 80038ecb24..855871c64f 100644 --- a/arch/arm/Kconfig +++ b/arch/arm/Kconfig @@ -128,7 +128,16 @@ config ENABLE_ARM_SOC_BOOT0_HOOK config USE_ARCH_MEMCPY bool "Use an assembly optimized implementation of memcpy" - default y if CPU_V7 + default y + depends on !ARM64 + help + Enable the generation of an optimized version of memcpy. + Such implementation may be faster under some conditions + but may increase the binary size. + +config SPL_USE_ARCH_MEMCPY + bool "Use an assembly optimized implementation of memcpy" + default y if USE_ARCH_MEMCPY depends on !ARM64 help Enable the generation of an optimized version of memcpy. @@ -137,7 +146,16 @@ config USE_ARCH_MEMCPY config USE_ARCH_MEMSET bool "Use an assembly optimized implementation of memset" - default y if CPU_V7 + default y + depends on !ARM64 + help + Enable the generation of an optimized version of memset. + Such implementation may be faster under some conditions + but may increase the binary size. + +config SPL_USE_ARCH_MEMSET + bool "Use an assembly optimized implementation of memset" + default y if USE_ARCH_MEMSET depends on !ARM64 help Enable the generation of an optimized version of memset. diff --git a/arch/arm/lib/Makefile b/arch/arm/lib/Makefile index 024139da25..166fa9e3da 100644 --- a/arch/arm/lib/Makefile +++ b/arch/arm/lib/Makefile @@ -30,12 +30,12 @@ obj-$(CONFIG_CMD_BOOTI) += bootm.o obj-$(CONFIG_CMD_BOOTM) += bootm.o obj-$(CONFIG_CMD_BOOTZ) += bootm.o zimage.o obj-$(CONFIG_SYS_L2_PL310) += cache-pl310.o -obj-$(CONFIG_USE_ARCH_MEMSET) += memset.o -obj-$(CONFIG_USE_ARCH_MEMCPY) += memcpy.o else obj-$(CONFIG_SPL_FRAMEWORK) += spl.o obj-$(CONFIG_SPL_FRAMEWORK) += zimage.o endif +obj-$(CONFIG_$(SPL_)USE_ARCH_MEMSET) += memset.o +obj-$(CONFIG_$(SPL_)USE_ARCH_MEMCPY) += memcpy.o obj-$(CONFIG_SEMIHOSTING) += semihosting.o obj-y += sections.o diff --git a/common/init/board_init.c b/common/init/board_init.c index ef01a9aeaa..193d8180a9 100644 --- a/common/init/board_init.c +++ b/common/init/board_init.c @@ -17,7 +17,7 @@ DECLARE_GLOBAL_DATA_PTR; */ #if !defined(CONFIG_SPL_BUILD) || \ (defined(CONFIG_SPL_LIBGENERIC_SUPPORT) && \ - !defined(CONFIG_USE_ARCH_MEMSET)) + !defined(CONFIG_SPL_USE_ARCH_MEMCPY)) #define _USE_MEMCPY #endif diff --git a/configs/apf27_defconfig b/configs/apf27_defconfig index 2da500aec6..64040aa321 100644 --- a/configs/apf27_defconfig +++ b/configs/apf27_defconfig @@ -1,4 +1,5 @@ CONFIG_ARM=y +# CONFIG_SPL_USE_ARCH_MEMCPY is not set CONFIG_TARGET_APF27=y CONFIG_SPL_NAND_SUPPORT=y CONFIG_SPL_SERIAL_SUPPORT=y diff --git a/configs/axm_defconfig b/configs/axm_defconfig index db988c8be7..539e776592 100644 --- a/configs/axm_defconfig +++ b/configs/axm_defconfig @@ -1,4 +1,6 @@ CONFIG_ARM=y +# CONFIG_SPL_USE_ARCH_MEMCPY is not set +# CONFIG_SPL_USE_ARCH_MEMSET is not set CONFIG_ARCH_AT91=y CONFIG_TARGET_TAURUS=y CONFIG_SPL_GPIO_SUPPORT=y diff --git a/configs/corvus_defconfig b/configs/corvus_defconfig index e33d3719b9..fc10399844 100644 --- a/configs/corvus_defconfig +++ b/configs/corvus_defconfig @@ -1,4 +1,6 @@ CONFIG_ARM=y +# CONFIG_SPL_USE_ARCH_MEMCPY is not set +# CONFIG_SPL_USE_ARCH_MEMSET is not set CONFIG_ARCH_AT91=y CONFIG_TARGET_CORVUS=y CONFIG_SPL_GPIO_SUPPORT=y diff --git a/configs/mx31pdk_defconfig b/configs/mx31pdk_defconfig index bb1f121f3f..59084d7b65 100644 --- a/configs/mx31pdk_defconfig +++ b/configs/mx31pdk_defconfig @@ -1,4 +1,6 @@ CONFIG_ARM=y +# CONFIG_SPL_USE_ARCH_MEMCPY is not set +# CONFIG_SPL_USE_ARCH_MEMSET is not set CONFIG_TARGET_MX31PDK=y CONFIG_SPL_LIBGENERIC_SUPPORT=y CONFIG_SPL_NAND_SUPPORT=y diff --git a/configs/omap4_sdp4430_defconfig b/configs/omap4_sdp4430_defconfig index f3a8b0c8d2..862f3f01a3 100644 --- a/configs/omap4_sdp4430_defconfig +++ b/configs/omap4_sdp4430_defconfig @@ -1,4 +1,6 @@ CONFIG_ARM=y +# CONFIG_SPL_USE_ARCH_MEMCPY is not set +# CONFIG_SPL_USE_ARCH_MEMSET is not set CONFIG_OMAP44XX=y # CONFIG_SPL_I2C_SUPPORT is not set # CONFIG_SPL_NAND_SUPPORT is not set diff --git a/configs/smartweb_defconfig b/configs/smartweb_defconfig index eab598e41f..a0d31666e8 100644 --- a/configs/smartweb_defconfig +++ b/configs/smartweb_defconfig @@ -1,4 +1,6 @@ CONFIG_ARM=y +# CONFIG_SPL_USE_ARCH_MEMCPY is not set +# CONFIG_SPL_USE_ARCH_MEMSET is not set CONFIG_ARCH_AT91=y CONFIG_TARGET_SMARTWEB=y CONFIG_SPL_GPIO_SUPPORT=y diff --git a/configs/smdk5250_defconfig b/configs/smdk5250_defconfig index a34f915d55..ff52a3757a 100644 --- a/configs/smdk5250_defconfig +++ b/configs/smdk5250_defconfig @@ -1,4 +1,6 @@ CONFIG_ARM=y +# CONFIG_SPL_USE_ARCH_MEMCPY is not set +# CONFIG_SPL_USE_ARCH_MEMSET is not set CONFIG_ARCH_EXYNOS=y CONFIG_ARCH_EXYNOS5=y CONFIG_TARGET_SMDK5250=y diff --git a/configs/snow_defconfig b/configs/snow_defconfig index 2ef3774041..d6a48cb12c 100644 --- a/configs/snow_defconfig +++ b/configs/snow_defconfig @@ -1,4 +1,6 @@ CONFIG_ARM=y +# CONFIG_SPL_USE_ARCH_MEMCPY is not set +# CONFIG_SPL_USE_ARCH_MEMSET is not set CONFIG_ARCH_EXYNOS=y CONFIG_ARCH_EXYNOS5=y CONFIG_TARGET_SNOW=y diff --git a/configs/spring_defconfig b/configs/spring_defconfig index 243a9ec540..a64e648b67 100644 --- a/configs/spring_defconfig +++ b/configs/spring_defconfig @@ -1,4 +1,6 @@ CONFIG_ARM=y +# CONFIG_SPL_USE_ARCH_MEMCPY is not set +# CONFIG_SPL_USE_ARCH_MEMSET is not set CONFIG_ARCH_EXYNOS=y CONFIG_ARCH_EXYNOS5=y CONFIG_TARGET_SPRING=y diff --git a/configs/taurus_defconfig b/configs/taurus_defconfig index 793de2909f..0f6841b21f 100644 --- a/configs/taurus_defconfig +++ b/configs/taurus_defconfig @@ -1,4 +1,6 @@ CONFIG_ARM=y +# CONFIG_SPL_USE_ARCH_MEMCPY is not set +# CONFIG_SPL_USE_ARCH_MEMSET is not set CONFIG_ARCH_AT91=y CONFIG_TARGET_TAURUS=y CONFIG_SPL_GPIO_SUPPORT=y diff --git a/configs/x600_defconfig b/configs/x600_defconfig index 4b47fc68f6..28e268e19b 100644 --- a/configs/x600_defconfig +++ b/configs/x600_defconfig @@ -1,4 +1,6 @@ CONFIG_ARM=y +# CONFIG_SPL_USE_ARCH_MEMCPY is not set +# CONFIG_SPL_USE_ARCH_MEMSET is not set CONFIG_TARGET_X600=y CONFIG_SPL_LIBCOMMON_SUPPORT=y CONFIG_SPL_LIBGENERIC_SUPPORT=y diff --git a/examples/api/Makefile b/examples/api/Makefile index 6cffee7465..dab6398bab 100644 --- a/examples/api/Makefile +++ b/examples/api/Makefile @@ -35,6 +35,9 @@ EXT_COBJ-y += lib/string.o EXT_COBJ-y += lib/time.o EXT_COBJ-y += lib/vsprintf.o EXT_SOBJ-$(CONFIG_PPC) += arch/powerpc/lib/ppcstring.o +ifeq ($(ARCH),arm) +EXT_SOBJ-$(CONFIG_USE_ARCH_MEMSET) += arch/arm/lib/memset.o +endif # Create a list of object files to be compiled OBJS := $(OBJ-y) $(notdir $(EXT_COBJ-y) $(EXT_SOBJ-y)) @@ -60,5 +63,5 @@ $(addprefix $(obj)/,$(notdir $(EXT_COBJ-y))): $(obj)/%.o: lib/%.c FORCE $(call if_changed_rule,cc_o_c) # Rule to build architecture-specific library assembly files -$(addprefix $(obj)/,$(notdir $(EXT_SOBJ-y))): $(obj)/%.o: arch/powerpc/lib/%.S FORCE +$(addprefix $(obj)/,$(notdir $(EXT_SOBJ-y))): $(obj)/%.o: arch/$(ARCH)/lib/%.S FORCE $(call if_changed_dep,as_o_S)