summaryrefslogtreecommitdiffstats
path: root/sparc.c
diff options
context:
space:
mode:
authorJiri Gaisler <jiri@gaisler.se>2020-11-27 16:18:25 +0100
committerJiri Gaisler <jiri@gaisler.se>2020-11-27 16:18:25 +0100
commit416cfac77679c69ea79ecc207f72a4693186a6ca (patch)
tree74f5223bf03e48b406e8c24d35870d89349166a0 /sparc.c
parentAdd networking support using host tap device (diff)
downloadsis-416cfac77679c69ea79ecc207f72a4693186a6ca.tar.bz2
Add %asr22/23 support to leon32.24
Diffstat (limited to 'sparc.c')
-rw-r--r--sparc.c25
1 files changed, 19 insertions, 6 deletions
diff --git a/sparc.c b/sparc.c
index 82a9ed4..9f046ab 100644
--- a/sparc.c
+++ b/sparc.c
@@ -845,17 +845,27 @@ sparc_dispatch_instruction (sregs)
*rdd = sregs->psr;
break;
case RDY:
- *rdd = sregs->y;
if (cputype == CPU_LEON3)
{
- int rs1_is_asr = (sregs->inst >> 14) & 0x1f;
- if (0 == rs1_is_asr)
- *rdd = sregs->y;
- else if (17 == rs1_is_asr)
+ rs1 = (sregs->inst >> 14) & 0x1f;
+ switch (rs1)
{
+ case 0:
+ *rdd = sregs->y;
+ break;
+ case 17:
*rdd = sregs->asr17;
+ break;
+ case 22:
+ *rdd = (uint32) (sregs->simtime >> 32);
+ break;
+ case 23:
+ *rdd = (uint32) (sregs->simtime & 0xffffffff);
+ break;
}
}
+ else
+ *rdd = sregs->y;
break;
case RDWIM:
if (!(sregs->psr & PSR_S))
@@ -2058,8 +2068,11 @@ sparc_display_ctrl (struct pstate *sregs)
static void
sparc_display_special (struct pstate *sregs)
{
- printf ("\n cache ctrl : %08X\n asr17 : %08X\n\n",
+ printf ("\n cache ctrl : %08X\n asr17 : %08X",
sregs->cache_ctrl, sregs->asr17);
+ printf ("\n asr22 : %08X\n asr23 : %08X\n\n",
+ (uint32) (sregs->simtime >> 32),
+ (uint32) sregs->simtime & 0xffffffff);
}
static void