> What i mean here is that in gen-icount.h, the icount_decr.u32 field is
> exhausted and jumps out to the cpu-exec loop. This is where you would
> fall into tb_add_jump with the second argument being 2, and only if
> icount_extra was greater than zero. This is what I meant, and
> previously you showed me that the chaining is left intact by the check
> in tb_add_jump. Hope this is clearer. -Jim
I am not familiar with icount stuff, so some dunmp questions here. In
gen_icount_start (gen-icount.h), it loads icount_decr.u32 into count,
then subtracts 0xdeadbeef from count, finally stores count back to
icount_decr.u16.low.
1) Why subtract 0xdeadbeef from count? Does 0xdeadbeef have any meaning?
2) Why store count back to icount_decr.u16.low rather than icount_decr.u32?
In cpu_exec (cpu-exec.c),
// Does insns_left means how many guest instructions left in tb and needed
// to be executed?
insns_left = env->icount_decr.u32;
// what the if-branch means, in particular icount_extra? I guess it has
// something to do with Qemu timer, but not sure.
if (env->icount_extra && insns_left >= 0) {
// I cannot figure out what's going on here. Could you shed light on it?
} else {
}
Many thanks! :)
Regards,
chenwj
--
Wei-Ren Chen (陳韋任)
Computer Systems Lab, Institute of Information Science,
Academia Sinica, Taiwan (R.O.C.)
Tel:886-2-2788-3799 #1667
Homepage: http://people.cs.nctu.edu.tw/~chenwj