The handling of the Embedded Extension (Register file size (RFS) = 16) is suboptimal for several reasons:
- Realibility is degraded. Consider the
ADD instruction as an example:
behavior: if(rd >=RFS || rs1 >= RFS || rs2 >= RFS) raise(0, 2); else if (rd != 0) X[rd] = X[rs1] + X[rs2];
# vs.
behavior: if (rd != 0) X[rd] = X[rs1] + X[rs2];
- Checking constraints and calling
raise(...) inside of behavior makes analysing the behavior more difficult.
- Illegal Instructions (due to register file limitations) which can be solely determined based on the encoding and static architectureal state should not be raised during decoding instead.
- This adds a lot of redundant code, because we basically have roughly the same checks for almost every (standard) instruction. Declaring it only once for
RV32E would be way cleaner
Let's discuss how to handle the embedded extension in a more sophisticated way.
@jopperm @eyck @AtomCrafty @wysiwyng
The handling of the Embedded Extension (Register file size (RFS) = 16) is suboptimal for several reasons:
ADDinstruction as an example:raise(...)inside of behavior makes analysing the behavior more difficult.RV32Ewould be way cleanerLet's discuss how to handle the embedded extension in a more sophisticated way.
@jopperm @eyck @AtomCrafty @wysiwyng