1 /* SPDX-License-Identifier: GPL-2.0 */ 1 /* SPDX-License-Identifier: GPL-2.0 */ 2 /* !! 2 #include <linux/kernel.h> 3 * These are copied from glibc/stdlib/longlong !! 3 #include <linux/sched.h> 4 */ !! 4 #include <linux/types.h> >> 5 #include <asm/byteorder.h> >> 6 #include <asm/fpu.h> 5 7 6 #define add_ssaaaa(sh, sl, ah, al, bh, bl) \ 8 #define add_ssaaaa(sh, sl, ah, al, bh, bl) \ 7 do { !! 9 ((sl) = (al) + (bl), (sh) = (ah) + (bh) + ((sl) < (al))) 8 UWtype __x; << 9 __x = (al) + (bl); << 10 (sh) = (ah) + (bh) + (__x < (al)); << 11 (sl) = __x; << 12 } while (0) << 13 10 14 #define sub_ddmmss(sh, sl, ah, al, bh, bl) \ 11 #define sub_ddmmss(sh, sl, ah, al, bh, bl) \ 15 do { !! 12 ((sl) = (al) - (bl), (sh) = (ah) - (bh) - ((al) < (bl))) 16 UWtype __x; << 17 __x = (al) - (bl); << 18 (sh) = (ah) - (bh) - (__x > (al)); << 19 (sl) = __x; << 20 } while (0) << 21 13 22 #define umul_ppmm(w1, w0, u, v) \ !! 14 #define umul_ppmm(wh, wl, u, v) \ 23 __asm__ ("dmulu.l %2,%3\n\tsts macl,%1\n\ !! 15 __asm__ ("mulq %2,%3,%1; umulh %2,%3,%0" \ 24 : "=r" ((u32)(w1)), "=r" ((u32)(w0)) !! 16 : "=r" ((UDItype)(wh)), \ 25 : "r" ((u32)(u)), "r" ((u32)(v)) !! 17 "=&r" ((UDItype)(wl)) \ 26 : "macl", "mach") !! 18 : "r" ((UDItype)(u)), \ 27 !! 19 "r" ((UDItype)(v))) 28 #define __ll_B ((UWtype) 1 << (W_TYPE_SIZE / 2 !! 20 29 #define __ll_lowpart(t) ((UWtype) (t) & (__ll_ !! 21 #define udiv_qrnnd(q, r, n1, n0, d) \ 30 #define __ll_highpart(t) ((UWtype) (t) >> (W_T !! 22 do { unsigned long __r; \ 31 !! 23 (q) = __udiv_qrnnd (&__r, (n1), (n0), (d)); \ 32 #define udiv_qrnnd(q, r, n1, n0, d) \ !! 24 (r) = __r; \ 33 do { << 34 UWtype __d1, __d0, __q1, __q0; << 35 UWtype __r1, __r0, __m; << 36 __d1 = __ll_highpart (d); << 37 __d0 = __ll_lowpart (d); << 38 << 39 __r1 = (n1) % __d1; << 40 __q1 = (n1) / __d1; << 41 __m = (UWtype) __q1 * __d0; << 42 __r1 = __r1 * __ll_B | __ll_highpart (n0); << 43 if (__r1 < __m) << 44 { << 45 __q1--, __r1 += (d); << 46 if (__r1 >= (d)) /* i.e. we didn't get << 47 if (__r1 < __m) << 48 __q1--, __r1 += (d); << 49 } << 50 __r1 -= __m; << 51 << 52 __r0 = __r1 % __d1; << 53 __q0 = __r1 / __d1; << 54 __m = (UWtype) __q0 * __d0; << 55 __r0 = __r0 * __ll_B | __ll_lowpart (n0); << 56 if (__r0 < __m) << 57 { << 58 __q0--, __r0 += (d); << 59 if (__r0 >= (d)) << 60 if (__r0 < __m) << 61 __q0--, __r0 += (d); << 62 } << 63 __r0 -= __m; << 64 << 65 (q) = (UWtype) __q1 * __ll_B | __q0; << 66 (r) = __r0; << 67 } while (0) 25 } while (0) >> 26 extern unsigned long __udiv_qrnnd (unsigned long *, unsigned long, >> 27 unsigned long , unsigned long); >> 28 >> 29 #define UDIV_NEEDS_NORMALIZATION 1 >> 30 >> 31 #define abort() goto bad_insn 68 32 69 #define abort() return 0 !! 33 #ifndef __LITTLE_ENDIAN >> 34 #define __LITTLE_ENDIAN -1 >> 35 #endif >> 36 #define __BYTE_ORDER __LITTLE_ENDIAN 70 37
Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.