diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index c804c892ba3a6185e840d1245146266671fd0af2..066519f751c5e5870358d8f4ece0e1bb33fa2ca5 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,7 @@
+2000-08-11  Richard Henderson  <rth@cygnus.com>
+
+	* config/ia64/ia64.h (PROMOTE_MODE): Only extend to SImode.
+
 2000-08-11  Mark Elbrecht  <snowball3@bigfoot.com>
  
 	* gcc.texi (The Configuration File): Document
diff --git a/gcc/config/ia64/ia64.h b/gcc/config/ia64/ia64.h
index 23a27b85e78152ba31c730ffbd49dca6afc5a2ce..11913308c22df791cef94120b3f8d8517da581af 100644
--- a/gcc/config/ia64/ia64.h
+++ b/gcc/config/ia64/ia64.h
@@ -300,15 +300,12 @@ extern const char *ia64_fixed_range_string;
 /* A macro to update MODE and UNSIGNEDP when an object whose type is TYPE and
    which has the specified mode and signedness is to be stored in a register.
    This macro is only called when TYPE is a scalar type.  */
-
-/* ??? Maybe sign-extend 32 bit values like the alpha?  Or maybe zero-extend
-   because we only have zero-extending loads? */
 #define PROMOTE_MODE(MODE,UNSIGNEDP,TYPE)				\
 do									\
   {									\
     if (GET_MODE_CLASS (MODE) == MODE_INT				\
-	&& GET_MODE_SIZE (MODE) < UNITS_PER_WORD)			\
-      (MODE) = DImode;							\
+	&& GET_MODE_SIZE (MODE) < 4)					\
+      (MODE) = SImode;							\
   }									\
 while (0)