ia64.c (ia64_promote_function_mode): Remove.
authorTristan Gingold <gingold@adacore.com>
Thu, 22 Dec 2011 16:40:11 +0000 (16:40 +0000)
committerTristan Gingold <gingold@gcc.gnu.org>
Thu, 22 Dec 2011 16:40:11 +0000 (16:40 +0000)
2011-12-22  Tristan Gingold  <gingold@adacore.com>

* config/ia64/ia64.c (ia64_promote_function_mode): Remove.
(TARGET_PROMOTE_FUNCTION_MODE): Remove.
(ia64_function_value): Call promote_function_mode instead of
ia64_promote_function_mode.
* config/ia64/vms.h (PROMOTE_MODE): Define.
(TARGET_PROMOTE_FUNCTION_MODE): Define.

From-SVN: r182627

gcc/ChangeLog
gcc/config/ia64/ia64.c
gcc/config/ia64/vms.h

index bf631f554ec58e1e54225d0855d81dd50bc6844c..cc8a2a4fbfb6b1c7d589dd7f9f7d9af7b32e9b6b 100644 (file)
@@ -1,3 +1,12 @@
+2011-12-22  Tristan Gingold  <gingold@adacore.com>
+
+       * config/ia64/ia64.c (ia64_promote_function_mode): Remove.
+       (TARGET_PROMOTE_FUNCTION_MODE): Remove.
+       (ia64_function_value): Call promote_function_mode instead of
+       ia64_promote_function_mode.
+       * config/ia64/vms.h (PROMOTE_MODE): Define.
+       (TARGET_PROMOTE_FUNCTION_MODE): Define.
+
 2011-12-22  Uros Bizjak  <ubizjak@gmail.com>
 
        PR target/27468
index 1635a7e59515b4104314050266ec2a93ea8bef2b..d74eeb6299b69b4863f306b22eb549e69d42c898 100644 (file)
@@ -316,11 +316,6 @@ static const char *ia64_invalid_conversion (const_tree, const_tree);
 static const char *ia64_invalid_unary_op (int, const_tree);
 static const char *ia64_invalid_binary_op (int, const_tree, const_tree);
 static enum machine_mode ia64_c_mode_for_suffix (char);
-static enum machine_mode ia64_promote_function_mode (const_tree,
-                                                    enum machine_mode,
-                                                    int *,
-                                                    const_tree,
-                                                    int);
 static void ia64_trampoline_init (rtx, tree, rtx);
 static void ia64_override_options_after_change (void);
 
@@ -546,9 +541,6 @@ static const struct attribute_spec ia64_attribute_table[] =
 #define TARGET_ASM_OUTPUT_DWARF_DTPREL ia64_output_dwarf_dtprel
 #endif
 
-#undef TARGET_PROMOTE_FUNCTION_MODE
-#define TARGET_PROMOTE_FUNCTION_MODE ia64_promote_function_mode
-
 /* ??? Investigate.  */
 #if 0
 #undef TARGET_PROMOTE_PROTOTYPES
@@ -5013,9 +5005,9 @@ ia64_function_value (const_tree valtype,
          return gen_rtx_PARALLEL (mode, gen_rtvec_v (i, loc));
        }
 
-      mode = ia64_promote_function_mode (valtype, mode, &unsignedp,
-                                        func ? TREE_TYPE (func) : NULL_TREE,
-                                        true);
+      mode = promote_function_mode (valtype, mode, &unsignedp,
+                                    func ? TREE_TYPE (func) : NULL_TREE,
+                                    true);
 
       return gen_rtx_REG (mode, GR_RET_FIRST);
     }
@@ -10984,43 +10976,6 @@ ia64_c_mode_for_suffix (char suffix)
   return VOIDmode;
 }
 
-static enum machine_mode
-ia64_promote_function_mode (const_tree type,
-                           enum machine_mode mode,
-                           int *punsignedp,
-                           const_tree funtype,
-                           int for_return)
-{
-  /* Special processing required for OpenVMS ...  */
-
-  if (!TARGET_ABI_OPEN_VMS)
-    return default_promote_function_mode(type, mode, punsignedp, funtype,
-                                        for_return);
-
-  /* HP OpenVMS Calling Standard dated June, 2004, that describes
-     HP OpenVMS I64 Version 8.2EFT,
-     chapter 4 "OpenVMS I64 Conventions"
-     section 4.7 "Procedure Linkage"
-     subsection 4.7.5.2, "Normal Register Parameters"
-
-     "Unsigned integral (except unsigned 32-bit), set, and VAX floating-point
-     values passed in registers are zero-filled; signed integral values as
-     well as unsigned 32-bit integral values are sign-extended to 64 bits.
-     For all other types passed in the general registers, unused bits are
-     undefined."  */
-
-  if (for_return != 2
-      && GET_MODE_CLASS (mode) == MODE_INT
-      && GET_MODE_SIZE (mode) < UNITS_PER_WORD)
-    {
-      if (mode == SImode)
-       *punsignedp = 0;
-      return DImode;
-    }
-  else
-    return promote_mode (type, mode, punsignedp);
-}
-   
 static GTY(()) rtx ia64_dconst_0_5_rtx;
 
 rtx
index 75ea4ad430e55059f9a816dc17aa7755f0ca39a0..f34ee78465ab081d3e6f1349374088e274e4d7ea 100644 (file)
@@ -135,3 +135,25 @@ STATIC func_ptr __CTOR_LIST__[1]                                             \
 
 #undef TARGET_ASM_NAMED_SECTION
 #define TARGET_ASM_NAMED_SECTION ia64_vms_elf_asm_named_section
+
+/* Define this macro if it is advisable to hold scalars in registers
+   in a wider mode than that declared by the program.  In such cases,
+   the value is constrained to be within the bounds of the declared
+   type, but kept valid in the wider mode.  The signedness of the
+   extension may differ from that of the type.
+
+   For ia64, we always store objects in a full register.  32-bit integers
+   are always sign-extended, but smaller objects retain their signedness.  */
+
+#undef PROMOTE_MODE
+#define PROMOTE_MODE(MODE,UNSIGNEDP,TYPE)                      \
+  if (GET_MODE_CLASS (MODE) == MODE_INT                                \
+      && GET_MODE_SIZE (MODE) < UNITS_PER_WORD)                        \
+    {                                                          \
+      if ((MODE) == SImode)                                    \
+       (UNSIGNEDP) = 0;                                        \
+      (MODE) = DImode;                                         \
+    }
+
+#undef TARGET_PROMOTE_FUNCTION_MODE
+#define TARGET_PROMOTE_FUNCTION_MODE default_promote_function_mode_always_promote