summaryrefslogtreecommitdiffstats
path: root/include/qemu/int128.h
diff options
context:
space:
mode:
Diffstat (limited to 'include/qemu/int128.h')
-rw-r--r--include/qemu/int128.h19
1 files changed, 19 insertions, 0 deletions
diff --git a/include/qemu/int128.h b/include/qemu/int128.h
index b3864b6..bfe7678 100644
--- a/include/qemu/int128.h
+++ b/include/qemu/int128.h
@@ -34,6 +34,25 @@ static inline Int128 int128_2_64(void)
return (Int128) { 0, 1 };
}
+static inline Int128 int128_and(Int128 a, Int128 b)
+{
+ return (Int128) { a.lo & b.lo, a.hi & b.hi };
+}
+
+static inline Int128 int128_rshift(Int128 a, int n)
+{
+ int64_t h;
+ if (!n) {
+ return a;
+ }
+ h = a.hi >> (n & 63);
+ if (n >= 64) {
+ return (Int128) { h, h >> 63 };
+ } else {
+ return (Int128) { (a.lo >> n) | (a.hi << (64 - n)), h };
+ }
+}
+
static inline Int128 int128_add(Int128 a, Int128 b)
{
Int128 r = { a.lo + b.lo, a.hi + b.hi };
OpenPOWER on IntegriCloud