--- e2fsprogs-1.42.6/lib/ext2fs/bitops.h.~1~	2012-09-10 04:53:00.000000000 +0200
+++ e2fsprogs-1.42.6/lib/ext2fs/bitops.h	2012-12-16 13:39:46.000000000 +0100
@@ -354,8 +354,9 @@ _INLINE_ int ext2fs_set_bit(unsigned int
 {
 	char retval;
 
+	addr = (void *) ((unsigned char *) addr + (nr >> 3));
 	__asm__ __volatile__ ("bfset %2@{%1:#1}; sne %0"
-	     : "=d" (retval) : "d" (nr^7), "a" (addr));
+	     : "=d" (retval) : "d" ((nr & 7) ^ 7), "a" (addr) : "memory");
 
 	return retval;
 }
@@ -364,8 +365,9 @@ _INLINE_ int ext2fs_clear_bit(unsigned i
 {
 	char retval;
 
+	addr = (void *) ((unsigned char *) addr + (nr >> 3));
 	__asm__ __volatile__ ("bfclr %2@{%1:#1}; sne %0"
-	     : "=d" (retval) : "d" (nr^7), "a" (addr));
+	     : "=d" (retval) : "d" ((nr & 7) ^ 7), "a" (addr) : "memory");
 
 	return retval;
 }
@@ -374,8 +376,9 @@ _INLINE_ int ext2fs_test_bit(unsigned in
 {
 	char retval;
 
+	addr = (const void *) ((const unsigned char *) addr + (nr >> 3));
 	__asm__ __volatile__ ("bftst %2@{%1:#1}; sne %0"
-	     : "=d" (retval) : "d" (nr^7), "a" (addr));
+	     : "=d" (retval) : "d" ((nr & 7) ^ 7), "a" (addr) : "memory");
 
 	return retval;
 }
