aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRichard Henderson <rth@redhat.com>2004-12-26 19:50:27 -0800
committerRichard Henderson <rth@gcc.gnu.org>2004-12-26 19:50:27 -0800
commit52cf10a30abd1156ae2d926fab1341799c10141b (patch)
treece4bee796d7a6ee2b6cdcd8f2029cbd9a086a9c5
parent551a3297bb7f0468b5ec488641313286ea3e703f (diff)
downloadgcc-52cf10a30abd1156ae2d926fab1341799c10141b.zip
gcc-52cf10a30abd1156ae2d926fab1341799c10141b.tar.gz
gcc-52cf10a30abd1156ae2d926fab1341799c10141b.tar.bz2
i386.c (ix86_gimplify_va_arg): Also pass the result of type_natural_mode to examine_argument.
* config/i386/i386.c (ix86_gimplify_va_arg): Also pass the result of type_natural_mode to examine_argument. From-SVN: r92633
-rw-r--r--gcc/ChangeLog10
-rw-r--r--gcc/config/i386/i386.c10
2 files changed, 15 insertions, 5 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index ef86e13..6d26e5b 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,5 +1,15 @@
2004-12-26 Richard Henderson <rth@redhat.com>
+ * config/i386/i386.c (ix86_gimplify_va_arg): Also pass the result
+ of type_natural_mode to examine_argument.
+
+ * config/i386/i386.md (mov<MMXMODEI>_internal_rex64): New.
+ (movv2sf_internal_rex64): New.
+ (mov<MMXMODEI>_internal): Use no register preferences at all.
+ (movv2sf_internal): Likewise.
+
+2004-12-26 Richard Henderson <rth@redhat.com>
+
* simplify-rtx.c (simplify_relational_operation_1): Don't simplify
plus/minus across EQ for floating-point.
diff --git a/gcc/config/i386/i386.c b/gcc/config/i386/i386.c
index c146b74..054da85 100644
--- a/gcc/config/i386/i386.c
+++ b/gcc/config/i386/i386.c
@@ -3350,6 +3350,7 @@ ix86_gimplify_va_arg (tree valist, tree type, tree *pre_p, tree *post_p)
rtx container;
int indirect_p = 0;
tree ptrtype;
+ enum machine_mode nat_mode;
/* Only 64bit target needs something special. */
if (!TARGET_64BIT)
@@ -3372,9 +3373,9 @@ ix86_gimplify_va_arg (tree valist, tree type, tree *pre_p, tree *post_p)
size = int_size_in_bytes (type);
rsize = (size + UNITS_PER_WORD - 1) / UNITS_PER_WORD;
- container = construct_container (type_natural_mode (type), TYPE_MODE (type),
- type, 0, REGPARM_MAX, SSE_REGPARM_MAX,
- intreg, 0);
+ nat_mode = type_natural_mode (type);
+ container = construct_container (nat_mode, TYPE_MODE (type), type, 0,
+ REGPARM_MAX, SSE_REGPARM_MAX, intreg, 0);
/* Pull the value out of the saved registers. */
@@ -3390,8 +3391,7 @@ ix86_gimplify_va_arg (tree valist, tree type, tree *pre_p, tree *post_p)
lab_false = create_artificial_label ();
lab_over = create_artificial_label ();
- examine_argument (TYPE_MODE (type), type, 0,
- &needed_intregs, &needed_sseregs);
+ examine_argument (nat_mode, type, 0, &needed_intregs, &needed_sseregs);
need_temp = (!REG_P (container)
&& ((needed_intregs && TYPE_ALIGN (type) > 64)