diff options
author | Richard Henderson | 2020-08-28 11:02:47 +0200 |
---|---|---|
committer | Peter Maydell | 2020-08-28 11:02:47 +0200 |
commit | 5be4dd043f5beb5e7587d1ef8dd4e3716ec05639 (patch) | |
tree | ab0850ee2f8d7d639f8259ce45349a56ae0c22ff /include/qemu | |
parent | armsse: Define ARMSSEClass correctly (diff) | |
download | qemu-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.h | 16 |
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; |