This is the mail archive of the
gcc@gcc.gnu.org
mailing list for the GCC project.
Re: i386 GCC-3.4 & Mandrake-9.2 GCC-3.3.1 non-inline memset/memcpy
- From: Etienne Lorrain <etienne_lorrain at yahoo dot fr>
- To: gcc at gcc dot gnu dot org
- Cc: Jan Hubicka <hubicka at ucw dot cz>
- Date: Tue, 4 Nov 2003 23:51:34 +0100 (CET)
- Subject: Re: i386 GCC-3.4 & Mandrake-9.2 GCC-3.3.1 non-inline memset/memcpy
> Honza wrote:
> ... So you either need to use memcpy/memset or you can
> use -Os/-march=i386 that will result in rep;mov[lb] as well.
I have just tryed again.
The option -minline-all-stringops solved the problem for
Mandrake-9.2 GCC-3.3.1 , but I still have some memcpy when
using GCC-3.4-pre. No more memset in neither compiler.
How to reproduce: download gujin-0.8.tgz at:
http://prdownloads.sourceforge.net/gujin/gujin-0.8.tgz?download
Download gcc-core-3.4-20031015.tar.bz2 and binutils-2.14.tar.bz2
from your usual mirror.
tar -xzf gujin-0.8.tgz
cd gujin
make toolchain # takes a long time...
make dep user.o CFLAGS=-minline-all-stringops
So at end of the log:
/home/etienne/projet/toolchain/bin/gcc -minline-all-stringops -include
code16.h -DDEBUG="(DEBUG_STACK)"
-DUSER_SUPPORT="(VGA_SUPPORT|VGA_EXTENDED|VESA_WINDOW|VESA_WINFUNCTION|VESA_LINEAR|VESA_EDID|VESA_RECALC|VESA_2WINDOWS|VESA_HARDWINDOW|VESA_PMINFO|VESA_16BPP|VESA_32BPP|VESA_24BPP|VESA_4BPP_EGA|VESA_4BPP_TEXT|VESA_8BPP|SERIAL_VT100|SERIAL_VT420|BIOS_MOUSE_SUPPORT|SERIAL_MOUSE_SUPPORT|JOYSTICK_SUPPORT)"
-DDISK_SUPPORT="(BIOS_SUPPORT|EBIOS_SUPPORT|IDE_SUPPORT|DOS_SUPPORT|E2FS_PROBE|FAT12_PROBE|FAT16_PROBE|FAT32_PROBE|BOOTSECT_PROBE)"
-DSETUP="(CODE_SEGMENT|XCODE_SEGMENT|XDATA_SEGMENT|ASSEMBLY_CISC|UPDATE_BOOTPARAM|USE_INT1587)"
-DLANGUAGE=ENGLISH -fomit-frame-pointer -march=i386 -mrtd -fno-builtin
-funsigned-char -fno-schedule-insns2 -finline-limit=10000 -Os
-ffunction-sections -fstrict-aliasing -falign-loops=1 -falign-jumps=1
-falign-functions=2 -mno-align-double -mpreferred-stack-boundary=2 -Wall
-Wno-format -Wno-main -Wstrict-prototypes -Wundef -Wpointer-arith
-Wcast-align -Wwrite-strings -Wsign-compare -Wdisabled-optimization -S -o
user.S user.c
sed '/.align 32/d' < user.S > user.s
/home/etienne/projet/toolchain/bin/as -acdhls=user.lis -o user.o user.s
rm user.S user.s
[etienne@localhost gujin]$ grep memcpy user.lis
5303 0053 66E8FCFF call memcpy
5722 003b FC cld # _memcpy modify memory
6009 044c 66E8FCFF call memcpy
6042 04e1 66E8FCFF call memcpy
6462 03b1 FC cld # _memcpy modify memory
6705 0730 FC cld # _memcpy modify memory
7577 00e1 FC cld # lmemcpy modify memory
7853 0106 66E8FCFF call memcpy
7943 0219 66E8FCFF call memcpy
8159 04e5 66E8FCFF call memcpy
9050 0058 66E8FCFF call memcpy
9054 006d 66E8FCFF call memcpy
9360 00ec FC cld # lmemcpy modify memory
memcpy
[etienne@localhost gujin]$ grep memcpy user.c
/* copy from high to low memory, no memcpy! */
lmemcpy (&tmpstatictable, tmptable.static_functionality_table,
/* NO memcpy/memset here, %es is not initialised */
memcpy (compressed_array, long_array, sizeof (compressed_array));
memcpy (long_array, compressed_array, sizeof (compressed_array));
lmemcpy (UI.info.vesa.cardname, vesainfo.OemStringPtr,
[etienne@localhost gujin]$
i.e. I have two explicit call to memcpy (which are handled by one
inline function of mine) but a lot more have been generated by
copying structure. The option contain:
-minline-all-stringops -march=i386 -Os
Etienne.
___________________________________________________________
Do You Yahoo!? -- Une adresse @yahoo.fr gratuite et en français !
Yahoo! Mail : http://fr.mail.yahoo.com