diff options
Diffstat (limited to 'sim/common/cgen-par.c')
-rw-r--r-- | sim/common/cgen-par.c | 20 |
1 files changed, 20 insertions, 0 deletions
diff --git a/sim/common/cgen-par.c b/sim/common/cgen-par.c index 51147ad..1919aea 100644 --- a/sim/common/cgen-par.c +++ b/sim/common/cgen-par.c @@ -68,6 +68,21 @@ void sim_queue_pc_write (SIM_CPU *cpu, USI value) element->kinds.pc_write.value = value; } +void sim_queue_fn_hi_write ( + SIM_CPU *cpu, + void (*write_function)(SIM_CPU *cpu, UINT, UHI), + UINT regno, + UHI value +) +{ + CGEN_WRITE_QUEUE *q = CPU_WRITE_QUEUE (cpu); + CGEN_WRITE_QUEUE_ELEMENT *element = CGEN_WRITE_QUEUE_NEXT (q); + element->kind = CGEN_FN_HI_WRITE; + element->kinds.fn_hi_write.function = write_function; + element->kinds.fn_hi_write.regno = regno; + element->kinds.fn_hi_write.value = value; +} + void sim_queue_fn_si_write ( SIM_CPU *cpu, void (*write_function)(SIM_CPU *cpu, UINT, USI), @@ -162,6 +177,11 @@ cgen_write_queue_element_execute (SIM_CPU *cpu, CGEN_WRITE_QUEUE_ELEMENT *item) case CGEN_PC_WRITE: CPU_PC_SET (cpu, item->kinds.pc_write.value); break; + case CGEN_FN_HI_WRITE: + item->kinds.fn_hi_write.function (cpu, + item->kinds.fn_hi_write.regno, + item->kinds.fn_hi_write.value); + break; case CGEN_FN_SI_WRITE: item->kinds.fn_si_write.function (cpu, item->kinds.fn_si_write.regno, |