POOL32A 000000 |
0000000000 |
TLBGWR 0011000101 |
POOL32Axf 111100 |
6 |
10 |
10 |
6 |
TLBGWR |
microMIPS |
Write Random Guest TLB Entry |
Write Random Guest TLB Entry
To write a Guest TLB entry indexed by the Random register, initiated from root mode.
The Guest TLB entry pointed to by the Guest.Random register is written from the contents of the Guest.EntryHi,
Guest.EntryLo0, Guest.EntryLo1, and Guest.PageMask registers.
The information written to the Guest TLB entry may be different from that in the Guest.EntryHi, Guest.EntryLo0, and Guest.EntryLo1 registers, in that:
The value written to the VPN2 ield of the Guest TLB entry may have those bits set to zero corresponding to the one bits in the Mask ield of the Guest.PageMask register (the least signiicant bit of VPN2 corresponds to the least signiicant bit of the Mask ield). It is implementation dependent whether these bits are preserved or zeroed during a Guest TLB write.
The value written to the PFN0 and PFN1 ields of the TLB entry may have those bits set to zero corresponding to the one bits in the Mask ield of Guest.PageMask register (the least signiicant bit of PFN corresponds to the least signiicant bit of the Mask ield). It is implementation dependent whether these bits are preserved or zeroed during a Guest TLB write.
The single G bit in the Guest TLB entry is set from the logical AND of the G bits in the Guest.EntryLo0 and
Guest.EntryLo1 registers.
In an implementation supporting GuestID, GuestCtl1RID is written in the TLB entry.
If access to Coprocessor 0 is not enabled, a Coprocessor Unusable Exception is signaled.
On an VTLB/FTLB enabled implementation, if the Pagemask register contains a page size differing from the FTLB page size deined in Conig4, then the write goes into a random entry in the VTLB.
Itis implementation dependent whether multiple TLB matches are detected on a TLBGWR,though itis recommended. If a TLB write detects multiple matches, but not necessarily all multiple matches, then a TLB lookup or TLB probe operation should signal a Machine Check Exception on detection of multiple matches.
If multiple match detection is implemented, then on detection, the multiple match should be invalidated and the write completed. No Machine Check Exception should be signaled.
The guest context does notimplementthe Virtualization Module. Use of this instruction in guest-kernel mode will result in a Reserved Instruction exception, taken in guest mode.
For processors that do not include a TLB in the guest context, the operation of this instruction is UNDEFINED. The preferred implementation is to signal a Reserved Instruction Exception.
if IsCoprocessorEnabled(0) then SignalException(ReservedInstruction, 0) break endif i = Guest.Random if (Config4IE >= 2) then Guest.TLB[i]hardware_invalid = 0 if ( EntryHIEHINV=1 ) then Guest.TLB[i]hardware_invalid = 1 endif endif Guest.TLB[i]Mask = Guest.PageMaskMask Guest.TLB[i]R = Guest.EntryHiR Guest.TLB[i]VPN2 = Guest.EntryHiVPN2 and not Guest.PageMaskMask # Impl. dependent Guest.TLB[i]ASID = Guest.EntryHiASID Guest.TLB[i]G = Guest.EntryLo1G and Guest.EntryLo0G Guest.TLB[i]PFN1 = Guest.EntryLo1PFN and not PageMaskMask # Impl. dependent Guest.TLB[i]C1 = Guest.EntryLo1C Guest.TLB[i]D1 = Guest.EntryLo1D Guest.TLB[i]V1 = Guest.EntryLo1V Guest.TLB[i]PFN0 = Guest.EntryLo0PFN and not PageMaskMask # Impl. dependent Guest.TLB[i]C0 = Guest.EntryLo0C Guest.TLB[i]D0 = Guest.EntryLo0D Guest.TLB[i]V0 = Guest.EntryLo0V if (GuestCtl0G1) then Guest.TLB[i]GuestID = GuestCtl1RID endif else SignalException(CoprocessorUnusable, 0) endif
Coprocessor Unusable
Reserved Instruction
Machine Check (implementation dependent)