[xcc] minor performance tweaks
[riscv-isa-sim.git] / riscv / insns / mtpcr.h
index 79e28bf4c5c44a36f6bd7a86abef0c523b844657..46fbfdb23375ecd01955678a68a18adf178d6722 100644 (file)
@@ -1,33 +1,46 @@
 require_supervisor;
 
-switch(insn.rtype.rb)
+switch(insn.rtype.rs2)
 {
   case 0:
-    set_sr(RA);
+    set_sr(RS1);
     break;
   case 1:
-    epc = RA;
+    epc = RS1;
     break;
   case 3:
-    ebase = RA & ~0xFFF;
+    evec = RS1;
     break;
   case 4:
-    count = RA;
+    count = RS1;
     break;
   case 5:
-    interrupts_pending &= ~(1 << TIMER_IRQ);
-    compare = RA;
+    cause &= ~(1 << (TIMER_IRQ+CAUSE_IP_SHIFT));
+    compare = RS1;
+    break;
+
+  case 7:
+    sim->send_ipi(RS1);
+    break;
+
+  case 9:
+    mmu.set_ptbr(RS1);
+    break;
+
+  case 11:
+    vecbanks = RS1 & 0xff;
+    vecbanks_count = __builtin_popcountll(vecbanks);
     break;
 
   case 16:
-    tohost = RA;
-    sim->set_tohost(RA);
+    tohost = RS1;
+    sim->set_tohost(RS1);
     break;
 
   case 24:
-    pcr_k0 = RA;
+    pcr_k0 = RS1;
     break;
   case 25:
-    pcr_k1 = RA;
+    pcr_k1 = RS1;
     break;
 }