On 2/2/25 13:46, Richard Henderson wrote:
On 1/31/25 13:44, Artyom Tarasenko wrote:
fake access to
PCR Performance Control Register
and
PIC Performance Instrumentation Counter.

Ignore writes in privileged mode, and return 0 on reads.

This allows booting Tribblix, MilaX and v9os under Niagara target.

Signed-off-by: Artyom Tarasenko <atar4q...@gmail.com>
---
  target/sparc/insns.decode |  7 ++++++-
  target/sparc/translate.c  | 20 ++++++++++++++++++++
  2 files changed, 26 insertions(+), 1 deletion(-)

diff --git a/target/sparc/insns.decode b/target/sparc/insns.decode
index 989c20b44a..504147563c 100644
--- a/target/sparc/insns.decode
+++ b/target/sparc/insns.decode
@@ -96,7 +96,10 @@ CALL    01 i:s30
      RDTICK          10 rd:5  101000 00100 0 0000000000000
      RDPC            10 rd:5  101000 00101 0 0000000000000
      RDFPRS          10 rd:5  101000 00110 0 0000000000000
-    RDASR17         10 rd:5  101000 10001 0 0000000000000
+    {
+      RDASR17       10 rd:5  101000 10001 0 0000000000000
+      RDPIC         10 rd:5  101000 10001 0 0000000000000
+    }
      RDGSR           10 rd:5  101000 10011 0 0000000000000
      RDSOFTINT       10 rd:5  101000 10110 0 0000000000000
      RDTICK_CMPR     10 rd:5  101000 10111 0 0000000000000
@@ -114,6 +117,8 @@ CALL    01 i:s30
      WRCCR           10 00010 110000 ..... . .............  @n_r_ri
      WRASI           10 00011 110000 ..... . .............  @n_r_ri
      WRFPRS          10 00110 110000 ..... . .............  @n_r_ri
+    WRPCR           10 10000 110000 01000 0 0000000000000
+    WRPIC           10 10001 110000 01000 0 0000000000000
      {
        WRGSR         10 10011 110000 ..... . .............  @n_r_ri
        WRPOWERDOWN   10 10011 110000 ..... . .............  @n_r_ri
diff --git a/target/sparc/translate.c b/target/sparc/translate.c
index 7e5c7351cb..285c9b0a59 100644
--- a/target/sparc/translate.c
+++ b/target/sparc/translate.c
@@ -2882,6 +2882,15 @@ static TCGv do_rd_leon3_config(DisasContext *dc, TCGv 
dst)
  TRANS(RDASR17, ASR17, do_rd_special, true, a->rd, do_rd_leon3_config)
+static TCGv do_rdpic(DisasContext *dc, TCGv dst)
+{
+    tcg_gen_movi_tl(dst, 0UL);
+    return dst;
+}

return tcg_constant_tl(0);

+
+TRANS(RDPIC, HYPV, do_rd_special, true, a->rd, do_rdpic)

Surely reads are not allowed in user mode.

You might as well implement RDPCR as well, which *is* privileged.
Since PCR=0, then RDPCR is allowed.

It might be worthwhile to implement PCR, or at least PCR.PRIV.


r~

r~

Reply via email to