qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Qemu-devel] [PATCH 1/2 for-2.6] target-sparc: fix Nucleus quad LDD


From: Artyom Tarasenko
Subject: Re: [Qemu-devel] [PATCH 1/2 for-2.6] target-sparc: fix Nucleus quad LDD 128 bit access for windowed registers
Date: Thu, 14 Apr 2016 16:04:35 +0200

On Thu, Apr 14, 2016 at 3:42 PM, Mark Cave-Ayland
<address@hidden> wrote:
> On 14/04/16 10:29, Artyom Tarasenko wrote:
>
>> Fix register offset calculation when regwptr is used.
>>
>> Signed-off-by: Artyom Tarasenko <address@hidden>
>> ---
>>  target-sparc/ldst_helper.c | 12 ++++++------
>>  1 file changed, 6 insertions(+), 6 deletions(-)
>>
>> diff --git a/target-sparc/ldst_helper.c b/target-sparc/ldst_helper.c
>> index 2b0221c..a383074 100644
>> --- a/target-sparc/ldst_helper.c
>> +++ b/target-sparc/ldst_helper.c
>> @@ -2059,11 +2059,11 @@ void helper_ldda_asi(CPUSPARCState *env, 
>> target_ulong addr, int asi, int rd)
>>                  bswap64s(&env->gregs[rd + 1]);
>>              }
>>          } else {
>> -            env->regwptr[rd] = cpu_ldq_nucleus(env, addr);
>> -            env->regwptr[rd + 1] = cpu_ldq_nucleus(env, addr + 8);
>> +            env->regwptr[rd - 8] = cpu_ldq_nucleus(env, addr);
>> +            env->regwptr[rd + 1 - 8] = cpu_ldq_nucleus(env, addr + 8);
>>              if (asi == 0x2c) {
>> -                bswap64s(&env->regwptr[rd]);
>> -                bswap64s(&env->regwptr[rd + 1]);
>> +                bswap64s(&env->regwptr[rd - 8]);
>> +                bswap64s(&env->regwptr[rd + 1 - 8]);
>>              }
>>          }
>>          break;
>> @@ -2076,8 +2076,8 @@ void helper_ldda_asi(CPUSPARCState *env, target_ulong 
>> addr, int asi, int rd)
>>              env->gregs[rd] = helper_ld_asi(env, addr, asi, 4, 0);
>>              env->gregs[rd + 1] = helper_ld_asi(env, addr + 4, asi, 4, 0);
>>          } else {
>> -            env->regwptr[rd] = helper_ld_asi(env, addr, asi, 4, 0);
>> -            env->regwptr[rd + 1] = helper_ld_asi(env, addr + 4, asi, 4, 0);
>> +            env->regwptr[rd - 8] = helper_ld_asi(env, addr, asi, 4, 0);
>> +            env->regwptr[rd + 1 - 8] = helper_ld_asi(env, addr + 4, asi, 4, 
>> 0);
>>          }
>>          break;
>>      }
>>
>
> So it seems that without this patch any ldda on a non-global register is
> placing the result into the wrong register which is fairly nasty.
>
> The patch does apply, but only with fuzz, and checkpatch.pl reports
> several warnings with spacing/line endings. If you can rebase to master
> and resend then you can add my Reviewed-by and I'm okay with this for
> 2.6 - register corruption is not good.

Can you please show  the output of your checkpatch.pl report? I get:

 $  scripts/checkpatch.pl
0001-target-sparc-fix-Nucleus-quad-LDD-128-bit-access-for.patch
total: 0 errors, 0 warnings, 25 lines checked
0001-target-sparc-fix-Nucleus-quad-LDD-128-bit-access-for.patch has no
obvious style problems and is ready for Submission.

-- 
Regards,
Artyom Tarasenko

SPARC and PPC PReP under qemu blog: http://tyom.blogspot.com/search/label/qemu



reply via email to

[Prev in Thread] Current Thread [Next in Thread]