ABT.BinaryComparisonOp.OperateFloat C# (CSharp) Method

OperateFloat() public final method

Before: %st(0) = left, %st(1) = right, stack unchanged.

After: with SetFloat, %eax = left op right, stack unchanged.

public final OperateFloat ( CGenState state ) : void
state CodeGeneration.CGenState
return void
        public override sealed void OperateFloat(CGenState state) {
            // In the beginning, %st(0) = Left, %st(1) = Right.
            // 
            // float stack:
            // +-----+
            // | rhs | <- %st(1)
            // +-----+
            // | lfs | <- %st(0)
            // +-----+
            // 

            // 1. Do comparison between %st(0) and %st(1).
            //    Pop one Value from FPU stack.
            // 
            // float stack:
            // +-----+
            // | rhs | <- %st(0)
            // +-----+
            // 
            state.FUCOMIP();

            // 2. Pop another Value from FPU stack.
            // 
            // float stack:
            // +-----+ empty
            // 
            state.FSTP(Reg.ST0);

            // 3. Set bit based on comparison result.
            SetFloat(state);
            state.MOVZBL(Reg.AL, Reg.EAX);
        }