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


Reply via email to