sifive / freedom-metal

Bare Metal Compatibility Library for the Freedom Platform
Other
152 stars 47 forks source link

Enable vector unit without misa.V #430

Closed nick-knight closed 2 years ago

nick-knight commented 2 years ago

This PR attempts to resolve #429 by the techniques described therein:

My implementation does introduce a subtle change in the semantics. Previously, if I'm understanding it correctly, this code implemented the following state transition of mstatus.VS (when misa.V was set):

 Before |  After
-----------------
    Off | Initial
Initial | Initial
  Clean |   Dirty
  Dirty |   Dirty

Now, this code unconditionally sets mstatus.VS to Dirty.

I'm not sure I understand the previous Freedom-Metal behavior (nor the similar behavior of mstatus.FS). I feel like it would be most sensible to set these bits to Initial. Perhaps the assumption is that these bits are guaranteed to be Off at this point in execution, so they will always transition to Initial? I welcome the Freedom Metal developers to clarify their intention, and take over this PR.

paul-walmsley-sifive commented 2 years ago

Hi @nick-knight , I just noticed that this pull request should be filed against the freedom-e-sdk-private project instead. Could you move it there? Can discuss further on Slack to describe what changed here. Thanks :-)