> GCC 3.4.4 RC1 is available here:
>
> ftp://gcc.gnu.org/pub/gcc/prerelease-3.4.4-20050510/
I downloaded and rebuild for ia32 with latest pre binutils on
my project and noticed an increase of size. I am compiling with -Os
because size is very important in my case - so I invertigated by
looking at the differences. There seem to be some optimisation
missing in between 3.4.3 and 3.4.4.
I got some assembler code like:
movl 48(%esp), %eax
movl %eax, 48(%esp)
movl 48(%esp), %eax
testl %eax, %eax
To reproduce:
download and untar gujin-1.0.tar.gz from sourceforge
cd gujin
(if needed) download binutils and gcc in parrent directory and "make
toolchain"
make dep disk.s
vi +947 disk.s
I also noted dead stores:
vi +1201 disk.s
movl 12(%esp), %eax
movb $8, %dh
movzwl 172(%ecx), %eax
Strange reloads:
vi +217 disk.s
movw 10(%esp), %ax
andl $63, %eax
movw 10(%esp), %dx
movw %ax, 120(%esi)
movw 10(%esp), %ax
sall $2, %eax
And strange way to load constant into registers:
vi +480 disk.s
movl $100000, 20(%esp)
sall $16, %ecx
andl $65535, %edx
movl 20(%esp), %eax
orl %ecx, %edx
movb $-127, %al
movl 20(%esp), %ecx
Some of those problem may also exist in GCC-4.0 because this
version (and the 4.1 I tested) gives me an increase of 60% of the
code size compared to 3.4.3.
Thanks for any information,
Etienne.