Zimop Extension
Synopsis
The "Zimop" extension introduces the concept of
instructions that may be operations (MOPs). MOPs are initially defined to
simply write zero to x[rd], but are designed to be redefined by later
extensions to perform some other action.
The Zimop extension defines an encoding space for 40 MOPs.
|
It is sometimes desirable to define instruction-set extensions whose
instructions, rather than raising illegal-instruction exceptions when the extension is
not implemented, take no useful action (beyond writing Although similar in some respects to HINTs, MOPs cannot be encoded as HINTs, because unlike HINTs, MOPs are allowed to alter architectural state. Because MOPs may be redefined by later extensions, standard software should not execute a MOP unless it is deliberately targeting an extension that has redefined that MOP. |
The Zimop extension defines 32 MOP instructions named MOP.R.n, where
n is an integer between 0 and 31, inclusive.
Unless redefined by another extension, these instructions simply write 0 to
x[rd]. Their encoding allows future extensions to define them to read x[rs1],
as well as write x[rd].
The Zimop extension additionally defines 8 MOP instructions named
MOP.RR.n, where n is an integer between 0 and 7, inclusive.
Unless redefined by another extension, these instructions simply
write 0 to x[rd]. Their encoding allows future extensions to define them to
read x[rs1] and x[rs2], as well as write x[rd].
The recommended assembly syntax for MOP.R.n is MOP.R.n rd, rs1,
with any x-register specifier being valid for either argument. Similarly for
MOP.RR.n, the recommended syntax is MOP.RR.n rd, rs1, rs2.
The extension that redefines a MOP may define an alternate assembly mnemonic.
|
| These MOPs are encoded in the SYSTEM major opcode in part because it is expected their behavior will be modulated by privileged CSR state. |
These MOPs are defined to write zero to x[rd], rather than performing
no operation, to simplify instruction decoding and to allow testing the
presence of features by branching on the zeroness of the result.
|
The MOPs defined in the Zimop extension do not carry a syntactic dependency
from x[rs1] or x[rs2] to x[rd], though an extension that redefines the
MOP may impose such a requirement.
Not carrying a syntactic dependency relieves straightforward
implementations of reading x[rs1] and x[rs2].
|