|
@@ -17,18 +17,20 @@
|
|
* This ends up being the most efficient "calling
|
|
* This ends up being the most efficient "calling
|
|
* convention" on x86.
|
|
* convention" on x86.
|
|
*/
|
|
*/
|
|
-#define do_div(n,base) ({ \
|
|
|
|
- unsigned long __upper, __low, __high, __mod, __base; \
|
|
|
|
- __base = (base); \
|
|
|
|
- asm("":"=a" (__low), "=d" (__high):"A" (n)); \
|
|
|
|
- __upper = __high; \
|
|
|
|
- if (__high) { \
|
|
|
|
- __upper = __high % (__base); \
|
|
|
|
- __high = __high / (__base); \
|
|
|
|
- } \
|
|
|
|
- asm("divl %2":"=a" (__low), "=d" (__mod):"rm" (__base), "0" (__low), "1" (__upper)); \
|
|
|
|
- asm("":"=A" (n):"a" (__low),"d" (__high)); \
|
|
|
|
- __mod; \
|
|
|
|
|
|
+#define do_div(n, base) \
|
|
|
|
+({ \
|
|
|
|
+ unsigned long __upper, __low, __high, __mod, __base; \
|
|
|
|
+ __base = (base); \
|
|
|
|
+ asm("":"=a" (__low), "=d" (__high) : "A" (n)); \
|
|
|
|
+ __upper = __high; \
|
|
|
|
+ if (__high) { \
|
|
|
|
+ __upper = __high % (__base); \
|
|
|
|
+ __high = __high / (__base); \
|
|
|
|
+ } \
|
|
|
|
+ asm("divl %2":"=a" (__low), "=d" (__mod) \
|
|
|
|
+ : "rm" (__base), "0" (__low), "1" (__upper)); \
|
|
|
|
+ asm("":"=A" (n) : "a" (__low), "d" (__high)); \
|
|
|
|
+ __mod; \
|
|
})
|
|
})
|
|
|
|
|
|
/*
|
|
/*
|
|
@@ -37,14 +39,13 @@
|
|
*
|
|
*
|
|
* Warning, this will do an exception if X overflows.
|
|
* Warning, this will do an exception if X overflows.
|
|
*/
|
|
*/
|
|
-#define div_long_long_rem(a,b,c) div_ll_X_l_rem(a,b,c)
|
|
|
|
|
|
+#define div_long_long_rem(a, b, c) div_ll_X_l_rem(a, b, c)
|
|
|
|
|
|
-static inline long
|
|
|
|
-div_ll_X_l_rem(long long divs, long div, long *rem)
|
|
|
|
|
|
+static inline long div_ll_X_l_rem(long long divs, long div, long *rem)
|
|
{
|
|
{
|
|
long dum2;
|
|
long dum2;
|
|
- __asm__("divl %2":"=a"(dum2), "=d"(*rem)
|
|
|
|
- : "rm"(div), "A"(divs));
|
|
|
|
|
|
+ asm("divl %2":"=a"(dum2), "=d"(*rem)
|
|
|
|
+ : "rm"(div), "A"(divs));
|
|
|
|
|
|
return dum2;
|
|
return dum2;
|
|
|
|
|