-
Notifications
You must be signed in to change notification settings - Fork 24
Description
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]}
?