On 07/30/2018 12:12 PM, Aleksandar Markovic wrote: > + switch (extract32(ctx->opcode, 12, 1)) { > + case 0: > + /* NM_SHRA_QB */ > + check_dspr2(ctx); > + gen_helper_shra_qb(cpu_gpr[ret], t0, v1_t); More unprotected use of cpu_gpr[0].
I think you need some sort of solution that prevents this completely, without having to think about it. E.g. global replace cpu_gpr[x] -> read_gpr(ctx, x) / dest_gpr(ctx, x), where the two functions allocate tcg temporaries on demand. I think the model used in target/alpha/translate.c is ideal. However, there are variations on this theme in target/arm/translate-a64.c, target/sparc/translate.c, and target/openrisc/translate.c. r~