[PATCH] Add udivmoddi4.
Christian Melki
christian.melki at t2data.com
Wed Jun 9 21:20:20 CEST 2021
On 6/9/21 8:31 PM, Tom Rini wrote:
> On Mon, Jun 07, 2021 at 11:20:47AM +0200, Christian Melki wrote:
>
>> A newer toolchain will emit udivmoddi4 for certain divide + modulo
>> operations instead of a separate divide and modulo operation.
>> AFAIU, this would be sufficient.
>>
>> Signed-off-by: Christian Melki <christian.melki at t2data.com>
>> ---
>> arch/x86/lib/div64.c | 5 +++++
>> 1 file changed, 5 insertions(+)
>>
>> diff --git a/arch/x86/lib/div64.c b/arch/x86/lib/div64.c
>> index 2bea205f60..a5b536fbc5 100644
>> --- a/arch/x86/lib/div64.c
>> +++ b/arch/x86/lib/div64.c
>> @@ -110,3 +110,8 @@ u64 __umoddi3(u64 num, u64 den)
>> _64bit_divide(num, den, &v);
>> return v;
>> }
>> +
>> +u64 __udivmoddi4(u64 num, u64 den, u64 *rem)
>> +{
>> + return _64bit_divide(num, den, rem);
>> +}
>
> How do you trigger this and should you not be using do_div(), etc,
> instead?
>
I probably should. Was trying to minimize various dependencies on u-boot
code (atleast with function separation) while trying to implement a
redundancy boot mechanism as a cmd. Triggered by using two consecutive
calls between the same variables for division and remainder as pure
operands with a gcc 9.3 x86 toolchain.
U-boot has no div_up afaik?
a = b / c;
if (b % c) {
a++;
}
b / c and b % c gets optimized / translated to udivmoddi4 as one operation.
More information about the U-Boot
mailing list