cranelift: Use ValueConversionKind in branches

This commit is contained in:
Afonso Bordado
2021-07-08 10:15:01 +01:00
committed by Andrew Brown
parent 037bd41c67
commit 7526cdc65e
2 changed files with 18 additions and 10 deletions

View File

@@ -142,16 +142,16 @@ where
// Interpret a Cranelift instruction.
Ok(match inst.opcode() {
Opcode::Jump | Opcode::Fallthrough => ControlFlow::ContinueAt(branch(), args()?),
Opcode::Brz => branch_when(match arg(0)?.ty() {
ty if ty.is_bool() => !arg(0)?.into_bool()?,
ty if ty.is_int() => arg(0)?.into_int()? == 0,
_ => return Err(StepError::ValueError(ValueError::InvalidValue(types::B1))),
})?,
Opcode::Brnz => branch_when(match arg(0)?.ty() {
ty if ty.is_bool() => arg(0)?.into_bool()?,
ty if ty.is_int() => arg(0)?.into_int()? != 0,
_ => return Err(StepError::ValueError(ValueError::InvalidValue(types::B1))),
})?,
Opcode::Brz => branch_when(
!arg(0)?
.convert(ValueConversionKind::ToBoolean)?
.into_bool()?,
)?,
Opcode::Brnz => branch_when(
arg(0)?
.convert(ValueConversionKind::ToBoolean)?
.into_bool()?,
)?,
Opcode::BrIcmp => branch_when(icmp(inst.cond_code().unwrap(), &arg(0)?, &arg(1)?)?)?,
Opcode::Brif => branch_when(state.has_iflag(inst.cond_code().unwrap()))?,
Opcode::Brff => branch_when(state.has_fflag(inst.fp_cond_code().unwrap()))?,