Patchwork ppcmas_tlb_check: Fix effective address comparison

login
register
mail settings
Submitter Fabien Chouteau
Date May 7, 2012, 4:41 p.m.
Message ID <1336408881-3851-1-git-send-email-chouteau@adacore.com>
Download mbox | patch
Permalink /patch/157351/
State New
Headers show

Comments

Fabien Chouteau - May 7, 2012, 4:41 p.m.
Use size mask in both operands of effective address comparison.
This is the expected as the size of EPN field in MAS2 depends on page
size.

Definition of EPN field from e500v2 RM:
EPN Effective page number: Depending on page size, only the bits
associated with a page boundary are valid. Bits that represent offsets
within a page are ignored and should be cleared.

There is a similar (but more complicated) definition in PowerISA V2.06.

Signed-off-by: Fabien Chouteau <chouteau@adacore.com>
---
 target-ppc/helper.c |    2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
Alexander Graf - May 7, 2012, 4:43 p.m.
On 07.05.2012, at 18:41, Fabien Chouteau wrote:

> Use size mask in both operands of effective address comparison.
> This is the expected as the size of EPN field in MAS2 depends on page
> size.
> 
> Definition of EPN field from e500v2 RM:
> EPN Effective page number: Depending on page size, only the bits
> associated with a page boundary are valid. Bits that represent offsets
> within a page are ignored and should be cleared.
> 
> There is a similar (but more complicated) definition in PowerISA V2.06.

Would it make sense to do this at tlbwe time? That path is a bit less hot that the tlb check :).


Alex

> 
> Signed-off-by: Fabien Chouteau <chouteau@adacore.com>
> ---
> target-ppc/helper.c |    2 +-
> 1 file changed, 1 insertion(+), 1 deletion(-)
> 
> diff --git a/target-ppc/helper.c b/target-ppc/helper.c
> index e97e496..adb96a0 100644
> --- a/target-ppc/helper.c
> +++ b/target-ppc/helper.c
> @@ -1320,7 +1320,7 @@ int ppcmas_tlb_check(CPUPPCState *env, ppcmas_tlb_t *tlb,
>     }
> 
>     /* Check effective address */
> -    if ((address & mask) != (tlb->mas2 & MAS2_EPN_MASK)) {
> +    if ((address & mask) != (tlb->mas2 & MAS2_EPN_MASK & mask)) {
>         return -1;
>     }
> 
> -- 
> 1.7.9.5
>
Fabien Chouteau - May 7, 2012, 4:45 p.m.
On 05/07/2012 06:43 PM, Alexander Graf wrote:
> 
> On 07.05.2012, at 18:41, Fabien Chouteau wrote:
> 
>> Use size mask in both operands of effective address comparison.
>> This is the expected as the size of EPN field in MAS2 depends on page
>> size.
>>
>> Definition of EPN field from e500v2 RM:
>> EPN Effective page number: Depending on page size, only the bits
>> associated with a page boundary are valid. Bits that represent offsets
>> within a page are ignored and should be cleared.
>>
>> There is a similar (but more complicated) definition in PowerISA V2.06.
> 
> Would it make sense to do this at tlbwe time? That path is a bit less hot that the tlb check :).

Why not, I'll check that tomorrow.

Thanks,

Patch

diff --git a/target-ppc/helper.c b/target-ppc/helper.c
index e97e496..adb96a0 100644
--- a/target-ppc/helper.c
+++ b/target-ppc/helper.c
@@ -1320,7 +1320,7 @@  int ppcmas_tlb_check(CPUPPCState *env, ppcmas_tlb_t *tlb,
     }
 
     /* Check effective address */
-    if ((address & mask) != (tlb->mas2 & MAS2_EPN_MASK)) {
+    if ((address & mask) != (tlb->mas2 & MAS2_EPN_MASK & mask)) {
         return -1;
     }