| .. | .. | 
|---|
| 73 | 73 |   | 
|---|
| 74 | 74 |  #else | 
|---|
| 75 | 75 |  # include <asm-generic/div64.h> | 
|---|
 | 76 | +  | 
|---|
 | 77 | +/*  | 
|---|
 | 78 | + * Will generate an #DE when the result doesn't fit u64, could fix with an  | 
|---|
 | 79 | + * __ex_table[] entry when it becomes an issue.  | 
|---|
 | 80 | + */  | 
|---|
 | 81 | +static inline u64 mul_u64_u64_div_u64(u64 a, u64 mul, u64 div)  | 
|---|
 | 82 | +{  | 
|---|
 | 83 | +	u64 q;  | 
|---|
 | 84 | +  | 
|---|
 | 85 | +	asm ("mulq %2; divq %3" : "=a" (q)  | 
|---|
 | 86 | +				: "a" (a), "rm" (mul), "rm" (div)  | 
|---|
 | 87 | +				: "rdx");  | 
|---|
 | 88 | +  | 
|---|
 | 89 | +	return q;  | 
|---|
 | 90 | +}  | 
|---|
 | 91 | +#define mul_u64_u64_div_u64 mul_u64_u64_div_u64  | 
|---|
 | 92 | +  | 
|---|
 | 93 | +static inline u64 mul_u64_u32_div(u64 a, u32 mul, u32 div)  | 
|---|
 | 94 | +{  | 
|---|
 | 95 | +	return mul_u64_u64_div_u64(a, mul, div);  | 
|---|
 | 96 | +}  | 
|---|
 | 97 | +#define mul_u64_u32_div	mul_u64_u32_div  | 
|---|
 | 98 | +  | 
|---|
| 76 | 99 |  #endif /* CONFIG_X86_32 */ | 
|---|
| 77 | 100 |   | 
|---|
| 78 | 101 |  #endif /* _ASM_X86_DIV64_H */ | 
|---|