[builtins] Make __umodsi3/__udivdi3/__umoddi3 standalone (shift and subtract)
authorFangrui Song <maskray@google.com>
Fri, 10 Apr 2020 22:14:52 +0000 (15:14 -0700)
committerFangrui Song <maskray@google.com>
Tue, 14 Apr 2020 17:38:37 +0000 (10:38 -0700)
commitb541196eb45d80f2dacd76e16828963760c3850d
tree5da317ed0709c543ed7986648f3a7272bc1eefd3
parentb34c9049cb1a3a5c290ce1ac8746e90d44053a3c
[builtins] Make __umodsi3/__udivdi3/__umoddi3 standalone (shift and subtract)

@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
compiler-rt/lib/builtins/int_div_impl.inc [new file with mode: 0644]
compiler-rt/lib/builtins/udivdi3.c
compiler-rt/lib/builtins/udivsi3.c
compiler-rt/lib/builtins/umoddi3.c
compiler-rt/lib/builtins/umodsi3.c