Hi,
I was writing one instruction and hit following issue:
[snip]/qemu/tcg/tcg.c:2039: tcg fatal error
qemu-ppc64le: [snip]/qemu/translate-all.c:175: tb_lock: Assertion
`!have_tb_lock' failed.
Segmentation fault (core dumped)
Debugging deeper found that its something to do with the variable type:
TCGv nb = tcg_temp_new();
tcg_gen_andi_tl(nb, cpu_gpr[rB(ctx->opcode)], 0xFF);
tcg_gen_brcondi_tl(TCG_COND_EQ, nb, 0, l1);
[ Do something here]
gen_set_label(l1);
tcg_temp_free(nb);
If I change the variable as "local temporary", the code works fine:
TCGv nb = tcg_temp_local_new();
tcg_gen_andi_tl(nb, cpu_gpr[rB(ctx->opcode)], 0xFF);
tcg_gen_brcondi_tl(TCG_COND_EQ, nb, 0, l1);
[ Do something here]
gen_set_label(l1);
tcg_temp_free(nb);
I see lot of code that is using temporaries for similar operations,
example target-ppc/translate.c:gen_check_align(). How is that working,
is this a bug there as well?
Regards,
Nikunj