]>
git.proxmox.com Git - mirror_qemu.git/blob - include/qemu/int128.h
4 typedef struct Int128 Int128
;
11 static inline Int128
int128_make64(uint64_t a
)
13 return (Int128
) { a
, 0 };
16 static inline uint64_t int128_get64(Int128 a
)
22 static inline Int128
int128_zero(void)
24 return int128_make64(0);
27 static inline Int128
int128_one(void)
29 return int128_make64(1);
32 static inline Int128
int128_2_64(void)
34 return (Int128
) { 0, 1 };
37 static inline Int128
int128_and(Int128 a
, Int128 b
)
39 return (Int128
) { a
.lo
& b
.lo
, a
.hi
& b
.hi
};
42 static inline Int128
int128_rshift(Int128 a
, int n
)
50 return (Int128
) { h
, h
>> 63 };
52 return (Int128
) { (a
.lo
>> n
) | (a
.hi
<< (64 - n
)), h
};
56 static inline Int128
int128_add(Int128 a
, Int128 b
)
58 Int128 r
= { a
.lo
+ b
.lo
, a
.hi
+ b
.hi
};
59 r
.hi
+= (r
.lo
< a
.lo
) || (r
.lo
< b
.lo
);
63 static inline Int128
int128_neg(Int128 a
)
67 return int128_add(a
, int128_one());
70 static inline Int128
int128_sub(Int128 a
, Int128 b
)
72 return int128_add(a
, int128_neg(b
));
75 static inline bool int128_nonneg(Int128 a
)
80 static inline bool int128_eq(Int128 a
, Int128 b
)
82 return a
.lo
== b
.lo
&& a
.hi
== b
.hi
;
85 static inline bool int128_ne(Int128 a
, Int128 b
)
87 return !int128_eq(a
, b
);
90 static inline bool int128_ge(Int128 a
, Int128 b
)
92 return int128_nonneg(int128_sub(a
, b
));
95 static inline bool int128_lt(Int128 a
, Int128 b
)
97 return !int128_ge(a
, b
);
100 static inline bool int128_le(Int128 a
, Int128 b
)
102 return int128_ge(b
, a
);
105 static inline bool int128_gt(Int128 a
, Int128 b
)
107 return !int128_le(a
, b
);
110 static inline bool int128_nz(Int128 a
)
115 static inline Int128
int128_min(Int128 a
, Int128 b
)
117 return int128_le(a
, b
) ? a
: b
;
120 static inline Int128
int128_max(Int128 a
, Int128 b
)
122 return int128_ge(a
, b
) ? a
: b
;
125 static inline void int128_addto(Int128
*a
, Int128 b
)
127 *a
= int128_add(*a
, b
);
130 static inline void int128_subfrom(Int128
*a
, Int128 b
)
132 *a
= int128_sub(*a
, b
);