GP-6007: Added CSR space and CSRs

This commit is contained in:
ghidorahrex
2025-12-02 15:30:45 +00:00
parent ed4ae8bfa1
commit 9bdd19cc08
3 changed files with 298 additions and 31 deletions

View File

@@ -123,17 +123,3 @@ Smwa.regs: is (LsmwRe_ & LsmwRb_ & LsmwId=0 & Smw.fp & Smw.gp & Smw.lp & Smw.sp)
Smwa.regs: is (LsmwRe_ & LsmwRb_ & LsmwId=1 & Smw.sp & Smw.lp & Smw.gp & Smw.fp) ... & SmwReg [ regNum=LsmwRe_+1; counter=LsmwRe_-LsmwRb_+1; ] { build Smw.fp; build Smw.gp; build Smw.lp; build Smw.sp; build SmwReg; }
Smwa.regs: is LsmwRe_=0x1f & LsmwRb_=0x1f & LsmwId=0 & Smw.fp & Smw.gp & Smw.lp & Smw.sp { build Smw.sp; build Smw.lp; build Smw.gp; build Smw.fp; }
Smwa.regs: is LsmwRe_=0x1f & LsmwRb_=0x1f & LsmwId=1 & Smw.sp & Smw.lp & Smw.gp & Smw.fp { build Smw.fp; build Smw.gp; build Smw.lp; build Smw.sp; }
#Smw.regs: is LsmwBa=0 & LsmwId=0 & Smwbi.sp & Smwbi.lp & Smwbi.gp & Smwbi.fp & Smwbi.p1 & Smwbi.p0 & Smwbi.t9 & Smwbi.t8 & Smwbi.t7 & Smwbi.t6 & Smwbi.t5 & Smwbi.t4 & Smwbi.t3 & Smwbi.t2 & Smwbi.t1 & Smwbi.t0 & Smwbi.ta & Smwbi.s8 & Smwbi.s7 & Smwbi.s6 & Smwbi.s5 & Smwbi.s4 & Smwbi.s3 & Smwbi.s2 & Smwbi.s1 & Smwbi.s0 & Smwbi.a5 & Smwbi.a4 & Smwbi.a3 & Smwbi.a2 & Smwbi.a1 & Smwbi.a0 { }
#Smw.regs: is LsmwBa=0 & LsmwId=1 & Smwbd.a0 & Smwbd.a1 & Smwbd.a2 & Smwbd.a3 & Smwbd.a4 & Smwbd.a5 & Smwbd.s0 & Smwbd.s1 & Smwbd.s2 & Smwbd.s3 & Smwbd.s4 & Smwbd.s5 & Smwbd.s6 & Smwbd.s7 & Smwbd.s8 & Smwbd.ta & Smwbd.t0 & Smwbd.t1 & Smwbd.t2 & Smwbd.t3 & Smwbd.t4 & Smwbd.t5 & Smwbd.t6 & Smwbd.t7 & Smwbd.t8 & Smwbd.t9 & Smwbd.p0 & Smwbd.p1 & Smwbd.fp & Smwbd.gp & Smwbd.lp & Smwbd.sp { }
#Smw.regs: is LsmwBa=1 & LsmwId=0 & Smwai.sp & Smwai.lp & Smwai.gp & Smwai.fp & Smwai.p1 & Smwai.p0 & Smwai.t9 & Smwai.t8 & Smwai.t7 & Smwai.t6 & Smwai.t5 & Smwai.t4 & Smwai.t3 & Smwai.t2 & Smwai.t1 & Smwai.t0 & Smwai.ta & Smwai.s8 & Smwai.s7 & Smwai.s6 & Smwai.s5 & Smwai.s4 & Smwai.s3 & Smwai.s2 & Smwai.s1 & Smwai.s0 & Smwai.a5 & Smwai.a4 & Smwai.a3 & Smwai.a2 & Smwai.a1 & Smwai.a0 { }
#Smw.regs: is LsmwBa=1 & LsmwId=1 & Smwad.a0 & Smwad.a1 & Smwad.a2 & Smwad.a3 & Smwad.a4 & Smwad.a5 & Smwad.s0 & Smwad.s1 & Smwad.s2 & Smwad.s3 & Smwad.s4 & Smwad.s5 & Smwad.s6 & Smwad.s7 & Smwad.s8 & Smwad.ta & Smwad.t0 & Smwad.t1 & Smwad.t2 & Smwad.t3 & Smwad.t4 & Smwad.t5 & Smwad.t6 & Smwad.t7 & Smwad.t8 & Smwad.t9 & Smwad.p0 & Smwad.p1 & Smwad.fp & Smwad.gp & Smwad.lp & Smwad.sp { }
#Lmwa.regs: is LsmwBa=0 & LsmwId & Lmwbi.sp & Lmwbi.lp & Lmwbi.gp & Lmwbi.fp & Lmwbi.p1 & Lmwbi.p0 & Lmwbi.t9 & Lmwbi.t8 & Lmwbi.t7 & Lmwbi.t6 & Lmwbi.t5 & Lmwbi.t4 & Lmwbi.t3 & Lmwbi.t2 & Lmwbi.t1 & Lmwbi.t0 & Lmwbi.ta & Lmwbi.s8 & Lmwbi.s7 & Lmwbi.s6 & Lmwbi.s5 & Lmwbi.s4 & Lmwbi.s3 & Lmwbi.s2 & Lmwbi.s1 & Lmwbi.s0 & Lmwbi.a5 & Lmwbi.a4 & Lmwbi.a3 & Lmwbi.a2 & Lmwbi.a1 & Lmwbi.a0 { }
#Lmwa.regs: is LsmwBa=0 & LsmwId=1 & Lmwbd.a0 & Lmwbd.a1 & Lmwbd.a2 & Lmwbd.a3 & Lmwbd.a4 & Lmwbd.a5 & Lmwbd.s0 & Lmwbd.s1 & Lmwbd.s2 & Lmwbd.s3 & Lmwbd.s4 & Lmwbd.s5 & Lmwbd.s6 & Lmwbd.s7 & Lmwbd.s8 & Lmwbd.ta & Lmwbd.t0 & Lmwbd.t1 & Lmwbd.t2 & Lmwbd.t3 & Lmwbd.t4 & Lmwbd.t5 & Lmwbd.t6 & Lmwbd.t7 & Lmwbd.t8 & Lmwbd.t9 & Lmwbd.p0 & Lmwbd.p1 & Lmwbd.fp & Lmwbd.gp & Lmwbd.lp & Lmwbd.sp { }
#Lmwa.regs: is LsmwBa=1 & LsmwId=0 & Lmwai.sp & Lmwai.lp & Lmwai.gp & Lmwai.fp & Lmwai.p1 & Lmwai.p0 & Lmwai.t9 & Lmwai.t8 & Lmwai.t7 & Lmwai.t6 & Lmwai.t5 & Lmwai.t4 & Lmwai.t3 & Lmwai.t2 & Lmwai.t1 & Lmwai.t0 & Lmwai.ta & Lmwai.s8 & Lmwai.s7 & Lmwai.s6 & Lmwai.s5 & Lmwai.s4 & Lmwai.s3 & Lmwai.s2 & Lmwai.s1 & Lmwai.s0 & Lmwai.a5 & Lmwai.a4 & Lmwai.a3 & Lmwai.a2 & Lmwai.a1 & Lmwai.a0 { }
#Lmwa.regs: is LsmwBa=1 & LsmwId=1 & Lmwad.a0 & Lmwad.a1 & Lmwad.a2 & Lmwad.a3 & Lmwad.a4 & Lmwad.a5 & Lmwad.s0 & Lmwad.s1 & Lmwad.s2 & Lmwad.s3 & Lmwad.s4 & Lmwad.s5 & Lmwad.s6 & Lmwad.s7 & Lmwad.s8 & Lmwad.ta & Lmwad.t0 & Lmwad.t1 & Lmwad.t2 & Lmwad.t3 & Lmwad.t4 & Lmwad.t5 & Lmwad.t6 & Lmwad.t7 & Lmwad.t8 & Lmwad.t9 & Lmwad.p0 & Lmwad.p1 & Lmwad.fp & Lmwad.gp & Lmwad.lp & Lmwad.sp { }
#Smwa.regs: is LsmwBa=0 & LsmwId=0 & Smwbi.sp & Smwbi.lp & Smwbi.gp & Smwbi.fp & Smwbi.p1 & Smwbi.p0 & Smwbi.t9 & Smwbi.t8 & Smwbi.t7 & Smwbi.t6 & Smwbi.t5 & Smwbi.t4 & Smwbi.t3 & Smwbi.t2 & Smwbi.t1 & Smwbi.t0 & Smwbi.ta & Smwbi.s8 & Smwbi.s7 & Smwbi.s6 & Smwbi.s5 & Smwbi.s4 & Smwbi.s3 & Smwbi.s2 & Smwbi.s1 & Smwbi.s0 & Smwbi.a5 & Smwbi.a4 & Smwbi.a3 & Smwbi.a2 & Smwbi.a1 & Smwbi.a0 { }
#Smwa.regs: is LsmwBa=0 & LsmwId=1 & Smwbd.a0 & Smwbd.a1 & Smwbd.a2 & Smwbd.a3 & Smwbd.a4 & Smwbd.a5 & Smwbd.s0 & Smwbd.s1 & Smwbd.s2 & Smwbd.s3 & Smwbd.s4 & Smwbd.s5 & Smwbd.s6 & Smwbd.s7 & Smwbd.s8 & Smwbd.ta & Smwbd.t0 & Smwbd.t1 & Smwbd.t2 & Smwbd.t3 & Smwbd.t4 & Smwbd.t5 & Smwbd.t6 & Smwbd.t7 & Smwbd.t8 & Smwbd.t9 & Smwbd.p0 & Smwbd.p1 & Smwbd.fp & Smwbd.gp & Smwbd.lp & Smwbd.sp { }
#Smwa.regs: is LsmwBa=1 & LsmwId=0 & Smwai.sp & Smwai.lp & Smwai.gp & Smwai.fp & Smwai.p1 & Smwai.p0 & Smwai.t9 & Smwai.t8 & Smwai.t7 & Smwai.t6 & Smwai.t5 & Smwai.t4 & Smwai.t3 & Smwai.t2 & Smwai.t1 & Smwai.t0 & Smwai.ta & Smwai.s8 & Smwai.s7 & Smwai.s6 & Smwai.s5 & Smwai.s4 & Smwai.s3 & Smwai.s2 & Smwai.s1 & Smwai.s0 & Smwai.a5 & Smwai.a4 & Smwai.a3 & Smwai.a2 & Smwai.a1 & Smwai.a0 { }
#Smwa.regs: is LsmwBa=1 & LsmwId=1 & Smwad.a0 & Smwad.a1 & Smwad.a2 & Smwad.a3 & Smwad.a4 & Smwad.a5 & Smwad.s0 & Smwad.s1 & Smwad.s2 & Smwad.s3 & Smwad.s4 & Smwad.s5 & Smwad.s6 & Smwad.s7 & Smwad.s8 & Smwad.ta & Smwad.t0 & Smwad.t1 & Smwad.t2 & Smwad.t3 & Smwad.t4 & Smwad.t5 & Smwad.t6 & Smwad.t7 & Smwad.t8 & Smwad.t9 & Smwad.p0 & Smwad.p1 & Smwad.fp & Smwad.gp & Smwad.lp & Smwad.sp { }

View File

@@ -2,5 +2,154 @@
<processor_spec>
<programcounter register="pc"/>
</processor_spec>
<default_memory_blocks>
<memory_block name="csr" start_address="csreg:0x0" length="0x8000" initialized="false"/>
</default_memory_blocks>
<default_symbols>
<symbol name="cpu_ver" address="csreg:0x000" size="4" description="" />
<symbol name="core_id" address="csreg:0x001" size="4" description="" />
<symbol name="icm_cfg" address="csreg:0x008" size="4" description="" />
<symbol name="dcm_cfg" address="csreg:0x010" size="4" description="" />
<symbol name="mmu_cfg" address="csreg:0x018" size="4" description="" />
<symbol name="msc_cfg" address="csreg:0x020" size="4" description="" />
<symbol name="msc_cfg2" address="csreg:0x021" size="4" description="" />
<symbol name="fucop_exist" address="csreg:0x028" size="4" description="" />
<symbol name="psw" address="csreg:0x080" size="4" description="" />
<symbol name="ipsw" address="csreg:0x081" size="4" description="" />
<symbol name="p_ipsw" address="csreg:0x082" size="4" description="" />
<symbol name="ivb" address="csreg:0x089" size="4" description="" />
<symbol name="int_ctrl" address="csreg:0x08a" size="4" description="" />
<symbol name="int_gpr_push_dis" address="csreg:0x08b" size="4" description="" />
<symbol name="eva" address="csreg:0x091" size="4" description="" />
<symbol name="p_eva" address="csreg:0x092" size="4" description="" />
<symbol name="itype" address="csreg:0x099" size="4" description="" />
<symbol name="p_itype" address="csreg:0x09a" size="4" description="" />
<symbol name="merr" address="csreg:0x0a1" size="4" description="" />
<symbol name="ipc" address="csreg:0x0a9" size="4" description="" />
<symbol name="p_ipc" address="csreg:0x0aa" size="4" description="" />
<symbol name="oipc" address="csreg:0x0ab" size="4" description="" />
<symbol name="p_p0" address="csreg:0x0b2" size="4" description="" />
<symbol name="p_p1" address="csreg:0x0ba" size="4" description="" />
<symbol name="int_mask" address="csreg:0x0c0" size="4" description="" />
<symbol name="int_mask2" address="csreg:0x0c1" size="4" description="" />
<symbol name="int_mask3" address="csreg:0x0c2" size="4" description="" />
<symbol name="int_pend" address="csreg:0x0c8" size="4" description="" />
<symbol name="int_pend2" address="csreg:0x0c9" size="4" description="" />
<symbol name="int_pend3" address="csreg:0x0ca" size="4" description="" />
<symbol name="int_trigger" address="csreg:0x0cc" size="4" description="" />
<symbol name="int_trigger2" address="csreg:0x0cd" size="4" description="" />
<symbol name="sp_usr" address="csreg:0x0d0" size="4" description="" />
<symbol name="sp_priv" address="next" size="4" description="" />
<symbol name="sp_usr1" address="next" size="4" description="" />
<symbol name="sp_priv1" address="next" size="4" description="" />
<symbol name="sp_usr2" address="next" size="4" description="" />
<symbol name="sp_priv2" address="next" size="4" description="" />
<symbol name="sp_usr3" address="next" size="4" description="" />
<symbol name="sp_priv3" address="next" size="4" description="" />
<symbol name="int_pri" address="next" size="4" description="" />
<symbol name="int_pri2" address="next" size="4" description="" />
<symbol name="int_pri3" address="next" size="4" description="" />
<symbol name="int_pri4" address="next" size="4" description="" />
<symbol name="mmu_ctl" address="csreg:0x100" size="4" description="" />
<symbol name="bg_region" address="csreg:0x101" size="4" description="" />
<symbol name="l1pptb" address="csreg:0x108" size="4" description="" />
<symbol name="tlb_vpn" address="csreg:0x110" size="4" description="" />
<symbol name="tlb_data" address="csreg:0x118" size="4" description="" />
<symbol name="tlb_misc" address="csreg:0x120" size="4" description="" />
<symbol name="vlpt_idx" address="csreg:0x128" size="4" description="" />
<symbol name="ilmb" address="csreg:0x130" size="4" description="" />
<symbol name="dlmb" address="csreg:0x138" size="4" description="" />
<symbol name="cache_ctl" address="csreg:0x140" size="4" description="" />
<symbol name="hsmp_saddr" address="csreg:0x148" size="4" description="" />
<symbol name="hsmp_eaddr" address="csreg:0x149" size="4" description="" />
<symbol name="sdz_ctl" address="csreg:0x178" size="4" description="" />
<symbol name="misc_ctl" address="csreg:0x179" size="4" description="" />
<symbol name="ecc_misc" address="csreg:0x17a" size="4" description="" />
<symbol name="bpc0" address="csreg:0x180" size="4" description="" />
<symbol name="bpc1" address="next" size="4" description="" />
<symbol name="bpc2" address="next" size="4" description="" />
<symbol name="bpc3" address="next" size="4" description="" />
<symbol name="bpc4" address="next" size="4" description="" />
<symbol name="bpc5" address="next" size="4" description="" />
<symbol name="bpc6" address="next" size="4" description="" />
<symbol name="bpc7" address="next" size="4" description="" />
<symbol name="bpa0" address="next" size="4" description="" />
<symbol name="bpa1" address="next" size="4" description="" />
<symbol name="bpa2" address="next" size="4" description="" />
<symbol name="bpa3" address="next" size="4" description="" />
<symbol name="bpa4" address="next" size="4" description="" />
<symbol name="bpa5" address="next" size="4" description="" />
<symbol name="bpa6" address="next" size="4" description="" />
<symbol name="bpa7" address="next" size="4" description="" />
<symbol name="bpam0" address="next" size="4" description="" />
<symbol name="bpam1" address="next" size="4" description="" />
<symbol name="bpam2" address="next" size="4" description="" />
<symbol name="bpam3" address="next" size="4" description="" />
<symbol name="bpam4" address="next" size="4" description="" />
<symbol name="bpam5" address="next" size="4" description="" />
<symbol name="bpam6" address="next" size="4" description="" />
<symbol name="bpam7" address="next" size="4" description="" />
<symbol name="bpv0" address="next" size="4" description="" />
<symbol name="bpv1" address="next" size="4" description="" />
<symbol name="bpv2" address="next" size="4" description="" />
<symbol name="bpv3" address="next" size="4" description="" />
<symbol name="bpv4" address="next" size="4" description="" />
<symbol name="bpv5" address="next" size="4" description="" />
<symbol name="bpv6" address="next" size="4" description="" />
<symbol name="bpv7" address="next" size="4" description="" />
<symbol name="bpcid0" address="next" size="4" description="" />
<symbol name="bpcid1" address="next" size="4" description="" />
<symbol name="bpcid2" address="next" size="4" description="" />
<symbol name="bpcid3" address="next" size="4" description="" />
<symbol name="bpcid4" address="next" size="4" description="" />
<symbol name="bpcid5" address="next" size="4" description="" />
<symbol name="bpcid6" address="next" size="4" description="" />
<symbol name="bpcid7" address="next" size="4" description="" />
<symbol name="edm_cfg" address="csreg:0x1a8" size="4" description="" />
<symbol name="edmsw" address="csreg:0x1b0" size="4" description="" />
<symbol name="edm_ctl" address="csreg:0x1b8" size="4" description="" />
<symbol name="edm_dtr" address="csreg:0x1c0" size="4" description="" />
<symbol name="bpmtc" address="csreg:0x1c8" size="4" description="" />
<symbol name="dimbr" address="csreg:0x1d0" size="4" description="" />
<symbol name="tecr0" address="csreg:0x1f0" size="4" description="" />
<symbol name="tecr1" address="csreg:0x1f1" size="4" description="" />
<symbol name="pfmc0" address="csreg:0x200" size="4" description="" />
<symbol name="pfmc1" address="csreg:0x201" size="4" description="" />
<symbol name="pfmc2" address="csreg:0x202" size="4" description="" />
<symbol name="pfm_ctl" address="csreg:0x208" size="4" description="" />
<symbol name="pft_ctl" address="csreg:0x210" size="4" description="" />
<symbol name="prusr_acc_ctl" address="csreg:0x220" size="4" description="" />
<symbol name="fucpr" address="csreg:0x228" size="4" description="" />
<symbol name="hsp_ctl" address="csreg:0x230" size="4" description="" />
<symbol name="sp_bound" address="csreg:0x231" size="4" description="" />
<symbol name="sp_bound_priv" address="csreg:0x230" size="4" description="" />
<symbol name="sp_base" address="csreg:0x230" size="4" description="" />
<symbol name="sp_base_priv" address="csreg:0x230" size="4" description="" />
<symbol name="dma_cfg" address="csreg:0x280" size="4" description="" />
<symbol name="dma_gcsw" address="csreg:0x288" size="4" description="" />
<symbol name="dma_chnsel" address="csreg:0x290" size="4" description="" />
<symbol name="dma_act" address="csreg:0x298" size="4" description="" />
<symbol name="dma_setup" address="csreg:0x2a0" size="4" description="" />
<symbol name="dma_isaddr" address="csreg:0x2a8" size="4" description="" />
<symbol name="dma_esaddr" address="csreg:0x2b0" size="4" description="" />
<symbol name="dma_tcnt" address="csreg:0x2b8" size="4" description="" />
<symbol name="dma_rcnt" address="csreg:0x2b9" size="4" description="" />
<symbol name="dma_status" address="csreg:0x2c0" size="4" description="" />
<symbol name="dma_hstatus" address="csreg:0x2c1" size="4" description="" />
<symbol name="dma_2dset" address="csreg:0x2c8" size="4" description="" />
<symbol name="dma_2dsctl" address="csreg:0x2c9" size="4" description="" />
<symbol name="secur0" address="csreg:0x300" size="4" description="" />
<symbol name="secur1" address="csreg:0x308" size="4" description="" />
<symbol name="secur2" address="csreg:0x309" size="4" description="" />
<symbol name="secur3" address="csreg:0x30a" size="4" description="" />
</default_symbols>
</processor_spec>

View File

@@ -5,11 +5,14 @@ define alignment=2;
define space ram type=ram_space size=4 wordsize=1 default;
define space register type=register_space size=4;
define space csreg type=ram_space size=2 wordsize=4;
@define CSR_REG_START "0x0000"
define register offset=0 size=4
[a0 a1 a2 a3 a4 a5 s0 s1 s2 s3 s4 s5 s6 s7 s8 ta t0 t1 t2 t3 t4 t5 t6 t7 t8 t9 p0 p1 fp gp lp sp];
define register offset=0x90 size=4
[pc ipc mult_addr mult_inc];
[pc mult_addr mult_inc];
define register offset=0x100 size=8
[d0 d1];
@@ -34,6 +37,111 @@ define register offset=0x1000 size=8
fd24 fd25 fd26 fd27 fd28 fd29 fd30 fd31
];
#define SRIDX(major, minor, ext) \
# (((major) << 7) | ((minor) << 3) | (ext))
define csreg offset=$(CSR_REG_START) size=4
[
cpu_ver core_id _ _ _ _ _ _ # SRIDX(0,0,n)
icm_cfg _ _ _ _ _ _ _ # SRIDX(0,1,n)
dcm_cfg _ _ _ _ _ _ _
mmu_cfg _ _ _ _ _ _ _
msc_cfg msc_cfg2 _ _ _ _ _ _
fucop_exist _ _ _ _ _ _ _
_ _ _ _ _ _ _ _
_ _ _ _ _ _ _ _ # SRIDX(0,7,n)
_ _ _ _ _ _ _ _
_ _ _ _ _ _ _ _
_ _ _ _ _ _ _ _
_ _ _ _ _ _ _ _
_ _ _ _ _ _ _ _
_ _ _ _ _ _ _ _
_ _ _ _ _ _ _ _
_ _ _ _ _ _ _ _ # SRIDX(0,15,n)
psw ipsw p_ipsw _ _ _ _ _ # SRIDX(1,0,n)
_ ivb int_ctrl int_gpr_push_dis _ _ _ _
_ eva p_eva _ _ _ _ _
_ itype p_itype _ _ _ _ _
_ merr _ _ _ _ _ _
_ ipc p_ipc oipc _ _ _ _
_ _ p_p0 _ _ _ _ _
_ _ p_p1 _ _ _ _ _ # SRIDX(1,7,n)
int_mask int_mask2 int_mask3 _ _ _ _ _
int_pend int_pend2 int_pend3 _ int_trigger int_trigger2 _ _
sp_usr sp_priv sp_usr1 sp_priv1 sp_usr2 sp_priv2 sp_usr3 sp_priv3
int_pri int_pri2 int_pri3 int_pri4 _ _ _ _
_ _ _ _ _ _ _ _
_ _ _ _ _ _ _ _
_ _ _ _ _ _ _ _
_ _ _ _ _ _ _ _ # SRIDX(1,15,n)
mmu_ctl bg_region _ _ _ _ _ _ # SRIDX(2,0,n)
l1_pptb _ _ _ _ _ _ _
tlb_vpn _ _ _ _ _ _ _
tlb_data _ _ _ _ _ _ _
tlb_misc _ _ _ _ _ _ _
vlpt_idx _ _ _ _ _ _ _
ilmb _ _ _ _ _ _ _
dlmb _ _ _ _ _ _ _ # SRIDX(2,7,n)
cache_ctl _ _ _ _ _ _ _
hsmp_saddr hsmp_eaddr _ _ _ _ _ _
_ _ _ _ _ _ _ _
_ _ _ _ _ _ _ _
_ _ _ _ _ _ _ _
_ _ _ _ _ _ _ _
_ _ _ _ _ _ _ _
sdz_ctl misc_ctl ecc_misc _ _ _ _ _ # SRIDX(2,15,n)
bpc0 bpc1 bpc2 bpc3 bpc4 bpc5 bpc6 bpc7 # SRIDX(3,0,n)
bpa0 bpa1 bpa2 bpa3 bpa4 bpa5 bpa6 bpa7
bpam0 bpam1 bpam2 bpam3 bpam4 bpam5 bpam6 bpam7
bpv0 bpv1 bpv2 bpv3 bpv4 bpv5 bpv6 bpv7
bpcid0 bpcid1 bpcid2 bpcid3 bpcid4 bpcid5 bpcid6 bpcid7
edm_cfg _ _ _ _ _ _ _
edmsw _ _ _ _ _ _ _
edm_ctl _ _ _ _ _ _ _ # SRIDX(3,7,n)
edm_dtr _ _ _ _ _ _ _
bpmtc _ _ _ _ _ _ _
dimbr _ _ _ _ _ _ _
_ _ _ _ _ _ _ _
_ _ _ _ _ _ _ _
_ _ _ _ _ _ _ _
tecr0 tecr1 _ _ _ _ _ _
_ _ _ _ _ _ _ _ # SRIDX(3,15,n)
pfmc0 pfmc1 pfmc2 _ _ _ _ _ # SRIDX(4,0,n)
pfm_ctl _ _ _ _ _ _ _
pft_ctl _ _ _ _ _ _ _
_ _ _ _ _ _ _ _
prusr_acc_ctl _ _ _ _ _ _ _
fucpr _ _ _ _ _ _ _
hsp_ctl sp_bound sp_bound_priv sp_base sp_base_priv _ _ _
_ _ _ _ _ _ _ _ # SRIDX(4,7,n)
_ _ _ _ _ _ _ _
_ _ _ _ _ _ _ _
_ _ _ _ _ _ _ _
_ _ _ _ _ _ _ _
_ _ _ _ _ _ _ _
_ _ _ _ _ _ _ _
_ _ _ _ _ _ _ _
_ _ _ _ _ _ _ _ # SRIDX(4,15,n)
dma_cfg _ _ _ _ _ _ _ # SRIDX(5,0,n)
dma_gcsw _ _ _ _ _ _ _
dma_chnsel _ _ _ _ _ _ _
dma_act _ _ _ _ _ _ _
dma_setup _ _ _ _ _ _ _
dma_isaddr _ _ _ _ _ _ _
dma_esaddr _ _ _ _ _ _ _
dma_tcnt dma_rcnt _ _ _ _ _ _ # SRIDX(5,7,n)
dma_status dma_hstatus _ _ _ _ _ _
dma_2dset dma_2dsctl _ _ _ _ _ _
_ _ _ _ _ _ _ _
_ _ _ _ _ _ _ _
_ _ _ _ _ _ _ _
_ _ _ _ _ _ _ _
_ _ _ _ _ _ _ _
_ _ _ _ _ _ _ _ # SRIDX(5,15,n)
secur0 _ _ _ _ _ _ _ # SRIDX(6,0,n)
secur1 secur2 secur3 _ _ _ _ _
];
define register offset=0x300 size=8 contextreg;
define context contextreg
counter = (22,26)
@@ -275,18 +383,38 @@ attach variables [ Fdt Fda Fdb ]
:msub32 Dtlow, Ra, Rb is $(I32) & $(ALU_2) & Dtl=0 & Dtlow & Dtr=0 & Ra & Rb & $(ALU2Z) & Sub6=0b110101 { Dtlow = Dtlow - (Ra * Rb); }
# TODO : special instruction, but used get the division results
# There are more special registers
UsrName: d0.lo is Group=0 & Usr=0 & d0.lo { export d0.lo; }
UsrName: d0.hi is Group=0 & Usr=1 & d0.hi { export d0.hi; }
UsrName: d1.lo is Group=0 & Usr=2 & d1.lo { export d1.lo; }
UsrName: d1.hi is Group=0 & Usr=3 & d1.hi { export d1.hi; }
UsrName: le is Group=0 & Usr=0b11010 & le { export le; }
UsrName: itb is Group=0 & Usr=0b11100 & itb { export itb; }
UsrName: lb is Group=0 & Usr=0b11001 & lb { export lb; }
UsrName: lc is Group=0 & Usr=0b11011 & lc { export lc; }
UsrName: ifc_lp is Group=0 & Usr=0b11101 & ifc_lp { export ifc_lp; }
#UsrName: pc is Group=0 & Usr=0b11111 & pc { export pc; }
# Group 0
UsrName: d0.lo is Group=0 & Usr=0 & d0.lo { export d0.lo; }
UsrName: d0.hi is Group=0 & Usr=1 & d0.hi { export d0.hi; }
UsrName: d1.lo is Group=0 & Usr=2 & d1.lo { export d1.lo; }
UsrName: d1.hi is Group=0 & Usr=3 & d1.hi { export d1.hi; }
UsrName: lb is Group=0 & Usr=25 & lb { export lb; }
UsrName: le is Group=0 & Usr=26 & le { export le; }
UsrName: lc is Group=0 & Usr=27 & lc { export lc; }
UsrName: itb is Group=0 & Usr=28 & itb { export itb; }
UsrName: ifc_lp is Group=0 & Usr=29 & ifc_lp { export ifc_lp; }
#UsrName: pc is Group=0 & Usr=31 & pc { export pc; } # handled separately
# Group 1
UsrName: dma_cfg is Group=1 & Usr=0 & dma_cfg { export dma_cfg; }
UsrName: dma_gcsw is Group=1 & Usr=1 & dma_gcsw { export dma_gcsw; }
UsrName: dma_chnsel is Group=1 & Usr=2 & dma_chnsel { export dma_chnsel; }
UsrName: dma_act is Group=1 & Usr=3 & dma_act { export dma_act; }
UsrName: dma_setup is Group=1 & Usr=4 & dma_setup { export dma_setup; }
UsrName: dma_isaddr is Group=1 & Usr=5 & dma_isaddr { export dma_isaddr; }
UsrName: dma_esaddr is Group=1 & Usr=6 & dma_esaddr { export dma_esaddr; }
UsrName: dma_tcnt is Group=1 & Usr=7 & dma_tcnt { export dma_tcnt; }
UsrName: dma_status is Group=1 & Usr=8 & dma_status { export dma_status; }
UsrName: dma_2dset is Group=1 & Usr=9 & dma_2dset { export dma_2dset; }
UsrName: dma_rcnt is Group=1 & Usr=23 & dma_rcnt { export dma_rcnt; }
UsrName: dma_hstatus is Group=1 & Usr=24 & dma_hstatus { export dma_hstatus; }
UsrName: dma_2dsctl is Group=1 & Usr=25 & dma_2dsctl { export dma_2dsctl; }
# Group 2
UsrName: pfmc0 is Group=2 & Usr=0 & pfmc0 { export pfmc0; }
UsrName: pfmc1 is Group=2 & Usr=1 & pfmc1 { export pfmc1; }
UsrName: pfmc2 is Group=2 & Usr=2 & pfmc2 { export pfmc2; }
UsrName: pfm_ctl is Group=2 & Usr=4 & pfm_ctl { export pfm_ctl; }
:mfusr Rt, UsrName is $(I32) & $(ALU_2) & Rt & UsrName & $(ALU2Z) & Sub6=0b100000 { UsrName = Rt; }
@@ -453,8 +581,10 @@ Rel16: addr is Imm16s [ addr = inst_start + (Imm16s << 1); ] { export *:4 addr;
define pcodeop mfsr;
define pcodeop mtsr;
:mfsr Rt, SrIdx is $(I32) & $(MISC) & Rt & SrIdx & Rd=0 & Sub5=0b00010 { Rt = mfsr(SrIdx:4); }
:mtsr Rt, SrIdx is $(I32) & $(MISC) & Rt & SrIdx & Rd=0 & Sub5=0b00011 { mtsr(SrIdx:4, Rt:4); }
csr: csr_reg is SrIdx [ csr_reg = $(CSR_REG_START) + SrIdx; ] { export *[csreg]:4 csr_reg; }
:mfsr Rt, csr is $(I32) & $(MISC) & Rt & csr & Rd=0 & Sub5=0b00010 { Rt = csr; }
:mtsr Rt, csr is $(I32) & $(MISC) & Rt & csr & Rd=0 & Sub5=0b00011 { csr = Rt; }
### Jump Register with System Register Update ###
@@ -1228,7 +1358,9 @@ define pcodeop ex9;
ex9(imm5u:4);
}
# Floating Point
##########################
# Floating Point Extension
# FPU_FS1
define pcodeop fadds;