qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Qemu-devel] Trouble with adding TCG branch instructions


From: Peter Maydell
Subject: Re: [Qemu-devel] Trouble with adding TCG branch instructions
Date: Sat, 16 Mar 2013 09:44:48 +0000

On 15 March 2013 18:59, Soumyadeep Ghosh <address@hidden> wrote:
>         int label_rn = gen_new_label();
>         int label_done = gen_new_label();
>         tcg_gen_brcond_tl (TCG_cond_LT, tmp2, tmp, label_rn);      // If tmp2 
> <  tmp, branch to label_rn
>         store_reg (s, 20, tmp2);                                              
>                       // Store tmp2 in one of the newly added registers
>         tcg_gen_br (label_done);                                              
>                       // Branch to end
>         gen_set_label (label_rn);                                             
>                       // Set label_rn to the current code location
>         store_reg (s, 20, tmp);                                               
>                       // Store tmp in one of the newly added registers
>         gen_set_label (label_done);                                           
>               // Set label_done to the current code location
>         // Rest of the program

The TCG README says that a TCG temporary is live only in a basic
block, and that a basic block is terminated by a branch instruction.
You're trying to use a temporary across a branch instruction,
which isn't going to work (the temporary is dead at the end
of the block).

> When I try to emulate my ARM program using the compiled version of
> the modified emulator, I get an error (Uncaught signal 11). Debugging
> with gdb tells me that the following assertion on line 1885 of
> tcg/tcg.c (the function tcg_reg_alloc_op) raises the signal:
>
>         assert (ts->val_type == TEMP_VAL_REG);
>
> Does anyone have any insight into what is causing the problem?

I haven't checked, but this is probably the register allocator
complaining because it's trying to handle the operand to an
op and it's dead/doesn't exist (because of the problem above).

-- PMM



reply via email to

[Prev in Thread] Current Thread [Next in Thread]