321c321
< if flag_code is not "" or cond_check is not "true":
---
> if flag_code != "" or cond_check != "true":
869,870c869,872
< int sign_bit = bits(val, imm8-1, imm8-1);
< uint64_t maskVal = mask(imm8);
---
> // Mask the bit position so that it wraps.
> int bitPos = op2 & (dataSize * 8 - 1);
> int sign_bit = bits(val, bitPos, bitPos);
> uint64_t maskVal = mask(bitPos+1);
873a876,883
> flag_code = '''
> if (!sign_bit)
> ccFlagBits = ccFlagBits &
> ~(ext & (CFBit | ECFBit | ZFBit | EZFBit));
> else
> ccFlagBits = ccFlagBits |
> (ext & (CFBit | ECFBit | ZFBit | EZFBit));
> '''
876c886
< code = 'DestReg = bits(psrc1, imm8-1, 0);'
---
> code = 'DestReg = bits(psrc1, op2, 0);'