Fix edge case in rlwnm when the mask is 32 bits wide. All tests now pass.
authorDavid Given <dg@cowlark.com>
Sun, 17 Jun 2018 09:00:01 +0000 (11:00 +0200)
committerDavid Given <dg@cowlark.com>
Sun, 17 Jun 2018 09:00:01 +0000 (11:00 +0200)
plat/linuxppc/emu/emu.c

index ae1fb92..90c9fd5 100644 (file)
@@ -278,7 +278,7 @@ static uint32_t rotate(uint32_t i, uint32_t shift)
 static uint32_t rlwnm(uint32_t source, uint8_t shift, uint8_t mb, uint8_t me)
 {
        uint8_t masksize = 1 + me - mb; /* me and mb are inclusive */
-       uint32_t mask = ((1<<masksize)-1) << (31 - me);
+       uint32_t mask = (((uint64_t)1<<masksize)-1) << (31 - me);
        return rotate(source, shift) & mask;
 }