Bit manipulation on PowerPC

Geoff Keating geoffk@geoffk.org
Mon Feb 5 22:44:00 GMT 2001


<mwilliams@ase-tech-usa.com> writes:

> Symptoms:
> When optimization is enabled, a bit manipulation expression compiles to
> incorrect assembly code.  Given the value 0x00010001, the expression should
> produce 0x00000101.  The assembly code produces 0x00000100.  The bug
> appears to occur only when the expression is evaluated in place (i.e. using
> a single register).
> 
> Version:
> Reading specs from
> C:\Tornado\host\x86-win32\lib\gcc-lib\powerpc-wrs-vxworks\cygnus-2.7.2-9601
> 26\specs
> gcc driver version cygnus-2.7.2-960126 egcs-971225 tornado 2.0 executing
> gcc version cygnus-2.7.2-960126
> 
> System:
> Pentium III host running Windows 98, targeting embedded PowerPC 403 system
> running VxWorks 5.4
> 
> Command line:
> gcc --save-temps -S -O1 bah.c
> 
> File:
> # 1 "bah.c"
> unsigned long f(unsigned long x)
> {
>   return ((x&0x003f0000)>>8)|(x&0x0000003f);
> }

This is fixed in current compilers.  You should upgrade, if you can.

-- 
- Geoffrey Keating <geoffk@geoffk.org>


More information about the Gcc-bugs mailing list