diff --git a/Config.in b/Config.in index ae611f81e..51ff01ef4 100644 --- a/Config.in +++ b/Config.in @@ -518,6 +518,14 @@ config USE_PORTABLE_CODE compiler other than gcc. If you do use gcc, this option may needlessly increase code size. +config STACK_OPTIMIZATION_386 + bool "Use -mpreferred-stack-boundary=2 on i386 arch" + default y + help + This option makes for smaller code, but some libc versions + do not work with it (they use SSE instructions without + ensuring stack alignment). + comment 'Installation Options ("make install" behavior)' choice diff --git a/arch/i386/Makefile b/arch/i386/Makefile index e6c99c67d..425361fd9 100644 --- a/arch/i386/Makefile +++ b/arch/i386/Makefile @@ -2,6 +2,12 @@ # Build system # ========================================================================== +# Allow i486 insns (basically, bswap insn) +# Do not try to tune for 486+ (might add padding) +CFLAGS += $(call cc-option,-march=i486 -mtune=i386,) + +ifeq ($(CONFIG_STACK_OPTIMIZATION_386),y) # -mpreferred-stack-boundary=2 is essential in preventing gcc 4.2.x # from aligning stack to 16 bytes. (Which is gcc's way of supporting SSE). -CFLAGS += $(call cc-option,-march=i386 -mpreferred-stack-boundary=2,) +CFLAGS += $(call cc-option,-mpreferred-stack-boundary=2,) +endif