Skip to content

the order of virtual address checking and ignore translation need to be clarified #99

@qin996

Description

@qin996

In pointer masking spec, it describes as follow.

transformed_effective_address = {{PMLEN{effective_address[XLEN-PMLEN-1]}}, effective_address[XLEN-PMLEN-1:0]}

For a virtual address to be valid, all bits in the unused portion of the address must be the same as the Most Significant Bit (MSB) of the used portion. For example, when page-based 48-bit virtual memory (Sv48) is used, load/store effective addresses, which are 64 bits, must have bits 63–48 all set to bit 47, or else a page-fault exception will occur.

so the bits 63-48 of effective address must equal to bit 47 for sv48. And the ignore transformation is defined as a transformation of the effective address. any virtual memory checks or translation steps apply to the already-transformed address according to #92. Due to the tag information stored in the high bits of address, in the specific implementation, ignore translation is performed first, and then the 63-48 bits of the virtual address are checked to see if they are all zeros or all ones. however, according to the formula for ignore translation, use effective_address, so it may require all zero or all one check of the virtual address first. So does the order of virtual address checking and ignore translation need to be clarified?

for example, va = 0x12ff_ff81_1300_0000 and PMLEN=7, When performing an ignore translation, is it right to choose transformerd_efficienta_address= {{PMLEN{VA[47]}},VA[47:0]}?

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions