public override Reg CGenValue(CGenState state) { Reg ret = this.Expr.CGenValue(state); switch (ret) { case Reg.EAX: state.TESTL(Reg.EAX, Reg.EAX); state.SETE(Reg.AL); state.MOVZBL(Reg.AL, Reg.EAX); return Reg.EAX; case Reg.ST0: /// Compare Expr with 0.0 /// < see cref = "BinaryComparisonOp.OperateFloat(CGenState)" /> state.FLDZ(); state.FUCOMIP(); state.FSTP(Reg.ST0); state.SETE(Reg.AL); state.MOVZBL(Reg.AL, Reg.EAX); return Reg.EAX; default: throw new InvalidProgramException(); } }
public override void SetFloat(CGenState state) { state.SETE(Reg.AL); }
public override void SetDouble(CGenState state) { state.SETE(Reg.AL); }
public override void SetULong(CGenState state) { state.SETE(Reg.AL); }