mideleg.VSTIP is read-only, as enforced by the specification. When this trap happens, it will always be taken to the hypervisor unless delegated to a virtual supervisor by the hypervisor.
When we are in machine mode and there is a pending VSTIP, it will be ignored, and context is switched to a privilege level this interrupt is delegated to.
Intended for VS-mode means it is intended to emulate a supervisor timer interrupt for a guest OS running in virtual supervisor mode. However, the hypervisor software has the option to either delegate it to the virtual supervisor by writing to hideleg.vstip or let the trap be taken in hypervisor mode itself.