Kernel/arch - Fix common division macro to handle numerators around datatype max
[tpg/acess2.git] / KernelLand / Kernel / arch / helpers.h
index 4d85fcb..b478031 100644 (file)
 //  > If the `N` value is greater than `D`, we can set this bit
 #define DEF_DIVMOD(s) Uint##s __divmod##s(Uint##s N, Uint##s D, Uint##s*Rem){\
        Uint##s ret=0,add=1;\
-       while(N>=D&&add) {D<<=1;add<<=1;}\
-       while(add>1){\
-               add>>=1;D>>=1;\
+       while(N/2>=D&&add) {D<<=1;add<<=1;}\
+       while(add>0){\
                if(N>=D){ret+=add;N-=D;}\
+               add>>=1;D>>=1;\
        }\
        if(Rem)*Rem = N;\
        return ret;\

UCC git Repository :: git.ucc.asn.au