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

             Bug #: 50814
           Summary: SH Target: SHAD / SHLD instructions not used on SH2A
    Classification: Unclassified
           Product: gcc
           Version: 4.7.0
            Status: UNCONFIRMED
          Severity: enhancement
          Priority: P3
         Component: target
        AssignedTo: unassig...@gcc.gnu.org
        ReportedBy: oleg.e...@t-online.de
                CC: kkoj...@gcc.gnu.org
            Target: sh2a-*-*


Although there are some insns (e.g. ashlsi3_sh2a) that are supposed to handle
dynamic shifts on SH2A, somehow the dynamic shift instructions SHAD and SHLD
are never generated, no matter what the shift amount is.


int x_shad_right (int y)
{
  return y >> 15;
}

    mov.l    .L6,r1
    sts.l    pr,@-r15
    jsr    @r1
    nop
    mov    r4,r0
    lds.l   @r15+,pr
    rts/n

    .align 2
.L6:
    .long    ___ashiftrt_r4_15


int x_shad_left (int y)
{
  return y << 15;
}

    mov    r4,r0
    shll8    r0
    shlr    r0
    rts
    shll8    r0



Using built-in specs.
COLLECT_GCC=sh-elf-gcc
COLLECT_LTO_WRAPPER=/usr/local/libexec/gcc/sh-elf/4.7.0/lto-wrapper
Target: sh-elf
Configured with: ../gcc-trunk/configure --target=sh-elf --prefix=/usr/local
--enable-languages=c,c++ --enable-multilib --disable-libssp --disable-nls
--disable-werror --enable-lto --with-newlib --with-gnu-as --with-gnu-ld
--with-system-zlib
Thread model: single
gcc version 4.7.0 20111020 (experimental) (GCC) 



It is also not clear to me why SH2A seems to require different handling for
dynamic shifts than SH3 or SH4...

Reply via email to