/* Add a software interrupt to the interrupt queue. */ struct frv_interrupt_queue_element * frv_queue_software_interrupt (SIM_CPU *current_cpu, SI offset) { struct frv_interrupt_queue_element *new_element = frv_queue_interrupt (current_cpu, FRV_TRAP_INSTRUCTION); struct frv_interrupt *interrupt = & frv_interrupt_table[new_element->kind]; interrupt->handler_offset = offset; return new_element; }
/* Add an external interrupt to the interrupt queue. */ struct frv_interrupt_queue_element * frv_queue_external_interrupt ( SIM_CPU *current_cpu, enum frv_interrupt_kind kind ) { if (! GET_H_PSR_ET () || (kind != FRV_INTERRUPT_LEVEL_15 && kind < GET_H_PSR_PIL ())) return NULL; /* Leave it for later. */ return frv_queue_interrupt (current_cpu, kind); }
/* Add a break interrupt to the interrupt queue. */ struct frv_interrupt_queue_element * frv_queue_break_interrupt (SIM_CPU *current_cpu) { return frv_queue_interrupt (current_cpu, FRV_BREAK_EXCEPTION); }