assert len(outputs) >= 1
if len(inputs) >= 2:
output = outputs[0]
+
+ # OV (64-bit)
input_sgn = [exts(x.value, x.bits) < 0 for x in inputs]
output_sgn = exts(output.value, output.bits) < 0
ov = 1 if input_sgn[0] == input_sgn[1] and \
output_sgn != input_sgn[0] else 0
+ # OV (32-bit)
+ input32_sgn = [exts(x.value, 32) < 0 for x in inputs]
+ output32_sgn = exts(output.value, 32) < 0
+ ov32 = 1 if input32_sgn[0] == input32_sgn[1] and \
+ output32_sgn != input32_sgn[0] else 0
+
self.spr['XER'][XER_bits['OV']] = ov
+ self.spr['XER'][XER_bits['OV32']] = ov32
so = self.spr['XER'][XER_bits['SO']]
so = so | ov
self.spr['XER'][XER_bits['SO']] = so