[Darwin, PPC, Mode Iterators 3/n] Update macho_correct_pic.
Drop the expander and use a mode expander on the define_insn for macho_correct_pic instead. gcc/ChangeLog: 2019-09-27 Iain Sandoe <iain@sandoe.co.uk> * config/rs6000/darwin.md (@macho_correct_pic_<mode>): New, replaces the expander and two define_insn entries. (@reload_macho_picbase_<mode>): Update gen_macho_correct_pic call. * config/rs6000/rs6000.md (builtin_setjmp_receiver): Likewise. From-SVN: r276196
This commit is contained in:
parent
26a23d11ed
commit
576113abdb
|
@ -1,3 +1,11 @@
|
||||||
|
2019-09-27 Iain Sandoe <iain@sandoe.co.uk>
|
||||||
|
|
||||||
|
* config/rs6000/darwin.md (@macho_correct_pic_<mode>): New,
|
||||||
|
replaces the expander and two define_insn entries.
|
||||||
|
(@reload_macho_picbase_<mode>): Update gen_macho_correct_pic
|
||||||
|
call.
|
||||||
|
* config/rs6000/rs6000.md (builtin_setjmp_receiver): Likewise.
|
||||||
|
|
||||||
2019-09-27 David Malcolm <dmalcolm@redhat.com>
|
2019-09-27 David Malcolm <dmalcolm@redhat.com>
|
||||||
|
|
||||||
* fibonacci_heap.h (fibonacci_heap::empty): Make const.
|
* fibonacci_heap.h (fibonacci_heap::empty): Make const.
|
||||||
|
|
|
@ -216,6 +216,16 @@ You should have received a copy of the GNU General Public License
|
||||||
(match_dup 2))]
|
(match_dup 2))]
|
||||||
"")
|
"")
|
||||||
|
|
||||||
|
(define_insn "@macho_correct_pic_<mode>"
|
||||||
|
[(set (match_operand:P 0 "gpc_reg_operand" "=r")
|
||||||
|
(plus:P (match_operand:P 1 "gpc_reg_operand" "r")
|
||||||
|
(unspec:P [(match_operand:P 2 "immediate_operand" "s")
|
||||||
|
(match_operand:P 3 "immediate_operand" "s")]
|
||||||
|
UNSPEC_MPIC_CORRECT)))]
|
||||||
|
"DEFAULT_ABI == ABI_DARWIN"
|
||||||
|
"addis %0,%1,ha16(%2-%3)\n\taddi %0,%0,lo16(%2-%3)"
|
||||||
|
[(set_attr "length" "8")])
|
||||||
|
|
||||||
(define_insn "@load_macho_picbase_<mode>"
|
(define_insn "@load_macho_picbase_<mode>"
|
||||||
[(set (reg:P LR_REGNO)
|
[(set (reg:P LR_REGNO)
|
||||||
(unspec:P [(match_operand:P 0 "immediate_operand" "s")
|
(unspec:P [(match_operand:P 0 "immediate_operand" "s")
|
||||||
|
@ -232,44 +242,6 @@ You should have received a copy of the GNU General Public License
|
||||||
[(set_attr "type" "branch")
|
[(set_attr "type" "branch")
|
||||||
(set_attr "cannot_copy" "yes")])
|
(set_attr "cannot_copy" "yes")])
|
||||||
|
|
||||||
(define_expand "macho_correct_pic"
|
|
||||||
[(set (match_operand 0 "")
|
|
||||||
(plus (match_operand 1 "")
|
|
||||||
(unspec [(match_operand 2 "")
|
|
||||||
(match_operand 3 "")]
|
|
||||||
UNSPEC_MPIC_CORRECT)))]
|
|
||||||
"DEFAULT_ABI == ABI_DARWIN"
|
|
||||||
{
|
|
||||||
if (TARGET_32BIT)
|
|
||||||
emit_insn (gen_macho_correct_pic_si (operands[0], operands[1], operands[2],
|
|
||||||
operands[3]));
|
|
||||||
else
|
|
||||||
emit_insn (gen_macho_correct_pic_di (operands[0], operands[1], operands[2],
|
|
||||||
operands[3]));
|
|
||||||
|
|
||||||
DONE;
|
|
||||||
})
|
|
||||||
|
|
||||||
(define_insn "macho_correct_pic_si"
|
|
||||||
[(set (match_operand:SI 0 "gpc_reg_operand" "=r")
|
|
||||||
(plus:SI (match_operand:SI 1 "gpc_reg_operand" "r")
|
|
||||||
(unspec:SI [(match_operand:SI 2 "immediate_operand" "s")
|
|
||||||
(match_operand:SI 3 "immediate_operand" "s")]
|
|
||||||
UNSPEC_MPIC_CORRECT)))]
|
|
||||||
"DEFAULT_ABI == ABI_DARWIN"
|
|
||||||
"addis %0,%1,ha16(%2-%3)\n\taddi %0,%0,lo16(%2-%3)"
|
|
||||||
[(set_attr "length" "8")])
|
|
||||||
|
|
||||||
(define_insn "macho_correct_pic_di"
|
|
||||||
[(set (match_operand:DI 0 "gpc_reg_operand" "=r")
|
|
||||||
(plus:DI (match_operand:DI 1 "gpc_reg_operand" "r")
|
|
||||||
(unspec:DI [(match_operand:DI 2 "immediate_operand" "s")
|
|
||||||
(match_operand:DI 3 "immediate_operand" "s")]
|
|
||||||
16)))]
|
|
||||||
"DEFAULT_ABI == ABI_DARWIN && TARGET_64BIT"
|
|
||||||
"addis %0,%1,ha16(%2-%3)\n\taddi %0,%0,lo16(%2-%3)"
|
|
||||||
[(set_attr "length" "8")])
|
|
||||||
|
|
||||||
(define_insn "@reload_macho_picbase_<mode>"
|
(define_insn "@reload_macho_picbase_<mode>"
|
||||||
[(set (reg:P LR_REGNO)
|
[(set (reg:P LR_REGNO)
|
||||||
(unspec:P [(match_operand:P 0 "immediate_operand" "s")
|
(unspec:P [(match_operand:P 0 "immediate_operand" "s")
|
||||||
|
@ -316,7 +288,8 @@ You should have received a copy of the GNU General Public License
|
||||||
|
|
||||||
emit_insn (gen_reload_macho_picbase (Pmode, tmplrtx));
|
emit_insn (gen_reload_macho_picbase (Pmode, tmplrtx));
|
||||||
emit_move_insn (picreg, gen_rtx_REG (Pmode, LR_REGNO));
|
emit_move_insn (picreg, gen_rtx_REG (Pmode, LR_REGNO));
|
||||||
emit_insn (gen_macho_correct_pic (picreg, picreg, picrtx, tmplrtx));
|
emit_insn (gen_macho_correct_pic (Pmode, picreg, picreg,
|
||||||
|
picrtx, tmplrtx));
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
/* Not using PIC reg, no reload needed. */
|
/* Not using PIC reg, no reload needed. */
|
||||||
|
|
|
@ -10055,7 +10055,8 @@
|
||||||
|
|
||||||
emit_insn (gen_load_macho_picbase (Pmode, tmplabrtx));
|
emit_insn (gen_load_macho_picbase (Pmode, tmplabrtx));
|
||||||
emit_move_insn (picreg, gen_rtx_REG (Pmode, LR_REGNO));
|
emit_move_insn (picreg, gen_rtx_REG (Pmode, LR_REGNO));
|
||||||
emit_insn (gen_macho_correct_pic (picreg, picreg, picrtx, tmplabrtx));
|
emit_insn (gen_macho_correct_pic (Pmode, picreg, picreg,
|
||||||
|
picrtx, tmplabrtx));
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
#endif
|
#endif
|
||||||
|
|
Loading…
Reference in New Issue