4 return (value
* (sign
- 1)) - (value
* sign
)
7 return exts(value
, 64) & ((1<<64)-1)
9 def ROTL64(value
, bits
):
12 return ((value
<< bits
) |
(value
>> (64-bits
))) & mask
18 mask_a
= ((1<<x
) - 1) & ((1<<64) - 1)
19 mask_b
= ((1<<y
) - 1) & ((1<<64) - 1)
23 mask_a
= ((1<<x
) - 1) & ((1<<64) - 1)
24 mask_b
= (~
((1<<y
) - 1)) & ((1<<64) - 1)
25 return mask_a ^ mask_b
28 class HelperTests(unittest
.TestCase
):
30 # Verified using rlwinm, rldicl, rldicr in qemu
31 # rlwinm reg, 0, 5, 15
32 self
.assertHex(mask(5+32, 15+32), 0x7ff0000)
33 # rlwinm reg, 0, 15, 5
34 self
.assertHex(mask(15+32, 5+32), 0xfffffffffc01ffff)
35 self
.assertHex(mask(30+32, 2+32), 0xffffffffe0000003)
37 self
.assertHex(mask(37, 63), 0x7ffffff)
38 self
.assertHex(mask(10, 63), 0x3fffffffffffff)
39 self
.assertHex(mask(58, 63), 0x3f)
41 self
.assertHex(mask(0, 37), 0xfffffffffc000000)
42 self
.assertHex(mask(0, 10), 0xffe0000000000000)
43 self
.assertHex(mask(0, 58), 0xffffffffffffffe0)
44 def assertHex(self
, a
, b
):
45 msg
= "{:x} != {:x}".format(a
, b
)
46 return self
.assertEqual(a
, b
, msg
)
48 if __name__
== '__main__':