Add simultaneous multhreading (SMT) support
The pipeline stages should be updated to support SMT. This will require each instruction to store a hardware thread ID, which may be queried by pipeline stages to determine the appropriate set of resources to use.
To support SMT, some pipeline resources will require per-thread duplication, e.g.:
- Program counter
- Register allocation table Logic that revolves around the physical registers or program counter, such as flushing, will need to be updated to respect the thread ID.
For maximum flexibility, others resources should optionally support per-thread duplication, such as the branch prediction tables (BHT, BTB, etc.). Logic such as port allocation may also be updated to supply the thread ID, to enable POWER-style per-thread execution unit partitioning.
The work for this has been completed in the smt branch, but has been put on hold due to the development of more complex exception handling and the new memory interface. As exceptions currently pause the entire core until handled, this would result in the undesirable halting of other threads. This system would likely need to be redesigned to pause only the exception-raising thread while allowing the others to continue.