static void irq_handler(void *opaque, int irq, int level)

{

    struct xlx_pic *p = opaque;



    if (!(p->regs[R_MER] & 2)) {

        qemu_irq_lower(p->parent_irq);

        return;

    }



    /* edge triggered interrupt */

    if (p->c_kind_of_intr & (1 << irq) && p->regs[R_MER] & 2) {

        p->regs[R_ISR] |= (level << irq);

    }



    p->irq_pin_state &= ~(1 << irq);

    p->irq_pin_state |= level << irq;

    update_irq(p);

}

static void irq_handler(void *opaque, int irq, int level)

{

    struct xlx_pic *p = opaque;



    if (!(p->regs[R_MER] & 2)) {

        qemu_irq_lower(p->parent_irq);

        return;

    }



    

    if (p->c_kind_of_intr & (1 << irq) && p->regs[R_MER] & 2) {

        p->regs[R_ISR] |= (level << irq);

    }



    p->irq_pin_state &= ~(1 << irq);

    p->irq_pin_state |= level << irq;

    update_irq(p);

}

static void FUNC_0(void *VAR_0, int VAR_1, int VAR_2)

{

    struct xlx_pic *VAR_3 = VAR_0;



    if (!(VAR_3->regs[R_MER] & 2)) {

        qemu_irq_lower(VAR_3->parent_irq);

        return;

    }



    

    if (VAR_3->c_kind_of_intr & (1 << VAR_1) && VAR_3->regs[R_MER] & 2) {

        VAR_3->regs[R_ISR] |= (VAR_2 << VAR_1);

    }



    VAR_3->irq_pin_state &= ~(1 << VAR_1);

    VAR_3->irq_pin_state |= VAR_2 << VAR_1;

    update_irq(VAR_3);

}

static void FUNC_0(void *VAR_0, int VAR_1, int VAR_2)
{ struct xlx_pic *VAR_3 = VAR_0; if (!(VAR_3->regs[R_MER] & 2)) { qemu_irq_lower(VAR_3->parent_irq); return; } if (VAR_3->c_kind_of_intr & (1 << VAR_1) && VAR_3->regs[R_MER] & 2) { VAR_3->regs[R_ISR] |= (VAR_2 << VAR_1); } VAR_3->irq_pin_state &= ~(1 << VAR_1); VAR_3->irq_pin_state |= VAR_2 << VAR_1; update_irq(VAR_3); }