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.