rl78.c (rl78_emit_libcall): New function.

[gcc]
	* config/rl78/rl78.c (rl78_emit_libcall): New function.
	* config/rl78/rl78-protos.h (rl78_emit_libcall): New function.
	* config/rl78/rl78.md: New define_expand "adddi3".
[libgcc]
	* config/rl78/adddi3.S: New assembly file.
	* config/rl78/t-rl78: Added adddi3.S to LIB2ADD.

From-SVN: r253748
This commit is contained in:
Sebastian Perta 2017-10-14 00:33:58 +00:00 committed by DJ Delorie
parent 41841c3269
commit a0bf6cf784
6 changed files with 72 additions and 1 deletions

View File

@ -1,3 +1,9 @@
2017-10-13 Sebastian Perta <sebastian.perta@renesas.com>
* config/rl78/rl78.c (rl78_emit_libcall): New function.
* config/rl78/rl78-protos.h (rl78_emit_libcall): New function.
* config/rl78/rl78.md: New define_expand "adddi3".
2017-10-13 Jan Hubicka <hubicka@ucw.cz>
* cfghooks.c (verify_flow_info): Disable check that all probabilities

View File

@ -54,3 +54,13 @@ void rl78_output_aligned_common (FILE *, tree, const char *,
int, int, int);
int rl78_one_far_p (rtx *operands, int num_operands);
#ifdef RTX_CODE
#ifdef HAVE_MACHINE_MODES
rtx rl78_emit_libcall (const char*, enum rtx_code,
enum machine_mode, enum machine_mode,
int, rtx*);
#endif
#endif

View File

@ -4791,6 +4791,45 @@ rl78_addsi3_internal (rtx * operands, unsigned int alternative)
}
}
rtx
rl78_emit_libcall (const char *name, enum rtx_code code,
enum machine_mode dmode, enum machine_mode smode,
int noperands, rtx *operands)
{
rtx ret;
rtx_insn *insns;
rtx libcall;
rtx equiv;
start_sequence ();
libcall = gen_rtx_SYMBOL_REF (Pmode, name);
switch (noperands)
{
case 2:
ret = emit_library_call_value (libcall, NULL_RTX, LCT_CONST,
dmode, operands[1], smode);
equiv = gen_rtx_fmt_e (code, dmode, operands[1]);
break;
case 3:
ret = emit_library_call_value (libcall, NULL_RTX,
LCT_CONST, dmode,
operands[1], smode, operands[2],
smode);
equiv = gen_rtx_fmt_ee (code, dmode, operands[1], operands[2]);
break;
default:
gcc_unreachable ();
}
insns = get_insns ();
end_sequence ();
emit_libcall_block (insns, operands[0], ret, equiv);
return ret;
}
#undef TARGET_PREFERRED_RELOAD_CLASS
#define TARGET_PREFERRED_RELOAD_CLASS rl78_preferred_reload_class

View File

@ -224,6 +224,16 @@
DONE;"
)
(define_expand "adddi3"
[(set (match_operand:DI 0 "nonimmediate_operand" "")
(plus:DI (match_operand:DI 1 "general_operand" "")
(match_operand:DI 2 "general_operand" "")))
]
""
"rl78_emit_libcall (\"__adddi3\", PLUS, DImode, DImode, 3, operands);
DONE;"
)
(define_insn "addsi3_internal_virt"
[(set (match_operand:SI 0 "nonimmediate_operand" "=v,&vm, vm")
(plus:SI (match_operand:SI 1 "general_operand" "0, vim, vim")

View File

@ -1,3 +1,8 @@
2017-10-13 Sebastian Perta <sebastian.perta@renesas.com>
* config/rl78/adddi3.S: New assembly file.
* config/rl78/t-rl78: Added adddi3.S to LIB2ADD.
2017-10-13 Jakub Jelinek <jakub@redhat.com>
PR target/82274

View File

@ -30,7 +30,8 @@ LIB2ADD = \
$(srcdir)/config/rl78/bit-count.S \
$(srcdir)/config/rl78/fpbit-sf.S \
$(srcdir)/config/rl78/fpmath-sf.S \
$(srcdir)/config/rl78/cmpsi2.S
$(srcdir)/config/rl78/cmpsi2.S \
$(srcdir)/config/rl78/adddi3.S
LIB2FUNCS_EXCLUDE = _clzhi2 _clzsi2 _ctzhi2 _ctzsi2 \
_popcounthi2 _popcountsi2 \