[Bug target/50751] New: SH Target: Displacement addressing does not work for QImode and HImode
oleg.endo@t-online.de
gcc-bugzilla@gcc.gnu.org
Sun Oct 16 22:56:00 GMT 2011
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=50751
Bug #: 50751
Summary: SH Target: Displacement addressing does not work for
QImode and HImode
Classification: Unclassified
Product: gcc
Version: 4.7.0
Status: UNCONFIRMED
Severity: enhancement
Priority: P3
Component: target
AssignedTo: unassigned@gcc.gnu.org
ReportedBy: oleg.endo@t-online.de
CC: kkojima@gcc.gnu.org
Target: sh*-*-*
Displacement addressing is only used for SImode but not
for QImode nor HImode. The following example summarizes the
problem:
struct X
{
char a, b, c, d;
short e, f;
int g, h;
};
int test_func_4 (X* x)
{
return x->b + x->e + x->g;
}
compiled with: -Os -m4-single -ml -S
mov r4,r1
add #1,r1
mov.b @r1,r0
add #3,r1
mov.w @r1,r1
add r1,r0
mov.l @(8,r4),r1
rts
add r1,r0
would be better as:
mov.b @(1,r4),r0
mov r0,r1
mov.w @(4,r4),r0
add r0,r1
mov.l @(8,r4),r0
add r1,r0
rts
nop
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 20111016 (experimental) (GCC)
More information about the Gcc-bugs
mailing list