[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