qemu-ppc
[Top][All Lists]
Advanced

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

Re: [Qemu-ppc] [Qemu-devel] [PATCH v2 02/15] target/ppc: remove getVSR()


From: Mark Cave-Ayland
Subject: Re: [Qemu-ppc] [Qemu-devel] [PATCH v2 02/15] target/ppc: remove getVSR()/putVSR() from mem_helper.c
Date: Sun, 16 Jun 2019 08:40:48 +0100
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101 Thunderbird/60.7.1

On 12/06/2019 02:04, David Gibson wrote:

> On Sun, Jun 02, 2019 at 12:08:50PM +0100, Mark Cave-Ayland wrote:
>> Since commit 8a14d31b00 "target/ppc: switch fpr/vsrl registers so all VSX
>> registers are in host endian order" functions getVSR() and putVSR() which 
>> used
>> to convert the VSR registers into host endian order are no longer required.
>>
>> Signed-off-by: Mark Cave-Ayland <address@hidden>
>> ---
>>  target/ppc/mem_helper.c | 25 ++++++++++++++-----------
>>  1 file changed, 14 insertions(+), 11 deletions(-)
>>
>> diff --git a/target/ppc/mem_helper.c b/target/ppc/mem_helper.c
>> index 5b0f9ee50d..17a3c931a9 100644
>> --- a/target/ppc/mem_helper.c
>> +++ b/target/ppc/mem_helper.c
>> @@ -417,26 +417,27 @@ STVE(stvewx, cpu_stl_data_ra, bswap32, u32)
>>  void helper_##name(CPUPPCState *env, target_ulong addr,                 \
>>                     target_ulong xt_num, target_ulong rb)                \
>>  {                                                                       \
>> -    int i;                                                              \
>> -    ppc_vsr_t xt;                                                       \
>> +    ppc_vsr_t *xt = &env->vsr[xt_num];                                  \
>> +    ppc_vsr_t t;                                                        \
>>      uint64_t nb = GET_NB(rb);                                           \
>> +    int i;                                                              \
>>                                                                          \
>> -    xt.s128 = int128_zero();                                            \
>> +    t.s128 = int128_zero();                                             \
>>      if (nb) {                                                           \
>>          nb = (nb >= 16) ? 16 : nb;                                      \
>>          if (msr_le && !lj) {                                            \
>>              for (i = 16; i > 16 - nb; i--) {                            \
>> -                xt.VsrB(i - 1) = cpu_ldub_data_ra(env, addr, GETPC());  \
>> +                t.VsrB(i - 1) = cpu_ldub_data_ra(env, addr, GETPC());   \
>>                  addr = addr_add(env, addr, 1);                          \
>>              }                                                           \
>>          } else {                                                        \
>>              for (i = 0; i < nb; i++) {                                  \
>> -                xt.VsrB(i) = cpu_ldub_data_ra(env, addr, GETPC());      \
>> +                t.VsrB(i) = cpu_ldub_data_ra(env, addr, GETPC());       \
>>                  addr = addr_add(env, addr, 1);                          \
>>              }                                                           \
>>          }                                                               \
>>      }                                                                   \
>> -    putVSR(xt_num, &xt, env);                                           \
>> +    *xt = t;                                                            \
>>  }
>>  
>>  VSX_LXVL(lxvl, 0)
>> @@ -447,26 +448,28 @@ VSX_LXVL(lxvll, 1)
>>  void helper_##name(CPUPPCState *env, target_ulong addr,           \
>>                     target_ulong xt_num, target_ulong rb)          \
>>  {                                                                 \
>> -    int i;                                                        \
>> -    ppc_vsr_t xt;                                                 \
>> +    ppc_vsr_t *xt = &env->vsr[xt_num];                            \
>> +    ppc_vsr_t t = *xt;                                            \
>>      target_ulong nb = GET_NB(rb);                                 \
>> +    int i;                                                        \
>>                                                                    \
>>      if (!nb) {                                                    \
>>          return;                                                   \
>>      }                                                             \
>> -    getVSR(xt_num, &xt, env);                                     \
>> +                                                                  \
>>      nb = (nb >= 16) ? 16 : nb;                                    \
>>      if (msr_le && !lj) {                                          \
>>          for (i = 16; i > 16 - nb; i--) {                          \
>> -            cpu_stb_data_ra(env, addr, xt.VsrB(i - 1), GETPC());  \
>> +            cpu_stb_data_ra(env, addr, t.VsrB(i - 1), GETPC());   \
>>              addr = addr_add(env, addr, 1);                        \
>>          }                                                         \
>>      } else {                                                      \
>>          for (i = 0; i < nb; i++) {                                \
>> -            cpu_stb_data_ra(env, addr, xt.VsrB(i), GETPC());      \
>> +            cpu_stb_data_ra(env, addr, t.VsrB(i), GETPC())  ;     \
>>              addr = addr_add(env, addr, 1);                        \
>>          }                                                         \
>>      }                                                             \
>> +    *xt = t;                                                      \
> 
> Is this correct?  AFAICT the original wasn't writing back, so why does
> the new version?

Ooops yes, this shouldn't be here at all. I'll fix it up in the next version of 
the
series, along with Richard's comments about using the xt pointer directly.

>>  }
>>  
>>  VSX_STXVL(stxvl, 0)


ATB,

Mark.



reply via email to

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