On 01/19/2014 07:53 AM, Alexander Graf wrote: > We have cache pools of temporaries that we can reuse later when they've > already been allocated before. > > These cache pools differenciate between the target TCG variable type they > contain. So we have one pool for I32 and one pool for I64 variables. > > On a 32bit system, we can't work with 64bit registers though. So instead we > spawn two I32 temporaries for every I64 temporary we create. All caching > works the same way as on a real 64-bit system though: We create a cache entry > in the 64bit array for the first i32 index. > > However, when we free such a temporary we free it to the pool of its type > (which is always i32 on 32bit systems) rather than its base_type (which is > i64 or i32 depending on the variable). This means we put a temporary that > is of base_type == i64 into the i32 preallocated temporary pool. > > Eventually, this results in failures like this on 32bit hosts: > > qemu-system-ppc64: tcg/tcg.c:515: tcg_temp_new_internal: Assertion > `ts->base_type == type' failed. > > This patch makes the free routine use the base_type instead for the free case, > so it's consistent with the temporary allocation. It fixes the above failure > for me. > > Signed-off-by: Alexander Graf <ag...@suse.de> > --- > tcg/tcg.c | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-)
Reviewed-by: Richard Henderson <r...@twiddle.net> r~