On Tue, Jan 17, 2012 at 7:06 AM, 陳韋任 <che...@iis.sinica.edu.tw> wrote: >> a jump with the least significant bits = 2. This falls through to tb >> add jump, which then updates the jmp_first field of the current tb. > > I don't know if tb_add_jump's second parameter will be two or not, but > look at TranslationBlock (exec-all.h), > > struct TranslationBlock { > > struct TranslationBlock *jmp_next[2]; > > } > > and tb_add_jump (exec-all.h). > > static inline void tb_add_jump(TranslationBlock *tb, int n, > TranslationBlock *tb_next) > { > /* NOTE: this test is only needed for thread safety */ > if (!tb->jmp_next[n]) { <--- what if n is 2? > } > } > > 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
if (!tb->jmp_next[n]) { <--- what if n is 2? This is my question, if n is two, it would actually be checking the jmp_first field immediatedly following the jmp_next array in the tb structure. This function only updates the jmp_first field and doesn't touch jmp_next when n is 2. Does anybody know why this is? It seems like you would like to leave the tb chaining as it was, because you are going to execute the same translation block again, it just jumped out to replenish the icount_decr counter. -Jim