79effa7c251d589d045478a7f6e16ab095fafd21
[soc.git] / src / soc / regfile / util.py
1 from soc.regfile.regfiles import FastRegs
2 from soc.decoder.power_enums import SPR, spr_dict
3
4 spr_to_fast = { SPR.CTR: FastRegs.CTR,
5 SPR.LR: FastRegs.LR,
6 SPR.TAR: FastRegs.TAR,
7 SPR.SRR0: FastRegs.SRR0,
8 SPR.SRR1: FastRegs.SRR1,
9 SPR.XER: FastRegs.XER,
10 SPR.DEC: FastRegs.DEC,
11 SPR.TB: FastRegs.TB,
12 }
13
14 sprstr_to_fast = {}
15 fast_to_spr = {}
16 for (k, v) in spr_to_fast.items():
17 sprstr_to_fast[k.name] = v
18 fast_to_spr[v] = k
19
20 def fast_reg_to_spr(spr_num):
21 return fast_to_spr[spr_num].value
22
23
24 def spr_to_fast_reg(spr_num):
25 if not isinstance(spr_num, str):
26 spr_num = spr_dict[spr_num].SPR
27 return sprstr_to_fast[spr_num]
28
29
30 def slow_reg_to_spr(slow_reg):
31 for i, x in enumerate(SPR):
32 if slow_reg == i:
33 return x.value
34
35
36 def spr_to_slow_reg(spr_num):
37 for i, x in enumerate(SPR):
38 if spr_num == x.value:
39 return i