aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorUros Bizjak <uros@gcc.gnu.org>2007-03-28 16:05:48 +0200
committerUros Bizjak <uros@gcc.gnu.org>2007-03-28 16:05:48 +0200
commita646adedf047f2ce932c516bc249b788f4947356 (patch)
tree8cccb87bcfb81f7b80d23702d87d23bb74fbcd0f /gcc
parent9b7dd5e868e5c3978ea8c6cfef383c2846321ddf (diff)
downloadgcc-a646adedf047f2ce932c516bc249b788f4947356.zip
gcc-a646adedf047f2ce932c516bc249b788f4947356.tar.gz
gcc-a646adedf047f2ce932c516bc249b788f4947356.tar.bz2
i386.h (X86_TUNE_PROMOTE_HIMODE_IMUL): New tuning option.
* config/i386/i386.h (X86_TUNE_PROMOTE_HIMODE_IMUL): New tuning option. (TARGET_TUNE_PROMOTE_HIMODE_IMUL): New define. Use new tuning option. * config/i386/i386.c (ix86_tune_features): Initialize new tuning option. * config/i386/predicates.md (promotable_binary_operator): Use TARGET_TUNE_PROMOTE_HIMODE_IMUL. From-SVN: r123301
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog44
-rw-r--r--gcc/config/i386/i386.c24
-rw-r--r--gcc/config/i386/i386.h3
-rw-r--r--gcc/config/i386/predicates.md4
4 files changed, 45 insertions, 30 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 5baf6af..f9c69a1 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,13 @@
+2007-03-28 Uros Bizjak <ubizjak@gmail.com>
+
+ * config/i386/i386.h (X86_TUNE_PROMOTE_HIMODE_IMUL): New tuning
+ option.
+ (TARGET_TUNE_PROMOTE_HIMODE_IMUL): New define. Use new tuning option.
+ * config/i386/i386.c (ix86_tune_features): Initialize new
+ tuning option.
+ * config/i386/predicates.md (promotable_binary_operator): Use
+ TARGET_TUNE_PROMOTE_HIMODE_IMUL.
+
2007-03-28 Grigory Zagorodnev <grigory_zagorodnev@linux.intel.com>
PR target/31380
@@ -85,22 +95,22 @@
2007-03-26 Richard Henderson <rth@redhat.com>
- PR target/31361
- * config/i386/i386.c (IX86_BUILTIN_PSLLDQ128, IX86_BUILTIN_PSLLW128,
- IX86_BUILTIN_PSLLD128, IX86_BUILTIN_PSLLQ128, IX86_BUILTIN_PSRAW128,
- IX86_BUILTIN_PSRAD128, IX86_BUILTIN_PSRLW128, IX86_BUILTIN_PSRLD128,
- IX86_BUILTIN_PSRLQ128): New.
- (ix86_init_mmx_sse_builtins): Add them.
- (ix86_expand_builtin): Expand them.
- * config/i386/sse.md (ashr<mode>3, lshr<mode>3, ashl<mode>3): Make
- operand 2 be TImode.
- * config/i386/emmintrin.h (_mm_slli_epi64, _mm_srai_epi16,
- _mm_srai_epi32, _mm_srli_epi16, _mm_srli_epi32,
- _mm_srli_epi64): Mark __B const.
- (_mm_srli_si128, _mm_srli_si128): Fix disabled inline versions.
- (_mm_sll_epi16, _mm_sll_epi32, _mm_sll_epi64, _mm_sra_epi16,
- _mm_sra_epi32, _mm_srl_epi16, _mm_srl_epi32, _mm_srl_epi64): Use
- new two-vector shift builtins.
+ PR target/31361
+ * config/i386/i386.c (IX86_BUILTIN_PSLLDQ128, IX86_BUILTIN_PSLLW128,
+ IX86_BUILTIN_PSLLD128, IX86_BUILTIN_PSLLQ128, IX86_BUILTIN_PSRAW128,
+ IX86_BUILTIN_PSRAD128, IX86_BUILTIN_PSRLW128, IX86_BUILTIN_PSRLD128,
+ IX86_BUILTIN_PSRLQ128): New.
+ (ix86_init_mmx_sse_builtins): Add them.
+ (ix86_expand_builtin): Expand them.
+ * config/i386/sse.md (ashr<mode>3, lshr<mode>3, ashl<mode>3): Make
+ operand 2 be TImode.
+ * config/i386/emmintrin.h (_mm_slli_epi64, _mm_srai_epi16,
+ _mm_srai_epi32, _mm_srli_epi16, _mm_srli_epi32,
+ _mm_srli_epi64): Mark __B const.
+ (_mm_srli_si128, _mm_srli_si128): Fix disabled inline versions.
+ (_mm_sll_epi16, _mm_sll_epi32, _mm_sll_epi64, _mm_sra_epi16,
+ _mm_sra_epi32, _mm_srl_epi16, _mm_srl_epi32, _mm_srl_epi64): Use
+ new two-vector shift builtins.
2007-03-26 Ian Lance Taylor <iant@google.com>
@@ -288,7 +298,7 @@
IX86_BUILTIN_PSRAW128, IX86_BUILTIN_PSRAD128, IX86_BUILTIN_PSRLW128,
IX86_BUILTIN_PSRLD128, IX86_BUILTIN_PSRLQ128): Remove.
(ix86_init_mmx_sse_builtins): Remove v8hi_ftype_v8hi_v2di and
- v4si_ftype_v4si_v2di. Remove __builtin_ia32_psllw128,
+ v4si_ftype_v4si_v2di. Remove __builtin_ia32_psllw128,
__builtin_ia32_pslld128, __builtin_ia32_psllq128,
__builtin_ia32_psrlw128, __builtin_ia32_psrld128,
__builtin_ia32_psrlq128, __builtin_ia32_psraw128 and
diff --git a/gcc/config/i386/i386.c b/gcc/config/i386/i386.c
index c5e08da..45876bd 100644
--- a/gcc/config/i386/i386.c
+++ b/gcc/config/i386/i386.c
@@ -1200,25 +1200,29 @@ unsigned int ix86_tune_features[X86_TUNE_LAST] = {
/* X86_TUNE_AVOID_VECTOR_DECODE */
m_K8 | m_GENERIC64,
- /* X86_TUNE_SLOW_IMUL_IMM32_MEM (imul of 32-bit constant and memory is vector
- path on AMD machines) */
+ /* X86_TUNE_PROMOTE_HIMODE_IMUL: Modern CPUs have same latency for HImode
+ and SImode multiply, but 386 and 486 do HImode multiply faster. */
+ ~(m_386 | m_486),
+
+ /* X86_TUNE_SLOW_IMUL_IMM32_MEM: Imul of 32-bit constant and memory is
+ vector path on AMD machines. */
m_K8 | m_GENERIC64 | m_AMDFAM10,
- /* X86_TUNE_SLOW_IMUL_IMM8 (imul of 8-bit constant is vector path on AMD
- machines) */
+ /* X86_TUNE_SLOW_IMUL_IMM8: Imul of 8-bit constant is vector path on AMD
+ machines. */
m_K8 | m_GENERIC64 | m_AMDFAM10,
- /* X86_TUNE_MOVE_M1_VIA_OR (on pentiums, it is faster to load -1 via OR than
- a MOV) */
+ /* X86_TUNE_MOVE_M1_VIA_OR: On pentiums, it is faster to load -1 via OR
+ than a MOV. */
m_PENT,
- /* X86_TUNE_NOT_UNPAIRABLE (NOT is not pairable on Pentium, while XOR is, but
- one byte longer). */
+ /* X86_TUNE_NOT_UNPAIRABLE: NOT is not pairable on Pentium, while XOR is,
+ but one byte longer. */
m_PENT,
- /* X86_TUNE_NOT_VECTORMODE (On AMD K6, NOT is vector decoded with memory
+ /* X86_TUNE_NOT_VECTORMODE: On AMD K6, NOT is vector decoded with memory
operand that cannot be represented using a modRM byte. The XOR
- replacement is long decoded, so this split helps here as well). */
+ replacement is long decoded, so this split helps here as well. */
m_K6,
};
diff --git a/gcc/config/i386/i386.h b/gcc/config/i386/i386.h
index f0c6ab9..4c62ce5 100644
--- a/gcc/config/i386/i386.h
+++ b/gcc/config/i386/i386.h
@@ -235,6 +235,7 @@ enum ix86_tune_indices {
X86_TUNE_EXT_80387_CONSTANTS,
X86_TUNE_SHORTEN_X87_SSE,
X86_TUNE_AVOID_VECTOR_DECODE,
+ X86_TUNE_PROMOTE_HIMODE_IMUL,
X86_TUNE_SLOW_IMUL_IMM32_MEM,
X86_TUNE_SLOW_IMUL_IMM8,
X86_TUNE_MOVE_M1_VIA_OR,
@@ -312,6 +313,8 @@ extern unsigned int ix86_tune_features[X86_TUNE_LAST];
#define TARGET_SHORTEN_X87_SSE ix86_tune_features[X86_TUNE_SHORTEN_X87_SSE]
#define TARGET_AVOID_VECTOR_DECODE \
ix86_tune_features[X86_TUNE_AVOID_VECTOR_DECODE]
+#define TARGET_TUNE_PROMOTE_HIMODE_IMUL \
+ ix86_tune_features[X86_TUNE_PROMOTE_HIMODE_IMUL]
#define TARGET_SLOW_IMUL_IMM32_MEM \
ix86_tune_features[X86_TUNE_SLOW_IMUL_IMM32_MEM]
#define TARGET_SLOW_IMUL_IMM8 ix86_tune_features[X86_TUNE_SLOW_IMUL_IMM8]
diff --git a/gcc/config/i386/predicates.md b/gcc/config/i386/predicates.md
index 86b6774..97deda6 100644
--- a/gcc/config/i386/predicates.md
+++ b/gcc/config/i386/predicates.md
@@ -963,12 +963,10 @@
mod,udiv,umod,ashift,rotate,ashiftrt,lshiftrt,rotatert"))
;; Return 1 if OP is a binary operator that can be promoted to wider mode.
-;; Modern CPUs have same latency for HImode and SImode multiply,
-;; but 386 and 486 do HImode multiply faster. */
(define_predicate "promotable_binary_operator"
(ior (match_code "plus,and,ior,xor,ashift")
(and (match_code "mult")
- (match_test "ix86_tune > PROCESSOR_I486"))))
+ (match_test "TARGET_TUNE_PROMOTE_HIMODE_IMUL"))))
;; To avoid problems when jump re-emits comparisons like testqi_ext_ccno_0,
;; re-recognize the operand to avoid a copy_to_mode_reg that will fail.