package com.wangzhen.jvm.instructions.comparisons.dcmp;

import com.wangzhen.jvm.runtimeData.OperandStack;
import com.wangzhen.jvm.runtimeData.ZFrame;

/**
 * Author: zhangxin
 * Time: 2017/5/5 0005.
 * Desc: 由于浮点数计算有可能产生NaN（Not a Number）值，所以比较两个浮点数时，除了大于、等于、小于之外， 还有第4种结果：无法比较
 * fcmpg和fcmpl指令的区别就在于对第4种结果的定义;
 * 当两个float变量中至少有一个是NaN时，用fcmpg指令比较的结果是1，而用fcmpl指令比较的结果是-1。
 */
public class DCMP {
    static void _dcmp(ZFrame frame,boolean flag){
        OperandStack operandStack=frame.getOperandStack();
        double var2 = operandStack.popDouble();
        double var1 = operandStack.popDouble();
        if (var1 > var2) {
            operandStack.pushInt(1);
        }else if(var1 == var2){
            operandStack.pushInt(0);
        }else if(var2<var1){
            operandStack.pushInt(-1);
        }else if(flag){
            operandStack.pushInt(1);
        }else {
            operandStack.pushInt(-1);
        }
    }
}
