Is it a normal user-mode instruction?
No. DRET is defined only in D-mode and not when executing from the Program Buffer; it is not a user-mode assembly instruction.
Debug-mode return: PC<-dpc and resume with the dcsr-recorded prv/v state (and pelp where applicable). It is defined only in D-mode and not when executing from the Program Buffer.
Extension condition: Debug return under the Sdext debug specification; the recommended DRET mechanism has meaning only in D-mode outside the Program Buffer.
DRET is used by the Debug Module to resume normal execution. Its recommended encoding is 0x7b200073; execution restores PC from dpc and resumes normally at the privilege indicated by dcsr.prv and dcsr.v, restoring ELP from pelp where applicable. DRET is defined only in D-mode and not when executing from the Program Buffer; behavior in other contexts is not specified by this DRET definition.
Debug-mode return: PC<-dpc and resume with the dcsr-recorded prv/v state (and pelp where applicable). It is defined only in D-mode and not when executing from the Program Buffer.
Only in D-mode outside the Program Buffer: with prepared dpc=0x8000, dcsr.prv=M and v=0, dret resumes at PC=0x8000 in M-mode under the debug-resume rules. It is not the SRET/MRET interrupt-enable restore sequence.
Only in D-mode outside the Program Buffer: with prepared dpc=0x8000, dcsr.prv=M and v=0, dret resumes at PC=0x8000 in M-mode under the debug-resume rules. It is not the SRET/MRET interrupt-enable restore sequence.
No. DRET is defined only in D-mode and not when executing from the Program Buffer; it is not a user-mode assembly instruction.
PC is restored from dpc; normal execution resumes according to dcsr.prv and dcsr.v, with ELP restored from pelp where applicable. The specification does not define it as the interrupt-enable restoration sequence of mret or sret.