qemu-devel
[Top][All Lists]
Advanced

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

[Qemu-devel] Re: [PATCH] target-sparc: Fix address masking in ldqf and s


From: Blue Swirl
Subject: [Qemu-devel] Re: [PATCH] target-sparc: Fix address masking in ldqf and stqf.
Date: Fri, 23 Apr 2010 21:42:30 +0300

Thanks, applied.

On 4/23/10, Richard Henderson <address@hidden> wrote:
> Use address_mask on both addr and addr+8 in both these routines,
>  rather than explicit masking with 0xffffffff.
>
>  Reformulate address_mask to return a result, rather than masking
>  a pass-by-reference argument.
>
>  Signed-off-by: Richard Henderson <address@hidden>
>  ---
>   target-sparc/op_helper.c |   25 +++++++++++--------------
>   1 files changed, 11 insertions(+), 14 deletions(-)
>
>  diff --git a/target-sparc/op_helper.c b/target-sparc/op_helper.c
>  index 704631a..b27778b 100644
>  --- a/target-sparc/op_helper.c
>  +++ b/target-sparc/op_helper.c
>  @@ -201,12 +201,13 @@ static void replace_tlb_1bit_lru(SparcTLBEntry *tlb,
>
>   #endif
>
>  -static inline void address_mask(CPUState *env1, target_ulong *addr)
>  +static inline target_ulong address_mask(CPUState *env1, target_ulong addr)
>   {
>   #ifdef TARGET_SPARC64
>      if (AM_CHECK(env1))
>  -        *addr &= 0xffffffffULL;
>  +        addr &= 0xffffffffULL;
>   #endif
>  +    return addr;
>   }
>
>   static void raise_exception(int tt)
>  @@ -1923,7 +1924,7 @@ uint64_t helper_ld_asi(target_ulong addr, int asi, int 
> size, int sign)
>          raise_exception(TT_PRIV_ACT);
>
>      helper_check_align(addr, size - 1);
>  -    address_mask(env, &addr);
>  +    addr = address_mask(env, addr);
>
>      switch (asi) {
>      case 0x82: // Primary no-fault
>  @@ -2026,7 +2027,7 @@ void helper_st_asi(target_ulong addr, target_ulong 
> val, int asi, int size)
>          raise_exception(TT_PRIV_ACT);
>
>      helper_check_align(addr, size - 1);
>  -    address_mask(env, &addr);
>  +    addr = address_mask(env, addr);
>
>      /* Convert to little endian */
>      switch (asi) {
>  @@ -2944,8 +2945,7 @@ void helper_stdf(target_ulong addr, int mem_idx)
>          break;
>      }
>   #else
>  -    address_mask(env, &addr);
>  -    stfq_raw(addr, DT0);
>  +    stfq_raw(address_mask(env, addr), DT0);
>   #endif
>   }
>
>  @@ -2969,8 +2969,7 @@ void helper_lddf(target_ulong addr, int mem_idx)
>          break;
>      }
>   #else
>  -    address_mask(env, &addr);
>  -    DT0 = ldfq_raw(addr);
>  +    DT0 = ldfq_raw(address_mask(env, addr));
>   #endif
>   }
>
>  @@ -3003,9 +3002,8 @@ void helper_ldqf(target_ulong addr, int mem_idx)
>          break;
>      }
>   #else
>  -    address_mask(env, &addr);
>  -    u.ll.upper = ldq_raw(addr);
>  -    u.ll.lower = ldq_raw((addr + 8) & 0xffffffffULL);
>  +    u.ll.upper = ldq_raw(address_mask(env, addr));
>  +    u.ll.lower = ldq_raw(address_mask(env, addr + 8));
>      QT0 = u.q;
>   #endif
>   }
>  @@ -3040,9 +3038,8 @@ void helper_stqf(target_ulong addr, int mem_idx)
>      }
>   #else
>      u.q = QT0;
>  -    address_mask(env, &addr);
>  -    stq_raw(addr, u.ll.upper);
>  -    stq_raw((addr + 8) & 0xffffffffULL, u.ll.lower);
>  +    stq_raw(address_mask(env, addr), u.ll.upper);
>  +    stq_raw(address_mask(env, addr + 8), u.ll.lower);
>   #endif
>   }
>
>  --
>  1.6.6.1
>
>




reply via email to

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