summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Config.in8
-rw-r--r--arch/i386/Makefile8
2 files changed, 15 insertions, 1 deletions
diff --git a/Config.in b/Config.in
index ae611f8..51ff01e 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 e6c99c6..425361f 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