gcc/gcc:
        * config/arc/arc.h (enum reg_class): Rename R0_REG to R0_REGS.
        (REG_CLASS_NAMES): Likewise.
        * config/arc/constraints.md (x): Likewise.
        * config/arc/arc.md (R0_REG, R1_REG, R2_REG, R3_REG): New constants.
        (MUL64_OUT_REG): Likewise.
        (mulsidi_600, umulsidi_600): Use new constants.
        (mulsi3): Make pattern unconditional, emit sfunc pattern as fallback.
        (mulsi3_600_lib, umulsi3_highpart_600_lib_le): New patterns.
        (umulsi3_highpart_600_lib_be, umulsidi3_600_lib): Likewise.
        (umulsidi3_600_lib+1): Likewise.
        (mulsidi3): Enable / complete support for TARGET_MUL64_SET.
        (mulsidi3_700): New a define_insn_and_split.
        (umulsi3_highpart): Enable / complete support for TARGET_MUL64_SET.
        Add support to generate sfunc pattern as fallback.
        (umulsidi3): Likewise.
        * testsuite/gcc.target/arc/mulsidi3_highpart-1.c: New file.
        * testsuite/gcc.target/arc/mulsidi3_highpart-2.c: Likewise.
gcc/libgcc:
        * lib1funcs.S (__mulsi3): Use mlo register name.
        (__umulsidi3): Use ARCompact instructions & re-schedule for
        ARC600 & ARC700 pipelines.  Provide __umulsi3_highpart symbol
        for __ARC700__, __ARC_MUL64__ and __ARC601__.
        (__umulsi3_highpart): New function.
        * config/arc/t-arc (LIB1ASMFUNCS): Add _umulsi3_highpart.
        * longlong.h [__arc__] (umul_ppmm): Remove.
        [__arc__] (__umulsidi3): Define.
        [__arc__ && __ARC_NORM__] (count_leading_zeroes): Define.
        [__arc__ && __ARC_NORM__] (COUNT_LEADING_ZEROS_0): Likewise.