+Mon Jun 17 00:31:46 CEST 2002 Jan Hubicka <jH@suse.cz>
+
+ * 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 <rth@redhat.com>
PR opt/6722
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
}
}
}
+
+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;
+}
+
%{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\
/* 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