From mboxrd@z Thu Jan 1 00:00:00 1970 From: Dave Love To: egcs@cygnus.com Subject: x86 stack alignment redux Date: Thu, 13 Nov 1997 09:28:00 -0000 Message-id: X-SW-Source: 1997-11/msg00481.html It's a while since I tried to get something like this in for the benefit of people doing double precision fortran calculations, at least... With this change, a glibc2-based system such as is now apparently becoming usable, and -malign-double, g77 users running on GNUish 686-based boxes should no longer suffer an average 50% perfromance hit because doubles on the stack only get word-aligned (or a smaller hit on 586). Previous discussion suggested it's a bug if STACK_BOUNDARY doesn't agree with the initial stack pointer alignment and glibc2 ensures initial double alignment. This really is important to serious scientific users with high-profile projects of the sort I understand have just been slagging off g77/gcc at a high-performance computing meeting here. 1997-11-13 Dave Love * config/i386/linux.h (STACK_BOUNDARY): Define as 64 for glibc2. * config/i386/gnu.h (STACK_BOUNDARY): Define as 64. *** config/i386/linux.h 1997/11/02 15:23:02 1.1 --- config/i386/linux.h 1997/11/13 16:45:40 *************** *** 37,42 **** --- 37,48 ---- #undef DEFAULT_PCC_STRUCT_RETURN #define DEFAULT_PCC_STRUCT_RETURN 1 + #ifndef USE_GNULIBC_1 + #undef STACK_BOUNDARY + #define STACK_BOUNDARY 64 /* glibc2's crt ensures this, libc5 + only gives you 32 */ + #endif + /* This is how to output an element of a case-vector that is relative. This is only used for PIC code. See comments by the `casesi' insn in i386.md for an explanation of the expression this outputs. */ *** config/i386/gnu.h 1997/11/13 16:46:29 1.1 --- config/i386/gnu.h 1997/11/13 16:47:18 *************** *** 3,8 **** --- 3,11 ---- /* This does it mostly for us. */ #include + #undef STACK_BOUNDARY + #define STACK_BOUNDARY 64 /* glibc2's crt ensures this */ + #undef CPP_PREDEFINES #define CPP_PREDEFINES GNU_CPP_PREDEFINES("i386")