summaryrefslogtreecommitdiffstats
path: root/include/qemu
diff options
context:
space:
mode:
authorRichard Henderson2020-08-28 11:02:47 +0200
committerPeter Maydell2020-08-28 11:02:47 +0200
commit5be4dd043f5beb5e7587d1ef8dd4e3716ec05639 (patch)
treeab0850ee2f8d7d639f8259ce45349a56ae0c22ff /include/qemu
parentarmsse: Define ARMSSEClass correctly (diff)
downloadqemu-5be4dd043f5beb5e7587d1ef8dd4e3716ec05639.tar.gz
qemu-5be4dd043f5beb5e7587d1ef8dd4e3716ec05639.tar.xz
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')
-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;