On Mon, May 30, 2016 at 12:45 AM, Richard Biener <rguent...@suse.de> wrote:
> Joseph - do you know sth about why there's not a full set of divmod
> libfuncs in libgcc?

Because udivmoddi4 isn't a libfunc, it is a helper function for the
div and mov libfuncs.  Since we can compute the signed div and mod
results from udivmoddi4, there was no need to also add a signed
version of it.  It was given a libfunc style name so that we had the
option of making it a libfunc in the future, but that never happened.
There was no support for calling any divmod libfunc until it was added
as a special case to call an ARM library (not libgcc) function.  This
happened here

2004-08-09  Mark Mitchell  <m...@codesourcery.com>

        * config.gcc (arm*-*-eabi*): New target.
        * defaults.h (TARGET_LIBGCC_FUNCS): New macro.
        (TARGET_LIB_INT_CMP_BIASED): Likewise.
        * expmed.c (expand_divmod): Try a two-valued divmod function as a
        last resort.
        ...
        * config/arm/arm.c (arm_init_libfuncs): New function.
        (arm_compute_initial_eliminatino_offset): Return HOST_WIDE_INT.
        (TARGET_INIT_LIBFUNCS): Define it.
        ...

Later, two ports added their own divmod libfuncs, but I don't see any
evidence that they were ever used, since there is no support for
calling divmod other than the expand_divmod last resort code that only
triggers for ARM.

It is only now that Prathamesh is adding gimple support for divmod
operations that we need to worry about getting this right, without
breaking the existing ARM library support or the existing udivmoddi4
support.

Jim

Reply via email to