diff -urpN john-1.7.8-jumbo-8b/run/sse2i_winfix.pl john-1.7.8-jumbo-8a/run/sse2i_winfix.pl
--- john-1.7.8-jumbo-8b/run/sse2i_winfix.pl	1970-01-01 00:00:00.000000000 +0000
+++ john-1.7.8-jumbo-8a/run/sse2i_winfix.pl	2011-11-10 19:30:10.203125000 +0000
@@ -0,0 +1,38 @@
+#!/usr/bin/perl -w
+use strict;
+my $VERSION = "1.00";
+####################################################################
+# This script will modifies .S file built with icc-32 bit, so that
+# it can be compiled properly with cygwin. We have to comment out
+# several lines, and we also have to add a block of #defines, for
+# the modification of the 'NEEDSUNDERSCORE' building.
+####################################################################
+
+unless ( -e "sse-intrinsics-win32.S" ) {
+
+	open INPUT,  "<", "sse-intrinsics-32.S"    or die $!;
+    open OUTPUT, ">", "sse-intrinsics-win32.S" or die $!;
+	my $line = <INPUT>;
+	print OUTPUT $line;
+	print OUTPUT "\n#ifdef UNDERSCORES\n";
+	print OUTPUT "#define memcpy	    _memcpy\n";
+	print OUTPUT "#define memset	    _memset\n";
+	print OUTPUT "#define strlen	    _strlen\n";
+	print OUTPUT "#define MD5_Init    _MD5_Init\n";
+	print OUTPUT "#define MD5_Update  _MD5_Update\n";
+	print OUTPUT "#define MD5_Final   _MD5_Final\n";
+	print OUTPUT "#define SSEmd5body   _SSEmd5body\n";
+	print OUTPUT "#define SSESHA1body  _SSESHA1body\n";
+	print OUTPUT "#define SSEmd4body   _SSEmd4body\n";
+	print OUTPUT "#define md5cryptsse  _md5cryptsse\n";
+	print OUTPUT "#endif\n\n";
+	while (<INPUT>) {                        
+		next if (/^\t\.type\t/);
+		next if (/^\t\.size\t/);
+		next if (/^\t\.section \.rodata\./);
+		next if (/^\t\.section \.note\./);
+		print OUTPUT;
+	}
+	close INPUT;
+	close OUTPUT;
+}
diff -urpN john-1.7.8-jumbo-8b/src/Makefile john-1.7.8-jumbo-8a/src/Makefile
--- john-1.7.8-jumbo-8b/src/Makefile	2011-11-10 19:44:23.906250000 +0000
+++ john-1.7.8-jumbo-8a/src/Makefile	2011-11-10 19:35:06.421875000 +0000
@@ -975,8 +975,9 @@ dos-djgpp-x86-any:
 win32-cygwin-x86-sse2i:
 	$(CP) x86-ssei.h arch.h
 	@echo "#define JOHN_BLD" '"'$@'"' > john_build_rule.h
+	perl ../run/sse2i_winfix.pl
 	$(MAKE) $(PROJ_WIN32) \
-		JOHN_OBJS="sse-intrinsics-32.S $(JOHN_OBJS) x86.o x86-sse.o " \
+		JOHN_OBJS="sse-intrinsics-win32.o $(JOHN_OBJS) x86.o x86-sse.o " \
 		CFLAGS="$(CFLAGS) -Wall -mpreferred-stack-boundary=4 -msse2 -m32 -DUSING_ICC_S_FILE" \
 		ASFLAGS="$(ASFLAGS) -DUNDERSCORES"
 
@@ -1007,8 +1008,9 @@ win32-cygwin-x86-any:
 win32-mingw-x86-sse2i:
 	$(CP) x86-ssei.h arch.h
 	@echo "#define JOHN_BLD" '"'$@'"' > john_build_rule.h
+	perl ../run/sse2i_winfix.pl
 	$(MAKE) $(PROJ_WIN32_MINGW) \
-		JOHN_OBJS="sse-intrinsics-32.S $(JOHN_OBJS) x86.o x86-sse.o " \
+		JOHN_OBJS="sse-intrinsics-win32.o $(JOHN_OBJS) x86.o x86-sse.o " \
 		CFLAGS="$(CFLAGS) -Wall -mpreferred-stack-boundary=4 -msse2 -m32 -DUSING_ICC_S_FILE" \
 		ASFLAGS="$(ASFLAGS) -DUNDERSCORES"
 
@@ -1274,6 +1276,7 @@ clean:
 	$(RM) ../run/john.exe john-macosx-* *.o *.bak core
 	$(RM) detect bench generic.h arch.h tmp.s
 	$(RM) fmt_registers.h fmt_externs.h john_build_rule.h
+	$(RM) sse-intrinsics-win32.S
 	$(CP) $(NULL) Makefile.dep
 
 # For the time being, icc builds a better sse-intrinsics.S but this may
@@ -1282,7 +1285,7 @@ clean:
 intrinsics: clean-intrinsics sse-intrinsics.S sse-intrinsics-32.S
 
 clean-intrinsics:
-	$(RM) sse-intrinsics.S sse-intrinsics-32.S
+	$(RM) sse-intrinsics.S sse-intrinsics-32.S sse-intrinsics-win32.S
 
 sse-intrinsics.S:
 	$(LN) x86-64.h arch.h
