--- 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; }