summary refs log tree commit diff stats
path: root/include/qemu/int128.h
diff options
context:
space:
mode:
authorRichard Henderson <richard.henderson@linaro.org>2020-08-28 10:02:47 +0100
committerPeter Maydell <peter.maydell@linaro.org>2020-08-28 10:02:47 +0100
commit5be4dd043f5beb5e7587d1ef8dd4e3716ec05639 (patch)
treeab0850ee2f8d7d639f8259ce45349a56ae0c22ff /include/qemu/int128.h
parent512c65e62e9e1ae9863ae5a8493e9fad9dbf00e7 (diff)
downloadfocaccia-qemu-5be4dd043f5beb5e7587d1ef8dd4e3716ec05639.tar.gz
focaccia-qemu-5be4dd043f5beb5e7587d1ef8dd4e3716ec05639.zip
qemu/int128: Add int128_lshift
Add left-shift to match the existing right-shift.

Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
Reviewed-by: Peter Maydell <peter.maydell@linaro.org>
Message-id: 20200815013145.539409-2-richard.henderson@linaro.org
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
Diffstat (limited to 'include/qemu/int128.h')
-rw-r--r--include/qemu/int128.h16
1 files changed, 16 insertions, 0 deletions
diff --git a/include/qemu/int128.h b/include/qemu/int128.h
index 5c9890db8b..76ea405922 100644
--- a/include/qemu/int128.h
+++ b/include/qemu/int128.h
@@ -63,6 +63,11 @@ static inline Int128 int128_rshift(Int128 a, int n)
     return a >> n;
 }
 
+static inline Int128 int128_lshift(Int128 a, int n)
+{
+    return a << n;
+}
+
 static inline Int128 int128_add(Int128 a, Int128 b)
 {
     return a + b;
@@ -217,6 +222,17 @@ static inline Int128 int128_rshift(Int128 a, int n)
     }
 }
 
+static inline Int128 int128_lshift(Int128 a, int n)
+{
+    uint64_t l = a.lo << (n & 63);
+    if (n >= 64) {
+        return int128_make128(0, l);
+    } else if (n > 0) {
+        return int128_make128(l, (a.hi << n) | (a.lo >> (64 - n)));
+    }
+    return a;
+}
+
 static inline Int128 int128_add(Int128 a, Int128 b)
 {
     uint64_t lo = a.lo + b.lo;