ppcmas_tlb_check: Fix effective address comparison

Submitted by Fabien Chouteau on May 7, 2012, 4:41 p.m.

Details

Message ID 1336408881-3851-1-git-send-email-chouteau@adacore.com
State New
Headers show

Commit Message

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(-)

Comments

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 hide | download patch | download mbox

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;
     }