[ARM/FDPIC v6 07/24] [ARM] FDPIC: Avoid saving/restoring r9 on stack since it is...
authorChristophe Lyon <christophe.lyon@st.com>
Tue, 10 Sep 2019 07:49:20 +0000 (09:49 +0200)
committerChristophe Lyon <clyon@gcc.gnu.org>
Tue, 10 Sep 2019 07:49:20 +0000 (09:49 +0200)
2019-09-10  Christophe Lyon  <christophe.lyon@st.com>
Mickaël Guêné <mickael.guene@st.com>

gcc/
* config/arm/arm.h (PIC_REGISTER_MAY_NEED_SAVING): New helper.
* config/arm/arm.c (arm_compute_save_reg0_reg12_mask): Handle
FDPIC.

Co-Authored-By: Mickaël Guêné <mickael.guene@st.com>
From-SVN: r275569

gcc/ChangeLog
gcc/config/arm/arm.c
gcc/config/arm/arm.h

index a212eb3ce52bf1a3d4328890f1d7d06841138c27..7b061d17b06b4e9554f1530b40a93fd40fc83485 100644 (file)
@@ -1,3 +1,10 @@
+2019-09-10  Christophe Lyon  <christophe.lyon@st.com>
+       Mickaël Guêné <mickael.guene@st.com>
+
+       * config/arm/arm.h (PIC_REGISTER_MAY_NEED_SAVING): New helper.
+       * config/arm/arm.c (arm_compute_save_reg0_reg12_mask): Handle
+       FDPIC.
+
 2019-09-10  Christophe Lyon  <christophe.lyon@st.com>
        Mickaël Guêné <mickael.guene@st.com>
 
index c34aab88178839311c3441e922c513ebd0a909c6..6ff3001fd02222a3288261ba315b36d31d070574 100644 (file)
@@ -19571,9 +19571,7 @@ arm_compute_save_reg0_reg12_mask (void)
          save_reg_mask |= (1 << reg);
 
       /* Also save the pic base register if necessary.  */
-      if (flag_pic
-         && !TARGET_SINGLE_PIC_BASE
-         && arm_pic_register != INVALID_REGNUM
+      if (PIC_REGISTER_MAY_NEED_SAVING
          && crtl->uses_pic_offset_table)
        save_reg_mask |= 1 << PIC_OFFSET_TABLE_REGNUM;
     }
@@ -19605,9 +19603,7 @@ arm_compute_save_reg0_reg12_mask (void)
 
       /* If we aren't loading the PIC register,
         don't stack it even though it may be live.  */
-      if (flag_pic
-         && !TARGET_SINGLE_PIC_BASE
-         && arm_pic_register != INVALID_REGNUM
+      if (PIC_REGISTER_MAY_NEED_SAVING
          && (df_regs_ever_live_p (PIC_OFFSET_TABLE_REGNUM)
              || crtl->uses_pic_offset_table))
        save_reg_mask |= 1 << PIC_OFFSET_TABLE_REGNUM;
index e404e2cde48ad536e2fc837638e9717f12f9ce88..490d22d9d649e8436d42182d7856d02f3ad9bffb 100644 (file)
@@ -1960,6 +1960,13 @@ extern unsigned arm_pic_register;
                   || label_mentioned_p (get_pool_constant (X)))))      \
         || tls_mentioned_p (X))
 
+/* We may want to save the PIC register if it is a dedicated one.  */
+#define PIC_REGISTER_MAY_NEED_SAVING                   \
+  (flag_pic                                            \
+   && !TARGET_SINGLE_PIC_BASE                          \
+   && !TARGET_FDPIC                                    \
+   && arm_pic_register != INVALID_REGNUM)
+
 /* We need to know when we are making a constant pool; this determines
    whether data needs to be in the GOT or can be referenced via a GOT
    offset.  */