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