[Bug rtl-optimization/24922] New: gcc -O2 removes important instruction for ASM
gvaxon at gmail dot com
gcc-bugzilla@gcc.gnu.org
Thu Nov 17 19:51:00 GMT 2005
I found that when I compile this code with -O2:
#include <stdio.h>
#define bit_swap(v, count, res) \
do { \
asm volatile ( \
"1: sarb %1\n" \
" rclb %0\n" \
" sarb %1\n" \
" rclb %0\n" \
" loop 1b\n" \
: "=a" (res) \
: "d" (v), "c" (count) \
); \
} while (0)
int main()
{
char u1, u2;
u1=0xA;
bit_swap(u1, 4, u2);
bit_swap(u2, 4, u1);
printf("u1=0x%x u2=0x%x\n", u1, u2);
}
, gcc removes loop counter cx register between the first bit_swap() and the
second bit_swap() statements, which results in the problem that the second
bit_swap() is running 2^32 loops instead of 4 loops also it corrupts a final
result in u1.
#gcc -v
Using built-in specs.
Target: i686-pc-linux-gnu
Configured with: ../gcc/configure --enable-languages=c,c++
--prefix=/home/dinar/tmp/gcc-i686-pc-linux-gnu/
Thread model: posix
gcc version 4.1.0 20051026 (experimental)
--
Summary: gcc -O2 removes important instruction for ASM
Product: gcc
Version: 4.1.0
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: rtl-optimization
AssignedTo: unassigned at gcc dot gnu dot org
ReportedBy: gvaxon at gmail dot com
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=24922
More information about the Gcc-bugs
mailing list