void EmitAnd(CodeGen g, OptionalLabel labelTrue, OptionalLabel labelFalse, Operand first, Operand second) { var trueOptional = new OptionalLabel(g.IL); labelFalse.EnsureExists(); first.EmitBranch(g, trueOptional, labelFalse); if (trueOptional.IsLabelExist) // it can jump out of internal Or on first true but we still need to check second { g.IL.MarkLabel(trueOptional.Value); } second.EmitBranch(g, labelTrue, labelFalse); }
void EmitOr(CodeGen g, OptionalLabel labelTrue, OptionalLabel labelFalse, Operand first, Operand second) { var falseOptional = new OptionalLabel(g.IL); labelTrue.EnsureExists(); first.EmitBranch(g, labelTrue, falseOptional); if (falseOptional.IsLabelExist) // it can jump out of internal And on first false but we still may hope on second { g.IL.MarkLabel(falseOptional.Value); } second.EmitBranch(g, labelTrue, labelFalse); }
void EmitAnd(CodeGen g, OptionalLabel labelTrue,OptionalLabel labelFalse, Operand first, Operand second) { var trueOptional = new OptionalLabel(g.IL); labelFalse.EnsureExists(); first.EmitBranch(g, trueOptional, labelFalse); if (trueOptional.IsLabelExist) // it can jump out of internal Or on first true but we still need to check second g.IL.MarkLabel(trueOptional.Value); second.EmitBranch(g, labelTrue, labelFalse); }
void EmitOr(CodeGen g, OptionalLabel labelTrue, OptionalLabel labelFalse, Operand first, Operand second) { var falseOptional = new OptionalLabel(g.IL); labelTrue.EnsureExists(); first.EmitBranch(g, labelTrue, falseOptional); if (falseOptional.IsLabelExist) // it can jump out of internal And on first false but we still may hope on second g.IL.MarkLabel(falseOptional.Value); second.EmitBranch(g, labelTrue, labelFalse); }