use crate::color;
use crate::emu::Emu;
use iced_x86::{Instruction, Register};

pub fn execute(emu: &mut Emu, ins: &Instruction, instruction_sz: usize, _rep_step: bool) -> bool {
    emu.show_instruction(color!("Green"), ins);

    log::info!("count: {}", ins.op_count());
    if ins.op_register(0) == Register::ST0 {
        log::info!("  param0 is st0");
    }
    if ins.op_kind(0) == iced_x86::OpKind::Memory {
        log::info!("  param0 is mem");
        let res = emu.fpu_mut().get_st(0) as u64;

        if !emu.set_operand_value(ins, 0, res) {
            return false;
        }
    }
    if ins.op_count() > 1 && ins.op_kind(1) == iced_x86::OpKind::Memory {
        unreachable!("Fstp: param1 is mem");
    }

    emu.fpu_mut().pop_f64();
    emu.sync_fpu_ip();
    true
}
