New to_signed function
Change-Id: I62fdf4c7845f8dd3e9b8ca831a8d699aa8265679
Signed-off-by: Michael Walsh <micwalsh@us.ibm.com>
diff --git a/lib/gen_misc.py b/lib/gen_misc.py
index 36e2607..281c406 100755
--- a/lib/gen_misc.py
+++ b/lib/gen_misc.py
@@ -356,3 +356,49 @@
raise
return True
+
+
+def to_signed(number,
+ bit_width=gp.bit_length(long(sys.maxsize)) + 1):
+
+ r"""
+ Convert number to a signed number and return the result.
+
+ Examples:
+
+ With the following code:
+
+ var1 = 0xfffffffffffffff1
+ print_var(var1)
+ print_var(var1, 1)
+ var1 = to_signed(var1)
+ print_var(var1)
+ print_var(var1, 1)
+
+ The following is written to stdout:
+ var1: 18446744073709551601
+ var1: 0x00000000fffffffffffffff1
+ var1: -15
+ var1: 0xfffffffffffffff1
+
+ The same code but with var1 set to 0x000000000000007f produces the
+ following:
+ var1: 127
+ var1: 0x000000000000007f
+ var1: 127
+ var1: 0x000000000000007f
+
+ Description of argument(s):
+ number The number to be converted.
+ bit_width The number of bits that defines a complete
+ hex value. Typically, this would be a
+ multiple of 32.
+ """
+
+ if number < 0:
+ return number
+ neg_bit_mask = 2**(bit_width - 1)
+ if number & neg_bit_mask:
+ return ((2**bit_width) - number) * -1
+ else:
+ return number