From: Jan Hubicka Date: Sun, 16 Jun 2002 22:35:06 +0000 (+0000) Subject: i386-protos.h (x86_field_alignment): Declare. X-Git-Tag: releases/gcc-3.1.1~142 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=20056a3a0cd46dea31638a4c4262454ccd664b9f;p=thirdparty%2Fgcc.git i386-protos.h (x86_field_alignment): Declare. * i386-protos.h (x86_field_alignment): Declare. * i386.c (x86_field_alignment): Define. * i386.h (ADJUST_FIELD_ALIGNMENT): New. (BIGGEST_FIELD_ALIGNMENT): Kill. From-SVN: r54685 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 083acab56d08..921f99bf7380 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,10 @@ +Mon Jun 17 00:31:46 CEST 2002 Jan Hubicka + + * i386-protos.h (x86_field_alignment): Declare. + * i386.c (x86_field_alignment): Define. + * i386.h (ADJUST_FIELD_ALIGNMENT): New. + (BIGGEST_FIELD_ALIGNMENT): Kill. + 2002-06-16 Richard Henderson PR opt/6722 diff --git a/gcc/config/i386/i386-protos.h b/gcc/config/i386/i386-protos.h index 00432034c3ff..03de4b173cdd 100644 --- a/gcc/config/i386/i386-protos.h +++ b/gcc/config/i386/i386-protos.h @@ -195,4 +195,5 @@ extern unsigned int i386_pe_section_type_flags PARAMS ((tree, const char *, int)); extern void i386_pe_asm_named_section PARAMS ((const char *, unsigned int)); extern void x86_output_mi_thunk PARAMS ((FILE *, int, tree)); +extern int x86_field_alignment PARAMS ((tree, int)); #endif diff --git a/gcc/config/i386/i386.c b/gcc/config/i386/i386.c index 4c82b2907c0d..9e651e277968 100644 --- a/gcc/config/i386/i386.c +++ b/gcc/config/i386/i386.c @@ -12624,3 +12624,21 @@ x86_output_mi_thunk (file, delta, function) } } } + +int +x86_field_alignment (field, computed) + tree field; + int computed; +{ + enum machine_mode mode; + if (TARGET_64BIT || DECL_USER_ALIGN (field) || TARGET_ALIGN_DOUBLE) + return computed; + mode = TYPE_MODE (TREE_CODE (TREE_TYPE (field)) == ARRAY_TYPE + ? get_inner_array_type (field) : TREE_TYPE (field)); + if ((mode == DFmode || mode == DCmode + || mode == DImode || mode == CDImode) + && !TARGET_ALIGN_DOUBLE) + return MIN (32, computed); + return computed; +} + diff --git a/gcc/config/i386/i386.h b/gcc/config/i386/i386.h index 2b9ad4be058d..1a4aa858afdb 100644 --- a/gcc/config/i386/i386.h +++ b/gcc/config/i386/i386.h @@ -609,7 +609,7 @@ extern int ix86_arch; %{mcpu=athlon-4|mcpu=athlon-xp|mcpu=athlon-mp:\ -D__tune_athlon_sse__ }\ %{mcpu=pentium4:-D__tune_pentium4__ }\ -%{march=athlon-tbird|march=athlon-xp|march=athlon-mp|march=pentium3|march=pentium4:\ +%{march=athlon-xp|march=athlon-mp|march=pentium3|march=pentium4:\ -D__SSE__ }\ %{march=pentium-mmx|march=k6|march=k6-2|march=k6-3\ |march=athlon|march=athlon-tbird|march=athlon-4|march=athlon-xp\ @@ -781,13 +781,9 @@ extern int ix86_arch; /* The published ABIs say that doubles should be aligned on word boundaries, so lower the aligment for structure fields unless -malign-double is set. */ -/* BIGGEST_FIELD_ALIGNMENT is also used in libobjc, where it must be - constant. Use the smaller value in that context. */ -#ifndef IN_TARGET_LIBS -#define BIGGEST_FIELD_ALIGNMENT (TARGET_64BIT ? 128 : (TARGET_ALIGN_DOUBLE ? 64 : 32)) -#else -#define BIGGEST_FIELD_ALIGNMENT 32 -#endif + +#define ADJUST_FIELD_ALIGN(FIELD, COMPUTED) \ + x86_field_alignment (FIELD, COMPUTED) /* If defined, a C expression to compute the alignment given to a constant that is being placed in memory. EXP is the constant