diff -Nru linux-2.4.20/arch/i386/Makefile linux-2.4.20-pfeifer-r1_pre8/arch/i386/Makefile
--- linux-2.4.20/arch/i386/Makefile	2002-11-28 17:53:09.000000000 -0600
+++ linux-2.4.20-pfeifer-r1_pre8/arch/i386/Makefile	2003-05-02 20:55:52.000000000 -0500
@@ -46,28 +46,64 @@
 CFLAGS += -march=i586
 endif
 
+ifdef CONFIG_M586MMX31
+CFLAGS += -march=pentium -mmmx
+endif
+
 ifdef CONFIG_M686
 CFLAGS += -march=i686
 endif
 
+ifdef CONFIG_MPPRO31
+CFLAGS += -march=pentiumpro
+endif
+
+ifdef CONFIG_M68631
+CFLAGS += -march=pentium2
+endif
+
 ifdef CONFIG_MPENTIUMIII
 CFLAGS += -march=i686
 endif
 
+ifdef CONFIG_MPENTIUMIII31
+CFLAGS += -march=pentium3
+endif
+
 ifdef CONFIG_MPENTIUM4
 CFLAGS += -march=i686
 endif
 
+ifdef CONFIG_MPENTIUM431
+CFLAGS += -march=pentium4
+endif
+
 ifdef CONFIG_MK6
 CFLAGS += $(shell if $(CC) -march=k6 -S -o /dev/null -xc /dev/null >/dev/null 2>&1; then echo "-march=k6"; else echo "-march=i586"; fi)
 endif
 
+ifdef CONFIG_MK6231
+CFLAGS += -march=k6-2
+endif
+
 ifdef CONFIG_MK7
-CFLAGS += $(shell if $(CC) -march=athlon -S -o /dev/null -xc /dev/null >/dev/null 2>&1; then echo "-march=athlon"; else echo "-march=i686 -malign-functions=4"; fi) 
+CFLAGS += -march=i686
+endif
+
+ifdef CONFIG_MK731
+CFLAGS += -march=athlon
+endif
+
+ifdef CONFIG_MXP31
+CFLAGS += -march=athlon-xp
+endif
+
+ifdef CONFIG_MMP31
+CFLAGS += -march=athlon-mp
 endif
 
 ifdef CONFIG_MCRUSOE
-CFLAGS += -march=i686 -malign-functions=0 -malign-jumps=0 -malign-loops=0
+CFLAGS += -march=i686 -falign-functions=0 -falign-jumps=0 -falign-loops=0
 endif
 
 ifdef CONFIG_MWINCHIPC6
@@ -83,7 +119,7 @@
 endif
 
 ifdef CONFIG_MCYRIXIII
-CFLAGS += -march=i486 -malign-functions=0 -malign-jumps=0 -malign-loops=0
+CFLAGS += -march=i486 -falign-functions=0 -falign-jumps=0 -falign-loops=0
 endif
 
 HEAD := arch/i386/kernel/head.o arch/i386/kernel/init_task.o
diff -Nru linux-old/arch/i386/config.in linux-new/arch/i386/config.in
--- linux-old/arch/i386/config.in	2002-10-23 21:18:49.000000000 -0400
+++ linux-new/arch/i386/config.in	2002-10-23 21:20:54.000000000 -0400
@@ -31,11 +31,20 @@
 	 586/K5/5x86/6x86/6x86MX		CONFIG_M586 \
 	 Pentium-Classic			CONFIG_M586TSC \
 	 Pentium-MMX				CONFIG_M586MMX \
+	 Pentium-MMX(gcc>31)			CONFIG_M586MMX31 \
 	 Pentium-Pro/Celeron/Pentium-II		CONFIG_M686 \
+	 Pentium-Pro(gcc>31)			CONFIG_MPPRO31 \
+	 Pentium-II/Celeron(gcc>31)		CONFIG_M68631 \
 	 Pentium-III/Celeron(Coppermine)	CONFIG_MPENTIUMIII \
+	 Pentium-III/Celeron(Coppermine)(gcc>31)	CONFIG_MPENTIUMIII31 \
 	 Pentium-4				CONFIG_MPENTIUM4 \
+	 Pentium-4(gcc>31)			CONFIG_MPENTIUM431 \
 	 K6/K6-II/K6-III			CONFIG_MK6 \
+	 K6-II/K6-III(gcc>31)			CONFIG_MK6231 \
 	 Athlon/Duron/K7			CONFIG_MK7 \
+	 Athlon/Duron/K7(>gcc31)			CONFIG_MK731 \
+	 AthlonXP(gcc>31)			CONFIG_MXP31 \
+	 AthlonMP(gcc>31)			CONFIG_MMP31 \
 	 Elan					CONFIG_MELAN \
 	 Crusoe					CONFIG_MCRUSOE \
 	 Winchip-C6				CONFIG_MWINCHIPC6 \
@@ -95,6 +103,14 @@
    define_bool CONFIG_X86_PPRO_FENCE y
    define_bool CONFIG_X86_F00F_WORKS_OK n
 fi
+if [ "$CONFIG_M586MMX31" = "y" ]; then
+   define_int  CONFIG_X86_L1_CACHE_SHIFT 5
+   define_bool CONFIG_X86_USE_STRING_486 y
+   define_bool CONFIG_X86_ALIGNMENT_16 y
+   define_bool CONFIG_X86_HAS_TSC y
+   define_bool CONFIG_X86_GOOD_APIC y
+   define_bool CONFIG_X86_PPRO_FENCE y
+fi
 if [ "$CONFIG_M686" = "y" ]; then
    define_int  CONFIG_X86_L1_CACHE_SHIFT 5
    define_bool CONFIG_X86_HAS_TSC y
@@ -104,6 +120,24 @@
    define_bool CONFIG_X86_PPRO_FENCE y
    define_bool CONFIG_X86_F00F_WORKS_OK y
 fi
+if [ "$CONFIG_MPPRO31" = "y" ]; then
+   define_int  CONFIG_X86_L1_CACHE_SHIFT 5
+   define_bool CONFIG_X86_HAS_TSC y
+   define_bool CONFIG_X86_GOOD_APIC y
+   define_bool CONFIG_X86_PGE y
+   define_bool CONFIG_X86_USE_PPRO_CHECKSUM y
+   define_bool CONFIG_X86_PPRO_FENCE y
+   define_bool CONFIG_X86_F00F_WORKS_OK y
+fi
+if [ "$CONFIG_M68631" = "y" ]; then
+   define_int  CONFIG_X86_L1_CACHE_SHIFT 5
+   define_bool CONFIG_X86_HAS_TSC y
+   define_bool CONFIG_X86_GOOD_APIC y
+   define_bool CONFIG_X86_PGE y
+   define_bool CONFIG_X86_USE_PPRO_CHECKSUM y
+   define_bool CONFIG_X86_PPRO_FENCE y
+   define_bool CONFIG_X86_F00F_WORKS_OK y
+fi
 if [ "$CONFIG_MPENTIUMIII" = "y" ]; then
    define_int  CONFIG_X86_L1_CACHE_SHIFT 5
    define_bool CONFIG_X86_HAS_TSC y
@@ -112,6 +136,13 @@
    define_bool CONFIG_X86_USE_PPRO_CHECKSUM y
    define_bool CONFIG_X86_F00F_WORKS_OK y
 fi
+if [ "$CONFIG_MPENTIUMIII31" = "y" ]; then
+   define_int  CONFIG_X86_L1_CACHE_SHIFT 5
+   define_bool CONFIG_X86_HAS_TSC y
+   define_bool CONFIG_X86_GOOD_APIC y
+   define_bool CONFIG_X86_PGE y
+   define_bool CONFIG_X86_USE_PPRO_CHECKSUM y
+fi
 if [ "$CONFIG_MPENTIUM4" = "y" ]; then
    define_int  CONFIG_X86_L1_CACHE_SHIFT 7
    define_bool CONFIG_X86_HAS_TSC y
@@ -120,12 +151,25 @@
    define_bool CONFIG_X86_USE_PPRO_CHECKSUM y
    define_bool CONFIG_X86_F00F_WORKS_OK y
 fi
+if [ "$CONFIG_MPENTIUM431" = "y" ]; then
+   define_int  CONFIG_X86_L1_CACHE_SHIFT 7
+   define_bool CONFIG_X86_HAS_TSC y
+   define_bool CONFIG_X86_GOOD_APIC y
+   define_bool CONFIG_X86_PGE y
+   define_bool CONFIG_X86_USE_PPRO_CHECKSUM y
+fi
 if [ "$CONFIG_MK6" = "y" ]; then
    define_int  CONFIG_X86_L1_CACHE_SHIFT 5
    define_bool CONFIG_X86_ALIGNMENT_16 y
    define_bool CONFIG_X86_HAS_TSC y
    define_bool CONFIG_X86_USE_PPRO_CHECKSUM y
 fi
+if [ "$CONFIG_MK6231" = "y" ]; then
+   define_int  CONFIG_X86_L1_CACHE_SHIFT 5
+   define_bool CONFIG_X86_ALIGNMENT_16 y
+   define_bool CONFIG_X86_HAS_TSC y
+   define_bool CONFIG_X86_USE_PPRO_CHECKSUM y
+fi
 if [ "$CONFIG_MK7" = "y" ]; then
    define_int  CONFIG_X86_L1_CACHE_SHIFT 6
    define_bool CONFIG_X86_HAS_TSC y
@@ -135,6 +179,30 @@
    define_bool CONFIG_X86_USE_PPRO_CHECKSUM y
    define_bool CONFIG_X86_F00F_WORKS_OK y
 fi
+if [ "$CONFIG_MK731" = "y" ]; then
+   define_int  CONFIG_X86_L1_CACHE_SHIFT 6
+   define_bool CONFIG_X86_HAS_TSC y
+   define_bool CONFIG_X86_GOOD_APIC y
+   define_bool CONFIG_X86_USE_3DNOW y
+   define_bool CONFIG_X86_PGE y
+   define_bool CONFIG_X86_USE_PPRO_CHECKSUM y
+fi
+if [ "$CONFIG_MXP31" = "y" ]; then
+   define_int  CONFIG_X86_L1_CACHE_SHIFT 6
+   define_bool CONFIG_X86_HAS_TSC y
+   define_bool CONFIG_X86_GOOD_APIC y
+   define_bool CONFIG_X86_USE_3DNOW y
+   define_bool CONFIG_X86_PGE y
+   define_bool CONFIG_X86_USE_PPRO_CHECKSUM y
+fi
+if [ "$CONFIG_MMP31" = "y" ]; then
+   define_int  CONFIG_X86_L1_CACHE_SHIFT 6
+   define_bool CONFIG_X86_HAS_TSC y
+   define_bool CONFIG_X86_GOOD_APIC y
+   define_bool CONFIG_X86_USE_3DNOW y
+   define_bool CONFIG_X86_PGE y
+   define_bool CONFIG_X86_USE_PPRO_CHECKSUM y
+fi
 if [ "$CONFIG_MELAN" = "y" ]; then
    define_int  CONFIG_X86_L1_CACHE_SHIFT 4
    define_bool CONFIG_X86_USE_STRING_486 y
diff -Nru linux-old/arch/i386/lib/mmx.c linux-new/arch/i386/lib/mmx.c
--- linux-old/arch/i386/lib/mmx.c	2002-10-23 20:54:42.000000000 -0400
+++ linux-new/arch/i386/lib/mmx.c	2002-10-23 21:20:54.000000000 -0400
@@ -121,7 +121,8 @@
 	return p;
 }
 
-#ifdef CONFIG_MK7
+#if defined(CONFIG_MK7) || defined(CONFIG_MK731) \
+			|| defined(CONFIG_MXP31) || defined(CONFIG_MMP31)
 
 /*
  *	The K7 has streaming cache bypass load/store. The Cyrix III, K6 and
diff -Nru linux-old/include/asm-i386/processor.h linux-new/include/asm-i386/processor.h
--- linux-old/include/asm-i386/processor.h	2002-10-23 21:00:52.000000000 -0400
+++ linux-new/include/asm-i386/processor.h	2002-10-23 21:20:54.000000000 -0400
@@ -496,7 +496,7 @@
 #define cpu_relax()	rep_nop()
 
 /* Prefetch instructions for Pentium III and AMD Athlon */
-#ifdef 	CONFIG_MPENTIUMIII
+#if defined(CONFIG_MPENTIUMIII) || defined(CONFIG_MPENTIUMIII31)
 
 #define ARCH_HAS_PREFETCH
 extern inline void prefetch(const void *x)
