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: [email protected]
ReportedBy: [email protected]
CC: [email protected]
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...