[Bug target/38939] New: MULLW on often faster than SLWI ADD SLWI ADD..

dom at wtal dot de gcc-bugzilla@gcc.gnu.org
Fri Jan 23 00:09:00 GMT 2009


The following snippet runs about 25% faster on my 1333MHz 7447A with -Os than
-O2, even if compiled with -mcpu=G4:

const unsigned c=0x1010101;
unsigned z=0;
for(int i=c; i>=2; i*=c)
{
  z+=i&1;
}

With -mcpu=G4 -O2 it gives:

        lis 0,0x101
        mr 31,3
        ori 10,0,257
.L4:
        slwi 0,10,8
        rlwinm 11,10,0,31,31
        add 0,0,10
        add 28,28,11
        slwi 9,0,16
        add 10,0,9
        cmplwi 7,10,1
        bgt+ 7,.L4

With -mcpu=G4 -Os it gives:

        lis 0,0x101
        ori 9,0,257
        mr 30,3
        mr 11,9
.L4:
        rlwinm 0,9,0,31,31
        mullw 9,9,11
        add 31,31,0
        cmplwi 7,9,1
        bgt+ 7,.L4

The latter one is about 25% faster, meaning that the G4's multiplier is much
faster than GCC assumes.
With other constants the difference tends to be smaller, but I haven't
encountered a situation where the MUL-version is slower (when Os and O2 build
different code here).

dom@bronko:~/c-Test$ g++ -v
Es werden eingebaute Spezifikationen verwendet.
Ziel: powerpc-linux-gnu
Konfiguriert mit: ../src/configure -v --with-pkgversion='Debian 4.3.2-1.1'
--with-bugurl=file:///usr/share/doc/gcc-4.3/README.Bugs
--enable-languages=c,c++,fortran,objc,obj-c++ --prefix=/usr --enable-shared
--with-system-zlib --libexecdir=/usr/lib --without-included-gettext
--enable-threads=posix --enable-nls --with-gxx-include-dir=/usr/include/c++/4.3
--program-suffix=-4.3 --enable-clocale=gnu --enable-libstdcxx-debug
--enable-objc-gc --enable-mpfr --disable-softfloat --enable-secureplt
--enable-targets=powerpc-linux,powerpc64-linux --with-cpu=default32
--with-long-double-128 --enable-checking=release --build=powerpc-linux-gnu
--host=powerpc-linux-gnu --target=powerpc-linux-gnu
Thread-Modell: posix
gcc-Version 4.3.2 (Debian 4.3.2-1.1)


-- 
           Summary: MULLW on often faster than SLWI ADD SLWI ADD..
           Product: gcc
           Version: 4.3.2
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: target
        AssignedTo: unassigned at gcc dot gnu dot org
        ReportedBy: dom at wtal dot de
 GCC build triplet: PowerPC-Debian-Lenny
  GCC host triplet: PowerPC-Debian-Lenny
GCC target triplet: PowerPC-Debian-Lenny


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=38939



More information about the Gcc-bugs mailing list