Lines Matching refs:tb

128 static int encode_search(TranslationBlock *tb, uint8_t *block)  in encode_search()  argument
136 for (i = 0, n = tb->icount; i < n; ++i) { in encode_search()
141 prev = (!(tb_cflags(tb) & CF_PCREL) && j == 0 ? tb->pc : 0); in encode_search()
164 static int cpu_unwind_data_from_tb(TranslationBlock *tb, uintptr_t host_pc, in cpu_unwind_data_from_tb() argument
167 uintptr_t iter_pc = (uintptr_t)tb->tc.ptr; in cpu_unwind_data_from_tb()
168 const uint8_t *p = tb->tc.ptr + tb->tc.size; in cpu_unwind_data_from_tb()
169 int i, j, num_insns = tb->icount; in cpu_unwind_data_from_tb()
178 if (!(tb_cflags(tb) & CF_PCREL)) { in cpu_unwind_data_from_tb()
179 data[0] = tb->pc; in cpu_unwind_data_from_tb()
202 void cpu_restore_state_from_tb(CPUState *cpu, TranslationBlock *tb, in cpu_restore_state_from_tb() argument
206 int insns_left = cpu_unwind_data_from_tb(tb, host_pc, data); in cpu_restore_state_from_tb()
212 if (tb_cflags(tb) & CF_USE_ICOUNT) { in cpu_restore_state_from_tb()
221 cpu->cc->tcg_ops->restore_state_to_opc(cpu, tb, data); in cpu_restore_state_from_tb()
237 TranslationBlock *tb = tcg_tb_lookup(host_pc); in cpu_restore_state() local
238 if (tb) { in cpu_restore_state()
239 cpu_restore_state_from_tb(cpu, tb, host_pc); in cpu_restore_state()
249 TranslationBlock *tb = tcg_tb_lookup(host_pc); in cpu_unwind_state_data() local
250 if (tb) { in cpu_unwind_state_data()
251 return cpu_unwind_data_from_tb(tb, host_pc, data) >= 0; in cpu_unwind_state_data()
267 static int setjmp_gen_code(CPUArchState *env, TranslationBlock *tb, in setjmp_gen_code() argument
279 gen_intermediate_code(env_cpu(env), tb, max_insns, pc, host_pc); in setjmp_gen_code()
280 assert(tb->size != 0); in setjmp_gen_code()
282 *max_insns = tb->icount; in setjmp_gen_code()
284 return tcg_gen_code(tcg_ctx, tb, pc); in setjmp_gen_code()
293 TranslationBlock *tb, *existing_tb; in tb_gen_code() local
318 tb = tcg_tb_alloc(tcg_ctx); in tb_gen_code()
319 if (unlikely(!tb)) { in tb_gen_code()
329 tb->tc.ptr = tcg_splitwx_to_rx(gen_code_buf); in tb_gen_code()
330 tb->pc = pc; in tb_gen_code()
331 tb->cs_base = cs_base; in tb_gen_code()
332 tb->flags = flags; in tb_gen_code()
333 tb->cflags = cflags; in tb_gen_code()
334 tb_set_page_addr0(tb, phys_pc); in tb_gen_code()
335 tb_set_page_addr1(tb, -1); in tb_gen_code()
340 tcg_ctx->gen_tb = tb; in tb_gen_code()
355 trace_translate_block(tb, pc, tb->tc.ptr); in tb_gen_code()
357 gen_code_size = setjmp_gen_code(env, tb, pc, host_pc, &max_insns, &ti); in tb_gen_code()
373 tb_unlock_pages(tb); in tb_gen_code()
399 phys_p2 = tb_page_addr1(tb); in tb_gen_code()
402 tb_set_page_addr1(tb, -1); in tb_gen_code()
423 search_size = encode_search(tb, (void *)gen_code_buf + gen_code_size); in tb_gen_code()
425 tb_unlock_pages(tb); in tb_gen_code()
428 tb->tc.size = gen_code_size; in tb_gen_code()
434 perf_report_code(pc, tb, tcg_splitwx_to_rx(gen_code_buf)); in tb_gen_code()
447 code_size = (const void *)rx_data_gen_ptr - tb->tc.ptr; in tb_gen_code()
461 disas(logfile, tb->tc.ptr, chunk_start); in tb_gen_code()
468 while (insn < tb->icount) { in tb_gen_code()
473 disas(logfile, tb->tc.ptr + chunk_start, in tb_gen_code()
482 disas(logfile, tb->tc.ptr + chunk_start, in tb_gen_code()
514 qemu_spin_init(&tb->jmp_lock); in tb_gen_code()
515 tb->jmp_list_head = (uintptr_t)NULL; in tb_gen_code()
516 tb->jmp_list_next[0] = (uintptr_t)NULL; in tb_gen_code()
517 tb->jmp_list_next[1] = (uintptr_t)NULL; in tb_gen_code()
518 tb->jmp_dest[0] = (uintptr_t)NULL; in tb_gen_code()
519 tb->jmp_dest[1] = (uintptr_t)NULL; in tb_gen_code()
522 if (tb->jmp_reset_offset[0] != TB_JMP_OFFSET_INVALID) { in tb_gen_code()
523 tb_reset_jump(tb, 0); in tb_gen_code()
525 if (tb->jmp_reset_offset[1] != TB_JMP_OFFSET_INVALID) { in tb_gen_code()
526 tb_reset_jump(tb, 1); in tb_gen_code()
534 if (tb_page_addr0(tb) == -1) { in tb_gen_code()
536 return tb; in tb_gen_code()
544 tcg_tb_insert(tb); in tb_gen_code()
550 existing_tb = tb_link_page(tb); in tb_gen_code()
554 if (unlikely(existing_tb != tb)) { in tb_gen_code()
557 orig_aligned -= ROUND_UP(sizeof(*tb), qemu_icache_linesize); in tb_gen_code()
559 tcg_tb_remove(tb); in tb_gen_code()
562 return tb; in tb_gen_code()
568 TranslationBlock *tb; in tb_check_watchpoint() local
572 tb = tcg_tb_lookup(retaddr); in tb_check_watchpoint()
573 if (tb) { in tb_check_watchpoint()
575 cpu_restore_state_from_tb(cpu, tb, retaddr); in tb_check_watchpoint()
576 tb_phys_invalidate(tb, -1); in tb_check_watchpoint()
603 TranslationBlock *tb; in cpu_io_recompile() local
607 tb = tcg_tb_lookup(retaddr); in cpu_io_recompile()
608 if (!tb) { in cpu_io_recompile()
612 cpu_restore_state_from_tb(cpu, tb, retaddr); in cpu_io_recompile()
622 cc->tcg_ops->io_recompile_replay_branch(cpu, tb)) { in cpu_io_recompile()
636 vaddr pc = log_pc(cpu, tb); in cpu_io_recompile()
671 qatomic_set(&jc->array[i].tb, NULL); in tcg_flush_jmp_cache()