diff options
author | John Wehle <john@feith.com> | 1998-05-15 00:29:27 +0000 |
---|---|---|
committer | Jeff Law <law@gcc.gnu.org> | 1998-05-14 18:29:27 -0600 |
commit | 8a0224432d82087c5c835e9db045a69fb588fd56 (patch) | |
tree | 2ebdb874e6dabbad734dc962508c255edcf0a845 /gcc | |
parent | aa6498c297e5363a57e274c92d142f17701e4e30 (diff) | |
download | gcc-8a0224432d82087c5c835e9db045a69fb588fd56.zip gcc-8a0224432d82087c5c835e9db045a69fb588fd56.tar.gz gcc-8a0224432d82087c5c835e9db045a69fb588fd56.tar.bz2 |
i386.h (DATA_ALIGNMENT): Define.
* i386.h (DATA_ALIGNMENT): Define.
Improve x86 FP performance.
From-SVN: r19765
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 4 | ||||
-rw-r--r-- | gcc/config/i386/i386.h | 48 |
2 files changed, 52 insertions, 0 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index fce1cc5..b53497c 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,7 @@ +Fri May 15 01:29:39 1998 John Wehle (john@feith.com) + + * i386.h (DATA_ALIGNMENT): Define. + Fri May 15 05:35:37 1998 J"orn Rennecke <amylaar@cygnus.co.uk> * reload1.c (delete_output_reload): Ignore single USE that diff --git a/gcc/config/i386/i386.h b/gcc/config/i386/i386.h index ef344b2..1053bd9 100644 --- a/gcc/config/i386/i386.h +++ b/gcc/config/i386/i386.h @@ -422,6 +422,54 @@ extern int ix86_arch; /* align DFmode constants and nonaggregates */ #define ALIGN_DFmode (!TARGET_386) +/* If defined, a C expression to compute the alignment for a static + variable. TYPE is the data type, and ALIGN is the alignment that + the object would ordinarily have. The value of this macro is used + instead of that alignment to align the object. + + If this macro is not defined, then ALIGN is used. + + One use of this macro is to increase alignment of medium-size + data to make it all fit in fewer cache lines. Another is to + cause character arrays to be word-aligned so that `strcpy' calls + that copy constants to character arrays can be done inline. */ + +#define DATA_ALIGNMENT(TYPE, ALIGN) \ + ((AGGREGATE_TYPE_P (TYPE) \ + && TYPE_SIZE (TYPE) \ + && TREE_CODE (TYPE_SIZE (TYPE)) == INTEGER_CST \ + && (TREE_INT_CST_LOW (TYPE_SIZE (TYPE)) >= 256 \ + || TREE_INT_CST_HIGH (TYPE_SIZE (TYPE))) && (ALIGN) < 256) \ + ? 256 \ + : TREE_CODE (TYPE) == ARRAY_TYPE \ + ? ((TYPE_MODE (TREE_TYPE (TYPE)) == DFmode && (ALIGN) < 64) \ + ? 64 \ + : (TYPE_MODE (TREE_TYPE (TYPE)) == XFmode && (ALIGN) < 128) \ + ? 128 \ + : (ALIGN)) \ + : TREE_CODE (TYPE) == COMPLEX_TYPE \ + ? ((TYPE_MODE (TYPE) == DCmode && (ALIGN) < 64) \ + ? 64 \ + : (TYPE_MODE (TYPE) == XCmode && (ALIGN) < 128) \ + ? 128 \ + : (ALIGN)) \ + : ((TREE_CODE (TYPE) == RECORD_TYPE \ + || TREE_CODE (TYPE) == UNION_TYPE \ + || TREE_CODE (TYPE) == QUAL_UNION_TYPE) \ + && TYPE_FIELDS (TYPE)) \ + ? ((DECL_MODE (TYPE_FIELDS (TYPE)) == DFmode && (ALIGN) < 64) \ + ? 64 \ + : (DECL_MODE (TYPE_FIELDS (TYPE)) == XFmode && (ALIGN) < 128) \ + ? 128 \ + : (ALIGN)) \ + : TREE_CODE (TYPE) == REAL_TYPE \ + ? ((TYPE_MODE (TYPE) == DFmode && (ALIGN) < 64) \ + ? 64 \ + : (TYPE_MODE (TYPE) == XFmode && (ALIGN) < 128) \ + ? 128 \ + : (ALIGN)) \ + : (ALIGN)) + /* Set this non-zero if move instructions will actually fail to work when given unaligned data. */ #define STRICT_ALIGNMENT 0 |