Commit 10cd6ec5 by Sebastian Perta Committed by Sebastian Perta

rl78-protos.h: New function declaration rl78_split_movdi

2018-01-22  Sebastian Perta  <sebastian.perta@renesas.com>

	* config/rl78/rl78-protos.h: New function declaration rl78_split_movdi
	* config/rl78/rl78.md: New define_expand "movdi"
	* config/rl78/rl78.c: New function definition rl78_split_movdi

From-SVN: r256960
parent de0ecff8
2018-01-22 Sebastian Perta <sebastian.perta@renesas.com>
* config/rl78/rl78-protos.h: New function declaration rl78_split_movdi
* config/rl78/rl78.md: New define_expand "movdi"
* config/rl78/rl78.c: New function definition rl78_split_movdi
2018-01-22 Michael Meissner <meissner@linux.vnet.ibm.com> 2018-01-22 Michael Meissner <meissner@linux.vnet.ibm.com>
PR target/83862 PR target/83862
......
...@@ -23,6 +23,7 @@ void rl78_emit_eh_epilogue (rtx); ...@@ -23,6 +23,7 @@ void rl78_emit_eh_epilogue (rtx);
void rl78_expand_compare (rtx *); void rl78_expand_compare (rtx *);
void rl78_expand_movsi (rtx *); void rl78_expand_movsi (rtx *);
void rl78_split_movsi (rtx *, machine_mode); void rl78_split_movsi (rtx *, machine_mode);
void rl78_split_movdi (rtx *, enum machine_mode);
int rl78_force_nonfar_2 (rtx *, rtx (*gen)(rtx,rtx)); int rl78_force_nonfar_2 (rtx *, rtx (*gen)(rtx,rtx));
int rl78_force_nonfar_3 (rtx *, rtx (*gen)(rtx,rtx,rtx)); int rl78_force_nonfar_3 (rtx *, rtx (*gen)(rtx,rtx,rtx));
void rl78_expand_eh_epilogue (rtx); void rl78_expand_eh_epilogue (rtx);
......
...@@ -598,6 +598,18 @@ rl78_split_movsi (rtx *operands, machine_mode omode) ...@@ -598,6 +598,18 @@ rl78_split_movsi (rtx *operands, machine_mode omode)
} }
} }
void
rl78_split_movdi (rtx *operands, enum machine_mode omode)
{
rtx op00, op04, op10, op14;
op00 = rl78_subreg (SImode, operands[0], omode, 0);
op04 = rl78_subreg (SImode, operands[0], omode, 4);
op10 = rl78_subreg (SImode, operands[1], omode, 0);
op14 = rl78_subreg (SImode, operands[1], omode, 4);
emit_insn (gen_movsi (op00, op10));
emit_insn (gen_movsi (op04, op14));
}
/* Used by various two-operand expanders which cannot accept all /* Used by various two-operand expanders which cannot accept all
operands in the "far" namespace. Force some such operands into operands in the "far" namespace. Force some such operands into
registers so that each pattern has at most one far operand. */ registers so that each pattern has at most one far operand. */
......
...@@ -719,6 +719,14 @@ ...@@ -719,6 +719,14 @@
(set_attr "is_g13_muldiv_insn" "yes")] (set_attr "is_g13_muldiv_insn" "yes")]
) )
(define_expand "movdi"
[(set (match_operand:DI 0 "nonimmediate_operand" "")
(match_operand:DI 1 "general_operand" ""))]
""
"rl78_split_movdi(operands, DImode);
DONE;"
)
(define_expand "umindi3" (define_expand "umindi3"
[(set (match_operand:DI 0 "nonimmediate_operand" "") [(set (match_operand:DI 0 "nonimmediate_operand" "")
(umin:DI (match_operand:DI 1 "general_operand" "") (umin:DI (match_operand:DI 1 "general_operand" "")
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment