sprs: Store common SPRs in register file
authorBenjamin Herrenschmidt <benh@kernel.crashing.org>
Thu, 31 Oct 2019 02:48:43 +0000 (13:48 +1100)
committerPaul Mackerras <paulus@ozlabs.org>
Sat, 7 Dec 2019 04:30:40 +0000 (15:30 +1100)
commite4f475e17f8dc121350d30bb0815aebe53d4b3af
tree656d46d32745b31f5d0006035b4fe5e59cf4c139
parentafdd59350270e8d5d8e503321024a3d545ec3796
sprs: Store common SPRs in register file

This stores the most common SPRs in the register file.

This includes CTR and LR and a not yet final list of others.

The register file is set to 64 entries for now. Specific types
are defined that can represent a GPR index (gpr_index_t) or
a GPR/SPR index (gspr_index_t) along with conversion functions
between the two.

On order to deal with some forms of branch updating both LR and
CTR, we introduced a delayed update of LR after a branch link.

Note: We currently stall the pipeline on such a delayed branch,
but we could avoid stalling fetch in that specific case as we
know we have a branch delay. We could also limit that to the
specific case where we need to update both CTR and LR.

This allows us to make bcreg, mtspr and mfspr pipelined. decode1
will automatically force the single issue flag on mfspr/mtspr to
a "slow" SPR.

[paulus@ozlabs.org - fix direction of decode2.stall_in]

Signed-off-by: Benjamin Herrenschmidt <benh@kernel.crashing.org>
Signed-off-by: Paul Mackerras <paulus@ozlabs.org>
13 files changed:
Makefile
common.vhdl
control.vhdl
core.vhdl
cr_hazard.vhdl
decode1.vhdl
decode2.vhdl
decode_types.vhdl
execute1.vhdl
gpr_hazard.vhdl
ppc_fx_insns.vhdl
register_file.vhdl
writeback.vhdl