On 3/12/19 11:44 AM, Sven Schnelle wrote: >> ... except what we're already doing that. So I don't see what >> can be changed to help. This doesn't seem to make a difference. > > I looked into this again, and with my limited TCG knowledge it looks like the > exit_tb is not happening because ssm is called in a branch delay slot: > > This is the TB it's calling when it looses the timer interrupt: > > IN: > 0x0000000000045758: bv r0(rp) > 0x000000000004575c: ssm 1,r0 > > OP: > ld_i32 tmp0,env,$0xffffffffffffffe0 > movi_i32 tmp1,$0x0 > brcond_i32 tmp0,tmp1,lt,$L0 > > ---- 0000000000045758 000000000004575c > mov_i32 tmp0,r2 > mov_i32 iaoq_b,tmp0 > > ---- 000000000004575c 00000000ffffffff > movi_i32 tmp1,$0x4 > add_i32 tmp0,iaoq_b,tmp1 > ld_i32 tmp1,env,$0x1c0 > movi_i32 tmp2,$0x1 > or_i32 tmp1,tmp1,tmp2 > call swap_system_mask,$0x1,$1,tmp1,env,tmp1 > > Everything above is ssm, and below this is the branch instruction, which skips > the exit_tb (i think): > > mov_i32 iaoq_f,iaoq_b > mov_i32 iaoq_b,tmp0 > mov_i64 iasq_f,iasq_b > call lookup_tb_ptr,$0x6,$1,tmp3,env > goto_ptr tmp3 > set_label $L0 > exit_tb $0x7f373c33cb83 > > I might also be totally wrong, let me know if that's the case. ;-)
You are absolutely correct. Thanks for the failing code sequence; now I know where to look. r~