On 12/22/2011 12:42 PM, Richard Sandiford wrote:
> Richard Henderson <r...@redhat.com> writes:
>> +      /* Use PUL/PLU to produce { L, H } op { H, L }.
>> +         By reversing the pair order, rather a pure interleave high,
>> +     we don't produce erroneous exceptional conditions.  */
> 
> "rather than".  We don't produce erroneous exceptional conditions
> that would result from H op H?  It probably should be obvious,
> but it took me a few seconds to work out...

Will fix.

>> +    case V4HImode:
>> +      /* Perform the first reduction with interleave,
>> +     and subsequent reductions with shifts.  */
>> +      emit_insn (gen_loongson_punpckhwd_hi (tmp, in, in));
>> +      emit_insn (gen (in, in, tmp));
>> +      emit_insn (gen_vec_shr_v4hi (tmp, in, force_reg (SImode, GEN_INT 
>> (16))));
>> +      break;
>> +
>> +    case V8QImode:
>> +      emit_insn (gen_loongson_punpckhwd_qi (tmp, in, in));
>> +      emit_insn (gen (in, in, tmp));
>> +      emit_insn (gen_vec_shr_v8qi (tmp, in, force_reg (SImode, GEN_INT 
>> (16))));
>> +      emit_insn (gen (in, in, tmp));
>> +      emit_insn (gen_vec_shr_v8qi (tmp, in, force_reg (SImode, GEN_INT 
>> (8))));
>> +      break;
> 
> Seems safer to have a second temporary rather than assign to the input here.

Ouch.  That's a real bug.


r~

Reply via email to