Lines Matching refs:db

19 static void set_can_do_io(DisasContextBase *db, bool val)  in set_can_do_io()  argument
21 if (db->saved_can_do_io != val) { in set_can_do_io()
22 db->saved_can_do_io = val; in set_can_do_io()
31 bool translator_io_start(DisasContextBase *db) in translator_io_start() argument
33 set_can_do_io(db, true); in translator_io_start()
39 if (db->is_jmp == DISAS_NEXT) { in translator_io_start()
40 db->is_jmp = DISAS_TOO_MANY; in translator_io_start()
45 static TCGOp *gen_tb_start(DisasContextBase *db, uint32_t cflags) in gen_tb_start() argument
92 set_can_do_io(db, db->max_insns == 1); in gen_tb_start()
115 bool translator_use_goto_tb(DisasContextBase *db, vaddr dest) in translator_use_goto_tb() argument
118 if (tb_cflags(db->tb) & CF_NO_GOTO_TB) { in translator_use_goto_tb()
123 return ((db->pc_first ^ dest) & TARGET_PAGE_MASK) == 0; in translator_use_goto_tb()
128 DisasContextBase *db) in translator_loop() argument
135 db->tb = tb; in translator_loop()
136 db->pc_first = pc; in translator_loop()
137 db->pc_next = pc; in translator_loop()
138 db->is_jmp = DISAS_NEXT; in translator_loop()
139 db->num_insns = 0; in translator_loop()
140 db->max_insns = *max_insns; in translator_loop()
141 db->singlestep_enabled = cflags & CF_SINGLE_STEP; in translator_loop()
142 db->saved_can_do_io = -1; in translator_loop()
143 db->host_addr[0] = host_pc; in translator_loop()
144 db->host_addr[1] = NULL; in translator_loop()
146 ops->init_disas_context(db, cpu); in translator_loop()
147 tcg_debug_assert(db->is_jmp == DISAS_NEXT); /* no early exit */ in translator_loop()
150 icount_start_insn = gen_tb_start(db, cflags); in translator_loop()
151 ops->tb_start(db, cpu); in translator_loop()
152 tcg_debug_assert(db->is_jmp == DISAS_NEXT); /* no early exit */ in translator_loop()
154 plugin_enabled = plugin_gen_tb_start(cpu, db, cflags & CF_MEMI_ONLY); in translator_loop()
155 db->plugin_enabled = plugin_enabled; in translator_loop()
158 *max_insns = ++db->num_insns; in translator_loop()
159 ops->insn_start(db, cpu); in translator_loop()
160 tcg_debug_assert(db->is_jmp == DISAS_NEXT); /* no early exit */ in translator_loop()
163 plugin_gen_insn_start(cpu, db); in translator_loop()
172 if (db->num_insns == db->max_insns) { in translator_loop()
174 set_can_do_io(db, true); in translator_loop()
176 ops->translate_insn(db, cpu); in translator_loop()
192 if (db->is_jmp != DISAS_NEXT) { in translator_loop()
198 if (tcg_op_buf_full() || db->num_insns >= db->max_insns) { in translator_loop()
199 db->is_jmp = DISAS_TOO_MANY; in translator_loop()
205 ops->tb_stop(db, cpu); in translator_loop()
206 gen_tb_end(tb, cflags, icount_start_insn, db->num_insns); in translator_loop()
209 plugin_gen_tb_end(cpu, db->num_insns); in translator_loop()
213 tb->size = db->pc_next - db->pc_first; in translator_loop()
214 tb->icount = db->num_insns; in translator_loop()
217 && qemu_log_in_addr_range(db->pc_first)) { in translator_loop()
221 ops->disas_log(db, cpu, logfile); in translator_loop()
228 static void *translator_access(CPUArchState *env, DisasContextBase *db, in translator_access() argument
235 tb = db->tb; in translator_access()
243 if (likely(is_same_page(db, end))) { in translator_access()
244 host = db->host_addr[0]; in translator_access()
245 base = db->pc_first; in translator_access()
247 host = db->host_addr[1]; in translator_access()
248 base = TARGET_PAGE_ALIGN(db->pc_first); in translator_access()
252 new_page1 = get_page_addr_code_hostp(env, base, &db->host_addr[1]); in translator_access()
280 host = db->host_addr[1]; in translator_access()
284 if (is_same_page(db, pc)) { in translator_access()
314 uint8_t translator_ldub(CPUArchState *env, DisasContextBase *db, abi_ptr pc) in translator_ldub() argument
317 void *p = translator_access(env, db, pc, sizeof(ret)); in translator_ldub()
328 uint16_t translator_lduw(CPUArchState *env, DisasContextBase *db, abi_ptr pc) in translator_lduw() argument
331 void *p = translator_access(env, db, pc, sizeof(ret)); in translator_lduw()
343 uint32_t translator_ldl(CPUArchState *env, DisasContextBase *db, abi_ptr pc) in translator_ldl() argument
346 void *p = translator_access(env, db, pc, sizeof(ret)); in translator_ldl()
358 uint64_t translator_ldq(CPUArchState *env, DisasContextBase *db, abi_ptr pc) in translator_ldq() argument
361 void *p = translator_access(env, db, pc, sizeof(ret)); in translator_ldq()