On 10/12/2018 18:49, Richard Henderson wrote:

> On 12/7/18 2:56 AM, Mark Cave-Ayland wrote:
>> +    avr = tcg_temp_new_i64();                                               
>>   \
>>      EA = tcg_temp_new();                                                    
>>   \
>>      gen_addr_reg_index(ctx, EA);                                            
>>   \
>>      tcg_gen_andi_tl(EA, EA, ~0xf);                                          
>>   \
>>      /* We only need to swap high and low halves. gen_qemu_ld64_i64 does     
>>   \
>>         necessary 64-bit byteswap already. */                                
>>   \
>>      if (ctx->le_mode) {                                                     
>>   \
>> -        gen_qemu_ld64_i64(ctx, cpu_avrl[rD(ctx->opcode)], EA);              
>>   \
>> +        gen_qemu_ld64_i64(ctx, avr, EA);                                    
>>   \
>> +        set_avr64(rD(ctx->opcode), avr, false);                             
>>   \
>>          tcg_gen_addi_tl(EA, EA, 8);                                         
>>   \
>> -        gen_qemu_ld64_i64(ctx, cpu_avrh[rD(ctx->opcode)], EA);              
>>   \
>> +        gen_qemu_ld64_i64(ctx, avr, EA);                                    
>>   \
>> +        set_avr64(rD(ctx->opcode), avr, true);  
> 
> An accurate conversion, but I'm going to call this an existing bug:
> 
> The writeback to both avr{l,h} should be delayed until all exceptions have 
> been
> raised.  Thus you should perform the two gen_qemu_ld64_i64 into two 
> temporaries
> and only then write them both back via set_avr64.

Thanks for the pointer. I'll add this to the list of changes for the next 
revision of
the patchset.

> Otherwise,
> Reviewed-by: Richard Henderson <richard.hender...@linaro.org>


ATB,

Mark.

Reply via email to