What address does rs1 hold for HFENCE.GVMA?
When rs1 is nonzero it holds the guest physical address shifted right by 2 bits (GPA>>2); rs1=x0 selects all guest physical addresses.
Hypervisor G-stage translation fence: rs1 selects GPA>>2 scope, rs2 selects VMID, ordering later local-hart G-stage implicit translations.
HFENCE.GVMA is the Hypervisor extension G-stage memory-management fence. It orders prior stores already visible to the current hart before later implicit reads for G-stage address translation; nonzero rs1 contains the guest physical address shifted right by 2 bits (GPA>>2), and nonzero rs2 specifies a VMID. rs1=x0 selects all guest physical addresses, and rs2=x0 selects all VMIDs. It affects only the local hart; it is not a generic data-cache flush or a concrete TLB-entry walk.
G-stage translation fence: shows SYSTEM encoding, rs1/rs2 scope selection, and local-hart fence ordering without modeling TLB or cache implementation.
This animation shows only the local-hart translation fence/invalidation semantics defined by the privileged architecture; it does not show OS shootdown protocols, TLB structures, cache flushes, page-walk latency, or platform interrupt mechanisms.
HFENCE.GVMA is a G-stage translation fence: rs1 selects address scope with GPA>>2, rs2 selects VMID scope, and the effect is local to the current hart.
Understand this scenario with real code like «hfence.gvma a1, a2 # a1 = GPA >> 2; a2 = VMID».
Understand this scenario with real code like «hfence.gvma a1, a2 # a1 = GPA >> 2; a2 = VMID».
Understand this scenario with real code like «hfence.gvma a1, a2 # a1 = GPA >> 2; a2 = VMID».
When rs1 is nonzero it holds the guest physical address shifted right by 2 bits (GPA>>2); rs1=x0 selects all guest physical addresses.
No. The official semantics are local to the current hart; multi-hart synchronization needs other harts to execute their own synchronization sequence.