qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Qemu-devel] [PATCH 2/7] target-ppc: Implement unsigned quadword lef


From: Richard Henderson
Subject: Re: [Qemu-devel] [PATCH 2/7] target-ppc: Implement unsigned quadword left/right shift and unit tests
Date: Sat, 3 Dec 2016 17:37:27 -0800
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:45.0) Gecko/20100101 Thunderbird/45.4.0

On 12/02/2016 09:00 PM, Jose Ricardo Ziviani wrote:
+++ b/include/qemu/host-utils.h
@@ -29,6 +29,33 @@
 #include "qemu/bswap.h"

 #ifdef CONFIG_INT128
+static inline void urshift(uint64_t *plow, uint64_t *phigh, uint32_t shift)
+{
+    __uint128_t val = ((__uint128_t)*phigh << 64) | *plow;
+    val >>= (shift & 127);
+    *phigh = val >> 64;
+    *plow = val & 0xffffffffffffffff;
+}
+
+static inline void ulshift(uint64_t *plow, uint64_t *phigh,
+                           uint32_t shift, bool *overflow)
+{
+    __uint128_t val = ((__uint128_t)*phigh << 64) | *plow;
+
+    if (shift == 0) {
+        return;
+    }
+
+    if (shift > 127 || (val >> (128 - (shift & 127))) != 0) {
+        *overflow = true;
+    }
+
+    val <<= (shift & 127);
+
+    *phigh = val >> 64;
+    *plow = val & 0xffffffffffffffff;
+}
+

This belongs in qemu/int128.h, not here. And certainly not predicated on CONFIG_INT128.


r~



reply via email to

[Prev in Thread] Current Thread [Next in Thread]