[Darwin, PPC, Mode Iterators 4/n] Update macho_high.
authorIain Sandoe <iain@sandoe.co.uk>
Sat, 28 Sep 2019 19:32:31 +0000 (19:32 +0000)
committerIain Sandoe <iains@gcc.gnu.org>
Sat, 28 Sep 2019 19:32:31 +0000 (19:32 +0000)
Drop the expander and use a mode iterator on the define_insn
for @macho_high_<mode> instead.

gcc/ChangeLog:

2019-09-28  Iain Sandoe  <iain@sandoe.co.uk>

* config/darwin.c (gen_macho_high): Amend to include the mode
argument.
(machopic_indirect_data_reference): Amend gen_macho_high call
to include mode argument.
(machopic_legitimize_pic_address): Likewise.
* config/rs6000/rs6000.c (rs6000_legitimize_address):
* config/rs6000/darwin.md (@macho_high_<mode>): New, replaces
the macho_high expander and two define_insn entries.

From-SVN: r276256

gcc/ChangeLog
gcc/config/darwin.c
gcc/config/rs6000/darwin.md
gcc/config/rs6000/rs6000.c

index 0dd37202200f1374183168de58c1547c801594d3..88fed01cd52017d654e8d8c6eae040322390832d 100644 (file)
@@ -1,3 +1,14 @@
+2019-09-28  Iain Sandoe  <iain@sandoe.co.uk>
+
+       * config/darwin.c (gen_macho_high): Amend to include the mode
+       argument.
+       (machopic_indirect_data_reference): Amend gen_macho_high call
+       to include mode argument.
+       (machopic_legitimize_pic_address): Likewise.
+       * config/rs6000/rs6000.c (rs6000_legitimize_address):
+       * config/rs6000/darwin.md (@macho_high_<mode>): New, replaces
+       the macho_high expander and two define_insn entries.
+
 2019-09-28  Oleg Endo  <olegendo@gcc.gnu.org>
 
        PR target/86805
index 3e4bbffc9286d747646301f0e2978dbd6ecab10e..1f72c07ab72ae0a503fd1c08520e6f032169ef65 100644 (file)
@@ -47,6 +47,7 @@ along with GCC; see the file COPYING3.  If not see
 #include "toplev.h"
 #include "lto-section-names.h"
 #include "intl.h"
+#include "optabs.h"
 
 /* Darwin supports a feature called fix-and-continue, which is used
    for rapid turn around debugging.  When code is compiled with the
@@ -108,7 +109,7 @@ section * darwin_sections[NUM_DARWIN_SECTIONS];
 
 /* While we transition to using in-tests instead of ifdef'd code.  */
 #if !HAVE_lo_sum
-#define gen_macho_high(a,b) (a)
+#define gen_macho_high(m,a,b) (a)
 #define gen_macho_low(a,b,c) (a)
 #endif
 
@@ -654,7 +655,7 @@ machopic_indirect_data_reference (rtx orig, rtx reg)
            {
          /* Create a new register for CSE opportunities.  */
          rtx hi_reg = (!can_create_pseudo_p () ? reg : gen_reg_rtx (Pmode));
-         emit_insn (gen_macho_high (hi_reg, orig));
+         emit_insn (gen_macho_high (Pmode, hi_reg, orig));
          emit_insn (gen_macho_low (reg, hi_reg, orig));
              return reg;
            }
@@ -858,7 +859,7 @@ machopic_legitimize_pic_address (rtx orig, machine_mode mode, rtx reg)
              rtx asym = XEXP (orig, 0);
              rtx mem;
 
-             emit_insn (gen_macho_high (temp_reg, asym));
+             emit_insn (gen_macho_high (Pmode, temp_reg, asym));
              mem = gen_const_mem (GET_MODE (orig),
                                   gen_rtx_LO_SUM (Pmode, temp_reg,
                                                   copy_rtx (asym)));
index b2a52d81b3f42e897e7f51fe81cb5292026d8346..0c63a31755e2b8a56d78ff59877f25d26b874b0e 100644 (file)
@@ -150,31 +150,12 @@ You should have received a copy of the GNU General Public License
    stfd %0,lo16(%2)(%1)"
   [(set_attr "type" "store")])
 
-;; Mach-O PIC trickery.
-(define_expand "macho_high"
-  [(set (match_operand 0 "")
-       (high (match_operand 1 "")))]
-  "TARGET_MACHO"
-{
-  if (TARGET_64BIT)
-    emit_insn (gen_macho_high_di (operands[0], operands[1]));
-  else
-    emit_insn (gen_macho_high_si (operands[0], operands[1]));
+;; Mach-O PIC.
 
-  DONE;
-})
-
-(define_insn "macho_high_si"
-  [(set (match_operand:SI 0 "gpc_reg_operand" "=b*r")
-       (high:SI (match_operand 1 "" "")))]
-  "TARGET_MACHO && ! TARGET_64BIT"
-  "lis %0,ha16(%1)")
-  
-
-(define_insn "macho_high_di"
-  [(set (match_operand:DI 0 "gpc_reg_operand" "=b*r")
-       (high:DI (match_operand 1 "" "")))]
-  "TARGET_MACHO && TARGET_64BIT"
+(define_insn "@macho_high_<mode>"
+  [(set (match_operand:P 0 "gpc_reg_operand" "=b*r")
+       (high:P (match_operand 1 "" "")))]
+  "TARGET_MACHO && (DEFAULT_ABI == ABI_DARWIN)"
   "lis %0,ha16(%1)")
 
 (define_expand "macho_low"
index 81aec9c54a8b324d243810adbf86c78a17d8ea85..f136dcbf8c3fff1869764cfc05e2195cd17a5dca 100644 (file)
@@ -7978,7 +7978,7 @@ rs6000_legitimize_address (rtx x, rtx oldx ATTRIBUTE_UNUSED,
       if (TARGET_ELF)
        emit_insn (gen_elf_high (reg, x));
       else
-       emit_insn (gen_macho_high (reg, x));
+       emit_insn (gen_macho_high (Pmode, reg, x));
       return gen_rtx_LO_SUM (Pmode, reg, x);
     }
   else if (TARGET_TOC
@@ -9691,7 +9691,7 @@ rs6000_emit_move (rtx dest, rtx source, machine_mode mode)
                  return;
                }
 #endif
-             emit_insn (gen_macho_high (target, operands[1]));
+             emit_insn (gen_macho_high (Pmode, target, operands[1]));
              emit_insn (gen_macho_low (operands[0], target, operands[1]));
              return;
            }