host-utils: introduce uabs64()
authorLuis Pires <luis.pires@eldorado.org.br>
Fri, 10 Sep 2021 11:26:05 +0000 (08:26 -0300)
committerDavid Gibson <david@gibson.dropbear.id.au>
Wed, 29 Sep 2021 09:37:38 +0000 (19:37 +1000)
Introduce uabs64(), a function that returns the absolute value of
a 64-bit int as an unsigned value. This avoids the undefined behavior
for common abs implementations, where abs of the most negative value is
undefined.

Signed-off-by: Luis Pires <luis.pires@eldorado.org.br>
Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
Reviewed-by: Eduardo Habkost <ehabkost@redhat.com>
Message-Id: <20210910112624.72748-4-luis.pires@eldorado.org.br>
Signed-off-by: David Gibson <david@gibson.dropbear.id.au>
include/qemu/host-utils.h

index 753b9fb89fb07c125e55dafb6dffe028c995cbe3..ca9f3f021bb00223623835426290c450eafe9352 100644 (file)
@@ -357,6 +357,14 @@ static inline uint64_t revbit64(uint64_t x)
 #endif
 }
 
+/**
+ * Return the absolute value of a 64-bit integer as an unsigned 64-bit value
+ */
+static inline uint64_t uabs64(int64_t v)
+{
+    return v < 0 ? -v : v;
+}
+
 /**
  * sadd32_overflow - addition with overflow indication
  * @x, @y: addends