在模函数和timespec 规范化中,内核代码都通过循环计算模,并防止编译器将循环优化为模运算符。
为什么需要这个?
我希望如果这种优化不好,编译器就不会那样做。除了,可能存在这种优化更快的架构。为什么所有架构都需要此代码?
在模函数和timespec 规范化中,内核代码都通过循环计算模,并防止编译器将循环优化为模运算符。
为什么需要这个?
我希望如果这种优化不好,编译器就不会那样做。除了,可能存在这种优化更快的架构。为什么所有架构都需要此代码?
对于程序员知道被除数只比除数大一点的情况(因此迭代版本只会循环一次或两次),就会这样做。不能指望编译器解决这个问题。这是由以下评论解释的div64.c
:
/*
* Iterative div/mod for use when dividend is not expected to be much
* bigger than divisor.
*/
您指向的模函数是iter_div_u64_rem()
,在需要时显式使用;对于常规模数版本,有div_u64_rem()
.