mirror of
https://github.com/llvm/llvm-project.git
synced 2025-04-26 18:56:06 +00:00

@kamleshbhalui reported that when the Standard Extension M (Multiplication and Division) is disabled for RISC-V, `__udivdi3` will call __udivmodti4 which will in turn calls `__udivdi3`. This patch moves __udivsi3 (shift and subtract) to int_div_impl.inc `__udivXi3`, optimize a bit, add a `__umodXi3`, and use `__udivXi3` and `__umodXi3` to define `__udivsi3` `__umodsi3` `__udivdi3` `__umoddi3`. Reviewed By: kamleshbhalui Differential Revision: https://reviews.llvm.org/D77912
28 lines
802 B
C
28 lines
802 B
C
//===-- udivsi3.c - Implement __udivsi3 -----------------------------------===//
|
|
//
|
|
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
|
|
// See https://llvm.org/LICENSE.txt for license information.
|
|
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
//
|
|
// This file implements __udivsi3 for the compiler_rt library.
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
#include "int_lib.h"
|
|
|
|
typedef su_int fixuint_t;
|
|
typedef si_int fixint_t;
|
|
#include "int_div_impl.inc"
|
|
|
|
// Returns: a / b
|
|
|
|
COMPILER_RT_ABI su_int __udivsi3(su_int a, su_int b) {
|
|
return __udivXi3(a, b);
|
|
}
|
|
|
|
#if defined(__ARM_EABI__)
|
|
COMPILER_RT_ALIAS(__udivsi3, __aeabi_uidiv)
|
|
#endif
|