note out-of-date
[libreriscv.git] / isa_conflict_resolution.mdwn
index 17a92df9c7bf3eaa6faa445fa4465886ca753d2e..0b099cc7514c5eda3d6a751d9107263cacf6bba8 100644 (file)
@@ -1,5 +1,8 @@
 # Resolving ISA conflicts and providing a pain-free RISC-V Standards Upgrade Path
 
+**Note: out-of-date as of review 31apr2018, requires updating to reflect
+"mvendorid-marchid-isamux" concept.**
+
 ## Executive Summary
 
 A non-invasive backwards-compatible change to make mvendorid and marchid
@@ -289,6 +292,26 @@ a controlled means and method of supporting multiple (future, past and
 present) versions of the **Base** ISA, Custom Extensions and even
 completely foreign ISAs in the same processor.
 
+This incredibly simple non-invasive idea has some unique and distinct
+advantages over other proposals:
+
+* Existing designs - even though the specification is not finalised
+  (but has "frozen" aspects) - would be completely unaffected: the
+  change is to the "wording" of the specification to "retrospectively"
+  fit reality.
+* Unlike with the MISA idea this is *purely* at the "decode" phase:
+  no internal Extension state information is permitted to be disabled,
+  altered or destroyed as a direct result of writing to the
+  mvendor/march-id CSRs.
+* Compliance Testing may be carried out with a different vendorid/marchid
+  tuple set prior to a test, allowing a vendor to claim *Certified*
+  compatibility with *both* one (or more) legacy variants of the RISC-V
+  Specification *and* with a present one.
+* With sufficient care taken in the implementation an implementor
+  may have multiple interpretations of the same binary encoding within
+  an inner loop, with a single instruction (to the WARL register)
+  changing the meaning.
+
 **This is the only one of the proposals that meet the full requirements**
 
 # ioctl-like <a name="ioctl-like"></a>
@@ -328,6 +351,55 @@ invasive than the mvendor/march-id WARL concept.
 
 TBD: placeholder as of 26apr2018
 
+## new (old) m-a-i tuple idea
+
+> actually that's a good point: where the user decides that they want
+> to boot one and only one tuple (for the entire OS), forcing a HARDWARE
+> level default m-a-i tuple at them actually prevents and prohibits them
+> from doing that, Jacob.
+> 
+> so we have apps on one RV-Base ISA and apps on an INCOMPATIBLE (future)
+> variant of RV-Base ISA.  with the approach that i was advocating (S-mode
+> does NOT switch automatically), there are totally separate mtvec /
+> stvec / bstvec traps.
+> 
+> would it be reasonable to assume the following:
+> 
+> (a) RV-Base ISA, particularly code-execution in the critical S-mode
+> trap-handling, is *EXTREMELY* unlikely to ever be changed, even thinking
+> 30 years into the future ?
+> 
+> (b) if the current M-mode (user app level) context is "RV Base ISA 1"
+> then i would hazard a guess that S-mode is prettty much going to drop
+> down into *exactly* the same mode / context, the majority of the time
+> 
+> thus the hypothesis is that not only is it the common code-path to *not*
+> switch the ISA in the S-mode trap but that the instructions used are
+> extremely unlikely to be changed between "RV Base Revisions".
+> 
+> foreign isa hardware-level execution
+> ------------------------
+> 
+> this is the one i've not really thought through so much, other than it
+> would clearly be disadvantageous for S-mode to be arbitrarily restricted
+> to running RV-Base code (of any variant).  a case could be made that by the
+> time the m-a-i tuple is switched to the foreign isa it's "all bets off",
+> foreign arch is "on its own", including having to devise a means and
+> method to switch back (equivalent in its ISA of m-a-i switching).
+> 
+> conclusion / idea
+> --------------------
+> 
+> the multi-base "user wants to run one and only one tuple" is the key
+> case, here, that is a show-stopper to the idea of hard-wiring the default
+> S-mode m-a-i.
+> 
+> now, if instead we were to say, "ok so there should be a default S-mode
+> m-a-i tuple" and it was permitted to SET (choose) that tuple, *that*
+> would solve that problem.  it could even be set to the foreign isa. 
+> which would be hilarious.
+
+
 # Summary and Conclusion
 
 In the early sections (those in the category "no action") it was established
@@ -456,6 +528,13 @@ The following conversation exerpts are taken from the ISA-dev discussion
 > it is implementing. It will test nothing in the custom extension space,
 > and doesn't monitor or care what is in that space.
 
+## (4) Jacob Bachmeyer on explaining disambiguation of opcode space
+
+> ...have different harts with different sets of encodings.)  Adding a "select"
+> CSR as has been proposed does not escape this fundamental truth that
+> instruction decode must be unambiguous, it merely expands every opcode with
+> extra bits from a "select" CSR.
+
 # References
 
 * <https://groups.google.com/a/groups.riscv.org/forum/#!topic/isa-dev/7bbwSIW5aqM>