@@ -6521,6 +6521,10 @@ s390_dwarf_frame_reg_mode (int regno)
{
machine_mode save_mode = default_dwarf_frame_reg_mode (regno);
+ /* Make sure not to return DImode for any GPR with -m31 -mzarch. */
+ if (GENERAL_REGNO_P (regno))
+ save_mode = Pmode;
+
/* The rightmost 64 bits of vector registers are call-clobbered. */
if (GET_MODE_SIZE (save_mode) > 8)
save_mode = DImode;
new file mode 100644
@@ -0,0 +1,21 @@
+/* Make sure the dwarf reg size table doesn't change for 31 bit. */
+
+/* { dg-do compile { target { ! lp64 } } } */
+/* { dg-options "-mesa" } */
+
+#define DWARF_FRAME_REGISTERS 34
+
+static unsigned char dwarf_reg_size_table[DWARF_FRAME_REGISTERS + 1];
+static unsigned char ref_reg_size_table[DWARF_FRAME_REGISTERS + 1] =
+ { 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 4, 4, 0 };
+
+int
+main ()
+{
+ __builtin_init_dwarf_reg_size_table (dwarf_reg_size_table);
+ if (__builtin_memcmp (ref_reg_size_table,
+ dwarf_reg_size_table, DWARF_FRAME_REGISTERS + 1) != 0)
+ __builtin_abort ();
+ return 0;
+}
new file mode 100644
@@ -0,0 +1,21 @@
+/* Make sure the dwarf reg size table doesn't change for 31 bit zarch. */
+
+/* { dg-do compile { target { ! lp64 } } } */
+/* { dg-options "-mzarch" } */
+
+#define DWARF_FRAME_REGISTERS 34
+
+static unsigned char dwarf_reg_size_table[DWARF_FRAME_REGISTERS + 1];
+static unsigned char ref_reg_size_table[DWARF_FRAME_REGISTERS + 1] =
+ { 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 4, 4, 0 };
+
+int
+main ()
+{
+ __builtin_init_dwarf_reg_size_table (dwarf_reg_size_table);
+ if (__builtin_memcmp (ref_reg_size_table,
+ dwarf_reg_size_table, DWARF_FRAME_REGISTERS + 1) != 0)
+ __builtin_abort ();
+ return 0;
+}
new file mode 100644
@@ -0,0 +1,20 @@
+/* Make sure the dwarf reg size table doesn't change for 64 bit. */
+
+/* { dg-do compile { target { lp64 } } } */
+
+#define DWARF_FRAME_REGISTERS 34
+
+static unsigned char dwarf_reg_size_table[DWARF_FRAME_REGISTERS + 1];
+static unsigned char ref_reg_size_table[DWARF_FRAME_REGISTERS + 1] =
+ { 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 4, 0 };
+
+int
+main ()
+{
+ __builtin_init_dwarf_reg_size_table (dwarf_reg_size_table);
+ if (__builtin_memcmp (ref_reg_size_table,
+ dwarf_reg_size_table, DWARF_FRAME_REGISTERS + 1) != 0)
+ __builtin_abort ();
+ return 0;
+}