On 8/15/2014 3:05 PM, Richard Henderson wrote: > On 08/11/2014 09:23 AM, Tom Musta wrote: >> Also fix the special case of MB=31 and ME=0 to copy the entire contents >> of the source GPR. > > Err, that's not what you did. > >> if (likely(sh == 0 && mb == 0 && me == 31)) { >> +#if defined(TARGET_PPC64) >> + tcg_gen_mov_i64(cpu_gpr[rA(ctx->opcode)], cpu_gpr[rS(ctx->opcode)]); >> +#else >> tcg_gen_ext32u_tl(cpu_gpr[rA(ctx->opcode)], >> cpu_gpr[rS(ctx->opcode)]); >> +#endif > > This is the reverse condition. Which, true enough, should not be implemented > with ext32u for PPC64. But a MOV isn't right either, it is > > deposit(ra, rs, 0, 32) > > Which does point out that we should probably implement anything MB <= ME and > SH > == 31 - ME with the deposit opcode. > > > r~ >
Richard: Good catch. I found a bug in my test generator ... rlwimi is unusual in that the "RA" register is both a source and a target. A fix is forthcoming. Thanks also for your other comments. Unlike this one, I believe they are optimizations. I will investigate and potentially publish some additional changes. Alex has already taken this series into his ppc-next, so the new patches will be relative to these.