On 02/12/2016 03:39 AM, Richard Henderson wrote: > On 02/12/2016 03:01 AM, Bastian Koppelmann wrote: >> +void tricore_cpu_do_interrupt(CPUState *cs) >> +{ >> + TriCoreCPU *cpu = TRICORE_CPU(cs); >> + CPUTriCoreState *env = &cpu->env; >> + >> + /* The stack pointer in A[10] is set to the Interrupt Stack >> Pointer (ISP) >> + when the processor was not previously using the interrupt stack >> + (in case of PSW.IS = 0). The stack pointer bit is set for >> using the >> + interrupt stack: PSW.IS = 1. */ >> + if ((env->PSW & MASK_PSW_IS) == 0) { >> + env->gpr_a[10] = env->ISP; >> + } > > You appear to have forgotten to save pre-interrupt state here.
What do you mean by "pre-interrupt state"? The register context is saved by generate_trap() calls. Cheers, Bastian