Activity log for bug #64288

Date Who What changed Old value New value Message
2006-10-06 07:17:55 Ardavon Falls bug added bug
2006-10-06 07:25:43 Ardavon Falls description Binary package hint: gcc Gcc version - 4.0.3 (Ubuntu 4.0.3-1ubuntu5) Kubuntu version dapper drake - 6.06 code was compiled with the following options.... -O3 -g3 -ggdb -Wall -mtune=pentium4 -mmmx -msse -msse2 -ffast-math -funsafe-math-optimizations -ffinite-math-only -fno-trapping-math -fsingle-precision-constant -fprefetch-loop-arrays -fomit-frame-pointer -mno-push-args -DNDEBUG -D_GNU_SOURCE -D_REENTRANT The following C code snipit was compiled incorrectly... #define LARGEST_BIT(x,retval) __asm("bsrl %0, %1;" : "=r"(retval) : "r"(x)) #define MAX_CAHCEBLOCK_SIZE 4095 <.....> const unsigned int numBits = sizeof( size_t ) * 8; unsigned int largestBit; unsigned int shiftOffset; size_t floorOfSize; size_t ceilOfSize; LARGEST_BIT( size, largestBit ); floorOfSize = 1 << largestBit; shiftOffset = ( ( floorOfSize - size ) >> ( numBits - 1 ) ); ceilOfSize = 1 << ( shiftOffset + largestBit) ; return ( size < MAX_CAHCEBLOCK_SIZE ) ? ceilOfSize : size; <.....> and the resultant asm code was... bsr %ecx,%ebx mov $0x1, %edx mov %edx,%eax shl %cl,%eax sub %ebx,%eax shr $0x1f,%eax add %eax,%ecx shl %cl,%edx cmp $0xfff,%ebx cmvbe %edx,%ebx If the C variable size equals 12 the C code will return 12, the asm code from gcc will return 4096. Binary package hint: gcc Gcc version - 4.0.3 (Ubuntu 4.0.3-1ubuntu5) Kubuntu version dapper drake - 6.06 code was compiled with the following options.... -O3 -g3 -ggdb -Wall -mtune=pentium4 -mmmx -msse -msse2 -ffast-math -funsafe-math-optimizations -ffinite-math-only -fno-trapping-math -fsingle-precision-constant -fprefetch-loop-arrays -fomit-frame-pointer -mno-push-args -DNDEBUG -D_GNU_SOURCE -D_REENTRANT The following C code snipit was compiled incorrectly... #define LARGEST_BIT(x,retval) __asm("bsrl %0, %1;" : "=r"(retval) : "r"(x)) #define MAX_CAHCEBLOCK_SIZE 4096 <.....> const unsigned int numBits = sizeof( size_t ) * 8; unsigned int largestBit; unsigned int shiftOffset; size_t floorOfSize; size_t ceilOfSize; LARGEST_BIT( size, largestBit ); floorOfSize = 1 << largestBit; shiftOffset = ( ( floorOfSize - size ) >> ( numBits - 1 ) ); ceilOfSize = 1 << ( shiftOffset + largestBit) ; return ( size < MAX_CAHCEBLOCK_SIZE ) ? ceilOfSize : size; <.....> and the resultant asm code was... bsr %ecx,%ebx mov $0x1, %edx mov %edx,%eax shl %cl,%eax sub %ebx,%eax shr $0x1f,%eax add %eax,%ecx shl %cl,%edx cmp $0xfff,%ebx cmvbe %edx,%ebx If the C variable size equals 12 the C code will return 12, the asm code from gcc will return 4096.
2006-10-06 07:27:53 Ardavon Falls description Binary package hint: gcc Gcc version - 4.0.3 (Ubuntu 4.0.3-1ubuntu5) Kubuntu version dapper drake - 6.06 code was compiled with the following options.... -O3 -g3 -ggdb -Wall -mtune=pentium4 -mmmx -msse -msse2 -ffast-math -funsafe-math-optimizations -ffinite-math-only -fno-trapping-math -fsingle-precision-constant -fprefetch-loop-arrays -fomit-frame-pointer -mno-push-args -DNDEBUG -D_GNU_SOURCE -D_REENTRANT The following C code snipit was compiled incorrectly... #define LARGEST_BIT(x,retval) __asm("bsrl %0, %1;" : "=r"(retval) : "r"(x)) #define MAX_CAHCEBLOCK_SIZE 4096 <.....> const unsigned int numBits = sizeof( size_t ) * 8; unsigned int largestBit; unsigned int shiftOffset; size_t floorOfSize; size_t ceilOfSize; LARGEST_BIT( size, largestBit ); floorOfSize = 1 << largestBit; shiftOffset = ( ( floorOfSize - size ) >> ( numBits - 1 ) ); ceilOfSize = 1 << ( shiftOffset + largestBit) ; return ( size < MAX_CAHCEBLOCK_SIZE ) ? ceilOfSize : size; <.....> and the resultant asm code was... bsr %ecx,%ebx mov $0x1, %edx mov %edx,%eax shl %cl,%eax sub %ebx,%eax shr $0x1f,%eax add %eax,%ecx shl %cl,%edx cmp $0xfff,%ebx cmvbe %edx,%ebx If the C variable size equals 12 the C code will return 12, the asm code from gcc will return 4096. Binary package hint: gcc Gcc version - 4.0.3 (Ubuntu 4.0.3-1ubuntu5) Kubuntu version dapper drake - 6.06 code was compiled with the following options.... -O3 -g3 -ggdb -Wall -mtune=pentium4 -mmmx -msse -msse2 -ffast-math -funsafe-math-optimizations -ffinite-math-only -fno-trapping-math -fsingle-precision-constant -fprefetch-loop-arrays -fomit-frame-pointer -mno-push-args -DNDEBUG -D_GNU_SOURCE -D_REENTRANT The following C code snipit was compiled incorrectly... #define LARGEST_BIT(x,retval) __asm("bsrl %0, %1;" : "=r"(retval) : "r"(x)) #define MAX_CAHCEBLOCK_SIZE 4096 <.....> const unsigned int numBits = sizeof( size_t ) * 8; unsigned int largestBit; unsigned int shiftOffset; size_t floorOfSize; size_t ceilOfSize; LARGEST_BIT( size, largestBit ); floorOfSize = 1 << largestBit; shiftOffset = ( ( floorOfSize - size ) >> ( numBits - 1 ) ); ceilOfSize = 1 << ( shiftOffset + largestBit) ; return ( size < MAX_CAHCEBLOCK_SIZE ) ? ceilOfSize : size; <.....> and the resultant asm code was... bsr %ecx,%ebx mov $0x1, %edx mov %edx,%eax shl %cl,%eax sub %ebx,%eax shr $0x1f,%eax add %eax,%ecx shl %cl,%edx cmp $0xfff,%ebx cmvbe %edx,%ebx If the C variable size equals 12 the C code will return 16, the asm code from gcc will return 4096.
2006-10-06 09:53:05 Tim Butler gcc-defaults: status Unconfirmed Rejected
2006-10-06 09:53:05 Tim Butler gcc-defaults: statusexplanation As per your second comming, I'm rejecting this as a bug. Glad to see you got it working though!