static int
opINT3(uint32_t fetchdat)
{
    int cycles_old = cycles;
    UN_USED(cycles_old);
#ifdef USE_GDBSTUB
    if (gdbstub_int3())
        return 1;
#endif
    if ((cr0 & 1) && (cpu_state.eflags & VM_FLAG) && (IOPL != 3)) {
        x86gpf(NULL, 0);
        return 1;
    }
    x86_int_sw(3);
    CLOCK_CYCLES((is486) ? 44 : 59);
    PREFETCH_RUN(cycles_old - cycles, 1, -1, 0, 0, 0, 0, 0);
    return 1;
}

static int
opINT1(uint32_t fetchdat)
{
    int cycles_old = cycles;
    UN_USED(cycles_old);
    if ((cr0 & 1) && (cpu_state.eflags & VM_FLAG) && (IOPL != 3)) {
        x86gpf(NULL, 0);
        return 1;
    }
    x86_int_sw(1);
    CLOCK_CYCLES((is486) ? 44 : 59);
    PREFETCH_RUN(cycles_old - cycles, 1, -1, 0, 0, 0, 0, 0);
    return 1;
}

static int
opINT(uint32_t fetchdat)
{
    int cycles_old = cycles;
    UN_USED(cycles_old);
    uint8_t temp = getbytef();

    if ((cr0 & 1) && (cpu_state.eflags & VM_FLAG) && (IOPL != 3)) {
        if (cr4 & CR4_VME) {
            uint16_t t;
            uint8_t  d;

            cpl_override = 1;
            t            = readmemw(tr.base, 0x66) - 32;
            cpl_override = 0;
            if (cpu_state.abrt)
                return 1;

            t += (temp >> 3);
            if (t <= tr.limit) {
                cpl_override = 1;
                d            = readmemb(tr.base, t); // + (temp >> 3));
                cpl_override = 0;
                if (cpu_state.abrt)
                    return 1;

                if (!(d & (1 << (temp & 7)))) {
                    x86_int_sw_rm(temp);
                    PREFETCH_RUN(cycles_old - cycles, 2, -1, 0, 0, 0, 0, 0);
                    return 1;
                }
            }
        }
        x86gpf_expected(NULL, 0);
        return 1;
    }

    x86_int_sw(temp);
    PREFETCH_RUN(cycles_old - cycles, 2, -1, 0, 0, 0, 0, 0);
    return 1;
}

static int
opINTO(uint32_t fetchdat)
{
    int cycles_old = cycles;
    UN_USED(cycles_old);

    if ((cr0 & 1) && (cpu_state.eflags & VM_FLAG) && (IOPL != 3)) {
        x86gpf(NULL, 0);
        return 1;
    }
    if (VF_SET()) {
        cpu_state.oldpc = cpu_state.pc;
        x86_int_sw(4);
        PREFETCH_RUN(cycles_old - cycles, 1, -1, 0, 0, 0, 0, 0);
        return 1;
    }
    CLOCK_CYCLES(3);
    PREFETCH_RUN(3, 1, -1, 0, 0, 0, 0, 0);
    return 0;
}
