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:
parent
41841c3269
commit
a0bf6cf784
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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")
|
||||
|
@ -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
|
||||
|
@ -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 \
|
||||
|
Loading…
Reference in New Issue
Block a user