The idea is both m-mode applications and u-mode applications use the exact same instruction sequence, so there is (no?) need to have a different code base for accelerated software. This will force software to always use U-mode to select a CXU.
Spec changes required
rename cx_index to cx_selector
always use cx_selector
if scx_table points to valid virtual address, writes to cx_selector do a lookup in scx_table and write result to mcx_selector as per current spec
if scx_table points to special sentinel value (eg all ones or all zeros), or is uninitialized, then writes to cx_selector are mirrored as writes to scx_table
Possible Issues
Correct behaviour needs to be ensured when scx_table is incorrect or uninitialized. That is, writes to mcx_selector (the old way) always works and never fails (as long as the value written is correct), but writes to cx_selector may not work if scx_table is misconfigured. This may be a concern for applications to always rely on scx_selector.
Summary
The idea is both m-mode applications and u-mode applications use the exact same instruction sequence, so there is (no?) need to have a different code base for accelerated software. This will force software to always use U-mode to select a CXU.
Spec changes required
Possible Issues