]>
Commit | Line | Data |
---|---|---|
1da177e4 LT |
1 | #ifndef __S390_DIV64 |
2 | #define __S390_DIV64 | |
3 | ||
4 | #ifndef __s390x__ | |
5 | ||
6 | /* for do_div "base" needs to be smaller than 2^31-1 */ | |
7 | #define do_div(n, base) ({ \ | |
8 | unsigned long long __n = (n); \ | |
9 | unsigned long __r; \ | |
10 | \ | |
11 | asm (" slr 0,0\n" \ | |
12 | " l 1,%1\n" \ | |
13 | " srdl 0,1\n" \ | |
14 | " dr 0,%2\n" \ | |
15 | " alr 1,1\n" \ | |
16 | " alr 0,0\n" \ | |
17 | " lhi 2,1\n" \ | |
18 | " n 2,%1\n" \ | |
19 | " alr 0,2\n" \ | |
20 | " clr 0,%2\n" \ | |
21 | " jl 0f\n" \ | |
22 | " slr 0,%2\n" \ | |
23 | " ahi 1,1\n" \ | |
24 | "0: st 1,%1\n" \ | |
25 | " l 1,4+%1\n" \ | |
26 | " srdl 0,1\n" \ | |
27 | " dr 0,%2\n" \ | |
28 | " alr 1,1\n" \ | |
29 | " alr 0,0\n" \ | |
30 | " lhi 2,1\n" \ | |
31 | " n 2,4+%1\n" \ | |
32 | " alr 0,2\n" \ | |
33 | " clr 0,%2\n" \ | |
34 | " jl 1f\n" \ | |
35 | " slr 0,%2\n" \ | |
36 | " ahi 1,1\n" \ | |
37 | "1: st 1,4+%1\n" \ | |
38 | " lr %0,0" \ | |
39 | : "=d" (__r), "=m" (__n) \ | |
40 | : "d" (base), "m" (__n) : "0", "1", "2", "cc" ); \ | |
41 | (n) = (__n); \ | |
42 | __r; \ | |
43 | }) | |
44 | ||
45 | #else /* __s390x__ */ | |
46 | #include <asm-generic/div64.h> | |
47 | #endif /* __s390x__ */ | |
48 | ||
49 | #endif |