aboutsummaryrefslogtreecommitdiff
path: root/VexRiscv/src/test/cpp
diff options
context:
space:
mode:
Diffstat (limited to 'VexRiscv/src/test/cpp')
-rw-r--r--VexRiscv/src/test/cpp/briey/installs.txt22
-rw-r--r--VexRiscv/src/test/cpp/briey/jtag.gtkw40
-rw-r--r--VexRiscv/src/test/cpp/briey/main.cpp472
-rw-r--r--VexRiscv/src/test/cpp/briey/makefile59
-rw-r--r--VexRiscv/src/test/cpp/briey/sdram.gtkw115
-rw-r--r--VexRiscv/src/test/cpp/briey/wip.gtkw30
-rw-r--r--VexRiscv/src/test/cpp/common/framework.h287
-rw-r--r--VexRiscv/src/test/cpp/common/jtag.h177
-rw-r--r--VexRiscv/src/test/cpp/common/uart.h126
-rw-r--r--VexRiscv/src/test/cpp/custom/atomic/build/atomic.asm246
-rwxr-xr-xVexRiscv/src/test/cpp/custom/atomic/build/atomic.elfbin0 -> 5460 bytes
-rw-r--r--VexRiscv/src/test/cpp/custom/atomic/build/atomic.hex59
-rw-r--r--VexRiscv/src/test/cpp/custom/atomic/build/atomic.map31
-rwxr-xr-xVexRiscv/src/test/cpp/custom/atomic/build/atomic.v58
-rw-r--r--VexRiscv/src/test/cpp/custom/atomic/makefile73
-rw-r--r--VexRiscv/src/test/cpp/custom/atomic/src/crt.S265
-rw-r--r--VexRiscv/src/test/cpp/custom/atomic/src/ld17
-rw-r--r--VexRiscv/src/test/cpp/custom/custom_csr/build/custom_csr.asm55
-rwxr-xr-xVexRiscv/src/test/cpp/custom/custom_csr/build/custom_csr.elfbin0 -> 4644 bytes
-rw-r--r--VexRiscv/src/test/cpp/custom/custom_csr/build/custom_csr.hex12
-rw-r--r--VexRiscv/src/test/cpp/custom/custom_csr/build/custom_csr.map30
-rwxr-xr-xVexRiscv/src/test/cpp/custom/custom_csr/build/custom_csr.v12
-rw-r--r--VexRiscv/src/test/cpp/custom/custom_csr/makefile73
-rw-r--r--VexRiscv/src/test/cpp/custom/custom_csr/src/crt.S64
-rw-r--r--VexRiscv/src/test/cpp/custom/custom_csr/src/ld17
-rw-r--r--VexRiscv/src/test/cpp/custom/simd_add/build/custom_simd_add.asm63
-rwxr-xr-xVexRiscv/src/test/cpp/custom/simd_add/build/custom_simd_add.elfbin0 -> 4676 bytes
-rw-r--r--VexRiscv/src/test/cpp/custom/simd_add/build/custom_simd_add.hex14
-rw-r--r--VexRiscv/src/test/cpp/custom/simd_add/build/custom_simd_add.map30
-rwxr-xr-xVexRiscv/src/test/cpp/custom/simd_add/build/custom_simd_add.v14
-rw-r--r--VexRiscv/src/test/cpp/custom/simd_add/makefile73
-rw-r--r--VexRiscv/src/test/cpp/custom/simd_add/src/crt.S72
-rw-r--r--VexRiscv/src/test/cpp/custom/simd_add/src/ld15
-rw-r--r--VexRiscv/src/test/cpp/fpu/math/.gitignore2
-rw-r--r--VexRiscv/src/test/cpp/fpu/math/fpu_math.c79
-rw-r--r--VexRiscv/src/test/cpp/fpu/math/libcode.version4
-rw-r--r--VexRiscv/src/test/cpp/murax/main.cpp64
-rw-r--r--VexRiscv/src/test/cpp/murax/makefile42
-rw-r--r--VexRiscv/src/test/cpp/murax/murax.gtkw51
-rw-r--r--VexRiscv/src/test/cpp/raw/amo/.gitignore4
-rw-r--r--VexRiscv/src/test/cpp/raw/amo/build/amo.asm247
-rw-r--r--VexRiscv/src/test/cpp/raw/amo/build/amo.hex45
-rw-r--r--VexRiscv/src/test/cpp/raw/amo/makefile5
-rw-r--r--VexRiscv/src/test/cpp/raw/amo/src/crt.S174
-rw-r--r--VexRiscv/src/test/cpp/raw/amo/src/ld16
-rw-r--r--VexRiscv/src/test/cpp/raw/common/asm.mk89
-rw-r--r--VexRiscv/src/test/cpp/raw/dcache/.gitignore4
-rw-r--r--VexRiscv/src/test/cpp/raw/dcache/build/dcache.asm78
-rw-r--r--VexRiscv/src/test/cpp/raw/dcache/build/dcache.hex17
-rw-r--r--VexRiscv/src/test/cpp/raw/dcache/makefile3
-rw-r--r--VexRiscv/src/test/cpp/raw/dcache/src/crt.S75
-rw-r--r--VexRiscv/src/test/cpp/raw/dcache/src/ld16
-rw-r--r--VexRiscv/src/test/cpp/raw/deleg/.gitignore4
-rw-r--r--VexRiscv/src/test/cpp/raw/deleg/build/deleg.asm749
-rw-r--r--VexRiscv/src/test/cpp/raw/deleg/build/deleg.hex174
-rw-r--r--VexRiscv/src/test/cpp/raw/deleg/makefile3
-rw-r--r--VexRiscv/src/test/cpp/raw/deleg/src/crt.S399
-rw-r--r--VexRiscv/src/test/cpp/raw/deleg/src/encoding.h1471
-rw-r--r--VexRiscv/src/test/cpp/raw/deleg/src/ld16
-rw-r--r--VexRiscv/src/test/cpp/raw/fpu/.gitignore4
-rw-r--r--VexRiscv/src/test/cpp/raw/fpu/build/amo.asm247
-rw-r--r--VexRiscv/src/test/cpp/raw/fpu/build/amo.hex45
-rw-r--r--VexRiscv/src/test/cpp/raw/fpu/build/fpu.asm276
-rw-r--r--VexRiscv/src/test/cpp/raw/fpu/build/fpu.hex62
-rw-r--r--VexRiscv/src/test/cpp/raw/fpu/makefile5
-rw-r--r--VexRiscv/src/test/cpp/raw/fpu/src/crt.S193
-rw-r--r--VexRiscv/src/test/cpp/raw/fpu/src/ld16
-rw-r--r--VexRiscv/src/test/cpp/raw/icache/.gitignore4
-rw-r--r--VexRiscv/src/test/cpp/raw/icache/build/icache.asm51
-rw-r--r--VexRiscv/src/test/cpp/raw/icache/build/icache.hex11
-rw-r--r--VexRiscv/src/test/cpp/raw/icache/makefile3
-rw-r--r--VexRiscv/src/test/cpp/raw/icache/src/crt.S49
-rw-r--r--VexRiscv/src/test/cpp/raw/icache/src/ld16
-rw-r--r--VexRiscv/src/test/cpp/raw/lrsc/.gitignore4
-rw-r--r--VexRiscv/src/test/cpp/raw/lrsc/build/lrsc.asm180
-rw-r--r--VexRiscv/src/test/cpp/raw/lrsc/build/lrsc.hex40
-rw-r--r--VexRiscv/src/test/cpp/raw/lrsc/makefile5
-rw-r--r--VexRiscv/src/test/cpp/raw/lrsc/src/crt.S213
-rw-r--r--VexRiscv/src/test/cpp/raw/lrsc/src/ld16
-rw-r--r--VexRiscv/src/test/cpp/raw/machineCsr/.gitignore4
-rw-r--r--VexRiscv/src/test/cpp/raw/machineCsr/build/machineCsr.asm155
-rw-r--r--VexRiscv/src/test/cpp/raw/machineCsr/build/machineCsr.hex37
-rw-r--r--VexRiscv/src/test/cpp/raw/machineCsr/build/machineCsrCompressed.asm155
-rw-r--r--VexRiscv/src/test/cpp/raw/machineCsr/build/machineCsrCompressed.hex37
-rw-r--r--VexRiscv/src/test/cpp/raw/machineCsr/makefile11
-rw-r--r--VexRiscv/src/test/cpp/raw/machineCsr/src/crt.S157
-rw-r--r--VexRiscv/src/test/cpp/raw/machineCsr/src/ld16
-rw-r--r--VexRiscv/src/test/cpp/raw/mmu/.gitignore4
-rw-r--r--VexRiscv/src/test/cpp/raw/mmu/build/mmu.asm12430
-rw-r--r--VexRiscv/src/test/cpp/raw/mmu/build/mmu.hex3233
-rw-r--r--VexRiscv/src/test/cpp/raw/mmu/makefile3
-rw-r--r--VexRiscv/src/test/cpp/raw/mmu/src/crt.S526
-rw-r--r--VexRiscv/src/test/cpp/raw/mmu/src/ld16
-rw-r--r--VexRiscv/src/test/cpp/raw/pmp/build/pmp.asm258
-rwxr-xr-xVexRiscv/src/test/cpp/raw/pmp/build/pmp.elfbin0 -> 5776 bytes
-rw-r--r--VexRiscv/src/test/cpp/raw/pmp/build/pmp.hex58
-rw-r--r--VexRiscv/src/test/cpp/raw/pmp/build/pmp.map35
-rw-r--r--VexRiscv/src/test/cpp/raw/pmp/makefile3
-rw-r--r--VexRiscv/src/test/cpp/raw/pmp/src/crt.S269
-rw-r--r--VexRiscv/src/test/cpp/raw/pmp/src/ld16
-rw-r--r--VexRiscv/src/test/cpp/raw/smp/.gitignore6
-rw-r--r--VexRiscv/src/test/cpp/raw/smp/build/smp.asm441
-rwxr-xr-xVexRiscv/src/test/cpp/raw/smp/build/smp.binbin0 -> 1388 bytes
-rw-r--r--VexRiscv/src/test/cpp/raw/smp/makefile5
-rw-r--r--VexRiscv/src/test/cpp/raw/smp/src/crt.S287
-rw-r--r--VexRiscv/src/test/cpp/raw/smp/src/ld16
-rw-r--r--VexRiscv/src/test/cpp/regression/.gitignore3
-rw-r--r--VexRiscv/src/test/cpp/regression/atomic.gtkw52
-rw-r--r--VexRiscv/src/test/cpp/regression/branch.gtkw31
-rw-r--r--VexRiscv/src/test/cpp/regression/dcache.gtkw85
-rw-r--r--VexRiscv/src/test/cpp/regression/debug.gtkw96
-rw-r--r--VexRiscv/src/test/cpp/regression/default.gtkw100
-rw-r--r--VexRiscv/src/test/cpp/regression/dhrystoneO3.logRef57
-rw-r--r--VexRiscv/src/test/cpp/regression/dhrystoneO3C.logRef57
-rw-r--r--VexRiscv/src/test/cpp/regression/dhrystoneO3M.logRef57
-rw-r--r--VexRiscv/src/test/cpp/regression/dhrystoneO3MC.logRef57
-rw-r--r--VexRiscv/src/test/cpp/regression/encoding.h1471
-rw-r--r--VexRiscv/src/test/cpp/regression/fail.gtkw29
-rw-r--r--VexRiscv/src/test/cpp/regression/icache.gtkw67
-rw-r--r--VexRiscv/src/test/cpp/regression/main.cpp4514
-rw-r--r--VexRiscv/src/test/cpp/regression/makefile345
-rw-r--r--VexRiscv/src/test/cpp/regression/prediction.gtkw43
-rw-r--r--VexRiscv/src/test/cpp/regression/refDiff.gtkw40
-rw-r--r--VexRiscv/src/test/cpp/regression/wrongDiff.gtkw62
-rw-r--r--VexRiscv/src/test/cpp/regression/yolo.gtkw84
125 files changed, 33320 insertions, 0 deletions
diff --git a/VexRiscv/src/test/cpp/briey/installs.txt b/VexRiscv/src/test/cpp/briey/installs.txt
new file mode 100644
index 0000000..3cef523
--- /dev/null
+++ b/VexRiscv/src/test/cpp/briey/installs.txt
@@ -0,0 +1,22 @@
+sudo apt-get install libYAML-dev
+
+
+sudo apt-get update
+sudo apt-get install build-essential software-properties-common -y
+sudo add-apt-repository ppa:ubuntu-toolchain-r/test -y
+sudo apt-get update
+sudo apt-get install gcc-6 g++-6 -y
+sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-6 60 --slave /usr/bin/g++ g++ /usr/bin/g++-6
+
+
+wget -O boost_1_64_0.tar.gz http://sourceforge.net/projects/boost/files/boost/1.64.0/boost_1_64_0.tar.gz/download
+tar xzvf boost_1_64_0.tar.gz
+cd boost_1_64_0/
+./bootstrap.sh --prefix=/usr/local
+./b2
+sudo ./b2 install
+
+
+
+echo "using gcc : 6.3 : /usr/bin/g++-6 ; " >> tools/build/src/user-config.jam
+bjam --toolset=gcc-6
diff --git a/VexRiscv/src/test/cpp/briey/jtag.gtkw b/VexRiscv/src/test/cpp/briey/jtag.gtkw
new file mode 100644
index 0000000..6ce65f3
--- /dev/null
+++ b/VexRiscv/src/test/cpp/briey/jtag.gtkw
@@ -0,0 +1,40 @@
+[*]
+[*] GTKWave Analyzer v3.3.58 (w)1999-2014 BSI
+[*] Fri Jun 9 08:05:42 2017
+[*]
+[dumpfile] "/home/spinalvm/Spinal/VexRiscv/src/test/cpp/briey/Briey.vcd"
+[dumpfile_mtime] "Fri Jun 9 08:05:37 2017"
+[dumpfile_size] 2070466159
+[savefile] "/home/spinalvm/Spinal/VexRiscv/src/test/cpp/briey/jtag.gtkw"
+[timestart] 51980000000
+[size] 1776 953
+[pos] -1 -353
+*-33.000000 62611680000 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
+[treeopen] TOP.
+[treeopen] TOP.Briey.
+[treeopen] TOP.Briey.axi_jtagCtrl.
+[sst_width] 288
+[signals_width] 302
+[sst_expanded] 1
+[sst_vpaned_height] 503
+@28
+TOP.io_jtag_tck
+TOP.io_jtag_tdi
+TOP.io_jtag_tdo
+TOP.io_jtag_tms
+@22
+TOP.Briey.axi_jtagCtrl.jtagBridge_1.jtag_tap_fsm_state[3:0]
+TOP.Briey.axi_core_cpu.debug_bus_cmd_payload_address[7:0]
+TOP.Briey.axi_core_cpu.debug_bus_cmd_payload_data[31:0]
+@29
+TOP.Briey.axi_core_cpu.debug_bus_cmd_payload_wr
+@28
+TOP.Briey.axi_core_cpu.debug_bus_cmd_ready
+TOP.Briey.axi_core_cpu.debug_bus_cmd_valid
+@22
+TOP.Briey.axi_core_cpu.debug_bus_rsp_data[31:0]
+@28
+TOP.Briey.axi_core_cpu.DebugPlugin_haltIt
+TOP.Briey.axi_core_cpu.DebugPlugin_haltedByBreak
+[pattern_trace] 1
+[pattern_trace] 0
diff --git a/VexRiscv/src/test/cpp/briey/main.cpp b/VexRiscv/src/test/cpp/briey/main.cpp
new file mode 100644
index 0000000..bebe880
--- /dev/null
+++ b/VexRiscv/src/test/cpp/briey/main.cpp
@@ -0,0 +1,472 @@
+#include "VBriey.h"
+#include "VBriey_Briey.h"
+//#include "VBriey_Axi4VgaCtrl.h"
+//#include "VBriey_VgaCtrl.h"
+#ifdef REF
+#include "VBriey_RiscvCore.h"
+#endif
+#include "verilated.h"
+#include <stdio.h>
+#include <iostream>
+#include <stdlib.h>
+#include <stdint.h>
+#include <cstring>
+#include <string.h>
+#include <iostream>
+#include <fstream>
+#include <vector>
+#include <iomanip>
+#include <time.h>
+#include <unistd.h>
+
+#include "VBriey_VexRiscv.h"
+
+
+#include "../common/framework.h"
+#include "../common/jtag.h"
+#include "../common/uart.h"
+
+
+
+class SdramConfig{
+public:
+ uint32_t byteCount;
+ uint32_t bankCount;
+ uint32_t rowSize;
+ uint32_t colSize;
+
+ SdramConfig(uint32_t byteCount,
+ uint32_t bankCount,
+ uint32_t rowSize,
+ uint32_t colSize){
+ this->byteCount = byteCount;
+ this->bankCount = bankCount;
+ this->rowSize = rowSize;
+ this->colSize = colSize;
+ }
+};
+
+class SdramIo{
+public:
+ CData *BA;
+ CData *DQM;
+ CData *CASn;
+ CData *CKE;
+ CData *CSn;
+ CData *RASn;
+ CData *WEn;
+ SData *ADDR;
+ CData *DQ_read;
+ CData *DQ_write;
+ CData *DQ_writeEnable;
+};
+
+class Sdram : public SimElement{
+public:
+
+ SdramConfig *config;
+ SdramIo *io;
+
+ uint32_t CAS;
+ uint32_t burstLength;
+
+ class Bank{
+ public:
+ uint8_t *data;
+ SdramConfig *config;
+
+ bool opened;
+ uint32_t openedRow;
+ void init(SdramConfig *config){
+ this->config = config;
+ data = new uint8_t[config->rowSize * config->colSize * config->byteCount];
+ opened = false;
+ }
+
+ virtual ~Bank(){
+ delete data;
+ }
+
+ void activate(uint32_t row){
+ if(opened)
+ cout << "SDRAM error open unclosed bank" << endl;
+ openedRow = row;
+ opened = true;
+ }
+
+ void precharge(){
+ opened = false;
+ }
+
+ void write(uint32_t column, CData byteId, CData data){
+ if(!opened)
+ cout << "SDRAM : write in closed bank" << endl;
+ uint32_t addr = byteId + (column + openedRow * config->colSize) * config->byteCount;
+ //printf("SDRAM : Write A=%08x D=%02x\n",addr,data);
+ this->data[addr] = data;
+
+ }
+
+ CData read(uint32_t column, CData byteId){
+ if(!opened)
+ cout << "SDRAM : write in closed bank" << endl;
+ uint32_t addr = byteId + (column + openedRow * config->colSize) * config->byteCount;
+ //printf("SDRAM : Read A=%08x D=%02x\n",addr,data[addr]);
+ return data[addr];
+ }
+ };
+
+ Bank* banks;
+
+ CData * readShifter;
+
+ Sdram(SdramConfig *config,SdramIo* io){
+ this->config = config;
+ this->io = io;
+ banks = new Bank[config->bankCount];
+ for(uint32_t bankId = 0;bankId < config->bankCount;bankId++) banks[bankId].init(config);
+ readShifter = new CData[config->byteCount*3];
+ }
+
+ virtual ~Sdram(){
+ delete banks;
+ delete readShifter;
+ }
+
+
+ uint8_t ckeLast = 0;
+
+
+ virtual void postCycle(){
+ if(CAS >= 2 && CAS <=3){
+ for(uint32_t byteId = 0;byteId != config->byteCount;byteId++){
+ io->DQ_read[byteId] = readShifter[byteId + (CAS-1)*config->byteCount];
+ }
+ for(uint32_t latency = CAS-1;latency != 0;latency--){ //missing CKE
+ for(uint32_t byteId = 0;byteId != config->byteCount;byteId++){
+ readShifter[byteId+latency*config->byteCount] = readShifter[byteId+(latency-1)*config->byteCount];
+ }
+ }
+ }
+ }
+
+ virtual void preCycle(){
+ if(!*io->CSn && ckeLast){
+ uint32_t code = ((*io->RASn) << 2) | ((*io->CASn) << 1) | ((*io->WEn) << 0);
+ switch(code){
+ case 0: //Mode register set
+ if(*io->BA == 0 && (*io->ADDR & 0x400) == 0){
+ CAS = ((*io->ADDR) >> 4) & 0x7;
+ burstLength = ((*io->ADDR) >> 0) & 0x7;
+ if((*io->ADDR & 0x388) != 0)
+ cout << "SDRAM : ???" << endl;
+ printf("SDRAM : MODE REGISTER DEFINITION CAS=%d burstLength=%d\n",CAS,burstLength);
+ }
+ break;
+ case 2: //Bank precharge
+ if((*io->ADDR & 0x400) != 0){ //all
+ for(uint32_t bankId = 0;bankId < config->bankCount;bankId++)
+ banks[bankId].precharge();
+ } else { //single
+ banks[*io->BA].precharge();
+ }
+ break;
+ case 3: //Bank activate
+ banks[*io->BA].activate(*io->ADDR & 0x7FF);
+ break;
+ case 4: //Write
+ if((*io->ADDR & 0x400) != 0)
+ cout << "SDRAM : Write autoprecharge not supported" << endl;
+
+ if(*io->DQ_writeEnable == 0)
+ cout << "SDRAM : Write Wrong DQ direction" << endl;
+
+ for(uint32_t byteId = 0;byteId < config->byteCount;byteId++){
+ if(((*io->DQM >> byteId) & 1) == 0)
+ banks[*io->BA].write(*io->ADDR, byteId ,io->DQ_write[byteId]);
+ }
+ break;
+
+ case 5: //Read
+ if((*io->ADDR & 0x400) != 0)
+ cout << "SDRAM : READ autoprecharge not supported" << endl;
+
+ if(*io->DQ_writeEnable != 0)
+ cout << "SDRAM : READ Wrong DQ direction" << endl;
+
+ //if(*io->DQM != config->byteCount-1)
+ //cout << "SDRAM : READ wrong DQM" << endl;
+
+ for(uint32_t byteId = 0;byteId < config->byteCount;byteId++){
+ readShifter[byteId] = banks[*io->BA].read(*io->ADDR, byteId);
+ }
+ break;
+ case 1: // Self refresh
+ break;
+ case 7: // NOP
+ break;
+ default:
+ cout << "SDRAM : unknown code" << endl;
+ break;
+ }
+ }
+ ckeLast = *io->CKE;
+ }
+};
+
+
+class VexRiscvTracer : public SimElement{
+public:
+ VBriey_VexRiscv *cpu;
+ ofstream instructionTraces;
+ ofstream regTraces;
+
+ VexRiscvTracer(VBriey_VexRiscv *cpu){
+ this->cpu = cpu;
+#ifdef TRACE_INSTRUCTION
+ instructionTraces.open ("instructionTrace.log");
+#endif
+#ifdef TRACE_REG
+ regTraces.open ("regTraces.log");
+#endif
+ }
+
+
+
+ virtual void preCycle(){
+#ifdef TRACE_INSTRUCTION
+ if(cpu->writeBack_arbitration_isFiring){
+ instructionTraces << hex << setw(8) << cpu->writeBack_INSTRUCTION << endl;
+ }
+#endif
+#ifdef TRACE_REG
+ if(cpu->writeBack_RegFilePlugin_regFileWrite_valid == 1 && cpu->writeBack_RegFilePlugin_regFileWrite_payload_address != 0){
+ regTraces << " PC " << hex << setw(8) << cpu->writeBack_PC << " : reg[" << dec << setw(2) << (uint32_t)cpu->writeBack_RegFilePlugin_regFileWrite_payload_address << "] = " << hex << setw(8) << cpu->writeBack_RegFilePlugin_regFileWrite_payload_data << endl;
+ }
+
+#endif
+ }
+};
+
+
+
+
+#include <SDL2/SDL.h>
+#include <assert.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+
+class Display : public SimElement{
+public:
+ int width, height;
+ uint32_t *pixels;
+ SDL_Window* window;
+ SDL_Renderer* renderer;
+ SDL_Texture * texture;
+ uint32_t x,y;
+ uint32_t refreshCounter = 0;
+
+ Display(int width, int height){
+ this->width = width;
+ this->height = height;
+ x = y = 0;
+ init();
+ }
+
+ virtual ~Display(){
+ delete[] pixels;
+ SDL_DestroyTexture(texture);
+ SDL_DestroyRenderer(renderer);
+ SDL_DestroyWindow(window);
+ SDL_Quit();
+ }
+
+ void init(){
+
+ /* Initialize SDL. */
+ if (SDL_Init(SDL_INIT_VIDEO) < 0)
+ return;
+
+ /* Create the window where we will draw. */
+ window = SDL_CreateWindow("VGA",
+ SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED,
+ width, height,
+ SDL_WINDOW_SHOWN);
+
+ /* We must call SDL_CreateRenderer in order for draw calls to affect this window. */
+ renderer = SDL_CreateRenderer(window, -1, 0);
+
+ texture = SDL_CreateTexture(renderer,
+ SDL_PIXELFORMAT_ARGB8888, SDL_TEXTUREACCESS_STATIC, width, height);
+ pixels = new Uint32[width * height];
+ memset(pixels, 0, width * height * sizeof(Uint32));
+ }
+
+ void set(uint32_t color){
+ pixels[x + y*width] = color;
+ }
+
+ void incX(){
+ x++;
+ if(x >= width) x = width;
+ }
+
+ void incY(){
+ y++;
+ if(y >= height) y = height;
+ }
+
+ void refresh(){
+ //cout << "Display refresh " << refreshCounter++ << endl;
+ SDL_UpdateTexture(texture, NULL, pixels, 640 * sizeof(Uint32));
+ SDL_RenderClear(renderer);
+ SDL_RenderCopy(renderer, texture, NULL, NULL);
+ SDL_RenderPresent(renderer);
+ memset(pixels, 0, width * height * sizeof(Uint32));
+ }
+
+ virtual void postCycle(){
+
+ }
+
+ virtual void preCycle(){
+
+ }
+};
+
+class Vga : public Display{
+public:
+ VBriey* top;
+ Vga(VBriey* top,int width, int height) : Display(width, height){
+ this->top = top;
+ }
+
+ virtual ~Vga(){
+ }
+
+ virtual void postCycle(){
+
+ }
+
+ uint32_t lastvSync = 0,lasthSync = 0;
+ virtual void preCycle(){
+ if(!top->io_vga_vSync && lastvSync) {
+ y = 0;
+ refresh();
+ }
+ if(!top->io_vga_hSync && lasthSync && x != 0) {
+ incY();
+ x = 0;
+ }
+ if(top->io_vga_colorEn){
+ this->set((top->io_vga_color_r << 19) + (top->io_vga_color_g << 10) + (top->io_vga_color_b << 3));
+ incX();
+ }
+
+ lastvSync = top->io_vga_vSync;
+ lasthSync = top->io_vga_hSync;
+ }
+};
+
+class BrieyWorkspace : public Workspace<VBriey>{
+public:
+ BrieyWorkspace() : Workspace("Briey"){
+ ClockDomain *axiClk = new ClockDomain(&top->io_axiClk,NULL,20000,100000);
+ ClockDomain *vgaClk = new ClockDomain(&top->io_vgaClk,NULL,40000,100000);
+ AsyncReset *asyncReset = new AsyncReset(&top->io_asyncReset,50000);
+ Jtag *jtag = new Jtag(&top->io_jtag_tms,&top->io_jtag_tdi,&top->io_jtag_tdo,&top->io_jtag_tck,80000);
+ UartRx *uartRx = new UartRx(&top->io_uart_txd,1.0e12/115200);
+ timeProcesses.push_back(axiClk);
+ timeProcesses.push_back(vgaClk);
+ timeProcesses.push_back(asyncReset);
+ timeProcesses.push_back(jtag);
+ timeProcesses.push_back(uartRx);
+ top->io_uart_rxd = 1;
+
+
+ SdramConfig *sdramConfig = new SdramConfig(
+ 2, //byteCount
+ 4, //bankCount
+ 1 << 13, //rowSize
+ 1 << 10 //colSize
+ );
+ SdramIo *sdramIo = new SdramIo();
+ sdramIo->BA = &top->io_sdram_BA ;
+ sdramIo->DQM = &top->io_sdram_DQM ;
+ sdramIo->CASn = &top->io_sdram_CASn ;
+ sdramIo->CKE = &top->io_sdram_CKE ;
+ sdramIo->CSn = &top->io_sdram_CSn ;
+ sdramIo->RASn = &top->io_sdram_RASn ;
+ sdramIo->WEn = &top->io_sdram_WEn ;
+ sdramIo->ADDR = &top->io_sdram_ADDR ;
+ sdramIo->DQ_read = (CData*)&top->io_sdram_DQ_read ;
+ sdramIo->DQ_write = (CData*)&top->io_sdram_DQ_write ;
+ sdramIo->DQ_writeEnable = (CData*)&top->io_sdram_DQ_writeEnable;
+ Sdram *sdram = new Sdram(sdramConfig, sdramIo);
+
+ axiClk->add(sdram);
+ #ifdef TRACE
+ //speedFactor = 100e-6;
+ //cout << "Simulation caped to " << timeToSec << " of real time"<< endl;
+ #endif
+
+ axiClk->add(new VexRiscvTracer(top->Briey->axi_core_cpu));
+
+ #ifdef VGA
+ Vga *vga = new Vga(top,640,480);
+ vgaClk->add(vga);
+ #endif
+
+ top->io_coreInterrupt = 0;
+ }
+
+
+ /*bool trigged = false;
+ uint32_t frameStartCounter = 0;
+ virtual void dump(uint64_t i){
+ if(!trigged) {
+ if(top->Briey->axi_vgaCtrl->vga_ctrl->io_frameStart) {
+ frameStartCounter++;
+ if(frameStartCounter < 3*32) cout << "**\n" << endl;
+ }
+ if(top->Briey->axi_vgaCtrl->vga_ctrl->io_error && frameStartCounter > 3*32) trigged = true;
+ }
+ if(trigged)Workspace::dump(i);
+ }*/
+
+
+};
+
+
+struct timespec timer_start(){
+ struct timespec start_time;
+ clock_gettime(CLOCK_PROCESS_CPUTIME_ID, &start_time);
+ return start_time;
+}
+
+long timer_end(struct timespec start_time){
+ struct timespec end_time;
+ clock_gettime(CLOCK_PROCESS_CPUTIME_ID, &end_time);
+ uint64_t diffInNanos = end_time.tv_sec*1e9 + end_time.tv_nsec - start_time.tv_sec*1e9 - start_time.tv_nsec;
+ return diffInNanos;
+}
+
+
+
+int main(int argc, char **argv, char **env) {
+
+ Verilated::randReset(2);
+ Verilated::commandArgs(argc, argv);
+
+ printf("BOOT\n");
+ timespec startedAt = timer_start();
+
+ BrieyWorkspace().run(1e9);
+
+ uint64_t duration = timer_end(startedAt);
+ cout << endl << "****************************************************************" << endl;
+
+
+ exit(0);
+}
diff --git a/VexRiscv/src/test/cpp/briey/makefile b/VexRiscv/src/test/cpp/briey/makefile
new file mode 100644
index 0000000..e0a024b
--- /dev/null
+++ b/VexRiscv/src/test/cpp/briey/makefile
@@ -0,0 +1,59 @@
+DEBUG?=no
+TRACE?=no
+TRACE_INSTRUCTION?=no
+TRACE_REG?=no
+PRINT_PERF?=no
+VGA?=yes
+TRACE_START=0
+ADDCFLAGS += -CFLAGS -pthread
+ADDCFLAGS += -CFLAGS -lSDL2
+ADDCFLAGS += -LDFLAGS -lSDL2
+
+
+
+ifeq ($(TRACE),yes)
+ VERILATOR_ARGS += --trace
+ ADDCFLAGS += -CFLAGS -DTRACE --trace-fst
+endif
+ifeq ($(DEBUG),yes)
+ ADDCFLAGS += -CFLAGS "-g3 -O0"
+endif
+ifneq ($(DEBUG),yes)
+ ADDCFLAGS += -CFLAGS "-O3"
+endif
+ifeq ($(PRINT_PERF),yes)
+ ADDCFLAGS += -CFLAGS -DPRINT_PERF
+endif
+
+ifeq ($(VGA),yes)
+ ADDCFLAGS += -CFLAGS -DVGA
+endif
+ifeq ($(TRACE_INSTRUCTION),yes)
+ ADDCFLAGS += -CFLAGS -DTRACE_INSTRUCTION
+endif
+
+ifeq ($(TRACE_REG),yes)
+ ADDCFLAGS += -CFLAGS -DTRACE_REG
+endif
+
+ADDCFLAGS += -CFLAGS -DTRACE_START=${TRACE_START}
+
+
+
+all: clean compile
+
+run: compile
+ ./obj_dir/VBriey
+
+verilate: ../../../../Briey.v
+ rm -f Briey.v*.bin
+ cp ../../../../Briey.v*.bin . | true
+ verilator -cc ../../../../Briey.v -CFLAGS -std=c++11 ${ADDCFLAGS} --gdbbt ${VERILATOR_ARGS} -Wno-WIDTH -Wno-UNOPTFLAT --x-assign unique --exe main.cpp
+
+compile: verilate
+ make -j -C obj_dir/ -f VBriey.mk VBriey
+
+clean:
+ rm -f Briey.v*.bin
+ rm -rf obj_dir
+
diff --git a/VexRiscv/src/test/cpp/briey/sdram.gtkw b/VexRiscv/src/test/cpp/briey/sdram.gtkw
new file mode 100644
index 0000000..e3fcbc8
--- /dev/null
+++ b/VexRiscv/src/test/cpp/briey/sdram.gtkw
@@ -0,0 +1,115 @@
+[*]
+[*] GTKWave Analyzer v3.3.58 (w)1999-2014 BSI
+[*] Wed Jun 7 01:18:28 2017
+[*]
+[dumpfile] "/home/spinalvm/Spinal/VexRiscv/src/test/cpp/briey/Briey.vcd"
+[dumpfile_mtime] "Wed Jun 7 01:17:07 2017"
+[dumpfile_size] 1021433582
+[savefile] "/home/spinalvm/Spinal/VexRiscv/src/test/cpp/briey/sdram.gtkw"
+[timestart] 20762992700
+[size] 1776 953
+[pos] -1 -353
+*-16.000000 20763117800 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
+[treeopen] TOP.
+[treeopen] TOP.Briey.
+[treeopen] TOP.Briey.axi_jtagCtrl.
+[treeopen] TOP.Briey.axi_sdramCtrl.
+[sst_width] 325
+[signals_width] 456
+[sst_expanded] 1
+[sst_vpaned_height] 503
+@28
+TOP.Briey.axi_core_cpu.DebugPlugin_haltIt
+TOP.Briey.axi_sdramCtrl.io_sdram_BA[1:0]
+TOP.Briey.axi_sdramCtrl.io_sdram_CKE
+TOP.Briey.axi_sdramCtrl.io_sdram_CSn
+TOP.Briey.axi_sdramCtrl.io_sdram_DQM[1:0]
+@22
+TOP.Briey.axi_sdramCtrl.io_sdram_DQ_read[15:0]
+@28
+TOP.Briey.axi_sdramCtrl.io_sdram_DQ_writeEnable
+@22
+TOP.Briey.axi_sdramCtrl.io_sdram_DQ_write[15:0]
+@28
+TOP.Briey.axi_sdramCtrl.io_sdram_RASn
+TOP.Briey.axi_sdramCtrl.io_sdram_CASn
+TOP.Briey.axi_sdramCtrl.io_sdram_WEn
+@24
+TOP.Briey.axi_sdramCtrl.io_sdram_ADDR[12:0]
+@22
+TOP.Briey.axi_sdramCtrl.ctrl.io_bus_cmd_payload_context_id[3:0]
+@28
+TOP.Briey.axi_sdramCtrl.ctrl.io_bus_cmd_payload_context_last
+@22
+TOP.Briey.axi_sdramCtrl.ctrl.io_bus_cmd_payload_data[15:0]
+@28
+TOP.Briey.axi_sdramCtrl.ctrl.io_bus_cmd_payload_mask[1:0]
+TOP.Briey.axi_sdramCtrl.ctrl.io_bus_cmd_valid
+TOP.Briey.axi_sdramCtrl.ctrl.io_bus_cmd_ready
+@22
+TOP.Briey.axi_sdramCtrl.ctrl.io_bus_cmd_payload_address[24:0]
+@28
+TOP.Briey.axi_sdramCtrl.ctrl.io_bus_cmd_payload_write
+@22
+TOP.Briey.axi_sdramCtrl.ctrl.io_bus_rsp_payload_context_id[3:0]
+@28
+TOP.Briey.axi_sdramCtrl.ctrl.io_bus_rsp_payload_context_last
+@22
+TOP.Briey.axi_sdramCtrl.ctrl.io_bus_rsp_payload_data[15:0]
+@28
+TOP.Briey.axi_sdramCtrl.ctrl.io_bus_rsp_ready
+TOP.Briey.axi_sdramCtrl.ctrl.io_bus_rsp_valid
+TOP.Briey.axi_core_cpu.DebugPlugin_haltIt
+TOP.Briey.axi_core_cpu.DebugPlugin_haltedByBreak
+TOP.Briey.axi_core_cpu.DebugPlugin_isPipBusy
+TOP.Briey.axi_core_cpu.DebugPlugin_resetIt
+TOP.Briey.axi_core_cpu.DebugPlugin_stepIt
+TOP.Briey.axi_core_cpu.DebugPlugin_insertDecodeInstruction
+@22
+TOP.Briey.axi_jtagCtrl.debugger.io_mem_cmd_payload_address[31:0]
+TOP.Briey.axi_jtagCtrl.debugger.io_mem_cmd_payload_data[31:0]
+@28
+TOP.Briey.axi_jtagCtrl.debugger.io_mem_cmd_payload_size[1:0]
+TOP.Briey.axi_jtagCtrl.debugger.io_mem_cmd_payload_wr
+@29
+TOP.Briey.axi_jtagCtrl.debugger.io_mem_cmd_ready
+@28
+TOP.Briey.axi_jtagCtrl.debugger.io_mem_cmd_valid
+@22
+TOP.Briey.axi_jtagCtrl.debugger.io_mem_rsp_payload[31:0]
+@28
+TOP.Briey.axi_jtagCtrl.debugger.io_mem_rsp_valid
+@22
+TOP.Briey.axi_core_cpu.prefetch_PC[31:0]
+TOP.Briey.axi_core_cpu.execute_PC[31:0]
+@28
+TOP.Briey.axi_core_cpu.execute_IS_EBREAK
+TOP.Briey.axi_core_cpu.execute_arbitration_isValid
+@22
+TOP.Briey.axi_core_cpu.DebugPlugin_busReadDataReg[31:0]
+@28
+TOP.Briey.axi_core_cpu.writeBack_arbitration_isValid
+@22
+TOP.Briey.axi_core_cpu.writeBack_REGFILE_WRITE_DATA[31:0]
+TOP.Briey.axi_core_cpu.writeBack_PC[31:0]
+TOP.Briey.axi_core_cpu.execute_REGFILE_WRITE_DATA[31:0]
+TOP.Briey.axi_core_cpu.execute_SRC1[31:0]
+TOP.Briey.axi_core_cpu.execute_SRC2[31:0]
+TOP.Briey.axi_core_cpu.decode_SRC1[31:0]
+@28
+TOP.Briey.axi_core_cpu.decode_SRC1_CTRL[1:0]
+@22
+TOP.Briey.axi_core_cpu.decode_SRC2[31:0]
+@28
+TOP.Briey.axi_core_cpu.decode_SRC2_CTRL[1:0]
+@22
+TOP.Briey.axi_core_cpu.decode_REG1[31:0]
+TOP.Briey.axi_core_cpu.RegFilePlugin_regFile(0)[31:0]
+TOP.Briey.axi_core_cpu.decode_RegFilePlugin_regFileReadAddress1[4:0]
+@28
+TOP.Briey.axi_core_cpu.decode_IS_EBREAK
+TOP.Briey.axi_core_cpu.decode_arbitration_isValid
+@22
+TOP.Briey.axi_core_cpu.decode_INSTRUCTION[31:0]
+[pattern_trace] 1
+[pattern_trace] 0
diff --git a/VexRiscv/src/test/cpp/briey/wip.gtkw b/VexRiscv/src/test/cpp/briey/wip.gtkw
new file mode 100644
index 0000000..b26d6e2
--- /dev/null
+++ b/VexRiscv/src/test/cpp/briey/wip.gtkw
@@ -0,0 +1,30 @@
+[*]
+[*] GTKWave Analyzer v3.3.58 (w)1999-2014 BSI
+[*] Sun Jul 9 22:38:21 2017
+[*]
+[dumpfile] "/home/spinalvm/Spinal/VexRiscv/src/test/cpp/briey/Briey.vcd"
+[dumpfile_mtime] "Sun Jul 9 22:38:03 2017"
+[dumpfile_size] 1880556694
+[savefile] "/home/spinalvm/Spinal/VexRiscv/src/test/cpp/briey/wip.gtkw"
+[timestart] 225385490000
+[size] 1776 953
+[pos] -775 -1
+*-24.000000 225374620001 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
+[treeopen] TOP.
+[treeopen] TOP.Briey.
+[treeopen] TOP.Briey.axi_vgaCtrl.
+[sst_width] 358
+[signals_width] 150
+[sst_expanded] 1
+[sst_vpaned_height] 279
+@28
+TOP.Briey.axi_vgaCtrl.vga_ctrl.io_frameStart
+TOP.Briey.axi_vgaCtrl.vga_ctrl.io_pixels_ready
+TOP.Briey.axi_vgaCtrl.vga_ctrl.io_pixels_valid
+TOP.Briey.axi_vgaCtrl.vga_ctrl.io_softReset
+TOP.Briey.axi_vgaCtrl.vga_ctrl.io_vgaClk
+TOP.Briey.axi_vgaCtrl.vga_ctrl.io_vga_colorEn
+@29
+TOP.Briey.axi_vgaCtrl.vga_run
+[pattern_trace] 1
+[pattern_trace] 0
diff --git a/VexRiscv/src/test/cpp/common/framework.h b/VexRiscv/src/test/cpp/common/framework.h
new file mode 100644
index 0000000..ed419ad
--- /dev/null
+++ b/VexRiscv/src/test/cpp/common/framework.h
@@ -0,0 +1,287 @@
+
+#include <stdio.h>
+#include <iostream>
+#include <stdlib.h>
+#include <stdint.h>
+#include <cstring>
+#include <string.h>
+#include <iostream>
+#include <fstream>
+#include <vector>
+#include <iomanip>
+#include <time.h>
+#include <unistd.h>
+#include "verilated_fst_c.h"
+
+using namespace std;
+
+class SimElement{
+public:
+ virtual ~SimElement(){}
+ virtual void onReset(){}
+ virtual void postReset(){}
+ virtual void preCycle(){}
+ virtual void postCycle(){}
+};
+
+//#include <functional>
+class TimeProcess{
+public:
+ uint64_t wakeDelay = 0;
+ bool wakeEnable = false;
+// std::function<int(double)> lambda;
+ virtual ~TimeProcess(){}
+ virtual void schedule(uint64_t delay){
+ wakeDelay = delay;
+ wakeEnable = true;
+ }
+ virtual void tick(){
+// lambda = [this](double x) { return x+1 + this->wakeDelay; };
+// lambda(1.0);
+ }
+};
+
+
+class SensitiveProcess{
+public:
+
+ virtual ~SensitiveProcess(){}
+ virtual void tick(uint64_t time){
+
+ }
+};
+
+class ClockDomain : public TimeProcess{
+public:
+ CData* clk;
+ CData* reset;
+ uint64_t tooglePeriod;
+ vector<SimElement*> simElements;
+ ClockDomain(CData *clk, CData *reset, uint64_t period, uint64_t delay){
+ this->clk = clk;
+ this->reset = reset;
+ *clk = 0;
+ this->tooglePeriod = period/2;
+ schedule(delay);
+ }
+
+
+ bool postCycle = false;
+ virtual void tick(){
+ if(*clk == 0){
+ for(SimElement* simElement : simElements){
+ simElement->preCycle();
+ }
+ postCycle = true;
+ *clk = 1;
+ schedule(0);
+ }else{
+ if(postCycle){
+ postCycle = false;
+ for(SimElement* simElement : simElements){
+ simElement->postCycle();
+ }
+ }else{
+ *clk = 0;
+ }
+ schedule(tooglePeriod);
+ }
+
+ }
+
+ void add(SimElement *that){
+ simElements.push_back(that);
+ }
+
+};
+
+class AsyncReset : public TimeProcess{
+public:
+ CData* reset;
+ uint32_t state;
+ uint64_t duration;
+ AsyncReset(CData *reset, uint64_t duration){
+ this->reset = reset;
+ *reset = 0;
+ state = 0;
+ this->duration = duration;
+ schedule(0);
+ }
+
+ virtual void tick(){
+ switch(state){
+ case 0:
+ *reset = 1;
+ state = 1;
+ schedule(duration);
+ break;
+ case 1:
+ *reset = 0;
+ state = 2;
+ break;
+ }
+ }
+
+};
+
+
+
+class success : public std::exception { };
+template <class T> class Workspace{
+public:
+
+ vector<TimeProcess*> timeProcesses;
+ vector<SensitiveProcess*> checkProcesses;
+ T* top;
+ bool resetDone = false;
+ double timeToSec = 1e-12;
+ double speedFactor = 1.0;
+ uint64_t allowedTime = 0;
+ string name;
+ uint64_t time = 0;
+ #ifdef TRACE
+ VerilatedFstC* tfp;
+ #endif
+
+ ofstream logTraces;
+
+ Workspace(string name){
+ this->name = name;
+ top = new T;
+ logTraces.open (name + ".logTrace");
+ }
+
+ virtual ~Workspace(){
+ delete top;
+ #ifdef TRACE
+ delete tfp;
+ #endif
+
+ for(auto* p : timeProcesses) delete p;
+ for(auto* p : checkProcesses) delete p;
+
+ }
+
+ Workspace* setSpeedFactor(double value){
+ speedFactor = value;
+ return this;
+ }
+
+
+ virtual void postReset() {}
+ virtual void checks(){}
+ virtual void pass(){ throw success();}
+ virtual void fail(){ throw std::exception();}
+
+ virtual void dump(uint64_t i){
+ #ifdef TRACE
+ if(i >= TRACE_START) tfp->dump(i);
+ #endif
+ }
+
+ Workspace* run(double timeout = 1e6){
+
+ // init trace dump
+ #ifdef TRACE
+ Verilated::traceEverOn(true);
+ tfp = new VerilatedFstC;
+ top->trace(tfp, 99);
+ tfp->open((string(name)+ ".fst").c_str());
+ #endif
+
+ struct timespec start_time,tick_time;
+ uint64_t tickLastSimTime = 0;
+ top->eval();
+
+ clock_gettime(CLOCK_PROCESS_CPUTIME_ID, &start_time);
+ clock_gettime(CLOCK_PROCESS_CPUTIME_ID, &tick_time);
+
+ uint32_t flushCounter = 0;
+ try {
+ while(1){
+ uint64_t delay = ~0l;
+ for(TimeProcess* p : timeProcesses)
+ if(p->wakeEnable && p->wakeDelay < delay)
+ delay = p->wakeDelay;
+
+ if(time*timeToSec > timeout){
+ printf("Simulation timeout triggered (%f)\n", time*timeToSec);
+ fail();
+ }
+ if(delay == ~0l){
+ fail();
+ }
+ if(delay != 0){
+ dump(time);
+ }
+ for(TimeProcess* p : timeProcesses) {
+ p->wakeDelay -= delay;
+ if(p->wakeDelay == 0){
+ p->wakeEnable = false;
+ p->tick();
+ }
+ }
+
+ top->eval();
+ for(auto* p : checkProcesses) p->tick(time);
+
+ if(delay != 0){
+ if(time - tickLastSimTime > 1000*400000 || time - tickLastSimTime > 1.0*speedFactor/timeToSec){
+ struct timespec end_time;
+ clock_gettime(CLOCK_PROCESS_CPUTIME_ID, &end_time);
+ uint64_t diffInNanos = end_time.tv_sec*1e9 + end_time.tv_nsec - tick_time.tv_sec*1e9 - tick_time.tv_nsec;
+ tick_time = end_time;
+ double dt = diffInNanos*1e-9;
+ #ifdef PRINT_PERF
+ printf("Simulation speed : %f ms/realTime\n",(time - tickLastSimTime)/dt*timeToSec*1e3);
+ #endif
+ tickLastSimTime = time;
+ }
+ time += delay;
+ while(allowedTime < delay){
+ struct timespec end_time;
+ clock_gettime(CLOCK_PROCESS_CPUTIME_ID, &end_time);
+ uint64_t diffInNanos = end_time.tv_sec*1e9 + end_time.tv_nsec - start_time.tv_sec*1e9 - start_time.tv_nsec;
+ start_time = end_time;
+ double dt = diffInNanos*1e-9;
+ allowedTime += dt*speedFactor/timeToSec;
+ if(allowedTime > 0.01*speedFactor/timeToSec)
+ allowedTime = 0.01*speedFactor/timeToSec;
+
+ }
+ allowedTime-=delay;
+
+ flushCounter++;
+ if(flushCounter > 100000){
+ #ifdef TRACE
+ tfp->flush();
+ //printf("flush\n");
+ #endif
+ flushCounter = 0;
+ }
+ }
+
+
+ if (Verilated::gotFinish())
+ exit(0);
+ }
+ cout << "timeout" << endl;
+ fail();
+ } catch (const success e) {
+ cout <<"SUCCESS " << name << endl;
+ } catch (const std::exception& e) {
+ cout << "FAIL " << name << endl;
+ }
+
+
+
+ dump(time);
+ dump(time+10);
+ #ifdef TRACE
+ tfp->close();
+ #endif
+ return this;
+ }
+};
+
+
diff --git a/VexRiscv/src/test/cpp/common/jtag.h b/VexRiscv/src/test/cpp/common/jtag.h
new file mode 100644
index 0000000..868c745
--- /dev/null
+++ b/VexRiscv/src/test/cpp/common/jtag.h
@@ -0,0 +1,177 @@
+
+#include <stdio.h>
+#include <sys/socket.h>
+#include <netinet/in.h>
+#include <string.h>
+#include <arpa/inet.h>
+#include <fcntl.h>
+#include <sys/ioctl.h>
+#include <netinet/tcp.h>
+
+/** Returns true on success, or false if there was an error */
+bool SetSocketBlockingEnabled(int fd, bool blocking)
+{
+ if (fd < 0) return false;
+
+#ifdef WIN32
+ unsigned long mode = blocking ? 0 : 1;
+ return (ioctlsocket(fd, FIONBIO, &mode) == 0) ? true : false;
+#else
+ int flags = fcntl(fd, F_GETFL, 0);
+ if (flags < 0) return false;
+ flags = blocking ? (flags&~O_NONBLOCK) : (flags|O_NONBLOCK);
+ return (fcntl(fd, F_SETFL, flags) == 0) ? true : false;
+#endif
+}
+
+class Jtag : public TimeProcess{
+public:
+ CData *tms, *tdi, *tdo, *tck;
+ enum State {reset};
+ uint32_t state;
+
+ int serverSocket, clientHandle;
+ struct sockaddr_in serverAddr;
+ struct sockaddr_storage serverStorage;
+ socklen_t addr_size;
+ uint64_t tooglePeriod;
+// char buffer[1024];
+
+ Jtag(CData *tms, CData *tdi, CData *tdo, CData* tck,uint64_t period){
+ this->tms = tms;
+ this->tdi = tdi;
+ this->tdo = tdo;
+ this->tck = tck;
+ this->tooglePeriod = period/2;
+ *tms = 0;
+ *tdi = 0;
+ *tdo = 0;
+ *tck = 0;
+ state = 0;
+ schedule(0);
+
+ //---- Create the socket. The three arguments are: ----//
+ // 1) Internet domain 2) Stream socket 3) Default protocol (TCP in this case) //
+ serverSocket = socket(PF_INET, SOCK_STREAM, 0);
+ assert(serverSocket != -1);
+ int flag = 1;
+ setsockopt( serverSocket, /* socket affected */
+ IPPROTO_TCP, /* set option at TCP level */
+ TCP_NODELAY, /* name of option */
+ (char *) &flag, /* the cast is historical
+ cruft */
+ sizeof(int)); /* length of option value */
+
+ /*int a = 0xFFF;
+ if (setsockopt(serverSocket, SOL_SOCKET, SO_RCVBUF, &a, sizeof(int)) == -1) {
+ fprintf(stderr, "Error setting socket opts: %s\n", strerror(errno));
+ }
+ a = 0xFFFFFF;
+ if (setsockopt(serverSocket, SOL_SOCKET, SO_SNDBUF, &a, sizeof(int)) == -1) {
+ fprintf(stderr, "Error setting socket opts: %s\n", strerror(errno));
+ }*/
+
+ SetSocketBlockingEnabled(serverSocket,0);
+
+
+ //---- Configure settings of the server address struct ----//
+ // Address family = Internet //
+ serverAddr.sin_family = AF_INET;
+ serverAddr.sin_port = htons(7894);
+ serverAddr.sin_addr.s_addr = inet_addr("127.0.0.1");
+ memset(serverAddr.sin_zero, '\0', sizeof serverAddr.sin_zero);
+
+ //---- Bind the address struct to the socket ----//
+ bind(serverSocket, (struct sockaddr *) &serverAddr, sizeof(serverAddr));
+
+ //---- Listen on the socket, with 5 max connection requests queued ----//
+ listen(serverSocket,1);
+
+ //---- Accept call creates a new socket for the incoming connection ----//
+ addr_size = sizeof serverStorage;
+ clientHandle = -1;
+
+ }
+ void connectionReset(){
+ printf("CONNECTION RESET\n");
+ shutdown(clientHandle,SHUT_RDWR);
+ clientHandle = -1;
+ }
+
+
+ virtual ~Jtag(){
+ if(clientHandle != -1) {
+ shutdown(clientHandle,SHUT_RDWR);
+ usleep(100);
+ }
+ if(serverSocket != -1) {
+ close(serverSocket);
+ usleep(100);
+ }
+ }
+
+ uint32_t selfSleep = 0;
+ uint32_t checkNewConnectionsTimer = 0;
+ uint8_t rxBuffer[100];
+ int32_t rxBufferSize = 0;
+ int32_t rxBufferRemaining = 0;
+ virtual void tick(){
+ checkNewConnectionsTimer++;
+ if(checkNewConnectionsTimer == 5000){
+ checkNewConnectionsTimer = 0;
+ int newclientHandle = accept(serverSocket, (struct sockaddr *) &serverStorage, &addr_size);
+ if(newclientHandle != -1){
+ if(clientHandle != -1){
+ connectionReset();
+ }
+ clientHandle = newclientHandle;
+ printf("CONNECTED\n");
+ }
+ else{
+ if(clientHandle == -1)
+ selfSleep = 1000;
+ }
+ }
+ if(selfSleep)
+ selfSleep--;
+ else{
+ if(clientHandle != -1){
+ uint8_t buffer;
+ int n;
+
+ if(rxBufferRemaining == 0){
+ if(ioctl(clientHandle,FIONREAD,&n) != 0)
+ connectionReset();
+ else if(n >= 1){
+ rxBufferSize = read(clientHandle,&rxBuffer,100);
+ if(rxBufferSize < 0){
+ connectionReset();
+ }else {
+ rxBufferRemaining = rxBufferSize;
+ }
+ }else {
+ selfSleep = 30;
+ }
+ }
+
+ if(rxBufferRemaining != 0){
+ uint8_t buffer = rxBuffer[rxBufferSize - (rxBufferRemaining--)];
+ *tms = (buffer & 1) != 0;
+ *tdi = (buffer & 2) != 0;
+ *tck = (buffer & 8) != 0;
+ if(buffer & 4){
+ buffer = (*tdo != 0);
+ //printf("TDO=%d\n",buffer);
+ if(-1 == send(clientHandle,&buffer,1,0))
+ connectionReset();
+ }else {
+
+ // printf("\n");
+ }
+ }
+ }
+ }
+ schedule(tooglePeriod);
+ }
+
+}; \ No newline at end of file
diff --git a/VexRiscv/src/test/cpp/common/uart.h b/VexRiscv/src/test/cpp/common/uart.h
new file mode 100644
index 0000000..05021ca
--- /dev/null
+++ b/VexRiscv/src/test/cpp/common/uart.h
@@ -0,0 +1,126 @@
+
+
+
+class UartRx : public TimeProcess{
+public:
+
+ CData *rx;
+ uint32_t uartTimeRate;
+ UartRx(CData *rx, uint32_t uartTimeRate){
+ this->rx = rx;
+ this->uartTimeRate = uartTimeRate;
+ schedule(uartTimeRate);
+ }
+
+ enum State {START, DATA, STOP};
+ State state = START;
+ char data;
+ uint32_t counter;
+
+
+ virtual void tick(){
+ switch(state){
+ case START:
+ if(*rx == 0){
+ state = DATA;
+ counter = 0;
+ data = 0;
+ schedule(uartTimeRate*5/4);
+ } else {
+ schedule(uartTimeRate/4);
+ }
+ break;
+ case DATA:
+ data |= (*rx) << counter++;
+ if(counter == 8){
+ state = STOP;
+ }
+ schedule(uartTimeRate);
+ break;
+ case STOP:
+ if(*rx){
+ cout << data << flush;
+ } else {
+ cout << "UART RX FRAME ERROR at " << time << endl;
+ }
+
+ schedule(uartTimeRate/4);
+ state = START;
+ break;
+ }
+ }
+};
+
+#include<pthread.h>
+#include <mutex>
+#include <queue>
+
+class UartTx : public TimeProcess{
+public:
+
+ CData *tx;
+ uint32_t uartTimeRate;
+
+ enum State {START, DATA, STOP};
+ State state = START;
+ char data;
+ uint32_t counter;
+ pthread_t inputThreadId;
+ queue<uint8_t> inputsQueue;
+ mutex inputsMutex;
+
+ UartTx(CData *tx, uint32_t uartTimeRate){
+ this->tx = tx;
+ this->uartTimeRate = uartTimeRate;
+ schedule(uartTimeRate);
+ pthread_create(&inputThreadId, NULL, &inputThreadWrapper, this);
+ *tx = 1;
+ }
+
+ static void* inputThreadWrapper(void *uartTx){
+ ((UartTx*)uartTx)->inputThread();
+ return NULL;
+ }
+
+ void inputThread(){
+ while(1){
+ uint8_t c = getchar();
+ inputsMutex.lock();
+ inputsQueue.push(c);
+ inputsMutex.unlock();
+ }
+ }
+
+ virtual void tick(){
+ switch(state){
+ case START:
+ inputsMutex.lock();
+ if(!inputsQueue.empty()){
+ data = inputsQueue.front();
+ inputsQueue.pop();
+ inputsMutex.unlock();
+ state = DATA;
+ counter = 0;
+ *tx = 0;
+ schedule(uartTimeRate);
+ } else {
+ inputsMutex.unlock();
+ schedule(uartTimeRate*50);
+ }
+ break;
+ case DATA:
+ *tx = (data >> counter) & 1;
+ counter++;
+ if(counter == 8){
+ state = STOP;
+ }
+ schedule(uartTimeRate);
+ break;
+ case STOP:
+ *tx = 1;
+ schedule(uartTimeRate);
+ state = START;
+ break;
+ }
+ }
+};
diff --git a/VexRiscv/src/test/cpp/custom/atomic/build/atomic.asm b/VexRiscv/src/test/cpp/custom/atomic/build/atomic.asm
new file mode 100644
index 0000000..b2e9937
--- /dev/null
+++ b/VexRiscv/src/test/cpp/custom/atomic/build/atomic.asm
@@ -0,0 +1,246 @@
+
+build/atomic.elf: file format elf32-littleriscv
+
+
+Disassembly of section .crt_section:
+
+00000000 <trap_entry-0x20>:
+ 0: 04c0006f j 4c <_start>
+ 4: 00000013 nop
+ 8: 00000013 nop
+ c: 00000013 nop
+ 10: 00000013 nop
+ 14: 00000013 nop
+ 18: 00000013 nop
+ 1c: 00000013 nop
+
+00000020 <trap_entry>:
+ 20: 30002ef3 csrr t4,mstatus
+ 24: 080efe93 andi t4,t4,128
+ 28: 000e8a63 beqz t4,3c <notExternalInterrupt>
+ 2c: 00002eb7 lui t4,0x2
+ 30: 800e8e93 addi t4,t4,-2048 # 1800 <pass+0x1498>
+ 34: 300e9073 csrw mstatus,t4
+ 38: 30200073 mret
+
+0000003c <notExternalInterrupt>:
+ 3c: 34102ef3 csrr t4,mepc
+ 40: 004e8e93 addi t4,t4,4
+ 44: 341e9073 csrw mepc,t4
+ 48: 30200073 mret
+
+0000004c <_start>:
+ 4c: 00100e13 li t3,1
+ 50: 10000537 lui a0,0x10000
+ 54: 06400593 li a1,100
+ 58: 06500613 li a2,101
+ 5c: 06600693 li a3,102
+ 60: 00d52023 sw a3,0(a0) # 10000000 <pass+0xffffc98>
+ 64: 18b5262f sc.w a2,a1,(a0)
+ 68: 00100713 li a4,1
+ 6c: 2ee61863 bne a2,a4,35c <fail>
+ 70: 00052703 lw a4,0(a0)
+ 74: 2ee69463 bne a3,a4,35c <fail>
+ 78: 00200e13 li t3,2
+ 7c: 10000537 lui a0,0x10000
+ 80: 00450513 addi a0,a0,4 # 10000004 <pass+0xffffc9c>
+ 84: 06700593 li a1,103
+ 88: 06800613 li a2,104
+ 8c: 06900693 li a3,105
+ 90: 00d52023 sw a3,0(a0)
+ 94: 18b5262f sc.w a2,a1,(a0)
+ 98: 00100713 li a4,1
+ 9c: 2ce61063 bne a2,a4,35c <fail>
+ a0: 00052703 lw a4,0(a0)
+ a4: 2ae69c63 bne a3,a4,35c <fail>
+ a8: 00300e13 li t3,3
+ ac: 10000537 lui a0,0x10000
+ b0: 00450513 addi a0,a0,4 # 10000004 <pass+0xffffc9c>
+ b4: 06700593 li a1,103
+ b8: 06800613 li a2,104
+ bc: 06900693 li a3,105
+ c0: 18b5262f sc.w a2,a1,(a0)
+ c4: 00100713 li a4,1
+ c8: 28e61a63 bne a2,a4,35c <fail>
+ cc: 00052703 lw a4,0(a0)
+ d0: 28e69663 bne a3,a4,35c <fail>
+ d4: 00400e13 li t3,4
+ d8: 10000537 lui a0,0x10000
+ dc: 00850513 addi a0,a0,8 # 10000008 <pass+0xffffca0>
+ e0: 06a00593 li a1,106
+ e4: 06b00613 li a2,107
+ e8: 06c00693 li a3,108
+ ec: 00d52023 sw a3,0(a0)
+ f0: 100527af lr.w a5,(a0)
+ f4: 18b5262f sc.w a2,a1,(a0)
+ f8: 26d79263 bne a5,a3,35c <fail>
+ fc: 26061063 bnez a2,35c <fail>
+ 100: 00052703 lw a4,0(a0)
+ 104: 24e59c63 bne a1,a4,35c <fail>
+ 108: 00500e13 li t3,5
+ 10c: 10000537 lui a0,0x10000
+ 110: 00850513 addi a0,a0,8 # 10000008 <pass+0xffffca0>
+ 114: 06d00593 li a1,109
+ 118: 06e00613 li a2,110
+ 11c: 06f00693 li a3,111
+ 120: 00d52023 sw a3,0(a0)
+ 124: 18b5262f sc.w a2,a1,(a0)
+ 128: 22061a63 bnez a2,35c <fail>
+ 12c: 00052703 lw a4,0(a0)
+ 130: 22e59663 bne a1,a4,35c <fail>
+ 134: 00600e13 li t3,6
+ 138: 10000537 lui a0,0x10000
+ 13c: 00c50513 addi a0,a0,12 # 1000000c <pass+0xffffca4>
+ 140: 07000593 li a1,112
+ 144: 07100613 li a2,113
+ 148: 07200693 li a3,114
+ 14c: 10000437 lui s0,0x10000
+ 150: 01040413 addi s0,s0,16 # 10000010 <pass+0xffffca8>
+ 154: 07300493 li s1,115
+ 158: 07400913 li s2,116
+ 15c: 07500993 li s3,117
+ 160: 00d52023 sw a3,0(a0)
+ 164: 01342023 sw s3,0(s0)
+ 168: 100527af lr.w a5,(a0)
+ 16c: 10042aaf lr.w s5,(s0)
+ 170: 18b5262f sc.w a2,a1,(a0)
+ 174: 1894292f sc.w s2,s1,(s0)
+ 178: 1ed79263 bne a5,a3,35c <fail>
+ 17c: 1e061063 bnez a2,35c <fail>
+ 180: 00052703 lw a4,0(a0)
+ 184: 1ce59c63 bne a1,a4,35c <fail>
+ 188: 1d3a9a63 bne s5,s3,35c <fail>
+ 18c: 1c091863 bnez s2,35c <fail>
+ 190: 00042a03 lw s4,0(s0)
+ 194: 1d449463 bne s1,s4,35c <fail>
+ 198: 00700e13 li t3,7
+ 19c: 10000537 lui a0,0x10000
+ 1a0: 01450513 addi a0,a0,20 # 10000014 <pass+0xffffcac>
+ 1a4: 07800593 li a1,120
+ 1a8: 07900613 li a2,121
+ 1ac: 07a00693 li a3,122
+ 1b0: 01000e93 li t4,16
+
+000001b4 <test7>:
+ 1b4: 00d52023 sw a3,0(a0)
+ 1b8: 100527af lr.w a5,(a0)
+ 1bc: 18b5262f sc.w a2,a1,(a0)
+ 1c0: 18d79e63 bne a5,a3,35c <fail>
+ 1c4: 18061c63 bnez a2,35c <fail>
+ 1c8: 00052703 lw a4,0(a0)
+ 1cc: 18e59863 bne a1,a4,35c <fail>
+ 1d0: fffe8e93 addi t4,t4,-1
+ 1d4: 00450513 addi a0,a0,4
+ 1d8: 00358593 addi a1,a1,3
+ 1dc: 00360613 addi a2,a2,3
+ 1e0: 00368693 addi a3,a3,3
+ 1e4: fc0e98e3 bnez t4,1b4 <test7>
+ 1e8: 00800e13 li t3,8
+ 1ec: 10000537 lui a0,0x10000
+ 1f0: 01850513 addi a0,a0,24 # 10000018 <pass+0xffffcb0>
+ 1f4: 07800593 li a1,120
+ 1f8: 07900613 li a2,121
+ 1fc: 07a00693 li a3,122
+ 200: 00052783 lw a5,0(a0)
+ 204: 18b5262f sc.w a2,a1,(a0)
+ 208: 00100713 li a4,1
+ 20c: 14e61863 bne a2,a4,35c <fail>
+ 210: 00052703 lw a4,0(a0)
+ 214: 14e79463 bne a5,a4,35c <fail>
+ 218: 00900e13 li t3,9
+ 21c: 10000537 lui a0,0x10000
+ 220: 10050513 addi a0,a0,256 # 10000100 <pass+0xffffd98>
+ 224: 07b00593 li a1,123
+ 228: 07c00613 li a2,124
+ 22c: 07d00693 li a3,125
+ 230: 00d52023 sw a3,0(a0)
+ 234: 100527af lr.w a5,(a0)
+ 238: 00000073 ecall
+ 23c: 18b5262f sc.w a2,a1,(a0)
+ 240: 00100713 li a4,1
+ 244: 10e61c63 bne a2,a4,35c <fail>
+ 248: 00052703 lw a4,0(a0)
+ 24c: 10e69863 bne a3,a4,35c <fail>
+ 250: 00a00e13 li t3,10
+ 254: 10000537 lui a0,0x10000
+ 258: 20050513 addi a0,a0,512 # 10000200 <pass+0xffffe98>
+ 25c: 10000837 lui a6,0x10000
+ 260: 20480813 addi a6,a6,516 # 10000204 <pass+0xffffe9c>
+ 264: 07e00593 li a1,126
+ 268: 07f00613 li a2,127
+ 26c: 08000693 li a3,128
+ 270: 08100893 li a7,129
+ 274: 00d52023 sw a3,0(a0)
+ 278: 01182023 sw a7,0(a6)
+ 27c: 100827af lr.w a5,(a6)
+ 280: 18b5262f sc.w a2,a1,(a0)
+ 284: 00100713 li a4,1
+ 288: 0ce61a63 bne a2,a4,35c <fail>
+ 28c: 00082703 lw a4,0(a6)
+ 290: 0ce89663 bne a7,a4,35c <fail>
+ 294: 00b00e13 li t3,11
+ 298: 10000537 lui a0,0x10000
+ 29c: 30050513 addi a0,a0,768 # 10000300 <pass+0xfffff98>
+ 2a0: 08200593 li a1,130
+ 2a4: 08300613 li a2,131
+ 2a8: 08400693 li a3,132
+ 2ac: 00d52023 sw a3,0(a0)
+ 2b0: 00001eb7 lui t4,0x1
+ 2b4: 800e8e93 addi t4,t4,-2048 # 800 <pass+0x498>
+ 2b8: 304e9073 csrw mie,t4
+ 2bc: 00800e93 li t4,8
+ 2c0: 100527af lr.w a5,(a0)
+ 2c4: 300e9073 csrw mstatus,t4
+ 2c8: 00000013 nop
+ 2cc: 00000013 nop
+ 2d0: 00000013 nop
+ 2d4: 00000013 nop
+ 2d8: 00000013 nop
+ 2dc: 00000013 nop
+ 2e0: 18b5262f sc.w a2,a1,(a0)
+ 2e4: 00100713 li a4,1
+ 2e8: 06e61a63 bne a2,a4,35c <fail>
+ 2ec: 00052703 lw a4,0(a0)
+ 2f0: 06e69663 bne a3,a4,35c <fail>
+ 2f4: 00c00e13 li t3,12
+ 2f8: 10000537 lui a0,0x10000
+ 2fc: 40050513 addi a0,a0,1024 # 10000400 <pass+0x10000098>
+ 300: 08c00593 li a1,140
+ 304: 08d00613 li a2,141
+ 308: 08e00693 li a3,142
+ 30c: 00d52023 sw a3,0(a0)
+ 310: 00001eb7 lui t4,0x1
+ 314: 800e8e93 addi t4,t4,-2048 # 800 <pass+0x498>
+ 318: 304e9073 csrw mie,t4
+ 31c: 00002eb7 lui t4,0x2
+ 320: 808e8e93 addi t4,t4,-2040 # 1808 <pass+0x14a0>
+ 324: 100527af lr.w a5,(a0)
+ 328: 300e9073 csrw mstatus,t4
+ 32c: 00000013 nop
+ 330: 00000013 nop
+ 334: 00000013 nop
+ 338: 00000013 nop
+ 33c: 00000013 nop
+ 340: 00000013 nop
+ 344: 18b5262f sc.w a2,a1,(a0)
+ 348: 00100713 li a4,1
+ 34c: 00e61863 bne a2,a4,35c <fail>
+ 350: 00052703 lw a4,0(a0)
+ 354: 00e69463 bne a3,a4,35c <fail>
+ 358: 0100006f j 368 <pass>
+
+0000035c <fail>:
+ 35c: f0100137 lui sp,0xf0100
+ 360: f2410113 addi sp,sp,-220 # f00fff24 <pass+0xf00ffbbc>
+ 364: 01c12023 sw t3,0(sp)
+
+00000368 <pass>:
+ 368: f0100137 lui sp,0xf0100
+ 36c: f2010113 addi sp,sp,-224 # f00fff20 <pass+0xf00ffbb8>
+ 370: 00012023 sw zero,0(sp)
+ 374: 00000013 nop
+ 378: 00000013 nop
+ 37c: 00000013 nop
+ 380: 00000013 nop
+ 384: 00000013 nop
+ 388: 00000013 nop
diff --git a/VexRiscv/src/test/cpp/custom/atomic/build/atomic.elf b/VexRiscv/src/test/cpp/custom/atomic/build/atomic.elf
new file mode 100755
index 0000000..a67f244
--- /dev/null
+++ b/VexRiscv/src/test/cpp/custom/atomic/build/atomic.elf
Binary files differ
diff --git a/VexRiscv/src/test/cpp/custom/atomic/build/atomic.hex b/VexRiscv/src/test/cpp/custom/atomic/build/atomic.hex
new file mode 100644
index 0000000..593eef7
--- /dev/null
+++ b/VexRiscv/src/test/cpp/custom/atomic/build/atomic.hex
@@ -0,0 +1,59 @@
+:100000006F00C00413000000130000001300000084
+:100010001300000013000000130000001300000094
+:10002000F32E003093FE0E08638A0E00B72E0000F8
+:10003000938E0E8073900E3073002030F32E1034A8
+:10004000938E4E0073901E3473002030130E1000F8
+:100050003705001093054006130650069306600608
+:100060002320D5002F26B518130710006318E62E9D
+:10007000032705006394E62E130E200037050010B9
+:100080001305450093057006130680069306900637
+:100090002320D5002F26B518130710006310E62C77
+:1000A00003270500639CE62A130E30003705001075
+:1000B0001305450093057006130680069306900607
+:1000C0002F26B51813071000631AE628032705002A
+:1000D0006396E628130E40003705001013058500CF
+:1000E0009305A0061306B0069306C0062320D5008C
+:1000F000AF2705102F26B5186392D7266310062662
+:1001000003270500639CE524130E500037050010FB
+:10011000130585009305D0061306E0069306F00646
+:100120002320D5002F26B518631A062203270500C1
+:100130006396E522130E6000370500101305C50015
+:1001400093050007130610079306200737040010D5
+:10015000130404019304300713094007930950075F
+:100160002320D50023203401AF270510AF2A041027
+:100170002F26B5182F2994186392D71E6310061ED8
+:1001800003270500639CE51C639A3A1D6318091C4C
+:10019000032A04006394441D130E700037050010F9
+:1001A0001305450193058007130690079306A007E2
+:1001B000930E00012320D500AF2705102F26B51878
+:1001C000639ED718631C0618032705006398E5187B
+:1001D000938EFEFF13054500938535001306360008
+:1001E00093863600E3980EFC130E8000370500104E
+:1001F0001305850193058007130690079306A00752
+:10020000832705002F26B518130710006318E6147E
+:10021000032705006394E714130E900037050010C0
+:10022000130505109305B0071306C0079306D00702
+:100230002320D500AF270510730000002F26B51826
+:1002400013071000631CE610032705006398E610EF
+:10025000130EA00037050010130505203708001005
+:10026000130848209305E0071306F00793060008DB
+:10027000930810082320D50023201801AF27081069
+:100280002F26B51813071000631AE60C0327080081
+:100290006396E80C130EB000370500101305053007
+:1002A0009305200813063008930640082320D50044
+:1002B000B71E0000938E0E8073904E30930E800018
+:1002C000AF27051073900E301300000013000000DC
+:1002D00013000000130000001300000013000000D2
+:1002E0002F26B51813071000631AE606032705002A
+:1002F0006396E606130EC00037050010130505408F
+:100300009305C0081306D0089306E0082320D50003
+:10031000B71E0000938E0E8073904E30B72E0000F3
+:10032000938E8E80AF27051073900E30130000005F
+:100330001300000013000000130000001300000071
+:10034000130000002F26B518130710006318E600ED
+:10035000032705006394E6006F000001370110F0E9
+:10036000130141F22320C101370110F0130101F202
+:100370002320010013000000130000001300000000
+:0C03800013000000130000001300000038
+:040000030000004CAD
+:00000001FF
diff --git a/VexRiscv/src/test/cpp/custom/atomic/build/atomic.map b/VexRiscv/src/test/cpp/custom/atomic/build/atomic.map
new file mode 100644
index 0000000..5c6ed9f
--- /dev/null
+++ b/VexRiscv/src/test/cpp/custom/atomic/build/atomic.map
@@ -0,0 +1,31 @@
+
+Memory Configuration
+
+Name Origin Length Attributes
+onChipRam 0x0000000000000000 0x0000000000002000 w !xr
+*default* 0x0000000000000000 0xffffffffffffffff
+
+Linker script and memory map
+
+LOAD build/src/crt.o
+LOAD /opt/riscv/bin/../lib/gcc/riscv64-unknown-elf/7.1.1/libgcc.a
+START GROUP
+LOAD /opt/riscv/bin/../lib/gcc/riscv64-unknown-elf/7.1.1/../../../../riscv64-unknown-elf/lib/libc.a
+LOAD /opt/riscv/bin/../lib/gcc/riscv64-unknown-elf/7.1.1/../../../../riscv64-unknown-elf/lib/libgloss.a
+END GROUP
+LOAD /opt/riscv/bin/../lib/gcc/riscv64-unknown-elf/7.1.1/libgcc.a
+ 0x0000000000000000 . = 0x0
+
+.crt_section 0x0000000000000000 0x38c
+ 0x0000000000000000 . = ALIGN (0x4)
+ *crt.o(.text)
+ .text 0x0000000000000000 0x38c build/src/crt.o
+ 0x0000000000000020 trap_entry
+ 0x000000000000004c _start
+OUTPUT(build/atomic.elf elf32-littleriscv)
+
+.data 0x000000000000038c 0x0
+ .data 0x000000000000038c 0x0 build/src/crt.o
+
+.bss 0x000000000000038c 0x0
+ .bss 0x000000000000038c 0x0 build/src/crt.o
diff --git a/VexRiscv/src/test/cpp/custom/atomic/build/atomic.v b/VexRiscv/src/test/cpp/custom/atomic/build/atomic.v
new file mode 100755
index 0000000..1d8d7a8
--- /dev/null
+++ b/VexRiscv/src/test/cpp/custom/atomic/build/atomic.v
@@ -0,0 +1,58 @@
+@00000000
+6F 00 C0 04 13 00 00 00 13 00 00 00 13 00 00 00
+13 00 00 00 13 00 00 00 13 00 00 00 13 00 00 00
+F3 2E 00 30 93 FE 0E 08 63 8A 0E 00 B7 2E 00 00
+93 8E 0E 80 73 90 0E 30 73 00 20 30 F3 2E 10 34
+93 8E 4E 00 73 90 1E 34 73 00 20 30 13 0E 10 00
+37 05 00 10 93 05 40 06 13 06 50 06 93 06 60 06
+23 20 D5 00 2F 26 B5 18 13 07 10 00 63 18 E6 2E
+03 27 05 00 63 94 E6 2E 13 0E 20 00 37 05 00 10
+13 05 45 00 93 05 70 06 13 06 80 06 93 06 90 06
+23 20 D5 00 2F 26 B5 18 13 07 10 00 63 10 E6 2C
+03 27 05 00 63 9C E6 2A 13 0E 30 00 37 05 00 10
+13 05 45 00 93 05 70 06 13 06 80 06 93 06 90 06
+2F 26 B5 18 13 07 10 00 63 1A E6 28 03 27 05 00
+63 96 E6 28 13 0E 40 00 37 05 00 10 13 05 85 00
+93 05 A0 06 13 06 B0 06 93 06 C0 06 23 20 D5 00
+AF 27 05 10 2F 26 B5 18 63 92 D7 26 63 10 06 26
+03 27 05 00 63 9C E5 24 13 0E 50 00 37 05 00 10
+13 05 85 00 93 05 D0 06 13 06 E0 06 93 06 F0 06
+23 20 D5 00 2F 26 B5 18 63 1A 06 22 03 27 05 00
+63 96 E5 22 13 0E 60 00 37 05 00 10 13 05 C5 00
+93 05 00 07 13 06 10 07 93 06 20 07 37 04 00 10
+13 04 04 01 93 04 30 07 13 09 40 07 93 09 50 07
+23 20 D5 00 23 20 34 01 AF 27 05 10 AF 2A 04 10
+2F 26 B5 18 2F 29 94 18 63 92 D7 1E 63 10 06 1E
+03 27 05 00 63 9C E5 1C 63 9A 3A 1D 63 18 09 1C
+03 2A 04 00 63 94 44 1D 13 0E 70 00 37 05 00 10
+13 05 45 01 93 05 80 07 13 06 90 07 93 06 A0 07
+93 0E 00 01 23 20 D5 00 AF 27 05 10 2F 26 B5 18
+63 9E D7 18 63 1C 06 18 03 27 05 00 63 98 E5 18
+93 8E FE FF 13 05 45 00 93 85 35 00 13 06 36 00
+93 86 36 00 E3 98 0E FC 13 0E 80 00 37 05 00 10
+13 05 85 01 93 05 80 07 13 06 90 07 93 06 A0 07
+83 27 05 00 2F 26 B5 18 13 07 10 00 63 18 E6 14
+03 27 05 00 63 94 E7 14 13 0E 90 00 37 05 00 10
+13 05 05 10 93 05 B0 07 13 06 C0 07 93 06 D0 07
+23 20 D5 00 AF 27 05 10 73 00 00 00 2F 26 B5 18
+13 07 10 00 63 1C E6 10 03 27 05 00 63 98 E6 10
+13 0E A0 00 37 05 00 10 13 05 05 20 37 08 00 10
+13 08 48 20 93 05 E0 07 13 06 F0 07 93 06 00 08
+93 08 10 08 23 20 D5 00 23 20 18 01 AF 27 08 10
+2F 26 B5 18 13 07 10 00 63 1A E6 0C 03 27 08 00
+63 96 E8 0C 13 0E B0 00 37 05 00 10 13 05 05 30
+93 05 20 08 13 06 30 08 93 06 40 08 23 20 D5 00
+B7 1E 00 00 93 8E 0E 80 73 90 4E 30 93 0E 80 00
+AF 27 05 10 73 90 0E 30 13 00 00 00 13 00 00 00
+13 00 00 00 13 00 00 00 13 00 00 00 13 00 00 00
+2F 26 B5 18 13 07 10 00 63 1A E6 06 03 27 05 00
+63 96 E6 06 13 0E C0 00 37 05 00 10 13 05 05 40
+93 05 C0 08 13 06 D0 08 93 06 E0 08 23 20 D5 00
+B7 1E 00 00 93 8E 0E 80 73 90 4E 30 B7 2E 00 00
+93 8E 8E 80 AF 27 05 10 73 90 0E 30 13 00 00 00
+13 00 00 00 13 00 00 00 13 00 00 00 13 00 00 00
+13 00 00 00 2F 26 B5 18 13 07 10 00 63 18 E6 00
+03 27 05 00 63 94 E6 00 6F 00 00 01 37 01 10 F0
+13 01 41 F2 23 20 C1 01 37 01 10 F0 13 01 01 F2
+23 20 01 00 13 00 00 00 13 00 00 00 13 00 00 00
+13 00 00 00 13 00 00 00 13 00 00 00
diff --git a/VexRiscv/src/test/cpp/custom/atomic/makefile b/VexRiscv/src/test/cpp/custom/atomic/makefile
new file mode 100644
index 0000000..217a057
--- /dev/null
+++ b/VexRiscv/src/test/cpp/custom/atomic/makefile
@@ -0,0 +1,73 @@
+PROJ_NAME=atomic
+
+
+RISCV_PATH=/opt/riscv/
+CFLAGS += -march=rv32ia -mabi=ilp32
+RISCV_NAME = riscv64-unknown-elf
+RISCV_OBJCOPY = $(RISCV_PATH)/bin/$(RISCV_NAME)-objcopy
+RISCV_OBJDUMP = $(RISCV_PATH)/bin/$(RISCV_NAME)-objdump
+RISCV_CLIB=$(RISCV_PATH)$(RISCV_NAME)/lib/
+RISCV_CC=$(RISCV_PATH)/bin/$(RISCV_NAME)-gcc
+LDSCRIPT=src/ld
+
+
+SRCS = $(wildcard src/*.c) \
+ $(wildcard src/*.cpp) \
+ $(wildcard src/*.S)
+
+
+CFLAGS += -static
+LDFLAGS += -e_start -T $(LDSCRIPT) -nostartfiles -Wl,-Map,$(OBJDIR)/$(PROJ_NAME).map -Wl,--print-memory-usage
+OBJDIR = build
+OBJS := $(SRCS)
+OBJS := $(OBJS:.c=.o)
+OBJS := $(OBJS:.cpp=.o)
+OBJS := $(OBJS:.S=.o)
+OBJS := $(addprefix $(OBJDIR)/,$(OBJS))
+
+
+
+all: $(OBJDIR)/$(PROJ_NAME).elf $(OBJDIR)/$(PROJ_NAME).hex $(OBJDIR)/$(PROJ_NAME).asm $(OBJDIR)/$(PROJ_NAME).v
+ @echo "done"
+
+$(OBJDIR)/%.elf: $(OBJS) | $(OBJDIR)
+ $(RISCV_CC) $(CFLAGS) -o $@ $^ $(LDFLAGS) $(LIBS)
+
+%.hex: %.elf
+ $(RISCV_OBJCOPY) -O ihex $^ $@
+
+%.bin: %.elf
+ $(RISCV_OBJCOPY) -O binary $^ $@
+
+%.v: %.elf
+ $(RISCV_OBJCOPY) -O verilog $^ $@
+
+%.asm: %.elf
+ $(RISCV_OBJDUMP) -S -d $^ > $@
+
+$(OBJDIR)/%.o: %.c
+ mkdir -p $(dir $@)
+ $(RISCV_CC) -c $(CFLAGS) $(INC) -o $@ $^
+
+$(OBJDIR)/%.o: %.cpp
+ mkdir -p $(dir $@)
+ $(RISCV_CC) -c $(CFLAGS) $(INC) -o $@ $^
+
+$(OBJDIR)/%.o: %.S
+ mkdir -p $(dir $@)
+ $(RISCV_CC) -c $(CFLAGS) -o $@ $^ -D__ASSEMBLY__=1
+
+$(OBJDIR):
+ mkdir -p $@
+
+clean:
+ rm -f $(OBJDIR)/$(PROJ_NAME).elf
+ rm -f $(OBJDIR)/$(PROJ_NAME).hex
+ rm -f $(OBJDIR)/$(PROJ_NAME).map
+ rm -f $(OBJDIR)/$(PROJ_NAME).v
+ rm -f $(OBJDIR)/$(PROJ_NAME).asm
+ find $(OBJDIR) -type f -name '*.o' -print0 | xargs -0 -r rm
+
+.SECONDARY: $(OBJS)
+
+
diff --git a/VexRiscv/src/test/cpp/custom/atomic/src/crt.S b/VexRiscv/src/test/cpp/custom/atomic/src/crt.S
new file mode 100644
index 0000000..1462dd2
--- /dev/null
+++ b/VexRiscv/src/test/cpp/custom/atomic/src/crt.S
@@ -0,0 +1,265 @@
+.globl _start
+
+
+ j _start
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+
+.global trap_entry
+trap_entry:
+ csrr x29, mstatus
+ and x29, x29, 0x080
+ beqz x29, notExternalInterrupt
+ li x29, 0x1800 //000 disable interrupts
+ csrw mstatus,x29
+ mret
+
+notExternalInterrupt:
+ csrr x29, mepc
+ addi x29, x29, 4
+ csrw mepc, x29
+ mret
+
+_start:
+//Test 1 SC on unreserved area should fail and not write memory
+ li x28, 1
+ li a0, 0x10000000
+ li a1, 100
+ li a2, 101
+ li a3, 102
+ sw a3, 0(a0)
+ sc.w a2, a1, (a0)
+ li a4, 1
+ bne a2, a4, fail
+ lw a4, 0(a0)
+ bne a3, a4, fail
+
+//Test 2 SC on another unreserved area should fail and not write memory
+ li x28, 2
+ li a0, 0x10000004
+ li a1, 103
+ li a2, 104
+ li a3, 105
+ sw a3, 0(a0)
+ sc.w a2, a1, (a0)
+ li a4, 1
+ bne a2, a4, fail
+ lw a4, 0(a0)
+ bne a3, a4, fail
+
+
+//Test 3 retrying SC on unreserved area should fail and not write memory
+ li x28, 3
+ li a0, 0x10000004
+ li a1, 103
+ li a2, 104
+ li a3, 105
+ sc.w a2, a1, (a0)
+ li a4, 1
+ bne a2, a4, fail
+ lw a4, 0(a0)
+ bne a3, a4, fail
+
+
+//Test 4 SC on reserved area should pass and should be written write memory
+ li x28, 4
+ li a0, 0x10000008
+ li a1, 106
+ li a2, 107
+ li a3, 108
+ sw a3, 0(a0)
+ lr.w a5, (a0)
+ sc.w a2, a1, (a0)
+ bne a5, a3, fail
+ bne a2, x0, fail
+ lw a4, 0(a0)
+ bne a1, a4, fail
+
+
+//Test 5 redo SC on reserved area should pass and should be written write memory
+ li x28, 5
+ li a0, 0x10000008
+ li a1, 109
+ li a2, 110
+ li a3, 111
+ sw a3, 0(a0)
+ sc.w a2, a1, (a0)
+ bne a2, x0, fail
+ lw a4, 0(a0)
+ bne a1, a4, fail
+
+//Test 6 Allow two entries at the same time
+ li x28, 6
+ li a0, 0x1000000C
+ li a1, 112
+ li a2, 113
+ li a3, 114
+ li s0, 0x10000010
+ li s1, 115
+ li s2, 116
+ li s3, 117
+
+ sw a3, 0(a0)
+ sw s3, 0(s0)
+ lr.w a5, (a0)
+ lr.w s5, (s0)
+ sc.w a2, a1, (a0)
+ sc.w s2, s1, (s0)
+ bne a5, a3, fail
+ bne a2, x0, fail
+ lw a4, 0(a0)
+ bne a1, a4, fail
+
+ bne s5, s3, fail
+ bne s2, x0, fail
+ lw s4, 0(s0)
+ bne s1, s4, fail
+
+//Test 7 do a lot of allocation to clear the entries
+ li x28, 7
+ li a0, 0x10000014
+ li a1, 120
+ li a2, 121
+ li a3, 122
+ li x29, 16
+test7:
+ sw a3, 0(a0)
+ lr.w a5, (a0)
+ sc.w a2, a1, (a0)
+ bne a5, a3, fail
+ bne a2, x0, fail
+ lw a4, 0(a0)
+ bne a1, a4, fail
+ add x29, x29, -1
+ add a0, a0, 4
+ add a1, a1, 3
+ add a2, a2, 3
+ add a3, a3, 3
+ bnez x29, test7
+
+
+//Test 8 SC on discarded entries should fail
+ li x28, 8
+ li a0, 0x10000018
+ li a1, 120
+ li a2, 121
+ li a3, 122
+ lw a5, 0(a0)
+ sc.w a2, a1, (a0)
+ li a4, 1
+ bne a2, a4, fail
+ lw a4, 0(a0)
+ bne a5, a4, fail
+
+
+//Test 9 SC should fail after a context switching
+ li x28, 9
+ li a0, 0x10000100
+ li a1, 123
+ li a2, 124
+ li a3, 125
+ sw a3, 0(a0)
+ lr.w a5, (a0)
+ scall
+ sc.w a2, a1, (a0)
+ li a4, 1
+ bne a2, a4, fail
+ lw a4, 0(a0)
+ bne a3, a4, fail
+
+
+
+//Test 10 SC should fail if the address doesn't match
+ li x28, 10
+ li a0, 0x10000200
+ li a6, 0x10000204
+ li a1, 126
+ li a2, 127
+ li a3, 128
+ li a7, 129
+ sw a3, 0(a0)
+ sw a7, 0(a6)
+ lr.w a5, (a6)
+ sc.w a2, a1, (a0)
+ li a4, 1
+ bne a2, a4, fail
+ lw a4, 0(a6)
+ bne a7, a4, fail
+
+
+
+//Test 11 SC should fail after a external interrupt context switching
+ li x28, 11
+ li a0, 0x10000300
+ li a1, 130
+ li a2, 131
+ li a3, 132
+ sw a3, 0(a0)
+ li x29, 0x800 //800 external interrupts
+ csrw mie,x29
+ li x29, 0x008 //008 enable interrupts
+ lr.w a5, (a0)
+ csrw mstatus,x29 //Enable external interrupt (will jump instantly due to testbench setup)
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+ sc.w a2, a1, (a0)
+ li a4, 1
+ bne a2, a4, fail
+ lw a4, 0(a0)
+ bne a3, a4, fail
+
+
+//Test 12 SC should fail after a external interrupt context switching (callback on lr)
+ li x28, 12
+ li a0, 0x10000400
+ li a1, 140
+ li a2, 141
+ li a3, 142
+ sw a3, 0(a0)
+ li x29, 0x800 //800 external interrupts
+ csrw mie,x29
+ li x29, 0x1808 //008 enable interrupts
+ lr.w a5, (a0)
+ csrw mstatus,x29 //Enable external interrupt (will jump instantly due to testbench setup)
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+ sc.w a2, a1, (a0)
+ li a4, 1
+ bne a2, a4, fail
+ lw a4, 0(a0)
+ bne a3, a4, fail
+
+
+
+ j pass
+
+
+fail: //x28 => error code
+ li x2, 0xF00FFF24
+ sw x28, 0(x2)
+
+pass:
+ li x2, 0xF00FFF20
+ sw x0, 0(x2)
+
+
+
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
diff --git a/VexRiscv/src/test/cpp/custom/atomic/src/ld b/VexRiscv/src/test/cpp/custom/atomic/src/ld
new file mode 100644
index 0000000..8d95523
--- /dev/null
+++ b/VexRiscv/src/test/cpp/custom/atomic/src/ld
@@ -0,0 +1,17 @@
+OUTPUT_ARCH( "riscv" )
+
+MEMORY {
+ onChipRam (W!RX)/*(RX)*/ : ORIGIN = 0x00000000, LENGTH = 8K
+}
+
+SECTIONS
+{
+ . = 0x000;
+
+ .crt_section :
+ {
+ . = ALIGN(4);
+ *crt.o(.text)
+ } > onChipRam
+
+}
diff --git a/VexRiscv/src/test/cpp/custom/custom_csr/build/custom_csr.asm b/VexRiscv/src/test/cpp/custom/custom_csr/build/custom_csr.asm
new file mode 100644
index 0000000..cf186d1
--- /dev/null
+++ b/VexRiscv/src/test/cpp/custom/custom_csr/build/custom_csr.asm
@@ -0,0 +1,55 @@
+
+build/custom_csr.elf: file format elf32-littleriscv
+
+
+Disassembly of section .crt_section:
+
+00000000 <_start>:
+ 0: 00100e13 li t3,1
+ 4: b04020f3 csrr ra,mhpmcounter4
+ 8: b0402173 csrr sp,mhpmcounter4
+ c: b04021f3 csrr gp,mhpmcounter4
+ 10: 06114863 blt sp,ra,80 <fail>
+ 14: 0621c663 blt gp,sp,80 <fail>
+ 18: 00200e13 li t3,2
+ 1c: 005dc0b7 lui ra,0x5dc
+ 20: 98a08093 addi ra,ra,-1654 # 5db98a <pass+0x5db8fe>
+ 24: b0409073 csrw mhpmcounter4,ra
+ 28: b0402173 csrr sp,mhpmcounter4
+ 2c: 04114a63 blt sp,ra,80 <fail>
+ 30: 00300e13 li t3,3
+ 34: b05020f3 csrr ra,mhpmcounter5
+ 38: b0502173 csrr sp,mhpmcounter5
+ 3c: b05021f3 csrr gp,mhpmcounter5
+ 40: 0420d063 ble sp,ra,80 <fail>
+ 44: 02315e63 ble gp,sp,80 <fail>
+ 48: 00400e13 li t3,4
+ 4c: b0609073 csrw mhpmcounter6,ra
+ 50: b04020f3 csrr ra,mhpmcounter4
+ 54: 10000113 li sp,256
+ 58: 0220f463 bleu sp,ra,80 <fail>
+ 5c: 00500e13 li t3,5
+ 60: b07020f3 csrr ra,mhpmcounter7
+ 64: b04020f3 csrr ra,mhpmcounter4
+ 68: 40000137 lui sp,0x40000
+ 6c: 10010113 addi sp,sp,256 # 40000100 <pass+0x40000074>
+ 70: 400001b7 lui gp,0x40000
+ 74: 0020f663 bleu sp,ra,80 <fail>
+ 78: 0030e463 bltu ra,gp,80 <fail>
+ 7c: 0100006f j 8c <pass>
+
+00000080 <fail>:
+ 80: f0100137 lui sp,0xf0100
+ 84: f2410113 addi sp,sp,-220 # f00fff24 <pass+0xf00ffe98>
+ 88: 01c12023 sw t3,0(sp)
+
+0000008c <pass>:
+ 8c: f0100137 lui sp,0xf0100
+ 90: f2010113 addi sp,sp,-224 # f00fff20 <pass+0xf00ffe94>
+ 94: 00012023 sw zero,0(sp)
+ 98: 00000013 nop
+ 9c: 00000013 nop
+ a0: 00000013 nop
+ a4: 00000013 nop
+ a8: 00000013 nop
+ ac: 00000013 nop
diff --git a/VexRiscv/src/test/cpp/custom/custom_csr/build/custom_csr.elf b/VexRiscv/src/test/cpp/custom/custom_csr/build/custom_csr.elf
new file mode 100755
index 0000000..61da8ff
--- /dev/null
+++ b/VexRiscv/src/test/cpp/custom/custom_csr/build/custom_csr.elf
Binary files differ
diff --git a/VexRiscv/src/test/cpp/custom/custom_csr/build/custom_csr.hex b/VexRiscv/src/test/cpp/custom/custom_csr/build/custom_csr.hex
new file mode 100644
index 0000000..16b3a39
--- /dev/null
+++ b/VexRiscv/src/test/cpp/custom/custom_csr/build/custom_csr.hex
@@ -0,0 +1,12 @@
+:10000000130E1000F32040B0732140B0F32140B034
+:100010006348110663C62106130E2000B7C05D00B9
+:100020009380A098739040B0732140B0634A11044C
+:10003000130E3000F32050B0732150B0F32150B0B4
+:1000400063D02004635E3102130E4000739060B0F1
+:10005000F32040B01301001063F42002130E50008F
+:10006000F32070B0F32040B03701004013010110BD
+:10007000B701004063F6200063E430006F00000128
+:10008000370110F0130141F22320C101370110F0B4
+:10009000130101F2232001001300000013000000EF
+:1000A0001300000013000000130000001300000004
+:00000001FF
diff --git a/VexRiscv/src/test/cpp/custom/custom_csr/build/custom_csr.map b/VexRiscv/src/test/cpp/custom/custom_csr/build/custom_csr.map
new file mode 100644
index 0000000..ec2b738
--- /dev/null
+++ b/VexRiscv/src/test/cpp/custom/custom_csr/build/custom_csr.map
@@ -0,0 +1,30 @@
+
+Memory Configuration
+
+Name Origin Length Attributes
+onChipRam 0x0000000000000000 0x0000000000002000 w !xr
+*default* 0x0000000000000000 0xffffffffffffffff
+
+Linker script and memory map
+
+LOAD build/src/crt.o
+LOAD /opt/riscv/bin/../lib/gcc/riscv64-unknown-elf/7.2.0/rv32i/ilp32/libgcc.a
+START GROUP
+LOAD /opt/riscv/bin/../lib/gcc/riscv64-unknown-elf/7.2.0/../../../../riscv64-unknown-elf/lib/rv32i/ilp32/libc.a
+LOAD /opt/riscv/bin/../lib/gcc/riscv64-unknown-elf/7.2.0/../../../../riscv64-unknown-elf/lib/rv32i/ilp32/libgloss.a
+END GROUP
+LOAD /opt/riscv/bin/../lib/gcc/riscv64-unknown-elf/7.2.0/rv32i/ilp32/libgcc.a
+ 0x0000000000000000 . = 0x0
+
+.crt_section 0x0000000000000000 0xb0
+ 0x0000000000000000 . = ALIGN (0x4)
+ *crt.o(.text)
+ .text 0x0000000000000000 0xb0 build/src/crt.o
+ 0x0000000000000000 _start
+OUTPUT(build/custom_csr.elf elf32-littleriscv)
+
+.data 0x00000000000000b0 0x0
+ .data 0x00000000000000b0 0x0 build/src/crt.o
+
+.bss 0x00000000000000b0 0x0
+ .bss 0x00000000000000b0 0x0 build/src/crt.o
diff --git a/VexRiscv/src/test/cpp/custom/custom_csr/build/custom_csr.v b/VexRiscv/src/test/cpp/custom/custom_csr/build/custom_csr.v
new file mode 100755
index 0000000..81c1861
--- /dev/null
+++ b/VexRiscv/src/test/cpp/custom/custom_csr/build/custom_csr.v
@@ -0,0 +1,12 @@
+@00000000
+13 0E 10 00 F3 20 40 B0 73 21 40 B0 F3 21 40 B0
+63 48 11 06 63 C6 21 06 13 0E 20 00 B7 C0 5D 00
+93 80 A0 98 73 90 40 B0 73 21 40 B0 63 4A 11 04
+13 0E 30 00 F3 20 50 B0 73 21 50 B0 F3 21 50 B0
+63 D0 20 04 63 5E 31 02 13 0E 40 00 73 90 60 B0
+F3 20 40 B0 13 01 00 10 63 F4 20 02 13 0E 50 00
+F3 20 70 B0 F3 20 40 B0 37 01 00 40 13 01 01 10
+B7 01 00 40 63 F6 20 00 63 E4 30 00 6F 00 00 01
+37 01 10 F0 13 01 41 F2 23 20 C1 01 37 01 10 F0
+13 01 01 F2 23 20 01 00 13 00 00 00 13 00 00 00
+13 00 00 00 13 00 00 00 13 00 00 00 13 00 00 00
diff --git a/VexRiscv/src/test/cpp/custom/custom_csr/makefile b/VexRiscv/src/test/cpp/custom/custom_csr/makefile
new file mode 100644
index 0000000..5621ec5
--- /dev/null
+++ b/VexRiscv/src/test/cpp/custom/custom_csr/makefile
@@ -0,0 +1,73 @@
+PROJ_NAME=custom_csr
+
+
+RISCV_PATH=/opt/riscv/
+CFLAGS += -march=rv32i -mabi=ilp32
+RISCV_NAME = riscv64-unknown-elf
+RISCV_OBJCOPY = $(RISCV_PATH)/bin/$(RISCV_NAME)-objcopy
+RISCV_OBJDUMP = $(RISCV_PATH)/bin/$(RISCV_NAME)-objdump
+RISCV_CLIB=$(RISCV_PATH)$(RISCV_NAME)/lib/
+RISCV_CC=$(RISCV_PATH)/bin/$(RISCV_NAME)-gcc
+LDSCRIPT=src/ld
+
+
+SRCS = $(wildcard src/*.c) \
+ $(wildcard src/*.cpp) \
+ $(wildcard src/*.S)
+
+
+CFLAGS += -static
+LDFLAGS += -e_start -T $(LDSCRIPT) -nostartfiles -Wl,-Map,$(OBJDIR)/$(PROJ_NAME).map -Wl,--print-memory-usage
+OBJDIR = build
+OBJS := $(SRCS)
+OBJS := $(OBJS:.c=.o)
+OBJS := $(OBJS:.cpp=.o)
+OBJS := $(OBJS:.S=.o)
+OBJS := $(addprefix $(OBJDIR)/,$(OBJS))
+
+
+
+all: $(OBJDIR)/$(PROJ_NAME).elf $(OBJDIR)/$(PROJ_NAME).hex $(OBJDIR)/$(PROJ_NAME).asm $(OBJDIR)/$(PROJ_NAME).v
+ @echo "done"
+
+$(OBJDIR)/%.elf: $(OBJS) | $(OBJDIR)
+ $(RISCV_CC) $(CFLAGS) -o $@ $^ $(LDFLAGS) $(LIBS)
+
+%.hex: %.elf
+ $(RISCV_OBJCOPY) -O ihex $^ $@
+
+%.bin: %.elf
+ $(RISCV_OBJCOPY) -O binary $^ $@
+
+%.v: %.elf
+ $(RISCV_OBJCOPY) -O verilog $^ $@
+
+%.asm: %.elf
+ $(RISCV_OBJDUMP) -S -d $^ > $@
+
+$(OBJDIR)/%.o: %.c
+ mkdir -p $(dir $@)
+ $(RISCV_CC) -c $(CFLAGS) $(INC) -o $@ $^
+
+$(OBJDIR)/%.o: %.cpp
+ mkdir -p $(dir $@)
+ $(RISCV_CC) -c $(CFLAGS) $(INC) -o $@ $^
+
+$(OBJDIR)/%.o: %.S
+ mkdir -p $(dir $@)
+ $(RISCV_CC) -c $(CFLAGS) -o $@ $^ -D__ASSEMBLY__=1
+
+$(OBJDIR):
+ mkdir -p $@
+
+clean:
+ rm -f $(OBJDIR)/$(PROJ_NAME).elf
+ rm -f $(OBJDIR)/$(PROJ_NAME).hex
+ rm -f $(OBJDIR)/$(PROJ_NAME).map
+ rm -f $(OBJDIR)/$(PROJ_NAME).v
+ rm -f $(OBJDIR)/$(PROJ_NAME).asm
+ find $(OBJDIR) -type f -name '*.o' -print0 | xargs -0 -r rm
+
+.SECONDARY: $(OBJS)
+
+
diff --git a/VexRiscv/src/test/cpp/custom/custom_csr/src/crt.S b/VexRiscv/src/test/cpp/custom/custom_csr/src/crt.S
new file mode 100644
index 0000000..8b7e43b
--- /dev/null
+++ b/VexRiscv/src/test/cpp/custom/custom_csr/src/crt.S
@@ -0,0 +1,64 @@
+.globl _start
+_start:
+
+//Test 1
+ li x28, 1
+ csrr x1, 0xB04
+ csrr x2, 0xB04
+ csrr x3, 0xB04
+ blt x2, x1, fail
+ blt x3, x2, fail
+
+
+//Test 2
+ li x28, 2
+ li x1, 6142346
+ csrw 0xB04, x1
+ csrr x2, 0xB04
+ blt x2, x1, fail
+
+
+//Test 3
+ li x28, 3
+ csrr x1, 0xB05
+ csrr x2, 0xB05
+ csrr x3, 0xB05
+ bge x1, x2, fail
+ bge x2, x3, fail
+
+
+
+//Test 4
+ li x28, 4
+ csrw 0xB06, x1
+ csrr x1, 0xB04
+ li x2, 0x100
+ bgeu x1, x2, fail
+
+//Test 5
+ li x28, 5
+ csrr x1, 0xB07
+ csrr x1, 0xB04
+ li x2, 0x40000100
+ li x3, 0x40000000
+ bgeu x1, x2, fail
+ bltu x1, x3, fail
+
+ j pass
+
+fail: //x28 => error code
+ li x2, 0xF00FFF24
+ sw x28, 0(x2)
+
+pass:
+ li x2, 0xF00FFF20
+ sw x0, 0(x2)
+
+
+
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
diff --git a/VexRiscv/src/test/cpp/custom/custom_csr/src/ld b/VexRiscv/src/test/cpp/custom/custom_csr/src/ld
new file mode 100644
index 0000000..8d95523
--- /dev/null
+++ b/VexRiscv/src/test/cpp/custom/custom_csr/src/ld
@@ -0,0 +1,17 @@
+OUTPUT_ARCH( "riscv" )
+
+MEMORY {
+ onChipRam (W!RX)/*(RX)*/ : ORIGIN = 0x00000000, LENGTH = 8K
+}
+
+SECTIONS
+{
+ . = 0x000;
+
+ .crt_section :
+ {
+ . = ALIGN(4);
+ *crt.o(.text)
+ } > onChipRam
+
+}
diff --git a/VexRiscv/src/test/cpp/custom/simd_add/build/custom_simd_add.asm b/VexRiscv/src/test/cpp/custom/simd_add/build/custom_simd_add.asm
new file mode 100644
index 0000000..f993948
--- /dev/null
+++ b/VexRiscv/src/test/cpp/custom/simd_add/build/custom_simd_add.asm
@@ -0,0 +1,63 @@
+
+build/custom_simd_add.elf: file format elf32-littleriscv
+
+
+Disassembly of section .crt_section:
+
+00000000 <_start>:
+ 0: 00100e13 li t3,1
+ 4: 060000b3 0x60000b3
+ 8: 08009c63 bnez ra,a0 <fail>
+ c: 00200e13 li t3,2
+ 10: 00000093 li ra,0
+ 14: 00000113 li sp,0
+ 18: 062080b3 0x62080b3
+ 1c: 08009263 bnez ra,a0 <fail>
+ 20: 00300e13 li t3,3
+ 24: 010200b7 lui ra,0x1020
+ 28: 30408093 addi ra,ra,772 # 1020304 <pass+0x1020258>
+ 2c: 00000113 li sp,0
+ 30: 062081b3 0x62081b3
+ 34: 06119663 bne gp,ra,a0 <fail>
+ 38: 00400e13 li t3,4
+ 3c: 03061237 lui tp,0x3061
+ 40: 90c20213 addi tp,tp,-1780 # 306090c <pass+0x3060860>
+ 44: 010200b7 lui ra,0x1020
+ 48: 30408093 addi ra,ra,772 # 1020304 <pass+0x1020258>
+ 4c: 02040137 lui sp,0x2040
+ 50: 60810113 addi sp,sp,1544 # 2040608 <pass+0x204055c>
+ 54: 062081b3 0x62081b3
+ 58: 04419463 bne gp,tp,a0 <fail>
+ 5c: 00500e13 li t3,5
+ 60: ff000237 lui tp,0xff000
+ 64: 10220213 addi tp,tp,258 # ff000102 <pass+0xff000056>
+ 68: fff00093 li ra,-1
+ 6c: 00010137 lui sp,0x10
+ 70: 20310113 addi sp,sp,515 # 10203 <pass+0x10157>
+ 74: 062081b3 0x62081b3
+ 78: 02419463 bne gp,tp,a0 <fail>
+ 7c: 00600e13 li t3,6
+ 80: 00600293 li t0,6
+ 84: 00100093 li ra,1
+ 88: 00200113 li sp,2
+ 8c: 00300193 li gp,3
+ 90: 062080b3 0x62080b3
+ 94: 063080b3 0x63080b3
+ 98: 00509463 bne ra,t0,a0 <fail>
+ 9c: 0100006f j ac <pass>
+
+000000a0 <fail>:
+ a0: f0100137 lui sp,0xf0100
+ a4: f2410113 addi sp,sp,-220 # f00fff24 <pass+0xf00ffe78>
+ a8: 01c12023 sw t3,0(sp)
+
+000000ac <pass>:
+ ac: f0100137 lui sp,0xf0100
+ b0: f2010113 addi sp,sp,-224 # f00fff20 <pass+0xf00ffe74>
+ b4: 00012023 sw zero,0(sp)
+ b8: 00000013 nop
+ bc: 00000013 nop
+ c0: 00000013 nop
+ c4: 00000013 nop
+ c8: 00000013 nop
+ cc: 00000013 nop
diff --git a/VexRiscv/src/test/cpp/custom/simd_add/build/custom_simd_add.elf b/VexRiscv/src/test/cpp/custom/simd_add/build/custom_simd_add.elf
new file mode 100755
index 0000000..889f618
--- /dev/null
+++ b/VexRiscv/src/test/cpp/custom/simd_add/build/custom_simd_add.elf
Binary files differ
diff --git a/VexRiscv/src/test/cpp/custom/simd_add/build/custom_simd_add.hex b/VexRiscv/src/test/cpp/custom/simd_add/build/custom_simd_add.hex
new file mode 100644
index 0000000..91ef7e3
--- /dev/null
+++ b/VexRiscv/src/test/cpp/custom/simd_add/build/custom_simd_add.hex
@@ -0,0 +1,14 @@
+:10000000130E1000B3000006639C0008130E2000BE
+:100010009300000013010000B380200663920008E3
+:10002000130E3000B700020193804030130100002E
+:10003000B381200663961106130E400037120603A3
+:100040001302C290B70002019380403037010402CE
+:1000500013018160B381200663944104130E5000A4
+:10006000370200FF130222109300F0FF3701010056
+:1000700013013120B381200663944102130E600006
+:1000800093026000930010001301200093013000E0
+:10009000B3802006B3803006639450006F000001E7
+:1000A000370110F0130141F22320C101370110F094
+:1000B000130101F2232001001300000013000000CF
+:1000C00013000000130000001300000013000000E4
+:00000001FF
diff --git a/VexRiscv/src/test/cpp/custom/simd_add/build/custom_simd_add.map b/VexRiscv/src/test/cpp/custom/simd_add/build/custom_simd_add.map
new file mode 100644
index 0000000..0f47c3f
--- /dev/null
+++ b/VexRiscv/src/test/cpp/custom/simd_add/build/custom_simd_add.map
@@ -0,0 +1,30 @@
+
+Memory Configuration
+
+Name Origin Length Attributes
+onChipRam 0x0000000000000000 0x0000000000002000 w !xr
+*default* 0x0000000000000000 0xffffffffffffffff
+
+Linker script and memory map
+
+LOAD build/src/crt.o
+LOAD /opt/riscv/bin/../lib/gcc/riscv64-unknown-elf/7.2.0/rv32i/ilp32/libgcc.a
+START GROUP
+LOAD /opt/riscv/bin/../lib/gcc/riscv64-unknown-elf/7.2.0/../../../../riscv64-unknown-elf/lib/rv32i/ilp32/libc.a
+LOAD /opt/riscv/bin/../lib/gcc/riscv64-unknown-elf/7.2.0/../../../../riscv64-unknown-elf/lib/rv32i/ilp32/libgloss.a
+END GROUP
+LOAD /opt/riscv/bin/../lib/gcc/riscv64-unknown-elf/7.2.0/rv32i/ilp32/libgcc.a
+ 0x0000000000000000 . = 0x0
+
+.crt_section 0x0000000000000000 0xd0
+ 0x0000000000000000 . = ALIGN (0x4)
+ *crt.o(.text)
+ .text 0x0000000000000000 0xd0 build/src/crt.o
+ 0x0000000000000000 _start
+OUTPUT(build/custom_simd_add.elf elf32-littleriscv)
+
+.data 0x00000000000000d0 0x0
+ .data 0x00000000000000d0 0x0 build/src/crt.o
+
+.bss 0x00000000000000d0 0x0
+ .bss 0x00000000000000d0 0x0 build/src/crt.o
diff --git a/VexRiscv/src/test/cpp/custom/simd_add/build/custom_simd_add.v b/VexRiscv/src/test/cpp/custom/simd_add/build/custom_simd_add.v
new file mode 100755
index 0000000..07cf05d
--- /dev/null
+++ b/VexRiscv/src/test/cpp/custom/simd_add/build/custom_simd_add.v
@@ -0,0 +1,14 @@
+@00000000
+13 0E 10 00 B3 00 00 06 63 9C 00 08 13 0E 20 00
+93 00 00 00 13 01 00 00 B3 80 20 06 63 92 00 08
+13 0E 30 00 B7 00 02 01 93 80 40 30 13 01 00 00
+B3 81 20 06 63 96 11 06 13 0E 40 00 37 12 06 03
+13 02 C2 90 B7 00 02 01 93 80 40 30 37 01 04 02
+13 01 81 60 B3 81 20 06 63 94 41 04 13 0E 50 00
+37 02 00 FF 13 02 22 10 93 00 F0 FF 37 01 01 00
+13 01 31 20 B3 81 20 06 63 94 41 02 13 0E 60 00
+93 02 60 00 93 00 10 00 13 01 20 00 93 01 30 00
+B3 80 20 06 B3 80 30 06 63 94 50 00 6F 00 00 01
+37 01 10 F0 13 01 41 F2 23 20 C1 01 37 01 10 F0
+13 01 01 F2 23 20 01 00 13 00 00 00 13 00 00 00
+13 00 00 00 13 00 00 00 13 00 00 00 13 00 00 00
diff --git a/VexRiscv/src/test/cpp/custom/simd_add/makefile b/VexRiscv/src/test/cpp/custom/simd_add/makefile
new file mode 100644
index 0000000..49c9179
--- /dev/null
+++ b/VexRiscv/src/test/cpp/custom/simd_add/makefile
@@ -0,0 +1,73 @@
+PROJ_NAME=custom_simd_add
+
+
+RISCV_PATH=/opt/riscv/
+CFLAGS += -march=rv32i -mabi=ilp32
+RISCV_NAME = riscv64-unknown-elf
+RISCV_OBJCOPY = $(RISCV_PATH)/bin/$(RISCV_NAME)-objcopy
+RISCV_OBJDUMP = $(RISCV_PATH)/bin/$(RISCV_NAME)-objdump
+RISCV_CLIB=$(RISCV_PATH)$(RISCV_NAME)/lib/
+RISCV_CC=$(RISCV_PATH)/bin/$(RISCV_NAME)-gcc
+LDSCRIPT=src/ld
+
+
+SRCS = $(wildcard src/*.c) \
+ $(wildcard src/*.cpp) \
+ $(wildcard src/*.S)
+
+
+CFLAGS += -static
+LDFLAGS += -e_start -T $(LDSCRIPT) -nostartfiles -Wl,-Map,$(OBJDIR)/$(PROJ_NAME).map -Wl,--print-memory-usage
+OBJDIR = build
+OBJS := $(SRCS)
+OBJS := $(OBJS:.c=.o)
+OBJS := $(OBJS:.cpp=.o)
+OBJS := $(OBJS:.S=.o)
+OBJS := $(addprefix $(OBJDIR)/,$(OBJS))
+
+
+
+all: $(OBJDIR)/$(PROJ_NAME).elf $(OBJDIR)/$(PROJ_NAME).hex $(OBJDIR)/$(PROJ_NAME).asm $(OBJDIR)/$(PROJ_NAME).v
+ @echo "done"
+
+$(OBJDIR)/%.elf: $(OBJS) | $(OBJDIR)
+ $(RISCV_CC) $(CFLAGS) -o $@ $^ $(LDFLAGS) $(LIBS)
+
+%.hex: %.elf
+ $(RISCV_OBJCOPY) -O ihex $^ $@
+
+%.bin: %.elf
+ $(RISCV_OBJCOPY) -O binary $^ $@
+
+%.v: %.elf
+ $(RISCV_OBJCOPY) -O verilog $^ $@
+
+%.asm: %.elf
+ $(RISCV_OBJDUMP) -S -d $^ > $@
+
+$(OBJDIR)/%.o: %.c
+ mkdir -p $(dir $@)
+ $(RISCV_CC) -c $(CFLAGS) $(INC) -o $@ $^
+
+$(OBJDIR)/%.o: %.cpp
+ mkdir -p $(dir $@)
+ $(RISCV_CC) -c $(CFLAGS) $(INC) -o $@ $^
+
+$(OBJDIR)/%.o: %.S
+ mkdir -p $(dir $@)
+ $(RISCV_CC) -c $(CFLAGS) -o $@ $^ -D__ASSEMBLY__=1
+
+$(OBJDIR):
+ mkdir -p $@
+
+clean:
+ rm -f $(OBJDIR)/$(PROJ_NAME).elf
+ rm -f $(OBJDIR)/$(PROJ_NAME).hex
+ rm -f $(OBJDIR)/$(PROJ_NAME).map
+ rm -f $(OBJDIR)/$(PROJ_NAME).v
+ rm -f $(OBJDIR)/$(PROJ_NAME).asm
+ find $(OBJDIR) -type f -name '*.o' -print0 | xargs -0 -r rm
+
+.SECONDARY: $(OBJS)
+
+
diff --git a/VexRiscv/src/test/cpp/custom/simd_add/src/crt.S b/VexRiscv/src/test/cpp/custom/simd_add/src/crt.S
new file mode 100644
index 0000000..99fa3d3
--- /dev/null
+++ b/VexRiscv/src/test/cpp/custom/simd_add/src/crt.S
@@ -0,0 +1,72 @@
+.globl _start
+_start:
+
+#define r_type_insn(_f7, _rs2, _rs1, _f3, _rd, _opc) \
+.word (((_f7) << 25) | ((_rs2) << 20) | ((_rs1) << 15) | ((_f3) << 12) | ((_rd) << 7) | ((_opc) << 0))
+
+#define SIMD_ADD(_rd, _rs1, _rs2 ) \
+r_type_insn(0b0000011, _rs2, _rs1, 0b000, _rd, 0b0110011)
+
+//Test 1
+ li x28, 1
+ SIMD_ADD(1, 0, 0)
+ bne x1, x0, fail
+
+//Test 2
+ li x28, 2
+ li x1, 0x00000000
+ li x2, 0x00000000
+ SIMD_ADD(1, 1, 2)
+ bne x1, x0, fail
+
+//Test 3
+ li x28, 3
+ li x1, 0x01020304
+ li x2, 0x00000000
+ SIMD_ADD(3, 1, 2)
+ bne x3, x1, fail
+
+//Test 4
+ li x28, 4
+ li x4, 0x0306090C
+ li x1, 0x01020304
+ li x2, 0x02040608
+ SIMD_ADD(3, 1, 2)
+ bne x3, x4, fail
+
+//Test 5
+ li x28, 5
+ li x4, 0xFF000102
+ li x1, 0xFFFFFFFF
+ li x2, 0x00010203
+ SIMD_ADD(3, 1, 2)
+ bne x3, x4, fail
+
+//Test 5
+ li x28, 6
+ li x5, 0x00000006
+ li x1, 0x00000001
+ li x2, 0x00000002
+ li x3, 0x00000003
+ SIMD_ADD(1, 1, 2)
+ SIMD_ADD(1, 1, 3)
+ bne x1, x5, fail
+
+ j pass
+
+fail: //x28 => error code
+ li x2, 0xF00FFF24
+ sw x28, 0(x2)
+
+pass:
+ li x2, 0xF00FFF20
+ sw x0, 0(x2)
+
+
+
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
diff --git a/VexRiscv/src/test/cpp/custom/simd_add/src/ld b/VexRiscv/src/test/cpp/custom/simd_add/src/ld
new file mode 100644
index 0000000..3a4f112
--- /dev/null
+++ b/VexRiscv/src/test/cpp/custom/simd_add/src/ld
@@ -0,0 +1,15 @@
+OUTPUT_ARCH( "riscv" )
+
+MEMORY {
+ onChipRam (W!RX)/*(RX)*/ : ORIGIN = 0x80000000, LENGTH = 8K
+}
+
+SECTIONS
+{
+ .crt_section :
+ {
+ . = ALIGN(4);
+ *crt.o(.text)
+ } > onChipRam
+
+}
diff --git a/VexRiscv/src/test/cpp/fpu/math/.gitignore b/VexRiscv/src/test/cpp/fpu/math/.gitignore
new file mode 100644
index 0000000..56d9c77
--- /dev/null
+++ b/VexRiscv/src/test/cpp/fpu/math/.gitignore
@@ -0,0 +1,2 @@
+*.so
+*.a
diff --git a/VexRiscv/src/test/cpp/fpu/math/fpu_math.c b/VexRiscv/src/test/cpp/fpu/math/fpu_math.c
new file mode 100644
index 0000000..da45fe2
--- /dev/null
+++ b/VexRiscv/src/test/cpp/fpu/math/fpu_math.c
@@ -0,0 +1,79 @@
+#include <stdio.h>
+#include <stdint.h>
+#include <stdint.h>
+#include <jni.h>
+#include <softfloat.h>
+
+extern void miaou();
+
+
+//#include <fenv.h>
+//#pragma STDC FENV_ACCESS ON
+//int applyRounding(int rounding){
+// int ret = fegetround( );
+// switch(rounding){
+// case 0: fesetround(FE_TONEAREST); break;
+// case 1: fesetround(FE_TOWARDZERO); break;
+// case 2: fesetround(FE_DOWNWARD); break;
+// case 3: fesetround(FE_UPWARD); break;
+// }
+// return ret;
+//}
+// const int originalRounding = applyRounding(rounding);
+// fesetround(originalRounding);
+
+void applyRounding(int rounding){
+ switch(rounding){
+ case 0: softfloat_roundingMode = 0; break;
+ case 1: softfloat_roundingMode = 1; break;
+ case 2: softfloat_roundingMode = 2; break;
+ case 3: softfloat_roundingMode = 3; break;
+ case 4: softfloat_roundingMode = 4; break;
+ }
+}
+
+#define API __attribute__((visibility("default")))
+
+//float32_t toF32(float v){
+// float32_t x;
+// x.v = ;
+// return x;
+//}
+
+#define toF32(v) (*((float32_t*)&v))
+#define fromF32(x) (*((float*)&(x.v)))
+
+
+#define toF64(v) (*((float64_t*)&v))
+#define fromF64(x) (*((double*)&(x.v)))
+
+JNIEXPORT jfloat API JNICALL Java_vexriscv_ip_fpu_FpuMath_addF32(JNIEnv * env, jobject obj, jfloat a, jfloat b, jint rounding){
+ applyRounding(rounding);
+ float32_t v = f32_add(toF32(a), toF32(b));
+ return fromF32(v);
+}
+
+JNIEXPORT jfloat API JNICALL Java_vexriscv_ip_fpu_FpuMath_mulF32(JNIEnv * env, jobject obj, jfloat a, jfloat b, jint rounding){
+ applyRounding(rounding);
+ float32_t v = f32_mul(toF32(a), toF32(b));
+ return fromF32(v);
+}
+JNIEXPORT jint API JNICALL Java_vexriscv_ip_fpu_FpuMath_mulFlagF32(JNIEnv * env, jobject obj, jfloat a, jfloat b, jint rounding){
+ applyRounding(rounding);
+ softfloat_exceptionFlags = 0;
+ float32_t v = f32_mul(toF32(a), toF32(b));
+ return softfloat_exceptionFlags;
+}
+
+
+JNIEXPORT jfloat API JNICALL Java_vexriscv_ip_fpu_FpuMath_d2f(JNIEnv * env, jobject obj, jdouble a, jint rounding){
+ applyRounding(rounding);
+ float32_t v = f64_to_f32(toF64(a));
+ return fromF32(v);
+}
+JNIEXPORT jint API JNICALL Java_vexriscv_ip_fpu_FpuMath_d2fFlag(JNIEnv * env, jobject obj, jdouble a, jint rounding){
+ applyRounding(rounding);
+ softfloat_exceptionFlags = 0;
+ float32_t v = f64_to_f32(toF64(a));
+ return softfloat_exceptionFlags;
+} \ No newline at end of file
diff --git a/VexRiscv/src/test/cpp/fpu/math/libcode.version b/VexRiscv/src/test/cpp/fpu/math/libcode.version
new file mode 100644
index 0000000..f039be6
--- /dev/null
+++ b/VexRiscv/src/test/cpp/fpu/math/libcode.version
@@ -0,0 +1,4 @@
+CODEABI_1.0 {
+ global: FpuMath_*;
+ local: *;
+} \ No newline at end of file
diff --git a/VexRiscv/src/test/cpp/murax/main.cpp b/VexRiscv/src/test/cpp/murax/main.cpp
new file mode 100644
index 0000000..735875f
--- /dev/null
+++ b/VexRiscv/src/test/cpp/murax/main.cpp
@@ -0,0 +1,64 @@
+#include "VMurax.h"
+#include "VMurax_Murax.h"
+#include "verilated.h"
+#include "verilated_vcd_c.h"
+
+#include "../common/framework.h"
+#include "../common/jtag.h"
+#include "../common/uart.h"
+
+class MuraxWorkspace : public Workspace<VMurax>{
+public:
+ MuraxWorkspace() : Workspace("Murax"){
+ ClockDomain *mainClk = new ClockDomain(&top->io_mainClk,NULL,83333,300000);
+ AsyncReset *asyncReset = new AsyncReset(&top->io_asyncReset,50000);
+ UartRx *uartRx = new UartRx(&top->io_uart_txd,1.0e12/115200);
+ UartTx *uartTx = new UartTx(&top->io_uart_rxd,1.0e12/115200);
+
+ timeProcesses.push_back(mainClk);
+ timeProcesses.push_back(asyncReset);
+ timeProcesses.push_back(uartRx);
+ timeProcesses.push_back(uartTx);
+
+ Jtag *jtag = new Jtag(&top->io_jtag_tms,&top->io_jtag_tdi,&top->io_jtag_tdo,&top->io_jtag_tck,83333*4);
+ timeProcesses.push_back(jtag);
+
+ #ifdef TRACE
+ //speedFactor = 10e-3;
+ //cout << "Simulation caped to " << speedFactor << " of real time"<< endl;
+ #endif
+ }
+};
+
+
+struct timespec timer_start(){
+ struct timespec start_time;
+ clock_gettime(CLOCK_PROCESS_CPUTIME_ID, &start_time);
+ return start_time;
+}
+
+long timer_end(struct timespec start_time){
+ struct timespec end_time;
+ clock_gettime(CLOCK_PROCESS_CPUTIME_ID, &end_time);
+ uint64_t diffInNanos = end_time.tv_sec*1e9 + end_time.tv_nsec - start_time.tv_sec*1e9 - start_time.tv_nsec;
+ return diffInNanos;
+}
+
+
+
+int main(int argc, char **argv, char **env) {
+
+ Verilated::randReset(2);
+ Verilated::commandArgs(argc, argv);
+
+ printf("BOOT\n");
+ timespec startedAt = timer_start();
+
+ MuraxWorkspace().run(1e9);
+
+ uint64_t duration = timer_end(startedAt);
+ cout << endl << "****************************************************************" << endl;
+
+
+ exit(0);
+}
diff --git a/VexRiscv/src/test/cpp/murax/makefile b/VexRiscv/src/test/cpp/murax/makefile
new file mode 100644
index 0000000..7c946ae
--- /dev/null
+++ b/VexRiscv/src/test/cpp/murax/makefile
@@ -0,0 +1,42 @@
+DEBUG?=no
+TRACE?=no
+PRINT_PERF?=no
+TRACE_START=0
+ADDCFLAGS += -CFLAGS -pthread -LDFLAGS -pthread
+
+
+ifeq ($(TRACE),yes)
+ VERILATOR_ARGS += --trace
+ ADDCFLAGS += -CFLAGS -DTRACE --trace-fst
+endif
+ifeq ($(DEBUG),yes)
+ ADDCFLAGS += -CFLAGS "-g3 -O0"
+endif
+ifneq ($(DEBUG),yes)
+ ADDCFLAGS += -CFLAGS "-O3"
+endif
+ifeq ($(PRINT_PERF),yes)
+ ADDCFLAGS += -CFLAGS -DPRINT_PERF
+endif
+
+ADDCFLAGS += -CFLAGS -DTRACE_START=${TRACE_START}
+
+
+
+all: clean compile
+
+run: compile
+ ./obj_dir/VMurax
+
+verilate: ../../../../Murax.v
+ rm -f Murax.v*.bin
+ cp ../../../../Murax.v*.bin . | true
+ verilator -I../../../.. -cc ../../../../Murax.v -CFLAGS -std=c++11 ${ADDCFLAGS} --gdbbt ${VERILATOR_ARGS} -Wno-WIDTH -Wno-UNOPTFLAT --x-assign unique --exe main.cpp
+
+compile: verilate
+ make -j -C obj_dir/ -f VMurax.mk VMurax
+
+clean:
+ rm -rf obj_dir
+ rm -f Murax.v*.bin
+
diff --git a/VexRiscv/src/test/cpp/murax/murax.gtkw b/VexRiscv/src/test/cpp/murax/murax.gtkw
new file mode 100644
index 0000000..5fa869b
--- /dev/null
+++ b/VexRiscv/src/test/cpp/murax/murax.gtkw
@@ -0,0 +1,51 @@
+[*]
+[*] GTKWave Analyzer v3.3.58 (w)1999-2014 BSI
+[*] Mon Jul 31 17:03:11 2017
+[*]
+[dumpfile] "/home/spinalvm/Spinal/VexRiscv/src/test/cpp/murax/Murax.vcd"
+[dumpfile_mtime] "Mon Jul 31 17:03:01 2017"
+[dumpfile_size] 1539276802
+[savefile] "/home/spinalvm/Spinal/VexRiscv/src/test/cpp/murax/murax.gtkw"
+[timestart] 300964770000
+[size] 1776 953
+[pos] -1 -353
+*-23.000000 300989600000 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
+[treeopen] TOP.
+[treeopen] TOP.Murax.
+[treeopen] TOP.Murax.system_uartCtrl.
+[treeopen] TOP.Murax.system_uartCtrl.uartCtrl_1.
+[sst_width] 454
+[signals_width] 327
+[sst_expanded] 1
+[sst_vpaned_height] 279
+@28
+TOP.Murax.system_uartCtrl.io_uart_rxd
+TOP.Murax.system_uartCtrl.io_uart_txd
+TOP.Murax.system_uartCtrl.io_interrupt
+TOP.Murax.system_cpu.CsrPlugin_mstatus_MIE
+@22
+TOP.Murax.system_uartCtrl.streamFifo_2.io_push_payload[7:0]
+@28
+TOP.Murax.system_uartCtrl.streamFifo_2.io_push_valid
+TOP.Murax.system_uartCtrl.streamFifo_2.io_pop_valid
+TOP.Murax.system_uartCtrl.streamFifo_2.io_pop_ready
+@22
+TOP.Murax.system_uartCtrl.streamFifo_2.io_pop_payload[7:0]
+TOP.Murax.system_uartCtrl.uartCtrl_1.rx.io_read_payload[7:0]
+@28
+TOP.Murax.system_uartCtrl.uartCtrl_1.rx.io_read_valid
+TOP.Murax.system_uartCtrl.uartCtrl_1.rx.stateMachine_state[2:0]
+@22
+TOP.Murax.system_uartCtrl.uartCtrl_1.rx.stateMachine_shifter[7:0]
+@28
+TOP.Murax.system_uartCtrl.uartCtrl_1.rx.bitTimer_tick
+TOP.Murax.system_uartCtrl.uartCtrl_1.rx.bitTimer_counter[2:0]
+@29
+TOP.Murax.system_uartCtrl.uartCtrl_1.rx.io_rxd
+@28
+TOP.Murax.system_uartCtrl.uartCtrl_1.rx.sampler_value
+TOP.Murax.system_uartCtrl.uartCtrl_1.rx.sampler_tick
+TOP.Murax.system_uartCtrl.uartCtrl_1.rx.sampler_samples_1
+TOP.Murax.system_uartCtrl.uartCtrl_1.rx.sampler_samples_2
+[pattern_trace] 1
+[pattern_trace] 0
diff --git a/VexRiscv/src/test/cpp/raw/amo/.gitignore b/VexRiscv/src/test/cpp/raw/amo/.gitignore
new file mode 100644
index 0000000..c12cb2c
--- /dev/null
+++ b/VexRiscv/src/test/cpp/raw/amo/.gitignore
@@ -0,0 +1,4 @@
+*.map
+*.v
+*.elf
+*.o \ No newline at end of file
diff --git a/VexRiscv/src/test/cpp/raw/amo/build/amo.asm b/VexRiscv/src/test/cpp/raw/amo/build/amo.asm
new file mode 100644
index 0000000..d86b61c
--- /dev/null
+++ b/VexRiscv/src/test/cpp/raw/amo/build/amo.asm
@@ -0,0 +1,247 @@
+
+build/amo.elf: file format elf32-littleriscv
+
+
+Disassembly of section .crt_section:
+
+80000000 <_start>:
+80000000: 00100e13 li t3,1
+80000004: 00000097 auipc ra,0x0
+80000008: 27408093 addi ra,ra,628 # 80000278 <test1_data>
+8000000c: 02d00113 li sp,45
+80000010: 0820a1af amoswap.w gp,sp,(ra)
+80000014: 0000a203 lw tp,0(ra)
+80000018: 02d00a13 li s4,45
+8000001c: 224a1663 bne s4,tp,80000248 <fail>
+80000020: 00b00a13 li s4,11
+80000024: 223a1263 bne s4,gp,80000248 <fail>
+
+80000028 <test2>:
+80000028: 00200e13 li t3,2
+8000002c: 00000097 auipc ra,0x0
+80000030: 25008093 addi ra,ra,592 # 8000027c <test2_data>
+80000034: 03700113 li sp,55
+80000038: 0820a1af amoswap.w gp,sp,(ra)
+8000003c: 0000a203 lw tp,0(ra)
+80000040: 03700a13 li s4,55
+80000044: 204a1263 bne s4,tp,80000248 <fail>
+80000048: 01600a13 li s4,22
+8000004c: 1e3a1e63 bne s4,gp,80000248 <fail>
+
+80000050 <test3>:
+80000050: 00300e13 li t3,3
+80000054: 00000097 auipc ra,0x0
+80000058: 22c08093 addi ra,ra,556 # 80000280 <test3_data>
+8000005c: 04200113 li sp,66
+80000060: 0020a1af amoadd.w gp,sp,(ra)
+80000064: 0000a203 lw tp,0(ra)
+80000068: 08b00a13 li s4,139
+8000006c: 1c4a1e63 bne s4,tp,80000248 <fail>
+80000070: 04900a13 li s4,73
+80000074: 1c3a1a63 bne s4,gp,80000248 <fail>
+
+80000078 <test4>:
+80000078: 00400e13 li t3,4
+8000007c: 00000097 auipc ra,0x0
+80000080: 20808093 addi ra,ra,520 # 80000284 <test4_data>
+80000084: 05700113 li sp,87
+80000088: 2020a1af amoxor.w gp,sp,(ra)
+8000008c: 0000a203 lw tp,0(ra)
+80000090: 06d00a13 li s4,109
+80000094: 1a4a1a63 bne s4,tp,80000248 <fail>
+80000098: 03a00a13 li s4,58
+8000009c: 1a3a1663 bne s4,gp,80000248 <fail>
+
+800000a0 <test5>:
+800000a0: 00500e13 li t3,5
+800000a4: 00000097 auipc ra,0x0
+800000a8: 1e408093 addi ra,ra,484 # 80000288 <test5_data>
+800000ac: 02c00113 li sp,44
+800000b0: 6020a1af amoand.w gp,sp,(ra)
+800000b4: 0000a203 lw tp,0(ra)
+800000b8: 02800a13 li s4,40
+800000bc: 184a1663 bne s4,tp,80000248 <fail>
+800000c0: 03800a13 li s4,56
+800000c4: 183a1263 bne s4,gp,80000248 <fail>
+
+800000c8 <test6>:
+800000c8: 00600e13 li t3,6
+800000cc: 00000097 auipc ra,0x0
+800000d0: 1c008093 addi ra,ra,448 # 8000028c <test6_data>
+800000d4: 01800113 li sp,24
+800000d8: 4020a1af amoor.w gp,sp,(ra)
+800000dc: 0000a203 lw tp,0(ra)
+800000e0: 05b00a13 li s4,91
+800000e4: 164a1263 bne s4,tp,80000248 <fail>
+800000e8: 04b00a13 li s4,75
+800000ec: 143a1e63 bne s4,gp,80000248 <fail>
+
+800000f0 <test7>:
+800000f0: 00700e13 li t3,7
+800000f4: 00000097 auipc ra,0x0
+800000f8: 19c08093 addi ra,ra,412 # 80000290 <test7_data>
+800000fc: 01800113 li sp,24
+80000100: 8020a1af amomin.w gp,sp,(ra)
+80000104: 0000a203 lw tp,0(ra)
+80000108: 01800a13 li s4,24
+8000010c: 124a1e63 bne s4,tp,80000248 <fail>
+80000110: 03800a13 li s4,56
+80000114: 123a1a63 bne s4,gp,80000248 <fail>
+
+80000118 <test8>:
+80000118: 00800e13 li t3,8
+8000011c: 00000097 auipc ra,0x0
+80000120: 17808093 addi ra,ra,376 # 80000294 <test8_data>
+80000124: 05800113 li sp,88
+80000128: 8020a1af amomin.w gp,sp,(ra)
+8000012c: 0000a203 lw tp,0(ra)
+80000130: 05300a13 li s4,83
+80000134: 104a1a63 bne s4,tp,80000248 <fail>
+80000138: 05300a13 li s4,83
+8000013c: 103a1663 bne s4,gp,80000248 <fail>
+
+80000140 <test9>:
+80000140: 00900e13 li t3,9
+80000144: 00000097 auipc ra,0x0
+80000148: 15408093 addi ra,ra,340 # 80000298 <test9_data>
+8000014c: fca00113 li sp,-54
+80000150: 8020a1af amomin.w gp,sp,(ra)
+80000154: 0000a203 lw tp,0(ra)
+80000158: fca00a13 li s4,-54
+8000015c: 0e4a1663 bne s4,tp,80000248 <fail>
+80000160: 02100a13 li s4,33
+80000164: 0e3a1263 bne s4,gp,80000248 <fail>
+
+80000168 <test10>:
+80000168: 00a00e13 li t3,10
+8000016c: 00000097 auipc ra,0x0
+80000170: 13008093 addi ra,ra,304 # 8000029c <test10_data>
+80000174: 03400113 li sp,52
+80000178: 8020a1af amomin.w gp,sp,(ra)
+8000017c: 0000a203 lw tp,0(ra)
+80000180: fbf00a13 li s4,-65
+80000184: 0c4a1263 bne s4,tp,80000248 <fail>
+80000188: fbf00a13 li s4,-65
+8000018c: 0a3a1e63 bne s4,gp,80000248 <fail>
+
+80000190 <test11>:
+80000190: 00b00e13 li t3,11
+80000194: 00000097 auipc ra,0x0
+80000198: 10c08093 addi ra,ra,268 # 800002a0 <test11_data>
+8000019c: fcc00113 li sp,-52
+800001a0: a020a1af amomax.w gp,sp,(ra)
+800001a4: 0000a203 lw tp,0(ra)
+800001a8: fcc00a13 li s4,-52
+800001ac: 084a1e63 bne s4,tp,80000248 <fail>
+800001b0: fa900a13 li s4,-87
+800001b4: 083a1a63 bne s4,gp,80000248 <fail>
+
+800001b8 <test12>:
+800001b8: 00c00e13 li t3,12
+800001bc: 00000097 auipc ra,0x0
+800001c0: 0e808093 addi ra,ra,232 # 800002a4 <test12_data>
+800001c4: 03400113 li sp,52
+800001c8: a020a1af amomax.w gp,sp,(ra)
+800001cc: 0000a203 lw tp,0(ra)
+800001d0: 03400a13 li s4,52
+800001d4: 064a1a63 bne s4,tp,80000248 <fail>
+800001d8: fc900a13 li s4,-55
+800001dc: 063a1663 bne s4,gp,80000248 <fail>
+
+800001e0 <test13>:
+800001e0: 00d00e13 li t3,13
+800001e4: 00000097 auipc ra,0x0
+800001e8: 0c408093 addi ra,ra,196 # 800002a8 <test13_data>
+800001ec: ffff0137 lui sp,0xffff0
+800001f0: c020a1af amominu.w gp,sp,(ra)
+800001f4: 0000a203 lw tp,0(ra)
+800001f8: ffff0a37 lui s4,0xffff0
+800001fc: 044a1663 bne s4,tp,80000248 <fail>
+80000200: ffff0a37 lui s4,0xffff0
+80000204: 004a0a13 addi s4,s4,4 # ffff0004 <test14_data+0x7ffefd58>
+80000208: 043a1063 bne s4,gp,80000248 <fail>
+8000020c: 0480006f j 80000254 <pass>
+
+80000210 <test14>:
+80000210: 00e00e13 li t3,14
+80000214: 00000097 auipc ra,0x0
+80000218: 09808093 addi ra,ra,152 # 800002ac <test14_data>
+8000021c: ffff0137 lui sp,0xffff0
+80000220: 00c10113 addi sp,sp,12 # ffff000c <test14_data+0x7ffefd60>
+80000224: e020a1af amomaxu.w gp,sp,(ra)
+80000228: 0000a203 lw tp,0(ra)
+8000022c: ffff0a37 lui s4,0xffff0
+80000230: 00ca0a13 addi s4,s4,12 # ffff000c <test14_data+0x7ffefd60>
+80000234: 004a1a63 bne s4,tp,80000248 <fail>
+80000238: ffff0a37 lui s4,0xffff0
+8000023c: 005a0a13 addi s4,s4,5 # ffff0005 <test14_data+0x7ffefd59>
+80000240: 003a1463 bne s4,gp,80000248 <fail>
+80000244: 0100006f j 80000254 <pass>
+
+80000248 <fail>:
+80000248: f0100137 lui sp,0xf0100
+8000024c: f2410113 addi sp,sp,-220 # f00fff24 <test14_data+0x700ffc78>
+80000250: 01c12023 sw t3,0(sp)
+
+80000254 <pass>:
+80000254: f0100137 lui sp,0xf0100
+80000258: f2010113 addi sp,sp,-224 # f00fff20 <test14_data+0x700ffc74>
+8000025c: 00012023 sw zero,0(sp)
+80000260: 00000013 nop
+80000264: 00000013 nop
+80000268: 00000013 nop
+8000026c: 00000013 nop
+80000270: 00000013 nop
+80000274: 00000013 nop
+
+80000278 <test1_data>:
+80000278: 0000000b 0xb
+
+8000027c <test2_data>:
+8000027c: 0016 c.slli zero,0x5
+ ...
+
+80000280 <test3_data>:
+80000280: 0049 c.nop 18
+ ...
+
+80000284 <test4_data>:
+80000284: 003a c.slli zero,0xe
+ ...
+
+80000288 <test5_data>:
+80000288: 0038 addi a4,sp,8
+ ...
+
+8000028c <test6_data>:
+8000028c: 0000004b fnmsub.s ft0,ft0,ft0,ft0,rne
+
+80000290 <test7_data>:
+80000290: 0038 addi a4,sp,8
+ ...
+
+80000294 <test8_data>:
+80000294: 00000053 fadd.s ft0,ft0,ft0,rne
+
+80000298 <test9_data>:
+80000298: 0021 c.nop 8
+ ...
+
+8000029c <test10_data>:
+8000029c: ffffffbf 0xffffffbf
+
+800002a0 <test11_data>:
+800002a0: ffa9 bnez a5,800001fa <test13+0x1a>
+800002a2: ffff 0xffff
+
+800002a4 <test12_data>:
+800002a4: ffc9 bnez a5,8000023e <test14+0x2e>
+800002a6: ffff 0xffff
+
+800002a8 <test13_data>:
+800002a8: 0004 0x4
+800002aa: ffff 0xffff
+
+800002ac <test14_data>:
+800002ac: 0005 c.nop 1
+800002ae: ffff 0xffff
diff --git a/VexRiscv/src/test/cpp/raw/amo/build/amo.hex b/VexRiscv/src/test/cpp/raw/amo/build/amo.hex
new file mode 100644
index 0000000..74d3567
--- /dev/null
+++ b/VexRiscv/src/test/cpp/raw/amo/build/amo.hex
@@ -0,0 +1,45 @@
+:0200000480007A
+:10000000130E100097000000938040271301D002C8
+:10001000AFA1200803A20000130AD00263164A22EF
+:10002000130AB00063123A22130E2000970000005A
+:100030009380002513017003AFA1200803A20000E4
+:10004000130A700363124A20130A6001631E3A1EEA
+:10005000130E3000970000009380C022130120048B
+:10006000AFA1200003A20000130AB008631E4A1CBF
+:10007000130A9004631A3A1C130E40009700000004
+:100080009380802013017005AFA1202003A20000FF
+:10009000130AD006631A4A1A130AA00363163A1AFF
+:1000A000130E5000970000009380401E1301C00201
+:1000B000AFA1206003A20000130A800263164A1851
+:1000C000130A800363123A18130E600097000000B1
+:1000D0009380001C13018001AFA1204003A2000007
+:1000E000130AB00563124A16130AB004631E3A14C9
+:1000F000130E7000970000009380C0191301800157
+:10010000AFA1208003A20000130A8001631E4A12DF
+:10011000130A8003631A3A12130E8000970000003E
+:100120009380801713018005AFA1208003A20000F7
+:10013000130A3005631A4A10130A300563163A1081
+:10014000130E900097000000938040151301A0FC4F
+:10015000AFA1208003A20000130AA0FC63164A0E80
+:10016000130A100263123A0E130EA000970000004B
+:100170009380001313014003AFA1208003A200006D
+:10018000130AF0FB63124A0C130AF0FB631E3A0ACF
+:10019000130EB000970000009380C0101301C0FC44
+:1001A000AFA120A003A20000130AC0FC631E4A08EE
+:1001B000130A90FA631A3A08130EC0009700000061
+:1001C0009380800E13014003AFA120A003A2000082
+:1001D000130A4003631A4A06130A90FC63163A0690
+:1001E000130ED000970000009380400C3701FFFFF2
+:1001F000AFA120C003A20000370AFFFF63164A0424
+:10020000370AFFFF130A4A0063103A046F008004A4
+:10021000130EE00097000000938080093701FFFF74
+:100220001301C100AFA120E003A20000370AFFFFC5
+:10023000130ACA00631A4A00370AFFFF130A5A005A
+:1002400063143A006F000001370110F0130141F20E
+:100250002320C101370110F0130101F22320010016
+:100260001300000013000000130000001300000042
+:1002700013000000130000000B0000001600000037
+:10028000490000003A000000380000004B00000068
+:10029000380000005300000021000000BFFFFFFFF6
+:1002A000A9FFFFFFC9FFFFFF0400FFFF0500FFFFDD
+:00000001FF
diff --git a/VexRiscv/src/test/cpp/raw/amo/makefile b/VexRiscv/src/test/cpp/raw/amo/makefile
new file mode 100644
index 0000000..6e9afc5
--- /dev/null
+++ b/VexRiscv/src/test/cpp/raw/amo/makefile
@@ -0,0 +1,5 @@
+PROJ_NAME=amo
+
+ATOMIC=yes
+
+include ../common/asm.mk \ No newline at end of file
diff --git a/VexRiscv/src/test/cpp/raw/amo/src/crt.S b/VexRiscv/src/test/cpp/raw/amo/src/crt.S
new file mode 100644
index 0000000..5696f1d
--- /dev/null
+++ b/VexRiscv/src/test/cpp/raw/amo/src/crt.S
@@ -0,0 +1,174 @@
+.globl _star
+#define TEST_ID x28
+
+_start:
+
+#define assert(reg, value) \
+ li x20, value; \
+ bne x20, reg, fail;
+
+test1:
+ li TEST_ID, 1
+ la x1, test1_data
+ li x2, 45
+ amoswap.w x3,x2,(x1)
+ lw x4, 0(x1)
+ assert(x4, 45)
+ assert(x3, 11)
+
+test2:
+ li TEST_ID, 2
+ la x1, test2_data
+ li x2, 55
+ amoswap.w x3,x2,(x1)
+ lw x4, 0(x1)
+ assert(x4, 55)
+ assert(x3, 22)
+
+
+test3:
+ li TEST_ID,3
+ la x1, test3_data
+ li x2, 66
+ amoadd.w x3,x2,(x1)
+ lw x4, 0(x1)
+ assert(x4, 66+73)
+ assert(x3, 73)
+
+test4:
+ li TEST_ID,4
+ la x1, test4_data
+ li x2, 87
+ amoxor.w x3,x2,(x1)
+ lw x4, 0(x1)
+ assert(x4, 87^58)
+ assert(x3, 58)
+
+test5:
+ li TEST_ID,5
+ la x1, test5_data
+ li x2, 44
+ amoand.w x3,x2,(x1)
+ lw x4, 0(x1)
+ assert(x4, 44 & 56)
+ assert(x3, 56)
+
+test6:
+ li TEST_ID,6
+ la x1, test6_data
+ li x2, 24
+ amoor.w x3,x2,(x1)
+ lw x4, 0(x1)
+ assert(x4, 24 | 75)
+ assert(x3, 75)
+
+test7:
+ li TEST_ID,7
+ la x1, test7_data
+ li x2, 24
+ amomin.w x3,x2,(x1)
+ lw x4, 0(x1)
+ assert(x4, 24)
+ assert(x3, 56)
+
+
+test8:
+ li TEST_ID,8
+ la x1, test8_data
+ li x2, 88
+ amomin.w x3,x2,(x1)
+ lw x4, 0(x1)
+ assert(x4, 83)
+ assert(x3, 83)
+
+test9:
+ li TEST_ID,9
+ la x1, test9_data
+ li x2, -54
+ amomin.w x3,x2,(x1)
+ lw x4, 0(x1)
+ assert(x4, -54)
+ assert(x3, 33)
+
+test10:
+ li TEST_ID,10
+ la x1, test10_data
+ li x2, 52
+ amomin.w x3,x2,(x1)
+ lw x4, 0(x1)
+ assert(x4, -65)
+ assert(x3, -65)
+
+test11:
+ li TEST_ID,11
+ la x1, test11_data
+ li x2, -52
+ amomax.w x3,x2,(x1)
+ lw x4, 0(x1)
+ assert(x4, -52)
+ assert(x3, -87)
+
+test12:
+ li TEST_ID,12
+ la x1, test12_data
+ li x2, 52
+ amomax.w x3,x2,(x1)
+ lw x4, 0(x1)
+ assert(x4, 52)
+ assert(x3, -55)
+
+
+test13:
+ li TEST_ID,13
+ la x1, test13_data
+ li x2, 0xFFFF0000
+ amominu.w x3,x2,(x1)
+ lw x4, 0(x1)
+ assert(x4, 0xFFFF0000)
+ assert(x3, 0xFFFF0004)
+
+ j pass
+
+
+test14:
+ li TEST_ID,14
+ la x1, test14_data
+ li x2, 0xFFFF000C
+ amomaxu.w x3,x2,(x1)
+ lw x4, 0(x1)
+ assert(x4, 0xFFFF000C)
+ assert(x3, 0xFFFF0005)
+
+ j pass
+
+
+fail:
+ li x2, 0xF00FFF24
+ sw TEST_ID, 0(x2)
+
+pass:
+ li x2, 0xF00FFF20
+ sw x0, 0(x2)
+
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+
+
+test1_data: .word 11
+test2_data: .word 22
+test3_data: .word 73
+test4_data: .word 58
+test5_data: .word 56
+test6_data: .word 75
+test7_data: .word 56
+test8_data: .word 83
+test9_data: .word 33
+test10_data: .word -65
+test11_data: .word -87
+test12_data: .word -55
+test13_data: .word 0xFFFF0004
+test14_data: .word 0xFFFF0005 \ No newline at end of file
diff --git a/VexRiscv/src/test/cpp/raw/amo/src/ld b/VexRiscv/src/test/cpp/raw/amo/src/ld
new file mode 100644
index 0000000..93d8de8
--- /dev/null
+++ b/VexRiscv/src/test/cpp/raw/amo/src/ld
@@ -0,0 +1,16 @@
+OUTPUT_ARCH( "riscv" )
+
+MEMORY {
+ onChipRam (W!RX)/*(RX)*/ : ORIGIN = 0x80000000, LENGTH = 128K
+}
+
+SECTIONS
+{
+
+ .crt_section :
+ {
+ . = ALIGN(4);
+ *crt.o(.text)
+ } > onChipRam
+
+}
diff --git a/VexRiscv/src/test/cpp/raw/common/asm.mk b/VexRiscv/src/test/cpp/raw/common/asm.mk
new file mode 100644
index 0000000..92b51ce
--- /dev/null
+++ b/VexRiscv/src/test/cpp/raw/common/asm.mk
@@ -0,0 +1,89 @@
+
+RISCV_PATH?=/opt/riscv/
+RISCV_NAME = riscv64-unknown-elf
+RISCV_OBJCOPY = $(RISCV_PATH)/bin/$(RISCV_NAME)-objcopy
+RISCV_OBJDUMP = $(RISCV_PATH)/bin/$(RISCV_NAME)-objdump
+RISCV_CLIB=$(RISCV_PATH)$(RISCV_NAME)/lib/
+RISCV_CC=$(RISCV_PATH)/bin/$(RISCV_NAME)-gcc
+LDSCRIPT=src/ld
+
+MABI=ilp32
+MARCH := rv32i
+ifeq ($(MULDIV),yes)
+ MARCH := $(MARCH)m
+endif
+ifeq ($(ATOMIC),yes)
+ MARCH := $(MARCH)a
+endif
+ifeq ($(COMPRESSED),yes)
+ MARCH := $(MARCH)c
+endif
+ifeq ($(FLOATING),yes)
+ MARCH := $(MARCH)fd
+endif
+
+CFLAGS += -march=$(MARCH) -mabi=$(MABI)
+LDFLAGS += -march=$(MARCH) -mabi=$(MABI)
+
+
+
+SRCS = $(wildcard src/*.c) \
+ $(wildcard src/*.cpp) \
+ $(wildcard src/*.S)
+
+
+CFLAGS += -static
+LDFLAGS += -e_start -T $(LDSCRIPT) -nostartfiles -Wl,-Map,$(OBJDIR)/$(PROJ_NAME).map -Wl,--print-memory-usage
+OBJDIR = build
+OBJS := $(SRCS)
+OBJS := $(OBJS:.c=.o)
+OBJS := $(OBJS:.cpp=.o)
+OBJS := $(OBJS:.S=.o)
+OBJS := $(addprefix $(OBJDIR)/,$(OBJS))
+
+
+
+all: $(OBJDIR)/$(PROJ_NAME).elf $(OBJDIR)/$(PROJ_NAME).hex $(OBJDIR)/$(PROJ_NAME).asm $(OBJDIR)/$(PROJ_NAME).bin
+ @echo "done"
+
+$(OBJDIR)/%.elf: $(OBJS) | $(OBJDIR)
+ $(RISCV_CC) $(CFLAGS) -o $@ $^ $(LDFLAGS) $(LIBS)
+
+%.hex: %.elf
+ $(RISCV_OBJCOPY) -O ihex $^ $@
+
+%.bin: %.elf
+ $(RISCV_OBJCOPY) -O binary $^ $@
+
+%.v: %.elf
+ $(RISCV_OBJCOPY) -O verilog $^ $@
+
+%.asm: %.elf
+ $(RISCV_OBJDUMP) -S -d $^ > $@
+
+$(OBJDIR)/%.o: %.c
+ mkdir -p $(dir $@)
+ $(RISCV_CC) -c $(CFLAGS) $(INC) -o $@ $^
+
+$(OBJDIR)/%.o: %.cpp
+ mkdir -p $(dir $@)
+ $(RISCV_CC) -c $(CFLAGS) $(INC) -o $@ $^
+
+$(OBJDIR)/%.o: %.S
+ mkdir -p $(dir $@)
+ $(RISCV_CC) -c $(CFLAGS) -o $@ $^ -D__ASSEMBLY__=1
+
+$(OBJDIR):
+ mkdir -p $@
+
+clean:
+ rm -f $(OBJDIR)/$(PROJ_NAME).elf
+ rm -f $(OBJDIR)/$(PROJ_NAME).hex
+ rm -f $(OBJDIR)/$(PROJ_NAME).map
+ rm -f $(OBJDIR)/$(PROJ_NAME).v
+ rm -f $(OBJDIR)/$(PROJ_NAME).asm
+ find $(OBJDIR) -type f -name '*.o' -print0 | xargs -0 -r rm
+
+.SECONDARY: $(OBJS)
+
+
diff --git a/VexRiscv/src/test/cpp/raw/dcache/.gitignore b/VexRiscv/src/test/cpp/raw/dcache/.gitignore
new file mode 100644
index 0000000..c12cb2c
--- /dev/null
+++ b/VexRiscv/src/test/cpp/raw/dcache/.gitignore
@@ -0,0 +1,4 @@
+*.map
+*.v
+*.elf
+*.o \ No newline at end of file
diff --git a/VexRiscv/src/test/cpp/raw/dcache/build/dcache.asm b/VexRiscv/src/test/cpp/raw/dcache/build/dcache.asm
new file mode 100644
index 0000000..202a1e6
--- /dev/null
+++ b/VexRiscv/src/test/cpp/raw/dcache/build/dcache.asm
@@ -0,0 +1,78 @@
+
+build/dcache.elf: file format elf32-littleriscv
+
+
+Disassembly of section .crt_section:
+
+80000000 <_start>:
+80000000: 00000097 auipc ra,0x0
+80000004: 0b408093 addi ra,ra,180 # 800000b4 <fail>
+
+80000008 <test1>:
+80000008: 00100e13 li t3,1
+8000000c: 00100093 li ra,1
+80000010: 00300113 li sp,3
+80000014: 00208093 addi ra,ra,2
+80000018: 08209e63 bne ra,sp,800000b4 <fail>
+
+8000001c <test2>:
+8000001c: 00200e13 li t3,2
+80000020: f56700b7 lui ra,0xf5670
+80000024: 900ff137 lui sp,0x900ff
+80000028: 40000313 li t1,1024
+
+8000002c <test2_repeat>:
+8000002c: 00100193 li gp,1
+80000030: 00200293 li t0,2
+80000034: 006303b3 add t2,t1,t1
+80000038: 007181b3 add gp,gp,t2
+8000003c: 007282b3 add t0,t0,t2
+80000040: 00312023 sw gp,0(sp) # 900ff000 <pass+0x100fef40>
+80000044: 0000a023 sw zero,0(ra) # f5670000 <pass+0x7566ff40>
+80000048: 00012203 lw tp,0(sp)
+8000004c: 06429463 bne t0,tp,800000b4 <fail>
+80000050: ffc30313 addi t1,t1,-4
+80000054: 01008093 addi ra,ra,16
+80000058: 01010113 addi sp,sp,16
+8000005c: 0000500f 0x500f
+80000060: fc0316e3 bnez t1,8000002c <test2_repeat>
+
+80000064 <test3>:
+80000064: 00300e13 li t3,3
+80000068: f56700b7 lui ra,0xf5670
+8000006c: 900ff137 lui sp,0x900ff
+80000070: 40000313 li t1,1024
+
+80000074 <test3_repeat>:
+80000074: 00200193 li gp,2
+80000078: 00300293 li t0,3
+8000007c: 006303b3 add t2,t1,t1
+80000080: 007181b3 add gp,gp,t2
+80000084: 007282b3 add t0,t0,t2
+80000088: 00012203 lw tp,0(sp) # 900ff000 <pass+0x100fef40>
+8000008c: 00312023 sw gp,0(sp)
+80000090: 0000a023 sw zero,0(ra) # f5670000 <pass+0x7566ff40>
+80000094: 0000500f 0x500f
+80000098: 00012203 lw tp,0(sp)
+8000009c: 00429c63 bne t0,tp,800000b4 <fail>
+800000a0: ffc30313 addi t1,t1,-4
+800000a4: 01008093 addi ra,ra,16
+800000a8: 01010113 addi sp,sp,16
+800000ac: fc0314e3 bnez t1,80000074 <test3_repeat>
+800000b0: 0100006f j 800000c0 <pass>
+
+800000b4 <fail>:
+800000b4: f0100137 lui sp,0xf0100
+800000b8: f2410113 addi sp,sp,-220 # f00fff24 <pass+0x700ffe64>
+800000bc: 01c12023 sw t3,0(sp)
+
+800000c0 <pass>:
+800000c0: f0100137 lui sp,0xf0100
+800000c4: f2010113 addi sp,sp,-224 # f00fff20 <pass+0x700ffe60>
+800000c8: 00012023 sw zero,0(sp)
+800000cc: 00000013 nop
+800000d0: 00000013 nop
+800000d4: 00000013 nop
+800000d8: 00000013 nop
+800000dc: 00000013 nop
+800000e0: 00000013 nop
diff --git a/VexRiscv/src/test/cpp/raw/dcache/build/dcache.hex b/VexRiscv/src/test/cpp/raw/dcache/build/dcache.hex
new file mode 100644
index 0000000..2bc8fe9
--- /dev/null
+++ b/VexRiscv/src/test/cpp/raw/dcache/build/dcache.hex
@@ -0,0 +1,17 @@
+:0200000480007A
+:10000000970000009380400B130E10009300100027
+:100010001301300093802000639E2008130E2000FF
+:10002000B70067F537F10F901303004093011000FC
+:1000300093022000B3036300B3817100B3827200A6
+:100040002320310023A00000032201006394420614
+:100050001303C3FF93800001130101010F5000003F
+:10006000E31603FC130E3000B70067F537F10F906D
+:10007000130300409301200093023000B303630098
+:10008000B3817100B382720003220100232031008A
+:1000900023A000000F50000003220100639C4200D7
+:1000A0001303C3FF9380000113010101E31403FC58
+:1000B0006F000001370110F0130141F22320C1014C
+:1000C000370110F0130101F223200100130000009A
+:1000D00013000000130000001300000013000000D4
+:0400E0001300000009
+:00000001FF
diff --git a/VexRiscv/src/test/cpp/raw/dcache/makefile b/VexRiscv/src/test/cpp/raw/dcache/makefile
new file mode 100644
index 0000000..5ebb942
--- /dev/null
+++ b/VexRiscv/src/test/cpp/raw/dcache/makefile
@@ -0,0 +1,3 @@
+PROJ_NAME=dcache
+
+include ../common/asm.mk \ No newline at end of file
diff --git a/VexRiscv/src/test/cpp/raw/dcache/src/crt.S b/VexRiscv/src/test/cpp/raw/dcache/src/crt.S
new file mode 100644
index 0000000..054b1dd
--- /dev/null
+++ b/VexRiscv/src/test/cpp/raw/dcache/src/crt.S
@@ -0,0 +1,75 @@
+.globl _star
+#define TEST_ID x28
+
+_start:
+ la x1, fail
+ //csrw mtvec, x1
+
+test1: //Dummy test
+ li TEST_ID, 1
+ li x1, 1
+ li x2, 3
+ addi x1, x1, 2
+ bne x1, x2, fail
+
+test2: //No invalidate, without load => new one
+ li TEST_ID, 2
+ li x1, 0xF5670000
+ li x2, 0x900FF000
+ li x6, 4096/4
+test2_repeat:
+ la x3, 1
+ la x5, 2
+ add x7, x6, x6
+ add x3, x3, x7
+ add x5, x5, x7
+ sw x3, 0(x2)
+ sw x0, 0(x1)
+ lw x4, 0(x2)
+ bne x5,x4, fail
+ addi x6, x6, -4
+ addi x1, x1, 16
+ addi x2, x2, 16
+.word 0x000500F // dcache flush
+ bnez x6, test2_repeat
+
+test3: //with invalidate, with preload
+ li TEST_ID, 3
+ li x1, 0xF5670000
+ li x2, 0x900FF000
+ li x6, 4096/4
+test3_repeat:
+ la x3, 2
+ la x5, 3
+ add x7, x6, x6
+ add x3, x3, x7
+ add x5, x5, x7
+ lw x4, 0(x2)
+ sw x3, 0(x2)
+ sw x0, 0(x1)
+.word 0x000500F // dcache flush
+ lw x4, 0(x2)
+ bne x5,x4, fail
+ addi x6, x6, -4
+ addi x1, x1, 16
+ addi x2, x2, 16
+ bnez x6, test3_repeat
+
+
+
+ j pass
+
+fail:
+ li x2, 0xF00FFF24
+ sw TEST_ID, 0(x2)
+
+pass:
+ li x2, 0xF00FFF20
+ sw x0, 0(x2)
+
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
diff --git a/VexRiscv/src/test/cpp/raw/dcache/src/ld b/VexRiscv/src/test/cpp/raw/dcache/src/ld
new file mode 100644
index 0000000..93d8de8
--- /dev/null
+++ b/VexRiscv/src/test/cpp/raw/dcache/src/ld
@@ -0,0 +1,16 @@
+OUTPUT_ARCH( "riscv" )
+
+MEMORY {
+ onChipRam (W!RX)/*(RX)*/ : ORIGIN = 0x80000000, LENGTH = 128K
+}
+
+SECTIONS
+{
+
+ .crt_section :
+ {
+ . = ALIGN(4);
+ *crt.o(.text)
+ } > onChipRam
+
+}
diff --git a/VexRiscv/src/test/cpp/raw/deleg/.gitignore b/VexRiscv/src/test/cpp/raw/deleg/.gitignore
new file mode 100644
index 0000000..c12cb2c
--- /dev/null
+++ b/VexRiscv/src/test/cpp/raw/deleg/.gitignore
@@ -0,0 +1,4 @@
+*.map
+*.v
+*.elf
+*.o \ No newline at end of file
diff --git a/VexRiscv/src/test/cpp/raw/deleg/build/deleg.asm b/VexRiscv/src/test/cpp/raw/deleg/build/deleg.asm
new file mode 100644
index 0000000..e64c374
--- /dev/null
+++ b/VexRiscv/src/test/cpp/raw/deleg/build/deleg.asm
@@ -0,0 +1,749 @@
+
+build/deleg.elf: file format elf32-littleriscv
+
+
+Disassembly of section .crt_section:
+
+80000000 <_start>:
+80000000: 00100e93 li t4,1
+80000004: 00001097 auipc ra,0x1
+80000008: a3c08093 addi ra,ra,-1476 # 80000a40 <mtrap>
+8000000c: 30509073 csrw mtvec,ra
+80000010: 00001097 auipc ra,0x1
+80000014: a6808093 addi ra,ra,-1432 # 80000a78 <strap>
+80000018: 10509073 csrw stvec,ra
+8000001c: f00110b7 lui ra,0xf0011
+80000020: 00000113 li sp,0
+80000024: 0020a023 sw sp,0(ra) # f0011000 <strap+0x70010588>
+80000028: 00000013 nop
+8000002c: 00000013 nop
+80000030: 00000013 nop
+80000034: 00000013 nop
+80000038: 00000013 nop
+8000003c: 00000013 nop
+80000040: 00000013 nop
+80000044: 00000013 nop
+
+80000048 <test1>:
+80000048: 00100e13 li t3,1
+8000004c: 00000f17 auipc t5,0x0
+80000050: 00cf0f13 addi t5,t5,12 # 80000058 <test2>
+80000054: 00000073 ecall
+
+80000058 <test2>:
+80000058: 00200e13 li t3,2
+8000005c: 000020b7 lui ra,0x2
+80000060: 80008093 addi ra,ra,-2048 # 1800 <_start-0x7fffe800>
+80000064: 00000113 li sp,0
+80000068: 3000b073 csrc mstatus,ra
+8000006c: 30012073 csrs mstatus,sp
+80000070: 00000097 auipc ra,0x0
+80000074: 01408093 addi ra,ra,20 # 80000084 <test2+0x2c>
+80000078: 34109073 csrw mepc,ra
+8000007c: 30200073 mret
+80000080: 1a90006f j 80000a28 <fail>
+80000084: 00000f17 auipc t5,0x0
+80000088: 024f0f13 addi t5,t5,36 # 800000a8 <test4>
+8000008c: 00000073 ecall
+80000090: 1990006f j 80000a28 <fail>
+
+80000094 <test3>:
+80000094: 00300e13 li t3,3
+80000098: 00000f17 auipc t5,0x0
+8000009c: 010f0f13 addi t5,t5,16 # 800000a8 <test4>
+800000a0: 00102083 lw ra,1(zero) # 1 <_start-0x7fffffff>
+800000a4: 1850006f j 80000a28 <fail>
+
+800000a8 <test4>:
+800000a8: 00400e13 li t3,4
+800000ac: 000020b7 lui ra,0x2
+800000b0: 80008093 addi ra,ra,-2048 # 1800 <_start-0x7fffe800>
+800000b4: 00001137 lui sp,0x1
+800000b8: 80010113 addi sp,sp,-2048 # 800 <_start-0x7ffff800>
+800000bc: 3000b073 csrc mstatus,ra
+800000c0: 30012073 csrs mstatus,sp
+800000c4: 00000097 auipc ra,0x0
+800000c8: 01408093 addi ra,ra,20 # 800000d8 <test4+0x30>
+800000cc: 34109073 csrw mepc,ra
+800000d0: 30200073 mret
+800000d4: 1550006f j 80000a28 <fail>
+800000d8: 00000f17 auipc t5,0x0
+800000dc: 010f0f13 addi t5,t5,16 # 800000e8 <test5>
+800000e0: 00102083 lw ra,1(zero) # 1 <_start-0x7fffffff>
+800000e4: 1450006f j 80000a28 <fail>
+
+800000e8 <test5>:
+800000e8: 00500e13 li t3,5
+800000ec: 000020b7 lui ra,0x2
+800000f0: 80008093 addi ra,ra,-2048 # 1800 <_start-0x7fffe800>
+800000f4: 00000113 li sp,0
+800000f8: 3000b073 csrc mstatus,ra
+800000fc: 30012073 csrs mstatus,sp
+80000100: 00000097 auipc ra,0x0
+80000104: 01408093 addi ra,ra,20 # 80000114 <test5+0x2c>
+80000108: 34109073 csrw mepc,ra
+8000010c: 30200073 mret
+80000110: 1190006f j 80000a28 <fail>
+80000114: 00000f17 auipc t5,0x0
+80000118: 010f0f13 addi t5,t5,16 # 80000124 <test6>
+8000011c: 00102083 lw ra,1(zero) # 1 <_start-0x7fffffff>
+80000120: 1090006f j 80000a28 <fail>
+
+80000124 <test6>:
+80000124: 00600e13 li t3,6
+80000128: 01000093 li ra,16
+8000012c: 30209073 csrw medeleg,ra
+
+80000130 <test7>:
+80000130: 00700e13 li t3,7
+80000134: 00000f17 auipc t5,0x0
+80000138: 010f0f13 addi t5,t5,16 # 80000144 <test8>
+8000013c: 00102083 lw ra,1(zero) # 1 <_start-0x7fffffff>
+80000140: 0e90006f j 80000a28 <fail>
+
+80000144 <test8>:
+80000144: 00800e13 li t3,8
+80000148: 00000f17 auipc t5,0x0
+8000014c: 03cf0f13 addi t5,t5,60 # 80000184 <test9>
+80000150: 000020b7 lui ra,0x2
+80000154: 80008093 addi ra,ra,-2048 # 1800 <_start-0x7fffe800>
+80000158: 00001137 lui sp,0x1
+8000015c: 80010113 addi sp,sp,-2048 # 800 <_start-0x7ffff800>
+80000160: 3000b073 csrc mstatus,ra
+80000164: 30012073 csrs mstatus,sp
+80000168: 00000097 auipc ra,0x0
+8000016c: 01408093 addi ra,ra,20 # 8000017c <test8+0x38>
+80000170: 34109073 csrw mepc,ra
+80000174: 30200073 mret
+80000178: 0b10006f j 80000a28 <fail>
+8000017c: 00102083 lw ra,1(zero) # 1 <_start-0x7fffffff>
+80000180: 0a90006f j 80000a28 <fail>
+
+80000184 <test9>:
+80000184: 00900e13 li t3,9
+80000188: 00000f17 auipc t5,0x0
+8000018c: 038f0f13 addi t5,t5,56 # 800001c0 <test10>
+80000190: 000020b7 lui ra,0x2
+80000194: 80008093 addi ra,ra,-2048 # 1800 <_start-0x7fffe800>
+80000198: 00000113 li sp,0
+8000019c: 3000b073 csrc mstatus,ra
+800001a0: 30012073 csrs mstatus,sp
+800001a4: 00000097 auipc ra,0x0
+800001a8: 01408093 addi ra,ra,20 # 800001b8 <test9+0x34>
+800001ac: 34109073 csrw mepc,ra
+800001b0: 30200073 mret
+800001b4: 0750006f j 80000a28 <fail>
+800001b8: 00102083 lw ra,1(zero) # 1 <_start-0x7fffffff>
+800001bc: 06d0006f j 80000a28 <fail>
+
+800001c0 <test10>:
+800001c0: 00a00e13 li t3,10
+800001c4: 00000f17 auipc t5,0x0
+800001c8: 07cf0f13 addi t5,t5,124 # 80000240 <test11>
+800001cc: f00110b7 lui ra,0xf0011
+800001d0: 00000113 li sp,0
+800001d4: 0020a023 sw sp,0(ra) # f0011000 <strap+0x70010588>
+800001d8: 00000013 nop
+800001dc: 00000013 nop
+800001e0: 00000013 nop
+800001e4: 00000013 nop
+800001e8: 00000013 nop
+800001ec: 00000013 nop
+800001f0: 00000013 nop
+800001f4: 00000013 nop
+800001f8: 00800093 li ra,8
+800001fc: 30009073 csrw mstatus,ra
+80000200: 000010b7 lui ra,0x1
+80000204: 80008093 addi ra,ra,-2048 # 800 <_start-0x7ffff800>
+80000208: 30409073 csrw mie,ra
+8000020c: f00110b7 lui ra,0xf0011
+80000210: 00100113 li sp,1
+80000214: 0020a023 sw sp,0(ra) # f0011000 <strap+0x70010588>
+80000218: 00000013 nop
+8000021c: 00000013 nop
+80000220: 00000013 nop
+80000224: 00000013 nop
+80000228: 00000013 nop
+8000022c: 00000013 nop
+80000230: 00000013 nop
+80000234: 00000013 nop
+80000238: 10500073 wfi
+8000023c: 7ec0006f j 80000a28 <fail>
+
+80000240 <test11>:
+80000240: 00b00e13 li t3,11
+80000244: 00000f17 auipc t5,0x0
+80000248: 0a8f0f13 addi t5,t5,168 # 800002ec <test12>
+8000024c: f00110b7 lui ra,0xf0011
+80000250: 00000113 li sp,0
+80000254: 0020a023 sw sp,0(ra) # f0011000 <strap+0x70010588>
+80000258: 00000013 nop
+8000025c: 00000013 nop
+80000260: 00000013 nop
+80000264: 00000013 nop
+80000268: 00000013 nop
+8000026c: 00000013 nop
+80000270: 00000013 nop
+80000274: 00000013 nop
+80000278: 00800093 li ra,8
+8000027c: 30009073 csrw mstatus,ra
+80000280: 000010b7 lui ra,0x1
+80000284: 80008093 addi ra,ra,-2048 # 800 <_start-0x7ffff800>
+80000288: 30409073 csrw mie,ra
+8000028c: 000020b7 lui ra,0x2
+80000290: 80008093 addi ra,ra,-2048 # 1800 <_start-0x7fffe800>
+80000294: 00001137 lui sp,0x1
+80000298: 80010113 addi sp,sp,-2048 # 800 <_start-0x7ffff800>
+8000029c: 3000b073 csrc mstatus,ra
+800002a0: 30012073 csrs mstatus,sp
+800002a4: 00000097 auipc ra,0x0
+800002a8: 01408093 addi ra,ra,20 # 800002b8 <test11+0x78>
+800002ac: 34109073 csrw mepc,ra
+800002b0: 30200073 mret
+800002b4: 7740006f j 80000a28 <fail>
+800002b8: f00110b7 lui ra,0xf0011
+800002bc: 00100113 li sp,1
+800002c0: 0020a023 sw sp,0(ra) # f0011000 <strap+0x70010588>
+800002c4: 00000013 nop
+800002c8: 00000013 nop
+800002cc: 00000013 nop
+800002d0: 00000013 nop
+800002d4: 00000013 nop
+800002d8: 00000013 nop
+800002dc: 00000013 nop
+800002e0: 00000013 nop
+800002e4: 10500073 wfi
+800002e8: 7400006f j 80000a28 <fail>
+
+800002ec <test12>:
+800002ec: 00c00e13 li t3,12
+800002f0: 00000f17 auipc t5,0x0
+800002f4: 0a4f0f13 addi t5,t5,164 # 80000394 <test14>
+800002f8: f00110b7 lui ra,0xf0011
+800002fc: 00000113 li sp,0
+80000300: 0020a023 sw sp,0(ra) # f0011000 <strap+0x70010588>
+80000304: 00000013 nop
+80000308: 00000013 nop
+8000030c: 00000013 nop
+80000310: 00000013 nop
+80000314: 00000013 nop
+80000318: 00000013 nop
+8000031c: 00000013 nop
+80000320: 00000013 nop
+80000324: 00800093 li ra,8
+80000328: 30009073 csrw mstatus,ra
+8000032c: 000010b7 lui ra,0x1
+80000330: 80008093 addi ra,ra,-2048 # 800 <_start-0x7ffff800>
+80000334: 30409073 csrw mie,ra
+80000338: 000020b7 lui ra,0x2
+8000033c: 80008093 addi ra,ra,-2048 # 1800 <_start-0x7fffe800>
+80000340: 00000113 li sp,0
+80000344: 3000b073 csrc mstatus,ra
+80000348: 30012073 csrs mstatus,sp
+8000034c: 00000097 auipc ra,0x0
+80000350: 01408093 addi ra,ra,20 # 80000360 <test12+0x74>
+80000354: 34109073 csrw mepc,ra
+80000358: 30200073 mret
+8000035c: 6cc0006f j 80000a28 <fail>
+80000360: f00110b7 lui ra,0xf0011
+80000364: 00100113 li sp,1
+80000368: 0020a023 sw sp,0(ra) # f0011000 <strap+0x70010588>
+8000036c: 00000013 nop
+80000370: 00000013 nop
+80000374: 00000013 nop
+80000378: 00000013 nop
+8000037c: 00000013 nop
+80000380: 00000013 nop
+80000384: 00000013 nop
+80000388: 00000013 nop
+8000038c: 10500073 wfi
+80000390: 6980006f j 80000a28 <fail>
+
+80000394 <test14>:
+80000394: 00200093 li ra,2
+80000398: 10009073 csrw sstatus,ra
+8000039c: 00e00e13 li t3,14
+800003a0: 00000f17 auipc t5,0x0
+800003a4: 080f0f13 addi t5,t5,128 # 80000420 <test15>
+800003a8: f00120b7 lui ra,0xf0012
+800003ac: 00000113 li sp,0
+800003b0: 0020a023 sw sp,0(ra) # f0012000 <strap+0x70011588>
+800003b4: 00000013 nop
+800003b8: 00000013 nop
+800003bc: 00000013 nop
+800003c0: 00000013 nop
+800003c4: 00000013 nop
+800003c8: 00000013 nop
+800003cc: 00000013 nop
+800003d0: 00000013 nop
+800003d4: 00200093 li ra,2
+800003d8: 30009073 csrw mstatus,ra
+800003dc: 20000093 li ra,512
+800003e0: 30409073 csrw mie,ra
+800003e4: 00000e93 li t4,0
+800003e8: f00120b7 lui ra,0xf0012
+800003ec: 00100113 li sp,1
+800003f0: 0020a023 sw sp,0(ra) # f0012000 <strap+0x70011588>
+800003f4: 00000013 nop
+800003f8: 00000013 nop
+800003fc: 00000013 nop
+80000400: 00000013 nop
+80000404: 00000013 nop
+80000408: 00000013 nop
+8000040c: 00000013 nop
+80000410: 00000013 nop
+80000414: 06400093 li ra,100
+80000418: fff08093 addi ra,ra,-1
+8000041c: fe104ee3 bgtz ra,80000418 <test14+0x84>
+
+80000420 <test15>:
+80000420: 00f00e13 li t3,15
+80000424: 00000f17 auipc t5,0x0
+80000428: 0a8f0f13 addi t5,t5,168 # 800004cc <test16>
+8000042c: f00120b7 lui ra,0xf0012
+80000430: 00000113 li sp,0
+80000434: 0020a023 sw sp,0(ra) # f0012000 <strap+0x70011588>
+80000438: 00000013 nop
+8000043c: 00000013 nop
+80000440: 00000013 nop
+80000444: 00000013 nop
+80000448: 00000013 nop
+8000044c: 00000013 nop
+80000450: 00000013 nop
+80000454: 00000013 nop
+80000458: 00200093 li ra,2
+8000045c: 30009073 csrw mstatus,ra
+80000460: 20000093 li ra,512
+80000464: 30409073 csrw mie,ra
+80000468: 000020b7 lui ra,0x2
+8000046c: 80008093 addi ra,ra,-2048 # 1800 <_start-0x7fffe800>
+80000470: 00001137 lui sp,0x1
+80000474: 80010113 addi sp,sp,-2048 # 800 <_start-0x7ffff800>
+80000478: 3000b073 csrc mstatus,ra
+8000047c: 30012073 csrs mstatus,sp
+80000480: 00000097 auipc ra,0x0
+80000484: 01408093 addi ra,ra,20 # 80000494 <test15+0x74>
+80000488: 34109073 csrw mepc,ra
+8000048c: 30200073 mret
+80000490: 5980006f j 80000a28 <fail>
+80000494: 00100e93 li t4,1
+80000498: f00120b7 lui ra,0xf0012
+8000049c: 00100113 li sp,1
+800004a0: 0020a023 sw sp,0(ra) # f0012000 <strap+0x70011588>
+800004a4: 00000013 nop
+800004a8: 00000013 nop
+800004ac: 00000013 nop
+800004b0: 00000013 nop
+800004b4: 00000013 nop
+800004b8: 00000013 nop
+800004bc: 00000013 nop
+800004c0: 00000013 nop
+800004c4: 10500073 wfi
+800004c8: 5600006f j 80000a28 <fail>
+
+800004cc <test16>:
+800004cc: 01000e13 li t3,16
+800004d0: 00000f17 auipc t5,0x0
+800004d4: 0a0f0f13 addi t5,t5,160 # 80000570 <test17>
+800004d8: f00120b7 lui ra,0xf0012
+800004dc: 00000113 li sp,0
+800004e0: 0020a023 sw sp,0(ra) # f0012000 <strap+0x70011588>
+800004e4: 00000013 nop
+800004e8: 00000013 nop
+800004ec: 00000013 nop
+800004f0: 00000013 nop
+800004f4: 00000013 nop
+800004f8: 00000013 nop
+800004fc: 00000013 nop
+80000500: 00000013 nop
+80000504: 00200093 li ra,2
+80000508: 30009073 csrw mstatus,ra
+8000050c: 20000093 li ra,512
+80000510: 30409073 csrw mie,ra
+80000514: 000020b7 lui ra,0x2
+80000518: 80008093 addi ra,ra,-2048 # 1800 <_start-0x7fffe800>
+8000051c: 00000113 li sp,0
+80000520: 3000b073 csrc mstatus,ra
+80000524: 30012073 csrs mstatus,sp
+80000528: 00000097 auipc ra,0x0
+8000052c: 01408093 addi ra,ra,20 # 8000053c <test16+0x70>
+80000530: 34109073 csrw mepc,ra
+80000534: 30200073 mret
+80000538: 4f00006f j 80000a28 <fail>
+8000053c: f00120b7 lui ra,0xf0012
+80000540: 00100113 li sp,1
+80000544: 0020a023 sw sp,0(ra) # f0012000 <strap+0x70011588>
+80000548: 00000013 nop
+8000054c: 00000013 nop
+80000550: 00000013 nop
+80000554: 00000013 nop
+80000558: 00000013 nop
+8000055c: 00000013 nop
+80000560: 00000013 nop
+80000564: 00000013 nop
+80000568: 10500073 wfi
+8000056c: 4bc0006f j 80000a28 <fail>
+
+80000570 <test17>:
+80000570: 01100e13 li t3,17
+80000574: 20000093 li ra,512
+80000578: 30309073 csrw mideleg,ra
+8000057c: 00000f17 auipc t5,0x0
+80000580: 080f0f13 addi t5,t5,128 # 800005fc <test18>
+80000584: f00120b7 lui ra,0xf0012
+80000588: 00000113 li sp,0
+8000058c: 0020a023 sw sp,0(ra) # f0012000 <strap+0x70011588>
+80000590: 00000013 nop
+80000594: 00000013 nop
+80000598: 00000013 nop
+8000059c: 00000013 nop
+800005a0: 00000013 nop
+800005a4: 00000013 nop
+800005a8: 00000013 nop
+800005ac: 00000013 nop
+800005b0: 00200093 li ra,2
+800005b4: 30009073 csrw mstatus,ra
+800005b8: 20000093 li ra,512
+800005bc: 30409073 csrw mie,ra
+800005c0: 00000e93 li t4,0
+800005c4: f00120b7 lui ra,0xf0012
+800005c8: 00100113 li sp,1
+800005cc: 0020a023 sw sp,0(ra) # f0012000 <strap+0x70011588>
+800005d0: 00000013 nop
+800005d4: 00000013 nop
+800005d8: 00000013 nop
+800005dc: 00000013 nop
+800005e0: 00000013 nop
+800005e4: 00000013 nop
+800005e8: 00000013 nop
+800005ec: 00000013 nop
+800005f0: 06400093 li ra,100
+800005f4: fff08093 addi ra,ra,-1
+800005f8: fe104ee3 bgtz ra,800005f4 <test17+0x84>
+
+800005fc <test18>:
+800005fc: 01200e13 li t3,18
+80000600: 00000f17 auipc t5,0x0
+80000604: 0a8f0f13 addi t5,t5,168 # 800006a8 <test19>
+80000608: f00120b7 lui ra,0xf0012
+8000060c: 00000113 li sp,0
+80000610: 0020a023 sw sp,0(ra) # f0012000 <strap+0x70011588>
+80000614: 00000013 nop
+80000618: 00000013 nop
+8000061c: 00000013 nop
+80000620: 00000013 nop
+80000624: 00000013 nop
+80000628: 00000013 nop
+8000062c: 00000013 nop
+80000630: 00000013 nop
+80000634: 00200093 li ra,2
+80000638: 30009073 csrw mstatus,ra
+8000063c: 20000093 li ra,512
+80000640: 30409073 csrw mie,ra
+80000644: 000020b7 lui ra,0x2
+80000648: 80008093 addi ra,ra,-2048 # 1800 <_start-0x7fffe800>
+8000064c: 00001137 lui sp,0x1
+80000650: 80010113 addi sp,sp,-2048 # 800 <_start-0x7ffff800>
+80000654: 3000b073 csrc mstatus,ra
+80000658: 30012073 csrs mstatus,sp
+8000065c: 00000097 auipc ra,0x0
+80000660: 01408093 addi ra,ra,20 # 80000670 <test18+0x74>
+80000664: 34109073 csrw mepc,ra
+80000668: 30200073 mret
+8000066c: 3bc0006f j 80000a28 <fail>
+80000670: 00100e93 li t4,1
+80000674: f00120b7 lui ra,0xf0012
+80000678: 00100113 li sp,1
+8000067c: 0020a023 sw sp,0(ra) # f0012000 <strap+0x70011588>
+80000680: 00000013 nop
+80000684: 00000013 nop
+80000688: 00000013 nop
+8000068c: 00000013 nop
+80000690: 00000013 nop
+80000694: 00000013 nop
+80000698: 00000013 nop
+8000069c: 00000013 nop
+800006a0: 10500073 wfi
+800006a4: 3840006f j 80000a28 <fail>
+
+800006a8 <test19>:
+800006a8: 01300e13 li t3,19
+800006ac: 00000f17 auipc t5,0x0
+800006b0: 0a0f0f13 addi t5,t5,160 # 8000074c <test20>
+800006b4: f00120b7 lui ra,0xf0012
+800006b8: 00000113 li sp,0
+800006bc: 0020a023 sw sp,0(ra) # f0012000 <strap+0x70011588>
+800006c0: 00000013 nop
+800006c4: 00000013 nop
+800006c8: 00000013 nop
+800006cc: 00000013 nop
+800006d0: 00000013 nop
+800006d4: 00000013 nop
+800006d8: 00000013 nop
+800006dc: 00000013 nop
+800006e0: 00200093 li ra,2
+800006e4: 30009073 csrw mstatus,ra
+800006e8: 20000093 li ra,512
+800006ec: 30409073 csrw mie,ra
+800006f0: 000020b7 lui ra,0x2
+800006f4: 80008093 addi ra,ra,-2048 # 1800 <_start-0x7fffe800>
+800006f8: 00000113 li sp,0
+800006fc: 3000b073 csrc mstatus,ra
+80000700: 30012073 csrs mstatus,sp
+80000704: 00000097 auipc ra,0x0
+80000708: 01408093 addi ra,ra,20 # 80000718 <test19+0x70>
+8000070c: 34109073 csrw mepc,ra
+80000710: 30200073 mret
+80000714: 3140006f j 80000a28 <fail>
+80000718: f00120b7 lui ra,0xf0012
+8000071c: 00100113 li sp,1
+80000720: 0020a023 sw sp,0(ra) # f0012000 <strap+0x70011588>
+80000724: 00000013 nop
+80000728: 00000013 nop
+8000072c: 00000013 nop
+80000730: 00000013 nop
+80000734: 00000013 nop
+80000738: 00000013 nop
+8000073c: 00000013 nop
+80000740: 00000013 nop
+80000744: 10500073 wfi
+80000748: 2e00006f j 80000a28 <fail>
+
+8000074c <test20>:
+8000074c: f00120b7 lui ra,0xf0012
+80000750: 00000113 li sp,0
+80000754: 0020a023 sw sp,0(ra) # f0012000 <strap+0x70011588>
+80000758: 00000013 nop
+8000075c: 00000013 nop
+80000760: 00000013 nop
+80000764: 00000013 nop
+80000768: 00000013 nop
+8000076c: 00000013 nop
+80000770: 00000013 nop
+80000774: 00000013 nop
+80000778: 01400e13 li t3,20
+8000077c: 00000f17 auipc t5,0x0
+80000780: 030f0f13 addi t5,t5,48 # 800007ac <test21>
+80000784: 00200093 li ra,2
+80000788: 30009073 csrw mstatus,ra
+8000078c: 20000093 li ra,512
+80000790: 30409073 csrw mie,ra
+80000794: 00000e93 li t4,0
+80000798: 20000093 li ra,512
+8000079c: 1440a073 csrs sip,ra
+800007a0: 06400093 li ra,100
+800007a4: fff08093 addi ra,ra,-1
+800007a8: fe104ee3 bgtz ra,800007a4 <test20+0x58>
+
+800007ac <test21>:
+800007ac: 01500e13 li t3,21
+800007b0: 00000f17 auipc t5,0x0
+800007b4: 060f0f13 addi t5,t5,96 # 80000810 <test22>
+800007b8: 20000093 li ra,512
+800007bc: 1440b073 csrc sip,ra
+800007c0: 00200093 li ra,2
+800007c4: 30009073 csrw mstatus,ra
+800007c8: 20000093 li ra,512
+800007cc: 30409073 csrw mie,ra
+800007d0: 000020b7 lui ra,0x2
+800007d4: 80008093 addi ra,ra,-2048 # 1800 <_start-0x7fffe800>
+800007d8: 00001137 lui sp,0x1
+800007dc: 80010113 addi sp,sp,-2048 # 800 <_start-0x7ffff800>
+800007e0: 3000b073 csrc mstatus,ra
+800007e4: 30012073 csrs mstatus,sp
+800007e8: 00000097 auipc ra,0x0
+800007ec: 01408093 addi ra,ra,20 # 800007fc <test21+0x50>
+800007f0: 34109073 csrw mepc,ra
+800007f4: 30200073 mret
+800007f8: 2300006f j 80000a28 <fail>
+800007fc: 00100e93 li t4,1
+80000800: 20000093 li ra,512
+80000804: 1440a073 csrs sip,ra
+80000808: 10500073 wfi
+8000080c: 21c0006f j 80000a28 <fail>
+
+80000810 <test22>:
+80000810: 01600e13 li t3,22
+80000814: 00000f17 auipc t5,0x0
+80000818: 058f0f13 addi t5,t5,88 # 8000086c <test23>
+8000081c: 20000093 li ra,512
+80000820: 1440b073 csrc sip,ra
+80000824: 00200093 li ra,2
+80000828: 30009073 csrw mstatus,ra
+8000082c: 20000093 li ra,512
+80000830: 30409073 csrw mie,ra
+80000834: 20000093 li ra,512
+80000838: 1440a073 csrs sip,ra
+8000083c: 000020b7 lui ra,0x2
+80000840: 80008093 addi ra,ra,-2048 # 1800 <_start-0x7fffe800>
+80000844: 00000113 li sp,0
+80000848: 3000b073 csrc mstatus,ra
+8000084c: 30012073 csrs mstatus,sp
+80000850: 00000097 auipc ra,0x0
+80000854: 01408093 addi ra,ra,20 # 80000864 <test22+0x54>
+80000858: 34109073 csrw mepc,ra
+8000085c: 30200073 mret
+80000860: 1c80006f j 80000a28 <fail>
+80000864: 10500073 wfi
+80000868: 1c00006f j 80000a28 <fail>
+
+8000086c <test23>:
+8000086c: 01700e13 li t3,23
+80000870: 00000e93 li t4,0
+80000874: f00120b7 lui ra,0xf0012
+80000878: 00000113 li sp,0
+8000087c: 0020a023 sw sp,0(ra) # f0012000 <strap+0x70011588>
+80000880: 00000013 nop
+80000884: 00000013 nop
+80000888: 00000013 nop
+8000088c: 00000013 nop
+80000890: 00000013 nop
+80000894: 00000013 nop
+80000898: 00000013 nop
+8000089c: 00000013 nop
+800008a0: 20000093 li ra,512
+800008a4: 1440b073 csrc sip,ra
+800008a8: 344021f3 csrr gp,mip
+800008ac: f00120b7 lui ra,0xf0012
+800008b0: 00100113 li sp,1
+800008b4: 0020a023 sw sp,0(ra) # f0012000 <strap+0x70011588>
+800008b8: 00000013 nop
+800008bc: 00000013 nop
+800008c0: 00000013 nop
+800008c4: 00000013 nop
+800008c8: 00000013 nop
+800008cc: 00000013 nop
+800008d0: 00000013 nop
+800008d4: 00000013 nop
+800008d8: 20000093 li ra,512
+800008dc: 1440b073 csrc sip,ra
+800008e0: 344021f3 csrr gp,mip
+800008e4: f00120b7 lui ra,0xf0012
+800008e8: 00000113 li sp,0
+800008ec: 0020a023 sw sp,0(ra) # f0012000 <strap+0x70011588>
+800008f0: 00000013 nop
+800008f4: 00000013 nop
+800008f8: 00000013 nop
+800008fc: 00000013 nop
+80000900: 00000013 nop
+80000904: 00000013 nop
+80000908: 00000013 nop
+8000090c: 00000013 nop
+80000910: 20000093 li ra,512
+80000914: 1440b073 csrc sip,ra
+80000918: 344021f3 csrr gp,mip
+8000091c: f00120b7 lui ra,0xf0012
+80000920: 00000113 li sp,0
+80000924: 0020a023 sw sp,0(ra) # f0012000 <strap+0x70011588>
+80000928: 00000013 nop
+8000092c: 00000013 nop
+80000930: 00000013 nop
+80000934: 00000013 nop
+80000938: 00000013 nop
+8000093c: 00000013 nop
+80000940: 00000013 nop
+80000944: 00000013 nop
+80000948: 20000093 li ra,512
+8000094c: 1440a073 csrs sip,ra
+80000950: 344021f3 csrr gp,mip
+80000954: f00120b7 lui ra,0xf0012
+80000958: 00100113 li sp,1
+8000095c: 0020a023 sw sp,0(ra) # f0012000 <strap+0x70011588>
+80000960: 00000013 nop
+80000964: 00000013 nop
+80000968: 00000013 nop
+8000096c: 00000013 nop
+80000970: 00000013 nop
+80000974: 00000013 nop
+80000978: 00000013 nop
+8000097c: 00000013 nop
+80000980: 20000093 li ra,512
+80000984: 1440a073 csrs sip,ra
+80000988: 344021f3 csrr gp,mip
+8000098c: f00120b7 lui ra,0xf0012
+80000990: 00000113 li sp,0
+80000994: 0020a023 sw sp,0(ra) # f0012000 <strap+0x70011588>
+80000998: 00000013 nop
+8000099c: 00000013 nop
+800009a0: 00000013 nop
+800009a4: 00000013 nop
+800009a8: 00000013 nop
+800009ac: 00000013 nop
+800009b0: 00000013 nop
+800009b4: 00000013 nop
+
+800009b8 <test24>:
+800009b8: 01800e13 li t3,24
+800009bc: 00200093 li ra,2
+800009c0: 3040a073 csrs mie,ra
+800009c4: 3440a073 csrs mip,ra
+800009c8: 3000a073 csrs mstatus,ra
+800009cc: 00100e93 li t4,1
+800009d0: 00000f17 auipc t5,0x0
+800009d4: 03cf0f13 addi t5,t5,60 # 80000a0c <test25>
+800009d8: 000020b7 lui ra,0x2
+800009dc: 80008093 addi ra,ra,-2048 # 1800 <_start-0x7fffe800>
+800009e0: 00001137 lui sp,0x1
+800009e4: 80010113 addi sp,sp,-2048 # 800 <_start-0x7ffff800>
+800009e8: 3000b073 csrc mstatus,ra
+800009ec: 30012073 csrs mstatus,sp
+800009f0: 00000097 auipc ra,0x0
+800009f4: 01408093 addi ra,ra,20 # 80000a04 <test24_s>
+800009f8: 34109073 csrw mepc,ra
+800009fc: 30200073 mret
+80000a00: 0280006f j 80000a28 <fail>
+
+80000a04 <test24_s>:
+80000a04: 10500073 wfi
+80000a08: 0200006f j 80000a28 <fail>
+
+80000a0c <test25>:
+80000a0c: 01900e13 li t3,25
+80000a10: 00000f17 auipc t5,0x0
+80000a14: 014f0f13 addi t5,t5,20 # 80000a24 <test26>
+80000a18: 30046073 csrsi mstatus,8
+80000a1c: 10500073 wfi
+80000a20: 0080006f j 80000a28 <fail>
+
+80000a24 <test26>:
+80000a24: 0100006f j 80000a34 <pass>
+
+80000a28 <fail>:
+80000a28: f0100137 lui sp,0xf0100
+80000a2c: f2410113 addi sp,sp,-220 # f00fff24 <strap+0x700ff4ac>
+80000a30: 01c12023 sw t3,0(sp)
+
+80000a34 <pass>:
+80000a34: f0100137 lui sp,0xf0100
+80000a38: f2010113 addi sp,sp,-224 # f00fff20 <strap+0x700ff4a8>
+80000a3c: 00012023 sw zero,0(sp)
+
+80000a40 <mtrap>:
+80000a40: fe0e84e3 beqz t4,80000a28 <fail>
+80000a44: 342020f3 csrr ra,mcause
+80000a48: 341020f3 csrr ra,mepc
+80000a4c: 300020f3 csrr ra,mstatus
+80000a50: 343020f3 csrr ra,mbadaddr
+80000a54: 08000093 li ra,128
+80000a58: 3000b073 csrc mstatus,ra
+80000a5c: 00200093 li ra,2
+80000a60: fc1e8ae3 beq t4,ra,80000a34 <pass>
+80000a64: 000020b7 lui ra,0x2
+80000a68: 80008093 addi ra,ra,-2048 # 1800 <_start-0x7fffe800>
+80000a6c: 3000a073 csrs mstatus,ra
+80000a70: 341f1073 csrw mepc,t5
+80000a74: 30200073 mret
+
+80000a78 <strap>:
+80000a78: fa0e88e3 beqz t4,80000a28 <fail>
+80000a7c: 142020f3 csrr ra,scause
+80000a80: 141020f3 csrr ra,sepc
+80000a84: 100020f3 csrr ra,sstatus
+80000a88: 143020f3 csrr ra,sbadaddr
+80000a8c: 00000073 ecall
+80000a90: 00000013 nop
+80000a94: 00000013 nop
+80000a98: 00000013 nop
+80000a9c: 00000013 nop
+80000aa0: 00000013 nop
+80000aa4: 00000013 nop
diff --git a/VexRiscv/src/test/cpp/raw/deleg/build/deleg.hex b/VexRiscv/src/test/cpp/raw/deleg/build/deleg.hex
new file mode 100644
index 0000000..9290e85
--- /dev/null
+++ b/VexRiscv/src/test/cpp/raw/deleg/build/deleg.hex
@@ -0,0 +1,174 @@
+:0200000480007A
+:10000000930E1000971000009380C0A3739050309F
+:1000100097100000938080A673905010B71001F0E5
+:100020001301000023A020001300000013000000B3
+:100030001300000013000000130000001300000074
+:100040001300000013000000130E1000170F000033
+:10005000130FCF0073000000130E2000B720000024
+:10006000938000801301000073B0003073200130D2
+:10007000970000009380400173901034730020308B
+:100080006F00901A170F0000130F4F02730000004B
+:100090006F009019130E3000170F0000130F0F019F
+:1000A000832010006F005018130E4000B72000008E
+:1000B00093800080371100001301018073B000307D
+:1000C000732001309700000093804001739010343A
+:1000D000730020306F005015170F0000130F0F0131
+:1000E000832010006F005014130E5000B720000042
+:1000F000938000801301000073B000307320013042
+:1001000097000000938040017390103473002030FA
+:100110006F009011170F0000130F0F0183201000C4
+:100120006F009010130E6000930000017390203058
+:10013000130E7000170F0000130F0F018320100023
+:100140006F00900E130E8000170F0000130FCF03E7
+:10015000B720000093800080371100001301018058
+:1001600073B000307320013097000000938040018D
+:1001700073901034730020306F00100B8320100038
+:100180006F00900A130E9000170F0000130F8F03DB
+:10019000B7200000938000801301000073B000308E
+:1001A0007320013097000000938040017390103459
+:1001B000730020306F005007832010006F00D006BE
+:1001C000130EA000170F0000130FCF07B71001F098
+:1001D0001301000023A02000130000001300000002
+:1001E00013000000130000001300000013000000C3
+:1001F0001300000013000000930080007390003093
+:10020000B71000009380008073904030B71001F069
+:100210001301100023A020001300000013000000B1
+:100220001300000013000000130000001300000082
+:100230001300000013000000730050106F00C07E18
+:10024000130EB000170F0000130F8F0AB71001F044
+:100250001301000023A02000130000001300000081
+:100260001300000013000000130000001300000042
+:100270001300000013000000930080007390003012
+:10028000B71000009380008073904030B7200000CA
+:1002900093800080371100001301018073B000309B
+:1002A0007320013097000000938040017390103458
+:1002B000730020306F004077B71001F01301100079
+:1002C00023A0200013000000130000001300000012
+:1002D00013000000130000001300000013000000D2
+:1002E00013000000730050106F000074130EC00064
+:1002F000170F0000130F4F0AB71001F01301000091
+:1003000023A02000130000001300000013000000D1
+:100310001300000013000000130000001300000091
+:10032000130000009300800073900030B7100000AD
+:100330009380008073904030B7200000938000804D
+:100340001301000073B000307320013097000000EB
+:100350009380400173901034730020306F00C06CA4
+:10036000B71001F01301100023A0200013000000BB
+:100370001300000013000000130000001300000031
+:100380001300000013000000130000007300501061
+:100390006F0080699300200073900010130EE0003E
+:1003A000170F0000130F0F08B72001F01301000012
+:1003B00023A0200013000000130000001300000021
+:1003C00013000000130000001300000013000000E1
+:1003D0001300000093002000739000309300002071
+:1003E00073904030930E0000B72001F0130110000D
+:1003F00023A02000130000001300000013000000E1
+:1004000013000000130000001300000013000000A0
+:1004100013000000930040069380F0FFE34E10FEAF
+:10042000130EF000170F0000130F8F0AB72001F012
+:100430001301000023A0200013000000130000009F
+:100440001300000013000000130000001300000060
+:100450001300000013000000930020007390003090
+:100460009300002073904030B720000093800080FC
+:10047000371100001301018073B000307320013088
+:100480009700000093804001739010347300203077
+:100490006F008059930E1000B72001F01301100077
+:1004A00023A0200013000000130000001300000030
+:1004B00013000000130000001300000013000000F0
+:1004C00013000000730050106F000056130E00015F
+:1004D000170F0000130F0F0AB72001F013010000DF
+:1004E00023A02000130000001300000013000000F0
+:1004F00013000000130000001300000013000000B0
+:10050000130000009300200073900030930000203F
+:1005100073904030B72000009380008013010000EA
+:1005200073B00030732001309700000093804001C9
+:1005300073901034730020306F00004FB72001F02B
+:100540001301100023A0200013000000130000007E
+:10055000130000001300000013000000130000004F
+:100560001300000013000000730050106F00C04B18
+:10057000130E10019300002073903030170F00000D
+:10058000130F0F08B72001F01301000023A0200073
+:10059000130000001300000013000000130000000F
+:1005A00013000000130000001300000013000000FF
+:1005B000930020007390003093000020739040302F
+:1005C000930E0000B72001F01301100023A02000BB
+:1005D00013000000130000001300000013000000CF
+:1005E00013000000130000001300000013000000BF
+:1005F000930040069380F0FFE34E10FE130E20019F
+:10060000170F0000130F8F0AB72001F0130100002D
+:1006100023A02000130000001300000013000000BE
+:10062000130000001300000013000000130000007E
+:10063000130000009300200073900030930000200E
+:1006400073904030B7200000938000803711000085
+:100650001301018073B00030732001309700000057
+:100660009380400173901034730020306F00C03BC2
+:10067000930E1000B72001F01301100023A02000FA
+:10068000130000001300000013000000130000001E
+:10069000130000001300000013000000130000000E
+:1006A000730050106F004038130E3001170F000018
+:1006B000130F0F0AB72001F01301000023A0200040
+:1006C00013000000130000001300000013000000DE
+:1006D00013000000130000001300000013000000CE
+:1006E00093002000739000309300002073904030FE
+:1006F000B7200000938000801301000073B0003029
+:1007000073200130970000009380400173901034F3
+:10071000730020306F004031B72001F0130110004A
+:1007200023A02000130000001300000013000000AD
+:10073000130000001300000013000000130000006D
+:1007400013000000730050106F00002EB72001F05E
+:100750001301000023A0200013000000130000007C
+:10076000130000001300000013000000130000003D
+:100770001300000013000000130E4001170F0000CB
+:10078000130F0F039300200073900030930000209C
+:1007900073904030930E00009300002073A040142B
+:1007A000930040069380F0FFE34E10FE130E5001BD
+:1007B000170F0000130F0F069300002073B04014B2
+:1007C000930020007390003093000020739040301D
+:1007D000B7200000938000803711000013010180D2
+:1007E00073B0003073200130970000009380400107
+:1007F00073901034730020306F000023930E1000AC
+:100800009300002073A04014730050106F00C021AB
+:10081000130E6001170F0000130F8F0593000020C7
+:1008200073B04014930020007390003093000020B8
+:10083000739040309300002073A04014B720000054
+:10084000938000801301000073B0003073200130EA
+:1008500097000000938040017390103473002030A3
+:100860006F00801C730050106F00001C130E70018D
+:10087000930E0000B72001F01301000023A0200018
+:10088000130000001300000013000000130000001C
+:10089000130000001300000013000000130000000C
+:1008A0009300002073B04014F3214034B72001F0CE
+:1008B0001301100023A0200013000000130000000B
+:1008C00013000000130000001300000013000000DC
+:1008D00013000000130000009300002073B04014C8
+:1008E000F3214034B72001F01301000023A02000C1
+:1008F00013000000130000001300000013000000AC
+:10090000130000001300000013000000130000009B
+:100910009300002073B04014F3214034B72001F05D
+:100920001301000023A020001300000013000000AA
+:10093000130000001300000013000000130000006B
+:1009400013000000130000009300002073A0401467
+:10095000F3214034B72001F01301100023A0200040
+:10096000130000001300000013000000130000003B
+:10097000130000001300000013000000130000002B
+:100980009300002073A04014F3214034B72001F0FD
+:100990001301000023A0200013000000130000003A
+:1009A00013000000130000001300000013000000FB
+:1009B0001300000013000000130E800193002000BC
+:1009C00073A0403073A0403473A00030930E100029
+:1009D000170F0000130FCF03B72000009380008093
+:1009E000371100001301018073B000307320013013
+:1009F0009700000093804001739010347300203002
+:100A00006F008002730050106F000002130E9001FF
+:100A1000170F0000130F4F01736004307300501064
+:100A20006F0080006F000001370110F0130141F2E8
+:100A30002320C101370110F0130101F2232001002E
+:100A4000E3840EFEF3202034F3201034F320003032
+:100A5000F32030349300000873B00030930020007E
+:100A6000E38A1EFCB72000009380008073A0003052
+:100A700073101F3473002030E3880EFAF320201423
+:100A8000F3201014F3200010F32030147300000042
+:100A9000130000001300000013000000130000000A
+:080AA000130000001300000028
+:040000058000000077
+:00000001FF
diff --git a/VexRiscv/src/test/cpp/raw/deleg/makefile b/VexRiscv/src/test/cpp/raw/deleg/makefile
new file mode 100644
index 0000000..8f98b68
--- /dev/null
+++ b/VexRiscv/src/test/cpp/raw/deleg/makefile
@@ -0,0 +1,3 @@
+PROJ_NAME=deleg
+
+include ../common/asm.mk \ No newline at end of file
diff --git a/VexRiscv/src/test/cpp/raw/deleg/src/crt.S b/VexRiscv/src/test/cpp/raw/deleg/src/crt.S
new file mode 100644
index 0000000..f88d13f
--- /dev/null
+++ b/VexRiscv/src/test/cpp/raw/deleg/src/crt.S
@@ -0,0 +1,399 @@
+.globl _start
+
+#define TEST_ID x28
+#define TRAP_OK x29
+#define TRAP_RET x30
+
+#include "encoding.h"
+
+#define externalInterrupt(value) \
+ li x1, 0xF0011000; \
+ li x2, value; \
+ sw x2, 0(x1); \
+ nop; \
+ nop; \
+ nop; \
+ nop; \
+ nop; \
+ nop; \
+ nop; \
+ nop; \
+
+
+#define externalInterruptS(value) \
+ li x1, 0xF0012000; \
+ li x2, value; \
+ sw x2, 0(x1); \
+ nop; \
+ nop; \
+ nop; \
+ nop; \
+ nop; \
+ nop; \
+ nop; \
+ nop; \
+
+
+
+#define delay() \
+ li x1, 100; \
+1: \
+ addi x1, x1, -1; \
+ bgt x1, x0, 1b; \
+
+
+#define setPriv(value) \
+ li x1, 3 << 11; \
+ li x2, value << 11; \
+ csrc mstatus, x1; \
+ csrs mstatus, x2; \
+ auipc x1, 0; \
+ addi x1, x1, 20; \
+ csrw mepc, x1; \
+ mret; \
+ j fail; \
+
+
+ROM_SUPER_0:
+
+_start:
+ li TRAP_OK, 1
+ la x1, mtrap
+ csrw mtvec, x1
+ la x1, strap
+ csrw stvec, x1
+ externalInterrupt(0);
+
+test1:
+ li TEST_ID, 1
+ la TRAP_RET, test2
+ ecall
+
+test2: //simple ecall from user to machine
+ li TEST_ID, 2
+ setPriv(0)
+ la TRAP_RET, test4
+ ecall
+ j fail
+
+test3: //M mialigned load exception without deleg
+ li TEST_ID, 3
+ la TRAP_RET, test4
+ lw x1, 1(x0)
+ j fail
+test4: //S mialigned load exception without deleg
+ li TEST_ID, 4
+ setPriv(1)
+ la TRAP_RET, test5
+ lw x1, 1(x0)
+ j fail
+test5: //U mialigned load exception without deleg
+ li TEST_ID, 5
+ setPriv(0)
+ la TRAP_RET, test6
+ lw x1, 1(x0)
+ j fail
+
+test6: // set medeleg
+ li TEST_ID, 6
+ li x1, 1 << CAUSE_MISALIGNED_LOAD
+ csrw medeleg, x1
+
+test7: //machine mode exception
+ li TEST_ID, 7
+ la TRAP_RET, test8
+ lw x1, 1(x0)
+ j fail
+
+test8: //supervisor mode exception
+ li TEST_ID, 8
+ la TRAP_RET, test9
+ setPriv(1)
+ lw x1, 1(x0)
+ j fail
+
+test9: //user mode exception
+ li TEST_ID, 9
+ la TRAP_RET, test10
+ setPriv(0)
+ lw x1, 1(x0)
+ j fail
+
+test10: //M external interrupt
+ li TEST_ID, 10
+ la TRAP_RET, test11
+ externalInterrupt(0)
+ li x1, MSTATUS_MIE
+ csrw mstatus, x1
+ li x1, 1 << 11
+ csrw mie, x1
+ externalInterrupt(1)
+ wfi
+ j fail
+
+test11: //S external interrupt
+ li TEST_ID, 11
+ la TRAP_RET, test12
+ externalInterrupt(0)
+ li x1, MSTATUS_MIE
+ csrw mstatus, x1
+ li x1, 1 << 11
+ csrw mie, x1
+ setPriv(1)
+ externalInterrupt(1)
+ wfi
+ j fail
+
+test12: //U external interrupt
+ li TEST_ID, 12
+ la TRAP_RET, test14
+ externalInterrupt(0)
+ li x1, MSTATUS_MIE
+ csrw mstatus, x1
+ li x1, 1 << 11
+ csrw mie, x1
+ setPriv(0)
+ externalInterrupt(1)
+ wfi
+ j fail
+
+
+
+test14: //M external interrupt S
+ li x1, MSTATUS_SIE
+ csrw sstatus, x1
+
+ li TEST_ID, 14
+ la TRAP_RET, test15
+ externalInterruptS(0)
+ li x1, MSTATUS_SIE
+ csrw mstatus, x1
+ li x1, 1 << 9
+ csrw mie, x1
+ li TRAP_OK, 0
+ externalInterruptS(1)
+ delay()
+
+test15: //S external interrupt S
+ li TEST_ID, 15
+ la TRAP_RET, test16
+ externalInterruptS(0)
+ li x1, SSTATUS_SIE
+ csrw mstatus, x1
+ li x1, 1 << 9
+ csrw mie, x1
+ setPriv(1)
+ li TRAP_OK, 1
+ externalInterruptS(1)
+ wfi
+ j fail
+
+test16: //U external interrupt S
+ li TEST_ID, 16
+ la TRAP_RET, test17
+ externalInterruptS(0)
+ li x1, SSTATUS_SIE
+ csrw mstatus, x1
+ li x1, 1 << 9
+ csrw mie, x1
+ setPriv(0)
+ externalInterruptS(1)
+ wfi
+ j fail
+
+
+test17:// set mideleg
+ li TEST_ID, 17
+ li x1, 1 << 9
+ csrw mideleg, x1
+
+
+ la TRAP_RET, test18
+ externalInterruptS(0)
+ li x1, MSTATUS_SIE
+ csrw mstatus, x1
+ li x1, 1 << 9
+ csrw mie, x1
+ li TRAP_OK, 0
+ externalInterruptS(1)
+ delay()
+
+test18: //S external interrupt S with deleg
+ li TEST_ID, 18
+ la TRAP_RET, test19
+ externalInterruptS(0)
+ li x1, SSTATUS_SIE
+ csrw mstatus, x1
+ li x1, 1 << 9
+ csrw mie, x1
+ setPriv(1)
+ li TRAP_OK, 1
+ externalInterruptS(1)
+ wfi
+ j fail
+
+test19: //U external interrupt S with deleg
+ li TEST_ID, 19
+ la TRAP_RET, test20
+ externalInterruptS(0)
+ li x1, SSTATUS_SIE
+ csrw mstatus, x1
+ li x1, 1 << 9
+ csrw mie, x1
+ setPriv(0)
+ externalInterruptS(1)
+ wfi
+ j fail
+
+
+
+
+
+test20:// M external interrupt S by software with deleg
+ externalInterruptS(0)
+ li TEST_ID, 20
+ la TRAP_RET, test21
+ li x1, MSTATUS_SIE
+ csrw mstatus, x1
+ li x1, 1 << 9
+ csrw mie, x1
+ li TRAP_OK, 0
+ li x1, 1 << 9
+ csrs sip, x1
+ delay()
+
+test21: //S external interrupt S by software with deleg
+ li TEST_ID, 21
+ la TRAP_RET, test22
+ li x1, 1 << 9
+ csrc sip, x1
+ li x1, SSTATUS_SIE
+ csrw mstatus, x1
+ li x1, 1 << 9
+ csrw mie, x1
+ setPriv(1)
+ li TRAP_OK, 1
+ li x1, 1 << 9
+ csrs sip, x1
+ wfi
+ j fail
+
+test22: //U external interrupt S by software with deleg
+ li TEST_ID, 22
+ la TRAP_RET, test23
+ li x1, 1 << 9
+ csrc sip, x1
+ li x1, SSTATUS_SIE
+ csrw mstatus, x1
+ li x1, 1 << 9
+ csrw mie, x1
+ li x1, 1 << 9
+ csrs sip, x1
+ setPriv(0)
+ wfi
+ j fail
+
+
+
+test23: //Test software and hardware setting inettrupt
+ li TEST_ID, 23
+ li TRAP_OK, 0
+ externalInterruptS(0)
+ li x1, 1 << 9
+ csrc sip, x1
+ csrr x3, mip
+
+
+ externalInterruptS(1)
+ li x1, 1 << 9
+ csrc sip, x1
+ csrr x3, mip
+
+
+ externalInterruptS(0)
+ li x1, 1 << 9
+ csrc sip, x1
+ csrr x3, mip
+
+
+ externalInterruptS(0)
+ li x1, 1 << 9
+ csrs sip, x1
+ csrr x3, mip
+
+
+ externalInterruptS(1)
+ li x1, 1 << 9
+ csrs sip, x1
+ csrr x3, mip
+
+ externalInterruptS(0)
+
+test24: //test supervisor software interrupt
+ li TEST_ID, 24
+ li x1, 2
+ csrs mie, x1
+ csrs mip, x1
+ csrs mstatus, x1
+
+ li TRAP_OK, 1
+ la TRAP_RET, test25
+ setPriv(1)
+test24_s:
+ wfi
+ j fail
+
+
+test25: //test undelegated supervisor interrupt in machine mode (continue test24)
+ li TEST_ID, 25
+ la TRAP_RET, test26
+ csrsi mstatus, 1 << 3 //mie
+ wfi
+ j fail
+
+
+test26:
+
+ j pass
+
+fail:
+ li x2, 0xF00FFF24
+ sw TEST_ID, 0(x2)
+
+pass:
+ li x2, 0xF00FFF20
+ sw x0, 0(x2)
+
+
+mtrap:
+ beq TRAP_OK, x0, fail
+ csrr x1, mcause
+ csrr x1, mepc
+ csrr x1, mstatus
+ csrr x1, mbadaddr
+ li x1, MSTATUS_MPIE
+ csrc mstatus, x1
+ li x1, 2
+ beq TRAP_OK, x1, pass
+ li x1, 3 << 11
+ csrs mstatus, x1
+ csrw mepc, TRAP_RET
+ mret
+
+
+strap:
+ beq TRAP_OK, x0, fail
+ csrr x1, scause
+ csrr x1, sepc
+ csrr x1, sstatus
+ csrr x1, sbadaddr
+ ecall
+
+
+
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
diff --git a/VexRiscv/src/test/cpp/raw/deleg/src/encoding.h b/VexRiscv/src/test/cpp/raw/deleg/src/encoding.h
new file mode 100644
index 0000000..c109ce1
--- /dev/null
+++ b/VexRiscv/src/test/cpp/raw/deleg/src/encoding.h
@@ -0,0 +1,1471 @@
+// See LICENSE for license details.
+
+#ifndef RISCV_CSR_ENCODING_H
+#define RISCV_CSR_ENCODING_H
+
+#define MSTATUS_UIE 0x00000001
+#define MSTATUS_SIE 0x00000002
+#define MSTATUS_HIE 0x00000004
+#define MSTATUS_MIE 0x00000008
+#define MSTATUS_UPIE 0x00000010
+#define MSTATUS_SPIE 0x00000020
+#define MSTATUS_HPIE 0x00000040
+#define MSTATUS_MPIE 0x00000080
+#define MSTATUS_SPP 0x00000100
+#define MSTATUS_HPP 0x00000600
+#define MSTATUS_MPP 0x00001800
+#define MSTATUS_FS 0x00006000
+#define MSTATUS_XS 0x00018000
+#define MSTATUS_MPRV 0x00020000
+#define MSTATUS_SUM 0x00040000
+#define MSTATUS_MXR 0x00080000
+#define MSTATUS_TVM 0x00100000
+#define MSTATUS_TW 0x00200000
+#define MSTATUS_TSR 0x00400000
+#define MSTATUS32_SD 0x80000000
+#define MSTATUS_UXL 0x0000000300000000
+#define MSTATUS_SXL 0x0000000C00000000
+#define MSTATUS64_SD 0x8000000000000000
+
+#define SSTATUS_UIE 0x00000001
+#define SSTATUS_SIE 0x00000002
+#define SSTATUS_UPIE 0x00000010
+#define SSTATUS_SPIE 0x00000020
+#define SSTATUS_SPP 0x00000100
+#define SSTATUS_FS 0x00006000
+#define SSTATUS_XS 0x00018000
+#define SSTATUS_SUM 0x00040000
+#define SSTATUS_MXR 0x00080000
+#define SSTATUS32_SD 0x80000000
+#define SSTATUS_UXL 0x0000000300000000
+#define SSTATUS64_SD 0x8000000000000000
+
+#define DCSR_XDEBUGVER (3U<<30)
+#define DCSR_NDRESET (1<<29)
+#define DCSR_FULLRESET (1<<28)
+#define DCSR_EBREAKM (1<<15)
+#define DCSR_EBREAKH (1<<14)
+#define DCSR_EBREAKS (1<<13)
+#define DCSR_EBREAKU (1<<12)
+#define DCSR_STOPCYCLE (1<<10)
+#define DCSR_STOPTIME (1<<9)
+#define DCSR_CAUSE (7<<6)
+#define DCSR_DEBUGINT (1<<5)
+#define DCSR_HALT (1<<3)
+#define DCSR_STEP (1<<2)
+#define DCSR_PRV (3<<0)
+
+#define DCSR_CAUSE_NONE 0
+#define DCSR_CAUSE_SWBP 1
+#define DCSR_CAUSE_HWBP 2
+#define DCSR_CAUSE_DEBUGINT 3
+#define DCSR_CAUSE_STEP 4
+#define DCSR_CAUSE_HALT 5
+
+#define MCONTROL_TYPE(xlen) (0xfULL<<((xlen)-4))
+#define MCONTROL_DMODE(xlen) (1ULL<<((xlen)-5))
+#define MCONTROL_MASKMAX(xlen) (0x3fULL<<((xlen)-11))
+
+#define MCONTROL_SELECT (1<<19)
+#define MCONTROL_TIMING (1<<18)
+#define MCONTROL_ACTION (0x3f<<12)
+#define MCONTROL_CHAIN (1<<11)
+#define MCONTROL_MATCH (0xf<<7)
+#define MCONTROL_M (1<<6)
+#define MCONTROL_H (1<<5)
+#define MCONTROL_S (1<<4)
+#define MCONTROL_U (1<<3)
+#define MCONTROL_EXECUTE (1<<2)
+#define MCONTROL_STORE (1<<1)
+#define MCONTROL_LOAD (1<<0)
+
+#define MCONTROL_TYPE_NONE 0
+#define MCONTROL_TYPE_MATCH 2
+
+#define MCONTROL_ACTION_DEBUG_EXCEPTION 0
+#define MCONTROL_ACTION_DEBUG_MODE 1
+#define MCONTROL_ACTION_TRACE_START 2
+#define MCONTROL_ACTION_TRACE_STOP 3
+#define MCONTROL_ACTION_TRACE_EMIT 4
+
+#define MCONTROL_MATCH_EQUAL 0
+#define MCONTROL_MATCH_NAPOT 1
+#define MCONTROL_MATCH_GE 2
+#define MCONTROL_MATCH_LT 3
+#define MCONTROL_MATCH_MASK_LOW 4
+#define MCONTROL_MATCH_MASK_HIGH 5
+
+#define MIP_SSIP (1 << IRQ_S_SOFT)
+#define MIP_HSIP (1 << IRQ_H_SOFT)
+#define MIP_MSIP (1 << IRQ_M_SOFT)
+#define MIP_STIP (1 << IRQ_S_TIMER)
+#define MIP_HTIP (1 << IRQ_H_TIMER)
+#define MIP_MTIP (1 << IRQ_M_TIMER)
+#define MIP_SEIP (1 << IRQ_S_EXT)
+#define MIP_HEIP (1 << IRQ_H_EXT)
+#define MIP_MEIP (1 << IRQ_M_EXT)
+
+#define SIP_SSIP MIP_SSIP
+#define SIP_STIP MIP_STIP
+
+#define PRV_U 0
+#define PRV_S 1
+#define PRV_H 2
+#define PRV_M 3
+
+#define SATP32_MODE 0x80000000
+#define SATP32_ASID 0x7FC00000
+#define SATP32_PPN 0x003FFFFF
+#define SATP64_MODE 0xF000000000000000
+#define SATP64_ASID 0x0FFFF00000000000
+#define SATP64_PPN 0x00000FFFFFFFFFFF
+
+#define SATP_MODE_OFF 0
+#define SATP_MODE_SV32 1
+#define SATP_MODE_SV39 8
+#define SATP_MODE_SV48 9
+#define SATP_MODE_SV57 10
+#define SATP_MODE_SV64 11
+
+#define PMP_R 0x01
+#define PMP_W 0x02
+#define PMP_X 0x04
+#define PMP_A 0x18
+#define PMP_L 0x80
+#define PMP_SHIFT 2
+
+#define PMP_TOR 0x08
+#define PMP_NA4 0x10
+#define PMP_NAPOT 0x18
+
+#define IRQ_S_SOFT 1
+#define IRQ_H_SOFT 2
+#define IRQ_M_SOFT 3
+#define IRQ_S_TIMER 5
+#define IRQ_H_TIMER 6
+#define IRQ_M_TIMER 7
+#define IRQ_S_EXT 9
+#define IRQ_H_EXT 10
+#define IRQ_M_EXT 11
+#define IRQ_COP 12
+#define IRQ_HOST 13
+
+#define DEFAULT_RSTVEC 0x00001000
+#define CLINT_BASE 0x02000000
+#define CLINT_SIZE 0x000c0000
+#define EXT_IO_BASE 0x40000000
+#define DRAM_BASE 0x80000000
+
+// page table entry (PTE) fields
+#define PTE_V 0x001 // Valid
+#define PTE_R 0x002 // Read
+#define PTE_W 0x004 // Write
+#define PTE_X 0x008 // Execute
+#define PTE_U 0x010 // User
+#define PTE_G 0x020 // Global
+#define PTE_A 0x040 // Accessed
+#define PTE_D 0x080 // Dirty
+#define PTE_SOFT 0x300 // Reserved for Software
+
+#define PTE_PPN_SHIFT 10
+
+#define PTE_TABLE(PTE) (((PTE) & (PTE_V | PTE_R | PTE_W | PTE_X)) == PTE_V)
+
+#ifdef __riscv
+
+#if __riscv_xlen == 64
+# define MSTATUS_SD MSTATUS64_SD
+# define SSTATUS_SD SSTATUS64_SD
+# define RISCV_PGLEVEL_BITS 9
+# define SATP_MODE SATP64_MODE
+#else
+# define MSTATUS_SD MSTATUS32_SD
+# define SSTATUS_SD SSTATUS32_SD
+# define RISCV_PGLEVEL_BITS 10
+# define SATP_MODE SATP32_MODE
+#endif
+#define RISCV_PGSHIFT 12
+#define RISCV_PGSIZE (1 << RISCV_PGSHIFT)
+
+#ifndef __ASSEMBLER__
+
+#ifdef __GNUC__
+
+#define read_csr(reg) ({ unsigned long __tmp; \
+ asm volatile ("csrr %0, " #reg : "=r"(__tmp)); \
+ __tmp; })
+
+#define write_csr(reg, val) ({ \
+ asm volatile ("csrw " #reg ", %0" :: "rK"(val)); })
+
+#define swap_csr(reg, val) ({ unsigned long __tmp; \
+ asm volatile ("csrrw %0, " #reg ", %1" : "=r"(__tmp) : "rK"(val)); \
+ __tmp; })
+
+#define set_csr(reg, bit) ({ unsigned long __tmp; \
+ asm volatile ("csrrs %0, " #reg ", %1" : "=r"(__tmp) : "rK"(bit)); \
+ __tmp; })
+
+#define clear_csr(reg, bit) ({ unsigned long __tmp; \
+ asm volatile ("csrrc %0, " #reg ", %1" : "=r"(__tmp) : "rK"(bit)); \
+ __tmp; })
+
+#define rdtime() read_csr(time)
+#define rdcycle() read_csr(cycle)
+#define rdinstret() read_csr(instret)
+
+#endif
+
+#endif
+
+#endif
+
+#endif
+/* Automatically generated by parse-opcodes. */
+#ifndef RISCV_ENCODING_H
+#define RISCV_ENCODING_H
+#define MATCH_BEQ 0x63
+#define MASK_BEQ 0x707f
+#define MATCH_BNE 0x1063
+#define MASK_BNE 0x707f
+#define MATCH_BLT 0x4063
+#define MASK_BLT 0x707f
+#define MATCH_BGE 0x5063
+#define MASK_BGE 0x707f
+#define MATCH_BLTU 0x6063
+#define MASK_BLTU 0x707f
+#define MATCH_BGEU 0x7063
+#define MASK_BGEU 0x707f
+#define MATCH_JALR 0x67
+#define MASK_JALR 0x707f
+#define MATCH_JAL 0x6f
+#define MASK_JAL 0x7f
+#define MATCH_LUI 0x37
+#define MASK_LUI 0x7f
+#define MATCH_AUIPC 0x17
+#define MASK_AUIPC 0x7f
+#define MATCH_ADDI 0x13
+#define MASK_ADDI 0x707f
+#define MATCH_SLLI 0x1013
+#define MASK_SLLI 0xfc00707f
+#define MATCH_SLTI 0x2013
+#define MASK_SLTI 0x707f
+#define MATCH_SLTIU 0x3013
+#define MASK_SLTIU 0x707f
+#define MATCH_XORI 0x4013
+#define MASK_XORI 0x707f
+#define MATCH_SRLI 0x5013
+#define MASK_SRLI 0xfc00707f
+#define MATCH_SRAI 0x40005013
+#define MASK_SRAI 0xfc00707f
+#define MATCH_ORI 0x6013
+#define MASK_ORI 0x707f
+#define MATCH_ANDI 0x7013
+#define MASK_ANDI 0x707f
+#define MATCH_ADD 0x33
+#define MASK_ADD 0xfe00707f
+#define MATCH_SUB 0x40000033
+#define MASK_SUB 0xfe00707f
+#define MATCH_SLL 0x1033
+#define MASK_SLL 0xfe00707f
+#define MATCH_SLT 0x2033
+#define MASK_SLT 0xfe00707f
+#define MATCH_SLTU 0x3033
+#define MASK_SLTU 0xfe00707f
+#define MATCH_XOR 0x4033
+#define MASK_XOR 0xfe00707f
+#define MATCH_SRL 0x5033
+#define MASK_SRL 0xfe00707f
+#define MATCH_SRA 0x40005033
+#define MASK_SRA 0xfe00707f
+#define MATCH_OR 0x6033
+#define MASK_OR 0xfe00707f
+#define MATCH_AND 0x7033
+#define MASK_AND 0xfe00707f
+#define MATCH_ADDIW 0x1b
+#define MASK_ADDIW 0x707f
+#define MATCH_SLLIW 0x101b
+#define MASK_SLLIW 0xfe00707f
+#define MATCH_SRLIW 0x501b
+#define MASK_SRLIW 0xfe00707f
+#define MATCH_SRAIW 0x4000501b
+#define MASK_SRAIW 0xfe00707f
+#define MATCH_ADDW 0x3b
+#define MASK_ADDW 0xfe00707f
+#define MATCH_SUBW 0x4000003b
+#define MASK_SUBW 0xfe00707f
+#define MATCH_SLLW 0x103b
+#define MASK_SLLW 0xfe00707f
+#define MATCH_SRLW 0x503b
+#define MASK_SRLW 0xfe00707f
+#define MATCH_SRAW 0x4000503b
+#define MASK_SRAW 0xfe00707f
+#define MATCH_LB 0x3
+#define MASK_LB 0x707f
+#define MATCH_LH 0x1003
+#define MASK_LH 0x707f
+#define MATCH_LW 0x2003
+#define MASK_LW 0x707f
+#define MATCH_LD 0x3003
+#define MASK_LD 0x707f
+#define MATCH_LBU 0x4003
+#define MASK_LBU 0x707f
+#define MATCH_LHU 0x5003
+#define MASK_LHU 0x707f
+#define MATCH_LWU 0x6003
+#define MASK_LWU 0x707f
+#define MATCH_SB 0x23
+#define MASK_SB 0x707f
+#define MATCH_SH 0x1023
+#define MASK_SH 0x707f
+#define MATCH_SW 0x2023
+#define MASK_SW 0x707f
+#define MATCH_SD 0x3023
+#define MASK_SD 0x707f
+#define MATCH_FENCE 0xf
+#define MASK_FENCE 0x707f
+#define MATCH_FENCE_I 0x100f
+#define MASK_FENCE_I 0x707f
+#define MATCH_MUL 0x2000033
+#define MASK_MUL 0xfe00707f
+#define MATCH_MULH 0x2001033
+#define MASK_MULH 0xfe00707f
+#define MATCH_MULHSU 0x2002033
+#define MASK_MULHSU 0xfe00707f
+#define MATCH_MULHU 0x2003033
+#define MASK_MULHU 0xfe00707f
+#define MATCH_DIV 0x2004033
+#define MASK_DIV 0xfe00707f
+#define MATCH_DIVU 0x2005033
+#define MASK_DIVU 0xfe00707f
+#define MATCH_REM 0x2006033
+#define MASK_REM 0xfe00707f
+#define MATCH_REMU 0x2007033
+#define MASK_REMU 0xfe00707f
+#define MATCH_MULW 0x200003b
+#define MASK_MULW 0xfe00707f
+#define MATCH_DIVW 0x200403b
+#define MASK_DIVW 0xfe00707f
+#define MATCH_DIVUW 0x200503b
+#define MASK_DIVUW 0xfe00707f
+#define MATCH_REMW 0x200603b
+#define MASK_REMW 0xfe00707f
+#define MATCH_REMUW 0x200703b
+#define MASK_REMUW 0xfe00707f
+#define MATCH_AMOADD_W 0x202f
+#define MASK_AMOADD_W 0xf800707f
+#define MATCH_AMOXOR_W 0x2000202f
+#define MASK_AMOXOR_W 0xf800707f
+#define MATCH_AMOOR_W 0x4000202f
+#define MASK_AMOOR_W 0xf800707f
+#define MATCH_AMOAND_W 0x6000202f
+#define MASK_AMOAND_W 0xf800707f
+#define MATCH_AMOMIN_W 0x8000202f
+#define MASK_AMOMIN_W 0xf800707f
+#define MATCH_AMOMAX_W 0xa000202f
+#define MASK_AMOMAX_W 0xf800707f
+#define MATCH_AMOMINU_W 0xc000202f
+#define MASK_AMOMINU_W 0xf800707f
+#define MATCH_AMOMAXU_W 0xe000202f
+#define MASK_AMOMAXU_W 0xf800707f
+#define MATCH_AMOSWAP_W 0x800202f
+#define MASK_AMOSWAP_W 0xf800707f
+#define MATCH_LR_W 0x1000202f
+#define MASK_LR_W 0xf9f0707f
+#define MATCH_SC_W 0x1800202f
+#define MASK_SC_W 0xf800707f
+#define MATCH_AMOADD_D 0x302f
+#define MASK_AMOADD_D 0xf800707f
+#define MATCH_AMOXOR_D 0x2000302f
+#define MASK_AMOXOR_D 0xf800707f
+#define MATCH_AMOOR_D 0x4000302f
+#define MASK_AMOOR_D 0xf800707f
+#define MATCH_AMOAND_D 0x6000302f
+#define MASK_AMOAND_D 0xf800707f
+#define MATCH_AMOMIN_D 0x8000302f
+#define MASK_AMOMIN_D 0xf800707f
+#define MATCH_AMOMAX_D 0xa000302f
+#define MASK_AMOMAX_D 0xf800707f
+#define MATCH_AMOMINU_D 0xc000302f
+#define MASK_AMOMINU_D 0xf800707f
+#define MATCH_AMOMAXU_D 0xe000302f
+#define MASK_AMOMAXU_D 0xf800707f
+#define MATCH_AMOSWAP_D 0x800302f
+#define MASK_AMOSWAP_D 0xf800707f
+#define MATCH_LR_D 0x1000302f
+#define MASK_LR_D 0xf9f0707f
+#define MATCH_SC_D 0x1800302f
+#define MASK_SC_D 0xf800707f
+#define MATCH_ECALL 0x73
+#define MASK_ECALL 0xffffffff
+#define MATCH_EBREAK 0x100073
+#define MASK_EBREAK 0xffffffff
+#define MATCH_URET 0x200073
+#define MASK_URET 0xffffffff
+#define MATCH_SRET 0x10200073
+#define MASK_SRET 0xffffffff
+#define MATCH_MRET 0x30200073
+#define MASK_MRET 0xffffffff
+#define MATCH_DRET 0x7b200073
+#define MASK_DRET 0xffffffff
+#define MATCH_SFENCE_VMA 0x12000073
+#define MASK_SFENCE_VMA 0xfe007fff
+#define MATCH_WFI 0x10500073
+#define MASK_WFI 0xffffffff
+#define MATCH_CSRRW 0x1073
+#define MASK_CSRRW 0x707f
+#define MATCH_CSRRS 0x2073
+#define MASK_CSRRS 0x707f
+#define MATCH_CSRRC 0x3073
+#define MASK_CSRRC 0x707f
+#define MATCH_CSRRWI 0x5073
+#define MASK_CSRRWI 0x707f
+#define MATCH_CSRRSI 0x6073
+#define MASK_CSRRSI 0x707f
+#define MATCH_CSRRCI 0x7073
+#define MASK_CSRRCI 0x707f
+#define MATCH_FADD_S 0x53
+#define MASK_FADD_S 0xfe00007f
+#define MATCH_FSUB_S 0x8000053
+#define MASK_FSUB_S 0xfe00007f
+#define MATCH_FMUL_S 0x10000053
+#define MASK_FMUL_S 0xfe00007f
+#define MATCH_FDIV_S 0x18000053
+#define MASK_FDIV_S 0xfe00007f
+#define MATCH_FSGNJ_S 0x20000053
+#define MASK_FSGNJ_S 0xfe00707f
+#define MATCH_FSGNJN_S 0x20001053
+#define MASK_FSGNJN_S 0xfe00707f
+#define MATCH_FSGNJX_S 0x20002053
+#define MASK_FSGNJX_S 0xfe00707f
+#define MATCH_FMIN_S 0x28000053
+#define MASK_FMIN_S 0xfe00707f
+#define MATCH_FMAX_S 0x28001053
+#define MASK_FMAX_S 0xfe00707f
+#define MATCH_FSQRT_S 0x58000053
+#define MASK_FSQRT_S 0xfff0007f
+#define MATCH_FADD_D 0x2000053
+#define MASK_FADD_D 0xfe00007f
+#define MATCH_FSUB_D 0xa000053
+#define MASK_FSUB_D 0xfe00007f
+#define MATCH_FMUL_D 0x12000053
+#define MASK_FMUL_D 0xfe00007f
+#define MATCH_FDIV_D 0x1a000053
+#define MASK_FDIV_D 0xfe00007f
+#define MATCH_FSGNJ_D 0x22000053
+#define MASK_FSGNJ_D 0xfe00707f
+#define MATCH_FSGNJN_D 0x22001053
+#define MASK_FSGNJN_D 0xfe00707f
+#define MATCH_FSGNJX_D 0x22002053
+#define MASK_FSGNJX_D 0xfe00707f
+#define MATCH_FMIN_D 0x2a000053
+#define MASK_FMIN_D 0xfe00707f
+#define MATCH_FMAX_D 0x2a001053
+#define MASK_FMAX_D 0xfe00707f
+#define MATCH_FCVT_S_D 0x40100053
+#define MASK_FCVT_S_D 0xfff0007f
+#define MATCH_FCVT_D_S 0x42000053
+#define MASK_FCVT_D_S 0xfff0007f
+#define MATCH_FSQRT_D 0x5a000053
+#define MASK_FSQRT_D 0xfff0007f
+#define MATCH_FADD_Q 0x6000053
+#define MASK_FADD_Q 0xfe00007f
+#define MATCH_FSUB_Q 0xe000053
+#define MASK_FSUB_Q 0xfe00007f
+#define MATCH_FMUL_Q 0x16000053
+#define MASK_FMUL_Q 0xfe00007f
+#define MATCH_FDIV_Q 0x1e000053
+#define MASK_FDIV_Q 0xfe00007f
+#define MATCH_FSGNJ_Q 0x26000053
+#define MASK_FSGNJ_Q 0xfe00707f
+#define MATCH_FSGNJN_Q 0x26001053
+#define MASK_FSGNJN_Q 0xfe00707f
+#define MATCH_FSGNJX_Q 0x26002053
+#define MASK_FSGNJX_Q 0xfe00707f
+#define MATCH_FMIN_Q 0x2e000053
+#define MASK_FMIN_Q 0xfe00707f
+#define MATCH_FMAX_Q 0x2e001053
+#define MASK_FMAX_Q 0xfe00707f
+#define MATCH_FCVT_S_Q 0x40300053
+#define MASK_FCVT_S_Q 0xfff0007f
+#define MATCH_FCVT_Q_S 0x46000053
+#define MASK_FCVT_Q_S 0xfff0007f
+#define MATCH_FCVT_D_Q 0x42300053
+#define MASK_FCVT_D_Q 0xfff0007f
+#define MATCH_FCVT_Q_D 0x46100053
+#define MASK_FCVT_Q_D 0xfff0007f
+#define MATCH_FSQRT_Q 0x5e000053
+#define MASK_FSQRT_Q 0xfff0007f
+#define MATCH_FLE_S 0xa0000053
+#define MASK_FLE_S 0xfe00707f
+#define MATCH_FLT_S 0xa0001053
+#define MASK_FLT_S 0xfe00707f
+#define MATCH_FEQ_S 0xa0002053
+#define MASK_FEQ_S 0xfe00707f
+#define MATCH_FLE_D 0xa2000053
+#define MASK_FLE_D 0xfe00707f
+#define MATCH_FLT_D 0xa2001053
+#define MASK_FLT_D 0xfe00707f
+#define MATCH_FEQ_D 0xa2002053
+#define MASK_FEQ_D 0xfe00707f
+#define MATCH_FLE_Q 0xa6000053
+#define MASK_FLE_Q 0xfe00707f
+#define MATCH_FLT_Q 0xa6001053
+#define MASK_FLT_Q 0xfe00707f
+#define MATCH_FEQ_Q 0xa6002053
+#define MASK_FEQ_Q 0xfe00707f
+#define MATCH_FCVT_W_S 0xc0000053
+#define MASK_FCVT_W_S 0xfff0007f
+#define MATCH_FCVT_WU_S 0xc0100053
+#define MASK_FCVT_WU_S 0xfff0007f
+#define MATCH_FCVT_L_S 0xc0200053
+#define MASK_FCVT_L_S 0xfff0007f
+#define MATCH_FCVT_LU_S 0xc0300053
+#define MASK_FCVT_LU_S 0xfff0007f
+#define MATCH_FMV_X_W 0xe0000053
+#define MASK_FMV_X_W 0xfff0707f
+#define MATCH_FCLASS_S 0xe0001053
+#define MASK_FCLASS_S 0xfff0707f
+#define MATCH_FCVT_W_D 0xc2000053
+#define MASK_FCVT_W_D 0xfff0007f
+#define MATCH_FCVT_WU_D 0xc2100053
+#define MASK_FCVT_WU_D 0xfff0007f
+#define MATCH_FCVT_L_D 0xc2200053
+#define MASK_FCVT_L_D 0xfff0007f
+#define MATCH_FCVT_LU_D 0xc2300053
+#define MASK_FCVT_LU_D 0xfff0007f
+#define MATCH_FMV_X_D 0xe2000053
+#define MASK_FMV_X_D 0xfff0707f
+#define MATCH_FCLASS_D 0xe2001053
+#define MASK_FCLASS_D 0xfff0707f
+#define MATCH_FCVT_W_Q 0xc6000053
+#define MASK_FCVT_W_Q 0xfff0007f
+#define MATCH_FCVT_WU_Q 0xc6100053
+#define MASK_FCVT_WU_Q 0xfff0007f
+#define MATCH_FCVT_L_Q 0xc6200053
+#define MASK_FCVT_L_Q 0xfff0007f
+#define MATCH_FCVT_LU_Q 0xc6300053
+#define MASK_FCVT_LU_Q 0xfff0007f
+#define MATCH_FMV_X_Q 0xe6000053
+#define MASK_FMV_X_Q 0xfff0707f
+#define MATCH_FCLASS_Q 0xe6001053
+#define MASK_FCLASS_Q 0xfff0707f
+#define MATCH_FCVT_S_W 0xd0000053
+#define MASK_FCVT_S_W 0xfff0007f
+#define MATCH_FCVT_S_WU 0xd0100053
+#define MASK_FCVT_S_WU 0xfff0007f
+#define MATCH_FCVT_S_L 0xd0200053
+#define MASK_FCVT_S_L 0xfff0007f
+#define MATCH_FCVT_S_LU 0xd0300053
+#define MASK_FCVT_S_LU 0xfff0007f
+#define MATCH_FMV_W_X 0xf0000053
+#define MASK_FMV_W_X 0xfff0707f
+#define MATCH_FCVT_D_W 0xd2000053
+#define MASK_FCVT_D_W 0xfff0007f
+#define MATCH_FCVT_D_WU 0xd2100053
+#define MASK_FCVT_D_WU 0xfff0007f
+#define MATCH_FCVT_D_L 0xd2200053
+#define MASK_FCVT_D_L 0xfff0007f
+#define MATCH_FCVT_D_LU 0xd2300053
+#define MASK_FCVT_D_LU 0xfff0007f
+#define MATCH_FMV_D_X 0xf2000053
+#define MASK_FMV_D_X 0xfff0707f
+#define MATCH_FCVT_Q_W 0xd6000053
+#define MASK_FCVT_Q_W 0xfff0007f
+#define MATCH_FCVT_Q_WU 0xd6100053
+#define MASK_FCVT_Q_WU 0xfff0007f
+#define MATCH_FCVT_Q_L 0xd6200053
+#define MASK_FCVT_Q_L 0xfff0007f
+#define MATCH_FCVT_Q_LU 0xd6300053
+#define MASK_FCVT_Q_LU 0xfff0007f
+#define MATCH_FMV_Q_X 0xf6000053
+#define MASK_FMV_Q_X 0xfff0707f
+#define MATCH_FLW 0x2007
+#define MASK_FLW 0x707f
+#define MATCH_FLD 0x3007
+#define MASK_FLD 0x707f
+#define MATCH_FLQ 0x4007
+#define MASK_FLQ 0x707f
+#define MATCH_FSW 0x2027
+#define MASK_FSW 0x707f
+#define MATCH_FSD 0x3027
+#define MASK_FSD 0x707f
+#define MATCH_FSQ 0x4027
+#define MASK_FSQ 0x707f
+#define MATCH_FMADD_S 0x43
+#define MASK_FMADD_S 0x600007f
+#define MATCH_FMSUB_S 0x47
+#define MASK_FMSUB_S 0x600007f
+#define MATCH_FNMSUB_S 0x4b
+#define MASK_FNMSUB_S 0x600007f
+#define MATCH_FNMADD_S 0x4f
+#define MASK_FNMADD_S 0x600007f
+#define MATCH_FMADD_D 0x2000043
+#define MASK_FMADD_D 0x600007f
+#define MATCH_FMSUB_D 0x2000047
+#define MASK_FMSUB_D 0x600007f
+#define MATCH_FNMSUB_D 0x200004b
+#define MASK_FNMSUB_D 0x600007f
+#define MATCH_FNMADD_D 0x200004f
+#define MASK_FNMADD_D 0x600007f
+#define MATCH_FMADD_Q 0x6000043
+#define MASK_FMADD_Q 0x600007f
+#define MATCH_FMSUB_Q 0x6000047
+#define MASK_FMSUB_Q 0x600007f
+#define MATCH_FNMSUB_Q 0x600004b
+#define MASK_FNMSUB_Q 0x600007f
+#define MATCH_FNMADD_Q 0x600004f
+#define MASK_FNMADD_Q 0x600007f
+#define MATCH_C_NOP 0x1
+#define MASK_C_NOP 0xffff
+#define MATCH_C_ADDI16SP 0x6101
+#define MASK_C_ADDI16SP 0xef83
+#define MATCH_C_JR 0x8002
+#define MASK_C_JR 0xf07f
+#define MATCH_C_JALR 0x9002
+#define MASK_C_JALR 0xf07f
+#define MATCH_C_EBREAK 0x9002
+#define MASK_C_EBREAK 0xffff
+#define MATCH_C_LD 0x6000
+#define MASK_C_LD 0xe003
+#define MATCH_C_SD 0xe000
+#define MASK_C_SD 0xe003
+#define MATCH_C_ADDIW 0x2001
+#define MASK_C_ADDIW 0xe003
+#define MATCH_C_LDSP 0x6002
+#define MASK_C_LDSP 0xe003
+#define MATCH_C_SDSP 0xe002
+#define MASK_C_SDSP 0xe003
+#define MATCH_C_ADDI4SPN 0x0
+#define MASK_C_ADDI4SPN 0xe003
+#define MATCH_C_FLD 0x2000
+#define MASK_C_FLD 0xe003
+#define MATCH_C_LW 0x4000
+#define MASK_C_LW 0xe003
+#define MATCH_C_FLW 0x6000
+#define MASK_C_FLW 0xe003
+#define MATCH_C_FSD 0xa000
+#define MASK_C_FSD 0xe003
+#define MATCH_C_SW 0xc000
+#define MASK_C_SW 0xe003
+#define MATCH_C_FSW 0xe000
+#define MASK_C_FSW 0xe003
+#define MATCH_C_ADDI 0x1
+#define MASK_C_ADDI 0xe003
+#define MATCH_C_JAL 0x2001
+#define MASK_C_JAL 0xe003
+#define MATCH_C_LI 0x4001
+#define MASK_C_LI 0xe003
+#define MATCH_C_LUI 0x6001
+#define MASK_C_LUI 0xe003
+#define MATCH_C_SRLI 0x8001
+#define MASK_C_SRLI 0xec03
+#define MATCH_C_SRAI 0x8401
+#define MASK_C_SRAI 0xec03
+#define MATCH_C_ANDI 0x8801
+#define MASK_C_ANDI 0xec03
+#define MATCH_C_SUB 0x8c01
+#define MASK_C_SUB 0xfc63
+#define MATCH_C_XOR 0x8c21
+#define MASK_C_XOR 0xfc63
+#define MATCH_C_OR 0x8c41
+#define MASK_C_OR 0xfc63
+#define MATCH_C_AND 0x8c61
+#define MASK_C_AND 0xfc63
+#define MATCH_C_SUBW 0x9c01
+#define MASK_C_SUBW 0xfc63
+#define MATCH_C_ADDW 0x9c21
+#define MASK_C_ADDW 0xfc63
+#define MATCH_C_J 0xa001
+#define MASK_C_J 0xe003
+#define MATCH_C_BEQZ 0xc001
+#define MASK_C_BEQZ 0xe003
+#define MATCH_C_BNEZ 0xe001
+#define MASK_C_BNEZ 0xe003
+#define MATCH_C_SLLI 0x2
+#define MASK_C_SLLI 0xe003
+#define MATCH_C_FLDSP 0x2002
+#define MASK_C_FLDSP 0xe003
+#define MATCH_C_LWSP 0x4002
+#define MASK_C_LWSP 0xe003
+#define MATCH_C_FLWSP 0x6002
+#define MASK_C_FLWSP 0xe003
+#define MATCH_C_MV 0x8002
+#define MASK_C_MV 0xf003
+#define MATCH_C_ADD 0x9002
+#define MASK_C_ADD 0xf003
+#define MATCH_C_FSDSP 0xa002
+#define MASK_C_FSDSP 0xe003
+#define MATCH_C_SWSP 0xc002
+#define MASK_C_SWSP 0xe003
+#define MATCH_C_FSWSP 0xe002
+#define MASK_C_FSWSP 0xe003
+#define MATCH_CUSTOM0 0xb
+#define MASK_CUSTOM0 0x707f
+#define MATCH_CUSTOM0_RS1 0x200b
+#define MASK_CUSTOM0_RS1 0x707f
+#define MATCH_CUSTOM0_RS1_RS2 0x300b
+#define MASK_CUSTOM0_RS1_RS2 0x707f
+#define MATCH_CUSTOM0_RD 0x400b
+#define MASK_CUSTOM0_RD 0x707f
+#define MATCH_CUSTOM0_RD_RS1 0x600b
+#define MASK_CUSTOM0_RD_RS1 0x707f
+#define MATCH_CUSTOM0_RD_RS1_RS2 0x700b
+#define MASK_CUSTOM0_RD_RS1_RS2 0x707f
+#define MATCH_CUSTOM1 0x2b
+#define MASK_CUSTOM1 0x707f
+#define MATCH_CUSTOM1_RS1 0x202b
+#define MASK_CUSTOM1_RS1 0x707f
+#define MATCH_CUSTOM1_RS1_RS2 0x302b
+#define MASK_CUSTOM1_RS1_RS2 0x707f
+#define MATCH_CUSTOM1_RD 0x402b
+#define MASK_CUSTOM1_RD 0x707f
+#define MATCH_CUSTOM1_RD_RS1 0x602b
+#define MASK_CUSTOM1_RD_RS1 0x707f
+#define MATCH_CUSTOM1_RD_RS1_RS2 0x702b
+#define MASK_CUSTOM1_RD_RS1_RS2 0x707f
+#define MATCH_CUSTOM2 0x5b
+#define MASK_CUSTOM2 0x707f
+#define MATCH_CUSTOM2_RS1 0x205b
+#define MASK_CUSTOM2_RS1 0x707f
+#define MATCH_CUSTOM2_RS1_RS2 0x305b
+#define MASK_CUSTOM2_RS1_RS2 0x707f
+#define MATCH_CUSTOM2_RD 0x405b
+#define MASK_CUSTOM2_RD 0x707f
+#define MATCH_CUSTOM2_RD_RS1 0x605b
+#define MASK_CUSTOM2_RD_RS1 0x707f
+#define MATCH_CUSTOM2_RD_RS1_RS2 0x705b
+#define MASK_CUSTOM2_RD_RS1_RS2 0x707f
+#define MATCH_CUSTOM3 0x7b
+#define MASK_CUSTOM3 0x707f
+#define MATCH_CUSTOM3_RS1 0x207b
+#define MASK_CUSTOM3_RS1 0x707f
+#define MATCH_CUSTOM3_RS1_RS2 0x307b
+#define MASK_CUSTOM3_RS1_RS2 0x707f
+#define MATCH_CUSTOM3_RD 0x407b
+#define MASK_CUSTOM3_RD 0x707f
+#define MATCH_CUSTOM3_RD_RS1 0x607b
+#define MASK_CUSTOM3_RD_RS1 0x707f
+#define MATCH_CUSTOM3_RD_RS1_RS2 0x707b
+#define MASK_CUSTOM3_RD_RS1_RS2 0x707f
+#define CSR_FFLAGS 0x1
+#define CSR_FRM 0x2
+#define CSR_FCSR 0x3
+#define CSR_CYCLE 0xc00
+#define CSR_TIME 0xc01
+#define CSR_INSTRET 0xc02
+#define CSR_HPMCOUNTER3 0xc03
+#define CSR_HPMCOUNTER4 0xc04
+#define CSR_HPMCOUNTER5 0xc05
+#define CSR_HPMCOUNTER6 0xc06
+#define CSR_HPMCOUNTER7 0xc07
+#define CSR_HPMCOUNTER8 0xc08
+#define CSR_HPMCOUNTER9 0xc09
+#define CSR_HPMCOUNTER10 0xc0a
+#define CSR_HPMCOUNTER11 0xc0b
+#define CSR_HPMCOUNTER12 0xc0c
+#define CSR_HPMCOUNTER13 0xc0d
+#define CSR_HPMCOUNTER14 0xc0e
+#define CSR_HPMCOUNTER15 0xc0f
+#define CSR_HPMCOUNTER16 0xc10
+#define CSR_HPMCOUNTER17 0xc11
+#define CSR_HPMCOUNTER18 0xc12
+#define CSR_HPMCOUNTER19 0xc13
+#define CSR_HPMCOUNTER20 0xc14
+#define CSR_HPMCOUNTER21 0xc15
+#define CSR_HPMCOUNTER22 0xc16
+#define CSR_HPMCOUNTER23 0xc17
+#define CSR_HPMCOUNTER24 0xc18
+#define CSR_HPMCOUNTER25 0xc19
+#define CSR_HPMCOUNTER26 0xc1a
+#define CSR_HPMCOUNTER27 0xc1b
+#define CSR_HPMCOUNTER28 0xc1c
+#define CSR_HPMCOUNTER29 0xc1d
+#define CSR_HPMCOUNTER30 0xc1e
+#define CSR_HPMCOUNTER31 0xc1f
+#define CSR_SSTATUS 0x100
+#define CSR_SIE 0x104
+#define CSR_STVEC 0x105
+#define CSR_SCOUNTEREN 0x106
+#define CSR_SSCRATCH 0x140
+#define CSR_SEPC 0x141
+#define CSR_SCAUSE 0x142
+#define CSR_STVAL 0x143
+#define CSR_SIP 0x144
+#define CSR_SATP 0x180
+#define CSR_MSTATUS 0x300
+#define CSR_MISA 0x301
+#define CSR_MEDELEG 0x302
+#define CSR_MIDELEG 0x303
+#define CSR_MIE 0x304
+#define CSR_MTVEC 0x305
+#define CSR_MCOUNTEREN 0x306
+#define CSR_MSCRATCH 0x340
+#define CSR_MEPC 0x341
+#define CSR_MCAUSE 0x342
+#define CSR_MTVAL 0x343
+#define CSR_MIP 0x344
+#define CSR_PMPCFG0 0x3a0
+#define CSR_PMPCFG1 0x3a1
+#define CSR_PMPCFG2 0x3a2
+#define CSR_PMPCFG3 0x3a3
+#define CSR_PMPADDR0 0x3b0
+#define CSR_PMPADDR1 0x3b1
+#define CSR_PMPADDR2 0x3b2
+#define CSR_PMPADDR3 0x3b3
+#define CSR_PMPADDR4 0x3b4
+#define CSR_PMPADDR5 0x3b5
+#define CSR_PMPADDR6 0x3b6
+#define CSR_PMPADDR7 0x3b7
+#define CSR_PMPADDR8 0x3b8
+#define CSR_PMPADDR9 0x3b9
+#define CSR_PMPADDR10 0x3ba
+#define CSR_PMPADDR11 0x3bb
+#define CSR_PMPADDR12 0x3bc
+#define CSR_PMPADDR13 0x3bd
+#define CSR_PMPADDR14 0x3be
+#define CSR_PMPADDR15 0x3bf
+#define CSR_TSELECT 0x7a0
+#define CSR_TDATA1 0x7a1
+#define CSR_TDATA2 0x7a2
+#define CSR_TDATA3 0x7a3
+#define CSR_DCSR 0x7b0
+#define CSR_DPC 0x7b1
+#define CSR_DSCRATCH 0x7b2
+#define CSR_MCYCLE 0xb00
+#define CSR_MINSTRET 0xb02
+#define CSR_MHPMCOUNTER3 0xb03
+#define CSR_MHPMCOUNTER4 0xb04
+#define CSR_MHPMCOUNTER5 0xb05
+#define CSR_MHPMCOUNTER6 0xb06
+#define CSR_MHPMCOUNTER7 0xb07
+#define CSR_MHPMCOUNTER8 0xb08
+#define CSR_MHPMCOUNTER9 0xb09
+#define CSR_MHPMCOUNTER10 0xb0a
+#define CSR_MHPMCOUNTER11 0xb0b
+#define CSR_MHPMCOUNTER12 0xb0c
+#define CSR_MHPMCOUNTER13 0xb0d
+#define CSR_MHPMCOUNTER14 0xb0e
+#define CSR_MHPMCOUNTER15 0xb0f
+#define CSR_MHPMCOUNTER16 0xb10
+#define CSR_MHPMCOUNTER17 0xb11
+#define CSR_MHPMCOUNTER18 0xb12
+#define CSR_MHPMCOUNTER19 0xb13
+#define CSR_MHPMCOUNTER20 0xb14
+#define CSR_MHPMCOUNTER21 0xb15
+#define CSR_MHPMCOUNTER22 0xb16
+#define CSR_MHPMCOUNTER23 0xb17
+#define CSR_MHPMCOUNTER24 0xb18
+#define CSR_MHPMCOUNTER25 0xb19
+#define CSR_MHPMCOUNTER26 0xb1a
+#define CSR_MHPMCOUNTER27 0xb1b
+#define CSR_MHPMCOUNTER28 0xb1c
+#define CSR_MHPMCOUNTER29 0xb1d
+#define CSR_MHPMCOUNTER30 0xb1e
+#define CSR_MHPMCOUNTER31 0xb1f
+#define CSR_MHPMEVENT3 0x323
+#define CSR_MHPMEVENT4 0x324
+#define CSR_MHPMEVENT5 0x325
+#define CSR_MHPMEVENT6 0x326
+#define CSR_MHPMEVENT7 0x327
+#define CSR_MHPMEVENT8 0x328
+#define CSR_MHPMEVENT9 0x329
+#define CSR_MHPMEVENT10 0x32a
+#define CSR_MHPMEVENT11 0x32b
+#define CSR_MHPMEVENT12 0x32c
+#define CSR_MHPMEVENT13 0x32d
+#define CSR_MHPMEVENT14 0x32e
+#define CSR_MHPMEVENT15 0x32f
+#define CSR_MHPMEVENT16 0x330
+#define CSR_MHPMEVENT17 0x331
+#define CSR_MHPMEVENT18 0x332
+#define CSR_MHPMEVENT19 0x333
+#define CSR_MHPMEVENT20 0x334
+#define CSR_MHPMEVENT21 0x335
+#define CSR_MHPMEVENT22 0x336
+#define CSR_MHPMEVENT23 0x337
+#define CSR_MHPMEVENT24 0x338
+#define CSR_MHPMEVENT25 0x339
+#define CSR_MHPMEVENT26 0x33a
+#define CSR_MHPMEVENT27 0x33b
+#define CSR_MHPMEVENT28 0x33c
+#define CSR_MHPMEVENT29 0x33d
+#define CSR_MHPMEVENT30 0x33e
+#define CSR_MHPMEVENT31 0x33f
+#define CSR_MVENDORID 0xf11
+#define CSR_MARCHID 0xf12
+#define CSR_MIMPID 0xf13
+#define CSR_MHARTID 0xf14
+#define CSR_CYCLEH 0xc80
+#define CSR_TIMEH 0xc81
+#define CSR_INSTRETH 0xc82
+#define CSR_HPMCOUNTER3H 0xc83
+#define CSR_HPMCOUNTER4H 0xc84
+#define CSR_HPMCOUNTER5H 0xc85
+#define CSR_HPMCOUNTER6H 0xc86
+#define CSR_HPMCOUNTER7H 0xc87
+#define CSR_HPMCOUNTER8H 0xc88
+#define CSR_HPMCOUNTER9H 0xc89
+#define CSR_HPMCOUNTER10H 0xc8a
+#define CSR_HPMCOUNTER11H 0xc8b
+#define CSR_HPMCOUNTER12H 0xc8c
+#define CSR_HPMCOUNTER13H 0xc8d
+#define CSR_HPMCOUNTER14H 0xc8e
+#define CSR_HPMCOUNTER15H 0xc8f
+#define CSR_HPMCOUNTER16H 0xc90
+#define CSR_HPMCOUNTER17H 0xc91
+#define CSR_HPMCOUNTER18H 0xc92
+#define CSR_HPMCOUNTER19H 0xc93
+#define CSR_HPMCOUNTER20H 0xc94
+#define CSR_HPMCOUNTER21H 0xc95
+#define CSR_HPMCOUNTER22H 0xc96
+#define CSR_HPMCOUNTER23H 0xc97
+#define CSR_HPMCOUNTER24H 0xc98
+#define CSR_HPMCOUNTER25H 0xc99
+#define CSR_HPMCOUNTER26H 0xc9a
+#define CSR_HPMCOUNTER27H 0xc9b
+#define CSR_HPMCOUNTER28H 0xc9c
+#define CSR_HPMCOUNTER29H 0xc9d
+#define CSR_HPMCOUNTER30H 0xc9e
+#define CSR_HPMCOUNTER31H 0xc9f
+#define CSR_MCYCLEH 0xb80
+#define CSR_MINSTRETH 0xb82
+#define CSR_MHPMCOUNTER3H 0xb83
+#define CSR_MHPMCOUNTER4H 0xb84
+#define CSR_MHPMCOUNTER5H 0xb85
+#define CSR_MHPMCOUNTER6H 0xb86
+#define CSR_MHPMCOUNTER7H 0xb87
+#define CSR_MHPMCOUNTER8H 0xb88
+#define CSR_MHPMCOUNTER9H 0xb89
+#define CSR_MHPMCOUNTER10H 0xb8a
+#define CSR_MHPMCOUNTER11H 0xb8b
+#define CSR_MHPMCOUNTER12H 0xb8c
+#define CSR_MHPMCOUNTER13H 0xb8d
+#define CSR_MHPMCOUNTER14H 0xb8e
+#define CSR_MHPMCOUNTER15H 0xb8f
+#define CSR_MHPMCOUNTER16H 0xb90
+#define CSR_MHPMCOUNTER17H 0xb91
+#define CSR_MHPMCOUNTER18H 0xb92
+#define CSR_MHPMCOUNTER19H 0xb93
+#define CSR_MHPMCOUNTER20H 0xb94
+#define CSR_MHPMCOUNTER21H 0xb95
+#define CSR_MHPMCOUNTER22H 0xb96
+#define CSR_MHPMCOUNTER23H 0xb97
+#define CSR_MHPMCOUNTER24H 0xb98
+#define CSR_MHPMCOUNTER25H 0xb99
+#define CSR_MHPMCOUNTER26H 0xb9a
+#define CSR_MHPMCOUNTER27H 0xb9b
+#define CSR_MHPMCOUNTER28H 0xb9c
+#define CSR_MHPMCOUNTER29H 0xb9d
+#define CSR_MHPMCOUNTER30H 0xb9e
+#define CSR_MHPMCOUNTER31H 0xb9f
+#define CAUSE_MISALIGNED_FETCH 0x0
+#define CAUSE_FETCH_ACCESS 0x1
+#define CAUSE_ILLEGAL_INSTRUCTION 0x2
+#define CAUSE_BREAKPOINT 0x3
+#define CAUSE_MISALIGNED_LOAD 0x4
+#define CAUSE_LOAD_ACCESS 0x5
+#define CAUSE_MISALIGNED_STORE 0x6
+#define CAUSE_STORE_ACCESS 0x7
+#define CAUSE_USER_ECALL 0x8
+#define CAUSE_SUPERVISOR_ECALL 0x9
+#define CAUSE_HYPERVISOR_ECALL 0xa
+#define CAUSE_MACHINE_ECALL 0xb
+#define CAUSE_FETCH_PAGE_FAULT 0xc
+#define CAUSE_LOAD_PAGE_FAULT 0xd
+#define CAUSE_STORE_PAGE_FAULT 0xf
+#endif
+#ifdef DECLARE_INSN
+DECLARE_INSN(beq, MATCH_BEQ, MASK_BEQ)
+DECLARE_INSN(bne, MATCH_BNE, MASK_BNE)
+DECLARE_INSN(blt, MATCH_BLT, MASK_BLT)
+DECLARE_INSN(bge, MATCH_BGE, MASK_BGE)
+DECLARE_INSN(bltu, MATCH_BLTU, MASK_BLTU)
+DECLARE_INSN(bgeu, MATCH_BGEU, MASK_BGEU)
+DECLARE_INSN(jalr, MATCH_JALR, MASK_JALR)
+DECLARE_INSN(jal, MATCH_JAL, MASK_JAL)
+DECLARE_INSN(lui, MATCH_LUI, MASK_LUI)
+DECLARE_INSN(auipc, MATCH_AUIPC, MASK_AUIPC)
+DECLARE_INSN(addi, MATCH_ADDI, MASK_ADDI)
+DECLARE_INSN(slli, MATCH_SLLI, MASK_SLLI)
+DECLARE_INSN(slti, MATCH_SLTI, MASK_SLTI)
+DECLARE_INSN(sltiu, MATCH_SLTIU, MASK_SLTIU)
+DECLARE_INSN(xori, MATCH_XORI, MASK_XORI)
+DECLARE_INSN(srli, MATCH_SRLI, MASK_SRLI)
+DECLARE_INSN(srai, MATCH_SRAI, MASK_SRAI)
+DECLARE_INSN(ori, MATCH_ORI, MASK_ORI)
+DECLARE_INSN(andi, MATCH_ANDI, MASK_ANDI)
+DECLARE_INSN(add, MATCH_ADD, MASK_ADD)
+DECLARE_INSN(sub, MATCH_SUB, MASK_SUB)
+DECLARE_INSN(sll, MATCH_SLL, MASK_SLL)
+DECLARE_INSN(slt, MATCH_SLT, MASK_SLT)
+DECLARE_INSN(sltu, MATCH_SLTU, MASK_SLTU)
+DECLARE_INSN(xor, MATCH_XOR, MASK_XOR)
+DECLARE_INSN(srl, MATCH_SRL, MASK_SRL)
+DECLARE_INSN(sra, MATCH_SRA, MASK_SRA)
+DECLARE_INSN(or, MATCH_OR, MASK_OR)
+DECLARE_INSN(and, MATCH_AND, MASK_AND)
+DECLARE_INSN(addiw, MATCH_ADDIW, MASK_ADDIW)
+DECLARE_INSN(slliw, MATCH_SLLIW, MASK_SLLIW)
+DECLARE_INSN(srliw, MATCH_SRLIW, MASK_SRLIW)
+DECLARE_INSN(sraiw, MATCH_SRAIW, MASK_SRAIW)
+DECLARE_INSN(addw, MATCH_ADDW, MASK_ADDW)
+DECLARE_INSN(subw, MATCH_SUBW, MASK_SUBW)
+DECLARE_INSN(sllw, MATCH_SLLW, MASK_SLLW)
+DECLARE_INSN(srlw, MATCH_SRLW, MASK_SRLW)
+DECLARE_INSN(sraw, MATCH_SRAW, MASK_SRAW)
+DECLARE_INSN(lb, MATCH_LB, MASK_LB)
+DECLARE_INSN(lh, MATCH_LH, MASK_LH)
+DECLARE_INSN(lw, MATCH_LW, MASK_LW)
+DECLARE_INSN(ld, MATCH_LD, MASK_LD)
+DECLARE_INSN(lbu, MATCH_LBU, MASK_LBU)
+DECLARE_INSN(lhu, MATCH_LHU, MASK_LHU)
+DECLARE_INSN(lwu, MATCH_LWU, MASK_LWU)
+DECLARE_INSN(sb, MATCH_SB, MASK_SB)
+DECLARE_INSN(sh, MATCH_SH, MASK_SH)
+DECLARE_INSN(sw, MATCH_SW, MASK_SW)
+DECLARE_INSN(sd, MATCH_SD, MASK_SD)
+DECLARE_INSN(fence, MATCH_FENCE, MASK_FENCE)
+DECLARE_INSN(fence_i, MATCH_FENCE_I, MASK_FENCE_I)
+DECLARE_INSN(mul, MATCH_MUL, MASK_MUL)
+DECLARE_INSN(mulh, MATCH_MULH, MASK_MULH)
+DECLARE_INSN(mulhsu, MATCH_MULHSU, MASK_MULHSU)
+DECLARE_INSN(mulhu, MATCH_MULHU, MASK_MULHU)
+DECLARE_INSN(div, MATCH_DIV, MASK_DIV)
+DECLARE_INSN(divu, MATCH_DIVU, MASK_DIVU)
+DECLARE_INSN(rem, MATCH_REM, MASK_REM)
+DECLARE_INSN(remu, MATCH_REMU, MASK_REMU)
+DECLARE_INSN(mulw, MATCH_MULW, MASK_MULW)
+DECLARE_INSN(divw, MATCH_DIVW, MASK_DIVW)
+DECLARE_INSN(divuw, MATCH_DIVUW, MASK_DIVUW)
+DECLARE_INSN(remw, MATCH_REMW, MASK_REMW)
+DECLARE_INSN(remuw, MATCH_REMUW, MASK_REMUW)
+DECLARE_INSN(amoadd_w, MATCH_AMOADD_W, MASK_AMOADD_W)
+DECLARE_INSN(amoxor_w, MATCH_AMOXOR_W, MASK_AMOXOR_W)
+DECLARE_INSN(amoor_w, MATCH_AMOOR_W, MASK_AMOOR_W)
+DECLARE_INSN(amoand_w, MATCH_AMOAND_W, MASK_AMOAND_W)
+DECLARE_INSN(amomin_w, MATCH_AMOMIN_W, MASK_AMOMIN_W)
+DECLARE_INSN(amomax_w, MATCH_AMOMAX_W, MASK_AMOMAX_W)
+DECLARE_INSN(amominu_w, MATCH_AMOMINU_W, MASK_AMOMINU_W)
+DECLARE_INSN(amomaxu_w, MATCH_AMOMAXU_W, MASK_AMOMAXU_W)
+DECLARE_INSN(amoswap_w, MATCH_AMOSWAP_W, MASK_AMOSWAP_W)
+DECLARE_INSN(lr_w, MATCH_LR_W, MASK_LR_W)
+DECLARE_INSN(sc_w, MATCH_SC_W, MASK_SC_W)
+DECLARE_INSN(amoadd_d, MATCH_AMOADD_D, MASK_AMOADD_D)
+DECLARE_INSN(amoxor_d, MATCH_AMOXOR_D, MASK_AMOXOR_D)
+DECLARE_INSN(amoor_d, MATCH_AMOOR_D, MASK_AMOOR_D)
+DECLARE_INSN(amoand_d, MATCH_AMOAND_D, MASK_AMOAND_D)
+DECLARE_INSN(amomin_d, MATCH_AMOMIN_D, MASK_AMOMIN_D)
+DECLARE_INSN(amomax_d, MATCH_AMOMAX_D, MASK_AMOMAX_D)
+DECLARE_INSN(amominu_d, MATCH_AMOMINU_D, MASK_AMOMINU_D)
+DECLARE_INSN(amomaxu_d, MATCH_AMOMAXU_D, MASK_AMOMAXU_D)
+DECLARE_INSN(amoswap_d, MATCH_AMOSWAP_D, MASK_AMOSWAP_D)
+DECLARE_INSN(lr_d, MATCH_LR_D, MASK_LR_D)
+DECLARE_INSN(sc_d, MATCH_SC_D, MASK_SC_D)
+DECLARE_INSN(ecall, MATCH_ECALL, MASK_ECALL)
+DECLARE_INSN(ebreak, MATCH_EBREAK, MASK_EBREAK)
+DECLARE_INSN(uret, MATCH_URET, MASK_URET)
+DECLARE_INSN(sret, MATCH_SRET, MASK_SRET)
+DECLARE_INSN(mret, MATCH_MRET, MASK_MRET)
+DECLARE_INSN(dret, MATCH_DRET, MASK_DRET)
+DECLARE_INSN(sfence_vma, MATCH_SFENCE_VMA, MASK_SFENCE_VMA)
+DECLARE_INSN(wfi, MATCH_WFI, MASK_WFI)
+DECLARE_INSN(csrrw, MATCH_CSRRW, MASK_CSRRW)
+DECLARE_INSN(csrrs, MATCH_CSRRS, MASK_CSRRS)
+DECLARE_INSN(csrrc, MATCH_CSRRC, MASK_CSRRC)
+DECLARE_INSN(csrrwi, MATCH_CSRRWI, MASK_CSRRWI)
+DECLARE_INSN(csrrsi, MATCH_CSRRSI, MASK_CSRRSI)
+DECLARE_INSN(csrrci, MATCH_CSRRCI, MASK_CSRRCI)
+DECLARE_INSN(fadd_s, MATCH_FADD_S, MASK_FADD_S)
+DECLARE_INSN(fsub_s, MATCH_FSUB_S, MASK_FSUB_S)
+DECLARE_INSN(fmul_s, MATCH_FMUL_S, MASK_FMUL_S)
+DECLARE_INSN(fdiv_s, MATCH_FDIV_S, MASK_FDIV_S)
+DECLARE_INSN(fsgnj_s, MATCH_FSGNJ_S, MASK_FSGNJ_S)
+DECLARE_INSN(fsgnjn_s, MATCH_FSGNJN_S, MASK_FSGNJN_S)
+DECLARE_INSN(fsgnjx_s, MATCH_FSGNJX_S, MASK_FSGNJX_S)
+DECLARE_INSN(fmin_s, MATCH_FMIN_S, MASK_FMIN_S)
+DECLARE_INSN(fmax_s, MATCH_FMAX_S, MASK_FMAX_S)
+DECLARE_INSN(fsqrt_s, MATCH_FSQRT_S, MASK_FSQRT_S)
+DECLARE_INSN(fadd_d, MATCH_FADD_D, MASK_FADD_D)
+DECLARE_INSN(fsub_d, MATCH_FSUB_D, MASK_FSUB_D)
+DECLARE_INSN(fmul_d, MATCH_FMUL_D, MASK_FMUL_D)
+DECLARE_INSN(fdiv_d, MATCH_FDIV_D, MASK_FDIV_D)
+DECLARE_INSN(fsgnj_d, MATCH_FSGNJ_D, MASK_FSGNJ_D)
+DECLARE_INSN(fsgnjn_d, MATCH_FSGNJN_D, MASK_FSGNJN_D)
+DECLARE_INSN(fsgnjx_d, MATCH_FSGNJX_D, MASK_FSGNJX_D)
+DECLARE_INSN(fmin_d, MATCH_FMIN_D, MASK_FMIN_D)
+DECLARE_INSN(fmax_d, MATCH_FMAX_D, MASK_FMAX_D)
+DECLARE_INSN(fcvt_s_d, MATCH_FCVT_S_D, MASK_FCVT_S_D)
+DECLARE_INSN(fcvt_d_s, MATCH_FCVT_D_S, MASK_FCVT_D_S)
+DECLARE_INSN(fsqrt_d, MATCH_FSQRT_D, MASK_FSQRT_D)
+DECLARE_INSN(fadd_q, MATCH_FADD_Q, MASK_FADD_Q)
+DECLARE_INSN(fsub_q, MATCH_FSUB_Q, MASK_FSUB_Q)
+DECLARE_INSN(fmul_q, MATCH_FMUL_Q, MASK_FMUL_Q)
+DECLARE_INSN(fdiv_q, MATCH_FDIV_Q, MASK_FDIV_Q)
+DECLARE_INSN(fsgnj_q, MATCH_FSGNJ_Q, MASK_FSGNJ_Q)
+DECLARE_INSN(fsgnjn_q, MATCH_FSGNJN_Q, MASK_FSGNJN_Q)
+DECLARE_INSN(fsgnjx_q, MATCH_FSGNJX_Q, MASK_FSGNJX_Q)
+DECLARE_INSN(fmin_q, MATCH_FMIN_Q, MASK_FMIN_Q)
+DECLARE_INSN(fmax_q, MATCH_FMAX_Q, MASK_FMAX_Q)
+DECLARE_INSN(fcvt_s_q, MATCH_FCVT_S_Q, MASK_FCVT_S_Q)
+DECLARE_INSN(fcvt_q_s, MATCH_FCVT_Q_S, MASK_FCVT_Q_S)
+DECLARE_INSN(fcvt_d_q, MATCH_FCVT_D_Q, MASK_FCVT_D_Q)
+DECLARE_INSN(fcvt_q_d, MATCH_FCVT_Q_D, MASK_FCVT_Q_D)
+DECLARE_INSN(fsqrt_q, MATCH_FSQRT_Q, MASK_FSQRT_Q)
+DECLARE_INSN(fle_s, MATCH_FLE_S, MASK_FLE_S)
+DECLARE_INSN(flt_s, MATCH_FLT_S, MASK_FLT_S)
+DECLARE_INSN(feq_s, MATCH_FEQ_S, MASK_FEQ_S)
+DECLARE_INSN(fle_d, MATCH_FLE_D, MASK_FLE_D)
+DECLARE_INSN(flt_d, MATCH_FLT_D, MASK_FLT_D)
+DECLARE_INSN(feq_d, MATCH_FEQ_D, MASK_FEQ_D)
+DECLARE_INSN(fle_q, MATCH_FLE_Q, MASK_FLE_Q)
+DECLARE_INSN(flt_q, MATCH_FLT_Q, MASK_FLT_Q)
+DECLARE_INSN(feq_q, MATCH_FEQ_Q, MASK_FEQ_Q)
+DECLARE_INSN(fcvt_w_s, MATCH_FCVT_W_S, MASK_FCVT_W_S)
+DECLARE_INSN(fcvt_wu_s, MATCH_FCVT_WU_S, MASK_FCVT_WU_S)
+DECLARE_INSN(fcvt_l_s, MATCH_FCVT_L_S, MASK_FCVT_L_S)
+DECLARE_INSN(fcvt_lu_s, MATCH_FCVT_LU_S, MASK_FCVT_LU_S)
+DECLARE_INSN(fmv_x_w, MATCH_FMV_X_W, MASK_FMV_X_W)
+DECLARE_INSN(fclass_s, MATCH_FCLASS_S, MASK_FCLASS_S)
+DECLARE_INSN(fcvt_w_d, MATCH_FCVT_W_D, MASK_FCVT_W_D)
+DECLARE_INSN(fcvt_wu_d, MATCH_FCVT_WU_D, MASK_FCVT_WU_D)
+DECLARE_INSN(fcvt_l_d, MATCH_FCVT_L_D, MASK_FCVT_L_D)
+DECLARE_INSN(fcvt_lu_d, MATCH_FCVT_LU_D, MASK_FCVT_LU_D)
+DECLARE_INSN(fmv_x_d, MATCH_FMV_X_D, MASK_FMV_X_D)
+DECLARE_INSN(fclass_d, MATCH_FCLASS_D, MASK_FCLASS_D)
+DECLARE_INSN(fcvt_w_q, MATCH_FCVT_W_Q, MASK_FCVT_W_Q)
+DECLARE_INSN(fcvt_wu_q, MATCH_FCVT_WU_Q, MASK_FCVT_WU_Q)
+DECLARE_INSN(fcvt_l_q, MATCH_FCVT_L_Q, MASK_FCVT_L_Q)
+DECLARE_INSN(fcvt_lu_q, MATCH_FCVT_LU_Q, MASK_FCVT_LU_Q)
+DECLARE_INSN(fmv_x_q, MATCH_FMV_X_Q, MASK_FMV_X_Q)
+DECLARE_INSN(fclass_q, MATCH_FCLASS_Q, MASK_FCLASS_Q)
+DECLARE_INSN(fcvt_s_w, MATCH_FCVT_S_W, MASK_FCVT_S_W)
+DECLARE_INSN(fcvt_s_wu, MATCH_FCVT_S_WU, MASK_FCVT_S_WU)
+DECLARE_INSN(fcvt_s_l, MATCH_FCVT_S_L, MASK_FCVT_S_L)
+DECLARE_INSN(fcvt_s_lu, MATCH_FCVT_S_LU, MASK_FCVT_S_LU)
+DECLARE_INSN(fmv_w_x, MATCH_FMV_W_X, MASK_FMV_W_X)
+DECLARE_INSN(fcvt_d_w, MATCH_FCVT_D_W, MASK_FCVT_D_W)
+DECLARE_INSN(fcvt_d_wu, MATCH_FCVT_D_WU, MASK_FCVT_D_WU)
+DECLARE_INSN(fcvt_d_l, MATCH_FCVT_D_L, MASK_FCVT_D_L)
+DECLARE_INSN(fcvt_d_lu, MATCH_FCVT_D_LU, MASK_FCVT_D_LU)
+DECLARE_INSN(fmv_d_x, MATCH_FMV_D_X, MASK_FMV_D_X)
+DECLARE_INSN(fcvt_q_w, MATCH_FCVT_Q_W, MASK_FCVT_Q_W)
+DECLARE_INSN(fcvt_q_wu, MATCH_FCVT_Q_WU, MASK_FCVT_Q_WU)
+DECLARE_INSN(fcvt_q_l, MATCH_FCVT_Q_L, MASK_FCVT_Q_L)
+DECLARE_INSN(fcvt_q_lu, MATCH_FCVT_Q_LU, MASK_FCVT_Q_LU)
+DECLARE_INSN(fmv_q_x, MATCH_FMV_Q_X, MASK_FMV_Q_X)
+DECLARE_INSN(flw, MATCH_FLW, MASK_FLW)
+DECLARE_INSN(fld, MATCH_FLD, MASK_FLD)
+DECLARE_INSN(flq, MATCH_FLQ, MASK_FLQ)
+DECLARE_INSN(fsw, MATCH_FSW, MASK_FSW)
+DECLARE_INSN(fsd, MATCH_FSD, MASK_FSD)
+DECLARE_INSN(fsq, MATCH_FSQ, MASK_FSQ)
+DECLARE_INSN(fmadd_s, MATCH_FMADD_S, MASK_FMADD_S)
+DECLARE_INSN(fmsub_s, MATCH_FMSUB_S, MASK_FMSUB_S)
+DECLARE_INSN(fnmsub_s, MATCH_FNMSUB_S, MASK_FNMSUB_S)
+DECLARE_INSN(fnmadd_s, MATCH_FNMADD_S, MASK_FNMADD_S)
+DECLARE_INSN(fmadd_d, MATCH_FMADD_D, MASK_FMADD_D)
+DECLARE_INSN(fmsub_d, MATCH_FMSUB_D, MASK_FMSUB_D)
+DECLARE_INSN(fnmsub_d, MATCH_FNMSUB_D, MASK_FNMSUB_D)
+DECLARE_INSN(fnmadd_d, MATCH_FNMADD_D, MASK_FNMADD_D)
+DECLARE_INSN(fmadd_q, MATCH_FMADD_Q, MASK_FMADD_Q)
+DECLARE_INSN(fmsub_q, MATCH_FMSUB_Q, MASK_FMSUB_Q)
+DECLARE_INSN(fnmsub_q, MATCH_FNMSUB_Q, MASK_FNMSUB_Q)
+DECLARE_INSN(fnmadd_q, MATCH_FNMADD_Q, MASK_FNMADD_Q)
+DECLARE_INSN(c_nop, MATCH_C_NOP, MASK_C_NOP)
+DECLARE_INSN(c_addi16sp, MATCH_C_ADDI16SP, MASK_C_ADDI16SP)
+DECLARE_INSN(c_jr, MATCH_C_JR, MASK_C_JR)
+DECLARE_INSN(c_jalr, MATCH_C_JALR, MASK_C_JALR)
+DECLARE_INSN(c_ebreak, MATCH_C_EBREAK, MASK_C_EBREAK)
+DECLARE_INSN(c_ld, MATCH_C_LD, MASK_C_LD)
+DECLARE_INSN(c_sd, MATCH_C_SD, MASK_C_SD)
+DECLARE_INSN(c_addiw, MATCH_C_ADDIW, MASK_C_ADDIW)
+DECLARE_INSN(c_ldsp, MATCH_C_LDSP, MASK_C_LDSP)
+DECLARE_INSN(c_sdsp, MATCH_C_SDSP, MASK_C_SDSP)
+DECLARE_INSN(c_addi4spn, MATCH_C_ADDI4SPN, MASK_C_ADDI4SPN)
+DECLARE_INSN(c_fld, MATCH_C_FLD, MASK_C_FLD)
+DECLARE_INSN(c_lw, MATCH_C_LW, MASK_C_LW)
+DECLARE_INSN(c_flw, MATCH_C_FLW, MASK_C_FLW)
+DECLARE_INSN(c_fsd, MATCH_C_FSD, MASK_C_FSD)
+DECLARE_INSN(c_sw, MATCH_C_SW, MASK_C_SW)
+DECLARE_INSN(c_fsw, MATCH_C_FSW, MASK_C_FSW)
+DECLARE_INSN(c_addi, MATCH_C_ADDI, MASK_C_ADDI)
+DECLARE_INSN(c_jal, MATCH_C_JAL, MASK_C_JAL)
+DECLARE_INSN(c_li, MATCH_C_LI, MASK_C_LI)
+DECLARE_INSN(c_lui, MATCH_C_LUI, MASK_C_LUI)
+DECLARE_INSN(c_srli, MATCH_C_SRLI, MASK_C_SRLI)
+DECLARE_INSN(c_srai, MATCH_C_SRAI, MASK_C_SRAI)
+DECLARE_INSN(c_andi, MATCH_C_ANDI, MASK_C_ANDI)
+DECLARE_INSN(c_sub, MATCH_C_SUB, MASK_C_SUB)
+DECLARE_INSN(c_xor, MATCH_C_XOR, MASK_C_XOR)
+DECLARE_INSN(c_or, MATCH_C_OR, MASK_C_OR)
+DECLARE_INSN(c_and, MATCH_C_AND, MASK_C_AND)
+DECLARE_INSN(c_subw, MATCH_C_SUBW, MASK_C_SUBW)
+DECLARE_INSN(c_addw, MATCH_C_ADDW, MASK_C_ADDW)
+DECLARE_INSN(c_j, MATCH_C_J, MASK_C_J)
+DECLARE_INSN(c_beqz, MATCH_C_BEQZ, MASK_C_BEQZ)
+DECLARE_INSN(c_bnez, MATCH_C_BNEZ, MASK_C_BNEZ)
+DECLARE_INSN(c_slli, MATCH_C_SLLI, MASK_C_SLLI)
+DECLARE_INSN(c_fldsp, MATCH_C_FLDSP, MASK_C_FLDSP)
+DECLARE_INSN(c_lwsp, MATCH_C_LWSP, MASK_C_LWSP)
+DECLARE_INSN(c_flwsp, MATCH_C_FLWSP, MASK_C_FLWSP)
+DECLARE_INSN(c_mv, MATCH_C_MV, MASK_C_MV)
+DECLARE_INSN(c_add, MATCH_C_ADD, MASK_C_ADD)
+DECLARE_INSN(c_fsdsp, MATCH_C_FSDSP, MASK_C_FSDSP)
+DECLARE_INSN(c_swsp, MATCH_C_SWSP, MASK_C_SWSP)
+DECLARE_INSN(c_fswsp, MATCH_C_FSWSP, MASK_C_FSWSP)
+DECLARE_INSN(custom0, MATCH_CUSTOM0, MASK_CUSTOM0)
+DECLARE_INSN(custom0_rs1, MATCH_CUSTOM0_RS1, MASK_CUSTOM0_RS1)
+DECLARE_INSN(custom0_rs1_rs2, MATCH_CUSTOM0_RS1_RS2, MASK_CUSTOM0_RS1_RS2)
+DECLARE_INSN(custom0_rd, MATCH_CUSTOM0_RD, MASK_CUSTOM0_RD)
+DECLARE_INSN(custom0_rd_rs1, MATCH_CUSTOM0_RD_RS1, MASK_CUSTOM0_RD_RS1)
+DECLARE_INSN(custom0_rd_rs1_rs2, MATCH_CUSTOM0_RD_RS1_RS2, MASK_CUSTOM0_RD_RS1_RS2)
+DECLARE_INSN(custom1, MATCH_CUSTOM1, MASK_CUSTOM1)
+DECLARE_INSN(custom1_rs1, MATCH_CUSTOM1_RS1, MASK_CUSTOM1_RS1)
+DECLARE_INSN(custom1_rs1_rs2, MATCH_CUSTOM1_RS1_RS2, MASK_CUSTOM1_RS1_RS2)
+DECLARE_INSN(custom1_rd, MATCH_CUSTOM1_RD, MASK_CUSTOM1_RD)
+DECLARE_INSN(custom1_rd_rs1, MATCH_CUSTOM1_RD_RS1, MASK_CUSTOM1_RD_RS1)
+DECLARE_INSN(custom1_rd_rs1_rs2, MATCH_CUSTOM1_RD_RS1_RS2, MASK_CUSTOM1_RD_RS1_RS2)
+DECLARE_INSN(custom2, MATCH_CUSTOM2, MASK_CUSTOM2)
+DECLARE_INSN(custom2_rs1, MATCH_CUSTOM2_RS1, MASK_CUSTOM2_RS1)
+DECLARE_INSN(custom2_rs1_rs2, MATCH_CUSTOM2_RS1_RS2, MASK_CUSTOM2_RS1_RS2)
+DECLARE_INSN(custom2_rd, MATCH_CUSTOM2_RD, MASK_CUSTOM2_RD)
+DECLARE_INSN(custom2_rd_rs1, MATCH_CUSTOM2_RD_RS1, MASK_CUSTOM2_RD_RS1)
+DECLARE_INSN(custom2_rd_rs1_rs2, MATCH_CUSTOM2_RD_RS1_RS2, MASK_CUSTOM2_RD_RS1_RS2)
+DECLARE_INSN(custom3, MATCH_CUSTOM3, MASK_CUSTOM3)
+DECLARE_INSN(custom3_rs1, MATCH_CUSTOM3_RS1, MASK_CUSTOM3_RS1)
+DECLARE_INSN(custom3_rs1_rs2, MATCH_CUSTOM3_RS1_RS2, MASK_CUSTOM3_RS1_RS2)
+DECLARE_INSN(custom3_rd, MATCH_CUSTOM3_RD, MASK_CUSTOM3_RD)
+DECLARE_INSN(custom3_rd_rs1, MATCH_CUSTOM3_RD_RS1, MASK_CUSTOM3_RD_RS1)
+DECLARE_INSN(custom3_rd_rs1_rs2, MATCH_CUSTOM3_RD_RS1_RS2, MASK_CUSTOM3_RD_RS1_RS2)
+#endif
+#ifdef DECLARE_CSR
+DECLARE_CSR(fflags, CSR_FFLAGS)
+DECLARE_CSR(frm, CSR_FRM)
+DECLARE_CSR(fcsr, CSR_FCSR)
+DECLARE_CSR(cycle, CSR_CYCLE)
+DECLARE_CSR(time, CSR_TIME)
+DECLARE_CSR(instret, CSR_INSTRET)
+DECLARE_CSR(hpmcounter3, CSR_HPMCOUNTER3)
+DECLARE_CSR(hpmcounter4, CSR_HPMCOUNTER4)
+DECLARE_CSR(hpmcounter5, CSR_HPMCOUNTER5)
+DECLARE_CSR(hpmcounter6, CSR_HPMCOUNTER6)
+DECLARE_CSR(hpmcounter7, CSR_HPMCOUNTER7)
+DECLARE_CSR(hpmcounter8, CSR_HPMCOUNTER8)
+DECLARE_CSR(hpmcounter9, CSR_HPMCOUNTER9)
+DECLARE_CSR(hpmcounter10, CSR_HPMCOUNTER10)
+DECLARE_CSR(hpmcounter11, CSR_HPMCOUNTER11)
+DECLARE_CSR(hpmcounter12, CSR_HPMCOUNTER12)
+DECLARE_CSR(hpmcounter13, CSR_HPMCOUNTER13)
+DECLARE_CSR(hpmcounter14, CSR_HPMCOUNTER14)
+DECLARE_CSR(hpmcounter15, CSR_HPMCOUNTER15)
+DECLARE_CSR(hpmcounter16, CSR_HPMCOUNTER16)
+DECLARE_CSR(hpmcounter17, CSR_HPMCOUNTER17)
+DECLARE_CSR(hpmcounter18, CSR_HPMCOUNTER18)
+DECLARE_CSR(hpmcounter19, CSR_HPMCOUNTER19)
+DECLARE_CSR(hpmcounter20, CSR_HPMCOUNTER20)
+DECLARE_CSR(hpmcounter21, CSR_HPMCOUNTER21)
+DECLARE_CSR(hpmcounter22, CSR_HPMCOUNTER22)
+DECLARE_CSR(hpmcounter23, CSR_HPMCOUNTER23)
+DECLARE_CSR(hpmcounter24, CSR_HPMCOUNTER24)
+DECLARE_CSR(hpmcounter25, CSR_HPMCOUNTER25)
+DECLARE_CSR(hpmcounter26, CSR_HPMCOUNTER26)
+DECLARE_CSR(hpmcounter27, CSR_HPMCOUNTER27)
+DECLARE_CSR(hpmcounter28, CSR_HPMCOUNTER28)
+DECLARE_CSR(hpmcounter29, CSR_HPMCOUNTER29)
+DECLARE_CSR(hpmcounter30, CSR_HPMCOUNTER30)
+DECLARE_CSR(hpmcounter31, CSR_HPMCOUNTER31)
+DECLARE_CSR(sstatus, CSR_SSTATUS)
+DECLARE_CSR(sie, CSR_SIE)
+DECLARE_CSR(stvec, CSR_STVEC)
+DECLARE_CSR(scounteren, CSR_SCOUNTEREN)
+DECLARE_CSR(sscratch, CSR_SSCRATCH)
+DECLARE_CSR(sepc, CSR_SEPC)
+DECLARE_CSR(scause, CSR_SCAUSE)
+DECLARE_CSR(stval, CSR_STVAL)
+DECLARE_CSR(sip, CSR_SIP)
+DECLARE_CSR(satp, CSR_SATP)
+DECLARE_CSR(mstatus, CSR_MSTATUS)
+DECLARE_CSR(misa, CSR_MISA)
+DECLARE_CSR(medeleg, CSR_MEDELEG)
+DECLARE_CSR(mideleg, CSR_MIDELEG)
+DECLARE_CSR(mie, CSR_MIE)
+DECLARE_CSR(mtvec, CSR_MTVEC)
+DECLARE_CSR(mcounteren, CSR_MCOUNTEREN)
+DECLARE_CSR(mscratch, CSR_MSCRATCH)
+DECLARE_CSR(mepc, CSR_MEPC)
+DECLARE_CSR(mcause, CSR_MCAUSE)
+DECLARE_CSR(mtval, CSR_MTVAL)
+DECLARE_CSR(mip, CSR_MIP)
+DECLARE_CSR(pmpcfg0, CSR_PMPCFG0)
+DECLARE_CSR(pmpcfg1, CSR_PMPCFG1)
+DECLARE_CSR(pmpcfg2, CSR_PMPCFG2)
+DECLARE_CSR(pmpcfg3, CSR_PMPCFG3)
+DECLARE_CSR(pmpaddr0, CSR_PMPADDR0)
+DECLARE_CSR(pmpaddr1, CSR_PMPADDR1)
+DECLARE_CSR(pmpaddr2, CSR_PMPADDR2)
+DECLARE_CSR(pmpaddr3, CSR_PMPADDR3)
+DECLARE_CSR(pmpaddr4, CSR_PMPADDR4)
+DECLARE_CSR(pmpaddr5, CSR_PMPADDR5)
+DECLARE_CSR(pmpaddr6, CSR_PMPADDR6)
+DECLARE_CSR(pmpaddr7, CSR_PMPADDR7)
+DECLARE_CSR(pmpaddr8, CSR_PMPADDR8)
+DECLARE_CSR(pmpaddr9, CSR_PMPADDR9)
+DECLARE_CSR(pmpaddr10, CSR_PMPADDR10)
+DECLARE_CSR(pmpaddr11, CSR_PMPADDR11)
+DECLARE_CSR(pmpaddr12, CSR_PMPADDR12)
+DECLARE_CSR(pmpaddr13, CSR_PMPADDR13)
+DECLARE_CSR(pmpaddr14, CSR_PMPADDR14)
+DECLARE_CSR(pmpaddr15, CSR_PMPADDR15)
+DECLARE_CSR(tselect, CSR_TSELECT)
+DECLARE_CSR(tdata1, CSR_TDATA1)
+DECLARE_CSR(tdata2, CSR_TDATA2)
+DECLARE_CSR(tdata3, CSR_TDATA3)
+DECLARE_CSR(dcsr, CSR_DCSR)
+DECLARE_CSR(dpc, CSR_DPC)
+DECLARE_CSR(dscratch, CSR_DSCRATCH)
+DECLARE_CSR(mcycle, CSR_MCYCLE)
+DECLARE_CSR(minstret, CSR_MINSTRET)
+DECLARE_CSR(mhpmcounter3, CSR_MHPMCOUNTER3)
+DECLARE_CSR(mhpmcounter4, CSR_MHPMCOUNTER4)
+DECLARE_CSR(mhpmcounter5, CSR_MHPMCOUNTER5)
+DECLARE_CSR(mhpmcounter6, CSR_MHPMCOUNTER6)
+DECLARE_CSR(mhpmcounter7, CSR_MHPMCOUNTER7)
+DECLARE_CSR(mhpmcounter8, CSR_MHPMCOUNTER8)
+DECLARE_CSR(mhpmcounter9, CSR_MHPMCOUNTER9)
+DECLARE_CSR(mhpmcounter10, CSR_MHPMCOUNTER10)
+DECLARE_CSR(mhpmcounter11, CSR_MHPMCOUNTER11)
+DECLARE_CSR(mhpmcounter12, CSR_MHPMCOUNTER12)
+DECLARE_CSR(mhpmcounter13, CSR_MHPMCOUNTER13)
+DECLARE_CSR(mhpmcounter14, CSR_MHPMCOUNTER14)
+DECLARE_CSR(mhpmcounter15, CSR_MHPMCOUNTER15)
+DECLARE_CSR(mhpmcounter16, CSR_MHPMCOUNTER16)
+DECLARE_CSR(mhpmcounter17, CSR_MHPMCOUNTER17)
+DECLARE_CSR(mhpmcounter18, CSR_MHPMCOUNTER18)
+DECLARE_CSR(mhpmcounter19, CSR_MHPMCOUNTER19)
+DECLARE_CSR(mhpmcounter20, CSR_MHPMCOUNTER20)
+DECLARE_CSR(mhpmcounter21, CSR_MHPMCOUNTER21)
+DECLARE_CSR(mhpmcounter22, CSR_MHPMCOUNTER22)
+DECLARE_CSR(mhpmcounter23, CSR_MHPMCOUNTER23)
+DECLARE_CSR(mhpmcounter24, CSR_MHPMCOUNTER24)
+DECLARE_CSR(mhpmcounter25, CSR_MHPMCOUNTER25)
+DECLARE_CSR(mhpmcounter26, CSR_MHPMCOUNTER26)
+DECLARE_CSR(mhpmcounter27, CSR_MHPMCOUNTER27)
+DECLARE_CSR(mhpmcounter28, CSR_MHPMCOUNTER28)
+DECLARE_CSR(mhpmcounter29, CSR_MHPMCOUNTER29)
+DECLARE_CSR(mhpmcounter30, CSR_MHPMCOUNTER30)
+DECLARE_CSR(mhpmcounter31, CSR_MHPMCOUNTER31)
+DECLARE_CSR(mhpmevent3, CSR_MHPMEVENT3)
+DECLARE_CSR(mhpmevent4, CSR_MHPMEVENT4)
+DECLARE_CSR(mhpmevent5, CSR_MHPMEVENT5)
+DECLARE_CSR(mhpmevent6, CSR_MHPMEVENT6)
+DECLARE_CSR(mhpmevent7, CSR_MHPMEVENT7)
+DECLARE_CSR(mhpmevent8, CSR_MHPMEVENT8)
+DECLARE_CSR(mhpmevent9, CSR_MHPMEVENT9)
+DECLARE_CSR(mhpmevent10, CSR_MHPMEVENT10)
+DECLARE_CSR(mhpmevent11, CSR_MHPMEVENT11)
+DECLARE_CSR(mhpmevent12, CSR_MHPMEVENT12)
+DECLARE_CSR(mhpmevent13, CSR_MHPMEVENT13)
+DECLARE_CSR(mhpmevent14, CSR_MHPMEVENT14)
+DECLARE_CSR(mhpmevent15, CSR_MHPMEVENT15)
+DECLARE_CSR(mhpmevent16, CSR_MHPMEVENT16)
+DECLARE_CSR(mhpmevent17, CSR_MHPMEVENT17)
+DECLARE_CSR(mhpmevent18, CSR_MHPMEVENT18)
+DECLARE_CSR(mhpmevent19, CSR_MHPMEVENT19)
+DECLARE_CSR(mhpmevent20, CSR_MHPMEVENT20)
+DECLARE_CSR(mhpmevent21, CSR_MHPMEVENT21)
+DECLARE_CSR(mhpmevent22, CSR_MHPMEVENT22)
+DECLARE_CSR(mhpmevent23, CSR_MHPMEVENT23)
+DECLARE_CSR(mhpmevent24, CSR_MHPMEVENT24)
+DECLARE_CSR(mhpmevent25, CSR_MHPMEVENT25)
+DECLARE_CSR(mhpmevent26, CSR_MHPMEVENT26)
+DECLARE_CSR(mhpmevent27, CSR_MHPMEVENT27)
+DECLARE_CSR(mhpmevent28, CSR_MHPMEVENT28)
+DECLARE_CSR(mhpmevent29, CSR_MHPMEVENT29)
+DECLARE_CSR(mhpmevent30, CSR_MHPMEVENT30)
+DECLARE_CSR(mhpmevent31, CSR_MHPMEVENT31)
+DECLARE_CSR(mvendorid, CSR_MVENDORID)
+DECLARE_CSR(marchid, CSR_MARCHID)
+DECLARE_CSR(mimpid, CSR_MIMPID)
+DECLARE_CSR(mhartid, CSR_MHARTID)
+DECLARE_CSR(cycleh, CSR_CYCLEH)
+DECLARE_CSR(timeh, CSR_TIMEH)
+DECLARE_CSR(instreth, CSR_INSTRETH)
+DECLARE_CSR(hpmcounter3h, CSR_HPMCOUNTER3H)
+DECLARE_CSR(hpmcounter4h, CSR_HPMCOUNTER4H)
+DECLARE_CSR(hpmcounter5h, CSR_HPMCOUNTER5H)
+DECLARE_CSR(hpmcounter6h, CSR_HPMCOUNTER6H)
+DECLARE_CSR(hpmcounter7h, CSR_HPMCOUNTER7H)
+DECLARE_CSR(hpmcounter8h, CSR_HPMCOUNTER8H)
+DECLARE_CSR(hpmcounter9h, CSR_HPMCOUNTER9H)
+DECLARE_CSR(hpmcounter10h, CSR_HPMCOUNTER10H)
+DECLARE_CSR(hpmcounter11h, CSR_HPMCOUNTER11H)
+DECLARE_CSR(hpmcounter12h, CSR_HPMCOUNTER12H)
+DECLARE_CSR(hpmcounter13h, CSR_HPMCOUNTER13H)
+DECLARE_CSR(hpmcounter14h, CSR_HPMCOUNTER14H)
+DECLARE_CSR(hpmcounter15h, CSR_HPMCOUNTER15H)
+DECLARE_CSR(hpmcounter16h, CSR_HPMCOUNTER16H)
+DECLARE_CSR(hpmcounter17h, CSR_HPMCOUNTER17H)
+DECLARE_CSR(hpmcounter18h, CSR_HPMCOUNTER18H)
+DECLARE_CSR(hpmcounter19h, CSR_HPMCOUNTER19H)
+DECLARE_CSR(hpmcounter20h, CSR_HPMCOUNTER20H)
+DECLARE_CSR(hpmcounter21h, CSR_HPMCOUNTER21H)
+DECLARE_CSR(hpmcounter22h, CSR_HPMCOUNTER22H)
+DECLARE_CSR(hpmcounter23h, CSR_HPMCOUNTER23H)
+DECLARE_CSR(hpmcounter24h, CSR_HPMCOUNTER24H)
+DECLARE_CSR(hpmcounter25h, CSR_HPMCOUNTER25H)
+DECLARE_CSR(hpmcounter26h, CSR_HPMCOUNTER26H)
+DECLARE_CSR(hpmcounter27h, CSR_HPMCOUNTER27H)
+DECLARE_CSR(hpmcounter28h, CSR_HPMCOUNTER28H)
+DECLARE_CSR(hpmcounter29h, CSR_HPMCOUNTER29H)
+DECLARE_CSR(hpmcounter30h, CSR_HPMCOUNTER30H)
+DECLARE_CSR(hpmcounter31h, CSR_HPMCOUNTER31H)
+DECLARE_CSR(mcycleh, CSR_MCYCLEH)
+DECLARE_CSR(minstreth, CSR_MINSTRETH)
+DECLARE_CSR(mhpmcounter3h, CSR_MHPMCOUNTER3H)
+DECLARE_CSR(mhpmcounter4h, CSR_MHPMCOUNTER4H)
+DECLARE_CSR(mhpmcounter5h, CSR_MHPMCOUNTER5H)
+DECLARE_CSR(mhpmcounter6h, CSR_MHPMCOUNTER6H)
+DECLARE_CSR(mhpmcounter7h, CSR_MHPMCOUNTER7H)
+DECLARE_CSR(mhpmcounter8h, CSR_MHPMCOUNTER8H)
+DECLARE_CSR(mhpmcounter9h, CSR_MHPMCOUNTER9H)
+DECLARE_CSR(mhpmcounter10h, CSR_MHPMCOUNTER10H)
+DECLARE_CSR(mhpmcounter11h, CSR_MHPMCOUNTER11H)
+DECLARE_CSR(mhpmcounter12h, CSR_MHPMCOUNTER12H)
+DECLARE_CSR(mhpmcounter13h, CSR_MHPMCOUNTER13H)
+DECLARE_CSR(mhpmcounter14h, CSR_MHPMCOUNTER14H)
+DECLARE_CSR(mhpmcounter15h, CSR_MHPMCOUNTER15H)
+DECLARE_CSR(mhpmcounter16h, CSR_MHPMCOUNTER16H)
+DECLARE_CSR(mhpmcounter17h, CSR_MHPMCOUNTER17H)
+DECLARE_CSR(mhpmcounter18h, CSR_MHPMCOUNTER18H)
+DECLARE_CSR(mhpmcounter19h, CSR_MHPMCOUNTER19H)
+DECLARE_CSR(mhpmcounter20h, CSR_MHPMCOUNTER20H)
+DECLARE_CSR(mhpmcounter21h, CSR_MHPMCOUNTER21H)
+DECLARE_CSR(mhpmcounter22h, CSR_MHPMCOUNTER22H)
+DECLARE_CSR(mhpmcounter23h, CSR_MHPMCOUNTER23H)
+DECLARE_CSR(mhpmcounter24h, CSR_MHPMCOUNTER24H)
+DECLARE_CSR(mhpmcounter25h, CSR_MHPMCOUNTER25H)
+DECLARE_CSR(mhpmcounter26h, CSR_MHPMCOUNTER26H)
+DECLARE_CSR(mhpmcounter27h, CSR_MHPMCOUNTER27H)
+DECLARE_CSR(mhpmcounter28h, CSR_MHPMCOUNTER28H)
+DECLARE_CSR(mhpmcounter29h, CSR_MHPMCOUNTER29H)
+DECLARE_CSR(mhpmcounter30h, CSR_MHPMCOUNTER30H)
+DECLARE_CSR(mhpmcounter31h, CSR_MHPMCOUNTER31H)
+#endif
+#ifdef DECLARE_CAUSE
+DECLARE_CAUSE("misaligned fetch", CAUSE_MISALIGNED_FETCH)
+DECLARE_CAUSE("fetch access", CAUSE_FETCH_ACCESS)
+DECLARE_CAUSE("illegal instruction", CAUSE_ILLEGAL_INSTRUCTION)
+DECLARE_CAUSE("breakpoint", CAUSE_BREAKPOINT)
+DECLARE_CAUSE("misaligned load", CAUSE_MISALIGNED_LOAD)
+DECLARE_CAUSE("load access", CAUSE_LOAD_ACCESS)
+DECLARE_CAUSE("misaligned store", CAUSE_MISALIGNED_STORE)
+DECLARE_CAUSE("store access", CAUSE_STORE_ACCESS)
+DECLARE_CAUSE("user_ecall", CAUSE_USER_ECALL)
+DECLARE_CAUSE("supervisor_ecall", CAUSE_SUPERVISOR_ECALL)
+DECLARE_CAUSE("hypervisor_ecall", CAUSE_HYPERVISOR_ECALL)
+DECLARE_CAUSE("machine_ecall", CAUSE_MACHINE_ECALL)
+DECLARE_CAUSE("fetch page fault", CAUSE_FETCH_PAGE_FAULT)
+DECLARE_CAUSE("load page fault", CAUSE_LOAD_PAGE_FAULT)
+DECLARE_CAUSE("store page fault", CAUSE_STORE_PAGE_FAULT)
+#endif
diff --git a/VexRiscv/src/test/cpp/raw/deleg/src/ld b/VexRiscv/src/test/cpp/raw/deleg/src/ld
new file mode 100644
index 0000000..93d8de8
--- /dev/null
+++ b/VexRiscv/src/test/cpp/raw/deleg/src/ld
@@ -0,0 +1,16 @@
+OUTPUT_ARCH( "riscv" )
+
+MEMORY {
+ onChipRam (W!RX)/*(RX)*/ : ORIGIN = 0x80000000, LENGTH = 128K
+}
+
+SECTIONS
+{
+
+ .crt_section :
+ {
+ . = ALIGN(4);
+ *crt.o(.text)
+ } > onChipRam
+
+}
diff --git a/VexRiscv/src/test/cpp/raw/fpu/.gitignore b/VexRiscv/src/test/cpp/raw/fpu/.gitignore
new file mode 100644
index 0000000..c12cb2c
--- /dev/null
+++ b/VexRiscv/src/test/cpp/raw/fpu/.gitignore
@@ -0,0 +1,4 @@
+*.map
+*.v
+*.elf
+*.o \ No newline at end of file
diff --git a/VexRiscv/src/test/cpp/raw/fpu/build/amo.asm b/VexRiscv/src/test/cpp/raw/fpu/build/amo.asm
new file mode 100644
index 0000000..d86b61c
--- /dev/null
+++ b/VexRiscv/src/test/cpp/raw/fpu/build/amo.asm
@@ -0,0 +1,247 @@
+
+build/amo.elf: file format elf32-littleriscv
+
+
+Disassembly of section .crt_section:
+
+80000000 <_start>:
+80000000: 00100e13 li t3,1
+80000004: 00000097 auipc ra,0x0
+80000008: 27408093 addi ra,ra,628 # 80000278 <test1_data>
+8000000c: 02d00113 li sp,45
+80000010: 0820a1af amoswap.w gp,sp,(ra)
+80000014: 0000a203 lw tp,0(ra)
+80000018: 02d00a13 li s4,45
+8000001c: 224a1663 bne s4,tp,80000248 <fail>
+80000020: 00b00a13 li s4,11
+80000024: 223a1263 bne s4,gp,80000248 <fail>
+
+80000028 <test2>:
+80000028: 00200e13 li t3,2
+8000002c: 00000097 auipc ra,0x0
+80000030: 25008093 addi ra,ra,592 # 8000027c <test2_data>
+80000034: 03700113 li sp,55
+80000038: 0820a1af amoswap.w gp,sp,(ra)
+8000003c: 0000a203 lw tp,0(ra)
+80000040: 03700a13 li s4,55
+80000044: 204a1263 bne s4,tp,80000248 <fail>
+80000048: 01600a13 li s4,22
+8000004c: 1e3a1e63 bne s4,gp,80000248 <fail>
+
+80000050 <test3>:
+80000050: 00300e13 li t3,3
+80000054: 00000097 auipc ra,0x0
+80000058: 22c08093 addi ra,ra,556 # 80000280 <test3_data>
+8000005c: 04200113 li sp,66
+80000060: 0020a1af amoadd.w gp,sp,(ra)
+80000064: 0000a203 lw tp,0(ra)
+80000068: 08b00a13 li s4,139
+8000006c: 1c4a1e63 bne s4,tp,80000248 <fail>
+80000070: 04900a13 li s4,73
+80000074: 1c3a1a63 bne s4,gp,80000248 <fail>
+
+80000078 <test4>:
+80000078: 00400e13 li t3,4
+8000007c: 00000097 auipc ra,0x0
+80000080: 20808093 addi ra,ra,520 # 80000284 <test4_data>
+80000084: 05700113 li sp,87
+80000088: 2020a1af amoxor.w gp,sp,(ra)
+8000008c: 0000a203 lw tp,0(ra)
+80000090: 06d00a13 li s4,109
+80000094: 1a4a1a63 bne s4,tp,80000248 <fail>
+80000098: 03a00a13 li s4,58
+8000009c: 1a3a1663 bne s4,gp,80000248 <fail>
+
+800000a0 <test5>:
+800000a0: 00500e13 li t3,5
+800000a4: 00000097 auipc ra,0x0
+800000a8: 1e408093 addi ra,ra,484 # 80000288 <test5_data>
+800000ac: 02c00113 li sp,44
+800000b0: 6020a1af amoand.w gp,sp,(ra)
+800000b4: 0000a203 lw tp,0(ra)
+800000b8: 02800a13 li s4,40
+800000bc: 184a1663 bne s4,tp,80000248 <fail>
+800000c0: 03800a13 li s4,56
+800000c4: 183a1263 bne s4,gp,80000248 <fail>
+
+800000c8 <test6>:
+800000c8: 00600e13 li t3,6
+800000cc: 00000097 auipc ra,0x0
+800000d0: 1c008093 addi ra,ra,448 # 8000028c <test6_data>
+800000d4: 01800113 li sp,24
+800000d8: 4020a1af amoor.w gp,sp,(ra)
+800000dc: 0000a203 lw tp,0(ra)
+800000e0: 05b00a13 li s4,91
+800000e4: 164a1263 bne s4,tp,80000248 <fail>
+800000e8: 04b00a13 li s4,75
+800000ec: 143a1e63 bne s4,gp,80000248 <fail>
+
+800000f0 <test7>:
+800000f0: 00700e13 li t3,7
+800000f4: 00000097 auipc ra,0x0
+800000f8: 19c08093 addi ra,ra,412 # 80000290 <test7_data>
+800000fc: 01800113 li sp,24
+80000100: 8020a1af amomin.w gp,sp,(ra)
+80000104: 0000a203 lw tp,0(ra)
+80000108: 01800a13 li s4,24
+8000010c: 124a1e63 bne s4,tp,80000248 <fail>
+80000110: 03800a13 li s4,56
+80000114: 123a1a63 bne s4,gp,80000248 <fail>
+
+80000118 <test8>:
+80000118: 00800e13 li t3,8
+8000011c: 00000097 auipc ra,0x0
+80000120: 17808093 addi ra,ra,376 # 80000294 <test8_data>
+80000124: 05800113 li sp,88
+80000128: 8020a1af amomin.w gp,sp,(ra)
+8000012c: 0000a203 lw tp,0(ra)
+80000130: 05300a13 li s4,83
+80000134: 104a1a63 bne s4,tp,80000248 <fail>
+80000138: 05300a13 li s4,83
+8000013c: 103a1663 bne s4,gp,80000248 <fail>
+
+80000140 <test9>:
+80000140: 00900e13 li t3,9
+80000144: 00000097 auipc ra,0x0
+80000148: 15408093 addi ra,ra,340 # 80000298 <test9_data>
+8000014c: fca00113 li sp,-54
+80000150: 8020a1af amomin.w gp,sp,(ra)
+80000154: 0000a203 lw tp,0(ra)
+80000158: fca00a13 li s4,-54
+8000015c: 0e4a1663 bne s4,tp,80000248 <fail>
+80000160: 02100a13 li s4,33
+80000164: 0e3a1263 bne s4,gp,80000248 <fail>
+
+80000168 <test10>:
+80000168: 00a00e13 li t3,10
+8000016c: 00000097 auipc ra,0x0
+80000170: 13008093 addi ra,ra,304 # 8000029c <test10_data>
+80000174: 03400113 li sp,52
+80000178: 8020a1af amomin.w gp,sp,(ra)
+8000017c: 0000a203 lw tp,0(ra)
+80000180: fbf00a13 li s4,-65
+80000184: 0c4a1263 bne s4,tp,80000248 <fail>
+80000188: fbf00a13 li s4,-65
+8000018c: 0a3a1e63 bne s4,gp,80000248 <fail>
+
+80000190 <test11>:
+80000190: 00b00e13 li t3,11
+80000194: 00000097 auipc ra,0x0
+80000198: 10c08093 addi ra,ra,268 # 800002a0 <test11_data>
+8000019c: fcc00113 li sp,-52
+800001a0: a020a1af amomax.w gp,sp,(ra)
+800001a4: 0000a203 lw tp,0(ra)
+800001a8: fcc00a13 li s4,-52
+800001ac: 084a1e63 bne s4,tp,80000248 <fail>
+800001b0: fa900a13 li s4,-87
+800001b4: 083a1a63 bne s4,gp,80000248 <fail>
+
+800001b8 <test12>:
+800001b8: 00c00e13 li t3,12
+800001bc: 00000097 auipc ra,0x0
+800001c0: 0e808093 addi ra,ra,232 # 800002a4 <test12_data>
+800001c4: 03400113 li sp,52
+800001c8: a020a1af amomax.w gp,sp,(ra)
+800001cc: 0000a203 lw tp,0(ra)
+800001d0: 03400a13 li s4,52
+800001d4: 064a1a63 bne s4,tp,80000248 <fail>
+800001d8: fc900a13 li s4,-55
+800001dc: 063a1663 bne s4,gp,80000248 <fail>
+
+800001e0 <test13>:
+800001e0: 00d00e13 li t3,13
+800001e4: 00000097 auipc ra,0x0
+800001e8: 0c408093 addi ra,ra,196 # 800002a8 <test13_data>
+800001ec: ffff0137 lui sp,0xffff0
+800001f0: c020a1af amominu.w gp,sp,(ra)
+800001f4: 0000a203 lw tp,0(ra)
+800001f8: ffff0a37 lui s4,0xffff0
+800001fc: 044a1663 bne s4,tp,80000248 <fail>
+80000200: ffff0a37 lui s4,0xffff0
+80000204: 004a0a13 addi s4,s4,4 # ffff0004 <test14_data+0x7ffefd58>
+80000208: 043a1063 bne s4,gp,80000248 <fail>
+8000020c: 0480006f j 80000254 <pass>
+
+80000210 <test14>:
+80000210: 00e00e13 li t3,14
+80000214: 00000097 auipc ra,0x0
+80000218: 09808093 addi ra,ra,152 # 800002ac <test14_data>
+8000021c: ffff0137 lui sp,0xffff0
+80000220: 00c10113 addi sp,sp,12 # ffff000c <test14_data+0x7ffefd60>
+80000224: e020a1af amomaxu.w gp,sp,(ra)
+80000228: 0000a203 lw tp,0(ra)
+8000022c: ffff0a37 lui s4,0xffff0
+80000230: 00ca0a13 addi s4,s4,12 # ffff000c <test14_data+0x7ffefd60>
+80000234: 004a1a63 bne s4,tp,80000248 <fail>
+80000238: ffff0a37 lui s4,0xffff0
+8000023c: 005a0a13 addi s4,s4,5 # ffff0005 <test14_data+0x7ffefd59>
+80000240: 003a1463 bne s4,gp,80000248 <fail>
+80000244: 0100006f j 80000254 <pass>
+
+80000248 <fail>:
+80000248: f0100137 lui sp,0xf0100
+8000024c: f2410113 addi sp,sp,-220 # f00fff24 <test14_data+0x700ffc78>
+80000250: 01c12023 sw t3,0(sp)
+
+80000254 <pass>:
+80000254: f0100137 lui sp,0xf0100
+80000258: f2010113 addi sp,sp,-224 # f00fff20 <test14_data+0x700ffc74>
+8000025c: 00012023 sw zero,0(sp)
+80000260: 00000013 nop
+80000264: 00000013 nop
+80000268: 00000013 nop
+8000026c: 00000013 nop
+80000270: 00000013 nop
+80000274: 00000013 nop
+
+80000278 <test1_data>:
+80000278: 0000000b 0xb
+
+8000027c <test2_data>:
+8000027c: 0016 c.slli zero,0x5
+ ...
+
+80000280 <test3_data>:
+80000280: 0049 c.nop 18
+ ...
+
+80000284 <test4_data>:
+80000284: 003a c.slli zero,0xe
+ ...
+
+80000288 <test5_data>:
+80000288: 0038 addi a4,sp,8
+ ...
+
+8000028c <test6_data>:
+8000028c: 0000004b fnmsub.s ft0,ft0,ft0,ft0,rne
+
+80000290 <test7_data>:
+80000290: 0038 addi a4,sp,8
+ ...
+
+80000294 <test8_data>:
+80000294: 00000053 fadd.s ft0,ft0,ft0,rne
+
+80000298 <test9_data>:
+80000298: 0021 c.nop 8
+ ...
+
+8000029c <test10_data>:
+8000029c: ffffffbf 0xffffffbf
+
+800002a0 <test11_data>:
+800002a0: ffa9 bnez a5,800001fa <test13+0x1a>
+800002a2: ffff 0xffff
+
+800002a4 <test12_data>:
+800002a4: ffc9 bnez a5,8000023e <test14+0x2e>
+800002a6: ffff 0xffff
+
+800002a8 <test13_data>:
+800002a8: 0004 0x4
+800002aa: ffff 0xffff
+
+800002ac <test14_data>:
+800002ac: 0005 c.nop 1
+800002ae: ffff 0xffff
diff --git a/VexRiscv/src/test/cpp/raw/fpu/build/amo.hex b/VexRiscv/src/test/cpp/raw/fpu/build/amo.hex
new file mode 100644
index 0000000..74d3567
--- /dev/null
+++ b/VexRiscv/src/test/cpp/raw/fpu/build/amo.hex
@@ -0,0 +1,45 @@
+:0200000480007A
+:10000000130E100097000000938040271301D002C8
+:10001000AFA1200803A20000130AD00263164A22EF
+:10002000130AB00063123A22130E2000970000005A
+:100030009380002513017003AFA1200803A20000E4
+:10004000130A700363124A20130A6001631E3A1EEA
+:10005000130E3000970000009380C022130120048B
+:10006000AFA1200003A20000130AB008631E4A1CBF
+:10007000130A9004631A3A1C130E40009700000004
+:100080009380802013017005AFA1202003A20000FF
+:10009000130AD006631A4A1A130AA00363163A1AFF
+:1000A000130E5000970000009380401E1301C00201
+:1000B000AFA1206003A20000130A800263164A1851
+:1000C000130A800363123A18130E600097000000B1
+:1000D0009380001C13018001AFA1204003A2000007
+:1000E000130AB00563124A16130AB004631E3A14C9
+:1000F000130E7000970000009380C0191301800157
+:10010000AFA1208003A20000130A8001631E4A12DF
+:10011000130A8003631A3A12130E8000970000003E
+:100120009380801713018005AFA1208003A20000F7
+:10013000130A3005631A4A10130A300563163A1081
+:10014000130E900097000000938040151301A0FC4F
+:10015000AFA1208003A20000130AA0FC63164A0E80
+:10016000130A100263123A0E130EA000970000004B
+:100170009380001313014003AFA1208003A200006D
+:10018000130AF0FB63124A0C130AF0FB631E3A0ACF
+:10019000130EB000970000009380C0101301C0FC44
+:1001A000AFA120A003A20000130AC0FC631E4A08EE
+:1001B000130A90FA631A3A08130EC0009700000061
+:1001C0009380800E13014003AFA120A003A2000082
+:1001D000130A4003631A4A06130A90FC63163A0690
+:1001E000130ED000970000009380400C3701FFFFF2
+:1001F000AFA120C003A20000370AFFFF63164A0424
+:10020000370AFFFF130A4A0063103A046F008004A4
+:10021000130EE00097000000938080093701FFFF74
+:100220001301C100AFA120E003A20000370AFFFFC5
+:10023000130ACA00631A4A00370AFFFF130A5A005A
+:1002400063143A006F000001370110F0130141F20E
+:100250002320C101370110F0130101F22320010016
+:100260001300000013000000130000001300000042
+:1002700013000000130000000B0000001600000037
+:10028000490000003A000000380000004B00000068
+:10029000380000005300000021000000BFFFFFFFF6
+:1002A000A9FFFFFFC9FFFFFF0400FFFF0500FFFFDD
+:00000001FF
diff --git a/VexRiscv/src/test/cpp/raw/fpu/build/fpu.asm b/VexRiscv/src/test/cpp/raw/fpu/build/fpu.asm
new file mode 100644
index 0000000..b769972
--- /dev/null
+++ b/VexRiscv/src/test/cpp/raw/fpu/build/fpu.asm
@@ -0,0 +1,276 @@
+
+build/fpu.elf: file format elf32-littleriscv
+
+
+Disassembly of section .crt_section:
+
+80000000 <_start>:
+80000000: 00100e13 li t3,1
+80000004: 00000013 nop
+80000008: 00000013 nop
+8000000c: 00000013 nop
+80000010: 00000013 nop
+80000014: 00107153 fadd.s ft2,ft0,ft1
+80000018: 00000013 nop
+8000001c: 00000013 nop
+80000020: 00000013 nop
+80000024: 00000013 nop
+80000028: 0180006f j 80000040 <test2>
+8000002c: 00000013 nop
+80000030: 00000013 nop
+80000034: 00000013 nop
+80000038: 00000013 nop
+8000003c: 00000013 nop
+
+80000040 <test2>:
+80000040: 00200e13 li t3,2
+80000044: 00000097 auipc ra,0x0
+80000048: 2e80a083 lw ra,744(ra) # 8000032c <test1_data>
+8000004c: 00107153 fadd.s ft2,ft0,ft1
+80000050: 00000013 nop
+80000054: 00000013 nop
+80000058: 00000013 nop
+8000005c: 00000013 nop
+80000060: 0200006f j 80000080 <test3>
+80000064: 00000013 nop
+80000068: 00000013 nop
+8000006c: 00000013 nop
+80000070: 00000013 nop
+80000074: 00000013 nop
+80000078: 00000013 nop
+8000007c: 00000013 nop
+
+80000080 <test3>:
+80000080: 00300e13 li t3,3
+80000084: 00000013 nop
+80000088: 00000013 nop
+8000008c: 00000013 nop
+80000090: 00000013 nop
+80000094: 0080006f j 8000009c <skip>
+80000098: 00107153 fadd.s ft2,ft0,ft1
+
+8000009c <skip>:
+8000009c: 0240006f j 800000c0 <test4>
+800000a0: 00000013 nop
+800000a4: 00000013 nop
+800000a8: 00000013 nop
+800000ac: 00000013 nop
+800000b0: 00000013 nop
+800000b4: 00000013 nop
+800000b8: 00000013 nop
+800000bc: 00000013 nop
+
+800000c0 <test4>:
+800000c0: 00400e13 li t3,4
+800000c4: 00000013 nop
+800000c8: 00000013 nop
+800000cc: 00000013 nop
+800000d0: 00000013 nop
+800000d4: 00000097 auipc ra,0x0
+800000d8: 25808093 addi ra,ra,600 # 8000032c <test1_data>
+800000dc: 0000a107 flw ft2,0(ra)
+800000e0: 00000013 nop
+800000e4: 00000013 nop
+800000e8: 00000013 nop
+800000ec: 00000013 nop
+800000f0: 0100006f j 80000100 <test5>
+800000f4: 00000013 nop
+800000f8: 00000013 nop
+800000fc: 00000013 nop
+
+80000100 <test5>:
+80000100: 00500e13 li t3,5
+80000104: 00000013 nop
+80000108: 00000013 nop
+8000010c: 00000013 nop
+80000110: 00000013 nop
+80000114: 00000097 auipc ra,0x0
+80000118: 21808093 addi ra,ra,536 # 8000032c <test1_data>
+8000011c: 00000117 auipc sp,0x0
+80000120: 21410113 addi sp,sp,532 # 80000330 <test2_data>
+80000124: 0000a087 flw ft1,0(ra)
+80000128: 00012107 flw ft2,0(sp)
+8000012c: 0020f1d3 fadd.s ft3,ft1,ft2
+80000130: 00000013 nop
+80000134: 00000013 nop
+80000138: 00000013 nop
+8000013c: 00000013 nop
+80000140: 0400006f j 80000180 <test6>
+80000144: 00000013 nop
+80000148: 00000013 nop
+8000014c: 00000013 nop
+80000150: 00000013 nop
+80000154: 00000013 nop
+80000158: 00000013 nop
+8000015c: 00000013 nop
+80000160: 00000013 nop
+80000164: 00000013 nop
+80000168: 00000013 nop
+8000016c: 00000013 nop
+80000170: 00000013 nop
+80000174: 00000013 nop
+80000178: 00000013 nop
+8000017c: 00000013 nop
+
+80000180 <test6>:
+80000180: 00600e13 li t3,6
+80000184: 00000013 nop
+80000188: 00000013 nop
+8000018c: 00000013 nop
+80000190: 00000013 nop
+80000194: 00000097 auipc ra,0x0
+80000198: 1a008093 addi ra,ra,416 # 80000334 <test3_data>
+8000019c: 0030a027 fsw ft3,0(ra)
+800001a0: 00000013 nop
+800001a4: 00000013 nop
+800001a8: 00000013 nop
+800001ac: 00000013 nop
+800001b0: 0100006f j 800001c0 <test7>
+800001b4: 00000013 nop
+800001b8: 00000013 nop
+800001bc: 00000013 nop
+
+800001c0 <test7>:
+800001c0: 00700e13 li t3,7
+800001c4: 00000097 auipc ra,0x0
+800001c8: 17008093 addi ra,ra,368 # 80000334 <test3_data>
+800001cc: 00000117 auipc sp,0x0
+800001d0: 16c10113 addi sp,sp,364 # 80000338 <test4_data>
+800001d4: 00000197 auipc gp,0x0
+800001d8: 16818193 addi gp,gp,360 # 8000033c <test5_data>
+800001dc: 00000217 auipc tp,0x0
+800001e0: 16420213 addi tp,tp,356 # 80000340 <test6_data>
+800001e4: 0000a207 flw ft4,0(ra)
+800001e8: 00427253 fadd.s ft4,ft4,ft4
+800001ec: 0040f2d3 fadd.s ft5,ft1,ft4
+800001f0: 00412027 fsw ft4,0(sp)
+800001f4: 0051a027 fsw ft5,0(gp)
+800001f8: 00122027 fsw ft1,0(tp) # 0 <_start-0x80000000>
+800001fc: 00000013 nop
+80000200: 00000013 nop
+80000204: 00000013 nop
+80000208: 00000013 nop
+8000020c: 0340006f j 80000240 <test8>
+80000210: 00000013 nop
+80000214: 00000013 nop
+80000218: 00000013 nop
+8000021c: 00000013 nop
+80000220: 00000013 nop
+80000224: 00000013 nop
+80000228: 00000013 nop
+8000022c: 00000013 nop
+80000230: 00000013 nop
+80000234: 00000013 nop
+80000238: 00000013 nop
+8000023c: 00000013 nop
+
+80000240 <test8>:
+80000240: 00800e13 li t3,8
+80000244: c011f0d3 fcvt.wu.s ra,ft3
+80000248: 00000013 nop
+8000024c: 00000013 nop
+80000250: 00000013 nop
+80000254: 00000013 nop
+80000258: 0280006f j 80000280 <test9>
+8000025c: 00000013 nop
+80000260: 00000013 nop
+80000264: 00000013 nop
+80000268: 00000013 nop
+8000026c: 00000013 nop
+80000270: 00000013 nop
+80000274: 00000013 nop
+80000278: 00000013 nop
+8000027c: 00000013 nop
+
+80000280 <test9>:
+80000280: 00900e13 li t3,9
+80000284: a03100d3 fle.s ra,ft2,ft3
+80000288: a0218153 fle.s sp,ft3,ft2
+8000028c: a03181d3 fle.s gp,ft3,ft3
+80000290: 00000013 nop
+80000294: 00000013 nop
+80000298: 00000013 nop
+8000029c: 00000013 nop
+800002a0: 0200006f j 800002c0 <test10>
+800002a4: 00000013 nop
+800002a8: 00000013 nop
+800002ac: 00000013 nop
+800002b0: 00000013 nop
+800002b4: 00000013 nop
+800002b8: 00000013 nop
+800002bc: 00000013 nop
+
+800002c0 <test10>:
+800002c0: 00a00e13 li t3,10
+800002c4: 01000093 li ra,16
+800002c8: d010f0d3 fcvt.s.wu ft1,ra
+800002cc: 01200113 li sp,18
+800002d0: 20000193 li gp,512
+800002d4: d0117153 fcvt.s.wu ft2,sp
+800002d8: d011f1d3 fcvt.s.wu ft3,gp
+800002dc: 00000217 auipc tp,0x0
+800002e0: 0a422203 lw tp,164(tp) # 80000380 <test10_data>
+800002e4: d01272d3 fcvt.s.wu ft5,tp
+800002e8: 00000013 nop
+800002ec: 00000013 nop
+800002f0: 00000013 nop
+800002f4: 00000013 nop
+800002f8: 0100006f j 80000308 <pass>
+
+800002fc <fail>:
+800002fc: f0100137 lui sp,0xf0100
+80000300: f2410113 addi sp,sp,-220 # f00fff24 <test10_data+0x700ffba4>
+80000304: 01c12023 sw t3,0(sp)
+
+80000308 <pass>:
+80000308: f0100137 lui sp,0xf0100
+8000030c: f2010113 addi sp,sp,-224 # f00fff20 <test10_data+0x700ffba0>
+80000310: 00012023 sw zero,0(sp)
+80000314: 00000013 nop
+80000318: 00000013 nop
+8000031c: 00000013 nop
+80000320: 00000013 nop
+80000324: 00000013 nop
+80000328: 00000013 nop
+
+8000032c <test1_data>:
+8000032c: 0000 unimp
+8000032e: 3fc0 fld fs0,184(a5)
+
+80000330 <test2_data>:
+80000330: 0000 unimp
+80000332: 40a0 lw s0,64(s1)
+
+80000334 <test3_data>:
+80000334: 0049 c.nop 18
+ ...
+
+80000338 <test4_data>:
+80000338: 003a c.slli zero,0xe
+ ...
+
+8000033c <test5_data>:
+8000033c: 0038 addi a4,sp,8
+ ...
+
+80000340 <test6_data>:
+80000340: 0000004b fnmsub.s ft0,ft0,ft0,ft0,rne
+80000344: 00000013 nop
+80000348: 00000013 nop
+8000034c: 00000013 nop
+80000350: 00000013 nop
+80000354: 00000013 nop
+80000358: 00000013 nop
+8000035c: 00000013 nop
+80000360: 00000013 nop
+80000364: 00000013 nop
+80000368: 00000013 nop
+8000036c: 00000013 nop
+80000370: 00000013 nop
+80000374: 00000013 nop
+80000378: 00000013 nop
+8000037c: 00000013 nop
+
+80000380 <test10_data>:
+80000380: 01d4 addi a3,sp,196
+ ...
diff --git a/VexRiscv/src/test/cpp/raw/fpu/build/fpu.hex b/VexRiscv/src/test/cpp/raw/fpu/build/fpu.hex
new file mode 100644
index 0000000..4b83443
--- /dev/null
+++ b/VexRiscv/src/test/cpp/raw/fpu/build/fpu.hex
@@ -0,0 +1,62 @@
+:0200000480007A
+:10000000130E100013000000130000001300000086
+:1000100013000000537110001300000013000000D3
+:1000200013000000130000006F00800113000000A7
+:100030001300000013000000130000001300000074
+:10004000130E20009700000083A0802E5371100033
+:100050001300000013000000130000001300000054
+:100060006F000002130000001300000013000000E6
+:100070001300000013000000130000001300000034
+:10008000130E3000130000001300000013000000E6
+:10009000130000006F008000537110006F004002D9
+:1000A0001300000013000000130000001300000004
+:1000B00013000000130000001300000013000000F4
+:1000C000130E400013000000130000001300000096
+:1000D00013000000970000009380802507A1000016
+:1000E00013000000130000001300000013000000C4
+:1000F0006F00000113000000130000001300000057
+:10010000130E500013000000130000001300000045
+:100110001300000097000000938080211701000069
+:100120001301412187A0000007210100D3F1200025
+:100130001300000013000000130000001300000073
+:100140006F00000413000000130000001300000003
+:100150001300000013000000130000001300000053
+:100160001300000013000000130000001300000043
+:100170001300000013000000130000001300000033
+:10018000130E6000130000001300000013000000B5
+:1001900013000000970000009380001A27A0300091
+:1001A0001300000013000000130000001300000003
+:1001B0006F00000113000000130000001300000096
+:1001C000130E7000970000009380001717010000C5
+:1001D0001301C116970100009381811617020000D8
+:1001E0001302421607A2000053724200D3F24000ED
+:1001F0002720410027A051002720120013000000F3
+:100200001300000013000000130000006F00400303
+:100210001300000013000000130000001300000092
+:100220001300000013000000130000001300000082
+:100230001300000013000000130000001300000072
+:10024000130E8000D3F011C0130000001300000053
+:1002500013000000130000006F0080021300000074
+:100260001300000013000000130000001300000042
+:100270001300000013000000130000001300000032
+:10028000130E9000D30031A0538121A0D38131A05F
+:100290001300000013000000130000001300000012
+:1002A0006F000002130000001300000013000000A4
+:1002B00013000000130000001300000013000000F2
+:1002C000130EA00093000001D3F010D01301200101
+:1002D00093010020537111D0D3F111D01702000007
+:1002E0000322420AD37212D0130000001300000050
+:1002F00013000000130000006F000001370110F030
+:10030000130141F22320C101370110F0130101F262
+:100310002320010013000000130000001300000060
+:100320001300000013000000130000000000C03F95
+:100330000000A040490000003A0000003800000022
+:100340004B00000013000000130000001300000029
+:100350001300000013000000130000001300000051
+:100360001300000013000000130000001300000041
+:100370001300000013000000130000001300000031
+:10038000D401000000000000000000000000000098
+:10039000000000000000000000000000000000005D
+:1003A000000000000000000000000000000000004D
+:0803B000000000000000000045
+:00000001FF
diff --git a/VexRiscv/src/test/cpp/raw/fpu/makefile b/VexRiscv/src/test/cpp/raw/fpu/makefile
new file mode 100644
index 0000000..4892095
--- /dev/null
+++ b/VexRiscv/src/test/cpp/raw/fpu/makefile
@@ -0,0 +1,5 @@
+PROJ_NAME=fpu
+
+FLOATING=yes
+
+include ../common/asm.mk \ No newline at end of file
diff --git a/VexRiscv/src/test/cpp/raw/fpu/src/crt.S b/VexRiscv/src/test/cpp/raw/fpu/src/crt.S
new file mode 100644
index 0000000..302b98c
--- /dev/null
+++ b/VexRiscv/src/test/cpp/raw/fpu/src/crt.S
@@ -0,0 +1,193 @@
+.globl _star
+#define TEST_ID x28
+
+_start:
+
+#define assert(reg, value) \
+ li x20, value; \
+ bne x20, reg, fail;
+
+
+test1:
+ li TEST_ID, 1
+ nop
+ nop
+ nop
+ nop
+ fadd.s f2, f0, f1
+ nop
+ nop
+ nop
+ nop
+ j test2
+
+.align 6
+test2:
+ li TEST_ID, 2
+ lw x1, test1_data
+ fadd.s f2, f0, f1
+ nop
+ nop
+ nop
+ nop
+
+ j test3
+
+
+.align 6
+test3:
+ li TEST_ID, 3
+ nop
+ nop
+ nop
+ nop
+ j skip
+ fadd.s f2, f0, f1
+skip:
+ j test4
+
+
+
+.align 6
+test4:
+ li TEST_ID, 4
+ nop
+ nop
+ nop
+ nop
+ la x1, test1_data
+ flw f2, 0(x1)
+ nop
+ nop
+ nop
+ nop
+
+ j test5
+
+.align 6
+test5:
+ li TEST_ID, 5
+ nop
+ nop
+ nop
+ nop
+ la x1, test1_data
+ la x2, test2_data
+ flw f1, 0(x1)
+ flw f2, 0(x2)
+ fadd.s f3, f1, f2
+ nop
+ nop
+ nop
+ nop
+ j test6
+
+.align 6
+test6:
+ li TEST_ID, 6
+ nop
+ nop
+ nop
+ nop
+ la x1, test3_data
+ fsw f3, 0(x1)
+ nop
+ nop
+ nop
+ nop
+ j test7
+
+.align 6
+test7:
+ li TEST_ID, 7
+ la x1, test3_data
+ la x2, test4_data
+ la x3, test5_data
+ la x4, test6_data
+ flw f4, 0(x1)
+ fadd.s f4, f4, f4
+ fadd.s f5, f1, f4
+ fsw f4, 0(x2)
+ fsw f5, 0(x3)
+ fsw f1, 0(x4)
+ nop
+ nop
+ nop
+ nop
+ j test8
+
+.align 6
+test8:
+ li TEST_ID, 8
+ fcvt.wu.s x1, f3
+ nop
+ nop
+ nop
+ nop
+ j test9
+
+.align 6
+test9:
+ li TEST_ID, 9
+ fle.s x1, f2, f3
+ fle.s x2, f3, f2
+ fle.s x3, f3, f3
+ nop
+ nop
+ nop
+ nop
+ j test10
+
+.align 6
+test10:
+ li TEST_ID, 10
+ li x1, 16
+ fcvt.s.wu f1, x1
+ li x2, 18
+ li x3, 512
+ fcvt.s.wu f2, x2
+ fcvt.s.wu f3, x3
+ lw x4, test10_data
+ fcvt.s.wu f5, x4
+ nop
+ nop
+ nop
+ nop
+
+ /* la x1, test1_data
+ li x2, 45
+ amoswap.w x3,x2,(x1)
+ lw x4, 0(x1)
+ assert(x4, 45)
+ assert(x3, 11)*/
+
+
+
+
+ j pass
+
+
+fail:
+ li x2, 0xF00FFF24
+ sw TEST_ID, 0(x2)
+
+pass:
+ li x2, 0xF00FFF20
+ sw x0, 0(x2)
+
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+
+
+test1_data: .word 0x3fc00000 //1.5f
+test2_data: .word 0x40a00000 //5.0f
+test3_data: .word 73
+test4_data: .word 58
+test5_data: .word 56
+test6_data: .word 75
+.align 6
+test10_data: .word 468
diff --git a/VexRiscv/src/test/cpp/raw/fpu/src/ld b/VexRiscv/src/test/cpp/raw/fpu/src/ld
new file mode 100644
index 0000000..93d8de8
--- /dev/null
+++ b/VexRiscv/src/test/cpp/raw/fpu/src/ld
@@ -0,0 +1,16 @@
+OUTPUT_ARCH( "riscv" )
+
+MEMORY {
+ onChipRam (W!RX)/*(RX)*/ : ORIGIN = 0x80000000, LENGTH = 128K
+}
+
+SECTIONS
+{
+
+ .crt_section :
+ {
+ . = ALIGN(4);
+ *crt.o(.text)
+ } > onChipRam
+
+}
diff --git a/VexRiscv/src/test/cpp/raw/icache/.gitignore b/VexRiscv/src/test/cpp/raw/icache/.gitignore
new file mode 100644
index 0000000..c12cb2c
--- /dev/null
+++ b/VexRiscv/src/test/cpp/raw/icache/.gitignore
@@ -0,0 +1,4 @@
+*.map
+*.v
+*.elf
+*.o \ No newline at end of file
diff --git a/VexRiscv/src/test/cpp/raw/icache/build/icache.asm b/VexRiscv/src/test/cpp/raw/icache/build/icache.asm
new file mode 100644
index 0000000..993f21b
--- /dev/null
+++ b/VexRiscv/src/test/cpp/raw/icache/build/icache.asm
@@ -0,0 +1,51 @@
+
+build/icache.elf: file format elf32-littleriscv
+
+
+Disassembly of section .crt_section:
+
+80000000 <_start>:
+80000000: 00000097 auipc ra,0x0
+80000004: 04c08093 addi ra,ra,76 # 8000004c <fail>
+
+80000008 <test1>:
+80000008: 00100e13 li t3,1
+8000000c: 00100093 li ra,1
+80000010: 00300113 li sp,3
+80000014: 00208093 addi ra,ra,2
+80000018: 02209a63 bne ra,sp,8000004c <fail>
+
+8000001c <test2>:
+8000001c: 00200e13 li t3,2
+80000020: 01300093 li ra,19
+80000024: 00000117 auipc sp,0x0
+80000028: 02010113 addi sp,sp,32 # 80000044 <test2_trigger>
+8000002c: 0040006f j 80000030 <test2_aligned>
+
+80000030 <test2_aligned>:
+80000030: 00112023 sw ra,0(sp)
+80000034: 0000100f fence.i
+80000038: 00800a13 li s4,8
+8000003c: fffa0a13 addi s4,s4,-1
+80000040: fe0a1ee3 bnez s4,8000003c <test2_aligned+0xc>
+
+80000044 <test2_trigger>:
+80000044: 0080006f j 8000004c <fail>
+80000048: 0100006f j 80000058 <pass>
+
+8000004c <fail>:
+8000004c: f0100137 lui sp,0xf0100
+80000050: f2410113 addi sp,sp,-220 # f00fff24 <pass+0x700ffecc>
+80000054: 01c12023 sw t3,0(sp)
+
+80000058 <pass>:
+80000058: f0100137 lui sp,0xf0100
+8000005c: f2010113 addi sp,sp,-224 # f00fff20 <pass+0x700ffec8>
+80000060: 00012023 sw zero,0(sp)
+80000064: 00000013 nop
+80000068: 00000013 nop
+8000006c: 00000013 nop
+80000070: 00000013 nop
+80000074: 00000013 nop
+80000078: 00000013 nop
+ ...
diff --git a/VexRiscv/src/test/cpp/raw/icache/build/icache.hex b/VexRiscv/src/test/cpp/raw/icache/build/icache.hex
new file mode 100644
index 0000000..2588f0e
--- /dev/null
+++ b/VexRiscv/src/test/cpp/raw/icache/build/icache.hex
@@ -0,0 +1,11 @@
+:0200000480007A
+:10000000970000009380C004130E100093001000AE
+:100010001301300093802000639A2002130E200009
+:100020009300300117010000130101026F0040002E
+:10003000232011000F100000130A8000130AFAFF9A
+:10004000E31E0AFE6F0080006F000001370110F010
+:10005000130141F22320C101370110F0130101F215
+:100060002320010013000000130000001300000013
+:100070001300000013000000130000000000000047
+:04008000000000007C
+:00000001FF
diff --git a/VexRiscv/src/test/cpp/raw/icache/makefile b/VexRiscv/src/test/cpp/raw/icache/makefile
new file mode 100644
index 0000000..08779a2
--- /dev/null
+++ b/VexRiscv/src/test/cpp/raw/icache/makefile
@@ -0,0 +1,3 @@
+PROJ_NAME=icache
+
+include ../common/asm.mk \ No newline at end of file
diff --git a/VexRiscv/src/test/cpp/raw/icache/src/crt.S b/VexRiscv/src/test/cpp/raw/icache/src/crt.S
new file mode 100644
index 0000000..b0b2425
--- /dev/null
+++ b/VexRiscv/src/test/cpp/raw/icache/src/crt.S
@@ -0,0 +1,49 @@
+.globl _star
+#define TEST_ID x28
+
+#define delay \
+ li x20, 8; \
+1: addi x20, x20, -1; \
+ bne x20, x0, 1b;
+
+_start:
+ la x1, fail
+ // csrw mtvec, x1
+
+test1: //Dummy test
+ li TEST_ID, 1
+ li x1, 1
+ li x2, 3
+ addi x1, x1, 2
+ bne x1, x2, fail
+
+test2:
+ li TEST_ID, 2
+ li x1, 0x13 //nop
+ la x2, test2_trigger
+ j test2_aligned
+.align(4)
+test2_aligned:
+ sw x1, 0(x2)
+ fence.i
+ delay
+test2_trigger:
+ j fail
+
+
+ j pass
+
+fail:
+ li x2, 0xF00FFF24
+ sw TEST_ID, 0(x2)
+
+pass:
+ li x2, 0xF00FFF20
+ sw x0, 0(x2)
+
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
diff --git a/VexRiscv/src/test/cpp/raw/icache/src/ld b/VexRiscv/src/test/cpp/raw/icache/src/ld
new file mode 100644
index 0000000..93d8de8
--- /dev/null
+++ b/VexRiscv/src/test/cpp/raw/icache/src/ld
@@ -0,0 +1,16 @@
+OUTPUT_ARCH( "riscv" )
+
+MEMORY {
+ onChipRam (W!RX)/*(RX)*/ : ORIGIN = 0x80000000, LENGTH = 128K
+}
+
+SECTIONS
+{
+
+ .crt_section :
+ {
+ . = ALIGN(4);
+ *crt.o(.text)
+ } > onChipRam
+
+}
diff --git a/VexRiscv/src/test/cpp/raw/lrsc/.gitignore b/VexRiscv/src/test/cpp/raw/lrsc/.gitignore
new file mode 100644
index 0000000..c12cb2c
--- /dev/null
+++ b/VexRiscv/src/test/cpp/raw/lrsc/.gitignore
@@ -0,0 +1,4 @@
+*.map
+*.v
+*.elf
+*.o \ No newline at end of file
diff --git a/VexRiscv/src/test/cpp/raw/lrsc/build/lrsc.asm b/VexRiscv/src/test/cpp/raw/lrsc/build/lrsc.asm
new file mode 100644
index 0000000..a2ba4c7
--- /dev/null
+++ b/VexRiscv/src/test/cpp/raw/lrsc/build/lrsc.asm
@@ -0,0 +1,180 @@
+
+build/lrsc.elf: file format elf32-littleriscv
+
+
+Disassembly of section .crt_section:
+
+80000000 <trap_entry-0x20>:
+80000000: 06c0006f j 8000006c <_start>
+80000004: 00000013 nop
+80000008: 00000013 nop
+8000000c: 00000013 nop
+80000010: 00000013 nop
+80000014: 00000013 nop
+80000018: 00000013 nop
+8000001c: 00000013 nop
+
+80000020 <trap_entry>:
+80000020: 30002ef3 csrr t4,mstatus
+80000024: 080efe93 andi t4,t4,128
+80000028: 000e8a63 beqz t4,8000003c <notExternalInterrupt>
+8000002c: 00002eb7 lui t4,0x2
+80000030: 800e8e93 addi t4,t4,-2048 # 1800 <trap_entry-0x7fffe820>
+80000034: 300e9073 csrw mstatus,t4
+80000038: 30200073 mret
+
+8000003c <notExternalInterrupt>:
+8000003c: 34102ef3 csrr t4,mepc
+80000040: 004e8e93 addi t4,t4,4
+80000044: 341e9073 csrw mepc,t4
+80000048: 30200073 mret
+
+8000004c <flush>:
+8000004c: 200002b7 lui t0,0x20000
+80000050: 00001337 lui t1,0x1
+80000054: 02000393 li t2,32
+
+80000058 <flushLoop>:
+80000058: 0002ae03 lw t3,0(t0) # 20000000 <trap_entry-0x60000020>
+8000005c: 006282b3 add t0,t0,t1
+80000060: fff38393 addi t2,t2,-1
+80000064: fe039ae3 bnez t2,80000058 <flushLoop>
+80000068: 00008067 ret
+
+8000006c <_start>:
+8000006c: 00100e13 li t3,1
+80000070: 10000537 lui a0,0x10000
+80000074: 06400593 li a1,100
+80000078: 06500613 li a2,101
+8000007c: 06600693 li a3,102
+80000080: 00d52023 sw a3,0(a0) # 10000000 <trap_entry-0x70000020>
+80000084: 18b5262f sc.w a2,a1,(a0)
+80000088: 00100713 li a4,1
+8000008c: 18e61863 bne a2,a4,8000021c <fail>
+80000090: 00052703 lw a4,0(a0)
+80000094: 18e69463 bne a3,a4,8000021c <fail>
+
+80000098 <test2>:
+80000098: 00200e13 li t3,2
+8000009c: 10000537 lui a0,0x10000
+800000a0: 00450513 addi a0,a0,4 # 10000004 <trap_entry-0x7000001c>
+800000a4: 06700593 li a1,103
+800000a8: 06800613 li a2,104
+800000ac: 06900693 li a3,105
+800000b0: 00d52023 sw a3,0(a0)
+800000b4: 18b5262f sc.w a2,a1,(a0)
+800000b8: 00100713 li a4,1
+800000bc: 16e61063 bne a2,a4,8000021c <fail>
+800000c0: 00052703 lw a4,0(a0)
+800000c4: 14e69c63 bne a3,a4,8000021c <fail>
+800000c8: f85ff0ef jal ra,8000004c <flush>
+800000cc: 00052703 lw a4,0(a0)
+800000d0: 14e69663 bne a3,a4,8000021c <fail>
+
+800000d4 <test3>:
+800000d4: 00300e13 li t3,3
+800000d8: 10000537 lui a0,0x10000
+800000dc: 00450513 addi a0,a0,4 # 10000004 <trap_entry-0x7000001c>
+800000e0: 06700593 li a1,103
+800000e4: 06800613 li a2,104
+800000e8: 06900693 li a3,105
+800000ec: 18b5262f sc.w a2,a1,(a0)
+800000f0: 00100713 li a4,1
+800000f4: 12e61463 bne a2,a4,8000021c <fail>
+800000f8: 00052703 lw a4,0(a0)
+800000fc: 12e69063 bne a3,a4,8000021c <fail>
+80000100: f4dff0ef jal ra,8000004c <flush>
+80000104: 00052703 lw a4,0(a0)
+80000108: 10e69a63 bne a3,a4,8000021c <fail>
+
+8000010c <test4>:
+8000010c: 00400e13 li t3,4
+80000110: 10000537 lui a0,0x10000
+80000114: 00850513 addi a0,a0,8 # 10000008 <trap_entry-0x70000018>
+80000118: 06a00593 li a1,106
+8000011c: 06b00613 li a2,107
+80000120: 06c00693 li a3,108
+80000124: 00d52023 sw a3,0(a0)
+80000128: 100527af lr.w a5,(a0)
+8000012c: 18b5262f sc.w a2,a1,(a0)
+80000130: 0ed79663 bne a5,a3,8000021c <fail>
+80000134: 0e061463 bnez a2,8000021c <fail>
+80000138: 00052703 lw a4,0(a0)
+8000013c: 0ee59063 bne a1,a4,8000021c <fail>
+80000140: f0dff0ef jal ra,8000004c <flush>
+80000144: 00052703 lw a4,0(a0)
+80000148: 0ce59a63 bne a1,a4,8000021c <fail>
+
+8000014c <test5>:
+8000014c: 00500e13 li t3,5
+80000150: 10000537 lui a0,0x10000
+80000154: 00850513 addi a0,a0,8 # 10000008 <trap_entry-0x70000018>
+80000158: 06d00593 li a1,109
+8000015c: 06e00613 li a2,110
+80000160: 06f00693 li a3,111
+80000164: 00d52023 sw a3,0(a0)
+80000168: 18b5262f sc.w a2,a1,(a0)
+8000016c: 0a060863 beqz a2,8000021c <fail>
+80000170: 00052703 lw a4,0(a0)
+80000174: 0ae69463 bne a3,a4,8000021c <fail>
+80000178: ed5ff0ef jal ra,8000004c <flush>
+8000017c: 00052703 lw a4,0(a0)
+80000180: 08e69e63 bne a3,a4,8000021c <fail>
+80000184: 00700e13 li t3,7
+80000188: 10000537 lui a0,0x10000
+8000018c: 01450513 addi a0,a0,20 # 10000014 <trap_entry-0x7000000c>
+80000190: 07800593 li a1,120
+80000194: 07900613 li a2,121
+80000198: 07a00693 li a3,122
+8000019c: 01000e93 li t4,16
+
+800001a0 <test7>:
+800001a0: 00d52023 sw a3,0(a0)
+800001a4: 100527af lr.w a5,(a0)
+800001a8: 18b5262f sc.w a2,a1,(a0)
+800001ac: 06d79863 bne a5,a3,8000021c <fail>
+800001b0: 06061663 bnez a2,8000021c <fail>
+800001b4: 00052703 lw a4,0(a0)
+800001b8: 06e59263 bne a1,a4,8000021c <fail>
+800001bc: fffe8e93 addi t4,t4,-1
+800001c0: 00450513 addi a0,a0,4
+800001c4: 00358593 addi a1,a1,3
+800001c8: 00360613 addi a2,a2,3
+800001cc: 00368693 addi a3,a3,3
+800001d0: fc0e98e3 bnez t4,800001a0 <test7>
+
+800001d4 <test9>:
+800001d4: 00900e13 li t3,9
+800001d8: 10000537 lui a0,0x10000
+800001dc: 10050513 addi a0,a0,256 # 10000100 <trap_entry-0x6fffff20>
+800001e0: 07b00593 li a1,123
+800001e4: 07c00613 li a2,124
+800001e8: 07d00693 li a3,125
+800001ec: 00d52023 sw a3,0(a0)
+800001f0: 100527af lr.w a5,(a0)
+800001f4: 00000073 ecall
+800001f8: 18b527af sc.w a5,a1,(a0)
+800001fc: 00000713 li a4,0
+80000200: 00e79e63 bne a5,a4,8000021c <fail>
+80000204: 00052703 lw a4,0(a0)
+80000208: 00e59a63 bne a1,a4,8000021c <fail>
+8000020c: e41ff0ef jal ra,8000004c <flush>
+80000210: 00052703 lw a4,0(a0)
+80000214: 00e59463 bne a1,a4,8000021c <fail>
+80000218: 0100006f j 80000228 <pass>
+
+8000021c <fail>:
+8000021c: f0100137 lui sp,0xf0100
+80000220: f2410113 addi sp,sp,-220 # f00fff24 <pass+0x700ffcfc>
+80000224: 01c12023 sw t3,0(sp)
+
+80000228 <pass>:
+80000228: f0100137 lui sp,0xf0100
+8000022c: f2010113 addi sp,sp,-224 # f00fff20 <pass+0x700ffcf8>
+80000230: 00012023 sw zero,0(sp)
+80000234: 00000013 nop
+80000238: 00000013 nop
+8000023c: 00000013 nop
+80000240: 00000013 nop
+80000244: 00000013 nop
+80000248: 00000013 nop
diff --git a/VexRiscv/src/test/cpp/raw/lrsc/build/lrsc.hex b/VexRiscv/src/test/cpp/raw/lrsc/build/lrsc.hex
new file mode 100644
index 0000000..b0ee273
--- /dev/null
+++ b/VexRiscv/src/test/cpp/raw/lrsc/build/lrsc.hex
@@ -0,0 +1,40 @@
+:0200000480007A
+:100000006F00C00613000000130000001300000082
+:100010001300000013000000130000001300000094
+:10002000F32E003093FE0E08638A0E00B72E0000F8
+:10003000938E0E8073900E3073002030F32E1034A8
+:10004000938E4E0073901E3473002030B702002050
+:10005000371300009303000203AE0200B382620074
+:100060009383F3FFE39A03FE67800000130E1000F2
+:1000700037050010930540061306500693066006E8
+:100080002320D5002F26B518130710006318E61893
+:10009000032705006394E618130E200037050010AF
+:1000A0001305450093057006130680069306900617
+:1000B0002320D5002F26B518130710006310E6166D
+:1000C00003270500639CE614EFF05FF803270500A3
+:1000D0006396E614130E3000370500101305450033
+:1000E0009305700613068006930690062F26B51812
+:1000F000130710006314E612032705006390E6124D
+:10010000EFF0DFF403270500639AE610130E4000BA
+:1001100037050010130585009305A0061306B006E9
+:100120009306C0062320D500AF2705102F26B5184B
+:100130006396D70E6314060E032705006390E50E41
+:10014000EFF0DFF003270500639AE50C130E500073
+:1001500037050010130585009305D0061306E00649
+:100160009306F0062320D5002F26B5186308060A4B
+:10017000032705006394E60AEFF05FED032705000F
+:10018000639EE608130E7000370500101305450145
+:1001900093058007130690079306A007930E0001AE
+:1001A0002320D500AF2705102F26B5186398D70652
+:1001B00063160606032705006392E506938EFEFF8D
+:1001C00013054500938535001306360093863600E7
+:1001D000E3980EFC130E9000370500101305051070
+:1001E0009305B0071306C0079306D0072320D50058
+:1001F000AF27051073000000AF27B51813070000E4
+:10020000639EE70003270500639AE500EFF01FE413
+:10021000032705006394E5006F000001370110F02B
+:10022000130141F22320C101370110F0130101F243
+:100230002320010013000000130000001300000041
+:0C02400013000000130000001300000079
+:040000058000006C0B
+:00000001FF
diff --git a/VexRiscv/src/test/cpp/raw/lrsc/makefile b/VexRiscv/src/test/cpp/raw/lrsc/makefile
new file mode 100644
index 0000000..eafdb26
--- /dev/null
+++ b/VexRiscv/src/test/cpp/raw/lrsc/makefile
@@ -0,0 +1,5 @@
+PROJ_NAME=lrsc
+
+ATOMIC=yes
+
+include ../common/asm.mk \ No newline at end of file
diff --git a/VexRiscv/src/test/cpp/raw/lrsc/src/crt.S b/VexRiscv/src/test/cpp/raw/lrsc/src/crt.S
new file mode 100644
index 0000000..a19663f
--- /dev/null
+++ b/VexRiscv/src/test/cpp/raw/lrsc/src/crt.S
@@ -0,0 +1,213 @@
+.globl _start
+
+
+ j _start
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+
+.global trap_entry
+trap_entry:
+ csrr x29, mstatus
+ and x29, x29, 0x080
+ beqz x29, notExternalInterrupt
+ li x29, 0x1800 //000 disable interrupts
+ csrw mstatus,x29
+ mret
+
+notExternalInterrupt:
+ csrr x29, mepc
+ addi x29, x29, 4
+ csrw mepc, x29
+ mret
+
+flush:
+ li t0, 0x20000000
+ li t1, 0x1000
+ li t2, 32
+flushLoop:
+ lw t3, 0(t0)
+ add t0, t0, t1
+ addi t2,t2,-1
+ bnez t2, flushLoop
+ ret
+
+_start:
+test1: //Test 1 SC on unreserved area should fail and not write memory
+ li x28, 1
+ li a0, 0x10000000
+ li a1, 100
+ li a2, 101
+ li a3, 102
+ sw a3, 0(a0)
+ sc.w a2, a1, (a0)
+ li a4, 1
+ bne a2, a4, fail
+ lw a4, 0(a0)
+ bne a3, a4, fail
+
+test2: //Test 2 SC on another unreserved area should fail and not write memory
+ li x28, 2
+ li a0, 0x10000004
+ li a1, 103
+ li a2, 104
+ li a3, 105
+ sw a3, 0(a0)
+ sc.w a2, a1, (a0)
+ li a4, 1
+ bne a2, a4, fail
+ lw a4, 0(a0)
+ bne a3, a4, fail
+ call flush
+ lw a4, 0(a0)
+ bne a3, a4, fail
+
+
+test3: //Test 3 retrying SC on unreserved area should fail and not write memory
+ li x28, 3
+ li a0, 0x10000004
+ li a1, 103
+ li a2, 104
+ li a3, 105
+ sc.w a2, a1, (a0)
+ li a4, 1
+ bne a2, a4, fail
+ lw a4, 0(a0)
+ bne a3, a4, fail
+ call flush
+ lw a4, 0(a0)
+ bne a3, a4, fail
+
+
+test4: //Test 4 SC on reserved area should pass and should be written write memory
+ li x28, 4
+ li a0, 0x10000008
+ li a1, 106
+ li a2, 107
+ li a3, 108
+ sw a3, 0(a0)
+ lr.w a5, (a0)
+ sc.w a2, a1, (a0)
+ bne a5, a3, fail
+ bne a2, x0, fail
+ lw a4, 0(a0)
+ bne a1, a4, fail
+ call flush
+ lw a4, 0(a0)
+ bne a1, a4, fail
+
+
+test5: //Test 5 redo SC on reserved area should fail
+ li x28, 5
+ li a0, 0x10000008
+ li a1, 109
+ li a2, 110
+ li a3, 111
+ sw a3, 0(a0)
+ sc.w a2, a1, (a0)
+ beq a2, x0, fail
+ lw a4, 0(a0)
+ bne a3, a4, fail
+ call flush
+ lw a4, 0(a0)
+ bne a3, a4, fail
+
+
+//Test 7 do a lot of allocation to clear the entries
+ li x28, 7
+ li a0, 0x10000014
+ li a1, 120
+ li a2, 121
+ li a3, 122
+ li x29, 16
+test7:
+ sw a3, 0(a0)
+ lr.w a5, (a0)
+ sc.w a2, a1, (a0)
+ bne a5, a3, fail
+ bne a2, x0, fail
+ lw a4, 0(a0)
+ bne a1, a4, fail
+ add x29, x29, -1
+ add a0, a0, 4
+ add a1, a1, 3
+ add a2, a2, 3
+ add a3, a3, 3
+ bnez x29, test7
+
+
+//Test 8 SC on discarded entries should fail
+ /* li x28, 8
+ li a0, 0x10000018
+ li a1, 120
+ li a2, 121
+ li a3, 122
+ lw a5, 0(a0)
+ sc.w a2, a1, (a0)
+ li a4, 1
+ bne a2, a4, fail
+ lw a4, 0(a0)
+ bne a5, a4, fail*/
+
+
+test9: //Test 9 SC should pass after a context switching
+ li x28, 9
+ li a0, 0x10000100
+ li a1, 123
+ li a2, 124
+ li a3, 125
+ sw a3, 0(a0)
+ lr.w a5, (a0)
+ scall
+ sc.w a5, a1, (a0)
+ li a4, 0
+ bne a5, a4, fail
+ lw a4, 0(a0)
+ bne a1, a4, fail
+ call flush
+ lw a4, 0(a0)
+ bne a1, a4, fail
+
+
+
+//Test 10 SC should fail if the address doesn't match
+ /* li x28, 10
+ li a0, 0x10000200
+ li a6, 0x10000204
+ li a1, 126
+ li a2, 127
+ li a3, 128
+ li a7, 129
+ sw a3, 0(a0)
+ sw a7, 0(a6)
+ lr.w a5, (a6)
+ sc.w a2, a1, (a0)
+ li a4, 1
+ bne a2, a4, fail
+ lw a4, 0(a6)
+ bne a7, a4, fail*/
+
+
+ j pass
+
+
+fail: //x28 => error code
+ li x2, 0xF00FFF24
+ sw x28, 0(x2)
+
+pass:
+ li x2, 0xF00FFF20
+ sw x0, 0(x2)
+
+
+
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
diff --git a/VexRiscv/src/test/cpp/raw/lrsc/src/ld b/VexRiscv/src/test/cpp/raw/lrsc/src/ld
new file mode 100644
index 0000000..93d8de8
--- /dev/null
+++ b/VexRiscv/src/test/cpp/raw/lrsc/src/ld
@@ -0,0 +1,16 @@
+OUTPUT_ARCH( "riscv" )
+
+MEMORY {
+ onChipRam (W!RX)/*(RX)*/ : ORIGIN = 0x80000000, LENGTH = 128K
+}
+
+SECTIONS
+{
+
+ .crt_section :
+ {
+ . = ALIGN(4);
+ *crt.o(.text)
+ } > onChipRam
+
+}
diff --git a/VexRiscv/src/test/cpp/raw/machineCsr/.gitignore b/VexRiscv/src/test/cpp/raw/machineCsr/.gitignore
new file mode 100644
index 0000000..c12cb2c
--- /dev/null
+++ b/VexRiscv/src/test/cpp/raw/machineCsr/.gitignore
@@ -0,0 +1,4 @@
+*.map
+*.v
+*.elf
+*.o \ No newline at end of file
diff --git a/VexRiscv/src/test/cpp/raw/machineCsr/build/machineCsr.asm b/VexRiscv/src/test/cpp/raw/machineCsr/build/machineCsr.asm
new file mode 100644
index 0000000..679be70
--- /dev/null
+++ b/VexRiscv/src/test/cpp/raw/machineCsr/build/machineCsr.asm
@@ -0,0 +1,155 @@
+
+build/machineCsr.elf: file format elf32-littleriscv
+
+
+Disassembly of section .crt_section:
+
+80000000 <trap_entry-0x20>:
+80000000: 0940006f j 80000094 <_start>
+80000004: 00000013 nop
+80000008: 00000013 nop
+8000000c: 00000013 nop
+80000010: 00000013 nop
+80000014: 00000013 nop
+80000018: 00000013 nop
+8000001c: 00000013 nop
+
+80000020 <trap_entry>:
+80000020: 34202e73 csrr t3,mcause
+80000024: 000e1e63 bnez t3,80000040 <notICmdAlignementException>
+80000028: ffc00f13 li t5,-4
+8000002c: 34102ef3 csrr t4,mepc
+80000030: 01eefeb3 and t4,t4,t5
+80000034: 004e8e93 addi t4,t4,4
+80000038: 341e9073 csrw mepc,t4
+8000003c: 01c0006f j 80000058 <mepcFixed>
+
+80000040 <notICmdAlignementException>:
+80000040: 80000eb7 lui t4,0x80000
+80000044: 01de7f33 and t5,t3,t4
+80000048: 000f1863 bnez t5,80000058 <mepcFixed>
+8000004c: 34102ef3 csrr t4,mepc
+80000050: 004e8e93 addi t4,t4,4 # 80000004 <unalignedPcA+0xfffffe28>
+80000054: 341e9073 csrw mepc,t4
+
+80000058 <mepcFixed>:
+80000058: 80000eb7 lui t4,0x80000
+8000005c: 003e8e93 addi t4,t4,3 # 80000003 <unalignedPcA+0xfffffe27>
+80000060: 01ce9863 bne t4,t3,80000070 <noSoftwareInterrupt>
+80000064: f0013c37 lui s8,0xf0013
+80000068: 00000c93 li s9,0
+8000006c: 019c2023 sw s9,0(s8) # f0013000 <unalignedPcA+0x70012e24>
+
+80000070 <noSoftwareInterrupt>:
+80000070: 80000eb7 lui t4,0x80000
+80000074: 007e8e93 addi t4,t4,7 # 80000007 <unalignedPcA+0xfffffe2b>
+80000078: 01ce9463 bne t4,t3,80000080 <noTimerInterrupt>
+8000007c: 30405073 csrwi mie,0
+
+80000080 <noTimerInterrupt>:
+80000080: 80000eb7 lui t4,0x80000
+80000084: 00be8e93 addi t4,t4,11 # 8000000b <unalignedPcA+0xfffffe2f>
+80000088: 01ce9463 bne t4,t3,80000090 <noExernalInterrupt>
+8000008c: 30405073 csrwi mie,0
+
+80000090 <noExernalInterrupt>:
+80000090: 30200073 mret
+
+80000094 <_start>:
+80000094: 00100e13 li t3,1
+80000098: 00000073 ecall
+8000009c: 00200e13 li t3,2
+800000a0: 00800293 li t0,8
+800000a4: 3002a073 csrs mstatus,t0
+800000a8: 00800293 li t0,8
+800000ac: 30429073 csrw mie,t0
+800000b0: f0013c37 lui s8,0xf0013
+800000b4: 00100c93 li s9,1
+800000b8: 019c2023 sw s9,0(s8) # f0013000 <unalignedPcA+0x70012e24>
+800000bc: 00000013 nop
+800000c0: 00000013 nop
+800000c4: 00000013 nop
+800000c8: 00000013 nop
+800000cc: 00000013 nop
+800000d0: 00000013 nop
+800000d4: 00000013 nop
+800000d8: 00000013 nop
+800000dc: 00000013 nop
+800000e0: 00000013 nop
+800000e4: 00000013 nop
+800000e8: 00000013 nop
+800000ec: 00300e13 li t3,3
+800000f0: 08000293 li t0,128
+800000f4: 30429073 csrw mie,t0
+800000f8: 00000013 nop
+800000fc: 00000013 nop
+80000100: 00000013 nop
+80000104: 00000013 nop
+80000108: 00000013 nop
+8000010c: 00000013 nop
+80000110: 00000013 nop
+80000114: 00400e13 li t3,4
+80000118: 000012b7 lui t0,0x1
+8000011c: 80028293 addi t0,t0,-2048 # 800 <trap_entry-0x7ffff820>
+80000120: 30429073 csrw mie,t0
+80000124: 00000013 nop
+80000128: 00000013 nop
+8000012c: 00000013 nop
+80000130: 00000013 nop
+80000134: 00000013 nop
+80000138: 00000013 nop
+8000013c: 00000013 nop
+80000140: 00500e13 li t3,5
+80000144: f01001b7 lui gp,0xf0100
+80000148: f4018193 addi gp,gp,-192 # f00fff40 <unalignedPcA+0x700ffd64>
+8000014c: 0001a203 lw tp,0(gp)
+80000150: 0041a283 lw t0,4(gp)
+80000154: 3ff20213 addi tp,tp,1023 # 3ff <trap_entry-0x7ffffc21>
+80000158: 0041a423 sw tp,8(gp)
+8000015c: 0051a623 sw t0,12(gp)
+80000160: 00000013 nop
+80000164: 00000013 nop
+80000168: 00000013 nop
+8000016c: 00000013 nop
+80000170: 00000013 nop
+80000174: 00000013 nop
+80000178: 00000013 nop
+8000017c: 00000013 nop
+80000180: 00000013 nop
+80000184: 00000013 nop
+80000188: 00000013 nop
+8000018c: 00000013 nop
+80000190: 00000013 nop
+80000194: 00000013 nop
+80000198: 00600e13 li t3,6
+8000019c: 08000213 li tp,128
+800001a0: 30421073 csrw mie,tp
+800001a4: 00700e13 li t3,7
+800001a8: 10500073 wfi
+800001ac: 00800e13 li t3,8
+800001b0: 00100193 li gp,1
+800001b4: 0041a023 sw tp,0(gp)
+800001b8: 00900e13 li t3,9
+800001bc: 00419023 sh tp,0(gp)
+800001c0: 00a00e13 li t3,10
+800001c4: 0001a203 lw tp,0(gp)
+800001c8: 00b00e13 li t3,11
+800001cc: 00019203 lh tp,0(gp)
+800001d0: 00c00e13 li t3,12
+800001d4: 00d00e13 li t3,13
+800001d8: 00002083 lw ra,0(zero) # 0 <trap_entry-0x80000020>
+
+800001dc <unalignedPcA>:
+800001dc: 0020006f j 800001de <unalignedPcA+0x2>
+800001e0: 00002083 lw ra,0(zero) # 0 <trap_entry-0x80000020>
+800001e4: 00e00e13 li t3,14
+800001e8: 20200073 hret
+800001ec: 00f00e13 li t3,15
+800001f0: f01000b7 lui ra,0xf0100
+800001f4: f6008093 addi ra,ra,-160 # f00fff60 <unalignedPcA+0x700ffd84>
+800001f8: 0000a103 lw sp,0(ra)
+800001fc: 01000e13 li t3,16
+80000200: 0020a023 sw sp,0(ra)
+80000204: 01100e13 li t3,17
+80000208: 00008067 ret
+ ...
diff --git a/VexRiscv/src/test/cpp/raw/machineCsr/build/machineCsr.hex b/VexRiscv/src/test/cpp/raw/machineCsr/build/machineCsr.hex
new file mode 100644
index 0000000..d6c33e7
--- /dev/null
+++ b/VexRiscv/src/test/cpp/raw/machineCsr/build/machineCsr.hex
@@ -0,0 +1,37 @@
+:0200000480007A
+:100000006F004009130000001300000013000000FF
+:100010001300000013000000130000001300000094
+:10002000732E2034631E0E00130FC0FFF32E103406
+:10003000B3FEEE01938E4E0073901E346F00C0012C
+:10004000B70E0080337FDE0163180F00F32E1034EB
+:10005000938E4E0073901E34B70E0080938E3E0038
+:100060006398CE01373C01F0930C000023209C01E3
+:10007000B70E0080938E7E006394CE0173504030A3
+:10008000B70E0080938EBE006394CE017350403053
+:1000900073002030130E100073000000130E2000B8
+:1000A0009302800073A0023093028000739042306C
+:1000B000373C01F0930C100023209C01130000003A
+:1000C00013000000130000001300000013000000E4
+:1000D00013000000130000001300000013000000D4
+:1000E000130000001300000013000000130E300086
+:1000F00093020008739042301300000013000000C8
+:1001000013000000130000001300000013000000A3
+:1001100013000000130E4000B7120000938202800B
+:100120007390423013000000130000001300000021
+:100130001300000013000000130000001300000073
+:10014000130E5000B70110F0938101F403A20100D7
+:1001500083A241001302F23F23A4410023A65100D1
+:100160001300000013000000130000001300000043
+:100170001300000013000000130000001300000033
+:100180001300000013000000130000001300000023
+:100190001300000013000000130E6000130200089B
+:1001A00073104230130E700073005010130E800055
+:1001B0009301100023A04100130E900023904100F2
+:1001C000130EA00003A20100130EB0000392010061
+:1001D000130EC000130ED000832000006F0020001B
+:1001E00083200000130EE00073002020130EF000A7
+:1001F000B70010F0938000F603A10000130E000179
+:1002000023A02000130E10016780000000000000F2
+:1002100000000000000000000000000000000000DE
+:0400000580000094E3
+:00000001FF
diff --git a/VexRiscv/src/test/cpp/raw/machineCsr/build/machineCsrCompressed.asm b/VexRiscv/src/test/cpp/raw/machineCsr/build/machineCsrCompressed.asm
new file mode 100644
index 0000000..097f4e3
--- /dev/null
+++ b/VexRiscv/src/test/cpp/raw/machineCsr/build/machineCsrCompressed.asm
@@ -0,0 +1,155 @@
+
+build/machineCsrCompressed.elf: file format elf32-littleriscv
+
+
+Disassembly of section .crt_section:
+
+80000000 <trap_entry-0x20>:
+80000000: 0940006f j 80000094 <_start>
+80000004: 00000013 nop
+80000008: 00000013 nop
+8000000c: 00000013 nop
+80000010: 00000013 nop
+80000014: 00000013 nop
+80000018: 00000013 nop
+8000001c: 00000013 nop
+
+80000020 <trap_entry>:
+80000020: 34202e73 csrr t3,mcause
+80000024: 000e1e63 bnez t3,80000040 <notICmdAlignementException>
+80000028: ffc00f13 li t5,-4
+8000002c: 34102ef3 csrr t4,mepc
+80000030: 01eefeb3 and t4,t4,t5
+80000034: 004e8e93 addi t4,t4,4
+80000038: 341e9073 csrw mepc,t4
+8000003c: 01c0006f j 80000058 <mepcFixed>
+
+80000040 <notICmdAlignementException>:
+80000040: 80000eb7 lui t4,0x80000
+80000044: 01de7f33 and t5,t3,t4
+80000048: 000f1863 bnez t5,80000058 <mepcFixed>
+8000004c: 34102ef3 csrr t4,mepc
+80000050: 004e8e93 addi t4,t4,4 # 80000004 <unalignedPcA+0xfffffe28>
+80000054: 341e9073 csrw mepc,t4
+
+80000058 <mepcFixed>:
+80000058: 80000eb7 lui t4,0x80000
+8000005c: 003e8e93 addi t4,t4,3 # 80000003 <unalignedPcA+0xfffffe27>
+80000060: 01ce9863 bne t4,t3,80000070 <noSoftwareInterrupt>
+80000064: f0013c37 lui s8,0xf0013
+80000068: 00000c93 li s9,0
+8000006c: 019c2023 sw s9,0(s8) # f0013000 <unalignedPcA+0x70012e24>
+
+80000070 <noSoftwareInterrupt>:
+80000070: 80000eb7 lui t4,0x80000
+80000074: 007e8e93 addi t4,t4,7 # 80000007 <unalignedPcA+0xfffffe2b>
+80000078: 01ce9463 bne t4,t3,80000080 <noTimerInterrupt>
+8000007c: 30405073 csrwi mie,0
+
+80000080 <noTimerInterrupt>:
+80000080: 80000eb7 lui t4,0x80000
+80000084: 00be8e93 addi t4,t4,11 # 8000000b <unalignedPcA+0xfffffe2f>
+80000088: 01ce9463 bne t4,t3,80000090 <noExernalInterrupt>
+8000008c: 30405073 csrwi mie,0
+
+80000090 <noExernalInterrupt>:
+80000090: 30200073 mret
+
+80000094 <_start>:
+80000094: 00100e13 li t3,1
+80000098: 00000073 ecall
+8000009c: 00200e13 li t3,2
+800000a0: 00800293 li t0,8
+800000a4: 3002a073 csrs mstatus,t0
+800000a8: 00800293 li t0,8
+800000ac: 30429073 csrw mie,t0
+800000b0: f0013c37 lui s8,0xf0013
+800000b4: 00100c93 li s9,1
+800000b8: 019c2023 sw s9,0(s8) # f0013000 <unalignedPcA+0x70012e24>
+800000bc: 00000013 nop
+800000c0: 00000013 nop
+800000c4: 00000013 nop
+800000c8: 00000013 nop
+800000cc: 00000013 nop
+800000d0: 00000013 nop
+800000d4: 00000013 nop
+800000d8: 00000013 nop
+800000dc: 00000013 nop
+800000e0: 00000013 nop
+800000e4: 00000013 nop
+800000e8: 00000013 nop
+800000ec: 00300e13 li t3,3
+800000f0: 08000293 li t0,128
+800000f4: 30429073 csrw mie,t0
+800000f8: 00000013 nop
+800000fc: 00000013 nop
+80000100: 00000013 nop
+80000104: 00000013 nop
+80000108: 00000013 nop
+8000010c: 00000013 nop
+80000110: 00000013 nop
+80000114: 00400e13 li t3,4
+80000118: 000012b7 lui t0,0x1
+8000011c: 80028293 addi t0,t0,-2048 # 800 <trap_entry-0x7ffff820>
+80000120: 30429073 csrw mie,t0
+80000124: 00000013 nop
+80000128: 00000013 nop
+8000012c: 00000013 nop
+80000130: 00000013 nop
+80000134: 00000013 nop
+80000138: 00000013 nop
+8000013c: 00000013 nop
+80000140: 00500e13 li t3,5
+80000144: f01001b7 lui gp,0xf0100
+80000148: f4018193 addi gp,gp,-192 # f00fff40 <unalignedPcA+0x700ffd64>
+8000014c: 0001a203 lw tp,0(gp)
+80000150: 0041a283 lw t0,4(gp)
+80000154: 3ff20213 addi tp,tp,1023 # 3ff <trap_entry-0x7ffffc21>
+80000158: 0041a423 sw tp,8(gp)
+8000015c: 0051a623 sw t0,12(gp)
+80000160: 00000013 nop
+80000164: 00000013 nop
+80000168: 00000013 nop
+8000016c: 00000013 nop
+80000170: 00000013 nop
+80000174: 00000013 nop
+80000178: 00000013 nop
+8000017c: 00000013 nop
+80000180: 00000013 nop
+80000184: 00000013 nop
+80000188: 00000013 nop
+8000018c: 00000013 nop
+80000190: 00000013 nop
+80000194: 00000013 nop
+80000198: 00600e13 li t3,6
+8000019c: 08000213 li tp,128
+800001a0: 30421073 csrw mie,tp
+800001a4: 00700e13 li t3,7
+800001a8: 10500073 wfi
+800001ac: 00800e13 li t3,8
+800001b0: 00100193 li gp,1
+800001b4: 0041a023 sw tp,0(gp)
+800001b8: 00900e13 li t3,9
+800001bc: 00419023 sh tp,0(gp)
+800001c0: 00a00e13 li t3,10
+800001c4: 0001a203 lw tp,0(gp)
+800001c8: 00b00e13 li t3,11
+800001cc: 00019203 lh tp,0(gp)
+800001d0: 00c00e13 li t3,12
+800001d4: 00d00e13 li t3,13
+800001d8: 00002083 lw ra,0(zero) # 0 <trap_entry-0x80000020>
+
+800001dc <unalignedPcA>:
+800001dc: 0020006f j 800001de <unalignedPcA+0x2>
+800001e0: 00002083 lw ra,0(zero) # 0 <trap_entry-0x80000020>
+800001e4: 00e00e13 li t3,14
+800001e8: 20200073 hret
+800001ec: 00f00e13 li t3,15
+800001f0: f01000b7 lui ra,0xf0100
+800001f4: f6008093 addi ra,ra,-160 # f00fff60 <unalignedPcA+0x700ffd84>
+800001f8: 0000a103 lw sp,0(ra)
+800001fc: 01000e13 li t3,16
+80000200: 0020a023 sw sp,0(ra)
+80000204: 01100e13 li t3,17
+80000208: 00008067 ret
+ ...
diff --git a/VexRiscv/src/test/cpp/raw/machineCsr/build/machineCsrCompressed.hex b/VexRiscv/src/test/cpp/raw/machineCsr/build/machineCsrCompressed.hex
new file mode 100644
index 0000000..d6c33e7
--- /dev/null
+++ b/VexRiscv/src/test/cpp/raw/machineCsr/build/machineCsrCompressed.hex
@@ -0,0 +1,37 @@
+:0200000480007A
+:100000006F004009130000001300000013000000FF
+:100010001300000013000000130000001300000094
+:10002000732E2034631E0E00130FC0FFF32E103406
+:10003000B3FEEE01938E4E0073901E346F00C0012C
+:10004000B70E0080337FDE0163180F00F32E1034EB
+:10005000938E4E0073901E34B70E0080938E3E0038
+:100060006398CE01373C01F0930C000023209C01E3
+:10007000B70E0080938E7E006394CE0173504030A3
+:10008000B70E0080938EBE006394CE017350403053
+:1000900073002030130E100073000000130E2000B8
+:1000A0009302800073A0023093028000739042306C
+:1000B000373C01F0930C100023209C01130000003A
+:1000C00013000000130000001300000013000000E4
+:1000D00013000000130000001300000013000000D4
+:1000E000130000001300000013000000130E300086
+:1000F00093020008739042301300000013000000C8
+:1001000013000000130000001300000013000000A3
+:1001100013000000130E4000B7120000938202800B
+:100120007390423013000000130000001300000021
+:100130001300000013000000130000001300000073
+:10014000130E5000B70110F0938101F403A20100D7
+:1001500083A241001302F23F23A4410023A65100D1
+:100160001300000013000000130000001300000043
+:100170001300000013000000130000001300000033
+:100180001300000013000000130000001300000023
+:100190001300000013000000130E6000130200089B
+:1001A00073104230130E700073005010130E800055
+:1001B0009301100023A04100130E900023904100F2
+:1001C000130EA00003A20100130EB0000392010061
+:1001D000130EC000130ED000832000006F0020001B
+:1001E00083200000130EE00073002020130EF000A7
+:1001F000B70010F0938000F603A10000130E000179
+:1002000023A02000130E10016780000000000000F2
+:1002100000000000000000000000000000000000DE
+:0400000580000094E3
+:00000001FF
diff --git a/VexRiscv/src/test/cpp/raw/machineCsr/makefile b/VexRiscv/src/test/cpp/raw/machineCsr/makefile
new file mode 100644
index 0000000..4fc2c84
--- /dev/null
+++ b/VexRiscv/src/test/cpp/raw/machineCsr/makefile
@@ -0,0 +1,11 @@
+ifeq ($(COMPRESSED),yes)
+ PROJ_NAME=machineCsrCompressed
+ CFLAGS=-DCOMPRESSED
+else
+ PROJ_NAME=machineCsr
+endif
+
+
+
+
+include ../common/asm.mk \ No newline at end of file
diff --git a/VexRiscv/src/test/cpp/raw/machineCsr/src/crt.S b/VexRiscv/src/test/cpp/raw/machineCsr/src/crt.S
new file mode 100644
index 0000000..91429db
--- /dev/null
+++ b/VexRiscv/src/test/cpp/raw/machineCsr/src/crt.S
@@ -0,0 +1,157 @@
+ j _start
+
+#define writeSoftwareInterrupt(value) \
+ li x24, 0xF0013000; \
+ li x25, value; \
+ sw x25, 0(x24); \
+
+.align 5
+.global trap_entry
+trap_entry:
+ csrr x28, mcause
+
+ bnez x28, notICmdAlignementException
+ li x30, 0xFFFFFFFC
+ csrr x29, mepc
+ and x29,x29,x30
+ addi x29, x29, 4
+ csrw mepc, x29
+ j mepcFixed
+
+notICmdAlignementException:
+ li x29, 0x80000000
+ and x30, x28, x29
+ bnez x30, mepcFixed
+ csrr x29, mepc
+ addi x29, x29, 4
+ csrw mepc, x29
+mepcFixed:
+
+
+ li x29, 0x80000003u
+ bne x29, x28, noSoftwareInterrupt
+ writeSoftwareInterrupt(0)
+
+noSoftwareInterrupt:
+
+ li x29, 0x80000007u
+ bne x29, x28, noTimerInterrupt
+ csrw mie, 0
+noTimerInterrupt:
+
+ li x29, 0x8000000bu
+ bne x29, x28, noExernalInterrupt
+ csrw mie, 0
+noExernalInterrupt:
+
+ mret
+
+
+ .text
+ .globl _start
+_start:
+ li x28, 1
+ ecall
+
+ li x28, 2
+ li t0, 0x008
+ csrs mstatus,t0
+ li t0, 0x008
+ csrw mie,t0
+ writeSoftwareInterrupt(1)
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+
+
+ li x28, 3
+ li t0, 0x080
+ csrw mie,t0
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+
+ li x28, 4
+ li t0, 0x800
+ csrw mie,t0
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+
+ li x28, 5
+ li x3, 0xF00FFF40
+ lw x4, 0(x3)
+ lw x5, 4(x3)
+ addi x4, x4, 1023
+ sw x4, 8(x3)
+ sw x5, 12(x3)
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+ li x28, 6
+ li x4, 0x080
+ csrw mie,x4
+ li x28, 7
+ wfi
+
+
+ li x28, 8
+ li x3, 1
+ sw x4,0(x3)
+ li x28, 9
+ sh x4,0(x3)
+ li x28, 10
+ lw x4,0(x3)
+ li x28, 11
+ lh x4,0(x3)
+ li x28, 12
+
+
+
+ li x28, 13
+ lw x1,0(x0)
+#ifndef COMPRESSED
+unalignedPcA:
+ j unalignedPcA+2
+#endif
+ lw x1,0(x0)
+
+ li x28, 14
+ hret
+ li x28, 15
+
+
+ li x1, 0xF00FFF60
+ lw x2, 0(x1)
+ li x28, 16
+ sw x2, 0(x1)
+ li x28, 17
+ jr x1
diff --git a/VexRiscv/src/test/cpp/raw/machineCsr/src/ld b/VexRiscv/src/test/cpp/raw/machineCsr/src/ld
new file mode 100644
index 0000000..93d8de8
--- /dev/null
+++ b/VexRiscv/src/test/cpp/raw/machineCsr/src/ld
@@ -0,0 +1,16 @@
+OUTPUT_ARCH( "riscv" )
+
+MEMORY {
+ onChipRam (W!RX)/*(RX)*/ : ORIGIN = 0x80000000, LENGTH = 128K
+}
+
+SECTIONS
+{
+
+ .crt_section :
+ {
+ . = ALIGN(4);
+ *crt.o(.text)
+ } > onChipRam
+
+}
diff --git a/VexRiscv/src/test/cpp/raw/mmu/.gitignore b/VexRiscv/src/test/cpp/raw/mmu/.gitignore
new file mode 100644
index 0000000..c12cb2c
--- /dev/null
+++ b/VexRiscv/src/test/cpp/raw/mmu/.gitignore
@@ -0,0 +1,4 @@
+*.map
+*.v
+*.elf
+*.o \ No newline at end of file
diff --git a/VexRiscv/src/test/cpp/raw/mmu/build/mmu.asm b/VexRiscv/src/test/cpp/raw/mmu/build/mmu.asm
new file mode 100644
index 0000000..9bbf17f
--- /dev/null
+++ b/VexRiscv/src/test/cpp/raw/mmu/build/mmu.asm
@@ -0,0 +1,12430 @@
+
+build/mmu.elf: file format elf32-littleriscv
+
+
+Disassembly of section .crt_section:
+
+80000000 <_start>:
+80000000: 00000e93 li t4,0
+80000004: 00000097 auipc ra,0x0
+80000008: 59008093 addi ra,ra,1424 # 80000594 <trap>
+8000000c: 30509073 csrw mtvec,ra
+
+80000010 <test1>:
+80000010: 00100e13 li t3,1
+80000014: 00007097 auipc ra,0x7
+80000018: fec08093 addi ra,ra,-20 # 80007000 <ROM_2>
+8000001c: 27262137 lui sp,0x27262
+80000020: 52410113 addi sp,sp,1316 # 27262524 <_start-0x58d9dadc>
+80000024: 0040a083 lw ra,4(ra)
+80000028: 54209263 bne ra,sp,8000056c <fail>
+
+8000002c <test2>:
+8000002c: 00200e13 li t3,2
+80000030: 00000097 auipc ra,0x0
+80000034: 02008093 addi ra,ra,32 # 80000050 <test3>
+80000038: 34109073 csrw mepc,ra
+8000003c: 000020b7 lui ra,0x2
+80000040: 80008093 addi ra,ra,-2048 # 1800 <_start-0x7fffe800>
+80000044: 30009073 csrw mstatus,ra
+80000048: 30200073 mret
+8000004c: 5200006f j 8000056c <fail>
+
+80000050 <test3>:
+80000050: 00300e13 li t3,3
+80000054: 000010b7 lui ra,0x1
+80000058: 80008093 addi ra,ra,-2048 # 800 <_start-0x7ffff800>
+8000005c: 30009073 csrw mstatus,ra
+80000060: 00000097 auipc ra,0x0
+80000064: 01408093 addi ra,ra,20 # 80000074 <test4>
+80000068: 34109073 csrw mepc,ra
+8000006c: 30200073 mret
+80000070: 4fc0006f j 8000056c <fail>
+
+80000074 <test4>:
+80000074: 00400e13 li t3,4
+80000078: 00008097 auipc ra,0x8
+8000007c: f8808093 addi ra,ra,-120 # 80008000 <ROM_3>
+80000080: 37363137 lui sp,0x37363
+80000084: 53410113 addi sp,sp,1332 # 37363534 <_start-0x48c9cacc>
+80000088: 0040a083 lw ra,4(ra)
+8000008c: 4e209063 bne ra,sp,8000056c <fail>
+
+80000090 <test5>:
+80000090: 00500e13 li t3,5
+80000094: 00001097 auipc ra,0x1
+80000098: 76c08093 addi ra,ra,1900 # 80001800 <MMU_TABLE_0+0x800>
+8000009c: 00002117 auipc sp,0x2
+800000a0: f6410113 addi sp,sp,-156 # 80002000 <MMU_TABLE_1>
+800000a4: 00215113 srli sp,sp,0x2
+800000a8: 01116113 ori sp,sp,17
+800000ac: 0020a023 sw sp,0(ra)
+800000b0: 00002097 auipc ra,0x2
+800000b4: f5008093 addi ra,ra,-176 # 80002000 <MMU_TABLE_1>
+800000b8: 80000137 lui sp,0x80000
+800000bc: 00215113 srli sp,sp,0x2
+800000c0: 00f16113 ori sp,sp,15
+800000c4: 0020a023 sw sp,0(ra)
+800000c8: 00500e13 li t3,5
+800000cc: 00002097 auipc ra,0x2
+800000d0: 83408093 addi ra,ra,-1996 # 80001900 <MMU_TABLE_0+0x900>
+800000d4: 00003117 auipc sp,0x3
+800000d8: f2c10113 addi sp,sp,-212 # 80003000 <MMU_TABLE_2>
+800000dc: 00215113 srli sp,sp,0x2
+800000e0: 01116113 ori sp,sp,17
+800000e4: 0020a023 sw sp,0(ra)
+800000e8: 00003097 auipc ra,0x3
+800000ec: f4008093 addi ra,ra,-192 # 80003028 <MMU_TABLE_2+0x28>
+800000f0: 00009117 auipc sp,0x9
+800000f4: f1010113 addi sp,sp,-240 # 80009000 <ROM_4>
+800000f8: 00215113 srli sp,sp,0x2
+800000fc: 01f16113 ori sp,sp,31
+80000100: 0020a023 sw sp,0(ra)
+80000104: 00003097 auipc ra,0x3
+80000108: f3c08093 addi ra,ra,-196 # 80003040 <MMU_TABLE_2+0x40>
+8000010c: 0000a117 auipc sp,0xa
+80000110: ef410113 addi sp,sp,-268 # 8000a000 <ROM_5>
+80000114: 00215113 srli sp,sp,0x2
+80000118: 01316113 ori sp,sp,19
+8000011c: 0020a023 sw sp,0(ra)
+80000120: 00003097 auipc ra,0x3
+80000124: f2408093 addi ra,ra,-220 # 80003044 <MMU_TABLE_2+0x44>
+80000128: 0000a117 auipc sp,0xa
+8000012c: ed810113 addi sp,sp,-296 # 8000a000 <ROM_5>
+80000130: 00215113 srli sp,sp,0x2
+80000134: 01716113 ori sp,sp,23
+80000138: 0020a023 sw sp,0(ra)
+8000013c: 00003097 auipc ra,0x3
+80000140: f0c08093 addi ra,ra,-244 # 80003048 <MMU_TABLE_2+0x48>
+80000144: 0000a117 auipc sp,0xa
+80000148: ebc10113 addi sp,sp,-324 # 8000a000 <ROM_5>
+8000014c: 00215113 srli sp,sp,0x2
+80000150: 01916113 ori sp,sp,25
+80000154: 0020a023 sw sp,0(ra)
+80000158: 00003097 auipc ra,0x3
+8000015c: ef408093 addi ra,ra,-268 # 8000304c <MMU_TABLE_2+0x4c>
+80000160: 0000a117 auipc sp,0xa
+80000164: ea010113 addi sp,sp,-352 # 8000a000 <ROM_5>
+80000168: 00215113 srli sp,sp,0x2
+8000016c: 01b16113 ori sp,sp,27
+80000170: 0020a023 sw sp,0(ra)
+80000174: 00003097 auipc ra,0x3
+80000178: edc08093 addi ra,ra,-292 # 80003050 <MMU_TABLE_2+0x50>
+8000017c: 0000a117 auipc sp,0xa
+80000180: e8410113 addi sp,sp,-380 # 8000a000 <ROM_5>
+80000184: 00215113 srli sp,sp,0x2
+80000188: 00f16113 ori sp,sp,15
+8000018c: 0020a023 sw sp,0(ra)
+80000190: 00500e13 li t3,5
+80000194: 00002097 auipc ra,0x2
+80000198: 86c08093 addi ra,ra,-1940 # 80001a00 <MMU_TABLE_0+0xa00>
+8000019c: 00000117 auipc sp,0x0
+800001a0: e6410113 addi sp,sp,-412 # 80000000 <_start>
+800001a4: 00215113 srli sp,sp,0x2
+800001a8: 01f16113 ori sp,sp,31
+800001ac: 0020a023 sw sp,0(ra)
+800001b0: 00500e13 li t3,5
+800001b4: 00002097 auipc ra,0x2
+800001b8: 94c08093 addi ra,ra,-1716 # 80001b00 <MMU_TABLE_0+0xb00>
+800001bc: 0000a023 sw zero,0(ra)
+800001c0: 000400b7 lui ra,0x40
+800001c4: 1000a073 csrs sstatus,ra
+800001c8: 00001097 auipc ra,0x1
+800001cc: e3808093 addi ra,ra,-456 # 80001000 <MMU_TABLE_0>
+800001d0: 00c0d093 srli ra,ra,0xc
+800001d4: 80000137 lui sp,0x80000
+800001d8: 0020e0b3 or ra,ra,sp
+800001dc: 18009073 csrw satp,ra
+
+800001e0 <test6>:
+800001e0: 00600e13 li t3,6
+800001e4: 9000a0b7 lui ra,0x9000a
+800001e8: 00808093 addi ra,ra,8 # 9000a008 <ROM_7+0xfffe008>
+800001ec: 4b4a5137 lui sp,0x4b4a5
+800001f0: 94810113 addi sp,sp,-1720 # 4b4a4948 <_start-0x34b5b6b8>
+800001f4: 0000a083 lw ra,0(ra)
+800001f8: 36209a63 bne ra,sp,8000056c <fail>
+
+800001fc <test7>:
+800001fc: 00700e13 li t3,7
+80000200: 9000a0b7 lui ra,0x9000a
+80000204: 36008093 addi ra,ra,864 # 9000a360 <ROM_7+0xfffe360>
+80000208: aaee0137 lui sp,0xaaee0
+8000020c: 00110113 addi sp,sp,1 # aaee0001 <ROM_7+0x2aed4001>
+80000210: 0020a023 sw sp,0(ra)
+80000214: 0000a083 lw ra,0(ra)
+80000218: 34209a63 bne ra,sp,8000056c <fail>
+
+8000021c <test8>:
+8000021c: 00800e13 li t3,8
+80000220: 2000c097 auipc ra,0x2000c
+80000224: de408093 addi ra,ra,-540 # a000c004 <ROM_7+0x20000004>
+80000228: 77767137 lui sp,0x77767
+8000022c: 57410113 addi sp,sp,1396 # 77767574 <_start-0x8898a8c>
+80000230: 0000a083 lw ra,0(ra)
+80000234: 32209c63 bne ra,sp,8000056c <fail>
+
+80000238 <test9>:
+80000238: 00900e13 li t3,9
+8000023c: a000a0b7 lui ra,0xa000a
+80000240: 36008093 addi ra,ra,864 # a000a360 <ROM_7+0x1fffe360>
+80000244: aaee0137 lui sp,0xaaee0
+80000248: 00210113 addi sp,sp,2 # aaee0002 <ROM_7+0x2aed4002>
+8000024c: 0020a023 sw sp,0(ra)
+80000250: 0000a083 lw ra,0(ra)
+80000254: 30209c63 bne ra,sp,8000056c <fail>
+
+80000258 <test10>:
+80000258: 00a00e13 li t3,10
+8000025c: 18005073 csrwi satp,0
+80000260: 00009097 auipc ra,0x9
+80000264: 10008093 addi ra,ra,256 # 80009360 <ROM_4+0x360>
+80000268: aaee0137 lui sp,0xaaee0
+8000026c: 00110113 addi sp,sp,1 # aaee0001 <ROM_7+0x2aed4001>
+80000270: 0000a083 lw ra,0(ra)
+80000274: 2e209c63 bne ra,sp,8000056c <fail>
+
+80000278 <test11>:
+80000278: 00b00e13 li t3,11
+8000027c: 0000a097 auipc ra,0xa
+80000280: 0e408093 addi ra,ra,228 # 8000a360 <ROM_5+0x360>
+80000284: aaee0137 lui sp,0xaaee0
+80000288: 00210113 addi sp,sp,2 # aaee0002 <ROM_7+0x2aed4002>
+8000028c: 0000a083 lw ra,0(ra)
+80000290: 2c209e63 bne ra,sp,8000056c <fail>
+80000294: 00001097 auipc ra,0x1
+80000298: d6c08093 addi ra,ra,-660 # 80001000 <MMU_TABLE_0>
+8000029c: 00c0d093 srli ra,ra,0xc
+800002a0: 80000137 lui sp,0x80000
+800002a4: 0020e0b3 or ra,ra,sp
+800002a8: 18009073 csrw satp,ra
+
+800002ac <test12>:
+800002ac: 00c00e13 li t3,12
+800002b0: 00100e93 li t4,1
+800002b4: 00000f17 auipc t5,0x0
+800002b8: 010f0f13 addi t5,t5,16 # 800002c4 <test13>
+800002bc: 00000073 ecall
+800002c0: 2ac0006f j 8000056c <fail>
+
+800002c4 <test13>:
+800002c4: 00d00e13 li t3,13
+800002c8: 00000f17 auipc t5,0x0
+800002cc: 014f0f13 addi t5,t5,20 # 800002dc <test14>
+800002d0: b00000b7 lui ra,0xb0000
+800002d4: 0080a083 lw ra,8(ra) # b0000008 <ROM_7+0x2fff4008>
+800002d8: 2940006f j 8000056c <fail>
+
+800002dc <test14>:
+800002dc: 00e00e13 li t3,14
+800002e0: 00000f17 auipc t5,0x0
+800002e4: 014f0f13 addi t5,t5,20 # 800002f4 <test15>
+800002e8: b00000b7 lui ra,0xb0000
+800002ec: 0010a423 sw ra,8(ra) # b0000008 <ROM_7+0x2fff4008>
+800002f0: 27c0006f j 8000056c <fail>
+
+800002f4 <test15>:
+800002f4: 00f00e13 li t3,15
+800002f8: 00000f17 auipc t5,0x0
+800002fc: 014f0f13 addi t5,t5,20 # 8000030c <test15_end>
+80000300: b00000b7 lui ra,0xb0000
+80000304: 00008067 ret
+80000308: 2640006f j 8000056c <fail>
+
+8000030c <test15_end>:
+8000030c: 01000e13 li t3,16
+80000310: 00000e93 li t4,0
+80000314: 900100b7 lui ra,0x90010
+80000318: 00808093 addi ra,ra,8 # 90010008 <ROM_7+0x10004008>
+8000031c: 5b5a6137 lui sp,0x5b5a6
+80000320: 95810113 addi sp,sp,-1704 # 5b5a5958 <_start-0x24a5a6a8>
+80000324: 0000a083 lw ra,0(ra)
+80000328: 24209263 bne ra,sp,8000056c <fail>
+8000032c: 900110b7 lui ra,0x90011
+80000330: 00808093 addi ra,ra,8 # 90011008 <ROM_7+0x10005008>
+80000334: 5b5a6137 lui sp,0x5b5a6
+80000338: 95810113 addi sp,sp,-1704 # 5b5a5958 <_start-0x24a5a6a8>
+8000033c: 0000a083 lw ra,0(ra)
+80000340: 22209663 bne ra,sp,8000056c <fail>
+80000344: 900130b7 lui ra,0x90013
+80000348: 00808093 addi ra,ra,8 # 90013008 <ROM_7+0x10007008>
+8000034c: 5b5a6137 lui sp,0x5b5a6
+80000350: 95810113 addi sp,sp,-1704 # 5b5a5958 <_start-0x24a5a6a8>
+80000354: 0000a083 lw ra,0(ra)
+80000358: 20209a63 bne ra,sp,8000056c <fail>
+
+8000035c <test17>:
+8000035c: 01100e13 li t3,17
+80000360: 900110b7 lui ra,0x90011
+80000364: 36008093 addi ra,ra,864 # 90011360 <ROM_7+0x10005360>
+80000368: aaee0137 lui sp,0xaaee0
+8000036c: 00310113 addi sp,sp,3 # aaee0003 <ROM_7+0x2aed4003>
+80000370: 0020a023 sw sp,0(ra)
+80000374: 0000a083 lw ra,0(ra)
+80000378: 1e209a63 bne ra,sp,8000056c <fail>
+
+8000037c <test18>:
+8000037c: 01200e13 li t3,18
+80000380: 00000097 auipc ra,0x0
+80000384: 01808093 addi ra,ra,24 # 80000398 <test18_end>
+80000388: 90012137 lui sp,0x90012
+8000038c: 01010113 addi sp,sp,16 # 90012010 <ROM_7+0x10006010>
+80000390: 00010067 jr sp
+80000394: 1d80006f j 8000056c <fail>
+
+80000398 <test18_end>:
+80000398: 01300e13 li t3,19
+8000039c: 00100e93 li t4,1
+800003a0: 00000f17 auipc t5,0x0
+800003a4: 018f0f13 addi t5,t5,24 # 800003b8 <test19_readTrap>
+800003a8: 900120b7 lui ra,0x90012
+800003ac: 01008093 addi ra,ra,16 # 90012010 <ROM_7+0x10006010>
+800003b0: 0000a083 lw ra,0(ra)
+800003b4: 1b80006f j 8000056c <fail>
+
+800003b8 <test19_readTrap>:
+800003b8: 00000f17 auipc t5,0x0
+800003bc: 018f0f13 addi t5,t5,24 # 800003d0 <test19_writeTrap>
+800003c0: 900130b7 lui ra,0x90013
+800003c4: 01008093 addi ra,ra,16 # 90013010 <ROM_7+0x10007010>
+800003c8: 0010a023 sw ra,0(ra)
+800003cc: 1a00006f j 8000056c <fail>
+
+800003d0 <test19_writeTrap>:
+800003d0: 00000f17 auipc t5,0x0
+800003d4: 018f0f13 addi t5,t5,24 # 800003e8 <test19_executeTrap>
+800003d8: 900110b7 lui ra,0x90011
+800003dc: 01008093 addi ra,ra,16 # 90011010 <ROM_7+0x10005010>
+800003e0: 00008067 ret
+800003e4: 1880006f j 8000056c <fail>
+
+800003e8 <test19_executeTrap>:
+800003e8: 01500e13 li t3,21
+800003ec: 00000e93 li t4,0
+800003f0: 000800b7 lui ra,0x80
+800003f4: 1000a073 csrs sstatus,ra
+800003f8: 900120b7 lui ra,0x90012
+800003fc: 00808093 addi ra,ra,8 # 90012008 <ROM_7+0x10006008>
+80000400: 5b5a6137 lui sp,0x5b5a6
+80000404: 95810113 addi sp,sp,-1704 # 5b5a5958 <_start-0x24a5a6a8>
+80000408: 0000a083 lw ra,0(ra)
+8000040c: 16209063 bne ra,sp,8000056c <fail>
+80000410: 000800b7 lui ra,0x80
+80000414: 1000b073 csrc sstatus,ra
+
+80000418 <test21>:
+80000418: 00000e93 li t4,0
+8000041c: 01400e13 li t3,20
+80000420: 900140b7 lui ra,0x90014
+80000424: 38008093 addi ra,ra,896 # 90014380 <ROM_7+0x10008380>
+80000428: aaee0137 lui sp,0xaaee0
+8000042c: 00510113 addi sp,sp,5 # aaee0005 <ROM_7+0x2aed4005>
+80000430: 0020a023 sw sp,0(ra)
+80000434: 0000a083 lw ra,0(ra)
+80000438: 12209a63 bne ra,sp,8000056c <fail>
+8000043c: 000400b7 lui ra,0x40
+80000440: 1000b073 csrc sstatus,ra
+80000444: 00100e93 li t4,1
+80000448: 00000f17 auipc t5,0x0
+8000044c: 018f0f13 addi t5,t5,24 # 80000460 <test21_pass>
+80000450: 900110b7 lui ra,0x90011
+80000454: 64808093 addi ra,ra,1608 # 90011648 <ROM_7+0x10005648>
+80000458: 0010a023 sw ra,0(ra)
+8000045c: 1100006f j 8000056c <fail>
+
+80000460 <test21_pass>:
+80000460: 03200e13 li t3,50
+80000464: 00000e93 li t4,0
+80000468: 000400b7 lui ra,0x40
+8000046c: 1000a073 csrs sstatus,ra
+80000470: 18002573 csrr a0,satp
+80000474: 18001073 csrw satp,zero
+80000478: 00002097 auipc ra,0x2
+8000047c: b8808093 addi ra,ra,-1144 # 80002000 <MMU_TABLE_1>
+80000480: 80000137 lui sp,0x80000
+80000484: 00215113 srli sp,sp,0x2
+80000488: 01f16113 ori sp,sp,31
+8000048c: 0020a023 sw sp,0(ra)
+80000490: 18051073 csrw satp,a0
+80000494: 10000093 li ra,256
+80000498: 1000b073 csrc sstatus,ra
+8000049c: 00000097 auipc ra,0x0
+800004a0: 01808093 addi ra,ra,24 # 800004b4 <test51>
+800004a4: 14109073 csrw sepc,ra
+800004a8: 12000073 sfence.vma
+800004ac: 10200073 sret
+800004b0: 0bc0006f j 8000056c <fail>
+
+800004b4 <test51>:
+800004b4: 03300e13 li t3,51
+800004b8: 900110b7 lui ra,0x90011
+800004bc: 00808093 addi ra,ra,8 # 90011008 <ROM_7+0x10005008>
+800004c0: 5b5a6137 lui sp,0x5b5a6
+800004c4: 95810113 addi sp,sp,-1704 # 5b5a5958 <_start-0x24a5a6a8>
+800004c8: 0000a083 lw ra,0(ra)
+800004cc: 0a209063 bne ra,sp,8000056c <fail>
+800004d0: a000a0b7 lui ra,0xa000a
+800004d4: 32408093 addi ra,ra,804 # a000a324 <ROM_7+0x1fffe324>
+800004d8: aaee0137 lui sp,0xaaee0
+800004dc: 00810113 addi sp,sp,8 # aaee0008 <ROM_7+0x2aed4008>
+800004e0: 0020a023 sw sp,0(ra)
+800004e4: 0000a083 lw ra,0(ra)
+800004e8: 08209263 bne ra,sp,8000056c <fail>
+
+800004ec <test52>:
+800004ec: 03400e13 li t3,52
+800004f0: 00000097 auipc ra,0x0
+800004f4: 01808093 addi ra,ra,24 # 80000508 <test53>
+800004f8: 90012137 lui sp,0x90012
+800004fc: 01010113 addi sp,sp,16 # 90012010 <ROM_7+0x10006010>
+80000500: 00010067 jr sp
+80000504: 0680006f j 8000056c <fail>
+
+80000508 <test53>:
+80000508: 03500e13 li t3,53
+8000050c: 00100e93 li t4,1
+80000510: 00000f17 auipc t5,0x0
+80000514: 018f0f13 addi t5,t5,24 # 80000528 <test54>
+80000518: 900140b7 lui ra,0x90014
+8000051c: 39008093 addi ra,ra,912 # 90014390 <ROM_7+0x10008390>
+80000520: 00008067 ret
+80000524: 0480006f j 8000056c <fail>
+
+80000528 <test54>:
+80000528: 03600e13 li t3,54
+8000052c: 00100e93 li t4,1
+80000530: 00000f17 auipc t5,0x0
+80000534: 018f0f13 addi t5,t5,24 # 80000548 <test55>
+80000538: 900140b7 lui ra,0x90014
+8000053c: 39408093 addi ra,ra,916 # 90014394 <ROM_7+0x10008394>
+80000540: 0000a083 lw ra,0(ra)
+80000544: 0280006f j 8000056c <fail>
+
+80000548 <test55>:
+80000548: 03700e13 li t3,55
+8000054c: 00100e93 li t4,1
+80000550: 00000f17 auipc t5,0x0
+80000554: 018f0f13 addi t5,t5,24 # 80000568 <test56>
+80000558: 900140b7 lui ra,0x90014
+8000055c: 39808093 addi ra,ra,920 # 90014398 <ROM_7+0x10008398>
+80000560: 0010a023 sw ra,0(ra)
+80000564: 0080006f j 8000056c <fail>
+
+80000568 <test56>:
+80000568: 0180006f j 80000580 <pass>
+
+8000056c <fail>:
+8000056c: 00000e93 li t4,0
+80000570: 00000073 ecall
+
+80000574 <failFence>:
+80000574: f0100137 lui sp,0xf0100
+80000578: f2410113 addi sp,sp,-220 # f00fff24 <ROM_7+0x700f3f24>
+8000057c: 01c12023 sw t3,0(sp)
+
+80000580 <pass>:
+80000580: 00200e93 li t4,2
+80000584: 00000073 ecall
+
+80000588 <passFence>:
+80000588: f0100137 lui sp,0xf0100
+8000058c: f2010113 addi sp,sp,-224 # f00fff20 <ROM_7+0x700f3f20>
+80000590: 00012023 sw zero,0(sp)
+
+80000594 <trap>:
+80000594: fe0e80e3 beqz t4,80000574 <failFence>
+80000598: 342020f3 csrr ra,mcause
+8000059c: 341020f3 csrr ra,mepc
+800005a0: 300020f3 csrr ra,mstatus
+800005a4: 343020f3 csrr ra,mbadaddr
+800005a8: 00200093 li ra,2
+800005ac: fc1e8ee3 beq t4,ra,80000588 <passFence>
+800005b0: 341f1073 csrw mepc,t5
+800005b4: 30200073 mret
+800005b8: 00000013 nop
+800005bc: 00000013 nop
+800005c0: 00000013 nop
+800005c4: 00000013 nop
+800005c8: 00000013 nop
+800005cc: 00000013 nop
+800005d0: 00000013 nop
+800005d4: 00000013 nop
+800005d8: 00000013 nop
+800005dc: 00000013 nop
+800005e0: 00000013 nop
+800005e4: 00000013 nop
+800005e8: 00000013 nop
+800005ec: 00000013 nop
+800005f0: 00000013 nop
+800005f4: 00000013 nop
+800005f8: 00000013 nop
+800005fc: 00000013 nop
+80000600: 00000013 nop
+80000604: 00000013 nop
+80000608: 00000013 nop
+8000060c: 00000013 nop
+80000610: 00000013 nop
+80000614: 00000013 nop
+80000618: 00000013 nop
+8000061c: 00000013 nop
+80000620: 00000013 nop
+80000624: 00000013 nop
+80000628: 00000013 nop
+8000062c: 00000013 nop
+80000630: 00000013 nop
+80000634: 00000013 nop
+80000638: 00000013 nop
+8000063c: 00000013 nop
+80000640: 00000013 nop
+80000644: 00000013 nop
+80000648: 00000013 nop
+8000064c: 00000013 nop
+80000650: 00000013 nop
+80000654: 00000013 nop
+80000658: 00000013 nop
+8000065c: 00000013 nop
+80000660: 00000013 nop
+80000664: 00000013 nop
+80000668: 00000013 nop
+8000066c: 00000013 nop
+80000670: 00000013 nop
+80000674: 00000013 nop
+80000678: 00000013 nop
+8000067c: 00000013 nop
+80000680: 00000013 nop
+80000684: 00000013 nop
+80000688: 00000013 nop
+8000068c: 00000013 nop
+80000690: 00000013 nop
+80000694: 00000013 nop
+80000698: 00000013 nop
+8000069c: 00000013 nop
+800006a0: 00000013 nop
+800006a4: 00000013 nop
+800006a8: 00000013 nop
+800006ac: 00000013 nop
+800006b0: 00000013 nop
+800006b4: 00000013 nop
+800006b8: 00000013 nop
+800006bc: 00000013 nop
+800006c0: 00000013 nop
+800006c4: 00000013 nop
+800006c8: 00000013 nop
+800006cc: 00000013 nop
+800006d0: 00000013 nop
+800006d4: 00000013 nop
+800006d8: 00000013 nop
+800006dc: 00000013 nop
+800006e0: 00000013 nop
+800006e4: 00000013 nop
+800006e8: 00000013 nop
+800006ec: 00000013 nop
+800006f0: 00000013 nop
+800006f4: 00000013 nop
+800006f8: 00000013 nop
+800006fc: 00000013 nop
+80000700: 00000013 nop
+80000704: 00000013 nop
+80000708: 00000013 nop
+8000070c: 00000013 nop
+80000710: 00000013 nop
+80000714: 00000013 nop
+80000718: 00000013 nop
+8000071c: 00000013 nop
+80000720: 00000013 nop
+80000724: 00000013 nop
+80000728: 00000013 nop
+8000072c: 00000013 nop
+80000730: 00000013 nop
+80000734: 00000013 nop
+80000738: 00000013 nop
+8000073c: 00000013 nop
+80000740: 00000013 nop
+80000744: 00000013 nop
+80000748: 00000013 nop
+8000074c: 00000013 nop
+80000750: 00000013 nop
+80000754: 00000013 nop
+80000758: 00000013 nop
+8000075c: 00000013 nop
+80000760: 00000013 nop
+80000764: 00000013 nop
+80000768: 00000013 nop
+8000076c: 00000013 nop
+80000770: 00000013 nop
+80000774: 00000013 nop
+80000778: 00000013 nop
+8000077c: 00000013 nop
+80000780: 00000013 nop
+80000784: 00000013 nop
+80000788: 00000013 nop
+8000078c: 00000013 nop
+80000790: 00000013 nop
+80000794: 00000013 nop
+80000798: 00000013 nop
+8000079c: 00000013 nop
+800007a0: 00000013 nop
+800007a4: 00000013 nop
+800007a8: 00000013 nop
+800007ac: 00000013 nop
+800007b0: 00000013 nop
+800007b4: 00000013 nop
+800007b8: 00000013 nop
+800007bc: 00000013 nop
+800007c0: 00000013 nop
+800007c4: 00000013 nop
+800007c8: 00000013 nop
+800007cc: 00000013 nop
+800007d0: 00000013 nop
+800007d4: 00000013 nop
+800007d8: 00000013 nop
+800007dc: 00000013 nop
+800007e0: 00000013 nop
+800007e4: 00000013 nop
+800007e8: 00000013 nop
+800007ec: 00000013 nop
+800007f0: 00000013 nop
+800007f4: 00000013 nop
+800007f8: 00000013 nop
+800007fc: 00000013 nop
+80000800: 00000013 nop
+80000804: 00000013 nop
+80000808: 00000013 nop
+8000080c: 00000013 nop
+80000810: 00000013 nop
+80000814: 00000013 nop
+80000818: 00000013 nop
+8000081c: 00000013 nop
+80000820: 00000013 nop
+80000824: 00000013 nop
+80000828: 00000013 nop
+8000082c: 00000013 nop
+80000830: 00000013 nop
+80000834: 00000013 nop
+80000838: 00000013 nop
+8000083c: 00000013 nop
+80000840: 00000013 nop
+80000844: 00000013 nop
+80000848: 00000013 nop
+8000084c: 00000013 nop
+80000850: 00000013 nop
+80000854: 00000013 nop
+80000858: 00000013 nop
+8000085c: 00000013 nop
+80000860: 00000013 nop
+80000864: 00000013 nop
+80000868: 00000013 nop
+8000086c: 00000013 nop
+80000870: 00000013 nop
+80000874: 00000013 nop
+80000878: 00000013 nop
+8000087c: 00000013 nop
+80000880: 00000013 nop
+80000884: 00000013 nop
+80000888: 00000013 nop
+8000088c: 00000013 nop
+80000890: 00000013 nop
+80000894: 00000013 nop
+80000898: 00000013 nop
+8000089c: 00000013 nop
+800008a0: 00000013 nop
+800008a4: 00000013 nop
+800008a8: 00000013 nop
+800008ac: 00000013 nop
+800008b0: 00000013 nop
+800008b4: 00000013 nop
+800008b8: 00000013 nop
+800008bc: 00000013 nop
+800008c0: 00000013 nop
+800008c4: 00000013 nop
+800008c8: 00000013 nop
+800008cc: 00000013 nop
+800008d0: 00000013 nop
+800008d4: 00000013 nop
+800008d8: 00000013 nop
+800008dc: 00000013 nop
+800008e0: 00000013 nop
+800008e4: 00000013 nop
+800008e8: 00000013 nop
+800008ec: 00000013 nop
+800008f0: 00000013 nop
+800008f4: 00000013 nop
+800008f8: 00000013 nop
+800008fc: 00000013 nop
+80000900: 00000013 nop
+80000904: 00000013 nop
+80000908: 00000013 nop
+8000090c: 00000013 nop
+80000910: 00000013 nop
+80000914: 00000013 nop
+80000918: 00000013 nop
+8000091c: 00000013 nop
+80000920: 00000013 nop
+80000924: 00000013 nop
+80000928: 00000013 nop
+8000092c: 00000013 nop
+80000930: 00000013 nop
+80000934: 00000013 nop
+80000938: 00000013 nop
+8000093c: 00000013 nop
+80000940: 00000013 nop
+80000944: 00000013 nop
+80000948: 00000013 nop
+8000094c: 00000013 nop
+80000950: 00000013 nop
+80000954: 00000013 nop
+80000958: 00000013 nop
+8000095c: 00000013 nop
+80000960: 00000013 nop
+80000964: 00000013 nop
+80000968: 00000013 nop
+8000096c: 00000013 nop
+80000970: 00000013 nop
+80000974: 00000013 nop
+80000978: 00000013 nop
+8000097c: 00000013 nop
+80000980: 00000013 nop
+80000984: 00000013 nop
+80000988: 00000013 nop
+8000098c: 00000013 nop
+80000990: 00000013 nop
+80000994: 00000013 nop
+80000998: 00000013 nop
+8000099c: 00000013 nop
+800009a0: 00000013 nop
+800009a4: 00000013 nop
+800009a8: 00000013 nop
+800009ac: 00000013 nop
+800009b0: 00000013 nop
+800009b4: 00000013 nop
+800009b8: 00000013 nop
+800009bc: 00000013 nop
+800009c0: 00000013 nop
+800009c4: 00000013 nop
+800009c8: 00000013 nop
+800009cc: 00000013 nop
+800009d0: 00000013 nop
+800009d4: 00000013 nop
+800009d8: 00000013 nop
+800009dc: 00000013 nop
+800009e0: 00000013 nop
+800009e4: 00000013 nop
+800009e8: 00000013 nop
+800009ec: 00000013 nop
+800009f0: 00000013 nop
+800009f4: 00000013 nop
+800009f8: 00000013 nop
+800009fc: 00000013 nop
+80000a00: 00000013 nop
+80000a04: 00000013 nop
+80000a08: 00000013 nop
+80000a0c: 00000013 nop
+80000a10: 00000013 nop
+80000a14: 00000013 nop
+80000a18: 00000013 nop
+80000a1c: 00000013 nop
+80000a20: 00000013 nop
+80000a24: 00000013 nop
+80000a28: 00000013 nop
+80000a2c: 00000013 nop
+80000a30: 00000013 nop
+80000a34: 00000013 nop
+80000a38: 00000013 nop
+80000a3c: 00000013 nop
+80000a40: 00000013 nop
+80000a44: 00000013 nop
+80000a48: 00000013 nop
+80000a4c: 00000013 nop
+80000a50: 00000013 nop
+80000a54: 00000013 nop
+80000a58: 00000013 nop
+80000a5c: 00000013 nop
+80000a60: 00000013 nop
+80000a64: 00000013 nop
+80000a68: 00000013 nop
+80000a6c: 00000013 nop
+80000a70: 00000013 nop
+80000a74: 00000013 nop
+80000a78: 00000013 nop
+80000a7c: 00000013 nop
+80000a80: 00000013 nop
+80000a84: 00000013 nop
+80000a88: 00000013 nop
+80000a8c: 00000013 nop
+80000a90: 00000013 nop
+80000a94: 00000013 nop
+80000a98: 00000013 nop
+80000a9c: 00000013 nop
+80000aa0: 00000013 nop
+80000aa4: 00000013 nop
+80000aa8: 00000013 nop
+80000aac: 00000013 nop
+80000ab0: 00000013 nop
+80000ab4: 00000013 nop
+80000ab8: 00000013 nop
+80000abc: 00000013 nop
+80000ac0: 00000013 nop
+80000ac4: 00000013 nop
+80000ac8: 00000013 nop
+80000acc: 00000013 nop
+80000ad0: 00000013 nop
+80000ad4: 00000013 nop
+80000ad8: 00000013 nop
+80000adc: 00000013 nop
+80000ae0: 00000013 nop
+80000ae4: 00000013 nop
+80000ae8: 00000013 nop
+80000aec: 00000013 nop
+80000af0: 00000013 nop
+80000af4: 00000013 nop
+80000af8: 00000013 nop
+80000afc: 00000013 nop
+80000b00: 00000013 nop
+80000b04: 00000013 nop
+80000b08: 00000013 nop
+80000b0c: 00000013 nop
+80000b10: 00000013 nop
+80000b14: 00000013 nop
+80000b18: 00000013 nop
+80000b1c: 00000013 nop
+80000b20: 00000013 nop
+80000b24: 00000013 nop
+80000b28: 00000013 nop
+80000b2c: 00000013 nop
+80000b30: 00000013 nop
+80000b34: 00000013 nop
+80000b38: 00000013 nop
+80000b3c: 00000013 nop
+80000b40: 00000013 nop
+80000b44: 00000013 nop
+80000b48: 00000013 nop
+80000b4c: 00000013 nop
+80000b50: 00000013 nop
+80000b54: 00000013 nop
+80000b58: 00000013 nop
+80000b5c: 00000013 nop
+80000b60: 00000013 nop
+80000b64: 00000013 nop
+80000b68: 00000013 nop
+80000b6c: 00000013 nop
+80000b70: 00000013 nop
+80000b74: 00000013 nop
+80000b78: 00000013 nop
+80000b7c: 00000013 nop
+80000b80: 00000013 nop
+80000b84: 00000013 nop
+80000b88: 00000013 nop
+80000b8c: 00000013 nop
+80000b90: 00000013 nop
+80000b94: 00000013 nop
+80000b98: 00000013 nop
+80000b9c: 00000013 nop
+80000ba0: 00000013 nop
+80000ba4: 00000013 nop
+80000ba8: 00000013 nop
+80000bac: 00000013 nop
+80000bb0: 00000013 nop
+80000bb4: 00000013 nop
+80000bb8: 00000013 nop
+80000bbc: 00000013 nop
+80000bc0: 00000013 nop
+80000bc4: 00000013 nop
+80000bc8: 00000013 nop
+80000bcc: 00000013 nop
+80000bd0: 00000013 nop
+80000bd4: 00000013 nop
+80000bd8: 00000013 nop
+80000bdc: 00000013 nop
+80000be0: 00000013 nop
+80000be4: 00000013 nop
+80000be8: 00000013 nop
+80000bec: 00000013 nop
+80000bf0: 00000013 nop
+80000bf4: 00000013 nop
+80000bf8: 00000013 nop
+80000bfc: 00000013 nop
+80000c00: 00000013 nop
+80000c04: 00000013 nop
+80000c08: 00000013 nop
+80000c0c: 00000013 nop
+80000c10: 00000013 nop
+80000c14: 00000013 nop
+80000c18: 00000013 nop
+80000c1c: 00000013 nop
+80000c20: 00000013 nop
+80000c24: 00000013 nop
+80000c28: 00000013 nop
+80000c2c: 00000013 nop
+80000c30: 00000013 nop
+80000c34: 00000013 nop
+80000c38: 00000013 nop
+80000c3c: 00000013 nop
+80000c40: 00000013 nop
+80000c44: 00000013 nop
+80000c48: 00000013 nop
+80000c4c: 00000013 nop
+80000c50: 00000013 nop
+80000c54: 00000013 nop
+80000c58: 00000013 nop
+80000c5c: 00000013 nop
+80000c60: 00000013 nop
+80000c64: 00000013 nop
+80000c68: 00000013 nop
+80000c6c: 00000013 nop
+80000c70: 00000013 nop
+80000c74: 00000013 nop
+80000c78: 00000013 nop
+80000c7c: 00000013 nop
+80000c80: 00000013 nop
+80000c84: 00000013 nop
+80000c88: 00000013 nop
+80000c8c: 00000013 nop
+80000c90: 00000013 nop
+80000c94: 00000013 nop
+80000c98: 00000013 nop
+80000c9c: 00000013 nop
+80000ca0: 00000013 nop
+80000ca4: 00000013 nop
+80000ca8: 00000013 nop
+80000cac: 00000013 nop
+80000cb0: 00000013 nop
+80000cb4: 00000013 nop
+80000cb8: 00000013 nop
+80000cbc: 00000013 nop
+80000cc0: 00000013 nop
+80000cc4: 00000013 nop
+80000cc8: 00000013 nop
+80000ccc: 00000013 nop
+80000cd0: 00000013 nop
+80000cd4: 00000013 nop
+80000cd8: 00000013 nop
+80000cdc: 00000013 nop
+80000ce0: 00000013 nop
+80000ce4: 00000013 nop
+80000ce8: 00000013 nop
+80000cec: 00000013 nop
+80000cf0: 00000013 nop
+80000cf4: 00000013 nop
+80000cf8: 00000013 nop
+80000cfc: 00000013 nop
+80000d00: 00000013 nop
+80000d04: 00000013 nop
+80000d08: 00000013 nop
+80000d0c: 00000013 nop
+80000d10: 00000013 nop
+80000d14: 00000013 nop
+80000d18: 00000013 nop
+80000d1c: 00000013 nop
+80000d20: 00000013 nop
+80000d24: 00000013 nop
+80000d28: 00000013 nop
+80000d2c: 00000013 nop
+80000d30: 00000013 nop
+80000d34: 00000013 nop
+80000d38: 00000013 nop
+80000d3c: 00000013 nop
+80000d40: 00000013 nop
+80000d44: 00000013 nop
+80000d48: 00000013 nop
+80000d4c: 00000013 nop
+80000d50: 00000013 nop
+80000d54: 00000013 nop
+80000d58: 00000013 nop
+80000d5c: 00000013 nop
+80000d60: 00000013 nop
+80000d64: 00000013 nop
+80000d68: 00000013 nop
+80000d6c: 00000013 nop
+80000d70: 00000013 nop
+80000d74: 00000013 nop
+80000d78: 00000013 nop
+80000d7c: 00000013 nop
+80000d80: 00000013 nop
+80000d84: 00000013 nop
+80000d88: 00000013 nop
+80000d8c: 00000013 nop
+80000d90: 00000013 nop
+80000d94: 00000013 nop
+80000d98: 00000013 nop
+80000d9c: 00000013 nop
+80000da0: 00000013 nop
+80000da4: 00000013 nop
+80000da8: 00000013 nop
+80000dac: 00000013 nop
+80000db0: 00000013 nop
+80000db4: 00000013 nop
+80000db8: 00000013 nop
+80000dbc: 00000013 nop
+80000dc0: 00000013 nop
+80000dc4: 00000013 nop
+80000dc8: 00000013 nop
+80000dcc: 00000013 nop
+80000dd0: 00000013 nop
+80000dd4: 00000013 nop
+80000dd8: 00000013 nop
+80000ddc: 00000013 nop
+80000de0: 00000013 nop
+80000de4: 00000013 nop
+80000de8: 00000013 nop
+80000dec: 00000013 nop
+80000df0: 00000013 nop
+80000df4: 00000013 nop
+80000df8: 00000013 nop
+80000dfc: 00000013 nop
+80000e00: 00000013 nop
+80000e04: 00000013 nop
+80000e08: 00000013 nop
+80000e0c: 00000013 nop
+80000e10: 00000013 nop
+80000e14: 00000013 nop
+80000e18: 00000013 nop
+80000e1c: 00000013 nop
+80000e20: 00000013 nop
+80000e24: 00000013 nop
+80000e28: 00000013 nop
+80000e2c: 00000013 nop
+80000e30: 00000013 nop
+80000e34: 00000013 nop
+80000e38: 00000013 nop
+80000e3c: 00000013 nop
+80000e40: 00000013 nop
+80000e44: 00000013 nop
+80000e48: 00000013 nop
+80000e4c: 00000013 nop
+80000e50: 00000013 nop
+80000e54: 00000013 nop
+80000e58: 00000013 nop
+80000e5c: 00000013 nop
+80000e60: 00000013 nop
+80000e64: 00000013 nop
+80000e68: 00000013 nop
+80000e6c: 00000013 nop
+80000e70: 00000013 nop
+80000e74: 00000013 nop
+80000e78: 00000013 nop
+80000e7c: 00000013 nop
+80000e80: 00000013 nop
+80000e84: 00000013 nop
+80000e88: 00000013 nop
+80000e8c: 00000013 nop
+80000e90: 00000013 nop
+80000e94: 00000013 nop
+80000e98: 00000013 nop
+80000e9c: 00000013 nop
+80000ea0: 00000013 nop
+80000ea4: 00000013 nop
+80000ea8: 00000013 nop
+80000eac: 00000013 nop
+80000eb0: 00000013 nop
+80000eb4: 00000013 nop
+80000eb8: 00000013 nop
+80000ebc: 00000013 nop
+80000ec0: 00000013 nop
+80000ec4: 00000013 nop
+80000ec8: 00000013 nop
+80000ecc: 00000013 nop
+80000ed0: 00000013 nop
+80000ed4: 00000013 nop
+80000ed8: 00000013 nop
+80000edc: 00000013 nop
+80000ee0: 00000013 nop
+80000ee4: 00000013 nop
+80000ee8: 00000013 nop
+80000eec: 00000013 nop
+80000ef0: 00000013 nop
+80000ef4: 00000013 nop
+80000ef8: 00000013 nop
+80000efc: 00000013 nop
+80000f00: 00000013 nop
+80000f04: 00000013 nop
+80000f08: 00000013 nop
+80000f0c: 00000013 nop
+80000f10: 00000013 nop
+80000f14: 00000013 nop
+80000f18: 00000013 nop
+80000f1c: 00000013 nop
+80000f20: 00000013 nop
+80000f24: 00000013 nop
+80000f28: 00000013 nop
+80000f2c: 00000013 nop
+80000f30: 00000013 nop
+80000f34: 00000013 nop
+80000f38: 00000013 nop
+80000f3c: 00000013 nop
+80000f40: 00000013 nop
+80000f44: 00000013 nop
+80000f48: 00000013 nop
+80000f4c: 00000013 nop
+80000f50: 00000013 nop
+80000f54: 00000013 nop
+80000f58: 00000013 nop
+80000f5c: 00000013 nop
+80000f60: 00000013 nop
+80000f64: 00000013 nop
+80000f68: 00000013 nop
+80000f6c: 00000013 nop
+80000f70: 00000013 nop
+80000f74: 00000013 nop
+80000f78: 00000013 nop
+80000f7c: 00000013 nop
+80000f80: 00000013 nop
+80000f84: 00000013 nop
+80000f88: 00000013 nop
+80000f8c: 00000013 nop
+80000f90: 00000013 nop
+80000f94: 00000013 nop
+80000f98: 00000013 nop
+80000f9c: 00000013 nop
+80000fa0: 00000013 nop
+80000fa4: 00000013 nop
+80000fa8: 00000013 nop
+80000fac: 00000013 nop
+80000fb0: 00000013 nop
+80000fb4: 00000013 nop
+80000fb8: 00000013 nop
+80000fbc: 00000013 nop
+80000fc0: 00000013 nop
+80000fc4: 00000013 nop
+80000fc8: 00000013 nop
+80000fcc: 00000013 nop
+80000fd0: 00000013 nop
+80000fd4: 00000013 nop
+80000fd8: 00000013 nop
+80000fdc: 00000013 nop
+80000fe0: 00000013 nop
+80000fe4: 00000013 nop
+80000fe8: 00000013 nop
+80000fec: 00000013 nop
+80000ff0: 00000013 nop
+80000ff4: 00000013 nop
+80000ff8: 00000013 nop
+80000ffc: 00000013 nop
+
+80001000 <MMU_TABLE_0>:
+80001000: 0000 unimp
+80001002: 0000 unimp
+80001004: 00000013 nop
+80001008: 00000013 nop
+8000100c: 00000013 nop
+80001010: 00000013 nop
+80001014: 00000013 nop
+80001018: 00000013 nop
+8000101c: 00000013 nop
+80001020: 00000013 nop
+80001024: 00000013 nop
+80001028: 00000013 nop
+8000102c: 00000013 nop
+80001030: 00000013 nop
+80001034: 00000013 nop
+80001038: 00000013 nop
+8000103c: 00000013 nop
+80001040: 00000013 nop
+80001044: 00000013 nop
+80001048: 00000013 nop
+8000104c: 00000013 nop
+80001050: 00000013 nop
+80001054: 00000013 nop
+80001058: 00000013 nop
+8000105c: 00000013 nop
+80001060: 00000013 nop
+80001064: 00000013 nop
+80001068: 00000013 nop
+8000106c: 00000013 nop
+80001070: 00000013 nop
+80001074: 00000013 nop
+80001078: 00000013 nop
+8000107c: 00000013 nop
+80001080: 00000013 nop
+80001084: 00000013 nop
+80001088: 00000013 nop
+8000108c: 00000013 nop
+80001090: 00000013 nop
+80001094: 00000013 nop
+80001098: 00000013 nop
+8000109c: 00000013 nop
+800010a0: 00000013 nop
+800010a4: 00000013 nop
+800010a8: 00000013 nop
+800010ac: 00000013 nop
+800010b0: 00000013 nop
+800010b4: 00000013 nop
+800010b8: 00000013 nop
+800010bc: 00000013 nop
+800010c0: 00000013 nop
+800010c4: 00000013 nop
+800010c8: 00000013 nop
+800010cc: 00000013 nop
+800010d0: 00000013 nop
+800010d4: 00000013 nop
+800010d8: 00000013 nop
+800010dc: 00000013 nop
+800010e0: 00000013 nop
+800010e4: 00000013 nop
+800010e8: 00000013 nop
+800010ec: 00000013 nop
+800010f0: 00000013 nop
+800010f4: 00000013 nop
+800010f8: 00000013 nop
+800010fc: 00000013 nop
+80001100: 00000013 nop
+80001104: 00000013 nop
+80001108: 00000013 nop
+8000110c: 00000013 nop
+80001110: 00000013 nop
+80001114: 00000013 nop
+80001118: 00000013 nop
+8000111c: 00000013 nop
+80001120: 00000013 nop
+80001124: 00000013 nop
+80001128: 00000013 nop
+8000112c: 00000013 nop
+80001130: 00000013 nop
+80001134: 00000013 nop
+80001138: 00000013 nop
+8000113c: 00000013 nop
+80001140: 00000013 nop
+80001144: 00000013 nop
+80001148: 00000013 nop
+8000114c: 00000013 nop
+80001150: 00000013 nop
+80001154: 00000013 nop
+80001158: 00000013 nop
+8000115c: 00000013 nop
+80001160: 00000013 nop
+80001164: 00000013 nop
+80001168: 00000013 nop
+8000116c: 00000013 nop
+80001170: 00000013 nop
+80001174: 00000013 nop
+80001178: 00000013 nop
+8000117c: 00000013 nop
+80001180: 00000013 nop
+80001184: 00000013 nop
+80001188: 00000013 nop
+8000118c: 00000013 nop
+80001190: 00000013 nop
+80001194: 00000013 nop
+80001198: 00000013 nop
+8000119c: 00000013 nop
+800011a0: 00000013 nop
+800011a4: 00000013 nop
+800011a8: 00000013 nop
+800011ac: 00000013 nop
+800011b0: 00000013 nop
+800011b4: 00000013 nop
+800011b8: 00000013 nop
+800011bc: 00000013 nop
+800011c0: 00000013 nop
+800011c4: 00000013 nop
+800011c8: 00000013 nop
+800011cc: 00000013 nop
+800011d0: 00000013 nop
+800011d4: 00000013 nop
+800011d8: 00000013 nop
+800011dc: 00000013 nop
+800011e0: 00000013 nop
+800011e4: 00000013 nop
+800011e8: 00000013 nop
+800011ec: 00000013 nop
+800011f0: 00000013 nop
+800011f4: 00000013 nop
+800011f8: 00000013 nop
+800011fc: 00000013 nop
+80001200: 00000013 nop
+80001204: 00000013 nop
+80001208: 00000013 nop
+8000120c: 00000013 nop
+80001210: 00000013 nop
+80001214: 00000013 nop
+80001218: 00000013 nop
+8000121c: 00000013 nop
+80001220: 00000013 nop
+80001224: 00000013 nop
+80001228: 00000013 nop
+8000122c: 00000013 nop
+80001230: 00000013 nop
+80001234: 00000013 nop
+80001238: 00000013 nop
+8000123c: 00000013 nop
+80001240: 00000013 nop
+80001244: 00000013 nop
+80001248: 00000013 nop
+8000124c: 00000013 nop
+80001250: 00000013 nop
+80001254: 00000013 nop
+80001258: 00000013 nop
+8000125c: 00000013 nop
+80001260: 00000013 nop
+80001264: 00000013 nop
+80001268: 00000013 nop
+8000126c: 00000013 nop
+80001270: 00000013 nop
+80001274: 00000013 nop
+80001278: 00000013 nop
+8000127c: 00000013 nop
+80001280: 00000013 nop
+80001284: 00000013 nop
+80001288: 00000013 nop
+8000128c: 00000013 nop
+80001290: 00000013 nop
+80001294: 00000013 nop
+80001298: 00000013 nop
+8000129c: 00000013 nop
+800012a0: 00000013 nop
+800012a4: 00000013 nop
+800012a8: 00000013 nop
+800012ac: 00000013 nop
+800012b0: 00000013 nop
+800012b4: 00000013 nop
+800012b8: 00000013 nop
+800012bc: 00000013 nop
+800012c0: 00000013 nop
+800012c4: 00000013 nop
+800012c8: 00000013 nop
+800012cc: 00000013 nop
+800012d0: 00000013 nop
+800012d4: 00000013 nop
+800012d8: 00000013 nop
+800012dc: 00000013 nop
+800012e0: 00000013 nop
+800012e4: 00000013 nop
+800012e8: 00000013 nop
+800012ec: 00000013 nop
+800012f0: 00000013 nop
+800012f4: 00000013 nop
+800012f8: 00000013 nop
+800012fc: 00000013 nop
+80001300: 00000013 nop
+80001304: 00000013 nop
+80001308: 00000013 nop
+8000130c: 00000013 nop
+80001310: 00000013 nop
+80001314: 00000013 nop
+80001318: 00000013 nop
+8000131c: 00000013 nop
+80001320: 00000013 nop
+80001324: 00000013 nop
+80001328: 00000013 nop
+8000132c: 00000013 nop
+80001330: 00000013 nop
+80001334: 00000013 nop
+80001338: 00000013 nop
+8000133c: 00000013 nop
+80001340: 00000013 nop
+80001344: 00000013 nop
+80001348: 00000013 nop
+8000134c: 00000013 nop
+80001350: 00000013 nop
+80001354: 00000013 nop
+80001358: 00000013 nop
+8000135c: 00000013 nop
+80001360: 00000013 nop
+80001364: 00000013 nop
+80001368: 00000013 nop
+8000136c: 00000013 nop
+80001370: 00000013 nop
+80001374: 00000013 nop
+80001378: 00000013 nop
+8000137c: 00000013 nop
+80001380: 00000013 nop
+80001384: 00000013 nop
+80001388: 00000013 nop
+8000138c: 00000013 nop
+80001390: 00000013 nop
+80001394: 00000013 nop
+80001398: 00000013 nop
+8000139c: 00000013 nop
+800013a0: 00000013 nop
+800013a4: 00000013 nop
+800013a8: 00000013 nop
+800013ac: 00000013 nop
+800013b0: 00000013 nop
+800013b4: 00000013 nop
+800013b8: 00000013 nop
+800013bc: 00000013 nop
+800013c0: 00000013 nop
+800013c4: 00000013 nop
+800013c8: 00000013 nop
+800013cc: 00000013 nop
+800013d0: 00000013 nop
+800013d4: 00000013 nop
+800013d8: 00000013 nop
+800013dc: 00000013 nop
+800013e0: 00000013 nop
+800013e4: 00000013 nop
+800013e8: 00000013 nop
+800013ec: 00000013 nop
+800013f0: 00000013 nop
+800013f4: 00000013 nop
+800013f8: 00000013 nop
+800013fc: 00000013 nop
+80001400: 00000013 nop
+80001404: 00000013 nop
+80001408: 00000013 nop
+8000140c: 00000013 nop
+80001410: 00000013 nop
+80001414: 00000013 nop
+80001418: 00000013 nop
+8000141c: 00000013 nop
+80001420: 00000013 nop
+80001424: 00000013 nop
+80001428: 00000013 nop
+8000142c: 00000013 nop
+80001430: 00000013 nop
+80001434: 00000013 nop
+80001438: 00000013 nop
+8000143c: 00000013 nop
+80001440: 00000013 nop
+80001444: 00000013 nop
+80001448: 00000013 nop
+8000144c: 00000013 nop
+80001450: 00000013 nop
+80001454: 00000013 nop
+80001458: 00000013 nop
+8000145c: 00000013 nop
+80001460: 00000013 nop
+80001464: 00000013 nop
+80001468: 00000013 nop
+8000146c: 00000013 nop
+80001470: 00000013 nop
+80001474: 00000013 nop
+80001478: 00000013 nop
+8000147c: 00000013 nop
+80001480: 00000013 nop
+80001484: 00000013 nop
+80001488: 00000013 nop
+8000148c: 00000013 nop
+80001490: 00000013 nop
+80001494: 00000013 nop
+80001498: 00000013 nop
+8000149c: 00000013 nop
+800014a0: 00000013 nop
+800014a4: 00000013 nop
+800014a8: 00000013 nop
+800014ac: 00000013 nop
+800014b0: 00000013 nop
+800014b4: 00000013 nop
+800014b8: 00000013 nop
+800014bc: 00000013 nop
+800014c0: 00000013 nop
+800014c4: 00000013 nop
+800014c8: 00000013 nop
+800014cc: 00000013 nop
+800014d0: 00000013 nop
+800014d4: 00000013 nop
+800014d8: 00000013 nop
+800014dc: 00000013 nop
+800014e0: 00000013 nop
+800014e4: 00000013 nop
+800014e8: 00000013 nop
+800014ec: 00000013 nop
+800014f0: 00000013 nop
+800014f4: 00000013 nop
+800014f8: 00000013 nop
+800014fc: 00000013 nop
+80001500: 00000013 nop
+80001504: 00000013 nop
+80001508: 00000013 nop
+8000150c: 00000013 nop
+80001510: 00000013 nop
+80001514: 00000013 nop
+80001518: 00000013 nop
+8000151c: 00000013 nop
+80001520: 00000013 nop
+80001524: 00000013 nop
+80001528: 00000013 nop
+8000152c: 00000013 nop
+80001530: 00000013 nop
+80001534: 00000013 nop
+80001538: 00000013 nop
+8000153c: 00000013 nop
+80001540: 00000013 nop
+80001544: 00000013 nop
+80001548: 00000013 nop
+8000154c: 00000013 nop
+80001550: 00000013 nop
+80001554: 00000013 nop
+80001558: 00000013 nop
+8000155c: 00000013 nop
+80001560: 00000013 nop
+80001564: 00000013 nop
+80001568: 00000013 nop
+8000156c: 00000013 nop
+80001570: 00000013 nop
+80001574: 00000013 nop
+80001578: 00000013 nop
+8000157c: 00000013 nop
+80001580: 00000013 nop
+80001584: 00000013 nop
+80001588: 00000013 nop
+8000158c: 00000013 nop
+80001590: 00000013 nop
+80001594: 00000013 nop
+80001598: 00000013 nop
+8000159c: 00000013 nop
+800015a0: 00000013 nop
+800015a4: 00000013 nop
+800015a8: 00000013 nop
+800015ac: 00000013 nop
+800015b0: 00000013 nop
+800015b4: 00000013 nop
+800015b8: 00000013 nop
+800015bc: 00000013 nop
+800015c0: 00000013 nop
+800015c4: 00000013 nop
+800015c8: 00000013 nop
+800015cc: 00000013 nop
+800015d0: 00000013 nop
+800015d4: 00000013 nop
+800015d8: 00000013 nop
+800015dc: 00000013 nop
+800015e0: 00000013 nop
+800015e4: 00000013 nop
+800015e8: 00000013 nop
+800015ec: 00000013 nop
+800015f0: 00000013 nop
+800015f4: 00000013 nop
+800015f8: 00000013 nop
+800015fc: 00000013 nop
+80001600: 00000013 nop
+80001604: 00000013 nop
+80001608: 00000013 nop
+8000160c: 00000013 nop
+80001610: 00000013 nop
+80001614: 00000013 nop
+80001618: 00000013 nop
+8000161c: 00000013 nop
+80001620: 00000013 nop
+80001624: 00000013 nop
+80001628: 00000013 nop
+8000162c: 00000013 nop
+80001630: 00000013 nop
+80001634: 00000013 nop
+80001638: 00000013 nop
+8000163c: 00000013 nop
+80001640: 00000013 nop
+80001644: 00000013 nop
+80001648: 00000013 nop
+8000164c: 00000013 nop
+80001650: 00000013 nop
+80001654: 00000013 nop
+80001658: 00000013 nop
+8000165c: 00000013 nop
+80001660: 00000013 nop
+80001664: 00000013 nop
+80001668: 00000013 nop
+8000166c: 00000013 nop
+80001670: 00000013 nop
+80001674: 00000013 nop
+80001678: 00000013 nop
+8000167c: 00000013 nop
+80001680: 00000013 nop
+80001684: 00000013 nop
+80001688: 00000013 nop
+8000168c: 00000013 nop
+80001690: 00000013 nop
+80001694: 00000013 nop
+80001698: 00000013 nop
+8000169c: 00000013 nop
+800016a0: 00000013 nop
+800016a4: 00000013 nop
+800016a8: 00000013 nop
+800016ac: 00000013 nop
+800016b0: 00000013 nop
+800016b4: 00000013 nop
+800016b8: 00000013 nop
+800016bc: 00000013 nop
+800016c0: 00000013 nop
+800016c4: 00000013 nop
+800016c8: 00000013 nop
+800016cc: 00000013 nop
+800016d0: 00000013 nop
+800016d4: 00000013 nop
+800016d8: 00000013 nop
+800016dc: 00000013 nop
+800016e0: 00000013 nop
+800016e4: 00000013 nop
+800016e8: 00000013 nop
+800016ec: 00000013 nop
+800016f0: 00000013 nop
+800016f4: 00000013 nop
+800016f8: 00000013 nop
+800016fc: 00000013 nop
+80001700: 00000013 nop
+80001704: 00000013 nop
+80001708: 00000013 nop
+8000170c: 00000013 nop
+80001710: 00000013 nop
+80001714: 00000013 nop
+80001718: 00000013 nop
+8000171c: 00000013 nop
+80001720: 00000013 nop
+80001724: 00000013 nop
+80001728: 00000013 nop
+8000172c: 00000013 nop
+80001730: 00000013 nop
+80001734: 00000013 nop
+80001738: 00000013 nop
+8000173c: 00000013 nop
+80001740: 00000013 nop
+80001744: 00000013 nop
+80001748: 00000013 nop
+8000174c: 00000013 nop
+80001750: 00000013 nop
+80001754: 00000013 nop
+80001758: 00000013 nop
+8000175c: 00000013 nop
+80001760: 00000013 nop
+80001764: 00000013 nop
+80001768: 00000013 nop
+8000176c: 00000013 nop
+80001770: 00000013 nop
+80001774: 00000013 nop
+80001778: 00000013 nop
+8000177c: 00000013 nop
+80001780: 00000013 nop
+80001784: 00000013 nop
+80001788: 00000013 nop
+8000178c: 00000013 nop
+80001790: 00000013 nop
+80001794: 00000013 nop
+80001798: 00000013 nop
+8000179c: 00000013 nop
+800017a0: 00000013 nop
+800017a4: 00000013 nop
+800017a8: 00000013 nop
+800017ac: 00000013 nop
+800017b0: 00000013 nop
+800017b4: 00000013 nop
+800017b8: 00000013 nop
+800017bc: 00000013 nop
+800017c0: 00000013 nop
+800017c4: 00000013 nop
+800017c8: 00000013 nop
+800017cc: 00000013 nop
+800017d0: 00000013 nop
+800017d4: 00000013 nop
+800017d8: 00000013 nop
+800017dc: 00000013 nop
+800017e0: 00000013 nop
+800017e4: 00000013 nop
+800017e8: 00000013 nop
+800017ec: 00000013 nop
+800017f0: 00000013 nop
+800017f4: 00000013 nop
+800017f8: 00000013 nop
+800017fc: 00000013 nop
+80001800: 00000013 nop
+80001804: 00000013 nop
+80001808: 00000013 nop
+8000180c: 00000013 nop
+80001810: 00000013 nop
+80001814: 00000013 nop
+80001818: 00000013 nop
+8000181c: 00000013 nop
+80001820: 00000013 nop
+80001824: 00000013 nop
+80001828: 00000013 nop
+8000182c: 00000013 nop
+80001830: 00000013 nop
+80001834: 00000013 nop
+80001838: 00000013 nop
+8000183c: 00000013 nop
+80001840: 00000013 nop
+80001844: 00000013 nop
+80001848: 00000013 nop
+8000184c: 00000013 nop
+80001850: 00000013 nop
+80001854: 00000013 nop
+80001858: 00000013 nop
+8000185c: 00000013 nop
+80001860: 00000013 nop
+80001864: 00000013 nop
+80001868: 00000013 nop
+8000186c: 00000013 nop
+80001870: 00000013 nop
+80001874: 00000013 nop
+80001878: 00000013 nop
+8000187c: 00000013 nop
+80001880: 00000013 nop
+80001884: 00000013 nop
+80001888: 00000013 nop
+8000188c: 00000013 nop
+80001890: 00000013 nop
+80001894: 00000013 nop
+80001898: 00000013 nop
+8000189c: 00000013 nop
+800018a0: 00000013 nop
+800018a4: 00000013 nop
+800018a8: 00000013 nop
+800018ac: 00000013 nop
+800018b0: 00000013 nop
+800018b4: 00000013 nop
+800018b8: 00000013 nop
+800018bc: 00000013 nop
+800018c0: 00000013 nop
+800018c4: 00000013 nop
+800018c8: 00000013 nop
+800018cc: 00000013 nop
+800018d0: 00000013 nop
+800018d4: 00000013 nop
+800018d8: 00000013 nop
+800018dc: 00000013 nop
+800018e0: 00000013 nop
+800018e4: 00000013 nop
+800018e8: 00000013 nop
+800018ec: 00000013 nop
+800018f0: 00000013 nop
+800018f4: 00000013 nop
+800018f8: 00000013 nop
+800018fc: 00000013 nop
+80001900: 00000013 nop
+80001904: 00000013 nop
+80001908: 00000013 nop
+8000190c: 00000013 nop
+80001910: 00000013 nop
+80001914: 00000013 nop
+80001918: 00000013 nop
+8000191c: 00000013 nop
+80001920: 00000013 nop
+80001924: 00000013 nop
+80001928: 00000013 nop
+8000192c: 00000013 nop
+80001930: 00000013 nop
+80001934: 00000013 nop
+80001938: 00000013 nop
+8000193c: 00000013 nop
+80001940: 00000013 nop
+80001944: 00000013 nop
+80001948: 00000013 nop
+8000194c: 00000013 nop
+80001950: 00000013 nop
+80001954: 00000013 nop
+80001958: 00000013 nop
+8000195c: 00000013 nop
+80001960: 00000013 nop
+80001964: 00000013 nop
+80001968: 00000013 nop
+8000196c: 00000013 nop
+80001970: 00000013 nop
+80001974: 00000013 nop
+80001978: 00000013 nop
+8000197c: 00000013 nop
+80001980: 00000013 nop
+80001984: 00000013 nop
+80001988: 00000013 nop
+8000198c: 00000013 nop
+80001990: 00000013 nop
+80001994: 00000013 nop
+80001998: 00000013 nop
+8000199c: 00000013 nop
+800019a0: 00000013 nop
+800019a4: 00000013 nop
+800019a8: 00000013 nop
+800019ac: 00000013 nop
+800019b0: 00000013 nop
+800019b4: 00000013 nop
+800019b8: 00000013 nop
+800019bc: 00000013 nop
+800019c0: 00000013 nop
+800019c4: 00000013 nop
+800019c8: 00000013 nop
+800019cc: 00000013 nop
+800019d0: 00000013 nop
+800019d4: 00000013 nop
+800019d8: 00000013 nop
+800019dc: 00000013 nop
+800019e0: 00000013 nop
+800019e4: 00000013 nop
+800019e8: 00000013 nop
+800019ec: 00000013 nop
+800019f0: 00000013 nop
+800019f4: 00000013 nop
+800019f8: 00000013 nop
+800019fc: 00000013 nop
+80001a00: 00000013 nop
+80001a04: 00000013 nop
+80001a08: 00000013 nop
+80001a0c: 00000013 nop
+80001a10: 00000013 nop
+80001a14: 00000013 nop
+80001a18: 00000013 nop
+80001a1c: 00000013 nop
+80001a20: 00000013 nop
+80001a24: 00000013 nop
+80001a28: 00000013 nop
+80001a2c: 00000013 nop
+80001a30: 00000013 nop
+80001a34: 00000013 nop
+80001a38: 00000013 nop
+80001a3c: 00000013 nop
+80001a40: 00000013 nop
+80001a44: 00000013 nop
+80001a48: 00000013 nop
+80001a4c: 00000013 nop
+80001a50: 00000013 nop
+80001a54: 00000013 nop
+80001a58: 00000013 nop
+80001a5c: 00000013 nop
+80001a60: 00000013 nop
+80001a64: 00000013 nop
+80001a68: 00000013 nop
+80001a6c: 00000013 nop
+80001a70: 00000013 nop
+80001a74: 00000013 nop
+80001a78: 00000013 nop
+80001a7c: 00000013 nop
+80001a80: 00000013 nop
+80001a84: 00000013 nop
+80001a88: 00000013 nop
+80001a8c: 00000013 nop
+80001a90: 00000013 nop
+80001a94: 00000013 nop
+80001a98: 00000013 nop
+80001a9c: 00000013 nop
+80001aa0: 00000013 nop
+80001aa4: 00000013 nop
+80001aa8: 00000013 nop
+80001aac: 00000013 nop
+80001ab0: 00000013 nop
+80001ab4: 00000013 nop
+80001ab8: 00000013 nop
+80001abc: 00000013 nop
+80001ac0: 00000013 nop
+80001ac4: 00000013 nop
+80001ac8: 00000013 nop
+80001acc: 00000013 nop
+80001ad0: 00000013 nop
+80001ad4: 00000013 nop
+80001ad8: 00000013 nop
+80001adc: 00000013 nop
+80001ae0: 00000013 nop
+80001ae4: 00000013 nop
+80001ae8: 00000013 nop
+80001aec: 00000013 nop
+80001af0: 00000013 nop
+80001af4: 00000013 nop
+80001af8: 00000013 nop
+80001afc: 00000013 nop
+80001b00: 00000013 nop
+80001b04: 00000013 nop
+80001b08: 00000013 nop
+80001b0c: 00000013 nop
+80001b10: 00000013 nop
+80001b14: 00000013 nop
+80001b18: 00000013 nop
+80001b1c: 00000013 nop
+80001b20: 00000013 nop
+80001b24: 00000013 nop
+80001b28: 00000013 nop
+80001b2c: 00000013 nop
+80001b30: 00000013 nop
+80001b34: 00000013 nop
+80001b38: 00000013 nop
+80001b3c: 00000013 nop
+80001b40: 00000013 nop
+80001b44: 00000013 nop
+80001b48: 00000013 nop
+80001b4c: 00000013 nop
+80001b50: 00000013 nop
+80001b54: 00000013 nop
+80001b58: 00000013 nop
+80001b5c: 00000013 nop
+80001b60: 00000013 nop
+80001b64: 00000013 nop
+80001b68: 00000013 nop
+80001b6c: 00000013 nop
+80001b70: 00000013 nop
+80001b74: 00000013 nop
+80001b78: 00000013 nop
+80001b7c: 00000013 nop
+80001b80: 00000013 nop
+80001b84: 00000013 nop
+80001b88: 00000013 nop
+80001b8c: 00000013 nop
+80001b90: 00000013 nop
+80001b94: 00000013 nop
+80001b98: 00000013 nop
+80001b9c: 00000013 nop
+80001ba0: 00000013 nop
+80001ba4: 00000013 nop
+80001ba8: 00000013 nop
+80001bac: 00000013 nop
+80001bb0: 00000013 nop
+80001bb4: 00000013 nop
+80001bb8: 00000013 nop
+80001bbc: 00000013 nop
+80001bc0: 00000013 nop
+80001bc4: 00000013 nop
+80001bc8: 00000013 nop
+80001bcc: 00000013 nop
+80001bd0: 00000013 nop
+80001bd4: 00000013 nop
+80001bd8: 00000013 nop
+80001bdc: 00000013 nop
+80001be0: 00000013 nop
+80001be4: 00000013 nop
+80001be8: 00000013 nop
+80001bec: 00000013 nop
+80001bf0: 00000013 nop
+80001bf4: 00000013 nop
+80001bf8: 00000013 nop
+80001bfc: 00000013 nop
+80001c00: 00000013 nop
+80001c04: 00000013 nop
+80001c08: 00000013 nop
+80001c0c: 00000013 nop
+80001c10: 00000013 nop
+80001c14: 00000013 nop
+80001c18: 00000013 nop
+80001c1c: 00000013 nop
+80001c20: 00000013 nop
+80001c24: 00000013 nop
+80001c28: 00000013 nop
+80001c2c: 00000013 nop
+80001c30: 00000013 nop
+80001c34: 00000013 nop
+80001c38: 00000013 nop
+80001c3c: 00000013 nop
+80001c40: 00000013 nop
+80001c44: 00000013 nop
+80001c48: 00000013 nop
+80001c4c: 00000013 nop
+80001c50: 00000013 nop
+80001c54: 00000013 nop
+80001c58: 00000013 nop
+80001c5c: 00000013 nop
+80001c60: 00000013 nop
+80001c64: 00000013 nop
+80001c68: 00000013 nop
+80001c6c: 00000013 nop
+80001c70: 00000013 nop
+80001c74: 00000013 nop
+80001c78: 00000013 nop
+80001c7c: 00000013 nop
+80001c80: 00000013 nop
+80001c84: 00000013 nop
+80001c88: 00000013 nop
+80001c8c: 00000013 nop
+80001c90: 00000013 nop
+80001c94: 00000013 nop
+80001c98: 00000013 nop
+80001c9c: 00000013 nop
+80001ca0: 00000013 nop
+80001ca4: 00000013 nop
+80001ca8: 00000013 nop
+80001cac: 00000013 nop
+80001cb0: 00000013 nop
+80001cb4: 00000013 nop
+80001cb8: 00000013 nop
+80001cbc: 00000013 nop
+80001cc0: 00000013 nop
+80001cc4: 00000013 nop
+80001cc8: 00000013 nop
+80001ccc: 00000013 nop
+80001cd0: 00000013 nop
+80001cd4: 00000013 nop
+80001cd8: 00000013 nop
+80001cdc: 00000013 nop
+80001ce0: 00000013 nop
+80001ce4: 00000013 nop
+80001ce8: 00000013 nop
+80001cec: 00000013 nop
+80001cf0: 00000013 nop
+80001cf4: 00000013 nop
+80001cf8: 00000013 nop
+80001cfc: 00000013 nop
+80001d00: 00000013 nop
+80001d04: 00000013 nop
+80001d08: 00000013 nop
+80001d0c: 00000013 nop
+80001d10: 00000013 nop
+80001d14: 00000013 nop
+80001d18: 00000013 nop
+80001d1c: 00000013 nop
+80001d20: 00000013 nop
+80001d24: 00000013 nop
+80001d28: 00000013 nop
+80001d2c: 00000013 nop
+80001d30: 00000013 nop
+80001d34: 00000013 nop
+80001d38: 00000013 nop
+80001d3c: 00000013 nop
+80001d40: 00000013 nop
+80001d44: 00000013 nop
+80001d48: 00000013 nop
+80001d4c: 00000013 nop
+80001d50: 00000013 nop
+80001d54: 00000013 nop
+80001d58: 00000013 nop
+80001d5c: 00000013 nop
+80001d60: 00000013 nop
+80001d64: 00000013 nop
+80001d68: 00000013 nop
+80001d6c: 00000013 nop
+80001d70: 00000013 nop
+80001d74: 00000013 nop
+80001d78: 00000013 nop
+80001d7c: 00000013 nop
+80001d80: 00000013 nop
+80001d84: 00000013 nop
+80001d88: 00000013 nop
+80001d8c: 00000013 nop
+80001d90: 00000013 nop
+80001d94: 00000013 nop
+80001d98: 00000013 nop
+80001d9c: 00000013 nop
+80001da0: 00000013 nop
+80001da4: 00000013 nop
+80001da8: 00000013 nop
+80001dac: 00000013 nop
+80001db0: 00000013 nop
+80001db4: 00000013 nop
+80001db8: 00000013 nop
+80001dbc: 00000013 nop
+80001dc0: 00000013 nop
+80001dc4: 00000013 nop
+80001dc8: 00000013 nop
+80001dcc: 00000013 nop
+80001dd0: 00000013 nop
+80001dd4: 00000013 nop
+80001dd8: 00000013 nop
+80001ddc: 00000013 nop
+80001de0: 00000013 nop
+80001de4: 00000013 nop
+80001de8: 00000013 nop
+80001dec: 00000013 nop
+80001df0: 00000013 nop
+80001df4: 00000013 nop
+80001df8: 00000013 nop
+80001dfc: 00000013 nop
+80001e00: 00000013 nop
+80001e04: 00000013 nop
+80001e08: 00000013 nop
+80001e0c: 00000013 nop
+80001e10: 00000013 nop
+80001e14: 00000013 nop
+80001e18: 00000013 nop
+80001e1c: 00000013 nop
+80001e20: 00000013 nop
+80001e24: 00000013 nop
+80001e28: 00000013 nop
+80001e2c: 00000013 nop
+80001e30: 00000013 nop
+80001e34: 00000013 nop
+80001e38: 00000013 nop
+80001e3c: 00000013 nop
+80001e40: 00000013 nop
+80001e44: 00000013 nop
+80001e48: 00000013 nop
+80001e4c: 00000013 nop
+80001e50: 00000013 nop
+80001e54: 00000013 nop
+80001e58: 00000013 nop
+80001e5c: 00000013 nop
+80001e60: 00000013 nop
+80001e64: 00000013 nop
+80001e68: 00000013 nop
+80001e6c: 00000013 nop
+80001e70: 00000013 nop
+80001e74: 00000013 nop
+80001e78: 00000013 nop
+80001e7c: 00000013 nop
+80001e80: 00000013 nop
+80001e84: 00000013 nop
+80001e88: 00000013 nop
+80001e8c: 00000013 nop
+80001e90: 00000013 nop
+80001e94: 00000013 nop
+80001e98: 00000013 nop
+80001e9c: 00000013 nop
+80001ea0: 00000013 nop
+80001ea4: 00000013 nop
+80001ea8: 00000013 nop
+80001eac: 00000013 nop
+80001eb0: 00000013 nop
+80001eb4: 00000013 nop
+80001eb8: 00000013 nop
+80001ebc: 00000013 nop
+80001ec0: 00000013 nop
+80001ec4: 00000013 nop
+80001ec8: 00000013 nop
+80001ecc: 00000013 nop
+80001ed0: 00000013 nop
+80001ed4: 00000013 nop
+80001ed8: 00000013 nop
+80001edc: 00000013 nop
+80001ee0: 00000013 nop
+80001ee4: 00000013 nop
+80001ee8: 00000013 nop
+80001eec: 00000013 nop
+80001ef0: 00000013 nop
+80001ef4: 00000013 nop
+80001ef8: 00000013 nop
+80001efc: 00000013 nop
+80001f00: 00000013 nop
+80001f04: 00000013 nop
+80001f08: 00000013 nop
+80001f0c: 00000013 nop
+80001f10: 00000013 nop
+80001f14: 00000013 nop
+80001f18: 00000013 nop
+80001f1c: 00000013 nop
+80001f20: 00000013 nop
+80001f24: 00000013 nop
+80001f28: 00000013 nop
+80001f2c: 00000013 nop
+80001f30: 00000013 nop
+80001f34: 00000013 nop
+80001f38: 00000013 nop
+80001f3c: 00000013 nop
+80001f40: 00000013 nop
+80001f44: 00000013 nop
+80001f48: 00000013 nop
+80001f4c: 00000013 nop
+80001f50: 00000013 nop
+80001f54: 00000013 nop
+80001f58: 00000013 nop
+80001f5c: 00000013 nop
+80001f60: 00000013 nop
+80001f64: 00000013 nop
+80001f68: 00000013 nop
+80001f6c: 00000013 nop
+80001f70: 00000013 nop
+80001f74: 00000013 nop
+80001f78: 00000013 nop
+80001f7c: 00000013 nop
+80001f80: 00000013 nop
+80001f84: 00000013 nop
+80001f88: 00000013 nop
+80001f8c: 00000013 nop
+80001f90: 00000013 nop
+80001f94: 00000013 nop
+80001f98: 00000013 nop
+80001f9c: 00000013 nop
+80001fa0: 00000013 nop
+80001fa4: 00000013 nop
+80001fa8: 00000013 nop
+80001fac: 00000013 nop
+80001fb0: 00000013 nop
+80001fb4: 00000013 nop
+80001fb8: 00000013 nop
+80001fbc: 00000013 nop
+80001fc0: 00000013 nop
+80001fc4: 00000013 nop
+80001fc8: 00000013 nop
+80001fcc: 00000013 nop
+80001fd0: 00000013 nop
+80001fd4: 00000013 nop
+80001fd8: 00000013 nop
+80001fdc: 00000013 nop
+80001fe0: 00000013 nop
+80001fe4: 00000013 nop
+80001fe8: 00000013 nop
+80001fec: 00000013 nop
+80001ff0: 00000013 nop
+80001ff4: 00000013 nop
+80001ff8: 00000013 nop
+80001ffc: 00000013 nop
+
+80002000 <MMU_TABLE_1>:
+80002000: 0000 unimp
+80002002: 0000 unimp
+80002004: 00000013 nop
+80002008: 00000013 nop
+8000200c: 00000013 nop
+80002010: 00000013 nop
+80002014: 00000013 nop
+80002018: 00000013 nop
+8000201c: 00000013 nop
+80002020: 00000013 nop
+80002024: 00000013 nop
+80002028: 00000013 nop
+8000202c: 00000013 nop
+80002030: 00000013 nop
+80002034: 00000013 nop
+80002038: 00000013 nop
+8000203c: 00000013 nop
+80002040: 00000013 nop
+80002044: 00000013 nop
+80002048: 00000013 nop
+8000204c: 00000013 nop
+80002050: 00000013 nop
+80002054: 00000013 nop
+80002058: 00000013 nop
+8000205c: 00000013 nop
+80002060: 00000013 nop
+80002064: 00000013 nop
+80002068: 00000013 nop
+8000206c: 00000013 nop
+80002070: 00000013 nop
+80002074: 00000013 nop
+80002078: 00000013 nop
+8000207c: 00000013 nop
+80002080: 00000013 nop
+80002084: 00000013 nop
+80002088: 00000013 nop
+8000208c: 00000013 nop
+80002090: 00000013 nop
+80002094: 00000013 nop
+80002098: 00000013 nop
+8000209c: 00000013 nop
+800020a0: 00000013 nop
+800020a4: 00000013 nop
+800020a8: 00000013 nop
+800020ac: 00000013 nop
+800020b0: 00000013 nop
+800020b4: 00000013 nop
+800020b8: 00000013 nop
+800020bc: 00000013 nop
+800020c0: 00000013 nop
+800020c4: 00000013 nop
+800020c8: 00000013 nop
+800020cc: 00000013 nop
+800020d0: 00000013 nop
+800020d4: 00000013 nop
+800020d8: 00000013 nop
+800020dc: 00000013 nop
+800020e0: 00000013 nop
+800020e4: 00000013 nop
+800020e8: 00000013 nop
+800020ec: 00000013 nop
+800020f0: 00000013 nop
+800020f4: 00000013 nop
+800020f8: 00000013 nop
+800020fc: 00000013 nop
+80002100: 00000013 nop
+80002104: 00000013 nop
+80002108: 00000013 nop
+8000210c: 00000013 nop
+80002110: 00000013 nop
+80002114: 00000013 nop
+80002118: 00000013 nop
+8000211c: 00000013 nop
+80002120: 00000013 nop
+80002124: 00000013 nop
+80002128: 00000013 nop
+8000212c: 00000013 nop
+80002130: 00000013 nop
+80002134: 00000013 nop
+80002138: 00000013 nop
+8000213c: 00000013 nop
+80002140: 00000013 nop
+80002144: 00000013 nop
+80002148: 00000013 nop
+8000214c: 00000013 nop
+80002150: 00000013 nop
+80002154: 00000013 nop
+80002158: 00000013 nop
+8000215c: 00000013 nop
+80002160: 00000013 nop
+80002164: 00000013 nop
+80002168: 00000013 nop
+8000216c: 00000013 nop
+80002170: 00000013 nop
+80002174: 00000013 nop
+80002178: 00000013 nop
+8000217c: 00000013 nop
+80002180: 00000013 nop
+80002184: 00000013 nop
+80002188: 00000013 nop
+8000218c: 00000013 nop
+80002190: 00000013 nop
+80002194: 00000013 nop
+80002198: 00000013 nop
+8000219c: 00000013 nop
+800021a0: 00000013 nop
+800021a4: 00000013 nop
+800021a8: 00000013 nop
+800021ac: 00000013 nop
+800021b0: 00000013 nop
+800021b4: 00000013 nop
+800021b8: 00000013 nop
+800021bc: 00000013 nop
+800021c0: 00000013 nop
+800021c4: 00000013 nop
+800021c8: 00000013 nop
+800021cc: 00000013 nop
+800021d0: 00000013 nop
+800021d4: 00000013 nop
+800021d8: 00000013 nop
+800021dc: 00000013 nop
+800021e0: 00000013 nop
+800021e4: 00000013 nop
+800021e8: 00000013 nop
+800021ec: 00000013 nop
+800021f0: 00000013 nop
+800021f4: 00000013 nop
+800021f8: 00000013 nop
+800021fc: 00000013 nop
+80002200: 00000013 nop
+80002204: 00000013 nop
+80002208: 00000013 nop
+8000220c: 00000013 nop
+80002210: 00000013 nop
+80002214: 00000013 nop
+80002218: 00000013 nop
+8000221c: 00000013 nop
+80002220: 00000013 nop
+80002224: 00000013 nop
+80002228: 00000013 nop
+8000222c: 00000013 nop
+80002230: 00000013 nop
+80002234: 00000013 nop
+80002238: 00000013 nop
+8000223c: 00000013 nop
+80002240: 00000013 nop
+80002244: 00000013 nop
+80002248: 00000013 nop
+8000224c: 00000013 nop
+80002250: 00000013 nop
+80002254: 00000013 nop
+80002258: 00000013 nop
+8000225c: 00000013 nop
+80002260: 00000013 nop
+80002264: 00000013 nop
+80002268: 00000013 nop
+8000226c: 00000013 nop
+80002270: 00000013 nop
+80002274: 00000013 nop
+80002278: 00000013 nop
+8000227c: 00000013 nop
+80002280: 00000013 nop
+80002284: 00000013 nop
+80002288: 00000013 nop
+8000228c: 00000013 nop
+80002290: 00000013 nop
+80002294: 00000013 nop
+80002298: 00000013 nop
+8000229c: 00000013 nop
+800022a0: 00000013 nop
+800022a4: 00000013 nop
+800022a8: 00000013 nop
+800022ac: 00000013 nop
+800022b0: 00000013 nop
+800022b4: 00000013 nop
+800022b8: 00000013 nop
+800022bc: 00000013 nop
+800022c0: 00000013 nop
+800022c4: 00000013 nop
+800022c8: 00000013 nop
+800022cc: 00000013 nop
+800022d0: 00000013 nop
+800022d4: 00000013 nop
+800022d8: 00000013 nop
+800022dc: 00000013 nop
+800022e0: 00000013 nop
+800022e4: 00000013 nop
+800022e8: 00000013 nop
+800022ec: 00000013 nop
+800022f0: 00000013 nop
+800022f4: 00000013 nop
+800022f8: 00000013 nop
+800022fc: 00000013 nop
+80002300: 00000013 nop
+80002304: 00000013 nop
+80002308: 00000013 nop
+8000230c: 00000013 nop
+80002310: 00000013 nop
+80002314: 00000013 nop
+80002318: 00000013 nop
+8000231c: 00000013 nop
+80002320: 00000013 nop
+80002324: 00000013 nop
+80002328: 00000013 nop
+8000232c: 00000013 nop
+80002330: 00000013 nop
+80002334: 00000013 nop
+80002338: 00000013 nop
+8000233c: 00000013 nop
+80002340: 00000013 nop
+80002344: 00000013 nop
+80002348: 00000013 nop
+8000234c: 00000013 nop
+80002350: 00000013 nop
+80002354: 00000013 nop
+80002358: 00000013 nop
+8000235c: 00000013 nop
+80002360: 00000013 nop
+80002364: 00000013 nop
+80002368: 00000013 nop
+8000236c: 00000013 nop
+80002370: 00000013 nop
+80002374: 00000013 nop
+80002378: 00000013 nop
+8000237c: 00000013 nop
+80002380: 00000013 nop
+80002384: 00000013 nop
+80002388: 00000013 nop
+8000238c: 00000013 nop
+80002390: 00000013 nop
+80002394: 00000013 nop
+80002398: 00000013 nop
+8000239c: 00000013 nop
+800023a0: 00000013 nop
+800023a4: 00000013 nop
+800023a8: 00000013 nop
+800023ac: 00000013 nop
+800023b0: 00000013 nop
+800023b4: 00000013 nop
+800023b8: 00000013 nop
+800023bc: 00000013 nop
+800023c0: 00000013 nop
+800023c4: 00000013 nop
+800023c8: 00000013 nop
+800023cc: 00000013 nop
+800023d0: 00000013 nop
+800023d4: 00000013 nop
+800023d8: 00000013 nop
+800023dc: 00000013 nop
+800023e0: 00000013 nop
+800023e4: 00000013 nop
+800023e8: 00000013 nop
+800023ec: 00000013 nop
+800023f0: 00000013 nop
+800023f4: 00000013 nop
+800023f8: 00000013 nop
+800023fc: 00000013 nop
+80002400: 00000013 nop
+80002404: 00000013 nop
+80002408: 00000013 nop
+8000240c: 00000013 nop
+80002410: 00000013 nop
+80002414: 00000013 nop
+80002418: 00000013 nop
+8000241c: 00000013 nop
+80002420: 00000013 nop
+80002424: 00000013 nop
+80002428: 00000013 nop
+8000242c: 00000013 nop
+80002430: 00000013 nop
+80002434: 00000013 nop
+80002438: 00000013 nop
+8000243c: 00000013 nop
+80002440: 00000013 nop
+80002444: 00000013 nop
+80002448: 00000013 nop
+8000244c: 00000013 nop
+80002450: 00000013 nop
+80002454: 00000013 nop
+80002458: 00000013 nop
+8000245c: 00000013 nop
+80002460: 00000013 nop
+80002464: 00000013 nop
+80002468: 00000013 nop
+8000246c: 00000013 nop
+80002470: 00000013 nop
+80002474: 00000013 nop
+80002478: 00000013 nop
+8000247c: 00000013 nop
+80002480: 00000013 nop
+80002484: 00000013 nop
+80002488: 00000013 nop
+8000248c: 00000013 nop
+80002490: 00000013 nop
+80002494: 00000013 nop
+80002498: 00000013 nop
+8000249c: 00000013 nop
+800024a0: 00000013 nop
+800024a4: 00000013 nop
+800024a8: 00000013 nop
+800024ac: 00000013 nop
+800024b0: 00000013 nop
+800024b4: 00000013 nop
+800024b8: 00000013 nop
+800024bc: 00000013 nop
+800024c0: 00000013 nop
+800024c4: 00000013 nop
+800024c8: 00000013 nop
+800024cc: 00000013 nop
+800024d0: 00000013 nop
+800024d4: 00000013 nop
+800024d8: 00000013 nop
+800024dc: 00000013 nop
+800024e0: 00000013 nop
+800024e4: 00000013 nop
+800024e8: 00000013 nop
+800024ec: 00000013 nop
+800024f0: 00000013 nop
+800024f4: 00000013 nop
+800024f8: 00000013 nop
+800024fc: 00000013 nop
+80002500: 00000013 nop
+80002504: 00000013 nop
+80002508: 00000013 nop
+8000250c: 00000013 nop
+80002510: 00000013 nop
+80002514: 00000013 nop
+80002518: 00000013 nop
+8000251c: 00000013 nop
+80002520: 00000013 nop
+80002524: 00000013 nop
+80002528: 00000013 nop
+8000252c: 00000013 nop
+80002530: 00000013 nop
+80002534: 00000013 nop
+80002538: 00000013 nop
+8000253c: 00000013 nop
+80002540: 00000013 nop
+80002544: 00000013 nop
+80002548: 00000013 nop
+8000254c: 00000013 nop
+80002550: 00000013 nop
+80002554: 00000013 nop
+80002558: 00000013 nop
+8000255c: 00000013 nop
+80002560: 00000013 nop
+80002564: 00000013 nop
+80002568: 00000013 nop
+8000256c: 00000013 nop
+80002570: 00000013 nop
+80002574: 00000013 nop
+80002578: 00000013 nop
+8000257c: 00000013 nop
+80002580: 00000013 nop
+80002584: 00000013 nop
+80002588: 00000013 nop
+8000258c: 00000013 nop
+80002590: 00000013 nop
+80002594: 00000013 nop
+80002598: 00000013 nop
+8000259c: 00000013 nop
+800025a0: 00000013 nop
+800025a4: 00000013 nop
+800025a8: 00000013 nop
+800025ac: 00000013 nop
+800025b0: 00000013 nop
+800025b4: 00000013 nop
+800025b8: 00000013 nop
+800025bc: 00000013 nop
+800025c0: 00000013 nop
+800025c4: 00000013 nop
+800025c8: 00000013 nop
+800025cc: 00000013 nop
+800025d0: 00000013 nop
+800025d4: 00000013 nop
+800025d8: 00000013 nop
+800025dc: 00000013 nop
+800025e0: 00000013 nop
+800025e4: 00000013 nop
+800025e8: 00000013 nop
+800025ec: 00000013 nop
+800025f0: 00000013 nop
+800025f4: 00000013 nop
+800025f8: 00000013 nop
+800025fc: 00000013 nop
+80002600: 00000013 nop
+80002604: 00000013 nop
+80002608: 00000013 nop
+8000260c: 00000013 nop
+80002610: 00000013 nop
+80002614: 00000013 nop
+80002618: 00000013 nop
+8000261c: 00000013 nop
+80002620: 00000013 nop
+80002624: 00000013 nop
+80002628: 00000013 nop
+8000262c: 00000013 nop
+80002630: 00000013 nop
+80002634: 00000013 nop
+80002638: 00000013 nop
+8000263c: 00000013 nop
+80002640: 00000013 nop
+80002644: 00000013 nop
+80002648: 00000013 nop
+8000264c: 00000013 nop
+80002650: 00000013 nop
+80002654: 00000013 nop
+80002658: 00000013 nop
+8000265c: 00000013 nop
+80002660: 00000013 nop
+80002664: 00000013 nop
+80002668: 00000013 nop
+8000266c: 00000013 nop
+80002670: 00000013 nop
+80002674: 00000013 nop
+80002678: 00000013 nop
+8000267c: 00000013 nop
+80002680: 00000013 nop
+80002684: 00000013 nop
+80002688: 00000013 nop
+8000268c: 00000013 nop
+80002690: 00000013 nop
+80002694: 00000013 nop
+80002698: 00000013 nop
+8000269c: 00000013 nop
+800026a0: 00000013 nop
+800026a4: 00000013 nop
+800026a8: 00000013 nop
+800026ac: 00000013 nop
+800026b0: 00000013 nop
+800026b4: 00000013 nop
+800026b8: 00000013 nop
+800026bc: 00000013 nop
+800026c0: 00000013 nop
+800026c4: 00000013 nop
+800026c8: 00000013 nop
+800026cc: 00000013 nop
+800026d0: 00000013 nop
+800026d4: 00000013 nop
+800026d8: 00000013 nop
+800026dc: 00000013 nop
+800026e0: 00000013 nop
+800026e4: 00000013 nop
+800026e8: 00000013 nop
+800026ec: 00000013 nop
+800026f0: 00000013 nop
+800026f4: 00000013 nop
+800026f8: 00000013 nop
+800026fc: 00000013 nop
+80002700: 00000013 nop
+80002704: 00000013 nop
+80002708: 00000013 nop
+8000270c: 00000013 nop
+80002710: 00000013 nop
+80002714: 00000013 nop
+80002718: 00000013 nop
+8000271c: 00000013 nop
+80002720: 00000013 nop
+80002724: 00000013 nop
+80002728: 00000013 nop
+8000272c: 00000013 nop
+80002730: 00000013 nop
+80002734: 00000013 nop
+80002738: 00000013 nop
+8000273c: 00000013 nop
+80002740: 00000013 nop
+80002744: 00000013 nop
+80002748: 00000013 nop
+8000274c: 00000013 nop
+80002750: 00000013 nop
+80002754: 00000013 nop
+80002758: 00000013 nop
+8000275c: 00000013 nop
+80002760: 00000013 nop
+80002764: 00000013 nop
+80002768: 00000013 nop
+8000276c: 00000013 nop
+80002770: 00000013 nop
+80002774: 00000013 nop
+80002778: 00000013 nop
+8000277c: 00000013 nop
+80002780: 00000013 nop
+80002784: 00000013 nop
+80002788: 00000013 nop
+8000278c: 00000013 nop
+80002790: 00000013 nop
+80002794: 00000013 nop
+80002798: 00000013 nop
+8000279c: 00000013 nop
+800027a0: 00000013 nop
+800027a4: 00000013 nop
+800027a8: 00000013 nop
+800027ac: 00000013 nop
+800027b0: 00000013 nop
+800027b4: 00000013 nop
+800027b8: 00000013 nop
+800027bc: 00000013 nop
+800027c0: 00000013 nop
+800027c4: 00000013 nop
+800027c8: 00000013 nop
+800027cc: 00000013 nop
+800027d0: 00000013 nop
+800027d4: 00000013 nop
+800027d8: 00000013 nop
+800027dc: 00000013 nop
+800027e0: 00000013 nop
+800027e4: 00000013 nop
+800027e8: 00000013 nop
+800027ec: 00000013 nop
+800027f0: 00000013 nop
+800027f4: 00000013 nop
+800027f8: 00000013 nop
+800027fc: 00000013 nop
+80002800: 00000013 nop
+80002804: 00000013 nop
+80002808: 00000013 nop
+8000280c: 00000013 nop
+80002810: 00000013 nop
+80002814: 00000013 nop
+80002818: 00000013 nop
+8000281c: 00000013 nop
+80002820: 00000013 nop
+80002824: 00000013 nop
+80002828: 00000013 nop
+8000282c: 00000013 nop
+80002830: 00000013 nop
+80002834: 00000013 nop
+80002838: 00000013 nop
+8000283c: 00000013 nop
+80002840: 00000013 nop
+80002844: 00000013 nop
+80002848: 00000013 nop
+8000284c: 00000013 nop
+80002850: 00000013 nop
+80002854: 00000013 nop
+80002858: 00000013 nop
+8000285c: 00000013 nop
+80002860: 00000013 nop
+80002864: 00000013 nop
+80002868: 00000013 nop
+8000286c: 00000013 nop
+80002870: 00000013 nop
+80002874: 00000013 nop
+80002878: 00000013 nop
+8000287c: 00000013 nop
+80002880: 00000013 nop
+80002884: 00000013 nop
+80002888: 00000013 nop
+8000288c: 00000013 nop
+80002890: 00000013 nop
+80002894: 00000013 nop
+80002898: 00000013 nop
+8000289c: 00000013 nop
+800028a0: 00000013 nop
+800028a4: 00000013 nop
+800028a8: 00000013 nop
+800028ac: 00000013 nop
+800028b0: 00000013 nop
+800028b4: 00000013 nop
+800028b8: 00000013 nop
+800028bc: 00000013 nop
+800028c0: 00000013 nop
+800028c4: 00000013 nop
+800028c8: 00000013 nop
+800028cc: 00000013 nop
+800028d0: 00000013 nop
+800028d4: 00000013 nop
+800028d8: 00000013 nop
+800028dc: 00000013 nop
+800028e0: 00000013 nop
+800028e4: 00000013 nop
+800028e8: 00000013 nop
+800028ec: 00000013 nop
+800028f0: 00000013 nop
+800028f4: 00000013 nop
+800028f8: 00000013 nop
+800028fc: 00000013 nop
+80002900: 00000013 nop
+80002904: 00000013 nop
+80002908: 00000013 nop
+8000290c: 00000013 nop
+80002910: 00000013 nop
+80002914: 00000013 nop
+80002918: 00000013 nop
+8000291c: 00000013 nop
+80002920: 00000013 nop
+80002924: 00000013 nop
+80002928: 00000013 nop
+8000292c: 00000013 nop
+80002930: 00000013 nop
+80002934: 00000013 nop
+80002938: 00000013 nop
+8000293c: 00000013 nop
+80002940: 00000013 nop
+80002944: 00000013 nop
+80002948: 00000013 nop
+8000294c: 00000013 nop
+80002950: 00000013 nop
+80002954: 00000013 nop
+80002958: 00000013 nop
+8000295c: 00000013 nop
+80002960: 00000013 nop
+80002964: 00000013 nop
+80002968: 00000013 nop
+8000296c: 00000013 nop
+80002970: 00000013 nop
+80002974: 00000013 nop
+80002978: 00000013 nop
+8000297c: 00000013 nop
+80002980: 00000013 nop
+80002984: 00000013 nop
+80002988: 00000013 nop
+8000298c: 00000013 nop
+80002990: 00000013 nop
+80002994: 00000013 nop
+80002998: 00000013 nop
+8000299c: 00000013 nop
+800029a0: 00000013 nop
+800029a4: 00000013 nop
+800029a8: 00000013 nop
+800029ac: 00000013 nop
+800029b0: 00000013 nop
+800029b4: 00000013 nop
+800029b8: 00000013 nop
+800029bc: 00000013 nop
+800029c0: 00000013 nop
+800029c4: 00000013 nop
+800029c8: 00000013 nop
+800029cc: 00000013 nop
+800029d0: 00000013 nop
+800029d4: 00000013 nop
+800029d8: 00000013 nop
+800029dc: 00000013 nop
+800029e0: 00000013 nop
+800029e4: 00000013 nop
+800029e8: 00000013 nop
+800029ec: 00000013 nop
+800029f0: 00000013 nop
+800029f4: 00000013 nop
+800029f8: 00000013 nop
+800029fc: 00000013 nop
+80002a00: 00000013 nop
+80002a04: 00000013 nop
+80002a08: 00000013 nop
+80002a0c: 00000013 nop
+80002a10: 00000013 nop
+80002a14: 00000013 nop
+80002a18: 00000013 nop
+80002a1c: 00000013 nop
+80002a20: 00000013 nop
+80002a24: 00000013 nop
+80002a28: 00000013 nop
+80002a2c: 00000013 nop
+80002a30: 00000013 nop
+80002a34: 00000013 nop
+80002a38: 00000013 nop
+80002a3c: 00000013 nop
+80002a40: 00000013 nop
+80002a44: 00000013 nop
+80002a48: 00000013 nop
+80002a4c: 00000013 nop
+80002a50: 00000013 nop
+80002a54: 00000013 nop
+80002a58: 00000013 nop
+80002a5c: 00000013 nop
+80002a60: 00000013 nop
+80002a64: 00000013 nop
+80002a68: 00000013 nop
+80002a6c: 00000013 nop
+80002a70: 00000013 nop
+80002a74: 00000013 nop
+80002a78: 00000013 nop
+80002a7c: 00000013 nop
+80002a80: 00000013 nop
+80002a84: 00000013 nop
+80002a88: 00000013 nop
+80002a8c: 00000013 nop
+80002a90: 00000013 nop
+80002a94: 00000013 nop
+80002a98: 00000013 nop
+80002a9c: 00000013 nop
+80002aa0: 00000013 nop
+80002aa4: 00000013 nop
+80002aa8: 00000013 nop
+80002aac: 00000013 nop
+80002ab0: 00000013 nop
+80002ab4: 00000013 nop
+80002ab8: 00000013 nop
+80002abc: 00000013 nop
+80002ac0: 00000013 nop
+80002ac4: 00000013 nop
+80002ac8: 00000013 nop
+80002acc: 00000013 nop
+80002ad0: 00000013 nop
+80002ad4: 00000013 nop
+80002ad8: 00000013 nop
+80002adc: 00000013 nop
+80002ae0: 00000013 nop
+80002ae4: 00000013 nop
+80002ae8: 00000013 nop
+80002aec: 00000013 nop
+80002af0: 00000013 nop
+80002af4: 00000013 nop
+80002af8: 00000013 nop
+80002afc: 00000013 nop
+80002b00: 00000013 nop
+80002b04: 00000013 nop
+80002b08: 00000013 nop
+80002b0c: 00000013 nop
+80002b10: 00000013 nop
+80002b14: 00000013 nop
+80002b18: 00000013 nop
+80002b1c: 00000013 nop
+80002b20: 00000013 nop
+80002b24: 00000013 nop
+80002b28: 00000013 nop
+80002b2c: 00000013 nop
+80002b30: 00000013 nop
+80002b34: 00000013 nop
+80002b38: 00000013 nop
+80002b3c: 00000013 nop
+80002b40: 00000013 nop
+80002b44: 00000013 nop
+80002b48: 00000013 nop
+80002b4c: 00000013 nop
+80002b50: 00000013 nop
+80002b54: 00000013 nop
+80002b58: 00000013 nop
+80002b5c: 00000013 nop
+80002b60: 00000013 nop
+80002b64: 00000013 nop
+80002b68: 00000013 nop
+80002b6c: 00000013 nop
+80002b70: 00000013 nop
+80002b74: 00000013 nop
+80002b78: 00000013 nop
+80002b7c: 00000013 nop
+80002b80: 00000013 nop
+80002b84: 00000013 nop
+80002b88: 00000013 nop
+80002b8c: 00000013 nop
+80002b90: 00000013 nop
+80002b94: 00000013 nop
+80002b98: 00000013 nop
+80002b9c: 00000013 nop
+80002ba0: 00000013 nop
+80002ba4: 00000013 nop
+80002ba8: 00000013 nop
+80002bac: 00000013 nop
+80002bb0: 00000013 nop
+80002bb4: 00000013 nop
+80002bb8: 00000013 nop
+80002bbc: 00000013 nop
+80002bc0: 00000013 nop
+80002bc4: 00000013 nop
+80002bc8: 00000013 nop
+80002bcc: 00000013 nop
+80002bd0: 00000013 nop
+80002bd4: 00000013 nop
+80002bd8: 00000013 nop
+80002bdc: 00000013 nop
+80002be0: 00000013 nop
+80002be4: 00000013 nop
+80002be8: 00000013 nop
+80002bec: 00000013 nop
+80002bf0: 00000013 nop
+80002bf4: 00000013 nop
+80002bf8: 00000013 nop
+80002bfc: 00000013 nop
+80002c00: 00000013 nop
+80002c04: 00000013 nop
+80002c08: 00000013 nop
+80002c0c: 00000013 nop
+80002c10: 00000013 nop
+80002c14: 00000013 nop
+80002c18: 00000013 nop
+80002c1c: 00000013 nop
+80002c20: 00000013 nop
+80002c24: 00000013 nop
+80002c28: 00000013 nop
+80002c2c: 00000013 nop
+80002c30: 00000013 nop
+80002c34: 00000013 nop
+80002c38: 00000013 nop
+80002c3c: 00000013 nop
+80002c40: 00000013 nop
+80002c44: 00000013 nop
+80002c48: 00000013 nop
+80002c4c: 00000013 nop
+80002c50: 00000013 nop
+80002c54: 00000013 nop
+80002c58: 00000013 nop
+80002c5c: 00000013 nop
+80002c60: 00000013 nop
+80002c64: 00000013 nop
+80002c68: 00000013 nop
+80002c6c: 00000013 nop
+80002c70: 00000013 nop
+80002c74: 00000013 nop
+80002c78: 00000013 nop
+80002c7c: 00000013 nop
+80002c80: 00000013 nop
+80002c84: 00000013 nop
+80002c88: 00000013 nop
+80002c8c: 00000013 nop
+80002c90: 00000013 nop
+80002c94: 00000013 nop
+80002c98: 00000013 nop
+80002c9c: 00000013 nop
+80002ca0: 00000013 nop
+80002ca4: 00000013 nop
+80002ca8: 00000013 nop
+80002cac: 00000013 nop
+80002cb0: 00000013 nop
+80002cb4: 00000013 nop
+80002cb8: 00000013 nop
+80002cbc: 00000013 nop
+80002cc0: 00000013 nop
+80002cc4: 00000013 nop
+80002cc8: 00000013 nop
+80002ccc: 00000013 nop
+80002cd0: 00000013 nop
+80002cd4: 00000013 nop
+80002cd8: 00000013 nop
+80002cdc: 00000013 nop
+80002ce0: 00000013 nop
+80002ce4: 00000013 nop
+80002ce8: 00000013 nop
+80002cec: 00000013 nop
+80002cf0: 00000013 nop
+80002cf4: 00000013 nop
+80002cf8: 00000013 nop
+80002cfc: 00000013 nop
+80002d00: 00000013 nop
+80002d04: 00000013 nop
+80002d08: 00000013 nop
+80002d0c: 00000013 nop
+80002d10: 00000013 nop
+80002d14: 00000013 nop
+80002d18: 00000013 nop
+80002d1c: 00000013 nop
+80002d20: 00000013 nop
+80002d24: 00000013 nop
+80002d28: 00000013 nop
+80002d2c: 00000013 nop
+80002d30: 00000013 nop
+80002d34: 00000013 nop
+80002d38: 00000013 nop
+80002d3c: 00000013 nop
+80002d40: 00000013 nop
+80002d44: 00000013 nop
+80002d48: 00000013 nop
+80002d4c: 00000013 nop
+80002d50: 00000013 nop
+80002d54: 00000013 nop
+80002d58: 00000013 nop
+80002d5c: 00000013 nop
+80002d60: 00000013 nop
+80002d64: 00000013 nop
+80002d68: 00000013 nop
+80002d6c: 00000013 nop
+80002d70: 00000013 nop
+80002d74: 00000013 nop
+80002d78: 00000013 nop
+80002d7c: 00000013 nop
+80002d80: 00000013 nop
+80002d84: 00000013 nop
+80002d88: 00000013 nop
+80002d8c: 00000013 nop
+80002d90: 00000013 nop
+80002d94: 00000013 nop
+80002d98: 00000013 nop
+80002d9c: 00000013 nop
+80002da0: 00000013 nop
+80002da4: 00000013 nop
+80002da8: 00000013 nop
+80002dac: 00000013 nop
+80002db0: 00000013 nop
+80002db4: 00000013 nop
+80002db8: 00000013 nop
+80002dbc: 00000013 nop
+80002dc0: 00000013 nop
+80002dc4: 00000013 nop
+80002dc8: 00000013 nop
+80002dcc: 00000013 nop
+80002dd0: 00000013 nop
+80002dd4: 00000013 nop
+80002dd8: 00000013 nop
+80002ddc: 00000013 nop
+80002de0: 00000013 nop
+80002de4: 00000013 nop
+80002de8: 00000013 nop
+80002dec: 00000013 nop
+80002df0: 00000013 nop
+80002df4: 00000013 nop
+80002df8: 00000013 nop
+80002dfc: 00000013 nop
+80002e00: 00000013 nop
+80002e04: 00000013 nop
+80002e08: 00000013 nop
+80002e0c: 00000013 nop
+80002e10: 00000013 nop
+80002e14: 00000013 nop
+80002e18: 00000013 nop
+80002e1c: 00000013 nop
+80002e20: 00000013 nop
+80002e24: 00000013 nop
+80002e28: 00000013 nop
+80002e2c: 00000013 nop
+80002e30: 00000013 nop
+80002e34: 00000013 nop
+80002e38: 00000013 nop
+80002e3c: 00000013 nop
+80002e40: 00000013 nop
+80002e44: 00000013 nop
+80002e48: 00000013 nop
+80002e4c: 00000013 nop
+80002e50: 00000013 nop
+80002e54: 00000013 nop
+80002e58: 00000013 nop
+80002e5c: 00000013 nop
+80002e60: 00000013 nop
+80002e64: 00000013 nop
+80002e68: 00000013 nop
+80002e6c: 00000013 nop
+80002e70: 00000013 nop
+80002e74: 00000013 nop
+80002e78: 00000013 nop
+80002e7c: 00000013 nop
+80002e80: 00000013 nop
+80002e84: 00000013 nop
+80002e88: 00000013 nop
+80002e8c: 00000013 nop
+80002e90: 00000013 nop
+80002e94: 00000013 nop
+80002e98: 00000013 nop
+80002e9c: 00000013 nop
+80002ea0: 00000013 nop
+80002ea4: 00000013 nop
+80002ea8: 00000013 nop
+80002eac: 00000013 nop
+80002eb0: 00000013 nop
+80002eb4: 00000013 nop
+80002eb8: 00000013 nop
+80002ebc: 00000013 nop
+80002ec0: 00000013 nop
+80002ec4: 00000013 nop
+80002ec8: 00000013 nop
+80002ecc: 00000013 nop
+80002ed0: 00000013 nop
+80002ed4: 00000013 nop
+80002ed8: 00000013 nop
+80002edc: 00000013 nop
+80002ee0: 00000013 nop
+80002ee4: 00000013 nop
+80002ee8: 00000013 nop
+80002eec: 00000013 nop
+80002ef0: 00000013 nop
+80002ef4: 00000013 nop
+80002ef8: 00000013 nop
+80002efc: 00000013 nop
+80002f00: 00000013 nop
+80002f04: 00000013 nop
+80002f08: 00000013 nop
+80002f0c: 00000013 nop
+80002f10: 00000013 nop
+80002f14: 00000013 nop
+80002f18: 00000013 nop
+80002f1c: 00000013 nop
+80002f20: 00000013 nop
+80002f24: 00000013 nop
+80002f28: 00000013 nop
+80002f2c: 00000013 nop
+80002f30: 00000013 nop
+80002f34: 00000013 nop
+80002f38: 00000013 nop
+80002f3c: 00000013 nop
+80002f40: 00000013 nop
+80002f44: 00000013 nop
+80002f48: 00000013 nop
+80002f4c: 00000013 nop
+80002f50: 00000013 nop
+80002f54: 00000013 nop
+80002f58: 00000013 nop
+80002f5c: 00000013 nop
+80002f60: 00000013 nop
+80002f64: 00000013 nop
+80002f68: 00000013 nop
+80002f6c: 00000013 nop
+80002f70: 00000013 nop
+80002f74: 00000013 nop
+80002f78: 00000013 nop
+80002f7c: 00000013 nop
+80002f80: 00000013 nop
+80002f84: 00000013 nop
+80002f88: 00000013 nop
+80002f8c: 00000013 nop
+80002f90: 00000013 nop
+80002f94: 00000013 nop
+80002f98: 00000013 nop
+80002f9c: 00000013 nop
+80002fa0: 00000013 nop
+80002fa4: 00000013 nop
+80002fa8: 00000013 nop
+80002fac: 00000013 nop
+80002fb0: 00000013 nop
+80002fb4: 00000013 nop
+80002fb8: 00000013 nop
+80002fbc: 00000013 nop
+80002fc0: 00000013 nop
+80002fc4: 00000013 nop
+80002fc8: 00000013 nop
+80002fcc: 00000013 nop
+80002fd0: 00000013 nop
+80002fd4: 00000013 nop
+80002fd8: 00000013 nop
+80002fdc: 00000013 nop
+80002fe0: 00000013 nop
+80002fe4: 00000013 nop
+80002fe8: 00000013 nop
+80002fec: 00000013 nop
+80002ff0: 00000013 nop
+80002ff4: 00000013 nop
+80002ff8: 00000013 nop
+80002ffc: 00000013 nop
+
+80003000 <MMU_TABLE_2>:
+80003000: 0000 unimp
+80003002: 0000 unimp
+80003004: 00000013 nop
+80003008: 00000013 nop
+8000300c: 00000013 nop
+80003010: 00000013 nop
+80003014: 00000013 nop
+80003018: 00000013 nop
+8000301c: 00000013 nop
+80003020: 00000013 nop
+80003024: 00000013 nop
+80003028: 00000013 nop
+8000302c: 00000013 nop
+80003030: 00000013 nop
+80003034: 00000013 nop
+80003038: 00000013 nop
+8000303c: 00000013 nop
+80003040: 00000013 nop
+80003044: 00000013 nop
+80003048: 00000013 nop
+8000304c: 00000013 nop
+80003050: 00000013 nop
+80003054: 00000013 nop
+80003058: 00000013 nop
+8000305c: 00000013 nop
+80003060: 00000013 nop
+80003064: 00000013 nop
+80003068: 00000013 nop
+8000306c: 00000013 nop
+80003070: 00000013 nop
+80003074: 00000013 nop
+80003078: 00000013 nop
+8000307c: 00000013 nop
+80003080: 00000013 nop
+80003084: 00000013 nop
+80003088: 00000013 nop
+8000308c: 00000013 nop
+80003090: 00000013 nop
+80003094: 00000013 nop
+80003098: 00000013 nop
+8000309c: 00000013 nop
+800030a0: 00000013 nop
+800030a4: 00000013 nop
+800030a8: 00000013 nop
+800030ac: 00000013 nop
+800030b0: 00000013 nop
+800030b4: 00000013 nop
+800030b8: 00000013 nop
+800030bc: 00000013 nop
+800030c0: 00000013 nop
+800030c4: 00000013 nop
+800030c8: 00000013 nop
+800030cc: 00000013 nop
+800030d0: 00000013 nop
+800030d4: 00000013 nop
+800030d8: 00000013 nop
+800030dc: 00000013 nop
+800030e0: 00000013 nop
+800030e4: 00000013 nop
+800030e8: 00000013 nop
+800030ec: 00000013 nop
+800030f0: 00000013 nop
+800030f4: 00000013 nop
+800030f8: 00000013 nop
+800030fc: 00000013 nop
+80003100: 00000013 nop
+80003104: 00000013 nop
+80003108: 00000013 nop
+8000310c: 00000013 nop
+80003110: 00000013 nop
+80003114: 00000013 nop
+80003118: 00000013 nop
+8000311c: 00000013 nop
+80003120: 00000013 nop
+80003124: 00000013 nop
+80003128: 00000013 nop
+8000312c: 00000013 nop
+80003130: 00000013 nop
+80003134: 00000013 nop
+80003138: 00000013 nop
+8000313c: 00000013 nop
+80003140: 00000013 nop
+80003144: 00000013 nop
+80003148: 00000013 nop
+8000314c: 00000013 nop
+80003150: 00000013 nop
+80003154: 00000013 nop
+80003158: 00000013 nop
+8000315c: 00000013 nop
+80003160: 00000013 nop
+80003164: 00000013 nop
+80003168: 00000013 nop
+8000316c: 00000013 nop
+80003170: 00000013 nop
+80003174: 00000013 nop
+80003178: 00000013 nop
+8000317c: 00000013 nop
+80003180: 00000013 nop
+80003184: 00000013 nop
+80003188: 00000013 nop
+8000318c: 00000013 nop
+80003190: 00000013 nop
+80003194: 00000013 nop
+80003198: 00000013 nop
+8000319c: 00000013 nop
+800031a0: 00000013 nop
+800031a4: 00000013 nop
+800031a8: 00000013 nop
+800031ac: 00000013 nop
+800031b0: 00000013 nop
+800031b4: 00000013 nop
+800031b8: 00000013 nop
+800031bc: 00000013 nop
+800031c0: 00000013 nop
+800031c4: 00000013 nop
+800031c8: 00000013 nop
+800031cc: 00000013 nop
+800031d0: 00000013 nop
+800031d4: 00000013 nop
+800031d8: 00000013 nop
+800031dc: 00000013 nop
+800031e0: 00000013 nop
+800031e4: 00000013 nop
+800031e8: 00000013 nop
+800031ec: 00000013 nop
+800031f0: 00000013 nop
+800031f4: 00000013 nop
+800031f8: 00000013 nop
+800031fc: 00000013 nop
+80003200: 00000013 nop
+80003204: 00000013 nop
+80003208: 00000013 nop
+8000320c: 00000013 nop
+80003210: 00000013 nop
+80003214: 00000013 nop
+80003218: 00000013 nop
+8000321c: 00000013 nop
+80003220: 00000013 nop
+80003224: 00000013 nop
+80003228: 00000013 nop
+8000322c: 00000013 nop
+80003230: 00000013 nop
+80003234: 00000013 nop
+80003238: 00000013 nop
+8000323c: 00000013 nop
+80003240: 00000013 nop
+80003244: 00000013 nop
+80003248: 00000013 nop
+8000324c: 00000013 nop
+80003250: 00000013 nop
+80003254: 00000013 nop
+80003258: 00000013 nop
+8000325c: 00000013 nop
+80003260: 00000013 nop
+80003264: 00000013 nop
+80003268: 00000013 nop
+8000326c: 00000013 nop
+80003270: 00000013 nop
+80003274: 00000013 nop
+80003278: 00000013 nop
+8000327c: 00000013 nop
+80003280: 00000013 nop
+80003284: 00000013 nop
+80003288: 00000013 nop
+8000328c: 00000013 nop
+80003290: 00000013 nop
+80003294: 00000013 nop
+80003298: 00000013 nop
+8000329c: 00000013 nop
+800032a0: 00000013 nop
+800032a4: 00000013 nop
+800032a8: 00000013 nop
+800032ac: 00000013 nop
+800032b0: 00000013 nop
+800032b4: 00000013 nop
+800032b8: 00000013 nop
+800032bc: 00000013 nop
+800032c0: 00000013 nop
+800032c4: 00000013 nop
+800032c8: 00000013 nop
+800032cc: 00000013 nop
+800032d0: 00000013 nop
+800032d4: 00000013 nop
+800032d8: 00000013 nop
+800032dc: 00000013 nop
+800032e0: 00000013 nop
+800032e4: 00000013 nop
+800032e8: 00000013 nop
+800032ec: 00000013 nop
+800032f0: 00000013 nop
+800032f4: 00000013 nop
+800032f8: 00000013 nop
+800032fc: 00000013 nop
+80003300: 00000013 nop
+80003304: 00000013 nop
+80003308: 00000013 nop
+8000330c: 00000013 nop
+80003310: 00000013 nop
+80003314: 00000013 nop
+80003318: 00000013 nop
+8000331c: 00000013 nop
+80003320: 00000013 nop
+80003324: 00000013 nop
+80003328: 00000013 nop
+8000332c: 00000013 nop
+80003330: 00000013 nop
+80003334: 00000013 nop
+80003338: 00000013 nop
+8000333c: 00000013 nop
+80003340: 00000013 nop
+80003344: 00000013 nop
+80003348: 00000013 nop
+8000334c: 00000013 nop
+80003350: 00000013 nop
+80003354: 00000013 nop
+80003358: 00000013 nop
+8000335c: 00000013 nop
+80003360: 00000013 nop
+80003364: 00000013 nop
+80003368: 00000013 nop
+8000336c: 00000013 nop
+80003370: 00000013 nop
+80003374: 00000013 nop
+80003378: 00000013 nop
+8000337c: 00000013 nop
+80003380: 00000013 nop
+80003384: 00000013 nop
+80003388: 00000013 nop
+8000338c: 00000013 nop
+80003390: 00000013 nop
+80003394: 00000013 nop
+80003398: 00000013 nop
+8000339c: 00000013 nop
+800033a0: 00000013 nop
+800033a4: 00000013 nop
+800033a8: 00000013 nop
+800033ac: 00000013 nop
+800033b0: 00000013 nop
+800033b4: 00000013 nop
+800033b8: 00000013 nop
+800033bc: 00000013 nop
+800033c0: 00000013 nop
+800033c4: 00000013 nop
+800033c8: 00000013 nop
+800033cc: 00000013 nop
+800033d0: 00000013 nop
+800033d4: 00000013 nop
+800033d8: 00000013 nop
+800033dc: 00000013 nop
+800033e0: 00000013 nop
+800033e4: 00000013 nop
+800033e8: 00000013 nop
+800033ec: 00000013 nop
+800033f0: 00000013 nop
+800033f4: 00000013 nop
+800033f8: 00000013 nop
+800033fc: 00000013 nop
+80003400: 00000013 nop
+80003404: 00000013 nop
+80003408: 00000013 nop
+8000340c: 00000013 nop
+80003410: 00000013 nop
+80003414: 00000013 nop
+80003418: 00000013 nop
+8000341c: 00000013 nop
+80003420: 00000013 nop
+80003424: 00000013 nop
+80003428: 00000013 nop
+8000342c: 00000013 nop
+80003430: 00000013 nop
+80003434: 00000013 nop
+80003438: 00000013 nop
+8000343c: 00000013 nop
+80003440: 00000013 nop
+80003444: 00000013 nop
+80003448: 00000013 nop
+8000344c: 00000013 nop
+80003450: 00000013 nop
+80003454: 00000013 nop
+80003458: 00000013 nop
+8000345c: 00000013 nop
+80003460: 00000013 nop
+80003464: 00000013 nop
+80003468: 00000013 nop
+8000346c: 00000013 nop
+80003470: 00000013 nop
+80003474: 00000013 nop
+80003478: 00000013 nop
+8000347c: 00000013 nop
+80003480: 00000013 nop
+80003484: 00000013 nop
+80003488: 00000013 nop
+8000348c: 00000013 nop
+80003490: 00000013 nop
+80003494: 00000013 nop
+80003498: 00000013 nop
+8000349c: 00000013 nop
+800034a0: 00000013 nop
+800034a4: 00000013 nop
+800034a8: 00000013 nop
+800034ac: 00000013 nop
+800034b0: 00000013 nop
+800034b4: 00000013 nop
+800034b8: 00000013 nop
+800034bc: 00000013 nop
+800034c0: 00000013 nop
+800034c4: 00000013 nop
+800034c8: 00000013 nop
+800034cc: 00000013 nop
+800034d0: 00000013 nop
+800034d4: 00000013 nop
+800034d8: 00000013 nop
+800034dc: 00000013 nop
+800034e0: 00000013 nop
+800034e4: 00000013 nop
+800034e8: 00000013 nop
+800034ec: 00000013 nop
+800034f0: 00000013 nop
+800034f4: 00000013 nop
+800034f8: 00000013 nop
+800034fc: 00000013 nop
+80003500: 00000013 nop
+80003504: 00000013 nop
+80003508: 00000013 nop
+8000350c: 00000013 nop
+80003510: 00000013 nop
+80003514: 00000013 nop
+80003518: 00000013 nop
+8000351c: 00000013 nop
+80003520: 00000013 nop
+80003524: 00000013 nop
+80003528: 00000013 nop
+8000352c: 00000013 nop
+80003530: 00000013 nop
+80003534: 00000013 nop
+80003538: 00000013 nop
+8000353c: 00000013 nop
+80003540: 00000013 nop
+80003544: 00000013 nop
+80003548: 00000013 nop
+8000354c: 00000013 nop
+80003550: 00000013 nop
+80003554: 00000013 nop
+80003558: 00000013 nop
+8000355c: 00000013 nop
+80003560: 00000013 nop
+80003564: 00000013 nop
+80003568: 00000013 nop
+8000356c: 00000013 nop
+80003570: 00000013 nop
+80003574: 00000013 nop
+80003578: 00000013 nop
+8000357c: 00000013 nop
+80003580: 00000013 nop
+80003584: 00000013 nop
+80003588: 00000013 nop
+8000358c: 00000013 nop
+80003590: 00000013 nop
+80003594: 00000013 nop
+80003598: 00000013 nop
+8000359c: 00000013 nop
+800035a0: 00000013 nop
+800035a4: 00000013 nop
+800035a8: 00000013 nop
+800035ac: 00000013 nop
+800035b0: 00000013 nop
+800035b4: 00000013 nop
+800035b8: 00000013 nop
+800035bc: 00000013 nop
+800035c0: 00000013 nop
+800035c4: 00000013 nop
+800035c8: 00000013 nop
+800035cc: 00000013 nop
+800035d0: 00000013 nop
+800035d4: 00000013 nop
+800035d8: 00000013 nop
+800035dc: 00000013 nop
+800035e0: 00000013 nop
+800035e4: 00000013 nop
+800035e8: 00000013 nop
+800035ec: 00000013 nop
+800035f0: 00000013 nop
+800035f4: 00000013 nop
+800035f8: 00000013 nop
+800035fc: 00000013 nop
+80003600: 00000013 nop
+80003604: 00000013 nop
+80003608: 00000013 nop
+8000360c: 00000013 nop
+80003610: 00000013 nop
+80003614: 00000013 nop
+80003618: 00000013 nop
+8000361c: 00000013 nop
+80003620: 00000013 nop
+80003624: 00000013 nop
+80003628: 00000013 nop
+8000362c: 00000013 nop
+80003630: 00000013 nop
+80003634: 00000013 nop
+80003638: 00000013 nop
+8000363c: 00000013 nop
+80003640: 00000013 nop
+80003644: 00000013 nop
+80003648: 00000013 nop
+8000364c: 00000013 nop
+80003650: 00000013 nop
+80003654: 00000013 nop
+80003658: 00000013 nop
+8000365c: 00000013 nop
+80003660: 00000013 nop
+80003664: 00000013 nop
+80003668: 00000013 nop
+8000366c: 00000013 nop
+80003670: 00000013 nop
+80003674: 00000013 nop
+80003678: 00000013 nop
+8000367c: 00000013 nop
+80003680: 00000013 nop
+80003684: 00000013 nop
+80003688: 00000013 nop
+8000368c: 00000013 nop
+80003690: 00000013 nop
+80003694: 00000013 nop
+80003698: 00000013 nop
+8000369c: 00000013 nop
+800036a0: 00000013 nop
+800036a4: 00000013 nop
+800036a8: 00000013 nop
+800036ac: 00000013 nop
+800036b0: 00000013 nop
+800036b4: 00000013 nop
+800036b8: 00000013 nop
+800036bc: 00000013 nop
+800036c0: 00000013 nop
+800036c4: 00000013 nop
+800036c8: 00000013 nop
+800036cc: 00000013 nop
+800036d0: 00000013 nop
+800036d4: 00000013 nop
+800036d8: 00000013 nop
+800036dc: 00000013 nop
+800036e0: 00000013 nop
+800036e4: 00000013 nop
+800036e8: 00000013 nop
+800036ec: 00000013 nop
+800036f0: 00000013 nop
+800036f4: 00000013 nop
+800036f8: 00000013 nop
+800036fc: 00000013 nop
+80003700: 00000013 nop
+80003704: 00000013 nop
+80003708: 00000013 nop
+8000370c: 00000013 nop
+80003710: 00000013 nop
+80003714: 00000013 nop
+80003718: 00000013 nop
+8000371c: 00000013 nop
+80003720: 00000013 nop
+80003724: 00000013 nop
+80003728: 00000013 nop
+8000372c: 00000013 nop
+80003730: 00000013 nop
+80003734: 00000013 nop
+80003738: 00000013 nop
+8000373c: 00000013 nop
+80003740: 00000013 nop
+80003744: 00000013 nop
+80003748: 00000013 nop
+8000374c: 00000013 nop
+80003750: 00000013 nop
+80003754: 00000013 nop
+80003758: 00000013 nop
+8000375c: 00000013 nop
+80003760: 00000013 nop
+80003764: 00000013 nop
+80003768: 00000013 nop
+8000376c: 00000013 nop
+80003770: 00000013 nop
+80003774: 00000013 nop
+80003778: 00000013 nop
+8000377c: 00000013 nop
+80003780: 00000013 nop
+80003784: 00000013 nop
+80003788: 00000013 nop
+8000378c: 00000013 nop
+80003790: 00000013 nop
+80003794: 00000013 nop
+80003798: 00000013 nop
+8000379c: 00000013 nop
+800037a0: 00000013 nop
+800037a4: 00000013 nop
+800037a8: 00000013 nop
+800037ac: 00000013 nop
+800037b0: 00000013 nop
+800037b4: 00000013 nop
+800037b8: 00000013 nop
+800037bc: 00000013 nop
+800037c0: 00000013 nop
+800037c4: 00000013 nop
+800037c8: 00000013 nop
+800037cc: 00000013 nop
+800037d0: 00000013 nop
+800037d4: 00000013 nop
+800037d8: 00000013 nop
+800037dc: 00000013 nop
+800037e0: 00000013 nop
+800037e4: 00000013 nop
+800037e8: 00000013 nop
+800037ec: 00000013 nop
+800037f0: 00000013 nop
+800037f4: 00000013 nop
+800037f8: 00000013 nop
+800037fc: 00000013 nop
+80003800: 00000013 nop
+80003804: 00000013 nop
+80003808: 00000013 nop
+8000380c: 00000013 nop
+80003810: 00000013 nop
+80003814: 00000013 nop
+80003818: 00000013 nop
+8000381c: 00000013 nop
+80003820: 00000013 nop
+80003824: 00000013 nop
+80003828: 00000013 nop
+8000382c: 00000013 nop
+80003830: 00000013 nop
+80003834: 00000013 nop
+80003838: 00000013 nop
+8000383c: 00000013 nop
+80003840: 00000013 nop
+80003844: 00000013 nop
+80003848: 00000013 nop
+8000384c: 00000013 nop
+80003850: 00000013 nop
+80003854: 00000013 nop
+80003858: 00000013 nop
+8000385c: 00000013 nop
+80003860: 00000013 nop
+80003864: 00000013 nop
+80003868: 00000013 nop
+8000386c: 00000013 nop
+80003870: 00000013 nop
+80003874: 00000013 nop
+80003878: 00000013 nop
+8000387c: 00000013 nop
+80003880: 00000013 nop
+80003884: 00000013 nop
+80003888: 00000013 nop
+8000388c: 00000013 nop
+80003890: 00000013 nop
+80003894: 00000013 nop
+80003898: 00000013 nop
+8000389c: 00000013 nop
+800038a0: 00000013 nop
+800038a4: 00000013 nop
+800038a8: 00000013 nop
+800038ac: 00000013 nop
+800038b0: 00000013 nop
+800038b4: 00000013 nop
+800038b8: 00000013 nop
+800038bc: 00000013 nop
+800038c0: 00000013 nop
+800038c4: 00000013 nop
+800038c8: 00000013 nop
+800038cc: 00000013 nop
+800038d0: 00000013 nop
+800038d4: 00000013 nop
+800038d8: 00000013 nop
+800038dc: 00000013 nop
+800038e0: 00000013 nop
+800038e4: 00000013 nop
+800038e8: 00000013 nop
+800038ec: 00000013 nop
+800038f0: 00000013 nop
+800038f4: 00000013 nop
+800038f8: 00000013 nop
+800038fc: 00000013 nop
+80003900: 00000013 nop
+80003904: 00000013 nop
+80003908: 00000013 nop
+8000390c: 00000013 nop
+80003910: 00000013 nop
+80003914: 00000013 nop
+80003918: 00000013 nop
+8000391c: 00000013 nop
+80003920: 00000013 nop
+80003924: 00000013 nop
+80003928: 00000013 nop
+8000392c: 00000013 nop
+80003930: 00000013 nop
+80003934: 00000013 nop
+80003938: 00000013 nop
+8000393c: 00000013 nop
+80003940: 00000013 nop
+80003944: 00000013 nop
+80003948: 00000013 nop
+8000394c: 00000013 nop
+80003950: 00000013 nop
+80003954: 00000013 nop
+80003958: 00000013 nop
+8000395c: 00000013 nop
+80003960: 00000013 nop
+80003964: 00000013 nop
+80003968: 00000013 nop
+8000396c: 00000013 nop
+80003970: 00000013 nop
+80003974: 00000013 nop
+80003978: 00000013 nop
+8000397c: 00000013 nop
+80003980: 00000013 nop
+80003984: 00000013 nop
+80003988: 00000013 nop
+8000398c: 00000013 nop
+80003990: 00000013 nop
+80003994: 00000013 nop
+80003998: 00000013 nop
+8000399c: 00000013 nop
+800039a0: 00000013 nop
+800039a4: 00000013 nop
+800039a8: 00000013 nop
+800039ac: 00000013 nop
+800039b0: 00000013 nop
+800039b4: 00000013 nop
+800039b8: 00000013 nop
+800039bc: 00000013 nop
+800039c0: 00000013 nop
+800039c4: 00000013 nop
+800039c8: 00000013 nop
+800039cc: 00000013 nop
+800039d0: 00000013 nop
+800039d4: 00000013 nop
+800039d8: 00000013 nop
+800039dc: 00000013 nop
+800039e0: 00000013 nop
+800039e4: 00000013 nop
+800039e8: 00000013 nop
+800039ec: 00000013 nop
+800039f0: 00000013 nop
+800039f4: 00000013 nop
+800039f8: 00000013 nop
+800039fc: 00000013 nop
+80003a00: 00000013 nop
+80003a04: 00000013 nop
+80003a08: 00000013 nop
+80003a0c: 00000013 nop
+80003a10: 00000013 nop
+80003a14: 00000013 nop
+80003a18: 00000013 nop
+80003a1c: 00000013 nop
+80003a20: 00000013 nop
+80003a24: 00000013 nop
+80003a28: 00000013 nop
+80003a2c: 00000013 nop
+80003a30: 00000013 nop
+80003a34: 00000013 nop
+80003a38: 00000013 nop
+80003a3c: 00000013 nop
+80003a40: 00000013 nop
+80003a44: 00000013 nop
+80003a48: 00000013 nop
+80003a4c: 00000013 nop
+80003a50: 00000013 nop
+80003a54: 00000013 nop
+80003a58: 00000013 nop
+80003a5c: 00000013 nop
+80003a60: 00000013 nop
+80003a64: 00000013 nop
+80003a68: 00000013 nop
+80003a6c: 00000013 nop
+80003a70: 00000013 nop
+80003a74: 00000013 nop
+80003a78: 00000013 nop
+80003a7c: 00000013 nop
+80003a80: 00000013 nop
+80003a84: 00000013 nop
+80003a88: 00000013 nop
+80003a8c: 00000013 nop
+80003a90: 00000013 nop
+80003a94: 00000013 nop
+80003a98: 00000013 nop
+80003a9c: 00000013 nop
+80003aa0: 00000013 nop
+80003aa4: 00000013 nop
+80003aa8: 00000013 nop
+80003aac: 00000013 nop
+80003ab0: 00000013 nop
+80003ab4: 00000013 nop
+80003ab8: 00000013 nop
+80003abc: 00000013 nop
+80003ac0: 00000013 nop
+80003ac4: 00000013 nop
+80003ac8: 00000013 nop
+80003acc: 00000013 nop
+80003ad0: 00000013 nop
+80003ad4: 00000013 nop
+80003ad8: 00000013 nop
+80003adc: 00000013 nop
+80003ae0: 00000013 nop
+80003ae4: 00000013 nop
+80003ae8: 00000013 nop
+80003aec: 00000013 nop
+80003af0: 00000013 nop
+80003af4: 00000013 nop
+80003af8: 00000013 nop
+80003afc: 00000013 nop
+80003b00: 00000013 nop
+80003b04: 00000013 nop
+80003b08: 00000013 nop
+80003b0c: 00000013 nop
+80003b10: 00000013 nop
+80003b14: 00000013 nop
+80003b18: 00000013 nop
+80003b1c: 00000013 nop
+80003b20: 00000013 nop
+80003b24: 00000013 nop
+80003b28: 00000013 nop
+80003b2c: 00000013 nop
+80003b30: 00000013 nop
+80003b34: 00000013 nop
+80003b38: 00000013 nop
+80003b3c: 00000013 nop
+80003b40: 00000013 nop
+80003b44: 00000013 nop
+80003b48: 00000013 nop
+80003b4c: 00000013 nop
+80003b50: 00000013 nop
+80003b54: 00000013 nop
+80003b58: 00000013 nop
+80003b5c: 00000013 nop
+80003b60: 00000013 nop
+80003b64: 00000013 nop
+80003b68: 00000013 nop
+80003b6c: 00000013 nop
+80003b70: 00000013 nop
+80003b74: 00000013 nop
+80003b78: 00000013 nop
+80003b7c: 00000013 nop
+80003b80: 00000013 nop
+80003b84: 00000013 nop
+80003b88: 00000013 nop
+80003b8c: 00000013 nop
+80003b90: 00000013 nop
+80003b94: 00000013 nop
+80003b98: 00000013 nop
+80003b9c: 00000013 nop
+80003ba0: 00000013 nop
+80003ba4: 00000013 nop
+80003ba8: 00000013 nop
+80003bac: 00000013 nop
+80003bb0: 00000013 nop
+80003bb4: 00000013 nop
+80003bb8: 00000013 nop
+80003bbc: 00000013 nop
+80003bc0: 00000013 nop
+80003bc4: 00000013 nop
+80003bc8: 00000013 nop
+80003bcc: 00000013 nop
+80003bd0: 00000013 nop
+80003bd4: 00000013 nop
+80003bd8: 00000013 nop
+80003bdc: 00000013 nop
+80003be0: 00000013 nop
+80003be4: 00000013 nop
+80003be8: 00000013 nop
+80003bec: 00000013 nop
+80003bf0: 00000013 nop
+80003bf4: 00000013 nop
+80003bf8: 00000013 nop
+80003bfc: 00000013 nop
+80003c00: 00000013 nop
+80003c04: 00000013 nop
+80003c08: 00000013 nop
+80003c0c: 00000013 nop
+80003c10: 00000013 nop
+80003c14: 00000013 nop
+80003c18: 00000013 nop
+80003c1c: 00000013 nop
+80003c20: 00000013 nop
+80003c24: 00000013 nop
+80003c28: 00000013 nop
+80003c2c: 00000013 nop
+80003c30: 00000013 nop
+80003c34: 00000013 nop
+80003c38: 00000013 nop
+80003c3c: 00000013 nop
+80003c40: 00000013 nop
+80003c44: 00000013 nop
+80003c48: 00000013 nop
+80003c4c: 00000013 nop
+80003c50: 00000013 nop
+80003c54: 00000013 nop
+80003c58: 00000013 nop
+80003c5c: 00000013 nop
+80003c60: 00000013 nop
+80003c64: 00000013 nop
+80003c68: 00000013 nop
+80003c6c: 00000013 nop
+80003c70: 00000013 nop
+80003c74: 00000013 nop
+80003c78: 00000013 nop
+80003c7c: 00000013 nop
+80003c80: 00000013 nop
+80003c84: 00000013 nop
+80003c88: 00000013 nop
+80003c8c: 00000013 nop
+80003c90: 00000013 nop
+80003c94: 00000013 nop
+80003c98: 00000013 nop
+80003c9c: 00000013 nop
+80003ca0: 00000013 nop
+80003ca4: 00000013 nop
+80003ca8: 00000013 nop
+80003cac: 00000013 nop
+80003cb0: 00000013 nop
+80003cb4: 00000013 nop
+80003cb8: 00000013 nop
+80003cbc: 00000013 nop
+80003cc0: 00000013 nop
+80003cc4: 00000013 nop
+80003cc8: 00000013 nop
+80003ccc: 00000013 nop
+80003cd0: 00000013 nop
+80003cd4: 00000013 nop
+80003cd8: 00000013 nop
+80003cdc: 00000013 nop
+80003ce0: 00000013 nop
+80003ce4: 00000013 nop
+80003ce8: 00000013 nop
+80003cec: 00000013 nop
+80003cf0: 00000013 nop
+80003cf4: 00000013 nop
+80003cf8: 00000013 nop
+80003cfc: 00000013 nop
+80003d00: 00000013 nop
+80003d04: 00000013 nop
+80003d08: 00000013 nop
+80003d0c: 00000013 nop
+80003d10: 00000013 nop
+80003d14: 00000013 nop
+80003d18: 00000013 nop
+80003d1c: 00000013 nop
+80003d20: 00000013 nop
+80003d24: 00000013 nop
+80003d28: 00000013 nop
+80003d2c: 00000013 nop
+80003d30: 00000013 nop
+80003d34: 00000013 nop
+80003d38: 00000013 nop
+80003d3c: 00000013 nop
+80003d40: 00000013 nop
+80003d44: 00000013 nop
+80003d48: 00000013 nop
+80003d4c: 00000013 nop
+80003d50: 00000013 nop
+80003d54: 00000013 nop
+80003d58: 00000013 nop
+80003d5c: 00000013 nop
+80003d60: 00000013 nop
+80003d64: 00000013 nop
+80003d68: 00000013 nop
+80003d6c: 00000013 nop
+80003d70: 00000013 nop
+80003d74: 00000013 nop
+80003d78: 00000013 nop
+80003d7c: 00000013 nop
+80003d80: 00000013 nop
+80003d84: 00000013 nop
+80003d88: 00000013 nop
+80003d8c: 00000013 nop
+80003d90: 00000013 nop
+80003d94: 00000013 nop
+80003d98: 00000013 nop
+80003d9c: 00000013 nop
+80003da0: 00000013 nop
+80003da4: 00000013 nop
+80003da8: 00000013 nop
+80003dac: 00000013 nop
+80003db0: 00000013 nop
+80003db4: 00000013 nop
+80003db8: 00000013 nop
+80003dbc: 00000013 nop
+80003dc0: 00000013 nop
+80003dc4: 00000013 nop
+80003dc8: 00000013 nop
+80003dcc: 00000013 nop
+80003dd0: 00000013 nop
+80003dd4: 00000013 nop
+80003dd8: 00000013 nop
+80003ddc: 00000013 nop
+80003de0: 00000013 nop
+80003de4: 00000013 nop
+80003de8: 00000013 nop
+80003dec: 00000013 nop
+80003df0: 00000013 nop
+80003df4: 00000013 nop
+80003df8: 00000013 nop
+80003dfc: 00000013 nop
+80003e00: 00000013 nop
+80003e04: 00000013 nop
+80003e08: 00000013 nop
+80003e0c: 00000013 nop
+80003e10: 00000013 nop
+80003e14: 00000013 nop
+80003e18: 00000013 nop
+80003e1c: 00000013 nop
+80003e20: 00000013 nop
+80003e24: 00000013 nop
+80003e28: 00000013 nop
+80003e2c: 00000013 nop
+80003e30: 00000013 nop
+80003e34: 00000013 nop
+80003e38: 00000013 nop
+80003e3c: 00000013 nop
+80003e40: 00000013 nop
+80003e44: 00000013 nop
+80003e48: 00000013 nop
+80003e4c: 00000013 nop
+80003e50: 00000013 nop
+80003e54: 00000013 nop
+80003e58: 00000013 nop
+80003e5c: 00000013 nop
+80003e60: 00000013 nop
+80003e64: 00000013 nop
+80003e68: 00000013 nop
+80003e6c: 00000013 nop
+80003e70: 00000013 nop
+80003e74: 00000013 nop
+80003e78: 00000013 nop
+80003e7c: 00000013 nop
+80003e80: 00000013 nop
+80003e84: 00000013 nop
+80003e88: 00000013 nop
+80003e8c: 00000013 nop
+80003e90: 00000013 nop
+80003e94: 00000013 nop
+80003e98: 00000013 nop
+80003e9c: 00000013 nop
+80003ea0: 00000013 nop
+80003ea4: 00000013 nop
+80003ea8: 00000013 nop
+80003eac: 00000013 nop
+80003eb0: 00000013 nop
+80003eb4: 00000013 nop
+80003eb8: 00000013 nop
+80003ebc: 00000013 nop
+80003ec0: 00000013 nop
+80003ec4: 00000013 nop
+80003ec8: 00000013 nop
+80003ecc: 00000013 nop
+80003ed0: 00000013 nop
+80003ed4: 00000013 nop
+80003ed8: 00000013 nop
+80003edc: 00000013 nop
+80003ee0: 00000013 nop
+80003ee4: 00000013 nop
+80003ee8: 00000013 nop
+80003eec: 00000013 nop
+80003ef0: 00000013 nop
+80003ef4: 00000013 nop
+80003ef8: 00000013 nop
+80003efc: 00000013 nop
+80003f00: 00000013 nop
+80003f04: 00000013 nop
+80003f08: 00000013 nop
+80003f0c: 00000013 nop
+80003f10: 00000013 nop
+80003f14: 00000013 nop
+80003f18: 00000013 nop
+80003f1c: 00000013 nop
+80003f20: 00000013 nop
+80003f24: 00000013 nop
+80003f28: 00000013 nop
+80003f2c: 00000013 nop
+80003f30: 00000013 nop
+80003f34: 00000013 nop
+80003f38: 00000013 nop
+80003f3c: 00000013 nop
+80003f40: 00000013 nop
+80003f44: 00000013 nop
+80003f48: 00000013 nop
+80003f4c: 00000013 nop
+80003f50: 00000013 nop
+80003f54: 00000013 nop
+80003f58: 00000013 nop
+80003f5c: 00000013 nop
+80003f60: 00000013 nop
+80003f64: 00000013 nop
+80003f68: 00000013 nop
+80003f6c: 00000013 nop
+80003f70: 00000013 nop
+80003f74: 00000013 nop
+80003f78: 00000013 nop
+80003f7c: 00000013 nop
+80003f80: 00000013 nop
+80003f84: 00000013 nop
+80003f88: 00000013 nop
+80003f8c: 00000013 nop
+80003f90: 00000013 nop
+80003f94: 00000013 nop
+80003f98: 00000013 nop
+80003f9c: 00000013 nop
+80003fa0: 00000013 nop
+80003fa4: 00000013 nop
+80003fa8: 00000013 nop
+80003fac: 00000013 nop
+80003fb0: 00000013 nop
+80003fb4: 00000013 nop
+80003fb8: 00000013 nop
+80003fbc: 00000013 nop
+80003fc0: 00000013 nop
+80003fc4: 00000013 nop
+80003fc8: 00000013 nop
+80003fcc: 00000013 nop
+80003fd0: 00000013 nop
+80003fd4: 00000013 nop
+80003fd8: 00000013 nop
+80003fdc: 00000013 nop
+80003fe0: 00000013 nop
+80003fe4: 00000013 nop
+80003fe8: 00000013 nop
+80003fec: 00000013 nop
+80003ff0: 00000013 nop
+80003ff4: 00000013 nop
+80003ff8: 00000013 nop
+80003ffc: 00000013 nop
+
+80004000 <MMU_TABLE_3>:
+80004000: 0000 unimp
+80004002: 0000 unimp
+80004004: 00000013 nop
+80004008: 00000013 nop
+8000400c: 00000013 nop
+80004010: 00000013 nop
+80004014: 00000013 nop
+80004018: 00000013 nop
+8000401c: 00000013 nop
+80004020: 00000013 nop
+80004024: 00000013 nop
+80004028: 00000013 nop
+8000402c: 00000013 nop
+80004030: 00000013 nop
+80004034: 00000013 nop
+80004038: 00000013 nop
+8000403c: 00000013 nop
+80004040: 00000013 nop
+80004044: 00000013 nop
+80004048: 00000013 nop
+8000404c: 00000013 nop
+80004050: 00000013 nop
+80004054: 00000013 nop
+80004058: 00000013 nop
+8000405c: 00000013 nop
+80004060: 00000013 nop
+80004064: 00000013 nop
+80004068: 00000013 nop
+8000406c: 00000013 nop
+80004070: 00000013 nop
+80004074: 00000013 nop
+80004078: 00000013 nop
+8000407c: 00000013 nop
+80004080: 00000013 nop
+80004084: 00000013 nop
+80004088: 00000013 nop
+8000408c: 00000013 nop
+80004090: 00000013 nop
+80004094: 00000013 nop
+80004098: 00000013 nop
+8000409c: 00000013 nop
+800040a0: 00000013 nop
+800040a4: 00000013 nop
+800040a8: 00000013 nop
+800040ac: 00000013 nop
+800040b0: 00000013 nop
+800040b4: 00000013 nop
+800040b8: 00000013 nop
+800040bc: 00000013 nop
+800040c0: 00000013 nop
+800040c4: 00000013 nop
+800040c8: 00000013 nop
+800040cc: 00000013 nop
+800040d0: 00000013 nop
+800040d4: 00000013 nop
+800040d8: 00000013 nop
+800040dc: 00000013 nop
+800040e0: 00000013 nop
+800040e4: 00000013 nop
+800040e8: 00000013 nop
+800040ec: 00000013 nop
+800040f0: 00000013 nop
+800040f4: 00000013 nop
+800040f8: 00000013 nop
+800040fc: 00000013 nop
+80004100: 00000013 nop
+80004104: 00000013 nop
+80004108: 00000013 nop
+8000410c: 00000013 nop
+80004110: 00000013 nop
+80004114: 00000013 nop
+80004118: 00000013 nop
+8000411c: 00000013 nop
+80004120: 00000013 nop
+80004124: 00000013 nop
+80004128: 00000013 nop
+8000412c: 00000013 nop
+80004130: 00000013 nop
+80004134: 00000013 nop
+80004138: 00000013 nop
+8000413c: 00000013 nop
+80004140: 00000013 nop
+80004144: 00000013 nop
+80004148: 00000013 nop
+8000414c: 00000013 nop
+80004150: 00000013 nop
+80004154: 00000013 nop
+80004158: 00000013 nop
+8000415c: 00000013 nop
+80004160: 00000013 nop
+80004164: 00000013 nop
+80004168: 00000013 nop
+8000416c: 00000013 nop
+80004170: 00000013 nop
+80004174: 00000013 nop
+80004178: 00000013 nop
+8000417c: 00000013 nop
+80004180: 00000013 nop
+80004184: 00000013 nop
+80004188: 00000013 nop
+8000418c: 00000013 nop
+80004190: 00000013 nop
+80004194: 00000013 nop
+80004198: 00000013 nop
+8000419c: 00000013 nop
+800041a0: 00000013 nop
+800041a4: 00000013 nop
+800041a8: 00000013 nop
+800041ac: 00000013 nop
+800041b0: 00000013 nop
+800041b4: 00000013 nop
+800041b8: 00000013 nop
+800041bc: 00000013 nop
+800041c0: 00000013 nop
+800041c4: 00000013 nop
+800041c8: 00000013 nop
+800041cc: 00000013 nop
+800041d0: 00000013 nop
+800041d4: 00000013 nop
+800041d8: 00000013 nop
+800041dc: 00000013 nop
+800041e0: 00000013 nop
+800041e4: 00000013 nop
+800041e8: 00000013 nop
+800041ec: 00000013 nop
+800041f0: 00000013 nop
+800041f4: 00000013 nop
+800041f8: 00000013 nop
+800041fc: 00000013 nop
+80004200: 00000013 nop
+80004204: 00000013 nop
+80004208: 00000013 nop
+8000420c: 00000013 nop
+80004210: 00000013 nop
+80004214: 00000013 nop
+80004218: 00000013 nop
+8000421c: 00000013 nop
+80004220: 00000013 nop
+80004224: 00000013 nop
+80004228: 00000013 nop
+8000422c: 00000013 nop
+80004230: 00000013 nop
+80004234: 00000013 nop
+80004238: 00000013 nop
+8000423c: 00000013 nop
+80004240: 00000013 nop
+80004244: 00000013 nop
+80004248: 00000013 nop
+8000424c: 00000013 nop
+80004250: 00000013 nop
+80004254: 00000013 nop
+80004258: 00000013 nop
+8000425c: 00000013 nop
+80004260: 00000013 nop
+80004264: 00000013 nop
+80004268: 00000013 nop
+8000426c: 00000013 nop
+80004270: 00000013 nop
+80004274: 00000013 nop
+80004278: 00000013 nop
+8000427c: 00000013 nop
+80004280: 00000013 nop
+80004284: 00000013 nop
+80004288: 00000013 nop
+8000428c: 00000013 nop
+80004290: 00000013 nop
+80004294: 00000013 nop
+80004298: 00000013 nop
+8000429c: 00000013 nop
+800042a0: 00000013 nop
+800042a4: 00000013 nop
+800042a8: 00000013 nop
+800042ac: 00000013 nop
+800042b0: 00000013 nop
+800042b4: 00000013 nop
+800042b8: 00000013 nop
+800042bc: 00000013 nop
+800042c0: 00000013 nop
+800042c4: 00000013 nop
+800042c8: 00000013 nop
+800042cc: 00000013 nop
+800042d0: 00000013 nop
+800042d4: 00000013 nop
+800042d8: 00000013 nop
+800042dc: 00000013 nop
+800042e0: 00000013 nop
+800042e4: 00000013 nop
+800042e8: 00000013 nop
+800042ec: 00000013 nop
+800042f0: 00000013 nop
+800042f4: 00000013 nop
+800042f8: 00000013 nop
+800042fc: 00000013 nop
+80004300: 00000013 nop
+80004304: 00000013 nop
+80004308: 00000013 nop
+8000430c: 00000013 nop
+80004310: 00000013 nop
+80004314: 00000013 nop
+80004318: 00000013 nop
+8000431c: 00000013 nop
+80004320: 00000013 nop
+80004324: 00000013 nop
+80004328: 00000013 nop
+8000432c: 00000013 nop
+80004330: 00000013 nop
+80004334: 00000013 nop
+80004338: 00000013 nop
+8000433c: 00000013 nop
+80004340: 00000013 nop
+80004344: 00000013 nop
+80004348: 00000013 nop
+8000434c: 00000013 nop
+80004350: 00000013 nop
+80004354: 00000013 nop
+80004358: 00000013 nop
+8000435c: 00000013 nop
+80004360: 00000013 nop
+80004364: 00000013 nop
+80004368: 00000013 nop
+8000436c: 00000013 nop
+80004370: 00000013 nop
+80004374: 00000013 nop
+80004378: 00000013 nop
+8000437c: 00000013 nop
+80004380: 00000013 nop
+80004384: 00000013 nop
+80004388: 00000013 nop
+8000438c: 00000013 nop
+80004390: 00000013 nop
+80004394: 00000013 nop
+80004398: 00000013 nop
+8000439c: 00000013 nop
+800043a0: 00000013 nop
+800043a4: 00000013 nop
+800043a8: 00000013 nop
+800043ac: 00000013 nop
+800043b0: 00000013 nop
+800043b4: 00000013 nop
+800043b8: 00000013 nop
+800043bc: 00000013 nop
+800043c0: 00000013 nop
+800043c4: 00000013 nop
+800043c8: 00000013 nop
+800043cc: 00000013 nop
+800043d0: 00000013 nop
+800043d4: 00000013 nop
+800043d8: 00000013 nop
+800043dc: 00000013 nop
+800043e0: 00000013 nop
+800043e4: 00000013 nop
+800043e8: 00000013 nop
+800043ec: 00000013 nop
+800043f0: 00000013 nop
+800043f4: 00000013 nop
+800043f8: 00000013 nop
+800043fc: 00000013 nop
+80004400: 00000013 nop
+80004404: 00000013 nop
+80004408: 00000013 nop
+8000440c: 00000013 nop
+80004410: 00000013 nop
+80004414: 00000013 nop
+80004418: 00000013 nop
+8000441c: 00000013 nop
+80004420: 00000013 nop
+80004424: 00000013 nop
+80004428: 00000013 nop
+8000442c: 00000013 nop
+80004430: 00000013 nop
+80004434: 00000013 nop
+80004438: 00000013 nop
+8000443c: 00000013 nop
+80004440: 00000013 nop
+80004444: 00000013 nop
+80004448: 00000013 nop
+8000444c: 00000013 nop
+80004450: 00000013 nop
+80004454: 00000013 nop
+80004458: 00000013 nop
+8000445c: 00000013 nop
+80004460: 00000013 nop
+80004464: 00000013 nop
+80004468: 00000013 nop
+8000446c: 00000013 nop
+80004470: 00000013 nop
+80004474: 00000013 nop
+80004478: 00000013 nop
+8000447c: 00000013 nop
+80004480: 00000013 nop
+80004484: 00000013 nop
+80004488: 00000013 nop
+8000448c: 00000013 nop
+80004490: 00000013 nop
+80004494: 00000013 nop
+80004498: 00000013 nop
+8000449c: 00000013 nop
+800044a0: 00000013 nop
+800044a4: 00000013 nop
+800044a8: 00000013 nop
+800044ac: 00000013 nop
+800044b0: 00000013 nop
+800044b4: 00000013 nop
+800044b8: 00000013 nop
+800044bc: 00000013 nop
+800044c0: 00000013 nop
+800044c4: 00000013 nop
+800044c8: 00000013 nop
+800044cc: 00000013 nop
+800044d0: 00000013 nop
+800044d4: 00000013 nop
+800044d8: 00000013 nop
+800044dc: 00000013 nop
+800044e0: 00000013 nop
+800044e4: 00000013 nop
+800044e8: 00000013 nop
+800044ec: 00000013 nop
+800044f0: 00000013 nop
+800044f4: 00000013 nop
+800044f8: 00000013 nop
+800044fc: 00000013 nop
+80004500: 00000013 nop
+80004504: 00000013 nop
+80004508: 00000013 nop
+8000450c: 00000013 nop
+80004510: 00000013 nop
+80004514: 00000013 nop
+80004518: 00000013 nop
+8000451c: 00000013 nop
+80004520: 00000013 nop
+80004524: 00000013 nop
+80004528: 00000013 nop
+8000452c: 00000013 nop
+80004530: 00000013 nop
+80004534: 00000013 nop
+80004538: 00000013 nop
+8000453c: 00000013 nop
+80004540: 00000013 nop
+80004544: 00000013 nop
+80004548: 00000013 nop
+8000454c: 00000013 nop
+80004550: 00000013 nop
+80004554: 00000013 nop
+80004558: 00000013 nop
+8000455c: 00000013 nop
+80004560: 00000013 nop
+80004564: 00000013 nop
+80004568: 00000013 nop
+8000456c: 00000013 nop
+80004570: 00000013 nop
+80004574: 00000013 nop
+80004578: 00000013 nop
+8000457c: 00000013 nop
+80004580: 00000013 nop
+80004584: 00000013 nop
+80004588: 00000013 nop
+8000458c: 00000013 nop
+80004590: 00000013 nop
+80004594: 00000013 nop
+80004598: 00000013 nop
+8000459c: 00000013 nop
+800045a0: 00000013 nop
+800045a4: 00000013 nop
+800045a8: 00000013 nop
+800045ac: 00000013 nop
+800045b0: 00000013 nop
+800045b4: 00000013 nop
+800045b8: 00000013 nop
+800045bc: 00000013 nop
+800045c0: 00000013 nop
+800045c4: 00000013 nop
+800045c8: 00000013 nop
+800045cc: 00000013 nop
+800045d0: 00000013 nop
+800045d4: 00000013 nop
+800045d8: 00000013 nop
+800045dc: 00000013 nop
+800045e0: 00000013 nop
+800045e4: 00000013 nop
+800045e8: 00000013 nop
+800045ec: 00000013 nop
+800045f0: 00000013 nop
+800045f4: 00000013 nop
+800045f8: 00000013 nop
+800045fc: 00000013 nop
+80004600: 00000013 nop
+80004604: 00000013 nop
+80004608: 00000013 nop
+8000460c: 00000013 nop
+80004610: 00000013 nop
+80004614: 00000013 nop
+80004618: 00000013 nop
+8000461c: 00000013 nop
+80004620: 00000013 nop
+80004624: 00000013 nop
+80004628: 00000013 nop
+8000462c: 00000013 nop
+80004630: 00000013 nop
+80004634: 00000013 nop
+80004638: 00000013 nop
+8000463c: 00000013 nop
+80004640: 00000013 nop
+80004644: 00000013 nop
+80004648: 00000013 nop
+8000464c: 00000013 nop
+80004650: 00000013 nop
+80004654: 00000013 nop
+80004658: 00000013 nop
+8000465c: 00000013 nop
+80004660: 00000013 nop
+80004664: 00000013 nop
+80004668: 00000013 nop
+8000466c: 00000013 nop
+80004670: 00000013 nop
+80004674: 00000013 nop
+80004678: 00000013 nop
+8000467c: 00000013 nop
+80004680: 00000013 nop
+80004684: 00000013 nop
+80004688: 00000013 nop
+8000468c: 00000013 nop
+80004690: 00000013 nop
+80004694: 00000013 nop
+80004698: 00000013 nop
+8000469c: 00000013 nop
+800046a0: 00000013 nop
+800046a4: 00000013 nop
+800046a8: 00000013 nop
+800046ac: 00000013 nop
+800046b0: 00000013 nop
+800046b4: 00000013 nop
+800046b8: 00000013 nop
+800046bc: 00000013 nop
+800046c0: 00000013 nop
+800046c4: 00000013 nop
+800046c8: 00000013 nop
+800046cc: 00000013 nop
+800046d0: 00000013 nop
+800046d4: 00000013 nop
+800046d8: 00000013 nop
+800046dc: 00000013 nop
+800046e0: 00000013 nop
+800046e4: 00000013 nop
+800046e8: 00000013 nop
+800046ec: 00000013 nop
+800046f0: 00000013 nop
+800046f4: 00000013 nop
+800046f8: 00000013 nop
+800046fc: 00000013 nop
+80004700: 00000013 nop
+80004704: 00000013 nop
+80004708: 00000013 nop
+8000470c: 00000013 nop
+80004710: 00000013 nop
+80004714: 00000013 nop
+80004718: 00000013 nop
+8000471c: 00000013 nop
+80004720: 00000013 nop
+80004724: 00000013 nop
+80004728: 00000013 nop
+8000472c: 00000013 nop
+80004730: 00000013 nop
+80004734: 00000013 nop
+80004738: 00000013 nop
+8000473c: 00000013 nop
+80004740: 00000013 nop
+80004744: 00000013 nop
+80004748: 00000013 nop
+8000474c: 00000013 nop
+80004750: 00000013 nop
+80004754: 00000013 nop
+80004758: 00000013 nop
+8000475c: 00000013 nop
+80004760: 00000013 nop
+80004764: 00000013 nop
+80004768: 00000013 nop
+8000476c: 00000013 nop
+80004770: 00000013 nop
+80004774: 00000013 nop
+80004778: 00000013 nop
+8000477c: 00000013 nop
+80004780: 00000013 nop
+80004784: 00000013 nop
+80004788: 00000013 nop
+8000478c: 00000013 nop
+80004790: 00000013 nop
+80004794: 00000013 nop
+80004798: 00000013 nop
+8000479c: 00000013 nop
+800047a0: 00000013 nop
+800047a4: 00000013 nop
+800047a8: 00000013 nop
+800047ac: 00000013 nop
+800047b0: 00000013 nop
+800047b4: 00000013 nop
+800047b8: 00000013 nop
+800047bc: 00000013 nop
+800047c0: 00000013 nop
+800047c4: 00000013 nop
+800047c8: 00000013 nop
+800047cc: 00000013 nop
+800047d0: 00000013 nop
+800047d4: 00000013 nop
+800047d8: 00000013 nop
+800047dc: 00000013 nop
+800047e0: 00000013 nop
+800047e4: 00000013 nop
+800047e8: 00000013 nop
+800047ec: 00000013 nop
+800047f0: 00000013 nop
+800047f4: 00000013 nop
+800047f8: 00000013 nop
+800047fc: 00000013 nop
+80004800: 00000013 nop
+80004804: 00000013 nop
+80004808: 00000013 nop
+8000480c: 00000013 nop
+80004810: 00000013 nop
+80004814: 00000013 nop
+80004818: 00000013 nop
+8000481c: 00000013 nop
+80004820: 00000013 nop
+80004824: 00000013 nop
+80004828: 00000013 nop
+8000482c: 00000013 nop
+80004830: 00000013 nop
+80004834: 00000013 nop
+80004838: 00000013 nop
+8000483c: 00000013 nop
+80004840: 00000013 nop
+80004844: 00000013 nop
+80004848: 00000013 nop
+8000484c: 00000013 nop
+80004850: 00000013 nop
+80004854: 00000013 nop
+80004858: 00000013 nop
+8000485c: 00000013 nop
+80004860: 00000013 nop
+80004864: 00000013 nop
+80004868: 00000013 nop
+8000486c: 00000013 nop
+80004870: 00000013 nop
+80004874: 00000013 nop
+80004878: 00000013 nop
+8000487c: 00000013 nop
+80004880: 00000013 nop
+80004884: 00000013 nop
+80004888: 00000013 nop
+8000488c: 00000013 nop
+80004890: 00000013 nop
+80004894: 00000013 nop
+80004898: 00000013 nop
+8000489c: 00000013 nop
+800048a0: 00000013 nop
+800048a4: 00000013 nop
+800048a8: 00000013 nop
+800048ac: 00000013 nop
+800048b0: 00000013 nop
+800048b4: 00000013 nop
+800048b8: 00000013 nop
+800048bc: 00000013 nop
+800048c0: 00000013 nop
+800048c4: 00000013 nop
+800048c8: 00000013 nop
+800048cc: 00000013 nop
+800048d0: 00000013 nop
+800048d4: 00000013 nop
+800048d8: 00000013 nop
+800048dc: 00000013 nop
+800048e0: 00000013 nop
+800048e4: 00000013 nop
+800048e8: 00000013 nop
+800048ec: 00000013 nop
+800048f0: 00000013 nop
+800048f4: 00000013 nop
+800048f8: 00000013 nop
+800048fc: 00000013 nop
+80004900: 00000013 nop
+80004904: 00000013 nop
+80004908: 00000013 nop
+8000490c: 00000013 nop
+80004910: 00000013 nop
+80004914: 00000013 nop
+80004918: 00000013 nop
+8000491c: 00000013 nop
+80004920: 00000013 nop
+80004924: 00000013 nop
+80004928: 00000013 nop
+8000492c: 00000013 nop
+80004930: 00000013 nop
+80004934: 00000013 nop
+80004938: 00000013 nop
+8000493c: 00000013 nop
+80004940: 00000013 nop
+80004944: 00000013 nop
+80004948: 00000013 nop
+8000494c: 00000013 nop
+80004950: 00000013 nop
+80004954: 00000013 nop
+80004958: 00000013 nop
+8000495c: 00000013 nop
+80004960: 00000013 nop
+80004964: 00000013 nop
+80004968: 00000013 nop
+8000496c: 00000013 nop
+80004970: 00000013 nop
+80004974: 00000013 nop
+80004978: 00000013 nop
+8000497c: 00000013 nop
+80004980: 00000013 nop
+80004984: 00000013 nop
+80004988: 00000013 nop
+8000498c: 00000013 nop
+80004990: 00000013 nop
+80004994: 00000013 nop
+80004998: 00000013 nop
+8000499c: 00000013 nop
+800049a0: 00000013 nop
+800049a4: 00000013 nop
+800049a8: 00000013 nop
+800049ac: 00000013 nop
+800049b0: 00000013 nop
+800049b4: 00000013 nop
+800049b8: 00000013 nop
+800049bc: 00000013 nop
+800049c0: 00000013 nop
+800049c4: 00000013 nop
+800049c8: 00000013 nop
+800049cc: 00000013 nop
+800049d0: 00000013 nop
+800049d4: 00000013 nop
+800049d8: 00000013 nop
+800049dc: 00000013 nop
+800049e0: 00000013 nop
+800049e4: 00000013 nop
+800049e8: 00000013 nop
+800049ec: 00000013 nop
+800049f0: 00000013 nop
+800049f4: 00000013 nop
+800049f8: 00000013 nop
+800049fc: 00000013 nop
+80004a00: 00000013 nop
+80004a04: 00000013 nop
+80004a08: 00000013 nop
+80004a0c: 00000013 nop
+80004a10: 00000013 nop
+80004a14: 00000013 nop
+80004a18: 00000013 nop
+80004a1c: 00000013 nop
+80004a20: 00000013 nop
+80004a24: 00000013 nop
+80004a28: 00000013 nop
+80004a2c: 00000013 nop
+80004a30: 00000013 nop
+80004a34: 00000013 nop
+80004a38: 00000013 nop
+80004a3c: 00000013 nop
+80004a40: 00000013 nop
+80004a44: 00000013 nop
+80004a48: 00000013 nop
+80004a4c: 00000013 nop
+80004a50: 00000013 nop
+80004a54: 00000013 nop
+80004a58: 00000013 nop
+80004a5c: 00000013 nop
+80004a60: 00000013 nop
+80004a64: 00000013 nop
+80004a68: 00000013 nop
+80004a6c: 00000013 nop
+80004a70: 00000013 nop
+80004a74: 00000013 nop
+80004a78: 00000013 nop
+80004a7c: 00000013 nop
+80004a80: 00000013 nop
+80004a84: 00000013 nop
+80004a88: 00000013 nop
+80004a8c: 00000013 nop
+80004a90: 00000013 nop
+80004a94: 00000013 nop
+80004a98: 00000013 nop
+80004a9c: 00000013 nop
+80004aa0: 00000013 nop
+80004aa4: 00000013 nop
+80004aa8: 00000013 nop
+80004aac: 00000013 nop
+80004ab0: 00000013 nop
+80004ab4: 00000013 nop
+80004ab8: 00000013 nop
+80004abc: 00000013 nop
+80004ac0: 00000013 nop
+80004ac4: 00000013 nop
+80004ac8: 00000013 nop
+80004acc: 00000013 nop
+80004ad0: 00000013 nop
+80004ad4: 00000013 nop
+80004ad8: 00000013 nop
+80004adc: 00000013 nop
+80004ae0: 00000013 nop
+80004ae4: 00000013 nop
+80004ae8: 00000013 nop
+80004aec: 00000013 nop
+80004af0: 00000013 nop
+80004af4: 00000013 nop
+80004af8: 00000013 nop
+80004afc: 00000013 nop
+80004b00: 00000013 nop
+80004b04: 00000013 nop
+80004b08: 00000013 nop
+80004b0c: 00000013 nop
+80004b10: 00000013 nop
+80004b14: 00000013 nop
+80004b18: 00000013 nop
+80004b1c: 00000013 nop
+80004b20: 00000013 nop
+80004b24: 00000013 nop
+80004b28: 00000013 nop
+80004b2c: 00000013 nop
+80004b30: 00000013 nop
+80004b34: 00000013 nop
+80004b38: 00000013 nop
+80004b3c: 00000013 nop
+80004b40: 00000013 nop
+80004b44: 00000013 nop
+80004b48: 00000013 nop
+80004b4c: 00000013 nop
+80004b50: 00000013 nop
+80004b54: 00000013 nop
+80004b58: 00000013 nop
+80004b5c: 00000013 nop
+80004b60: 00000013 nop
+80004b64: 00000013 nop
+80004b68: 00000013 nop
+80004b6c: 00000013 nop
+80004b70: 00000013 nop
+80004b74: 00000013 nop
+80004b78: 00000013 nop
+80004b7c: 00000013 nop
+80004b80: 00000013 nop
+80004b84: 00000013 nop
+80004b88: 00000013 nop
+80004b8c: 00000013 nop
+80004b90: 00000013 nop
+80004b94: 00000013 nop
+80004b98: 00000013 nop
+80004b9c: 00000013 nop
+80004ba0: 00000013 nop
+80004ba4: 00000013 nop
+80004ba8: 00000013 nop
+80004bac: 00000013 nop
+80004bb0: 00000013 nop
+80004bb4: 00000013 nop
+80004bb8: 00000013 nop
+80004bbc: 00000013 nop
+80004bc0: 00000013 nop
+80004bc4: 00000013 nop
+80004bc8: 00000013 nop
+80004bcc: 00000013 nop
+80004bd0: 00000013 nop
+80004bd4: 00000013 nop
+80004bd8: 00000013 nop
+80004bdc: 00000013 nop
+80004be0: 00000013 nop
+80004be4: 00000013 nop
+80004be8: 00000013 nop
+80004bec: 00000013 nop
+80004bf0: 00000013 nop
+80004bf4: 00000013 nop
+80004bf8: 00000013 nop
+80004bfc: 00000013 nop
+80004c00: 00000013 nop
+80004c04: 00000013 nop
+80004c08: 00000013 nop
+80004c0c: 00000013 nop
+80004c10: 00000013 nop
+80004c14: 00000013 nop
+80004c18: 00000013 nop
+80004c1c: 00000013 nop
+80004c20: 00000013 nop
+80004c24: 00000013 nop
+80004c28: 00000013 nop
+80004c2c: 00000013 nop
+80004c30: 00000013 nop
+80004c34: 00000013 nop
+80004c38: 00000013 nop
+80004c3c: 00000013 nop
+80004c40: 00000013 nop
+80004c44: 00000013 nop
+80004c48: 00000013 nop
+80004c4c: 00000013 nop
+80004c50: 00000013 nop
+80004c54: 00000013 nop
+80004c58: 00000013 nop
+80004c5c: 00000013 nop
+80004c60: 00000013 nop
+80004c64: 00000013 nop
+80004c68: 00000013 nop
+80004c6c: 00000013 nop
+80004c70: 00000013 nop
+80004c74: 00000013 nop
+80004c78: 00000013 nop
+80004c7c: 00000013 nop
+80004c80: 00000013 nop
+80004c84: 00000013 nop
+80004c88: 00000013 nop
+80004c8c: 00000013 nop
+80004c90: 00000013 nop
+80004c94: 00000013 nop
+80004c98: 00000013 nop
+80004c9c: 00000013 nop
+80004ca0: 00000013 nop
+80004ca4: 00000013 nop
+80004ca8: 00000013 nop
+80004cac: 00000013 nop
+80004cb0: 00000013 nop
+80004cb4: 00000013 nop
+80004cb8: 00000013 nop
+80004cbc: 00000013 nop
+80004cc0: 00000013 nop
+80004cc4: 00000013 nop
+80004cc8: 00000013 nop
+80004ccc: 00000013 nop
+80004cd0: 00000013 nop
+80004cd4: 00000013 nop
+80004cd8: 00000013 nop
+80004cdc: 00000013 nop
+80004ce0: 00000013 nop
+80004ce4: 00000013 nop
+80004ce8: 00000013 nop
+80004cec: 00000013 nop
+80004cf0: 00000013 nop
+80004cf4: 00000013 nop
+80004cf8: 00000013 nop
+80004cfc: 00000013 nop
+80004d00: 00000013 nop
+80004d04: 00000013 nop
+80004d08: 00000013 nop
+80004d0c: 00000013 nop
+80004d10: 00000013 nop
+80004d14: 00000013 nop
+80004d18: 00000013 nop
+80004d1c: 00000013 nop
+80004d20: 00000013 nop
+80004d24: 00000013 nop
+80004d28: 00000013 nop
+80004d2c: 00000013 nop
+80004d30: 00000013 nop
+80004d34: 00000013 nop
+80004d38: 00000013 nop
+80004d3c: 00000013 nop
+80004d40: 00000013 nop
+80004d44: 00000013 nop
+80004d48: 00000013 nop
+80004d4c: 00000013 nop
+80004d50: 00000013 nop
+80004d54: 00000013 nop
+80004d58: 00000013 nop
+80004d5c: 00000013 nop
+80004d60: 00000013 nop
+80004d64: 00000013 nop
+80004d68: 00000013 nop
+80004d6c: 00000013 nop
+80004d70: 00000013 nop
+80004d74: 00000013 nop
+80004d78: 00000013 nop
+80004d7c: 00000013 nop
+80004d80: 00000013 nop
+80004d84: 00000013 nop
+80004d88: 00000013 nop
+80004d8c: 00000013 nop
+80004d90: 00000013 nop
+80004d94: 00000013 nop
+80004d98: 00000013 nop
+80004d9c: 00000013 nop
+80004da0: 00000013 nop
+80004da4: 00000013 nop
+80004da8: 00000013 nop
+80004dac: 00000013 nop
+80004db0: 00000013 nop
+80004db4: 00000013 nop
+80004db8: 00000013 nop
+80004dbc: 00000013 nop
+80004dc0: 00000013 nop
+80004dc4: 00000013 nop
+80004dc8: 00000013 nop
+80004dcc: 00000013 nop
+80004dd0: 00000013 nop
+80004dd4: 00000013 nop
+80004dd8: 00000013 nop
+80004ddc: 00000013 nop
+80004de0: 00000013 nop
+80004de4: 00000013 nop
+80004de8: 00000013 nop
+80004dec: 00000013 nop
+80004df0: 00000013 nop
+80004df4: 00000013 nop
+80004df8: 00000013 nop
+80004dfc: 00000013 nop
+80004e00: 00000013 nop
+80004e04: 00000013 nop
+80004e08: 00000013 nop
+80004e0c: 00000013 nop
+80004e10: 00000013 nop
+80004e14: 00000013 nop
+80004e18: 00000013 nop
+80004e1c: 00000013 nop
+80004e20: 00000013 nop
+80004e24: 00000013 nop
+80004e28: 00000013 nop
+80004e2c: 00000013 nop
+80004e30: 00000013 nop
+80004e34: 00000013 nop
+80004e38: 00000013 nop
+80004e3c: 00000013 nop
+80004e40: 00000013 nop
+80004e44: 00000013 nop
+80004e48: 00000013 nop
+80004e4c: 00000013 nop
+80004e50: 00000013 nop
+80004e54: 00000013 nop
+80004e58: 00000013 nop
+80004e5c: 00000013 nop
+80004e60: 00000013 nop
+80004e64: 00000013 nop
+80004e68: 00000013 nop
+80004e6c: 00000013 nop
+80004e70: 00000013 nop
+80004e74: 00000013 nop
+80004e78: 00000013 nop
+80004e7c: 00000013 nop
+80004e80: 00000013 nop
+80004e84: 00000013 nop
+80004e88: 00000013 nop
+80004e8c: 00000013 nop
+80004e90: 00000013 nop
+80004e94: 00000013 nop
+80004e98: 00000013 nop
+80004e9c: 00000013 nop
+80004ea0: 00000013 nop
+80004ea4: 00000013 nop
+80004ea8: 00000013 nop
+80004eac: 00000013 nop
+80004eb0: 00000013 nop
+80004eb4: 00000013 nop
+80004eb8: 00000013 nop
+80004ebc: 00000013 nop
+80004ec0: 00000013 nop
+80004ec4: 00000013 nop
+80004ec8: 00000013 nop
+80004ecc: 00000013 nop
+80004ed0: 00000013 nop
+80004ed4: 00000013 nop
+80004ed8: 00000013 nop
+80004edc: 00000013 nop
+80004ee0: 00000013 nop
+80004ee4: 00000013 nop
+80004ee8: 00000013 nop
+80004eec: 00000013 nop
+80004ef0: 00000013 nop
+80004ef4: 00000013 nop
+80004ef8: 00000013 nop
+80004efc: 00000013 nop
+80004f00: 00000013 nop
+80004f04: 00000013 nop
+80004f08: 00000013 nop
+80004f0c: 00000013 nop
+80004f10: 00000013 nop
+80004f14: 00000013 nop
+80004f18: 00000013 nop
+80004f1c: 00000013 nop
+80004f20: 00000013 nop
+80004f24: 00000013 nop
+80004f28: 00000013 nop
+80004f2c: 00000013 nop
+80004f30: 00000013 nop
+80004f34: 00000013 nop
+80004f38: 00000013 nop
+80004f3c: 00000013 nop
+80004f40: 00000013 nop
+80004f44: 00000013 nop
+80004f48: 00000013 nop
+80004f4c: 00000013 nop
+80004f50: 00000013 nop
+80004f54: 00000013 nop
+80004f58: 00000013 nop
+80004f5c: 00000013 nop
+80004f60: 00000013 nop
+80004f64: 00000013 nop
+80004f68: 00000013 nop
+80004f6c: 00000013 nop
+80004f70: 00000013 nop
+80004f74: 00000013 nop
+80004f78: 00000013 nop
+80004f7c: 00000013 nop
+80004f80: 00000013 nop
+80004f84: 00000013 nop
+80004f88: 00000013 nop
+80004f8c: 00000013 nop
+80004f90: 00000013 nop
+80004f94: 00000013 nop
+80004f98: 00000013 nop
+80004f9c: 00000013 nop
+80004fa0: 00000013 nop
+80004fa4: 00000013 nop
+80004fa8: 00000013 nop
+80004fac: 00000013 nop
+80004fb0: 00000013 nop
+80004fb4: 00000013 nop
+80004fb8: 00000013 nop
+80004fbc: 00000013 nop
+80004fc0: 00000013 nop
+80004fc4: 00000013 nop
+80004fc8: 00000013 nop
+80004fcc: 00000013 nop
+80004fd0: 00000013 nop
+80004fd4: 00000013 nop
+80004fd8: 00000013 nop
+80004fdc: 00000013 nop
+80004fe0: 00000013 nop
+80004fe4: 00000013 nop
+80004fe8: 00000013 nop
+80004fec: 00000013 nop
+80004ff0: 00000013 nop
+80004ff4: 00000013 nop
+80004ff8: 00000013 nop
+80004ffc: 00000013 nop
+
+80005000 <ROM_0>:
+80005000: 0100 addi s0,sp,128
+80005002: 0302 slli t1,t1,0x0
+80005004: 0504 addi s1,sp,640
+80005006: 0706 slli a4,a4,0x1
+80005008: 0908 addi a0,sp,144
+8000500a: 0b0a slli s6,s6,0x2
+8000500c: 0d0c addi a1,sp,656
+8000500e: 0f0e slli t5,t5,0x3
+80005010: 00000013 nop
+80005014: 00000013 nop
+80005018: 00000013 nop
+8000501c: 00000013 nop
+80005020: 00000013 nop
+80005024: 00000013 nop
+80005028: 00000013 nop
+8000502c: 00000013 nop
+80005030: 00000013 nop
+80005034: 00000013 nop
+80005038: 00000013 nop
+8000503c: 00000013 nop
+80005040: 00000013 nop
+80005044: 00000013 nop
+80005048: 00000013 nop
+8000504c: 00000013 nop
+80005050: 00000013 nop
+80005054: 00000013 nop
+80005058: 00000013 nop
+8000505c: 00000013 nop
+80005060: 00000013 nop
+80005064: 00000013 nop
+80005068: 00000013 nop
+8000506c: 00000013 nop
+80005070: 00000013 nop
+80005074: 00000013 nop
+80005078: 00000013 nop
+8000507c: 00000013 nop
+80005080: 00000013 nop
+80005084: 00000013 nop
+80005088: 00000013 nop
+8000508c: 00000013 nop
+80005090: 00000013 nop
+80005094: 00000013 nop
+80005098: 00000013 nop
+8000509c: 00000013 nop
+800050a0: 00000013 nop
+800050a4: 00000013 nop
+800050a8: 00000013 nop
+800050ac: 00000013 nop
+800050b0: 00000013 nop
+800050b4: 00000013 nop
+800050b8: 00000013 nop
+800050bc: 00000013 nop
+800050c0: 00000013 nop
+800050c4: 00000013 nop
+800050c8: 00000013 nop
+800050cc: 00000013 nop
+800050d0: 00000013 nop
+800050d4: 00000013 nop
+800050d8: 00000013 nop
+800050dc: 00000013 nop
+800050e0: 00000013 nop
+800050e4: 00000013 nop
+800050e8: 00000013 nop
+800050ec: 00000013 nop
+800050f0: 00000013 nop
+800050f4: 00000013 nop
+800050f8: 00000013 nop
+800050fc: 00000013 nop
+80005100: 00000013 nop
+80005104: 00000013 nop
+80005108: 00000013 nop
+8000510c: 00000013 nop
+80005110: 00000013 nop
+80005114: 00000013 nop
+80005118: 00000013 nop
+8000511c: 00000013 nop
+80005120: 00000013 nop
+80005124: 00000013 nop
+80005128: 00000013 nop
+8000512c: 00000013 nop
+80005130: 00000013 nop
+80005134: 00000013 nop
+80005138: 00000013 nop
+8000513c: 00000013 nop
+80005140: 00000013 nop
+80005144: 00000013 nop
+80005148: 00000013 nop
+8000514c: 00000013 nop
+80005150: 00000013 nop
+80005154: 00000013 nop
+80005158: 00000013 nop
+8000515c: 00000013 nop
+80005160: 00000013 nop
+80005164: 00000013 nop
+80005168: 00000013 nop
+8000516c: 00000013 nop
+80005170: 00000013 nop
+80005174: 00000013 nop
+80005178: 00000013 nop
+8000517c: 00000013 nop
+80005180: 00000013 nop
+80005184: 00000013 nop
+80005188: 00000013 nop
+8000518c: 00000013 nop
+80005190: 00000013 nop
+80005194: 00000013 nop
+80005198: 00000013 nop
+8000519c: 00000013 nop
+800051a0: 00000013 nop
+800051a4: 00000013 nop
+800051a8: 00000013 nop
+800051ac: 00000013 nop
+800051b0: 00000013 nop
+800051b4: 00000013 nop
+800051b8: 00000013 nop
+800051bc: 00000013 nop
+800051c0: 00000013 nop
+800051c4: 00000013 nop
+800051c8: 00000013 nop
+800051cc: 00000013 nop
+800051d0: 00000013 nop
+800051d4: 00000013 nop
+800051d8: 00000013 nop
+800051dc: 00000013 nop
+800051e0: 00000013 nop
+800051e4: 00000013 nop
+800051e8: 00000013 nop
+800051ec: 00000013 nop
+800051f0: 00000013 nop
+800051f4: 00000013 nop
+800051f8: 00000013 nop
+800051fc: 00000013 nop
+80005200: 00000013 nop
+80005204: 00000013 nop
+80005208: 00000013 nop
+8000520c: 00000013 nop
+80005210: 00000013 nop
+80005214: 00000013 nop
+80005218: 00000013 nop
+8000521c: 00000013 nop
+80005220: 00000013 nop
+80005224: 00000013 nop
+80005228: 00000013 nop
+8000522c: 00000013 nop
+80005230: 00000013 nop
+80005234: 00000013 nop
+80005238: 00000013 nop
+8000523c: 00000013 nop
+80005240: 00000013 nop
+80005244: 00000013 nop
+80005248: 00000013 nop
+8000524c: 00000013 nop
+80005250: 00000013 nop
+80005254: 00000013 nop
+80005258: 00000013 nop
+8000525c: 00000013 nop
+80005260: 00000013 nop
+80005264: 00000013 nop
+80005268: 00000013 nop
+8000526c: 00000013 nop
+80005270: 00000013 nop
+80005274: 00000013 nop
+80005278: 00000013 nop
+8000527c: 00000013 nop
+80005280: 00000013 nop
+80005284: 00000013 nop
+80005288: 00000013 nop
+8000528c: 00000013 nop
+80005290: 00000013 nop
+80005294: 00000013 nop
+80005298: 00000013 nop
+8000529c: 00000013 nop
+800052a0: 00000013 nop
+800052a4: 00000013 nop
+800052a8: 00000013 nop
+800052ac: 00000013 nop
+800052b0: 00000013 nop
+800052b4: 00000013 nop
+800052b8: 00000013 nop
+800052bc: 00000013 nop
+800052c0: 00000013 nop
+800052c4: 00000013 nop
+800052c8: 00000013 nop
+800052cc: 00000013 nop
+800052d0: 00000013 nop
+800052d4: 00000013 nop
+800052d8: 00000013 nop
+800052dc: 00000013 nop
+800052e0: 00000013 nop
+800052e4: 00000013 nop
+800052e8: 00000013 nop
+800052ec: 00000013 nop
+800052f0: 00000013 nop
+800052f4: 00000013 nop
+800052f8: 00000013 nop
+800052fc: 00000013 nop
+80005300: 00000013 nop
+80005304: 00000013 nop
+80005308: 00000013 nop
+8000530c: 00000013 nop
+80005310: 00000013 nop
+80005314: 00000013 nop
+80005318: 00000013 nop
+8000531c: 00000013 nop
+80005320: 00000013 nop
+80005324: 00000013 nop
+80005328: 00000013 nop
+8000532c: 00000013 nop
+80005330: 00000013 nop
+80005334: 00000013 nop
+80005338: 00000013 nop
+8000533c: 00000013 nop
+80005340: 00000013 nop
+80005344: 00000013 nop
+80005348: 00000013 nop
+8000534c: 00000013 nop
+80005350: 00000013 nop
+80005354: 00000013 nop
+80005358: 00000013 nop
+8000535c: 00000013 nop
+80005360: 00000013 nop
+80005364: 00000013 nop
+80005368: 00000013 nop
+8000536c: 00000013 nop
+80005370: 00000013 nop
+80005374: 00000013 nop
+80005378: 00000013 nop
+8000537c: 00000013 nop
+80005380: 00000013 nop
+80005384: 00000013 nop
+80005388: 00000013 nop
+8000538c: 00000013 nop
+80005390: 00000013 nop
+80005394: 00000013 nop
+80005398: 00000013 nop
+8000539c: 00000013 nop
+800053a0: 00000013 nop
+800053a4: 00000013 nop
+800053a8: 00000013 nop
+800053ac: 00000013 nop
+800053b0: 00000013 nop
+800053b4: 00000013 nop
+800053b8: 00000013 nop
+800053bc: 00000013 nop
+800053c0: 00000013 nop
+800053c4: 00000013 nop
+800053c8: 00000013 nop
+800053cc: 00000013 nop
+800053d0: 00000013 nop
+800053d4: 00000013 nop
+800053d8: 00000013 nop
+800053dc: 00000013 nop
+800053e0: 00000013 nop
+800053e4: 00000013 nop
+800053e8: 00000013 nop
+800053ec: 00000013 nop
+800053f0: 00000013 nop
+800053f4: 00000013 nop
+800053f8: 00000013 nop
+800053fc: 00000013 nop
+80005400: 00000013 nop
+80005404: 00000013 nop
+80005408: 00000013 nop
+8000540c: 00000013 nop
+80005410: 00000013 nop
+80005414: 00000013 nop
+80005418: 00000013 nop
+8000541c: 00000013 nop
+80005420: 00000013 nop
+80005424: 00000013 nop
+80005428: 00000013 nop
+8000542c: 00000013 nop
+80005430: 00000013 nop
+80005434: 00000013 nop
+80005438: 00000013 nop
+8000543c: 00000013 nop
+80005440: 00000013 nop
+80005444: 00000013 nop
+80005448: 00000013 nop
+8000544c: 00000013 nop
+80005450: 00000013 nop
+80005454: 00000013 nop
+80005458: 00000013 nop
+8000545c: 00000013 nop
+80005460: 00000013 nop
+80005464: 00000013 nop
+80005468: 00000013 nop
+8000546c: 00000013 nop
+80005470: 00000013 nop
+80005474: 00000013 nop
+80005478: 00000013 nop
+8000547c: 00000013 nop
+80005480: 00000013 nop
+80005484: 00000013 nop
+80005488: 00000013 nop
+8000548c: 00000013 nop
+80005490: 00000013 nop
+80005494: 00000013 nop
+80005498: 00000013 nop
+8000549c: 00000013 nop
+800054a0: 00000013 nop
+800054a4: 00000013 nop
+800054a8: 00000013 nop
+800054ac: 00000013 nop
+800054b0: 00000013 nop
+800054b4: 00000013 nop
+800054b8: 00000013 nop
+800054bc: 00000013 nop
+800054c0: 00000013 nop
+800054c4: 00000013 nop
+800054c8: 00000013 nop
+800054cc: 00000013 nop
+800054d0: 00000013 nop
+800054d4: 00000013 nop
+800054d8: 00000013 nop
+800054dc: 00000013 nop
+800054e0: 00000013 nop
+800054e4: 00000013 nop
+800054e8: 00000013 nop
+800054ec: 00000013 nop
+800054f0: 00000013 nop
+800054f4: 00000013 nop
+800054f8: 00000013 nop
+800054fc: 00000013 nop
+80005500: 00000013 nop
+80005504: 00000013 nop
+80005508: 00000013 nop
+8000550c: 00000013 nop
+80005510: 00000013 nop
+80005514: 00000013 nop
+80005518: 00000013 nop
+8000551c: 00000013 nop
+80005520: 00000013 nop
+80005524: 00000013 nop
+80005528: 00000013 nop
+8000552c: 00000013 nop
+80005530: 00000013 nop
+80005534: 00000013 nop
+80005538: 00000013 nop
+8000553c: 00000013 nop
+80005540: 00000013 nop
+80005544: 00000013 nop
+80005548: 00000013 nop
+8000554c: 00000013 nop
+80005550: 00000013 nop
+80005554: 00000013 nop
+80005558: 00000013 nop
+8000555c: 00000013 nop
+80005560: 00000013 nop
+80005564: 00000013 nop
+80005568: 00000013 nop
+8000556c: 00000013 nop
+80005570: 00000013 nop
+80005574: 00000013 nop
+80005578: 00000013 nop
+8000557c: 00000013 nop
+80005580: 00000013 nop
+80005584: 00000013 nop
+80005588: 00000013 nop
+8000558c: 00000013 nop
+80005590: 00000013 nop
+80005594: 00000013 nop
+80005598: 00000013 nop
+8000559c: 00000013 nop
+800055a0: 00000013 nop
+800055a4: 00000013 nop
+800055a8: 00000013 nop
+800055ac: 00000013 nop
+800055b0: 00000013 nop
+800055b4: 00000013 nop
+800055b8: 00000013 nop
+800055bc: 00000013 nop
+800055c0: 00000013 nop
+800055c4: 00000013 nop
+800055c8: 00000013 nop
+800055cc: 00000013 nop
+800055d0: 00000013 nop
+800055d4: 00000013 nop
+800055d8: 00000013 nop
+800055dc: 00000013 nop
+800055e0: 00000013 nop
+800055e4: 00000013 nop
+800055e8: 00000013 nop
+800055ec: 00000013 nop
+800055f0: 00000013 nop
+800055f4: 00000013 nop
+800055f8: 00000013 nop
+800055fc: 00000013 nop
+80005600: 00000013 nop
+80005604: 00000013 nop
+80005608: 00000013 nop
+8000560c: 00000013 nop
+80005610: 00000013 nop
+80005614: 00000013 nop
+80005618: 00000013 nop
+8000561c: 00000013 nop
+80005620: 00000013 nop
+80005624: 00000013 nop
+80005628: 00000013 nop
+8000562c: 00000013 nop
+80005630: 00000013 nop
+80005634: 00000013 nop
+80005638: 00000013 nop
+8000563c: 00000013 nop
+80005640: 00000013 nop
+80005644: 00000013 nop
+80005648: 00000013 nop
+8000564c: 00000013 nop
+80005650: 00000013 nop
+80005654: 00000013 nop
+80005658: 00000013 nop
+8000565c: 00000013 nop
+80005660: 00000013 nop
+80005664: 00000013 nop
+80005668: 00000013 nop
+8000566c: 00000013 nop
+80005670: 00000013 nop
+80005674: 00000013 nop
+80005678: 00000013 nop
+8000567c: 00000013 nop
+80005680: 00000013 nop
+80005684: 00000013 nop
+80005688: 00000013 nop
+8000568c: 00000013 nop
+80005690: 00000013 nop
+80005694: 00000013 nop
+80005698: 00000013 nop
+8000569c: 00000013 nop
+800056a0: 00000013 nop
+800056a4: 00000013 nop
+800056a8: 00000013 nop
+800056ac: 00000013 nop
+800056b0: 00000013 nop
+800056b4: 00000013 nop
+800056b8: 00000013 nop
+800056bc: 00000013 nop
+800056c0: 00000013 nop
+800056c4: 00000013 nop
+800056c8: 00000013 nop
+800056cc: 00000013 nop
+800056d0: 00000013 nop
+800056d4: 00000013 nop
+800056d8: 00000013 nop
+800056dc: 00000013 nop
+800056e0: 00000013 nop
+800056e4: 00000013 nop
+800056e8: 00000013 nop
+800056ec: 00000013 nop
+800056f0: 00000013 nop
+800056f4: 00000013 nop
+800056f8: 00000013 nop
+800056fc: 00000013 nop
+80005700: 00000013 nop
+80005704: 00000013 nop
+80005708: 00000013 nop
+8000570c: 00000013 nop
+80005710: 00000013 nop
+80005714: 00000013 nop
+80005718: 00000013 nop
+8000571c: 00000013 nop
+80005720: 00000013 nop
+80005724: 00000013 nop
+80005728: 00000013 nop
+8000572c: 00000013 nop
+80005730: 00000013 nop
+80005734: 00000013 nop
+80005738: 00000013 nop
+8000573c: 00000013 nop
+80005740: 00000013 nop
+80005744: 00000013 nop
+80005748: 00000013 nop
+8000574c: 00000013 nop
+80005750: 00000013 nop
+80005754: 00000013 nop
+80005758: 00000013 nop
+8000575c: 00000013 nop
+80005760: 00000013 nop
+80005764: 00000013 nop
+80005768: 00000013 nop
+8000576c: 00000013 nop
+80005770: 00000013 nop
+80005774: 00000013 nop
+80005778: 00000013 nop
+8000577c: 00000013 nop
+80005780: 00000013 nop
+80005784: 00000013 nop
+80005788: 00000013 nop
+8000578c: 00000013 nop
+80005790: 00000013 nop
+80005794: 00000013 nop
+80005798: 00000013 nop
+8000579c: 00000013 nop
+800057a0: 00000013 nop
+800057a4: 00000013 nop
+800057a8: 00000013 nop
+800057ac: 00000013 nop
+800057b0: 00000013 nop
+800057b4: 00000013 nop
+800057b8: 00000013 nop
+800057bc: 00000013 nop
+800057c0: 00000013 nop
+800057c4: 00000013 nop
+800057c8: 00000013 nop
+800057cc: 00000013 nop
+800057d0: 00000013 nop
+800057d4: 00000013 nop
+800057d8: 00000013 nop
+800057dc: 00000013 nop
+800057e0: 00000013 nop
+800057e4: 00000013 nop
+800057e8: 00000013 nop
+800057ec: 00000013 nop
+800057f0: 00000013 nop
+800057f4: 00000013 nop
+800057f8: 00000013 nop
+800057fc: 00000013 nop
+80005800: 00000013 nop
+80005804: 00000013 nop
+80005808: 00000013 nop
+8000580c: 00000013 nop
+80005810: 00000013 nop
+80005814: 00000013 nop
+80005818: 00000013 nop
+8000581c: 00000013 nop
+80005820: 00000013 nop
+80005824: 00000013 nop
+80005828: 00000013 nop
+8000582c: 00000013 nop
+80005830: 00000013 nop
+80005834: 00000013 nop
+80005838: 00000013 nop
+8000583c: 00000013 nop
+80005840: 00000013 nop
+80005844: 00000013 nop
+80005848: 00000013 nop
+8000584c: 00000013 nop
+80005850: 00000013 nop
+80005854: 00000013 nop
+80005858: 00000013 nop
+8000585c: 00000013 nop
+80005860: 00000013 nop
+80005864: 00000013 nop
+80005868: 00000013 nop
+8000586c: 00000013 nop
+80005870: 00000013 nop
+80005874: 00000013 nop
+80005878: 00000013 nop
+8000587c: 00000013 nop
+80005880: 00000013 nop
+80005884: 00000013 nop
+80005888: 00000013 nop
+8000588c: 00000013 nop
+80005890: 00000013 nop
+80005894: 00000013 nop
+80005898: 00000013 nop
+8000589c: 00000013 nop
+800058a0: 00000013 nop
+800058a4: 00000013 nop
+800058a8: 00000013 nop
+800058ac: 00000013 nop
+800058b0: 00000013 nop
+800058b4: 00000013 nop
+800058b8: 00000013 nop
+800058bc: 00000013 nop
+800058c0: 00000013 nop
+800058c4: 00000013 nop
+800058c8: 00000013 nop
+800058cc: 00000013 nop
+800058d0: 00000013 nop
+800058d4: 00000013 nop
+800058d8: 00000013 nop
+800058dc: 00000013 nop
+800058e0: 00000013 nop
+800058e4: 00000013 nop
+800058e8: 00000013 nop
+800058ec: 00000013 nop
+800058f0: 00000013 nop
+800058f4: 00000013 nop
+800058f8: 00000013 nop
+800058fc: 00000013 nop
+80005900: 00000013 nop
+80005904: 00000013 nop
+80005908: 00000013 nop
+8000590c: 00000013 nop
+80005910: 00000013 nop
+80005914: 00000013 nop
+80005918: 00000013 nop
+8000591c: 00000013 nop
+80005920: 00000013 nop
+80005924: 00000013 nop
+80005928: 00000013 nop
+8000592c: 00000013 nop
+80005930: 00000013 nop
+80005934: 00000013 nop
+80005938: 00000013 nop
+8000593c: 00000013 nop
+80005940: 00000013 nop
+80005944: 00000013 nop
+80005948: 00000013 nop
+8000594c: 00000013 nop
+80005950: 00000013 nop
+80005954: 00000013 nop
+80005958: 00000013 nop
+8000595c: 00000013 nop
+80005960: 00000013 nop
+80005964: 00000013 nop
+80005968: 00000013 nop
+8000596c: 00000013 nop
+80005970: 00000013 nop
+80005974: 00000013 nop
+80005978: 00000013 nop
+8000597c: 00000013 nop
+80005980: 00000013 nop
+80005984: 00000013 nop
+80005988: 00000013 nop
+8000598c: 00000013 nop
+80005990: 00000013 nop
+80005994: 00000013 nop
+80005998: 00000013 nop
+8000599c: 00000013 nop
+800059a0: 00000013 nop
+800059a4: 00000013 nop
+800059a8: 00000013 nop
+800059ac: 00000013 nop
+800059b0: 00000013 nop
+800059b4: 00000013 nop
+800059b8: 00000013 nop
+800059bc: 00000013 nop
+800059c0: 00000013 nop
+800059c4: 00000013 nop
+800059c8: 00000013 nop
+800059cc: 00000013 nop
+800059d0: 00000013 nop
+800059d4: 00000013 nop
+800059d8: 00000013 nop
+800059dc: 00000013 nop
+800059e0: 00000013 nop
+800059e4: 00000013 nop
+800059e8: 00000013 nop
+800059ec: 00000013 nop
+800059f0: 00000013 nop
+800059f4: 00000013 nop
+800059f8: 00000013 nop
+800059fc: 00000013 nop
+80005a00: 00000013 nop
+80005a04: 00000013 nop
+80005a08: 00000013 nop
+80005a0c: 00000013 nop
+80005a10: 00000013 nop
+80005a14: 00000013 nop
+80005a18: 00000013 nop
+80005a1c: 00000013 nop
+80005a20: 00000013 nop
+80005a24: 00000013 nop
+80005a28: 00000013 nop
+80005a2c: 00000013 nop
+80005a30: 00000013 nop
+80005a34: 00000013 nop
+80005a38: 00000013 nop
+80005a3c: 00000013 nop
+80005a40: 00000013 nop
+80005a44: 00000013 nop
+80005a48: 00000013 nop
+80005a4c: 00000013 nop
+80005a50: 00000013 nop
+80005a54: 00000013 nop
+80005a58: 00000013 nop
+80005a5c: 00000013 nop
+80005a60: 00000013 nop
+80005a64: 00000013 nop
+80005a68: 00000013 nop
+80005a6c: 00000013 nop
+80005a70: 00000013 nop
+80005a74: 00000013 nop
+80005a78: 00000013 nop
+80005a7c: 00000013 nop
+80005a80: 00000013 nop
+80005a84: 00000013 nop
+80005a88: 00000013 nop
+80005a8c: 00000013 nop
+80005a90: 00000013 nop
+80005a94: 00000013 nop
+80005a98: 00000013 nop
+80005a9c: 00000013 nop
+80005aa0: 00000013 nop
+80005aa4: 00000013 nop
+80005aa8: 00000013 nop
+80005aac: 00000013 nop
+80005ab0: 00000013 nop
+80005ab4: 00000013 nop
+80005ab8: 00000013 nop
+80005abc: 00000013 nop
+80005ac0: 00000013 nop
+80005ac4: 00000013 nop
+80005ac8: 00000013 nop
+80005acc: 00000013 nop
+80005ad0: 00000013 nop
+80005ad4: 00000013 nop
+80005ad8: 00000013 nop
+80005adc: 00000013 nop
+80005ae0: 00000013 nop
+80005ae4: 00000013 nop
+80005ae8: 00000013 nop
+80005aec: 00000013 nop
+80005af0: 00000013 nop
+80005af4: 00000013 nop
+80005af8: 00000013 nop
+80005afc: 00000013 nop
+80005b00: 00000013 nop
+80005b04: 00000013 nop
+80005b08: 00000013 nop
+80005b0c: 00000013 nop
+80005b10: 00000013 nop
+80005b14: 00000013 nop
+80005b18: 00000013 nop
+80005b1c: 00000013 nop
+80005b20: 00000013 nop
+80005b24: 00000013 nop
+80005b28: 00000013 nop
+80005b2c: 00000013 nop
+80005b30: 00000013 nop
+80005b34: 00000013 nop
+80005b38: 00000013 nop
+80005b3c: 00000013 nop
+80005b40: 00000013 nop
+80005b44: 00000013 nop
+80005b48: 00000013 nop
+80005b4c: 00000013 nop
+80005b50: 00000013 nop
+80005b54: 00000013 nop
+80005b58: 00000013 nop
+80005b5c: 00000013 nop
+80005b60: 00000013 nop
+80005b64: 00000013 nop
+80005b68: 00000013 nop
+80005b6c: 00000013 nop
+80005b70: 00000013 nop
+80005b74: 00000013 nop
+80005b78: 00000013 nop
+80005b7c: 00000013 nop
+80005b80: 00000013 nop
+80005b84: 00000013 nop
+80005b88: 00000013 nop
+80005b8c: 00000013 nop
+80005b90: 00000013 nop
+80005b94: 00000013 nop
+80005b98: 00000013 nop
+80005b9c: 00000013 nop
+80005ba0: 00000013 nop
+80005ba4: 00000013 nop
+80005ba8: 00000013 nop
+80005bac: 00000013 nop
+80005bb0: 00000013 nop
+80005bb4: 00000013 nop
+80005bb8: 00000013 nop
+80005bbc: 00000013 nop
+80005bc0: 00000013 nop
+80005bc4: 00000013 nop
+80005bc8: 00000013 nop
+80005bcc: 00000013 nop
+80005bd0: 00000013 nop
+80005bd4: 00000013 nop
+80005bd8: 00000013 nop
+80005bdc: 00000013 nop
+80005be0: 00000013 nop
+80005be4: 00000013 nop
+80005be8: 00000013 nop
+80005bec: 00000013 nop
+80005bf0: 00000013 nop
+80005bf4: 00000013 nop
+80005bf8: 00000013 nop
+80005bfc: 00000013 nop
+80005c00: 00000013 nop
+80005c04: 00000013 nop
+80005c08: 00000013 nop
+80005c0c: 00000013 nop
+80005c10: 00000013 nop
+80005c14: 00000013 nop
+80005c18: 00000013 nop
+80005c1c: 00000013 nop
+80005c20: 00000013 nop
+80005c24: 00000013 nop
+80005c28: 00000013 nop
+80005c2c: 00000013 nop
+80005c30: 00000013 nop
+80005c34: 00000013 nop
+80005c38: 00000013 nop
+80005c3c: 00000013 nop
+80005c40: 00000013 nop
+80005c44: 00000013 nop
+80005c48: 00000013 nop
+80005c4c: 00000013 nop
+80005c50: 00000013 nop
+80005c54: 00000013 nop
+80005c58: 00000013 nop
+80005c5c: 00000013 nop
+80005c60: 00000013 nop
+80005c64: 00000013 nop
+80005c68: 00000013 nop
+80005c6c: 00000013 nop
+80005c70: 00000013 nop
+80005c74: 00000013 nop
+80005c78: 00000013 nop
+80005c7c: 00000013 nop
+80005c80: 00000013 nop
+80005c84: 00000013 nop
+80005c88: 00000013 nop
+80005c8c: 00000013 nop
+80005c90: 00000013 nop
+80005c94: 00000013 nop
+80005c98: 00000013 nop
+80005c9c: 00000013 nop
+80005ca0: 00000013 nop
+80005ca4: 00000013 nop
+80005ca8: 00000013 nop
+80005cac: 00000013 nop
+80005cb0: 00000013 nop
+80005cb4: 00000013 nop
+80005cb8: 00000013 nop
+80005cbc: 00000013 nop
+80005cc0: 00000013 nop
+80005cc4: 00000013 nop
+80005cc8: 00000013 nop
+80005ccc: 00000013 nop
+80005cd0: 00000013 nop
+80005cd4: 00000013 nop
+80005cd8: 00000013 nop
+80005cdc: 00000013 nop
+80005ce0: 00000013 nop
+80005ce4: 00000013 nop
+80005ce8: 00000013 nop
+80005cec: 00000013 nop
+80005cf0: 00000013 nop
+80005cf4: 00000013 nop
+80005cf8: 00000013 nop
+80005cfc: 00000013 nop
+80005d00: 00000013 nop
+80005d04: 00000013 nop
+80005d08: 00000013 nop
+80005d0c: 00000013 nop
+80005d10: 00000013 nop
+80005d14: 00000013 nop
+80005d18: 00000013 nop
+80005d1c: 00000013 nop
+80005d20: 00000013 nop
+80005d24: 00000013 nop
+80005d28: 00000013 nop
+80005d2c: 00000013 nop
+80005d30: 00000013 nop
+80005d34: 00000013 nop
+80005d38: 00000013 nop
+80005d3c: 00000013 nop
+80005d40: 00000013 nop
+80005d44: 00000013 nop
+80005d48: 00000013 nop
+80005d4c: 00000013 nop
+80005d50: 00000013 nop
+80005d54: 00000013 nop
+80005d58: 00000013 nop
+80005d5c: 00000013 nop
+80005d60: 00000013 nop
+80005d64: 00000013 nop
+80005d68: 00000013 nop
+80005d6c: 00000013 nop
+80005d70: 00000013 nop
+80005d74: 00000013 nop
+80005d78: 00000013 nop
+80005d7c: 00000013 nop
+80005d80: 00000013 nop
+80005d84: 00000013 nop
+80005d88: 00000013 nop
+80005d8c: 00000013 nop
+80005d90: 00000013 nop
+80005d94: 00000013 nop
+80005d98: 00000013 nop
+80005d9c: 00000013 nop
+80005da0: 00000013 nop
+80005da4: 00000013 nop
+80005da8: 00000013 nop
+80005dac: 00000013 nop
+80005db0: 00000013 nop
+80005db4: 00000013 nop
+80005db8: 00000013 nop
+80005dbc: 00000013 nop
+80005dc0: 00000013 nop
+80005dc4: 00000013 nop
+80005dc8: 00000013 nop
+80005dcc: 00000013 nop
+80005dd0: 00000013 nop
+80005dd4: 00000013 nop
+80005dd8: 00000013 nop
+80005ddc: 00000013 nop
+80005de0: 00000013 nop
+80005de4: 00000013 nop
+80005de8: 00000013 nop
+80005dec: 00000013 nop
+80005df0: 00000013 nop
+80005df4: 00000013 nop
+80005df8: 00000013 nop
+80005dfc: 00000013 nop
+80005e00: 00000013 nop
+80005e04: 00000013 nop
+80005e08: 00000013 nop
+80005e0c: 00000013 nop
+80005e10: 00000013 nop
+80005e14: 00000013 nop
+80005e18: 00000013 nop
+80005e1c: 00000013 nop
+80005e20: 00000013 nop
+80005e24: 00000013 nop
+80005e28: 00000013 nop
+80005e2c: 00000013 nop
+80005e30: 00000013 nop
+80005e34: 00000013 nop
+80005e38: 00000013 nop
+80005e3c: 00000013 nop
+80005e40: 00000013 nop
+80005e44: 00000013 nop
+80005e48: 00000013 nop
+80005e4c: 00000013 nop
+80005e50: 00000013 nop
+80005e54: 00000013 nop
+80005e58: 00000013 nop
+80005e5c: 00000013 nop
+80005e60: 00000013 nop
+80005e64: 00000013 nop
+80005e68: 00000013 nop
+80005e6c: 00000013 nop
+80005e70: 00000013 nop
+80005e74: 00000013 nop
+80005e78: 00000013 nop
+80005e7c: 00000013 nop
+80005e80: 00000013 nop
+80005e84: 00000013 nop
+80005e88: 00000013 nop
+80005e8c: 00000013 nop
+80005e90: 00000013 nop
+80005e94: 00000013 nop
+80005e98: 00000013 nop
+80005e9c: 00000013 nop
+80005ea0: 00000013 nop
+80005ea4: 00000013 nop
+80005ea8: 00000013 nop
+80005eac: 00000013 nop
+80005eb0: 00000013 nop
+80005eb4: 00000013 nop
+80005eb8: 00000013 nop
+80005ebc: 00000013 nop
+80005ec0: 00000013 nop
+80005ec4: 00000013 nop
+80005ec8: 00000013 nop
+80005ecc: 00000013 nop
+80005ed0: 00000013 nop
+80005ed4: 00000013 nop
+80005ed8: 00000013 nop
+80005edc: 00000013 nop
+80005ee0: 00000013 nop
+80005ee4: 00000013 nop
+80005ee8: 00000013 nop
+80005eec: 00000013 nop
+80005ef0: 00000013 nop
+80005ef4: 00000013 nop
+80005ef8: 00000013 nop
+80005efc: 00000013 nop
+80005f00: 00000013 nop
+80005f04: 00000013 nop
+80005f08: 00000013 nop
+80005f0c: 00000013 nop
+80005f10: 00000013 nop
+80005f14: 00000013 nop
+80005f18: 00000013 nop
+80005f1c: 00000013 nop
+80005f20: 00000013 nop
+80005f24: 00000013 nop
+80005f28: 00000013 nop
+80005f2c: 00000013 nop
+80005f30: 00000013 nop
+80005f34: 00000013 nop
+80005f38: 00000013 nop
+80005f3c: 00000013 nop
+80005f40: 00000013 nop
+80005f44: 00000013 nop
+80005f48: 00000013 nop
+80005f4c: 00000013 nop
+80005f50: 00000013 nop
+80005f54: 00000013 nop
+80005f58: 00000013 nop
+80005f5c: 00000013 nop
+80005f60: 00000013 nop
+80005f64: 00000013 nop
+80005f68: 00000013 nop
+80005f6c: 00000013 nop
+80005f70: 00000013 nop
+80005f74: 00000013 nop
+80005f78: 00000013 nop
+80005f7c: 00000013 nop
+80005f80: 00000013 nop
+80005f84: 00000013 nop
+80005f88: 00000013 nop
+80005f8c: 00000013 nop
+80005f90: 00000013 nop
+80005f94: 00000013 nop
+80005f98: 00000013 nop
+80005f9c: 00000013 nop
+80005fa0: 00000013 nop
+80005fa4: 00000013 nop
+80005fa8: 00000013 nop
+80005fac: 00000013 nop
+80005fb0: 00000013 nop
+80005fb4: 00000013 nop
+80005fb8: 00000013 nop
+80005fbc: 00000013 nop
+80005fc0: 00000013 nop
+80005fc4: 00000013 nop
+80005fc8: 00000013 nop
+80005fcc: 00000013 nop
+80005fd0: 00000013 nop
+80005fd4: 00000013 nop
+80005fd8: 00000013 nop
+80005fdc: 00000013 nop
+80005fe0: 00000013 nop
+80005fe4: 00000013 nop
+80005fe8: 00000013 nop
+80005fec: 00000013 nop
+80005ff0: 00000013 nop
+80005ff4: 00000013 nop
+80005ff8: 00000013 nop
+80005ffc: 00000013 nop
+
+80006000 <ROM_1>:
+80006000: 1110 addi a2,sp,160
+80006002: 1312 slli t1,t1,0x24
+80006004: 1514 addi a3,sp,672
+80006006: 1716 slli a4,a4,0x25
+80006008: 1918 addi a4,sp,176
+8000600a: 1b1a slli s6,s6,0x26
+8000600c: 1d1c addi a5,sp,688
+8000600e: 1f1e slli t5,t5,0x27
+80006010: 00000013 nop
+80006014: 00000013 nop
+80006018: 00000013 nop
+8000601c: 00000013 nop
+80006020: 00000013 nop
+80006024: 00000013 nop
+80006028: 00000013 nop
+8000602c: 00000013 nop
+80006030: 00000013 nop
+80006034: 00000013 nop
+80006038: 00000013 nop
+8000603c: 00000013 nop
+80006040: 00000013 nop
+80006044: 00000013 nop
+80006048: 00000013 nop
+8000604c: 00000013 nop
+80006050: 00000013 nop
+80006054: 00000013 nop
+80006058: 00000013 nop
+8000605c: 00000013 nop
+80006060: 00000013 nop
+80006064: 00000013 nop
+80006068: 00000013 nop
+8000606c: 00000013 nop
+80006070: 00000013 nop
+80006074: 00000013 nop
+80006078: 00000013 nop
+8000607c: 00000013 nop
+80006080: 00000013 nop
+80006084: 00000013 nop
+80006088: 00000013 nop
+8000608c: 00000013 nop
+80006090: 00000013 nop
+80006094: 00000013 nop
+80006098: 00000013 nop
+8000609c: 00000013 nop
+800060a0: 00000013 nop
+800060a4: 00000013 nop
+800060a8: 00000013 nop
+800060ac: 00000013 nop
+800060b0: 00000013 nop
+800060b4: 00000013 nop
+800060b8: 00000013 nop
+800060bc: 00000013 nop
+800060c0: 00000013 nop
+800060c4: 00000013 nop
+800060c8: 00000013 nop
+800060cc: 00000013 nop
+800060d0: 00000013 nop
+800060d4: 00000013 nop
+800060d8: 00000013 nop
+800060dc: 00000013 nop
+800060e0: 00000013 nop
+800060e4: 00000013 nop
+800060e8: 00000013 nop
+800060ec: 00000013 nop
+800060f0: 00000013 nop
+800060f4: 00000013 nop
+800060f8: 00000013 nop
+800060fc: 00000013 nop
+80006100: 00000013 nop
+80006104: 00000013 nop
+80006108: 00000013 nop
+8000610c: 00000013 nop
+80006110: 00000013 nop
+80006114: 00000013 nop
+80006118: 00000013 nop
+8000611c: 00000013 nop
+80006120: 00000013 nop
+80006124: 00000013 nop
+80006128: 00000013 nop
+8000612c: 00000013 nop
+80006130: 00000013 nop
+80006134: 00000013 nop
+80006138: 00000013 nop
+8000613c: 00000013 nop
+80006140: 00000013 nop
+80006144: 00000013 nop
+80006148: 00000013 nop
+8000614c: 00000013 nop
+80006150: 00000013 nop
+80006154: 00000013 nop
+80006158: 00000013 nop
+8000615c: 00000013 nop
+80006160: 00000013 nop
+80006164: 00000013 nop
+80006168: 00000013 nop
+8000616c: 00000013 nop
+80006170: 00000013 nop
+80006174: 00000013 nop
+80006178: 00000013 nop
+8000617c: 00000013 nop
+80006180: 00000013 nop
+80006184: 00000013 nop
+80006188: 00000013 nop
+8000618c: 00000013 nop
+80006190: 00000013 nop
+80006194: 00000013 nop
+80006198: 00000013 nop
+8000619c: 00000013 nop
+800061a0: 00000013 nop
+800061a4: 00000013 nop
+800061a8: 00000013 nop
+800061ac: 00000013 nop
+800061b0: 00000013 nop
+800061b4: 00000013 nop
+800061b8: 00000013 nop
+800061bc: 00000013 nop
+800061c0: 00000013 nop
+800061c4: 00000013 nop
+800061c8: 00000013 nop
+800061cc: 00000013 nop
+800061d0: 00000013 nop
+800061d4: 00000013 nop
+800061d8: 00000013 nop
+800061dc: 00000013 nop
+800061e0: 00000013 nop
+800061e4: 00000013 nop
+800061e8: 00000013 nop
+800061ec: 00000013 nop
+800061f0: 00000013 nop
+800061f4: 00000013 nop
+800061f8: 00000013 nop
+800061fc: 00000013 nop
+80006200: 00000013 nop
+80006204: 00000013 nop
+80006208: 00000013 nop
+8000620c: 00000013 nop
+80006210: 00000013 nop
+80006214: 00000013 nop
+80006218: 00000013 nop
+8000621c: 00000013 nop
+80006220: 00000013 nop
+80006224: 00000013 nop
+80006228: 00000013 nop
+8000622c: 00000013 nop
+80006230: 00000013 nop
+80006234: 00000013 nop
+80006238: 00000013 nop
+8000623c: 00000013 nop
+80006240: 00000013 nop
+80006244: 00000013 nop
+80006248: 00000013 nop
+8000624c: 00000013 nop
+80006250: 00000013 nop
+80006254: 00000013 nop
+80006258: 00000013 nop
+8000625c: 00000013 nop
+80006260: 00000013 nop
+80006264: 00000013 nop
+80006268: 00000013 nop
+8000626c: 00000013 nop
+80006270: 00000013 nop
+80006274: 00000013 nop
+80006278: 00000013 nop
+8000627c: 00000013 nop
+80006280: 00000013 nop
+80006284: 00000013 nop
+80006288: 00000013 nop
+8000628c: 00000013 nop
+80006290: 00000013 nop
+80006294: 00000013 nop
+80006298: 00000013 nop
+8000629c: 00000013 nop
+800062a0: 00000013 nop
+800062a4: 00000013 nop
+800062a8: 00000013 nop
+800062ac: 00000013 nop
+800062b0: 00000013 nop
+800062b4: 00000013 nop
+800062b8: 00000013 nop
+800062bc: 00000013 nop
+800062c0: 00000013 nop
+800062c4: 00000013 nop
+800062c8: 00000013 nop
+800062cc: 00000013 nop
+800062d0: 00000013 nop
+800062d4: 00000013 nop
+800062d8: 00000013 nop
+800062dc: 00000013 nop
+800062e0: 00000013 nop
+800062e4: 00000013 nop
+800062e8: 00000013 nop
+800062ec: 00000013 nop
+800062f0: 00000013 nop
+800062f4: 00000013 nop
+800062f8: 00000013 nop
+800062fc: 00000013 nop
+80006300: 00000013 nop
+80006304: 00000013 nop
+80006308: 00000013 nop
+8000630c: 00000013 nop
+80006310: 00000013 nop
+80006314: 00000013 nop
+80006318: 00000013 nop
+8000631c: 00000013 nop
+80006320: 00000013 nop
+80006324: 00000013 nop
+80006328: 00000013 nop
+8000632c: 00000013 nop
+80006330: 00000013 nop
+80006334: 00000013 nop
+80006338: 00000013 nop
+8000633c: 00000013 nop
+80006340: 00000013 nop
+80006344: 00000013 nop
+80006348: 00000013 nop
+8000634c: 00000013 nop
+80006350: 00000013 nop
+80006354: 00000013 nop
+80006358: 00000013 nop
+8000635c: 00000013 nop
+80006360: 00000013 nop
+80006364: 00000013 nop
+80006368: 00000013 nop
+8000636c: 00000013 nop
+80006370: 00000013 nop
+80006374: 00000013 nop
+80006378: 00000013 nop
+8000637c: 00000013 nop
+80006380: 00000013 nop
+80006384: 00000013 nop
+80006388: 00000013 nop
+8000638c: 00000013 nop
+80006390: 00000013 nop
+80006394: 00000013 nop
+80006398: 00000013 nop
+8000639c: 00000013 nop
+800063a0: 00000013 nop
+800063a4: 00000013 nop
+800063a8: 00000013 nop
+800063ac: 00000013 nop
+800063b0: 00000013 nop
+800063b4: 00000013 nop
+800063b8: 00000013 nop
+800063bc: 00000013 nop
+800063c0: 00000013 nop
+800063c4: 00000013 nop
+800063c8: 00000013 nop
+800063cc: 00000013 nop
+800063d0: 00000013 nop
+800063d4: 00000013 nop
+800063d8: 00000013 nop
+800063dc: 00000013 nop
+800063e0: 00000013 nop
+800063e4: 00000013 nop
+800063e8: 00000013 nop
+800063ec: 00000013 nop
+800063f0: 00000013 nop
+800063f4: 00000013 nop
+800063f8: 00000013 nop
+800063fc: 00000013 nop
+80006400: 00000013 nop
+80006404: 00000013 nop
+80006408: 00000013 nop
+8000640c: 00000013 nop
+80006410: 00000013 nop
+80006414: 00000013 nop
+80006418: 00000013 nop
+8000641c: 00000013 nop
+80006420: 00000013 nop
+80006424: 00000013 nop
+80006428: 00000013 nop
+8000642c: 00000013 nop
+80006430: 00000013 nop
+80006434: 00000013 nop
+80006438: 00000013 nop
+8000643c: 00000013 nop
+80006440: 00000013 nop
+80006444: 00000013 nop
+80006448: 00000013 nop
+8000644c: 00000013 nop
+80006450: 00000013 nop
+80006454: 00000013 nop
+80006458: 00000013 nop
+8000645c: 00000013 nop
+80006460: 00000013 nop
+80006464: 00000013 nop
+80006468: 00000013 nop
+8000646c: 00000013 nop
+80006470: 00000013 nop
+80006474: 00000013 nop
+80006478: 00000013 nop
+8000647c: 00000013 nop
+80006480: 00000013 nop
+80006484: 00000013 nop
+80006488: 00000013 nop
+8000648c: 00000013 nop
+80006490: 00000013 nop
+80006494: 00000013 nop
+80006498: 00000013 nop
+8000649c: 00000013 nop
+800064a0: 00000013 nop
+800064a4: 00000013 nop
+800064a8: 00000013 nop
+800064ac: 00000013 nop
+800064b0: 00000013 nop
+800064b4: 00000013 nop
+800064b8: 00000013 nop
+800064bc: 00000013 nop
+800064c0: 00000013 nop
+800064c4: 00000013 nop
+800064c8: 00000013 nop
+800064cc: 00000013 nop
+800064d0: 00000013 nop
+800064d4: 00000013 nop
+800064d8: 00000013 nop
+800064dc: 00000013 nop
+800064e0: 00000013 nop
+800064e4: 00000013 nop
+800064e8: 00000013 nop
+800064ec: 00000013 nop
+800064f0: 00000013 nop
+800064f4: 00000013 nop
+800064f8: 00000013 nop
+800064fc: 00000013 nop
+80006500: 00000013 nop
+80006504: 00000013 nop
+80006508: 00000013 nop
+8000650c: 00000013 nop
+80006510: 00000013 nop
+80006514: 00000013 nop
+80006518: 00000013 nop
+8000651c: 00000013 nop
+80006520: 00000013 nop
+80006524: 00000013 nop
+80006528: 00000013 nop
+8000652c: 00000013 nop
+80006530: 00000013 nop
+80006534: 00000013 nop
+80006538: 00000013 nop
+8000653c: 00000013 nop
+80006540: 00000013 nop
+80006544: 00000013 nop
+80006548: 00000013 nop
+8000654c: 00000013 nop
+80006550: 00000013 nop
+80006554: 00000013 nop
+80006558: 00000013 nop
+8000655c: 00000013 nop
+80006560: 00000013 nop
+80006564: 00000013 nop
+80006568: 00000013 nop
+8000656c: 00000013 nop
+80006570: 00000013 nop
+80006574: 00000013 nop
+80006578: 00000013 nop
+8000657c: 00000013 nop
+80006580: 00000013 nop
+80006584: 00000013 nop
+80006588: 00000013 nop
+8000658c: 00000013 nop
+80006590: 00000013 nop
+80006594: 00000013 nop
+80006598: 00000013 nop
+8000659c: 00000013 nop
+800065a0: 00000013 nop
+800065a4: 00000013 nop
+800065a8: 00000013 nop
+800065ac: 00000013 nop
+800065b0: 00000013 nop
+800065b4: 00000013 nop
+800065b8: 00000013 nop
+800065bc: 00000013 nop
+800065c0: 00000013 nop
+800065c4: 00000013 nop
+800065c8: 00000013 nop
+800065cc: 00000013 nop
+800065d0: 00000013 nop
+800065d4: 00000013 nop
+800065d8: 00000013 nop
+800065dc: 00000013 nop
+800065e0: 00000013 nop
+800065e4: 00000013 nop
+800065e8: 00000013 nop
+800065ec: 00000013 nop
+800065f0: 00000013 nop
+800065f4: 00000013 nop
+800065f8: 00000013 nop
+800065fc: 00000013 nop
+80006600: 00000013 nop
+80006604: 00000013 nop
+80006608: 00000013 nop
+8000660c: 00000013 nop
+80006610: 00000013 nop
+80006614: 00000013 nop
+80006618: 00000013 nop
+8000661c: 00000013 nop
+80006620: 00000013 nop
+80006624: 00000013 nop
+80006628: 00000013 nop
+8000662c: 00000013 nop
+80006630: 00000013 nop
+80006634: 00000013 nop
+80006638: 00000013 nop
+8000663c: 00000013 nop
+80006640: 00000013 nop
+80006644: 00000013 nop
+80006648: 00000013 nop
+8000664c: 00000013 nop
+80006650: 00000013 nop
+80006654: 00000013 nop
+80006658: 00000013 nop
+8000665c: 00000013 nop
+80006660: 00000013 nop
+80006664: 00000013 nop
+80006668: 00000013 nop
+8000666c: 00000013 nop
+80006670: 00000013 nop
+80006674: 00000013 nop
+80006678: 00000013 nop
+8000667c: 00000013 nop
+80006680: 00000013 nop
+80006684: 00000013 nop
+80006688: 00000013 nop
+8000668c: 00000013 nop
+80006690: 00000013 nop
+80006694: 00000013 nop
+80006698: 00000013 nop
+8000669c: 00000013 nop
+800066a0: 00000013 nop
+800066a4: 00000013 nop
+800066a8: 00000013 nop
+800066ac: 00000013 nop
+800066b0: 00000013 nop
+800066b4: 00000013 nop
+800066b8: 00000013 nop
+800066bc: 00000013 nop
+800066c0: 00000013 nop
+800066c4: 00000013 nop
+800066c8: 00000013 nop
+800066cc: 00000013 nop
+800066d0: 00000013 nop
+800066d4: 00000013 nop
+800066d8: 00000013 nop
+800066dc: 00000013 nop
+800066e0: 00000013 nop
+800066e4: 00000013 nop
+800066e8: 00000013 nop
+800066ec: 00000013 nop
+800066f0: 00000013 nop
+800066f4: 00000013 nop
+800066f8: 00000013 nop
+800066fc: 00000013 nop
+80006700: 00000013 nop
+80006704: 00000013 nop
+80006708: 00000013 nop
+8000670c: 00000013 nop
+80006710: 00000013 nop
+80006714: 00000013 nop
+80006718: 00000013 nop
+8000671c: 00000013 nop
+80006720: 00000013 nop
+80006724: 00000013 nop
+80006728: 00000013 nop
+8000672c: 00000013 nop
+80006730: 00000013 nop
+80006734: 00000013 nop
+80006738: 00000013 nop
+8000673c: 00000013 nop
+80006740: 00000013 nop
+80006744: 00000013 nop
+80006748: 00000013 nop
+8000674c: 00000013 nop
+80006750: 00000013 nop
+80006754: 00000013 nop
+80006758: 00000013 nop
+8000675c: 00000013 nop
+80006760: 00000013 nop
+80006764: 00000013 nop
+80006768: 00000013 nop
+8000676c: 00000013 nop
+80006770: 00000013 nop
+80006774: 00000013 nop
+80006778: 00000013 nop
+8000677c: 00000013 nop
+80006780: 00000013 nop
+80006784: 00000013 nop
+80006788: 00000013 nop
+8000678c: 00000013 nop
+80006790: 00000013 nop
+80006794: 00000013 nop
+80006798: 00000013 nop
+8000679c: 00000013 nop
+800067a0: 00000013 nop
+800067a4: 00000013 nop
+800067a8: 00000013 nop
+800067ac: 00000013 nop
+800067b0: 00000013 nop
+800067b4: 00000013 nop
+800067b8: 00000013 nop
+800067bc: 00000013 nop
+800067c0: 00000013 nop
+800067c4: 00000013 nop
+800067c8: 00000013 nop
+800067cc: 00000013 nop
+800067d0: 00000013 nop
+800067d4: 00000013 nop
+800067d8: 00000013 nop
+800067dc: 00000013 nop
+800067e0: 00000013 nop
+800067e4: 00000013 nop
+800067e8: 00000013 nop
+800067ec: 00000013 nop
+800067f0: 00000013 nop
+800067f4: 00000013 nop
+800067f8: 00000013 nop
+800067fc: 00000013 nop
+80006800: 00000013 nop
+80006804: 00000013 nop
+80006808: 00000013 nop
+8000680c: 00000013 nop
+80006810: 00000013 nop
+80006814: 00000013 nop
+80006818: 00000013 nop
+8000681c: 00000013 nop
+80006820: 00000013 nop
+80006824: 00000013 nop
+80006828: 00000013 nop
+8000682c: 00000013 nop
+80006830: 00000013 nop
+80006834: 00000013 nop
+80006838: 00000013 nop
+8000683c: 00000013 nop
+80006840: 00000013 nop
+80006844: 00000013 nop
+80006848: 00000013 nop
+8000684c: 00000013 nop
+80006850: 00000013 nop
+80006854: 00000013 nop
+80006858: 00000013 nop
+8000685c: 00000013 nop
+80006860: 00000013 nop
+80006864: 00000013 nop
+80006868: 00000013 nop
+8000686c: 00000013 nop
+80006870: 00000013 nop
+80006874: 00000013 nop
+80006878: 00000013 nop
+8000687c: 00000013 nop
+80006880: 00000013 nop
+80006884: 00000013 nop
+80006888: 00000013 nop
+8000688c: 00000013 nop
+80006890: 00000013 nop
+80006894: 00000013 nop
+80006898: 00000013 nop
+8000689c: 00000013 nop
+800068a0: 00000013 nop
+800068a4: 00000013 nop
+800068a8: 00000013 nop
+800068ac: 00000013 nop
+800068b0: 00000013 nop
+800068b4: 00000013 nop
+800068b8: 00000013 nop
+800068bc: 00000013 nop
+800068c0: 00000013 nop
+800068c4: 00000013 nop
+800068c8: 00000013 nop
+800068cc: 00000013 nop
+800068d0: 00000013 nop
+800068d4: 00000013 nop
+800068d8: 00000013 nop
+800068dc: 00000013 nop
+800068e0: 00000013 nop
+800068e4: 00000013 nop
+800068e8: 00000013 nop
+800068ec: 00000013 nop
+800068f0: 00000013 nop
+800068f4: 00000013 nop
+800068f8: 00000013 nop
+800068fc: 00000013 nop
+80006900: 00000013 nop
+80006904: 00000013 nop
+80006908: 00000013 nop
+8000690c: 00000013 nop
+80006910: 00000013 nop
+80006914: 00000013 nop
+80006918: 00000013 nop
+8000691c: 00000013 nop
+80006920: 00000013 nop
+80006924: 00000013 nop
+80006928: 00000013 nop
+8000692c: 00000013 nop
+80006930: 00000013 nop
+80006934: 00000013 nop
+80006938: 00000013 nop
+8000693c: 00000013 nop
+80006940: 00000013 nop
+80006944: 00000013 nop
+80006948: 00000013 nop
+8000694c: 00000013 nop
+80006950: 00000013 nop
+80006954: 00000013 nop
+80006958: 00000013 nop
+8000695c: 00000013 nop
+80006960: 00000013 nop
+80006964: 00000013 nop
+80006968: 00000013 nop
+8000696c: 00000013 nop
+80006970: 00000013 nop
+80006974: 00000013 nop
+80006978: 00000013 nop
+8000697c: 00000013 nop
+80006980: 00000013 nop
+80006984: 00000013 nop
+80006988: 00000013 nop
+8000698c: 00000013 nop
+80006990: 00000013 nop
+80006994: 00000013 nop
+80006998: 00000013 nop
+8000699c: 00000013 nop
+800069a0: 00000013 nop
+800069a4: 00000013 nop
+800069a8: 00000013 nop
+800069ac: 00000013 nop
+800069b0: 00000013 nop
+800069b4: 00000013 nop
+800069b8: 00000013 nop
+800069bc: 00000013 nop
+800069c0: 00000013 nop
+800069c4: 00000013 nop
+800069c8: 00000013 nop
+800069cc: 00000013 nop
+800069d0: 00000013 nop
+800069d4: 00000013 nop
+800069d8: 00000013 nop
+800069dc: 00000013 nop
+800069e0: 00000013 nop
+800069e4: 00000013 nop
+800069e8: 00000013 nop
+800069ec: 00000013 nop
+800069f0: 00000013 nop
+800069f4: 00000013 nop
+800069f8: 00000013 nop
+800069fc: 00000013 nop
+80006a00: 00000013 nop
+80006a04: 00000013 nop
+80006a08: 00000013 nop
+80006a0c: 00000013 nop
+80006a10: 00000013 nop
+80006a14: 00000013 nop
+80006a18: 00000013 nop
+80006a1c: 00000013 nop
+80006a20: 00000013 nop
+80006a24: 00000013 nop
+80006a28: 00000013 nop
+80006a2c: 00000013 nop
+80006a30: 00000013 nop
+80006a34: 00000013 nop
+80006a38: 00000013 nop
+80006a3c: 00000013 nop
+80006a40: 00000013 nop
+80006a44: 00000013 nop
+80006a48: 00000013 nop
+80006a4c: 00000013 nop
+80006a50: 00000013 nop
+80006a54: 00000013 nop
+80006a58: 00000013 nop
+80006a5c: 00000013 nop
+80006a60: 00000013 nop
+80006a64: 00000013 nop
+80006a68: 00000013 nop
+80006a6c: 00000013 nop
+80006a70: 00000013 nop
+80006a74: 00000013 nop
+80006a78: 00000013 nop
+80006a7c: 00000013 nop
+80006a80: 00000013 nop
+80006a84: 00000013 nop
+80006a88: 00000013 nop
+80006a8c: 00000013 nop
+80006a90: 00000013 nop
+80006a94: 00000013 nop
+80006a98: 00000013 nop
+80006a9c: 00000013 nop
+80006aa0: 00000013 nop
+80006aa4: 00000013 nop
+80006aa8: 00000013 nop
+80006aac: 00000013 nop
+80006ab0: 00000013 nop
+80006ab4: 00000013 nop
+80006ab8: 00000013 nop
+80006abc: 00000013 nop
+80006ac0: 00000013 nop
+80006ac4: 00000013 nop
+80006ac8: 00000013 nop
+80006acc: 00000013 nop
+80006ad0: 00000013 nop
+80006ad4: 00000013 nop
+80006ad8: 00000013 nop
+80006adc: 00000013 nop
+80006ae0: 00000013 nop
+80006ae4: 00000013 nop
+80006ae8: 00000013 nop
+80006aec: 00000013 nop
+80006af0: 00000013 nop
+80006af4: 00000013 nop
+80006af8: 00000013 nop
+80006afc: 00000013 nop
+80006b00: 00000013 nop
+80006b04: 00000013 nop
+80006b08: 00000013 nop
+80006b0c: 00000013 nop
+80006b10: 00000013 nop
+80006b14: 00000013 nop
+80006b18: 00000013 nop
+80006b1c: 00000013 nop
+80006b20: 00000013 nop
+80006b24: 00000013 nop
+80006b28: 00000013 nop
+80006b2c: 00000013 nop
+80006b30: 00000013 nop
+80006b34: 00000013 nop
+80006b38: 00000013 nop
+80006b3c: 00000013 nop
+80006b40: 00000013 nop
+80006b44: 00000013 nop
+80006b48: 00000013 nop
+80006b4c: 00000013 nop
+80006b50: 00000013 nop
+80006b54: 00000013 nop
+80006b58: 00000013 nop
+80006b5c: 00000013 nop
+80006b60: 00000013 nop
+80006b64: 00000013 nop
+80006b68: 00000013 nop
+80006b6c: 00000013 nop
+80006b70: 00000013 nop
+80006b74: 00000013 nop
+80006b78: 00000013 nop
+80006b7c: 00000013 nop
+80006b80: 00000013 nop
+80006b84: 00000013 nop
+80006b88: 00000013 nop
+80006b8c: 00000013 nop
+80006b90: 00000013 nop
+80006b94: 00000013 nop
+80006b98: 00000013 nop
+80006b9c: 00000013 nop
+80006ba0: 00000013 nop
+80006ba4: 00000013 nop
+80006ba8: 00000013 nop
+80006bac: 00000013 nop
+80006bb0: 00000013 nop
+80006bb4: 00000013 nop
+80006bb8: 00000013 nop
+80006bbc: 00000013 nop
+80006bc0: 00000013 nop
+80006bc4: 00000013 nop
+80006bc8: 00000013 nop
+80006bcc: 00000013 nop
+80006bd0: 00000013 nop
+80006bd4: 00000013 nop
+80006bd8: 00000013 nop
+80006bdc: 00000013 nop
+80006be0: 00000013 nop
+80006be4: 00000013 nop
+80006be8: 00000013 nop
+80006bec: 00000013 nop
+80006bf0: 00000013 nop
+80006bf4: 00000013 nop
+80006bf8: 00000013 nop
+80006bfc: 00000013 nop
+80006c00: 00000013 nop
+80006c04: 00000013 nop
+80006c08: 00000013 nop
+80006c0c: 00000013 nop
+80006c10: 00000013 nop
+80006c14: 00000013 nop
+80006c18: 00000013 nop
+80006c1c: 00000013 nop
+80006c20: 00000013 nop
+80006c24: 00000013 nop
+80006c28: 00000013 nop
+80006c2c: 00000013 nop
+80006c30: 00000013 nop
+80006c34: 00000013 nop
+80006c38: 00000013 nop
+80006c3c: 00000013 nop
+80006c40: 00000013 nop
+80006c44: 00000013 nop
+80006c48: 00000013 nop
+80006c4c: 00000013 nop
+80006c50: 00000013 nop
+80006c54: 00000013 nop
+80006c58: 00000013 nop
+80006c5c: 00000013 nop
+80006c60: 00000013 nop
+80006c64: 00000013 nop
+80006c68: 00000013 nop
+80006c6c: 00000013 nop
+80006c70: 00000013 nop
+80006c74: 00000013 nop
+80006c78: 00000013 nop
+80006c7c: 00000013 nop
+80006c80: 00000013 nop
+80006c84: 00000013 nop
+80006c88: 00000013 nop
+80006c8c: 00000013 nop
+80006c90: 00000013 nop
+80006c94: 00000013 nop
+80006c98: 00000013 nop
+80006c9c: 00000013 nop
+80006ca0: 00000013 nop
+80006ca4: 00000013 nop
+80006ca8: 00000013 nop
+80006cac: 00000013 nop
+80006cb0: 00000013 nop
+80006cb4: 00000013 nop
+80006cb8: 00000013 nop
+80006cbc: 00000013 nop
+80006cc0: 00000013 nop
+80006cc4: 00000013 nop
+80006cc8: 00000013 nop
+80006ccc: 00000013 nop
+80006cd0: 00000013 nop
+80006cd4: 00000013 nop
+80006cd8: 00000013 nop
+80006cdc: 00000013 nop
+80006ce0: 00000013 nop
+80006ce4: 00000013 nop
+80006ce8: 00000013 nop
+80006cec: 00000013 nop
+80006cf0: 00000013 nop
+80006cf4: 00000013 nop
+80006cf8: 00000013 nop
+80006cfc: 00000013 nop
+80006d00: 00000013 nop
+80006d04: 00000013 nop
+80006d08: 00000013 nop
+80006d0c: 00000013 nop
+80006d10: 00000013 nop
+80006d14: 00000013 nop
+80006d18: 00000013 nop
+80006d1c: 00000013 nop
+80006d20: 00000013 nop
+80006d24: 00000013 nop
+80006d28: 00000013 nop
+80006d2c: 00000013 nop
+80006d30: 00000013 nop
+80006d34: 00000013 nop
+80006d38: 00000013 nop
+80006d3c: 00000013 nop
+80006d40: 00000013 nop
+80006d44: 00000013 nop
+80006d48: 00000013 nop
+80006d4c: 00000013 nop
+80006d50: 00000013 nop
+80006d54: 00000013 nop
+80006d58: 00000013 nop
+80006d5c: 00000013 nop
+80006d60: 00000013 nop
+80006d64: 00000013 nop
+80006d68: 00000013 nop
+80006d6c: 00000013 nop
+80006d70: 00000013 nop
+80006d74: 00000013 nop
+80006d78: 00000013 nop
+80006d7c: 00000013 nop
+80006d80: 00000013 nop
+80006d84: 00000013 nop
+80006d88: 00000013 nop
+80006d8c: 00000013 nop
+80006d90: 00000013 nop
+80006d94: 00000013 nop
+80006d98: 00000013 nop
+80006d9c: 00000013 nop
+80006da0: 00000013 nop
+80006da4: 00000013 nop
+80006da8: 00000013 nop
+80006dac: 00000013 nop
+80006db0: 00000013 nop
+80006db4: 00000013 nop
+80006db8: 00000013 nop
+80006dbc: 00000013 nop
+80006dc0: 00000013 nop
+80006dc4: 00000013 nop
+80006dc8: 00000013 nop
+80006dcc: 00000013 nop
+80006dd0: 00000013 nop
+80006dd4: 00000013 nop
+80006dd8: 00000013 nop
+80006ddc: 00000013 nop
+80006de0: 00000013 nop
+80006de4: 00000013 nop
+80006de8: 00000013 nop
+80006dec: 00000013 nop
+80006df0: 00000013 nop
+80006df4: 00000013 nop
+80006df8: 00000013 nop
+80006dfc: 00000013 nop
+80006e00: 00000013 nop
+80006e04: 00000013 nop
+80006e08: 00000013 nop
+80006e0c: 00000013 nop
+80006e10: 00000013 nop
+80006e14: 00000013 nop
+80006e18: 00000013 nop
+80006e1c: 00000013 nop
+80006e20: 00000013 nop
+80006e24: 00000013 nop
+80006e28: 00000013 nop
+80006e2c: 00000013 nop
+80006e30: 00000013 nop
+80006e34: 00000013 nop
+80006e38: 00000013 nop
+80006e3c: 00000013 nop
+80006e40: 00000013 nop
+80006e44: 00000013 nop
+80006e48: 00000013 nop
+80006e4c: 00000013 nop
+80006e50: 00000013 nop
+80006e54: 00000013 nop
+80006e58: 00000013 nop
+80006e5c: 00000013 nop
+80006e60: 00000013 nop
+80006e64: 00000013 nop
+80006e68: 00000013 nop
+80006e6c: 00000013 nop
+80006e70: 00000013 nop
+80006e74: 00000013 nop
+80006e78: 00000013 nop
+80006e7c: 00000013 nop
+80006e80: 00000013 nop
+80006e84: 00000013 nop
+80006e88: 00000013 nop
+80006e8c: 00000013 nop
+80006e90: 00000013 nop
+80006e94: 00000013 nop
+80006e98: 00000013 nop
+80006e9c: 00000013 nop
+80006ea0: 00000013 nop
+80006ea4: 00000013 nop
+80006ea8: 00000013 nop
+80006eac: 00000013 nop
+80006eb0: 00000013 nop
+80006eb4: 00000013 nop
+80006eb8: 00000013 nop
+80006ebc: 00000013 nop
+80006ec0: 00000013 nop
+80006ec4: 00000013 nop
+80006ec8: 00000013 nop
+80006ecc: 00000013 nop
+80006ed0: 00000013 nop
+80006ed4: 00000013 nop
+80006ed8: 00000013 nop
+80006edc: 00000013 nop
+80006ee0: 00000013 nop
+80006ee4: 00000013 nop
+80006ee8: 00000013 nop
+80006eec: 00000013 nop
+80006ef0: 00000013 nop
+80006ef4: 00000013 nop
+80006ef8: 00000013 nop
+80006efc: 00000013 nop
+80006f00: 00000013 nop
+80006f04: 00000013 nop
+80006f08: 00000013 nop
+80006f0c: 00000013 nop
+80006f10: 00000013 nop
+80006f14: 00000013 nop
+80006f18: 00000013 nop
+80006f1c: 00000013 nop
+80006f20: 00000013 nop
+80006f24: 00000013 nop
+80006f28: 00000013 nop
+80006f2c: 00000013 nop
+80006f30: 00000013 nop
+80006f34: 00000013 nop
+80006f38: 00000013 nop
+80006f3c: 00000013 nop
+80006f40: 00000013 nop
+80006f44: 00000013 nop
+80006f48: 00000013 nop
+80006f4c: 00000013 nop
+80006f50: 00000013 nop
+80006f54: 00000013 nop
+80006f58: 00000013 nop
+80006f5c: 00000013 nop
+80006f60: 00000013 nop
+80006f64: 00000013 nop
+80006f68: 00000013 nop
+80006f6c: 00000013 nop
+80006f70: 00000013 nop
+80006f74: 00000013 nop
+80006f78: 00000013 nop
+80006f7c: 00000013 nop
+80006f80: 00000013 nop
+80006f84: 00000013 nop
+80006f88: 00000013 nop
+80006f8c: 00000013 nop
+80006f90: 00000013 nop
+80006f94: 00000013 nop
+80006f98: 00000013 nop
+80006f9c: 00000013 nop
+80006fa0: 00000013 nop
+80006fa4: 00000013 nop
+80006fa8: 00000013 nop
+80006fac: 00000013 nop
+80006fb0: 00000013 nop
+80006fb4: 00000013 nop
+80006fb8: 00000013 nop
+80006fbc: 00000013 nop
+80006fc0: 00000013 nop
+80006fc4: 00000013 nop
+80006fc8: 00000013 nop
+80006fcc: 00000013 nop
+80006fd0: 00000013 nop
+80006fd4: 00000013 nop
+80006fd8: 00000013 nop
+80006fdc: 00000013 nop
+80006fe0: 00000013 nop
+80006fe4: 00000013 nop
+80006fe8: 00000013 nop
+80006fec: 00000013 nop
+80006ff0: 00000013 nop
+80006ff4: 00000013 nop
+80006ff8: 00000013 nop
+80006ffc: 00000013 nop
+
+80007000 <ROM_2>:
+80007000: 2120 fld fs0,64(a0)
+80007002: 2322 fld ft6,8(sp)
+80007004: 2524 fld fs1,72(a0)
+80007006: 2726 fld fa4,72(sp)
+80007008: 2928 fld fa0,80(a0)
+8000700a: 2b2a fld fs6,136(sp)
+8000700c: 2d2c fld fa1,88(a0)
+8000700e: 2f2e fld ft10,200(sp)
+80007010: 00000013 nop
+80007014: 00000013 nop
+80007018: 00000013 nop
+8000701c: 00000013 nop
+80007020: 00000013 nop
+80007024: 00000013 nop
+80007028: 00000013 nop
+8000702c: 00000013 nop
+80007030: 00000013 nop
+80007034: 00000013 nop
+80007038: 00000013 nop
+8000703c: 00000013 nop
+80007040: 00000013 nop
+80007044: 00000013 nop
+80007048: 00000013 nop
+8000704c: 00000013 nop
+80007050: 00000013 nop
+80007054: 00000013 nop
+80007058: 00000013 nop
+8000705c: 00000013 nop
+80007060: 00000013 nop
+80007064: 00000013 nop
+80007068: 00000013 nop
+8000706c: 00000013 nop
+80007070: 00000013 nop
+80007074: 00000013 nop
+80007078: 00000013 nop
+8000707c: 00000013 nop
+80007080: 00000013 nop
+80007084: 00000013 nop
+80007088: 00000013 nop
+8000708c: 00000013 nop
+80007090: 00000013 nop
+80007094: 00000013 nop
+80007098: 00000013 nop
+8000709c: 00000013 nop
+800070a0: 00000013 nop
+800070a4: 00000013 nop
+800070a8: 00000013 nop
+800070ac: 00000013 nop
+800070b0: 00000013 nop
+800070b4: 00000013 nop
+800070b8: 00000013 nop
+800070bc: 00000013 nop
+800070c0: 00000013 nop
+800070c4: 00000013 nop
+800070c8: 00000013 nop
+800070cc: 00000013 nop
+800070d0: 00000013 nop
+800070d4: 00000013 nop
+800070d8: 00000013 nop
+800070dc: 00000013 nop
+800070e0: 00000013 nop
+800070e4: 00000013 nop
+800070e8: 00000013 nop
+800070ec: 00000013 nop
+800070f0: 00000013 nop
+800070f4: 00000013 nop
+800070f8: 00000013 nop
+800070fc: 00000013 nop
+80007100: 00000013 nop
+80007104: 00000013 nop
+80007108: 00000013 nop
+8000710c: 00000013 nop
+80007110: 00000013 nop
+80007114: 00000013 nop
+80007118: 00000013 nop
+8000711c: 00000013 nop
+80007120: 00000013 nop
+80007124: 00000013 nop
+80007128: 00000013 nop
+8000712c: 00000013 nop
+80007130: 00000013 nop
+80007134: 00000013 nop
+80007138: 00000013 nop
+8000713c: 00000013 nop
+80007140: 00000013 nop
+80007144: 00000013 nop
+80007148: 00000013 nop
+8000714c: 00000013 nop
+80007150: 00000013 nop
+80007154: 00000013 nop
+80007158: 00000013 nop
+8000715c: 00000013 nop
+80007160: 00000013 nop
+80007164: 00000013 nop
+80007168: 00000013 nop
+8000716c: 00000013 nop
+80007170: 00000013 nop
+80007174: 00000013 nop
+80007178: 00000013 nop
+8000717c: 00000013 nop
+80007180: 00000013 nop
+80007184: 00000013 nop
+80007188: 00000013 nop
+8000718c: 00000013 nop
+80007190: 00000013 nop
+80007194: 00000013 nop
+80007198: 00000013 nop
+8000719c: 00000013 nop
+800071a0: 00000013 nop
+800071a4: 00000013 nop
+800071a8: 00000013 nop
+800071ac: 00000013 nop
+800071b0: 00000013 nop
+800071b4: 00000013 nop
+800071b8: 00000013 nop
+800071bc: 00000013 nop
+800071c0: 00000013 nop
+800071c4: 00000013 nop
+800071c8: 00000013 nop
+800071cc: 00000013 nop
+800071d0: 00000013 nop
+800071d4: 00000013 nop
+800071d8: 00000013 nop
+800071dc: 00000013 nop
+800071e0: 00000013 nop
+800071e4: 00000013 nop
+800071e8: 00000013 nop
+800071ec: 00000013 nop
+800071f0: 00000013 nop
+800071f4: 00000013 nop
+800071f8: 00000013 nop
+800071fc: 00000013 nop
+80007200: 00000013 nop
+80007204: 00000013 nop
+80007208: 00000013 nop
+8000720c: 00000013 nop
+80007210: 00000013 nop
+80007214: 00000013 nop
+80007218: 00000013 nop
+8000721c: 00000013 nop
+80007220: 00000013 nop
+80007224: 00000013 nop
+80007228: 00000013 nop
+8000722c: 00000013 nop
+80007230: 00000013 nop
+80007234: 00000013 nop
+80007238: 00000013 nop
+8000723c: 00000013 nop
+80007240: 00000013 nop
+80007244: 00000013 nop
+80007248: 00000013 nop
+8000724c: 00000013 nop
+80007250: 00000013 nop
+80007254: 00000013 nop
+80007258: 00000013 nop
+8000725c: 00000013 nop
+80007260: 00000013 nop
+80007264: 00000013 nop
+80007268: 00000013 nop
+8000726c: 00000013 nop
+80007270: 00000013 nop
+80007274: 00000013 nop
+80007278: 00000013 nop
+8000727c: 00000013 nop
+80007280: 00000013 nop
+80007284: 00000013 nop
+80007288: 00000013 nop
+8000728c: 00000013 nop
+80007290: 00000013 nop
+80007294: 00000013 nop
+80007298: 00000013 nop
+8000729c: 00000013 nop
+800072a0: 00000013 nop
+800072a4: 00000013 nop
+800072a8: 00000013 nop
+800072ac: 00000013 nop
+800072b0: 00000013 nop
+800072b4: 00000013 nop
+800072b8: 00000013 nop
+800072bc: 00000013 nop
+800072c0: 00000013 nop
+800072c4: 00000013 nop
+800072c8: 00000013 nop
+800072cc: 00000013 nop
+800072d0: 00000013 nop
+800072d4: 00000013 nop
+800072d8: 00000013 nop
+800072dc: 00000013 nop
+800072e0: 00000013 nop
+800072e4: 00000013 nop
+800072e8: 00000013 nop
+800072ec: 00000013 nop
+800072f0: 00000013 nop
+800072f4: 00000013 nop
+800072f8: 00000013 nop
+800072fc: 00000013 nop
+80007300: 00000013 nop
+80007304: 00000013 nop
+80007308: 00000013 nop
+8000730c: 00000013 nop
+80007310: 00000013 nop
+80007314: 00000013 nop
+80007318: 00000013 nop
+8000731c: 00000013 nop
+80007320: 00000013 nop
+80007324: 00000013 nop
+80007328: 00000013 nop
+8000732c: 00000013 nop
+80007330: 00000013 nop
+80007334: 00000013 nop
+80007338: 00000013 nop
+8000733c: 00000013 nop
+80007340: 00000013 nop
+80007344: 00000013 nop
+80007348: 00000013 nop
+8000734c: 00000013 nop
+80007350: 00000013 nop
+80007354: 00000013 nop
+80007358: 00000013 nop
+8000735c: 00000013 nop
+80007360: 00000013 nop
+80007364: 00000013 nop
+80007368: 00000013 nop
+8000736c: 00000013 nop
+80007370: 00000013 nop
+80007374: 00000013 nop
+80007378: 00000013 nop
+8000737c: 00000013 nop
+80007380: 00000013 nop
+80007384: 00000013 nop
+80007388: 00000013 nop
+8000738c: 00000013 nop
+80007390: 00000013 nop
+80007394: 00000013 nop
+80007398: 00000013 nop
+8000739c: 00000013 nop
+800073a0: 00000013 nop
+800073a4: 00000013 nop
+800073a8: 00000013 nop
+800073ac: 00000013 nop
+800073b0: 00000013 nop
+800073b4: 00000013 nop
+800073b8: 00000013 nop
+800073bc: 00000013 nop
+800073c0: 00000013 nop
+800073c4: 00000013 nop
+800073c8: 00000013 nop
+800073cc: 00000013 nop
+800073d0: 00000013 nop
+800073d4: 00000013 nop
+800073d8: 00000013 nop
+800073dc: 00000013 nop
+800073e0: 00000013 nop
+800073e4: 00000013 nop
+800073e8: 00000013 nop
+800073ec: 00000013 nop
+800073f0: 00000013 nop
+800073f4: 00000013 nop
+800073f8: 00000013 nop
+800073fc: 00000013 nop
+80007400: 00000013 nop
+80007404: 00000013 nop
+80007408: 00000013 nop
+8000740c: 00000013 nop
+80007410: 00000013 nop
+80007414: 00000013 nop
+80007418: 00000013 nop
+8000741c: 00000013 nop
+80007420: 00000013 nop
+80007424: 00000013 nop
+80007428: 00000013 nop
+8000742c: 00000013 nop
+80007430: 00000013 nop
+80007434: 00000013 nop
+80007438: 00000013 nop
+8000743c: 00000013 nop
+80007440: 00000013 nop
+80007444: 00000013 nop
+80007448: 00000013 nop
+8000744c: 00000013 nop
+80007450: 00000013 nop
+80007454: 00000013 nop
+80007458: 00000013 nop
+8000745c: 00000013 nop
+80007460: 00000013 nop
+80007464: 00000013 nop
+80007468: 00000013 nop
+8000746c: 00000013 nop
+80007470: 00000013 nop
+80007474: 00000013 nop
+80007478: 00000013 nop
+8000747c: 00000013 nop
+80007480: 00000013 nop
+80007484: 00000013 nop
+80007488: 00000013 nop
+8000748c: 00000013 nop
+80007490: 00000013 nop
+80007494: 00000013 nop
+80007498: 00000013 nop
+8000749c: 00000013 nop
+800074a0: 00000013 nop
+800074a4: 00000013 nop
+800074a8: 00000013 nop
+800074ac: 00000013 nop
+800074b0: 00000013 nop
+800074b4: 00000013 nop
+800074b8: 00000013 nop
+800074bc: 00000013 nop
+800074c0: 00000013 nop
+800074c4: 00000013 nop
+800074c8: 00000013 nop
+800074cc: 00000013 nop
+800074d0: 00000013 nop
+800074d4: 00000013 nop
+800074d8: 00000013 nop
+800074dc: 00000013 nop
+800074e0: 00000013 nop
+800074e4: 00000013 nop
+800074e8: 00000013 nop
+800074ec: 00000013 nop
+800074f0: 00000013 nop
+800074f4: 00000013 nop
+800074f8: 00000013 nop
+800074fc: 00000013 nop
+80007500: 00000013 nop
+80007504: 00000013 nop
+80007508: 00000013 nop
+8000750c: 00000013 nop
+80007510: 00000013 nop
+80007514: 00000013 nop
+80007518: 00000013 nop
+8000751c: 00000013 nop
+80007520: 00000013 nop
+80007524: 00000013 nop
+80007528: 00000013 nop
+8000752c: 00000013 nop
+80007530: 00000013 nop
+80007534: 00000013 nop
+80007538: 00000013 nop
+8000753c: 00000013 nop
+80007540: 00000013 nop
+80007544: 00000013 nop
+80007548: 00000013 nop
+8000754c: 00000013 nop
+80007550: 00000013 nop
+80007554: 00000013 nop
+80007558: 00000013 nop
+8000755c: 00000013 nop
+80007560: 00000013 nop
+80007564: 00000013 nop
+80007568: 00000013 nop
+8000756c: 00000013 nop
+80007570: 00000013 nop
+80007574: 00000013 nop
+80007578: 00000013 nop
+8000757c: 00000013 nop
+80007580: 00000013 nop
+80007584: 00000013 nop
+80007588: 00000013 nop
+8000758c: 00000013 nop
+80007590: 00000013 nop
+80007594: 00000013 nop
+80007598: 00000013 nop
+8000759c: 00000013 nop
+800075a0: 00000013 nop
+800075a4: 00000013 nop
+800075a8: 00000013 nop
+800075ac: 00000013 nop
+800075b0: 00000013 nop
+800075b4: 00000013 nop
+800075b8: 00000013 nop
+800075bc: 00000013 nop
+800075c0: 00000013 nop
+800075c4: 00000013 nop
+800075c8: 00000013 nop
+800075cc: 00000013 nop
+800075d0: 00000013 nop
+800075d4: 00000013 nop
+800075d8: 00000013 nop
+800075dc: 00000013 nop
+800075e0: 00000013 nop
+800075e4: 00000013 nop
+800075e8: 00000013 nop
+800075ec: 00000013 nop
+800075f0: 00000013 nop
+800075f4: 00000013 nop
+800075f8: 00000013 nop
+800075fc: 00000013 nop
+80007600: 00000013 nop
+80007604: 00000013 nop
+80007608: 00000013 nop
+8000760c: 00000013 nop
+80007610: 00000013 nop
+80007614: 00000013 nop
+80007618: 00000013 nop
+8000761c: 00000013 nop
+80007620: 00000013 nop
+80007624: 00000013 nop
+80007628: 00000013 nop
+8000762c: 00000013 nop
+80007630: 00000013 nop
+80007634: 00000013 nop
+80007638: 00000013 nop
+8000763c: 00000013 nop
+80007640: 00000013 nop
+80007644: 00000013 nop
+80007648: 00000013 nop
+8000764c: 00000013 nop
+80007650: 00000013 nop
+80007654: 00000013 nop
+80007658: 00000013 nop
+8000765c: 00000013 nop
+80007660: 00000013 nop
+80007664: 00000013 nop
+80007668: 00000013 nop
+8000766c: 00000013 nop
+80007670: 00000013 nop
+80007674: 00000013 nop
+80007678: 00000013 nop
+8000767c: 00000013 nop
+80007680: 00000013 nop
+80007684: 00000013 nop
+80007688: 00000013 nop
+8000768c: 00000013 nop
+80007690: 00000013 nop
+80007694: 00000013 nop
+80007698: 00000013 nop
+8000769c: 00000013 nop
+800076a0: 00000013 nop
+800076a4: 00000013 nop
+800076a8: 00000013 nop
+800076ac: 00000013 nop
+800076b0: 00000013 nop
+800076b4: 00000013 nop
+800076b8: 00000013 nop
+800076bc: 00000013 nop
+800076c0: 00000013 nop
+800076c4: 00000013 nop
+800076c8: 00000013 nop
+800076cc: 00000013 nop
+800076d0: 00000013 nop
+800076d4: 00000013 nop
+800076d8: 00000013 nop
+800076dc: 00000013 nop
+800076e0: 00000013 nop
+800076e4: 00000013 nop
+800076e8: 00000013 nop
+800076ec: 00000013 nop
+800076f0: 00000013 nop
+800076f4: 00000013 nop
+800076f8: 00000013 nop
+800076fc: 00000013 nop
+80007700: 00000013 nop
+80007704: 00000013 nop
+80007708: 00000013 nop
+8000770c: 00000013 nop
+80007710: 00000013 nop
+80007714: 00000013 nop
+80007718: 00000013 nop
+8000771c: 00000013 nop
+80007720: 00000013 nop
+80007724: 00000013 nop
+80007728: 00000013 nop
+8000772c: 00000013 nop
+80007730: 00000013 nop
+80007734: 00000013 nop
+80007738: 00000013 nop
+8000773c: 00000013 nop
+80007740: 00000013 nop
+80007744: 00000013 nop
+80007748: 00000013 nop
+8000774c: 00000013 nop
+80007750: 00000013 nop
+80007754: 00000013 nop
+80007758: 00000013 nop
+8000775c: 00000013 nop
+80007760: 00000013 nop
+80007764: 00000013 nop
+80007768: 00000013 nop
+8000776c: 00000013 nop
+80007770: 00000013 nop
+80007774: 00000013 nop
+80007778: 00000013 nop
+8000777c: 00000013 nop
+80007780: 00000013 nop
+80007784: 00000013 nop
+80007788: 00000013 nop
+8000778c: 00000013 nop
+80007790: 00000013 nop
+80007794: 00000013 nop
+80007798: 00000013 nop
+8000779c: 00000013 nop
+800077a0: 00000013 nop
+800077a4: 00000013 nop
+800077a8: 00000013 nop
+800077ac: 00000013 nop
+800077b0: 00000013 nop
+800077b4: 00000013 nop
+800077b8: 00000013 nop
+800077bc: 00000013 nop
+800077c0: 00000013 nop
+800077c4: 00000013 nop
+800077c8: 00000013 nop
+800077cc: 00000013 nop
+800077d0: 00000013 nop
+800077d4: 00000013 nop
+800077d8: 00000013 nop
+800077dc: 00000013 nop
+800077e0: 00000013 nop
+800077e4: 00000013 nop
+800077e8: 00000013 nop
+800077ec: 00000013 nop
+800077f0: 00000013 nop
+800077f4: 00000013 nop
+800077f8: 00000013 nop
+800077fc: 00000013 nop
+80007800: 00000013 nop
+80007804: 00000013 nop
+80007808: 00000013 nop
+8000780c: 00000013 nop
+80007810: 00000013 nop
+80007814: 00000013 nop
+80007818: 00000013 nop
+8000781c: 00000013 nop
+80007820: 00000013 nop
+80007824: 00000013 nop
+80007828: 00000013 nop
+8000782c: 00000013 nop
+80007830: 00000013 nop
+80007834: 00000013 nop
+80007838: 00000013 nop
+8000783c: 00000013 nop
+80007840: 00000013 nop
+80007844: 00000013 nop
+80007848: 00000013 nop
+8000784c: 00000013 nop
+80007850: 00000013 nop
+80007854: 00000013 nop
+80007858: 00000013 nop
+8000785c: 00000013 nop
+80007860: 00000013 nop
+80007864: 00000013 nop
+80007868: 00000013 nop
+8000786c: 00000013 nop
+80007870: 00000013 nop
+80007874: 00000013 nop
+80007878: 00000013 nop
+8000787c: 00000013 nop
+80007880: 00000013 nop
+80007884: 00000013 nop
+80007888: 00000013 nop
+8000788c: 00000013 nop
+80007890: 00000013 nop
+80007894: 00000013 nop
+80007898: 00000013 nop
+8000789c: 00000013 nop
+800078a0: 00000013 nop
+800078a4: 00000013 nop
+800078a8: 00000013 nop
+800078ac: 00000013 nop
+800078b0: 00000013 nop
+800078b4: 00000013 nop
+800078b8: 00000013 nop
+800078bc: 00000013 nop
+800078c0: 00000013 nop
+800078c4: 00000013 nop
+800078c8: 00000013 nop
+800078cc: 00000013 nop
+800078d0: 00000013 nop
+800078d4: 00000013 nop
+800078d8: 00000013 nop
+800078dc: 00000013 nop
+800078e0: 00000013 nop
+800078e4: 00000013 nop
+800078e8: 00000013 nop
+800078ec: 00000013 nop
+800078f0: 00000013 nop
+800078f4: 00000013 nop
+800078f8: 00000013 nop
+800078fc: 00000013 nop
+80007900: 00000013 nop
+80007904: 00000013 nop
+80007908: 00000013 nop
+8000790c: 00000013 nop
+80007910: 00000013 nop
+80007914: 00000013 nop
+80007918: 00000013 nop
+8000791c: 00000013 nop
+80007920: 00000013 nop
+80007924: 00000013 nop
+80007928: 00000013 nop
+8000792c: 00000013 nop
+80007930: 00000013 nop
+80007934: 00000013 nop
+80007938: 00000013 nop
+8000793c: 00000013 nop
+80007940: 00000013 nop
+80007944: 00000013 nop
+80007948: 00000013 nop
+8000794c: 00000013 nop
+80007950: 00000013 nop
+80007954: 00000013 nop
+80007958: 00000013 nop
+8000795c: 00000013 nop
+80007960: 00000013 nop
+80007964: 00000013 nop
+80007968: 00000013 nop
+8000796c: 00000013 nop
+80007970: 00000013 nop
+80007974: 00000013 nop
+80007978: 00000013 nop
+8000797c: 00000013 nop
+80007980: 00000013 nop
+80007984: 00000013 nop
+80007988: 00000013 nop
+8000798c: 00000013 nop
+80007990: 00000013 nop
+80007994: 00000013 nop
+80007998: 00000013 nop
+8000799c: 00000013 nop
+800079a0: 00000013 nop
+800079a4: 00000013 nop
+800079a8: 00000013 nop
+800079ac: 00000013 nop
+800079b0: 00000013 nop
+800079b4: 00000013 nop
+800079b8: 00000013 nop
+800079bc: 00000013 nop
+800079c0: 00000013 nop
+800079c4: 00000013 nop
+800079c8: 00000013 nop
+800079cc: 00000013 nop
+800079d0: 00000013 nop
+800079d4: 00000013 nop
+800079d8: 00000013 nop
+800079dc: 00000013 nop
+800079e0: 00000013 nop
+800079e4: 00000013 nop
+800079e8: 00000013 nop
+800079ec: 00000013 nop
+800079f0: 00000013 nop
+800079f4: 00000013 nop
+800079f8: 00000013 nop
+800079fc: 00000013 nop
+80007a00: 00000013 nop
+80007a04: 00000013 nop
+80007a08: 00000013 nop
+80007a0c: 00000013 nop
+80007a10: 00000013 nop
+80007a14: 00000013 nop
+80007a18: 00000013 nop
+80007a1c: 00000013 nop
+80007a20: 00000013 nop
+80007a24: 00000013 nop
+80007a28: 00000013 nop
+80007a2c: 00000013 nop
+80007a30: 00000013 nop
+80007a34: 00000013 nop
+80007a38: 00000013 nop
+80007a3c: 00000013 nop
+80007a40: 00000013 nop
+80007a44: 00000013 nop
+80007a48: 00000013 nop
+80007a4c: 00000013 nop
+80007a50: 00000013 nop
+80007a54: 00000013 nop
+80007a58: 00000013 nop
+80007a5c: 00000013 nop
+80007a60: 00000013 nop
+80007a64: 00000013 nop
+80007a68: 00000013 nop
+80007a6c: 00000013 nop
+80007a70: 00000013 nop
+80007a74: 00000013 nop
+80007a78: 00000013 nop
+80007a7c: 00000013 nop
+80007a80: 00000013 nop
+80007a84: 00000013 nop
+80007a88: 00000013 nop
+80007a8c: 00000013 nop
+80007a90: 00000013 nop
+80007a94: 00000013 nop
+80007a98: 00000013 nop
+80007a9c: 00000013 nop
+80007aa0: 00000013 nop
+80007aa4: 00000013 nop
+80007aa8: 00000013 nop
+80007aac: 00000013 nop
+80007ab0: 00000013 nop
+80007ab4: 00000013 nop
+80007ab8: 00000013 nop
+80007abc: 00000013 nop
+80007ac0: 00000013 nop
+80007ac4: 00000013 nop
+80007ac8: 00000013 nop
+80007acc: 00000013 nop
+80007ad0: 00000013 nop
+80007ad4: 00000013 nop
+80007ad8: 00000013 nop
+80007adc: 00000013 nop
+80007ae0: 00000013 nop
+80007ae4: 00000013 nop
+80007ae8: 00000013 nop
+80007aec: 00000013 nop
+80007af0: 00000013 nop
+80007af4: 00000013 nop
+80007af8: 00000013 nop
+80007afc: 00000013 nop
+80007b00: 00000013 nop
+80007b04: 00000013 nop
+80007b08: 00000013 nop
+80007b0c: 00000013 nop
+80007b10: 00000013 nop
+80007b14: 00000013 nop
+80007b18: 00000013 nop
+80007b1c: 00000013 nop
+80007b20: 00000013 nop
+80007b24: 00000013 nop
+80007b28: 00000013 nop
+80007b2c: 00000013 nop
+80007b30: 00000013 nop
+80007b34: 00000013 nop
+80007b38: 00000013 nop
+80007b3c: 00000013 nop
+80007b40: 00000013 nop
+80007b44: 00000013 nop
+80007b48: 00000013 nop
+80007b4c: 00000013 nop
+80007b50: 00000013 nop
+80007b54: 00000013 nop
+80007b58: 00000013 nop
+80007b5c: 00000013 nop
+80007b60: 00000013 nop
+80007b64: 00000013 nop
+80007b68: 00000013 nop
+80007b6c: 00000013 nop
+80007b70: 00000013 nop
+80007b74: 00000013 nop
+80007b78: 00000013 nop
+80007b7c: 00000013 nop
+80007b80: 00000013 nop
+80007b84: 00000013 nop
+80007b88: 00000013 nop
+80007b8c: 00000013 nop
+80007b90: 00000013 nop
+80007b94: 00000013 nop
+80007b98: 00000013 nop
+80007b9c: 00000013 nop
+80007ba0: 00000013 nop
+80007ba4: 00000013 nop
+80007ba8: 00000013 nop
+80007bac: 00000013 nop
+80007bb0: 00000013 nop
+80007bb4: 00000013 nop
+80007bb8: 00000013 nop
+80007bbc: 00000013 nop
+80007bc0: 00000013 nop
+80007bc4: 00000013 nop
+80007bc8: 00000013 nop
+80007bcc: 00000013 nop
+80007bd0: 00000013 nop
+80007bd4: 00000013 nop
+80007bd8: 00000013 nop
+80007bdc: 00000013 nop
+80007be0: 00000013 nop
+80007be4: 00000013 nop
+80007be8: 00000013 nop
+80007bec: 00000013 nop
+80007bf0: 00000013 nop
+80007bf4: 00000013 nop
+80007bf8: 00000013 nop
+80007bfc: 00000013 nop
+80007c00: 00000013 nop
+80007c04: 00000013 nop
+80007c08: 00000013 nop
+80007c0c: 00000013 nop
+80007c10: 00000013 nop
+80007c14: 00000013 nop
+80007c18: 00000013 nop
+80007c1c: 00000013 nop
+80007c20: 00000013 nop
+80007c24: 00000013 nop
+80007c28: 00000013 nop
+80007c2c: 00000013 nop
+80007c30: 00000013 nop
+80007c34: 00000013 nop
+80007c38: 00000013 nop
+80007c3c: 00000013 nop
+80007c40: 00000013 nop
+80007c44: 00000013 nop
+80007c48: 00000013 nop
+80007c4c: 00000013 nop
+80007c50: 00000013 nop
+80007c54: 00000013 nop
+80007c58: 00000013 nop
+80007c5c: 00000013 nop
+80007c60: 00000013 nop
+80007c64: 00000013 nop
+80007c68: 00000013 nop
+80007c6c: 00000013 nop
+80007c70: 00000013 nop
+80007c74: 00000013 nop
+80007c78: 00000013 nop
+80007c7c: 00000013 nop
+80007c80: 00000013 nop
+80007c84: 00000013 nop
+80007c88: 00000013 nop
+80007c8c: 00000013 nop
+80007c90: 00000013 nop
+80007c94: 00000013 nop
+80007c98: 00000013 nop
+80007c9c: 00000013 nop
+80007ca0: 00000013 nop
+80007ca4: 00000013 nop
+80007ca8: 00000013 nop
+80007cac: 00000013 nop
+80007cb0: 00000013 nop
+80007cb4: 00000013 nop
+80007cb8: 00000013 nop
+80007cbc: 00000013 nop
+80007cc0: 00000013 nop
+80007cc4: 00000013 nop
+80007cc8: 00000013 nop
+80007ccc: 00000013 nop
+80007cd0: 00000013 nop
+80007cd4: 00000013 nop
+80007cd8: 00000013 nop
+80007cdc: 00000013 nop
+80007ce0: 00000013 nop
+80007ce4: 00000013 nop
+80007ce8: 00000013 nop
+80007cec: 00000013 nop
+80007cf0: 00000013 nop
+80007cf4: 00000013 nop
+80007cf8: 00000013 nop
+80007cfc: 00000013 nop
+80007d00: 00000013 nop
+80007d04: 00000013 nop
+80007d08: 00000013 nop
+80007d0c: 00000013 nop
+80007d10: 00000013 nop
+80007d14: 00000013 nop
+80007d18: 00000013 nop
+80007d1c: 00000013 nop
+80007d20: 00000013 nop
+80007d24: 00000013 nop
+80007d28: 00000013 nop
+80007d2c: 00000013 nop
+80007d30: 00000013 nop
+80007d34: 00000013 nop
+80007d38: 00000013 nop
+80007d3c: 00000013 nop
+80007d40: 00000013 nop
+80007d44: 00000013 nop
+80007d48: 00000013 nop
+80007d4c: 00000013 nop
+80007d50: 00000013 nop
+80007d54: 00000013 nop
+80007d58: 00000013 nop
+80007d5c: 00000013 nop
+80007d60: 00000013 nop
+80007d64: 00000013 nop
+80007d68: 00000013 nop
+80007d6c: 00000013 nop
+80007d70: 00000013 nop
+80007d74: 00000013 nop
+80007d78: 00000013 nop
+80007d7c: 00000013 nop
+80007d80: 00000013 nop
+80007d84: 00000013 nop
+80007d88: 00000013 nop
+80007d8c: 00000013 nop
+80007d90: 00000013 nop
+80007d94: 00000013 nop
+80007d98: 00000013 nop
+80007d9c: 00000013 nop
+80007da0: 00000013 nop
+80007da4: 00000013 nop
+80007da8: 00000013 nop
+80007dac: 00000013 nop
+80007db0: 00000013 nop
+80007db4: 00000013 nop
+80007db8: 00000013 nop
+80007dbc: 00000013 nop
+80007dc0: 00000013 nop
+80007dc4: 00000013 nop
+80007dc8: 00000013 nop
+80007dcc: 00000013 nop
+80007dd0: 00000013 nop
+80007dd4: 00000013 nop
+80007dd8: 00000013 nop
+80007ddc: 00000013 nop
+80007de0: 00000013 nop
+80007de4: 00000013 nop
+80007de8: 00000013 nop
+80007dec: 00000013 nop
+80007df0: 00000013 nop
+80007df4: 00000013 nop
+80007df8: 00000013 nop
+80007dfc: 00000013 nop
+80007e00: 00000013 nop
+80007e04: 00000013 nop
+80007e08: 00000013 nop
+80007e0c: 00000013 nop
+80007e10: 00000013 nop
+80007e14: 00000013 nop
+80007e18: 00000013 nop
+80007e1c: 00000013 nop
+80007e20: 00000013 nop
+80007e24: 00000013 nop
+80007e28: 00000013 nop
+80007e2c: 00000013 nop
+80007e30: 00000013 nop
+80007e34: 00000013 nop
+80007e38: 00000013 nop
+80007e3c: 00000013 nop
+80007e40: 00000013 nop
+80007e44: 00000013 nop
+80007e48: 00000013 nop
+80007e4c: 00000013 nop
+80007e50: 00000013 nop
+80007e54: 00000013 nop
+80007e58: 00000013 nop
+80007e5c: 00000013 nop
+80007e60: 00000013 nop
+80007e64: 00000013 nop
+80007e68: 00000013 nop
+80007e6c: 00000013 nop
+80007e70: 00000013 nop
+80007e74: 00000013 nop
+80007e78: 00000013 nop
+80007e7c: 00000013 nop
+80007e80: 00000013 nop
+80007e84: 00000013 nop
+80007e88: 00000013 nop
+80007e8c: 00000013 nop
+80007e90: 00000013 nop
+80007e94: 00000013 nop
+80007e98: 00000013 nop
+80007e9c: 00000013 nop
+80007ea0: 00000013 nop
+80007ea4: 00000013 nop
+80007ea8: 00000013 nop
+80007eac: 00000013 nop
+80007eb0: 00000013 nop
+80007eb4: 00000013 nop
+80007eb8: 00000013 nop
+80007ebc: 00000013 nop
+80007ec0: 00000013 nop
+80007ec4: 00000013 nop
+80007ec8: 00000013 nop
+80007ecc: 00000013 nop
+80007ed0: 00000013 nop
+80007ed4: 00000013 nop
+80007ed8: 00000013 nop
+80007edc: 00000013 nop
+80007ee0: 00000013 nop
+80007ee4: 00000013 nop
+80007ee8: 00000013 nop
+80007eec: 00000013 nop
+80007ef0: 00000013 nop
+80007ef4: 00000013 nop
+80007ef8: 00000013 nop
+80007efc: 00000013 nop
+80007f00: 00000013 nop
+80007f04: 00000013 nop
+80007f08: 00000013 nop
+80007f0c: 00000013 nop
+80007f10: 00000013 nop
+80007f14: 00000013 nop
+80007f18: 00000013 nop
+80007f1c: 00000013 nop
+80007f20: 00000013 nop
+80007f24: 00000013 nop
+80007f28: 00000013 nop
+80007f2c: 00000013 nop
+80007f30: 00000013 nop
+80007f34: 00000013 nop
+80007f38: 00000013 nop
+80007f3c: 00000013 nop
+80007f40: 00000013 nop
+80007f44: 00000013 nop
+80007f48: 00000013 nop
+80007f4c: 00000013 nop
+80007f50: 00000013 nop
+80007f54: 00000013 nop
+80007f58: 00000013 nop
+80007f5c: 00000013 nop
+80007f60: 00000013 nop
+80007f64: 00000013 nop
+80007f68: 00000013 nop
+80007f6c: 00000013 nop
+80007f70: 00000013 nop
+80007f74: 00000013 nop
+80007f78: 00000013 nop
+80007f7c: 00000013 nop
+80007f80: 00000013 nop
+80007f84: 00000013 nop
+80007f88: 00000013 nop
+80007f8c: 00000013 nop
+80007f90: 00000013 nop
+80007f94: 00000013 nop
+80007f98: 00000013 nop
+80007f9c: 00000013 nop
+80007fa0: 00000013 nop
+80007fa4: 00000013 nop
+80007fa8: 00000013 nop
+80007fac: 00000013 nop
+80007fb0: 00000013 nop
+80007fb4: 00000013 nop
+80007fb8: 00000013 nop
+80007fbc: 00000013 nop
+80007fc0: 00000013 nop
+80007fc4: 00000013 nop
+80007fc8: 00000013 nop
+80007fcc: 00000013 nop
+80007fd0: 00000013 nop
+80007fd4: 00000013 nop
+80007fd8: 00000013 nop
+80007fdc: 00000013 nop
+80007fe0: 00000013 nop
+80007fe4: 00000013 nop
+80007fe8: 00000013 nop
+80007fec: 00000013 nop
+80007ff0: 00000013 nop
+80007ff4: 00000013 nop
+80007ff8: 00000013 nop
+80007ffc: 00000013 nop
+
+80008000 <ROM_3>:
+80008000: 3130 fld fa2,96(a0)
+80008002: 3332 fld ft6,296(sp)
+80008004: 3534 fld fa3,104(a0)
+80008006: 3736 fld fa4,360(sp)
+80008008: 3938 fld fa4,112(a0)
+8000800a: 3b3a fld fs6,424(sp)
+8000800c: 3d3c fld fa5,120(a0)
+8000800e: 3f3e fld ft10,488(sp)
+80008010: 00000013 nop
+80008014: 00000013 nop
+80008018: 00000013 nop
+8000801c: 00000013 nop
+80008020: 00000013 nop
+80008024: 00000013 nop
+80008028: 00000013 nop
+8000802c: 00000013 nop
+80008030: 00000013 nop
+80008034: 00000013 nop
+80008038: 00000013 nop
+8000803c: 00000013 nop
+80008040: 00000013 nop
+80008044: 00000013 nop
+80008048: 00000013 nop
+8000804c: 00000013 nop
+80008050: 00000013 nop
+80008054: 00000013 nop
+80008058: 00000013 nop
+8000805c: 00000013 nop
+80008060: 00000013 nop
+80008064: 00000013 nop
+80008068: 00000013 nop
+8000806c: 00000013 nop
+80008070: 00000013 nop
+80008074: 00000013 nop
+80008078: 00000013 nop
+8000807c: 00000013 nop
+80008080: 00000013 nop
+80008084: 00000013 nop
+80008088: 00000013 nop
+8000808c: 00000013 nop
+80008090: 00000013 nop
+80008094: 00000013 nop
+80008098: 00000013 nop
+8000809c: 00000013 nop
+800080a0: 00000013 nop
+800080a4: 00000013 nop
+800080a8: 00000013 nop
+800080ac: 00000013 nop
+800080b0: 00000013 nop
+800080b4: 00000013 nop
+800080b8: 00000013 nop
+800080bc: 00000013 nop
+800080c0: 00000013 nop
+800080c4: 00000013 nop
+800080c8: 00000013 nop
+800080cc: 00000013 nop
+800080d0: 00000013 nop
+800080d4: 00000013 nop
+800080d8: 00000013 nop
+800080dc: 00000013 nop
+800080e0: 00000013 nop
+800080e4: 00000013 nop
+800080e8: 00000013 nop
+800080ec: 00000013 nop
+800080f0: 00000013 nop
+800080f4: 00000013 nop
+800080f8: 00000013 nop
+800080fc: 00000013 nop
+80008100: 00000013 nop
+80008104: 00000013 nop
+80008108: 00000013 nop
+8000810c: 00000013 nop
+80008110: 00000013 nop
+80008114: 00000013 nop
+80008118: 00000013 nop
+8000811c: 00000013 nop
+80008120: 00000013 nop
+80008124: 00000013 nop
+80008128: 00000013 nop
+8000812c: 00000013 nop
+80008130: 00000013 nop
+80008134: 00000013 nop
+80008138: 00000013 nop
+8000813c: 00000013 nop
+80008140: 00000013 nop
+80008144: 00000013 nop
+80008148: 00000013 nop
+8000814c: 00000013 nop
+80008150: 00000013 nop
+80008154: 00000013 nop
+80008158: 00000013 nop
+8000815c: 00000013 nop
+80008160: 00000013 nop
+80008164: 00000013 nop
+80008168: 00000013 nop
+8000816c: 00000013 nop
+80008170: 00000013 nop
+80008174: 00000013 nop
+80008178: 00000013 nop
+8000817c: 00000013 nop
+80008180: 00000013 nop
+80008184: 00000013 nop
+80008188: 00000013 nop
+8000818c: 00000013 nop
+80008190: 00000013 nop
+80008194: 00000013 nop
+80008198: 00000013 nop
+8000819c: 00000013 nop
+800081a0: 00000013 nop
+800081a4: 00000013 nop
+800081a8: 00000013 nop
+800081ac: 00000013 nop
+800081b0: 00000013 nop
+800081b4: 00000013 nop
+800081b8: 00000013 nop
+800081bc: 00000013 nop
+800081c0: 00000013 nop
+800081c4: 00000013 nop
+800081c8: 00000013 nop
+800081cc: 00000013 nop
+800081d0: 00000013 nop
+800081d4: 00000013 nop
+800081d8: 00000013 nop
+800081dc: 00000013 nop
+800081e0: 00000013 nop
+800081e4: 00000013 nop
+800081e8: 00000013 nop
+800081ec: 00000013 nop
+800081f0: 00000013 nop
+800081f4: 00000013 nop
+800081f8: 00000013 nop
+800081fc: 00000013 nop
+80008200: 00000013 nop
+80008204: 00000013 nop
+80008208: 00000013 nop
+8000820c: 00000013 nop
+80008210: 00000013 nop
+80008214: 00000013 nop
+80008218: 00000013 nop
+8000821c: 00000013 nop
+80008220: 00000013 nop
+80008224: 00000013 nop
+80008228: 00000013 nop
+8000822c: 00000013 nop
+80008230: 00000013 nop
+80008234: 00000013 nop
+80008238: 00000013 nop
+8000823c: 00000013 nop
+80008240: 00000013 nop
+80008244: 00000013 nop
+80008248: 00000013 nop
+8000824c: 00000013 nop
+80008250: 00000013 nop
+80008254: 00000013 nop
+80008258: 00000013 nop
+8000825c: 00000013 nop
+80008260: 00000013 nop
+80008264: 00000013 nop
+80008268: 00000013 nop
+8000826c: 00000013 nop
+80008270: 00000013 nop
+80008274: 00000013 nop
+80008278: 00000013 nop
+8000827c: 00000013 nop
+80008280: 00000013 nop
+80008284: 00000013 nop
+80008288: 00000013 nop
+8000828c: 00000013 nop
+80008290: 00000013 nop
+80008294: 00000013 nop
+80008298: 00000013 nop
+8000829c: 00000013 nop
+800082a0: 00000013 nop
+800082a4: 00000013 nop
+800082a8: 00000013 nop
+800082ac: 00000013 nop
+800082b0: 00000013 nop
+800082b4: 00000013 nop
+800082b8: 00000013 nop
+800082bc: 00000013 nop
+800082c0: 00000013 nop
+800082c4: 00000013 nop
+800082c8: 00000013 nop
+800082cc: 00000013 nop
+800082d0: 00000013 nop
+800082d4: 00000013 nop
+800082d8: 00000013 nop
+800082dc: 00000013 nop
+800082e0: 00000013 nop
+800082e4: 00000013 nop
+800082e8: 00000013 nop
+800082ec: 00000013 nop
+800082f0: 00000013 nop
+800082f4: 00000013 nop
+800082f8: 00000013 nop
+800082fc: 00000013 nop
+80008300: 00000013 nop
+80008304: 00000013 nop
+80008308: 00000013 nop
+8000830c: 00000013 nop
+80008310: 00000013 nop
+80008314: 00000013 nop
+80008318: 00000013 nop
+8000831c: 00000013 nop
+80008320: 00000013 nop
+80008324: 00000013 nop
+80008328: 00000013 nop
+8000832c: 00000013 nop
+80008330: 00000013 nop
+80008334: 00000013 nop
+80008338: 00000013 nop
+8000833c: 00000013 nop
+80008340: 00000013 nop
+80008344: 00000013 nop
+80008348: 00000013 nop
+8000834c: 00000013 nop
+80008350: 00000013 nop
+80008354: 00000013 nop
+80008358: 00000013 nop
+8000835c: 00000013 nop
+80008360: 00000013 nop
+80008364: 00000013 nop
+80008368: 00000013 nop
+8000836c: 00000013 nop
+80008370: 00000013 nop
+80008374: 00000013 nop
+80008378: 00000013 nop
+8000837c: 00000013 nop
+80008380: 00000013 nop
+80008384: 00000013 nop
+80008388: 00000013 nop
+8000838c: 00000013 nop
+80008390: 00000013 nop
+80008394: 00000013 nop
+80008398: 00000013 nop
+8000839c: 00000013 nop
+800083a0: 00000013 nop
+800083a4: 00000013 nop
+800083a8: 00000013 nop
+800083ac: 00000013 nop
+800083b0: 00000013 nop
+800083b4: 00000013 nop
+800083b8: 00000013 nop
+800083bc: 00000013 nop
+800083c0: 00000013 nop
+800083c4: 00000013 nop
+800083c8: 00000013 nop
+800083cc: 00000013 nop
+800083d0: 00000013 nop
+800083d4: 00000013 nop
+800083d8: 00000013 nop
+800083dc: 00000013 nop
+800083e0: 00000013 nop
+800083e4: 00000013 nop
+800083e8: 00000013 nop
+800083ec: 00000013 nop
+800083f0: 00000013 nop
+800083f4: 00000013 nop
+800083f8: 00000013 nop
+800083fc: 00000013 nop
+80008400: 00000013 nop
+80008404: 00000013 nop
+80008408: 00000013 nop
+8000840c: 00000013 nop
+80008410: 00000013 nop
+80008414: 00000013 nop
+80008418: 00000013 nop
+8000841c: 00000013 nop
+80008420: 00000013 nop
+80008424: 00000013 nop
+80008428: 00000013 nop
+8000842c: 00000013 nop
+80008430: 00000013 nop
+80008434: 00000013 nop
+80008438: 00000013 nop
+8000843c: 00000013 nop
+80008440: 00000013 nop
+80008444: 00000013 nop
+80008448: 00000013 nop
+8000844c: 00000013 nop
+80008450: 00000013 nop
+80008454: 00000013 nop
+80008458: 00000013 nop
+8000845c: 00000013 nop
+80008460: 00000013 nop
+80008464: 00000013 nop
+80008468: 00000013 nop
+8000846c: 00000013 nop
+80008470: 00000013 nop
+80008474: 00000013 nop
+80008478: 00000013 nop
+8000847c: 00000013 nop
+80008480: 00000013 nop
+80008484: 00000013 nop
+80008488: 00000013 nop
+8000848c: 00000013 nop
+80008490: 00000013 nop
+80008494: 00000013 nop
+80008498: 00000013 nop
+8000849c: 00000013 nop
+800084a0: 00000013 nop
+800084a4: 00000013 nop
+800084a8: 00000013 nop
+800084ac: 00000013 nop
+800084b0: 00000013 nop
+800084b4: 00000013 nop
+800084b8: 00000013 nop
+800084bc: 00000013 nop
+800084c0: 00000013 nop
+800084c4: 00000013 nop
+800084c8: 00000013 nop
+800084cc: 00000013 nop
+800084d0: 00000013 nop
+800084d4: 00000013 nop
+800084d8: 00000013 nop
+800084dc: 00000013 nop
+800084e0: 00000013 nop
+800084e4: 00000013 nop
+800084e8: 00000013 nop
+800084ec: 00000013 nop
+800084f0: 00000013 nop
+800084f4: 00000013 nop
+800084f8: 00000013 nop
+800084fc: 00000013 nop
+80008500: 00000013 nop
+80008504: 00000013 nop
+80008508: 00000013 nop
+8000850c: 00000013 nop
+80008510: 00000013 nop
+80008514: 00000013 nop
+80008518: 00000013 nop
+8000851c: 00000013 nop
+80008520: 00000013 nop
+80008524: 00000013 nop
+80008528: 00000013 nop
+8000852c: 00000013 nop
+80008530: 00000013 nop
+80008534: 00000013 nop
+80008538: 00000013 nop
+8000853c: 00000013 nop
+80008540: 00000013 nop
+80008544: 00000013 nop
+80008548: 00000013 nop
+8000854c: 00000013 nop
+80008550: 00000013 nop
+80008554: 00000013 nop
+80008558: 00000013 nop
+8000855c: 00000013 nop
+80008560: 00000013 nop
+80008564: 00000013 nop
+80008568: 00000013 nop
+8000856c: 00000013 nop
+80008570: 00000013 nop
+80008574: 00000013 nop
+80008578: 00000013 nop
+8000857c: 00000013 nop
+80008580: 00000013 nop
+80008584: 00000013 nop
+80008588: 00000013 nop
+8000858c: 00000013 nop
+80008590: 00000013 nop
+80008594: 00000013 nop
+80008598: 00000013 nop
+8000859c: 00000013 nop
+800085a0: 00000013 nop
+800085a4: 00000013 nop
+800085a8: 00000013 nop
+800085ac: 00000013 nop
+800085b0: 00000013 nop
+800085b4: 00000013 nop
+800085b8: 00000013 nop
+800085bc: 00000013 nop
+800085c0: 00000013 nop
+800085c4: 00000013 nop
+800085c8: 00000013 nop
+800085cc: 00000013 nop
+800085d0: 00000013 nop
+800085d4: 00000013 nop
+800085d8: 00000013 nop
+800085dc: 00000013 nop
+800085e0: 00000013 nop
+800085e4: 00000013 nop
+800085e8: 00000013 nop
+800085ec: 00000013 nop
+800085f0: 00000013 nop
+800085f4: 00000013 nop
+800085f8: 00000013 nop
+800085fc: 00000013 nop
+80008600: 00000013 nop
+80008604: 00000013 nop
+80008608: 00000013 nop
+8000860c: 00000013 nop
+80008610: 00000013 nop
+80008614: 00000013 nop
+80008618: 00000013 nop
+8000861c: 00000013 nop
+80008620: 00000013 nop
+80008624: 00000013 nop
+80008628: 00000013 nop
+8000862c: 00000013 nop
+80008630: 00000013 nop
+80008634: 00000013 nop
+80008638: 00000013 nop
+8000863c: 00000013 nop
+80008640: 00000013 nop
+80008644: 00000013 nop
+80008648: 00000013 nop
+8000864c: 00000013 nop
+80008650: 00000013 nop
+80008654: 00000013 nop
+80008658: 00000013 nop
+8000865c: 00000013 nop
+80008660: 00000013 nop
+80008664: 00000013 nop
+80008668: 00000013 nop
+8000866c: 00000013 nop
+80008670: 00000013 nop
+80008674: 00000013 nop
+80008678: 00000013 nop
+8000867c: 00000013 nop
+80008680: 00000013 nop
+80008684: 00000013 nop
+80008688: 00000013 nop
+8000868c: 00000013 nop
+80008690: 00000013 nop
+80008694: 00000013 nop
+80008698: 00000013 nop
+8000869c: 00000013 nop
+800086a0: 00000013 nop
+800086a4: 00000013 nop
+800086a8: 00000013 nop
+800086ac: 00000013 nop
+800086b0: 00000013 nop
+800086b4: 00000013 nop
+800086b8: 00000013 nop
+800086bc: 00000013 nop
+800086c0: 00000013 nop
+800086c4: 00000013 nop
+800086c8: 00000013 nop
+800086cc: 00000013 nop
+800086d0: 00000013 nop
+800086d4: 00000013 nop
+800086d8: 00000013 nop
+800086dc: 00000013 nop
+800086e0: 00000013 nop
+800086e4: 00000013 nop
+800086e8: 00000013 nop
+800086ec: 00000013 nop
+800086f0: 00000013 nop
+800086f4: 00000013 nop
+800086f8: 00000013 nop
+800086fc: 00000013 nop
+80008700: 00000013 nop
+80008704: 00000013 nop
+80008708: 00000013 nop
+8000870c: 00000013 nop
+80008710: 00000013 nop
+80008714: 00000013 nop
+80008718: 00000013 nop
+8000871c: 00000013 nop
+80008720: 00000013 nop
+80008724: 00000013 nop
+80008728: 00000013 nop
+8000872c: 00000013 nop
+80008730: 00000013 nop
+80008734: 00000013 nop
+80008738: 00000013 nop
+8000873c: 00000013 nop
+80008740: 00000013 nop
+80008744: 00000013 nop
+80008748: 00000013 nop
+8000874c: 00000013 nop
+80008750: 00000013 nop
+80008754: 00000013 nop
+80008758: 00000013 nop
+8000875c: 00000013 nop
+80008760: 00000013 nop
+80008764: 00000013 nop
+80008768: 00000013 nop
+8000876c: 00000013 nop
+80008770: 00000013 nop
+80008774: 00000013 nop
+80008778: 00000013 nop
+8000877c: 00000013 nop
+80008780: 00000013 nop
+80008784: 00000013 nop
+80008788: 00000013 nop
+8000878c: 00000013 nop
+80008790: 00000013 nop
+80008794: 00000013 nop
+80008798: 00000013 nop
+8000879c: 00000013 nop
+800087a0: 00000013 nop
+800087a4: 00000013 nop
+800087a8: 00000013 nop
+800087ac: 00000013 nop
+800087b0: 00000013 nop
+800087b4: 00000013 nop
+800087b8: 00000013 nop
+800087bc: 00000013 nop
+800087c0: 00000013 nop
+800087c4: 00000013 nop
+800087c8: 00000013 nop
+800087cc: 00000013 nop
+800087d0: 00000013 nop
+800087d4: 00000013 nop
+800087d8: 00000013 nop
+800087dc: 00000013 nop
+800087e0: 00000013 nop
+800087e4: 00000013 nop
+800087e8: 00000013 nop
+800087ec: 00000013 nop
+800087f0: 00000013 nop
+800087f4: 00000013 nop
+800087f8: 00000013 nop
+800087fc: 00000013 nop
+80008800: 00000013 nop
+80008804: 00000013 nop
+80008808: 00000013 nop
+8000880c: 00000013 nop
+80008810: 00000013 nop
+80008814: 00000013 nop
+80008818: 00000013 nop
+8000881c: 00000013 nop
+80008820: 00000013 nop
+80008824: 00000013 nop
+80008828: 00000013 nop
+8000882c: 00000013 nop
+80008830: 00000013 nop
+80008834: 00000013 nop
+80008838: 00000013 nop
+8000883c: 00000013 nop
+80008840: 00000013 nop
+80008844: 00000013 nop
+80008848: 00000013 nop
+8000884c: 00000013 nop
+80008850: 00000013 nop
+80008854: 00000013 nop
+80008858: 00000013 nop
+8000885c: 00000013 nop
+80008860: 00000013 nop
+80008864: 00000013 nop
+80008868: 00000013 nop
+8000886c: 00000013 nop
+80008870: 00000013 nop
+80008874: 00000013 nop
+80008878: 00000013 nop
+8000887c: 00000013 nop
+80008880: 00000013 nop
+80008884: 00000013 nop
+80008888: 00000013 nop
+8000888c: 00000013 nop
+80008890: 00000013 nop
+80008894: 00000013 nop
+80008898: 00000013 nop
+8000889c: 00000013 nop
+800088a0: 00000013 nop
+800088a4: 00000013 nop
+800088a8: 00000013 nop
+800088ac: 00000013 nop
+800088b0: 00000013 nop
+800088b4: 00000013 nop
+800088b8: 00000013 nop
+800088bc: 00000013 nop
+800088c0: 00000013 nop
+800088c4: 00000013 nop
+800088c8: 00000013 nop
+800088cc: 00000013 nop
+800088d0: 00000013 nop
+800088d4: 00000013 nop
+800088d8: 00000013 nop
+800088dc: 00000013 nop
+800088e0: 00000013 nop
+800088e4: 00000013 nop
+800088e8: 00000013 nop
+800088ec: 00000013 nop
+800088f0: 00000013 nop
+800088f4: 00000013 nop
+800088f8: 00000013 nop
+800088fc: 00000013 nop
+80008900: 00000013 nop
+80008904: 00000013 nop
+80008908: 00000013 nop
+8000890c: 00000013 nop
+80008910: 00000013 nop
+80008914: 00000013 nop
+80008918: 00000013 nop
+8000891c: 00000013 nop
+80008920: 00000013 nop
+80008924: 00000013 nop
+80008928: 00000013 nop
+8000892c: 00000013 nop
+80008930: 00000013 nop
+80008934: 00000013 nop
+80008938: 00000013 nop
+8000893c: 00000013 nop
+80008940: 00000013 nop
+80008944: 00000013 nop
+80008948: 00000013 nop
+8000894c: 00000013 nop
+80008950: 00000013 nop
+80008954: 00000013 nop
+80008958: 00000013 nop
+8000895c: 00000013 nop
+80008960: 00000013 nop
+80008964: 00000013 nop
+80008968: 00000013 nop
+8000896c: 00000013 nop
+80008970: 00000013 nop
+80008974: 00000013 nop
+80008978: 00000013 nop
+8000897c: 00000013 nop
+80008980: 00000013 nop
+80008984: 00000013 nop
+80008988: 00000013 nop
+8000898c: 00000013 nop
+80008990: 00000013 nop
+80008994: 00000013 nop
+80008998: 00000013 nop
+8000899c: 00000013 nop
+800089a0: 00000013 nop
+800089a4: 00000013 nop
+800089a8: 00000013 nop
+800089ac: 00000013 nop
+800089b0: 00000013 nop
+800089b4: 00000013 nop
+800089b8: 00000013 nop
+800089bc: 00000013 nop
+800089c0: 00000013 nop
+800089c4: 00000013 nop
+800089c8: 00000013 nop
+800089cc: 00000013 nop
+800089d0: 00000013 nop
+800089d4: 00000013 nop
+800089d8: 00000013 nop
+800089dc: 00000013 nop
+800089e0: 00000013 nop
+800089e4: 00000013 nop
+800089e8: 00000013 nop
+800089ec: 00000013 nop
+800089f0: 00000013 nop
+800089f4: 00000013 nop
+800089f8: 00000013 nop
+800089fc: 00000013 nop
+80008a00: 00000013 nop
+80008a04: 00000013 nop
+80008a08: 00000013 nop
+80008a0c: 00000013 nop
+80008a10: 00000013 nop
+80008a14: 00000013 nop
+80008a18: 00000013 nop
+80008a1c: 00000013 nop
+80008a20: 00000013 nop
+80008a24: 00000013 nop
+80008a28: 00000013 nop
+80008a2c: 00000013 nop
+80008a30: 00000013 nop
+80008a34: 00000013 nop
+80008a38: 00000013 nop
+80008a3c: 00000013 nop
+80008a40: 00000013 nop
+80008a44: 00000013 nop
+80008a48: 00000013 nop
+80008a4c: 00000013 nop
+80008a50: 00000013 nop
+80008a54: 00000013 nop
+80008a58: 00000013 nop
+80008a5c: 00000013 nop
+80008a60: 00000013 nop
+80008a64: 00000013 nop
+80008a68: 00000013 nop
+80008a6c: 00000013 nop
+80008a70: 00000013 nop
+80008a74: 00000013 nop
+80008a78: 00000013 nop
+80008a7c: 00000013 nop
+80008a80: 00000013 nop
+80008a84: 00000013 nop
+80008a88: 00000013 nop
+80008a8c: 00000013 nop
+80008a90: 00000013 nop
+80008a94: 00000013 nop
+80008a98: 00000013 nop
+80008a9c: 00000013 nop
+80008aa0: 00000013 nop
+80008aa4: 00000013 nop
+80008aa8: 00000013 nop
+80008aac: 00000013 nop
+80008ab0: 00000013 nop
+80008ab4: 00000013 nop
+80008ab8: 00000013 nop
+80008abc: 00000013 nop
+80008ac0: 00000013 nop
+80008ac4: 00000013 nop
+80008ac8: 00000013 nop
+80008acc: 00000013 nop
+80008ad0: 00000013 nop
+80008ad4: 00000013 nop
+80008ad8: 00000013 nop
+80008adc: 00000013 nop
+80008ae0: 00000013 nop
+80008ae4: 00000013 nop
+80008ae8: 00000013 nop
+80008aec: 00000013 nop
+80008af0: 00000013 nop
+80008af4: 00000013 nop
+80008af8: 00000013 nop
+80008afc: 00000013 nop
+80008b00: 00000013 nop
+80008b04: 00000013 nop
+80008b08: 00000013 nop
+80008b0c: 00000013 nop
+80008b10: 00000013 nop
+80008b14: 00000013 nop
+80008b18: 00000013 nop
+80008b1c: 00000013 nop
+80008b20: 00000013 nop
+80008b24: 00000013 nop
+80008b28: 00000013 nop
+80008b2c: 00000013 nop
+80008b30: 00000013 nop
+80008b34: 00000013 nop
+80008b38: 00000013 nop
+80008b3c: 00000013 nop
+80008b40: 00000013 nop
+80008b44: 00000013 nop
+80008b48: 00000013 nop
+80008b4c: 00000013 nop
+80008b50: 00000013 nop
+80008b54: 00000013 nop
+80008b58: 00000013 nop
+80008b5c: 00000013 nop
+80008b60: 00000013 nop
+80008b64: 00000013 nop
+80008b68: 00000013 nop
+80008b6c: 00000013 nop
+80008b70: 00000013 nop
+80008b74: 00000013 nop
+80008b78: 00000013 nop
+80008b7c: 00000013 nop
+80008b80: 00000013 nop
+80008b84: 00000013 nop
+80008b88: 00000013 nop
+80008b8c: 00000013 nop
+80008b90: 00000013 nop
+80008b94: 00000013 nop
+80008b98: 00000013 nop
+80008b9c: 00000013 nop
+80008ba0: 00000013 nop
+80008ba4: 00000013 nop
+80008ba8: 00000013 nop
+80008bac: 00000013 nop
+80008bb0: 00000013 nop
+80008bb4: 00000013 nop
+80008bb8: 00000013 nop
+80008bbc: 00000013 nop
+80008bc0: 00000013 nop
+80008bc4: 00000013 nop
+80008bc8: 00000013 nop
+80008bcc: 00000013 nop
+80008bd0: 00000013 nop
+80008bd4: 00000013 nop
+80008bd8: 00000013 nop
+80008bdc: 00000013 nop
+80008be0: 00000013 nop
+80008be4: 00000013 nop
+80008be8: 00000013 nop
+80008bec: 00000013 nop
+80008bf0: 00000013 nop
+80008bf4: 00000013 nop
+80008bf8: 00000013 nop
+80008bfc: 00000013 nop
+80008c00: 00000013 nop
+80008c04: 00000013 nop
+80008c08: 00000013 nop
+80008c0c: 00000013 nop
+80008c10: 00000013 nop
+80008c14: 00000013 nop
+80008c18: 00000013 nop
+80008c1c: 00000013 nop
+80008c20: 00000013 nop
+80008c24: 00000013 nop
+80008c28: 00000013 nop
+80008c2c: 00000013 nop
+80008c30: 00000013 nop
+80008c34: 00000013 nop
+80008c38: 00000013 nop
+80008c3c: 00000013 nop
+80008c40: 00000013 nop
+80008c44: 00000013 nop
+80008c48: 00000013 nop
+80008c4c: 00000013 nop
+80008c50: 00000013 nop
+80008c54: 00000013 nop
+80008c58: 00000013 nop
+80008c5c: 00000013 nop
+80008c60: 00000013 nop
+80008c64: 00000013 nop
+80008c68: 00000013 nop
+80008c6c: 00000013 nop
+80008c70: 00000013 nop
+80008c74: 00000013 nop
+80008c78: 00000013 nop
+80008c7c: 00000013 nop
+80008c80: 00000013 nop
+80008c84: 00000013 nop
+80008c88: 00000013 nop
+80008c8c: 00000013 nop
+80008c90: 00000013 nop
+80008c94: 00000013 nop
+80008c98: 00000013 nop
+80008c9c: 00000013 nop
+80008ca0: 00000013 nop
+80008ca4: 00000013 nop
+80008ca8: 00000013 nop
+80008cac: 00000013 nop
+80008cb0: 00000013 nop
+80008cb4: 00000013 nop
+80008cb8: 00000013 nop
+80008cbc: 00000013 nop
+80008cc0: 00000013 nop
+80008cc4: 00000013 nop
+80008cc8: 00000013 nop
+80008ccc: 00000013 nop
+80008cd0: 00000013 nop
+80008cd4: 00000013 nop
+80008cd8: 00000013 nop
+80008cdc: 00000013 nop
+80008ce0: 00000013 nop
+80008ce4: 00000013 nop
+80008ce8: 00000013 nop
+80008cec: 00000013 nop
+80008cf0: 00000013 nop
+80008cf4: 00000013 nop
+80008cf8: 00000013 nop
+80008cfc: 00000013 nop
+80008d00: 00000013 nop
+80008d04: 00000013 nop
+80008d08: 00000013 nop
+80008d0c: 00000013 nop
+80008d10: 00000013 nop
+80008d14: 00000013 nop
+80008d18: 00000013 nop
+80008d1c: 00000013 nop
+80008d20: 00000013 nop
+80008d24: 00000013 nop
+80008d28: 00000013 nop
+80008d2c: 00000013 nop
+80008d30: 00000013 nop
+80008d34: 00000013 nop
+80008d38: 00000013 nop
+80008d3c: 00000013 nop
+80008d40: 00000013 nop
+80008d44: 00000013 nop
+80008d48: 00000013 nop
+80008d4c: 00000013 nop
+80008d50: 00000013 nop
+80008d54: 00000013 nop
+80008d58: 00000013 nop
+80008d5c: 00000013 nop
+80008d60: 00000013 nop
+80008d64: 00000013 nop
+80008d68: 00000013 nop
+80008d6c: 00000013 nop
+80008d70: 00000013 nop
+80008d74: 00000013 nop
+80008d78: 00000013 nop
+80008d7c: 00000013 nop
+80008d80: 00000013 nop
+80008d84: 00000013 nop
+80008d88: 00000013 nop
+80008d8c: 00000013 nop
+80008d90: 00000013 nop
+80008d94: 00000013 nop
+80008d98: 00000013 nop
+80008d9c: 00000013 nop
+80008da0: 00000013 nop
+80008da4: 00000013 nop
+80008da8: 00000013 nop
+80008dac: 00000013 nop
+80008db0: 00000013 nop
+80008db4: 00000013 nop
+80008db8: 00000013 nop
+80008dbc: 00000013 nop
+80008dc0: 00000013 nop
+80008dc4: 00000013 nop
+80008dc8: 00000013 nop
+80008dcc: 00000013 nop
+80008dd0: 00000013 nop
+80008dd4: 00000013 nop
+80008dd8: 00000013 nop
+80008ddc: 00000013 nop
+80008de0: 00000013 nop
+80008de4: 00000013 nop
+80008de8: 00000013 nop
+80008dec: 00000013 nop
+80008df0: 00000013 nop
+80008df4: 00000013 nop
+80008df8: 00000013 nop
+80008dfc: 00000013 nop
+80008e00: 00000013 nop
+80008e04: 00000013 nop
+80008e08: 00000013 nop
+80008e0c: 00000013 nop
+80008e10: 00000013 nop
+80008e14: 00000013 nop
+80008e18: 00000013 nop
+80008e1c: 00000013 nop
+80008e20: 00000013 nop
+80008e24: 00000013 nop
+80008e28: 00000013 nop
+80008e2c: 00000013 nop
+80008e30: 00000013 nop
+80008e34: 00000013 nop
+80008e38: 00000013 nop
+80008e3c: 00000013 nop
+80008e40: 00000013 nop
+80008e44: 00000013 nop
+80008e48: 00000013 nop
+80008e4c: 00000013 nop
+80008e50: 00000013 nop
+80008e54: 00000013 nop
+80008e58: 00000013 nop
+80008e5c: 00000013 nop
+80008e60: 00000013 nop
+80008e64: 00000013 nop
+80008e68: 00000013 nop
+80008e6c: 00000013 nop
+80008e70: 00000013 nop
+80008e74: 00000013 nop
+80008e78: 00000013 nop
+80008e7c: 00000013 nop
+80008e80: 00000013 nop
+80008e84: 00000013 nop
+80008e88: 00000013 nop
+80008e8c: 00000013 nop
+80008e90: 00000013 nop
+80008e94: 00000013 nop
+80008e98: 00000013 nop
+80008e9c: 00000013 nop
+80008ea0: 00000013 nop
+80008ea4: 00000013 nop
+80008ea8: 00000013 nop
+80008eac: 00000013 nop
+80008eb0: 00000013 nop
+80008eb4: 00000013 nop
+80008eb8: 00000013 nop
+80008ebc: 00000013 nop
+80008ec0: 00000013 nop
+80008ec4: 00000013 nop
+80008ec8: 00000013 nop
+80008ecc: 00000013 nop
+80008ed0: 00000013 nop
+80008ed4: 00000013 nop
+80008ed8: 00000013 nop
+80008edc: 00000013 nop
+80008ee0: 00000013 nop
+80008ee4: 00000013 nop
+80008ee8: 00000013 nop
+80008eec: 00000013 nop
+80008ef0: 00000013 nop
+80008ef4: 00000013 nop
+80008ef8: 00000013 nop
+80008efc: 00000013 nop
+80008f00: 00000013 nop
+80008f04: 00000013 nop
+80008f08: 00000013 nop
+80008f0c: 00000013 nop
+80008f10: 00000013 nop
+80008f14: 00000013 nop
+80008f18: 00000013 nop
+80008f1c: 00000013 nop
+80008f20: 00000013 nop
+80008f24: 00000013 nop
+80008f28: 00000013 nop
+80008f2c: 00000013 nop
+80008f30: 00000013 nop
+80008f34: 00000013 nop
+80008f38: 00000013 nop
+80008f3c: 00000013 nop
+80008f40: 00000013 nop
+80008f44: 00000013 nop
+80008f48: 00000013 nop
+80008f4c: 00000013 nop
+80008f50: 00000013 nop
+80008f54: 00000013 nop
+80008f58: 00000013 nop
+80008f5c: 00000013 nop
+80008f60: 00000013 nop
+80008f64: 00000013 nop
+80008f68: 00000013 nop
+80008f6c: 00000013 nop
+80008f70: 00000013 nop
+80008f74: 00000013 nop
+80008f78: 00000013 nop
+80008f7c: 00000013 nop
+80008f80: 00000013 nop
+80008f84: 00000013 nop
+80008f88: 00000013 nop
+80008f8c: 00000013 nop
+80008f90: 00000013 nop
+80008f94: 00000013 nop
+80008f98: 00000013 nop
+80008f9c: 00000013 nop
+80008fa0: 00000013 nop
+80008fa4: 00000013 nop
+80008fa8: 00000013 nop
+80008fac: 00000013 nop
+80008fb0: 00000013 nop
+80008fb4: 00000013 nop
+80008fb8: 00000013 nop
+80008fbc: 00000013 nop
+80008fc0: 00000013 nop
+80008fc4: 00000013 nop
+80008fc8: 00000013 nop
+80008fcc: 00000013 nop
+80008fd0: 00000013 nop
+80008fd4: 00000013 nop
+80008fd8: 00000013 nop
+80008fdc: 00000013 nop
+80008fe0: 00000013 nop
+80008fe4: 00000013 nop
+80008fe8: 00000013 nop
+80008fec: 00000013 nop
+80008ff0: 00000013 nop
+80008ff4: 00000013 nop
+80008ff8: 00000013 nop
+80008ffc: 00000013 nop
+
+80009000 <ROM_4>:
+80009000: 4140 lw s0,4(a0)
+80009002: 4342 lw t1,16(sp)
+80009004: 4544 lw s1,12(a0)
+80009006: 4746 lw a4,80(sp)
+80009008: 4948 lw a0,20(a0)
+8000900a: 4b4a lw s6,144(sp)
+8000900c: 4d4c lw a1,28(a0)
+8000900e: 4f4e lw t5,208(sp)
+80009010: 00000013 nop
+80009014: 00000013 nop
+80009018: 00000013 nop
+8000901c: 00000013 nop
+80009020: 00000013 nop
+80009024: 00000013 nop
+80009028: 00000013 nop
+8000902c: 00000013 nop
+80009030: 00000013 nop
+80009034: 00000013 nop
+80009038: 00000013 nop
+8000903c: 00000013 nop
+80009040: 00000013 nop
+80009044: 00000013 nop
+80009048: 00000013 nop
+8000904c: 00000013 nop
+80009050: 00000013 nop
+80009054: 00000013 nop
+80009058: 00000013 nop
+8000905c: 00000013 nop
+80009060: 00000013 nop
+80009064: 00000013 nop
+80009068: 00000013 nop
+8000906c: 00000013 nop
+80009070: 00000013 nop
+80009074: 00000013 nop
+80009078: 00000013 nop
+8000907c: 00000013 nop
+80009080: 00000013 nop
+80009084: 00000013 nop
+80009088: 00000013 nop
+8000908c: 00000013 nop
+80009090: 00000013 nop
+80009094: 00000013 nop
+80009098: 00000013 nop
+8000909c: 00000013 nop
+800090a0: 00000013 nop
+800090a4: 00000013 nop
+800090a8: 00000013 nop
+800090ac: 00000013 nop
+800090b0: 00000013 nop
+800090b4: 00000013 nop
+800090b8: 00000013 nop
+800090bc: 00000013 nop
+800090c0: 00000013 nop
+800090c4: 00000013 nop
+800090c8: 00000013 nop
+800090cc: 00000013 nop
+800090d0: 00000013 nop
+800090d4: 00000013 nop
+800090d8: 00000013 nop
+800090dc: 00000013 nop
+800090e0: 00000013 nop
+800090e4: 00000013 nop
+800090e8: 00000013 nop
+800090ec: 00000013 nop
+800090f0: 00000013 nop
+800090f4: 00000013 nop
+800090f8: 00000013 nop
+800090fc: 00000013 nop
+80009100: 00000013 nop
+80009104: 00000013 nop
+80009108: 00000013 nop
+8000910c: 00000013 nop
+80009110: 00000013 nop
+80009114: 00000013 nop
+80009118: 00000013 nop
+8000911c: 00000013 nop
+80009120: 00000013 nop
+80009124: 00000013 nop
+80009128: 00000013 nop
+8000912c: 00000013 nop
+80009130: 00000013 nop
+80009134: 00000013 nop
+80009138: 00000013 nop
+8000913c: 00000013 nop
+80009140: 00000013 nop
+80009144: 00000013 nop
+80009148: 00000013 nop
+8000914c: 00000013 nop
+80009150: 00000013 nop
+80009154: 00000013 nop
+80009158: 00000013 nop
+8000915c: 00000013 nop
+80009160: 00000013 nop
+80009164: 00000013 nop
+80009168: 00000013 nop
+8000916c: 00000013 nop
+80009170: 00000013 nop
+80009174: 00000013 nop
+80009178: 00000013 nop
+8000917c: 00000013 nop
+80009180: 00000013 nop
+80009184: 00000013 nop
+80009188: 00000013 nop
+8000918c: 00000013 nop
+80009190: 00000013 nop
+80009194: 00000013 nop
+80009198: 00000013 nop
+8000919c: 00000013 nop
+800091a0: 00000013 nop
+800091a4: 00000013 nop
+800091a8: 00000013 nop
+800091ac: 00000013 nop
+800091b0: 00000013 nop
+800091b4: 00000013 nop
+800091b8: 00000013 nop
+800091bc: 00000013 nop
+800091c0: 00000013 nop
+800091c4: 00000013 nop
+800091c8: 00000013 nop
+800091cc: 00000013 nop
+800091d0: 00000013 nop
+800091d4: 00000013 nop
+800091d8: 00000013 nop
+800091dc: 00000013 nop
+800091e0: 00000013 nop
+800091e4: 00000013 nop
+800091e8: 00000013 nop
+800091ec: 00000013 nop
+800091f0: 00000013 nop
+800091f4: 00000013 nop
+800091f8: 00000013 nop
+800091fc: 00000013 nop
+80009200: 00000013 nop
+80009204: 00000013 nop
+80009208: 00000013 nop
+8000920c: 00000013 nop
+80009210: 00000013 nop
+80009214: 00000013 nop
+80009218: 00000013 nop
+8000921c: 00000013 nop
+80009220: 00000013 nop
+80009224: 00000013 nop
+80009228: 00000013 nop
+8000922c: 00000013 nop
+80009230: 00000013 nop
+80009234: 00000013 nop
+80009238: 00000013 nop
+8000923c: 00000013 nop
+80009240: 00000013 nop
+80009244: 00000013 nop
+80009248: 00000013 nop
+8000924c: 00000013 nop
+80009250: 00000013 nop
+80009254: 00000013 nop
+80009258: 00000013 nop
+8000925c: 00000013 nop
+80009260: 00000013 nop
+80009264: 00000013 nop
+80009268: 00000013 nop
+8000926c: 00000013 nop
+80009270: 00000013 nop
+80009274: 00000013 nop
+80009278: 00000013 nop
+8000927c: 00000013 nop
+80009280: 00000013 nop
+80009284: 00000013 nop
+80009288: 00000013 nop
+8000928c: 00000013 nop
+80009290: 00000013 nop
+80009294: 00000013 nop
+80009298: 00000013 nop
+8000929c: 00000013 nop
+800092a0: 00000013 nop
+800092a4: 00000013 nop
+800092a8: 00000013 nop
+800092ac: 00000013 nop
+800092b0: 00000013 nop
+800092b4: 00000013 nop
+800092b8: 00000013 nop
+800092bc: 00000013 nop
+800092c0: 00000013 nop
+800092c4: 00000013 nop
+800092c8: 00000013 nop
+800092cc: 00000013 nop
+800092d0: 00000013 nop
+800092d4: 00000013 nop
+800092d8: 00000013 nop
+800092dc: 00000013 nop
+800092e0: 00000013 nop
+800092e4: 00000013 nop
+800092e8: 00000013 nop
+800092ec: 00000013 nop
+800092f0: 00000013 nop
+800092f4: 00000013 nop
+800092f8: 00000013 nop
+800092fc: 00000013 nop
+80009300: 00000013 nop
+80009304: 00000013 nop
+80009308: 00000013 nop
+8000930c: 00000013 nop
+80009310: 00000013 nop
+80009314: 00000013 nop
+80009318: 00000013 nop
+8000931c: 00000013 nop
+80009320: 00000013 nop
+80009324: 00000013 nop
+80009328: 00000013 nop
+8000932c: 00000013 nop
+80009330: 00000013 nop
+80009334: 00000013 nop
+80009338: 00000013 nop
+8000933c: 00000013 nop
+80009340: 00000013 nop
+80009344: 00000013 nop
+80009348: 00000013 nop
+8000934c: 00000013 nop
+80009350: 00000013 nop
+80009354: 00000013 nop
+80009358: 00000013 nop
+8000935c: 00000013 nop
+80009360: 00000013 nop
+80009364: 00000013 nop
+80009368: 00000013 nop
+8000936c: 00000013 nop
+80009370: 00000013 nop
+80009374: 00000013 nop
+80009378: 00000013 nop
+8000937c: 00000013 nop
+80009380: 00000013 nop
+80009384: 00000013 nop
+80009388: 00000013 nop
+8000938c: 00000013 nop
+80009390: 00000013 nop
+80009394: 00000013 nop
+80009398: 00000013 nop
+8000939c: 00000013 nop
+800093a0: 00000013 nop
+800093a4: 00000013 nop
+800093a8: 00000013 nop
+800093ac: 00000013 nop
+800093b0: 00000013 nop
+800093b4: 00000013 nop
+800093b8: 00000013 nop
+800093bc: 00000013 nop
+800093c0: 00000013 nop
+800093c4: 00000013 nop
+800093c8: 00000013 nop
+800093cc: 00000013 nop
+800093d0: 00000013 nop
+800093d4: 00000013 nop
+800093d8: 00000013 nop
+800093dc: 00000013 nop
+800093e0: 00000013 nop
+800093e4: 00000013 nop
+800093e8: 00000013 nop
+800093ec: 00000013 nop
+800093f0: 00000013 nop
+800093f4: 00000013 nop
+800093f8: 00000013 nop
+800093fc: 00000013 nop
+80009400: 00000013 nop
+80009404: 00000013 nop
+80009408: 00000013 nop
+8000940c: 00000013 nop
+80009410: 00000013 nop
+80009414: 00000013 nop
+80009418: 00000013 nop
+8000941c: 00000013 nop
+80009420: 00000013 nop
+80009424: 00000013 nop
+80009428: 00000013 nop
+8000942c: 00000013 nop
+80009430: 00000013 nop
+80009434: 00000013 nop
+80009438: 00000013 nop
+8000943c: 00000013 nop
+80009440: 00000013 nop
+80009444: 00000013 nop
+80009448: 00000013 nop
+8000944c: 00000013 nop
+80009450: 00000013 nop
+80009454: 00000013 nop
+80009458: 00000013 nop
+8000945c: 00000013 nop
+80009460: 00000013 nop
+80009464: 00000013 nop
+80009468: 00000013 nop
+8000946c: 00000013 nop
+80009470: 00000013 nop
+80009474: 00000013 nop
+80009478: 00000013 nop
+8000947c: 00000013 nop
+80009480: 00000013 nop
+80009484: 00000013 nop
+80009488: 00000013 nop
+8000948c: 00000013 nop
+80009490: 00000013 nop
+80009494: 00000013 nop
+80009498: 00000013 nop
+8000949c: 00000013 nop
+800094a0: 00000013 nop
+800094a4: 00000013 nop
+800094a8: 00000013 nop
+800094ac: 00000013 nop
+800094b0: 00000013 nop
+800094b4: 00000013 nop
+800094b8: 00000013 nop
+800094bc: 00000013 nop
+800094c0: 00000013 nop
+800094c4: 00000013 nop
+800094c8: 00000013 nop
+800094cc: 00000013 nop
+800094d0: 00000013 nop
+800094d4: 00000013 nop
+800094d8: 00000013 nop
+800094dc: 00000013 nop
+800094e0: 00000013 nop
+800094e4: 00000013 nop
+800094e8: 00000013 nop
+800094ec: 00000013 nop
+800094f0: 00000013 nop
+800094f4: 00000013 nop
+800094f8: 00000013 nop
+800094fc: 00000013 nop
+80009500: 00000013 nop
+80009504: 00000013 nop
+80009508: 00000013 nop
+8000950c: 00000013 nop
+80009510: 00000013 nop
+80009514: 00000013 nop
+80009518: 00000013 nop
+8000951c: 00000013 nop
+80009520: 00000013 nop
+80009524: 00000013 nop
+80009528: 00000013 nop
+8000952c: 00000013 nop
+80009530: 00000013 nop
+80009534: 00000013 nop
+80009538: 00000013 nop
+8000953c: 00000013 nop
+80009540: 00000013 nop
+80009544: 00000013 nop
+80009548: 00000013 nop
+8000954c: 00000013 nop
+80009550: 00000013 nop
+80009554: 00000013 nop
+80009558: 00000013 nop
+8000955c: 00000013 nop
+80009560: 00000013 nop
+80009564: 00000013 nop
+80009568: 00000013 nop
+8000956c: 00000013 nop
+80009570: 00000013 nop
+80009574: 00000013 nop
+80009578: 00000013 nop
+8000957c: 00000013 nop
+80009580: 00000013 nop
+80009584: 00000013 nop
+80009588: 00000013 nop
+8000958c: 00000013 nop
+80009590: 00000013 nop
+80009594: 00000013 nop
+80009598: 00000013 nop
+8000959c: 00000013 nop
+800095a0: 00000013 nop
+800095a4: 00000013 nop
+800095a8: 00000013 nop
+800095ac: 00000013 nop
+800095b0: 00000013 nop
+800095b4: 00000013 nop
+800095b8: 00000013 nop
+800095bc: 00000013 nop
+800095c0: 00000013 nop
+800095c4: 00000013 nop
+800095c8: 00000013 nop
+800095cc: 00000013 nop
+800095d0: 00000013 nop
+800095d4: 00000013 nop
+800095d8: 00000013 nop
+800095dc: 00000013 nop
+800095e0: 00000013 nop
+800095e4: 00000013 nop
+800095e8: 00000013 nop
+800095ec: 00000013 nop
+800095f0: 00000013 nop
+800095f4: 00000013 nop
+800095f8: 00000013 nop
+800095fc: 00000013 nop
+80009600: 00000013 nop
+80009604: 00000013 nop
+80009608: 00000013 nop
+8000960c: 00000013 nop
+80009610: 00000013 nop
+80009614: 00000013 nop
+80009618: 00000013 nop
+8000961c: 00000013 nop
+80009620: 00000013 nop
+80009624: 00000013 nop
+80009628: 00000013 nop
+8000962c: 00000013 nop
+80009630: 00000013 nop
+80009634: 00000013 nop
+80009638: 00000013 nop
+8000963c: 00000013 nop
+80009640: 00000013 nop
+80009644: 00000013 nop
+80009648: 00000013 nop
+8000964c: 00000013 nop
+80009650: 00000013 nop
+80009654: 00000013 nop
+80009658: 00000013 nop
+8000965c: 00000013 nop
+80009660: 00000013 nop
+80009664: 00000013 nop
+80009668: 00000013 nop
+8000966c: 00000013 nop
+80009670: 00000013 nop
+80009674: 00000013 nop
+80009678: 00000013 nop
+8000967c: 00000013 nop
+80009680: 00000013 nop
+80009684: 00000013 nop
+80009688: 00000013 nop
+8000968c: 00000013 nop
+80009690: 00000013 nop
+80009694: 00000013 nop
+80009698: 00000013 nop
+8000969c: 00000013 nop
+800096a0: 00000013 nop
+800096a4: 00000013 nop
+800096a8: 00000013 nop
+800096ac: 00000013 nop
+800096b0: 00000013 nop
+800096b4: 00000013 nop
+800096b8: 00000013 nop
+800096bc: 00000013 nop
+800096c0: 00000013 nop
+800096c4: 00000013 nop
+800096c8: 00000013 nop
+800096cc: 00000013 nop
+800096d0: 00000013 nop
+800096d4: 00000013 nop
+800096d8: 00000013 nop
+800096dc: 00000013 nop
+800096e0: 00000013 nop
+800096e4: 00000013 nop
+800096e8: 00000013 nop
+800096ec: 00000013 nop
+800096f0: 00000013 nop
+800096f4: 00000013 nop
+800096f8: 00000013 nop
+800096fc: 00000013 nop
+80009700: 00000013 nop
+80009704: 00000013 nop
+80009708: 00000013 nop
+8000970c: 00000013 nop
+80009710: 00000013 nop
+80009714: 00000013 nop
+80009718: 00000013 nop
+8000971c: 00000013 nop
+80009720: 00000013 nop
+80009724: 00000013 nop
+80009728: 00000013 nop
+8000972c: 00000013 nop
+80009730: 00000013 nop
+80009734: 00000013 nop
+80009738: 00000013 nop
+8000973c: 00000013 nop
+80009740: 00000013 nop
+80009744: 00000013 nop
+80009748: 00000013 nop
+8000974c: 00000013 nop
+80009750: 00000013 nop
+80009754: 00000013 nop
+80009758: 00000013 nop
+8000975c: 00000013 nop
+80009760: 00000013 nop
+80009764: 00000013 nop
+80009768: 00000013 nop
+8000976c: 00000013 nop
+80009770: 00000013 nop
+80009774: 00000013 nop
+80009778: 00000013 nop
+8000977c: 00000013 nop
+80009780: 00000013 nop
+80009784: 00000013 nop
+80009788: 00000013 nop
+8000978c: 00000013 nop
+80009790: 00000013 nop
+80009794: 00000013 nop
+80009798: 00000013 nop
+8000979c: 00000013 nop
+800097a0: 00000013 nop
+800097a4: 00000013 nop
+800097a8: 00000013 nop
+800097ac: 00000013 nop
+800097b0: 00000013 nop
+800097b4: 00000013 nop
+800097b8: 00000013 nop
+800097bc: 00000013 nop
+800097c0: 00000013 nop
+800097c4: 00000013 nop
+800097c8: 00000013 nop
+800097cc: 00000013 nop
+800097d0: 00000013 nop
+800097d4: 00000013 nop
+800097d8: 00000013 nop
+800097dc: 00000013 nop
+800097e0: 00000013 nop
+800097e4: 00000013 nop
+800097e8: 00000013 nop
+800097ec: 00000013 nop
+800097f0: 00000013 nop
+800097f4: 00000013 nop
+800097f8: 00000013 nop
+800097fc: 00000013 nop
+80009800: 00000013 nop
+80009804: 00000013 nop
+80009808: 00000013 nop
+8000980c: 00000013 nop
+80009810: 00000013 nop
+80009814: 00000013 nop
+80009818: 00000013 nop
+8000981c: 00000013 nop
+80009820: 00000013 nop
+80009824: 00000013 nop
+80009828: 00000013 nop
+8000982c: 00000013 nop
+80009830: 00000013 nop
+80009834: 00000013 nop
+80009838: 00000013 nop
+8000983c: 00000013 nop
+80009840: 00000013 nop
+80009844: 00000013 nop
+80009848: 00000013 nop
+8000984c: 00000013 nop
+80009850: 00000013 nop
+80009854: 00000013 nop
+80009858: 00000013 nop
+8000985c: 00000013 nop
+80009860: 00000013 nop
+80009864: 00000013 nop
+80009868: 00000013 nop
+8000986c: 00000013 nop
+80009870: 00000013 nop
+80009874: 00000013 nop
+80009878: 00000013 nop
+8000987c: 00000013 nop
+80009880: 00000013 nop
+80009884: 00000013 nop
+80009888: 00000013 nop
+8000988c: 00000013 nop
+80009890: 00000013 nop
+80009894: 00000013 nop
+80009898: 00000013 nop
+8000989c: 00000013 nop
+800098a0: 00000013 nop
+800098a4: 00000013 nop
+800098a8: 00000013 nop
+800098ac: 00000013 nop
+800098b0: 00000013 nop
+800098b4: 00000013 nop
+800098b8: 00000013 nop
+800098bc: 00000013 nop
+800098c0: 00000013 nop
+800098c4: 00000013 nop
+800098c8: 00000013 nop
+800098cc: 00000013 nop
+800098d0: 00000013 nop
+800098d4: 00000013 nop
+800098d8: 00000013 nop
+800098dc: 00000013 nop
+800098e0: 00000013 nop
+800098e4: 00000013 nop
+800098e8: 00000013 nop
+800098ec: 00000013 nop
+800098f0: 00000013 nop
+800098f4: 00000013 nop
+800098f8: 00000013 nop
+800098fc: 00000013 nop
+80009900: 00000013 nop
+80009904: 00000013 nop
+80009908: 00000013 nop
+8000990c: 00000013 nop
+80009910: 00000013 nop
+80009914: 00000013 nop
+80009918: 00000013 nop
+8000991c: 00000013 nop
+80009920: 00000013 nop
+80009924: 00000013 nop
+80009928: 00000013 nop
+8000992c: 00000013 nop
+80009930: 00000013 nop
+80009934: 00000013 nop
+80009938: 00000013 nop
+8000993c: 00000013 nop
+80009940: 00000013 nop
+80009944: 00000013 nop
+80009948: 00000013 nop
+8000994c: 00000013 nop
+80009950: 00000013 nop
+80009954: 00000013 nop
+80009958: 00000013 nop
+8000995c: 00000013 nop
+80009960: 00000013 nop
+80009964: 00000013 nop
+80009968: 00000013 nop
+8000996c: 00000013 nop
+80009970: 00000013 nop
+80009974: 00000013 nop
+80009978: 00000013 nop
+8000997c: 00000013 nop
+80009980: 00000013 nop
+80009984: 00000013 nop
+80009988: 00000013 nop
+8000998c: 00000013 nop
+80009990: 00000013 nop
+80009994: 00000013 nop
+80009998: 00000013 nop
+8000999c: 00000013 nop
+800099a0: 00000013 nop
+800099a4: 00000013 nop
+800099a8: 00000013 nop
+800099ac: 00000013 nop
+800099b0: 00000013 nop
+800099b4: 00000013 nop
+800099b8: 00000013 nop
+800099bc: 00000013 nop
+800099c0: 00000013 nop
+800099c4: 00000013 nop
+800099c8: 00000013 nop
+800099cc: 00000013 nop
+800099d0: 00000013 nop
+800099d4: 00000013 nop
+800099d8: 00000013 nop
+800099dc: 00000013 nop
+800099e0: 00000013 nop
+800099e4: 00000013 nop
+800099e8: 00000013 nop
+800099ec: 00000013 nop
+800099f0: 00000013 nop
+800099f4: 00000013 nop
+800099f8: 00000013 nop
+800099fc: 00000013 nop
+80009a00: 00000013 nop
+80009a04: 00000013 nop
+80009a08: 00000013 nop
+80009a0c: 00000013 nop
+80009a10: 00000013 nop
+80009a14: 00000013 nop
+80009a18: 00000013 nop
+80009a1c: 00000013 nop
+80009a20: 00000013 nop
+80009a24: 00000013 nop
+80009a28: 00000013 nop
+80009a2c: 00000013 nop
+80009a30: 00000013 nop
+80009a34: 00000013 nop
+80009a38: 00000013 nop
+80009a3c: 00000013 nop
+80009a40: 00000013 nop
+80009a44: 00000013 nop
+80009a48: 00000013 nop
+80009a4c: 00000013 nop
+80009a50: 00000013 nop
+80009a54: 00000013 nop
+80009a58: 00000013 nop
+80009a5c: 00000013 nop
+80009a60: 00000013 nop
+80009a64: 00000013 nop
+80009a68: 00000013 nop
+80009a6c: 00000013 nop
+80009a70: 00000013 nop
+80009a74: 00000013 nop
+80009a78: 00000013 nop
+80009a7c: 00000013 nop
+80009a80: 00000013 nop
+80009a84: 00000013 nop
+80009a88: 00000013 nop
+80009a8c: 00000013 nop
+80009a90: 00000013 nop
+80009a94: 00000013 nop
+80009a98: 00000013 nop
+80009a9c: 00000013 nop
+80009aa0: 00000013 nop
+80009aa4: 00000013 nop
+80009aa8: 00000013 nop
+80009aac: 00000013 nop
+80009ab0: 00000013 nop
+80009ab4: 00000013 nop
+80009ab8: 00000013 nop
+80009abc: 00000013 nop
+80009ac0: 00000013 nop
+80009ac4: 00000013 nop
+80009ac8: 00000013 nop
+80009acc: 00000013 nop
+80009ad0: 00000013 nop
+80009ad4: 00000013 nop
+80009ad8: 00000013 nop
+80009adc: 00000013 nop
+80009ae0: 00000013 nop
+80009ae4: 00000013 nop
+80009ae8: 00000013 nop
+80009aec: 00000013 nop
+80009af0: 00000013 nop
+80009af4: 00000013 nop
+80009af8: 00000013 nop
+80009afc: 00000013 nop
+80009b00: 00000013 nop
+80009b04: 00000013 nop
+80009b08: 00000013 nop
+80009b0c: 00000013 nop
+80009b10: 00000013 nop
+80009b14: 00000013 nop
+80009b18: 00000013 nop
+80009b1c: 00000013 nop
+80009b20: 00000013 nop
+80009b24: 00000013 nop
+80009b28: 00000013 nop
+80009b2c: 00000013 nop
+80009b30: 00000013 nop
+80009b34: 00000013 nop
+80009b38: 00000013 nop
+80009b3c: 00000013 nop
+80009b40: 00000013 nop
+80009b44: 00000013 nop
+80009b48: 00000013 nop
+80009b4c: 00000013 nop
+80009b50: 00000013 nop
+80009b54: 00000013 nop
+80009b58: 00000013 nop
+80009b5c: 00000013 nop
+80009b60: 00000013 nop
+80009b64: 00000013 nop
+80009b68: 00000013 nop
+80009b6c: 00000013 nop
+80009b70: 00000013 nop
+80009b74: 00000013 nop
+80009b78: 00000013 nop
+80009b7c: 00000013 nop
+80009b80: 00000013 nop
+80009b84: 00000013 nop
+80009b88: 00000013 nop
+80009b8c: 00000013 nop
+80009b90: 00000013 nop
+80009b94: 00000013 nop
+80009b98: 00000013 nop
+80009b9c: 00000013 nop
+80009ba0: 00000013 nop
+80009ba4: 00000013 nop
+80009ba8: 00000013 nop
+80009bac: 00000013 nop
+80009bb0: 00000013 nop
+80009bb4: 00000013 nop
+80009bb8: 00000013 nop
+80009bbc: 00000013 nop
+80009bc0: 00000013 nop
+80009bc4: 00000013 nop
+80009bc8: 00000013 nop
+80009bcc: 00000013 nop
+80009bd0: 00000013 nop
+80009bd4: 00000013 nop
+80009bd8: 00000013 nop
+80009bdc: 00000013 nop
+80009be0: 00000013 nop
+80009be4: 00000013 nop
+80009be8: 00000013 nop
+80009bec: 00000013 nop
+80009bf0: 00000013 nop
+80009bf4: 00000013 nop
+80009bf8: 00000013 nop
+80009bfc: 00000013 nop
+80009c00: 00000013 nop
+80009c04: 00000013 nop
+80009c08: 00000013 nop
+80009c0c: 00000013 nop
+80009c10: 00000013 nop
+80009c14: 00000013 nop
+80009c18: 00000013 nop
+80009c1c: 00000013 nop
+80009c20: 00000013 nop
+80009c24: 00000013 nop
+80009c28: 00000013 nop
+80009c2c: 00000013 nop
+80009c30: 00000013 nop
+80009c34: 00000013 nop
+80009c38: 00000013 nop
+80009c3c: 00000013 nop
+80009c40: 00000013 nop
+80009c44: 00000013 nop
+80009c48: 00000013 nop
+80009c4c: 00000013 nop
+80009c50: 00000013 nop
+80009c54: 00000013 nop
+80009c58: 00000013 nop
+80009c5c: 00000013 nop
+80009c60: 00000013 nop
+80009c64: 00000013 nop
+80009c68: 00000013 nop
+80009c6c: 00000013 nop
+80009c70: 00000013 nop
+80009c74: 00000013 nop
+80009c78: 00000013 nop
+80009c7c: 00000013 nop
+80009c80: 00000013 nop
+80009c84: 00000013 nop
+80009c88: 00000013 nop
+80009c8c: 00000013 nop
+80009c90: 00000013 nop
+80009c94: 00000013 nop
+80009c98: 00000013 nop
+80009c9c: 00000013 nop
+80009ca0: 00000013 nop
+80009ca4: 00000013 nop
+80009ca8: 00000013 nop
+80009cac: 00000013 nop
+80009cb0: 00000013 nop
+80009cb4: 00000013 nop
+80009cb8: 00000013 nop
+80009cbc: 00000013 nop
+80009cc0: 00000013 nop
+80009cc4: 00000013 nop
+80009cc8: 00000013 nop
+80009ccc: 00000013 nop
+80009cd0: 00000013 nop
+80009cd4: 00000013 nop
+80009cd8: 00000013 nop
+80009cdc: 00000013 nop
+80009ce0: 00000013 nop
+80009ce4: 00000013 nop
+80009ce8: 00000013 nop
+80009cec: 00000013 nop
+80009cf0: 00000013 nop
+80009cf4: 00000013 nop
+80009cf8: 00000013 nop
+80009cfc: 00000013 nop
+80009d00: 00000013 nop
+80009d04: 00000013 nop
+80009d08: 00000013 nop
+80009d0c: 00000013 nop
+80009d10: 00000013 nop
+80009d14: 00000013 nop
+80009d18: 00000013 nop
+80009d1c: 00000013 nop
+80009d20: 00000013 nop
+80009d24: 00000013 nop
+80009d28: 00000013 nop
+80009d2c: 00000013 nop
+80009d30: 00000013 nop
+80009d34: 00000013 nop
+80009d38: 00000013 nop
+80009d3c: 00000013 nop
+80009d40: 00000013 nop
+80009d44: 00000013 nop
+80009d48: 00000013 nop
+80009d4c: 00000013 nop
+80009d50: 00000013 nop
+80009d54: 00000013 nop
+80009d58: 00000013 nop
+80009d5c: 00000013 nop
+80009d60: 00000013 nop
+80009d64: 00000013 nop
+80009d68: 00000013 nop
+80009d6c: 00000013 nop
+80009d70: 00000013 nop
+80009d74: 00000013 nop
+80009d78: 00000013 nop
+80009d7c: 00000013 nop
+80009d80: 00000013 nop
+80009d84: 00000013 nop
+80009d88: 00000013 nop
+80009d8c: 00000013 nop
+80009d90: 00000013 nop
+80009d94: 00000013 nop
+80009d98: 00000013 nop
+80009d9c: 00000013 nop
+80009da0: 00000013 nop
+80009da4: 00000013 nop
+80009da8: 00000013 nop
+80009dac: 00000013 nop
+80009db0: 00000013 nop
+80009db4: 00000013 nop
+80009db8: 00000013 nop
+80009dbc: 00000013 nop
+80009dc0: 00000013 nop
+80009dc4: 00000013 nop
+80009dc8: 00000013 nop
+80009dcc: 00000013 nop
+80009dd0: 00000013 nop
+80009dd4: 00000013 nop
+80009dd8: 00000013 nop
+80009ddc: 00000013 nop
+80009de0: 00000013 nop
+80009de4: 00000013 nop
+80009de8: 00000013 nop
+80009dec: 00000013 nop
+80009df0: 00000013 nop
+80009df4: 00000013 nop
+80009df8: 00000013 nop
+80009dfc: 00000013 nop
+80009e00: 00000013 nop
+80009e04: 00000013 nop
+80009e08: 00000013 nop
+80009e0c: 00000013 nop
+80009e10: 00000013 nop
+80009e14: 00000013 nop
+80009e18: 00000013 nop
+80009e1c: 00000013 nop
+80009e20: 00000013 nop
+80009e24: 00000013 nop
+80009e28: 00000013 nop
+80009e2c: 00000013 nop
+80009e30: 00000013 nop
+80009e34: 00000013 nop
+80009e38: 00000013 nop
+80009e3c: 00000013 nop
+80009e40: 00000013 nop
+80009e44: 00000013 nop
+80009e48: 00000013 nop
+80009e4c: 00000013 nop
+80009e50: 00000013 nop
+80009e54: 00000013 nop
+80009e58: 00000013 nop
+80009e5c: 00000013 nop
+80009e60: 00000013 nop
+80009e64: 00000013 nop
+80009e68: 00000013 nop
+80009e6c: 00000013 nop
+80009e70: 00000013 nop
+80009e74: 00000013 nop
+80009e78: 00000013 nop
+80009e7c: 00000013 nop
+80009e80: 00000013 nop
+80009e84: 00000013 nop
+80009e88: 00000013 nop
+80009e8c: 00000013 nop
+80009e90: 00000013 nop
+80009e94: 00000013 nop
+80009e98: 00000013 nop
+80009e9c: 00000013 nop
+80009ea0: 00000013 nop
+80009ea4: 00000013 nop
+80009ea8: 00000013 nop
+80009eac: 00000013 nop
+80009eb0: 00000013 nop
+80009eb4: 00000013 nop
+80009eb8: 00000013 nop
+80009ebc: 00000013 nop
+80009ec0: 00000013 nop
+80009ec4: 00000013 nop
+80009ec8: 00000013 nop
+80009ecc: 00000013 nop
+80009ed0: 00000013 nop
+80009ed4: 00000013 nop
+80009ed8: 00000013 nop
+80009edc: 00000013 nop
+80009ee0: 00000013 nop
+80009ee4: 00000013 nop
+80009ee8: 00000013 nop
+80009eec: 00000013 nop
+80009ef0: 00000013 nop
+80009ef4: 00000013 nop
+80009ef8: 00000013 nop
+80009efc: 00000013 nop
+80009f00: 00000013 nop
+80009f04: 00000013 nop
+80009f08: 00000013 nop
+80009f0c: 00000013 nop
+80009f10: 00000013 nop
+80009f14: 00000013 nop
+80009f18: 00000013 nop
+80009f1c: 00000013 nop
+80009f20: 00000013 nop
+80009f24: 00000013 nop
+80009f28: 00000013 nop
+80009f2c: 00000013 nop
+80009f30: 00000013 nop
+80009f34: 00000013 nop
+80009f38: 00000013 nop
+80009f3c: 00000013 nop
+80009f40: 00000013 nop
+80009f44: 00000013 nop
+80009f48: 00000013 nop
+80009f4c: 00000013 nop
+80009f50: 00000013 nop
+80009f54: 00000013 nop
+80009f58: 00000013 nop
+80009f5c: 00000013 nop
+80009f60: 00000013 nop
+80009f64: 00000013 nop
+80009f68: 00000013 nop
+80009f6c: 00000013 nop
+80009f70: 00000013 nop
+80009f74: 00000013 nop
+80009f78: 00000013 nop
+80009f7c: 00000013 nop
+80009f80: 00000013 nop
+80009f84: 00000013 nop
+80009f88: 00000013 nop
+80009f8c: 00000013 nop
+80009f90: 00000013 nop
+80009f94: 00000013 nop
+80009f98: 00000013 nop
+80009f9c: 00000013 nop
+80009fa0: 00000013 nop
+80009fa4: 00000013 nop
+80009fa8: 00000013 nop
+80009fac: 00000013 nop
+80009fb0: 00000013 nop
+80009fb4: 00000013 nop
+80009fb8: 00000013 nop
+80009fbc: 00000013 nop
+80009fc0: 00000013 nop
+80009fc4: 00000013 nop
+80009fc8: 00000013 nop
+80009fcc: 00000013 nop
+80009fd0: 00000013 nop
+80009fd4: 00000013 nop
+80009fd8: 00000013 nop
+80009fdc: 00000013 nop
+80009fe0: 00000013 nop
+80009fe4: 00000013 nop
+80009fe8: 00000013 nop
+80009fec: 00000013 nop
+80009ff0: 00000013 nop
+80009ff4: 00000013 nop
+80009ff8: 00000013 nop
+80009ffc: 00000013 nop
+
+8000a000 <ROM_5>:
+8000a000: 5150 lw a2,36(a0)
+8000a002: 5352 lw t1,52(sp)
+8000a004: 5554 lw a3,44(a0)
+8000a006: 5756 lw a4,116(sp)
+8000a008: 5958 lw a4,52(a0)
+8000a00a: 5b5a lw s6,180(sp)
+8000a00c: 5d5c lw a5,60(a0)
+8000a00e: 5f5e lw t5,244(sp)
+8000a010: 00008067 ret
+8000a014: 00000013 nop
+8000a018: 00000013 nop
+8000a01c: 00000013 nop
+8000a020: 00000013 nop
+8000a024: 00000013 nop
+8000a028: 00000013 nop
+8000a02c: 00000013 nop
+8000a030: 00000013 nop
+8000a034: 00000013 nop
+8000a038: 00000013 nop
+8000a03c: 00000013 nop
+8000a040: 00000013 nop
+8000a044: 00000013 nop
+8000a048: 00000013 nop
+8000a04c: 00000013 nop
+8000a050: 00000013 nop
+8000a054: 00000013 nop
+8000a058: 00000013 nop
+8000a05c: 00000013 nop
+8000a060: 00000013 nop
+8000a064: 00000013 nop
+8000a068: 00000013 nop
+8000a06c: 00000013 nop
+8000a070: 00000013 nop
+8000a074: 00000013 nop
+8000a078: 00000013 nop
+8000a07c: 00000013 nop
+8000a080: 00000013 nop
+8000a084: 00000013 nop
+8000a088: 00000013 nop
+8000a08c: 00000013 nop
+8000a090: 00000013 nop
+8000a094: 00000013 nop
+8000a098: 00000013 nop
+8000a09c: 00000013 nop
+8000a0a0: 00000013 nop
+8000a0a4: 00000013 nop
+8000a0a8: 00000013 nop
+8000a0ac: 00000013 nop
+8000a0b0: 00000013 nop
+8000a0b4: 00000013 nop
+8000a0b8: 00000013 nop
+8000a0bc: 00000013 nop
+8000a0c0: 00000013 nop
+8000a0c4: 00000013 nop
+8000a0c8: 00000013 nop
+8000a0cc: 00000013 nop
+8000a0d0: 00000013 nop
+8000a0d4: 00000013 nop
+8000a0d8: 00000013 nop
+8000a0dc: 00000013 nop
+8000a0e0: 00000013 nop
+8000a0e4: 00000013 nop
+8000a0e8: 00000013 nop
+8000a0ec: 00000013 nop
+8000a0f0: 00000013 nop
+8000a0f4: 00000013 nop
+8000a0f8: 00000013 nop
+8000a0fc: 00000013 nop
+8000a100: 00000013 nop
+8000a104: 00000013 nop
+8000a108: 00000013 nop
+8000a10c: 00000013 nop
+8000a110: 00000013 nop
+8000a114: 00000013 nop
+8000a118: 00000013 nop
+8000a11c: 00000013 nop
+8000a120: 00000013 nop
+8000a124: 00000013 nop
+8000a128: 00000013 nop
+8000a12c: 00000013 nop
+8000a130: 00000013 nop
+8000a134: 00000013 nop
+8000a138: 00000013 nop
+8000a13c: 00000013 nop
+8000a140: 00000013 nop
+8000a144: 00000013 nop
+8000a148: 00000013 nop
+8000a14c: 00000013 nop
+8000a150: 00000013 nop
+8000a154: 00000013 nop
+8000a158: 00000013 nop
+8000a15c: 00000013 nop
+8000a160: 00000013 nop
+8000a164: 00000013 nop
+8000a168: 00000013 nop
+8000a16c: 00000013 nop
+8000a170: 00000013 nop
+8000a174: 00000013 nop
+8000a178: 00000013 nop
+8000a17c: 00000013 nop
+8000a180: 00000013 nop
+8000a184: 00000013 nop
+8000a188: 00000013 nop
+8000a18c: 00000013 nop
+8000a190: 00000013 nop
+8000a194: 00000013 nop
+8000a198: 00000013 nop
+8000a19c: 00000013 nop
+8000a1a0: 00000013 nop
+8000a1a4: 00000013 nop
+8000a1a8: 00000013 nop
+8000a1ac: 00000013 nop
+8000a1b0: 00000013 nop
+8000a1b4: 00000013 nop
+8000a1b8: 00000013 nop
+8000a1bc: 00000013 nop
+8000a1c0: 00000013 nop
+8000a1c4: 00000013 nop
+8000a1c8: 00000013 nop
+8000a1cc: 00000013 nop
+8000a1d0: 00000013 nop
+8000a1d4: 00000013 nop
+8000a1d8: 00000013 nop
+8000a1dc: 00000013 nop
+8000a1e0: 00000013 nop
+8000a1e4: 00000013 nop
+8000a1e8: 00000013 nop
+8000a1ec: 00000013 nop
+8000a1f0: 00000013 nop
+8000a1f4: 00000013 nop
+8000a1f8: 00000013 nop
+8000a1fc: 00000013 nop
+8000a200: 00000013 nop
+8000a204: 00000013 nop
+8000a208: 00000013 nop
+8000a20c: 00000013 nop
+8000a210: 00000013 nop
+8000a214: 00000013 nop
+8000a218: 00000013 nop
+8000a21c: 00000013 nop
+8000a220: 00000013 nop
+8000a224: 00000013 nop
+8000a228: 00000013 nop
+8000a22c: 00000013 nop
+8000a230: 00000013 nop
+8000a234: 00000013 nop
+8000a238: 00000013 nop
+8000a23c: 00000013 nop
+8000a240: 00000013 nop
+8000a244: 00000013 nop
+8000a248: 00000013 nop
+8000a24c: 00000013 nop
+8000a250: 00000013 nop
+8000a254: 00000013 nop
+8000a258: 00000013 nop
+8000a25c: 00000013 nop
+8000a260: 00000013 nop
+8000a264: 00000013 nop
+8000a268: 00000013 nop
+8000a26c: 00000013 nop
+8000a270: 00000013 nop
+8000a274: 00000013 nop
+8000a278: 00000013 nop
+8000a27c: 00000013 nop
+8000a280: 00000013 nop
+8000a284: 00000013 nop
+8000a288: 00000013 nop
+8000a28c: 00000013 nop
+8000a290: 00000013 nop
+8000a294: 00000013 nop
+8000a298: 00000013 nop
+8000a29c: 00000013 nop
+8000a2a0: 00000013 nop
+8000a2a4: 00000013 nop
+8000a2a8: 00000013 nop
+8000a2ac: 00000013 nop
+8000a2b0: 00000013 nop
+8000a2b4: 00000013 nop
+8000a2b8: 00000013 nop
+8000a2bc: 00000013 nop
+8000a2c0: 00000013 nop
+8000a2c4: 00000013 nop
+8000a2c8: 00000013 nop
+8000a2cc: 00000013 nop
+8000a2d0: 00000013 nop
+8000a2d4: 00000013 nop
+8000a2d8: 00000013 nop
+8000a2dc: 00000013 nop
+8000a2e0: 00000013 nop
+8000a2e4: 00000013 nop
+8000a2e8: 00000013 nop
+8000a2ec: 00000013 nop
+8000a2f0: 00000013 nop
+8000a2f4: 00000013 nop
+8000a2f8: 00000013 nop
+8000a2fc: 00000013 nop
+8000a300: 00000013 nop
+8000a304: 00000013 nop
+8000a308: 00000013 nop
+8000a30c: 00000013 nop
+8000a310: 00000013 nop
+8000a314: 00000013 nop
+8000a318: 00000013 nop
+8000a31c: 00000013 nop
+8000a320: 00000013 nop
+8000a324: 00000013 nop
+8000a328: 00000013 nop
+8000a32c: 00000013 nop
+8000a330: 00000013 nop
+8000a334: 00000013 nop
+8000a338: 00000013 nop
+8000a33c: 00000013 nop
+8000a340: 00000013 nop
+8000a344: 00000013 nop
+8000a348: 00000013 nop
+8000a34c: 00000013 nop
+8000a350: 00000013 nop
+8000a354: 00000013 nop
+8000a358: 00000013 nop
+8000a35c: 00000013 nop
+8000a360: 00000013 nop
+8000a364: 00000013 nop
+8000a368: 00000013 nop
+8000a36c: 00000013 nop
+8000a370: 00000013 nop
+8000a374: 00000013 nop
+8000a378: 00000013 nop
+8000a37c: 00000013 nop
+8000a380: 00000013 nop
+8000a384: 00000013 nop
+8000a388: 00000013 nop
+8000a38c: 00000013 nop
+8000a390: 00000013 nop
+8000a394: 00000013 nop
+8000a398: 00000013 nop
+8000a39c: 00000013 nop
+8000a3a0: 00000013 nop
+8000a3a4: 00000013 nop
+8000a3a8: 00000013 nop
+8000a3ac: 00000013 nop
+8000a3b0: 00000013 nop
+8000a3b4: 00000013 nop
+8000a3b8: 00000013 nop
+8000a3bc: 00000013 nop
+8000a3c0: 00000013 nop
+8000a3c4: 00000013 nop
+8000a3c8: 00000013 nop
+8000a3cc: 00000013 nop
+8000a3d0: 00000013 nop
+8000a3d4: 00000013 nop
+8000a3d8: 00000013 nop
+8000a3dc: 00000013 nop
+8000a3e0: 00000013 nop
+8000a3e4: 00000013 nop
+8000a3e8: 00000013 nop
+8000a3ec: 00000013 nop
+8000a3f0: 00000013 nop
+8000a3f4: 00000013 nop
+8000a3f8: 00000013 nop
+8000a3fc: 00000013 nop
+8000a400: 00000013 nop
+8000a404: 00000013 nop
+8000a408: 00000013 nop
+8000a40c: 00000013 nop
+8000a410: 00000013 nop
+8000a414: 00000013 nop
+8000a418: 00000013 nop
+8000a41c: 00000013 nop
+8000a420: 00000013 nop
+8000a424: 00000013 nop
+8000a428: 00000013 nop
+8000a42c: 00000013 nop
+8000a430: 00000013 nop
+8000a434: 00000013 nop
+8000a438: 00000013 nop
+8000a43c: 00000013 nop
+8000a440: 00000013 nop
+8000a444: 00000013 nop
+8000a448: 00000013 nop
+8000a44c: 00000013 nop
+8000a450: 00000013 nop
+8000a454: 00000013 nop
+8000a458: 00000013 nop
+8000a45c: 00000013 nop
+8000a460: 00000013 nop
+8000a464: 00000013 nop
+8000a468: 00000013 nop
+8000a46c: 00000013 nop
+8000a470: 00000013 nop
+8000a474: 00000013 nop
+8000a478: 00000013 nop
+8000a47c: 00000013 nop
+8000a480: 00000013 nop
+8000a484: 00000013 nop
+8000a488: 00000013 nop
+8000a48c: 00000013 nop
+8000a490: 00000013 nop
+8000a494: 00000013 nop
+8000a498: 00000013 nop
+8000a49c: 00000013 nop
+8000a4a0: 00000013 nop
+8000a4a4: 00000013 nop
+8000a4a8: 00000013 nop
+8000a4ac: 00000013 nop
+8000a4b0: 00000013 nop
+8000a4b4: 00000013 nop
+8000a4b8: 00000013 nop
+8000a4bc: 00000013 nop
+8000a4c0: 00000013 nop
+8000a4c4: 00000013 nop
+8000a4c8: 00000013 nop
+8000a4cc: 00000013 nop
+8000a4d0: 00000013 nop
+8000a4d4: 00000013 nop
+8000a4d8: 00000013 nop
+8000a4dc: 00000013 nop
+8000a4e0: 00000013 nop
+8000a4e4: 00000013 nop
+8000a4e8: 00000013 nop
+8000a4ec: 00000013 nop
+8000a4f0: 00000013 nop
+8000a4f4: 00000013 nop
+8000a4f8: 00000013 nop
+8000a4fc: 00000013 nop
+8000a500: 00000013 nop
+8000a504: 00000013 nop
+8000a508: 00000013 nop
+8000a50c: 00000013 nop
+8000a510: 00000013 nop
+8000a514: 00000013 nop
+8000a518: 00000013 nop
+8000a51c: 00000013 nop
+8000a520: 00000013 nop
+8000a524: 00000013 nop
+8000a528: 00000013 nop
+8000a52c: 00000013 nop
+8000a530: 00000013 nop
+8000a534: 00000013 nop
+8000a538: 00000013 nop
+8000a53c: 00000013 nop
+8000a540: 00000013 nop
+8000a544: 00000013 nop
+8000a548: 00000013 nop
+8000a54c: 00000013 nop
+8000a550: 00000013 nop
+8000a554: 00000013 nop
+8000a558: 00000013 nop
+8000a55c: 00000013 nop
+8000a560: 00000013 nop
+8000a564: 00000013 nop
+8000a568: 00000013 nop
+8000a56c: 00000013 nop
+8000a570: 00000013 nop
+8000a574: 00000013 nop
+8000a578: 00000013 nop
+8000a57c: 00000013 nop
+8000a580: 00000013 nop
+8000a584: 00000013 nop
+8000a588: 00000013 nop
+8000a58c: 00000013 nop
+8000a590: 00000013 nop
+8000a594: 00000013 nop
+8000a598: 00000013 nop
+8000a59c: 00000013 nop
+8000a5a0: 00000013 nop
+8000a5a4: 00000013 nop
+8000a5a8: 00000013 nop
+8000a5ac: 00000013 nop
+8000a5b0: 00000013 nop
+8000a5b4: 00000013 nop
+8000a5b8: 00000013 nop
+8000a5bc: 00000013 nop
+8000a5c0: 00000013 nop
+8000a5c4: 00000013 nop
+8000a5c8: 00000013 nop
+8000a5cc: 00000013 nop
+8000a5d0: 00000013 nop
+8000a5d4: 00000013 nop
+8000a5d8: 00000013 nop
+8000a5dc: 00000013 nop
+8000a5e0: 00000013 nop
+8000a5e4: 00000013 nop
+8000a5e8: 00000013 nop
+8000a5ec: 00000013 nop
+8000a5f0: 00000013 nop
+8000a5f4: 00000013 nop
+8000a5f8: 00000013 nop
+8000a5fc: 00000013 nop
+8000a600: 00000013 nop
+8000a604: 00000013 nop
+8000a608: 00000013 nop
+8000a60c: 00000013 nop
+8000a610: 00000013 nop
+8000a614: 00000013 nop
+8000a618: 00000013 nop
+8000a61c: 00000013 nop
+8000a620: 00000013 nop
+8000a624: 00000013 nop
+8000a628: 00000013 nop
+8000a62c: 00000013 nop
+8000a630: 00000013 nop
+8000a634: 00000013 nop
+8000a638: 00000013 nop
+8000a63c: 00000013 nop
+8000a640: 00000013 nop
+8000a644: 00000013 nop
+8000a648: 00000013 nop
+8000a64c: 00000013 nop
+8000a650: 00000013 nop
+8000a654: 00000013 nop
+8000a658: 00000013 nop
+8000a65c: 00000013 nop
+8000a660: 00000013 nop
+8000a664: 00000013 nop
+8000a668: 00000013 nop
+8000a66c: 00000013 nop
+8000a670: 00000013 nop
+8000a674: 00000013 nop
+8000a678: 00000013 nop
+8000a67c: 00000013 nop
+8000a680: 00000013 nop
+8000a684: 00000013 nop
+8000a688: 00000013 nop
+8000a68c: 00000013 nop
+8000a690: 00000013 nop
+8000a694: 00000013 nop
+8000a698: 00000013 nop
+8000a69c: 00000013 nop
+8000a6a0: 00000013 nop
+8000a6a4: 00000013 nop
+8000a6a8: 00000013 nop
+8000a6ac: 00000013 nop
+8000a6b0: 00000013 nop
+8000a6b4: 00000013 nop
+8000a6b8: 00000013 nop
+8000a6bc: 00000013 nop
+8000a6c0: 00000013 nop
+8000a6c4: 00000013 nop
+8000a6c8: 00000013 nop
+8000a6cc: 00000013 nop
+8000a6d0: 00000013 nop
+8000a6d4: 00000013 nop
+8000a6d8: 00000013 nop
+8000a6dc: 00000013 nop
+8000a6e0: 00000013 nop
+8000a6e4: 00000013 nop
+8000a6e8: 00000013 nop
+8000a6ec: 00000013 nop
+8000a6f0: 00000013 nop
+8000a6f4: 00000013 nop
+8000a6f8: 00000013 nop
+8000a6fc: 00000013 nop
+8000a700: 00000013 nop
+8000a704: 00000013 nop
+8000a708: 00000013 nop
+8000a70c: 00000013 nop
+8000a710: 00000013 nop
+8000a714: 00000013 nop
+8000a718: 00000013 nop
+8000a71c: 00000013 nop
+8000a720: 00000013 nop
+8000a724: 00000013 nop
+8000a728: 00000013 nop
+8000a72c: 00000013 nop
+8000a730: 00000013 nop
+8000a734: 00000013 nop
+8000a738: 00000013 nop
+8000a73c: 00000013 nop
+8000a740: 00000013 nop
+8000a744: 00000013 nop
+8000a748: 00000013 nop
+8000a74c: 00000013 nop
+8000a750: 00000013 nop
+8000a754: 00000013 nop
+8000a758: 00000013 nop
+8000a75c: 00000013 nop
+8000a760: 00000013 nop
+8000a764: 00000013 nop
+8000a768: 00000013 nop
+8000a76c: 00000013 nop
+8000a770: 00000013 nop
+8000a774: 00000013 nop
+8000a778: 00000013 nop
+8000a77c: 00000013 nop
+8000a780: 00000013 nop
+8000a784: 00000013 nop
+8000a788: 00000013 nop
+8000a78c: 00000013 nop
+8000a790: 00000013 nop
+8000a794: 00000013 nop
+8000a798: 00000013 nop
+8000a79c: 00000013 nop
+8000a7a0: 00000013 nop
+8000a7a4: 00000013 nop
+8000a7a8: 00000013 nop
+8000a7ac: 00000013 nop
+8000a7b0: 00000013 nop
+8000a7b4: 00000013 nop
+8000a7b8: 00000013 nop
+8000a7bc: 00000013 nop
+8000a7c0: 00000013 nop
+8000a7c4: 00000013 nop
+8000a7c8: 00000013 nop
+8000a7cc: 00000013 nop
+8000a7d0: 00000013 nop
+8000a7d4: 00000013 nop
+8000a7d8: 00000013 nop
+8000a7dc: 00000013 nop
+8000a7e0: 00000013 nop
+8000a7e4: 00000013 nop
+8000a7e8: 00000013 nop
+8000a7ec: 00000013 nop
+8000a7f0: 00000013 nop
+8000a7f4: 00000013 nop
+8000a7f8: 00000013 nop
+8000a7fc: 00000013 nop
+8000a800: 00000013 nop
+8000a804: 00000013 nop
+8000a808: 00000013 nop
+8000a80c: 00000013 nop
+8000a810: 00000013 nop
+8000a814: 00000013 nop
+8000a818: 00000013 nop
+8000a81c: 00000013 nop
+8000a820: 00000013 nop
+8000a824: 00000013 nop
+8000a828: 00000013 nop
+8000a82c: 00000013 nop
+8000a830: 00000013 nop
+8000a834: 00000013 nop
+8000a838: 00000013 nop
+8000a83c: 00000013 nop
+8000a840: 00000013 nop
+8000a844: 00000013 nop
+8000a848: 00000013 nop
+8000a84c: 00000013 nop
+8000a850: 00000013 nop
+8000a854: 00000013 nop
+8000a858: 00000013 nop
+8000a85c: 00000013 nop
+8000a860: 00000013 nop
+8000a864: 00000013 nop
+8000a868: 00000013 nop
+8000a86c: 00000013 nop
+8000a870: 00000013 nop
+8000a874: 00000013 nop
+8000a878: 00000013 nop
+8000a87c: 00000013 nop
+8000a880: 00000013 nop
+8000a884: 00000013 nop
+8000a888: 00000013 nop
+8000a88c: 00000013 nop
+8000a890: 00000013 nop
+8000a894: 00000013 nop
+8000a898: 00000013 nop
+8000a89c: 00000013 nop
+8000a8a0: 00000013 nop
+8000a8a4: 00000013 nop
+8000a8a8: 00000013 nop
+8000a8ac: 00000013 nop
+8000a8b0: 00000013 nop
+8000a8b4: 00000013 nop
+8000a8b8: 00000013 nop
+8000a8bc: 00000013 nop
+8000a8c0: 00000013 nop
+8000a8c4: 00000013 nop
+8000a8c8: 00000013 nop
+8000a8cc: 00000013 nop
+8000a8d0: 00000013 nop
+8000a8d4: 00000013 nop
+8000a8d8: 00000013 nop
+8000a8dc: 00000013 nop
+8000a8e0: 00000013 nop
+8000a8e4: 00000013 nop
+8000a8e8: 00000013 nop
+8000a8ec: 00000013 nop
+8000a8f0: 00000013 nop
+8000a8f4: 00000013 nop
+8000a8f8: 00000013 nop
+8000a8fc: 00000013 nop
+8000a900: 00000013 nop
+8000a904: 00000013 nop
+8000a908: 00000013 nop
+8000a90c: 00000013 nop
+8000a910: 00000013 nop
+8000a914: 00000013 nop
+8000a918: 00000013 nop
+8000a91c: 00000013 nop
+8000a920: 00000013 nop
+8000a924: 00000013 nop
+8000a928: 00000013 nop
+8000a92c: 00000013 nop
+8000a930: 00000013 nop
+8000a934: 00000013 nop
+8000a938: 00000013 nop
+8000a93c: 00000013 nop
+8000a940: 00000013 nop
+8000a944: 00000013 nop
+8000a948: 00000013 nop
+8000a94c: 00000013 nop
+8000a950: 00000013 nop
+8000a954: 00000013 nop
+8000a958: 00000013 nop
+8000a95c: 00000013 nop
+8000a960: 00000013 nop
+8000a964: 00000013 nop
+8000a968: 00000013 nop
+8000a96c: 00000013 nop
+8000a970: 00000013 nop
+8000a974: 00000013 nop
+8000a978: 00000013 nop
+8000a97c: 00000013 nop
+8000a980: 00000013 nop
+8000a984: 00000013 nop
+8000a988: 00000013 nop
+8000a98c: 00000013 nop
+8000a990: 00000013 nop
+8000a994: 00000013 nop
+8000a998: 00000013 nop
+8000a99c: 00000013 nop
+8000a9a0: 00000013 nop
+8000a9a4: 00000013 nop
+8000a9a8: 00000013 nop
+8000a9ac: 00000013 nop
+8000a9b0: 00000013 nop
+8000a9b4: 00000013 nop
+8000a9b8: 00000013 nop
+8000a9bc: 00000013 nop
+8000a9c0: 00000013 nop
+8000a9c4: 00000013 nop
+8000a9c8: 00000013 nop
+8000a9cc: 00000013 nop
+8000a9d0: 00000013 nop
+8000a9d4: 00000013 nop
+8000a9d8: 00000013 nop
+8000a9dc: 00000013 nop
+8000a9e0: 00000013 nop
+8000a9e4: 00000013 nop
+8000a9e8: 00000013 nop
+8000a9ec: 00000013 nop
+8000a9f0: 00000013 nop
+8000a9f4: 00000013 nop
+8000a9f8: 00000013 nop
+8000a9fc: 00000013 nop
+8000aa00: 00000013 nop
+8000aa04: 00000013 nop
+8000aa08: 00000013 nop
+8000aa0c: 00000013 nop
+8000aa10: 00000013 nop
+8000aa14: 00000013 nop
+8000aa18: 00000013 nop
+8000aa1c: 00000013 nop
+8000aa20: 00000013 nop
+8000aa24: 00000013 nop
+8000aa28: 00000013 nop
+8000aa2c: 00000013 nop
+8000aa30: 00000013 nop
+8000aa34: 00000013 nop
+8000aa38: 00000013 nop
+8000aa3c: 00000013 nop
+8000aa40: 00000013 nop
+8000aa44: 00000013 nop
+8000aa48: 00000013 nop
+8000aa4c: 00000013 nop
+8000aa50: 00000013 nop
+8000aa54: 00000013 nop
+8000aa58: 00000013 nop
+8000aa5c: 00000013 nop
+8000aa60: 00000013 nop
+8000aa64: 00000013 nop
+8000aa68: 00000013 nop
+8000aa6c: 00000013 nop
+8000aa70: 00000013 nop
+8000aa74: 00000013 nop
+8000aa78: 00000013 nop
+8000aa7c: 00000013 nop
+8000aa80: 00000013 nop
+8000aa84: 00000013 nop
+8000aa88: 00000013 nop
+8000aa8c: 00000013 nop
+8000aa90: 00000013 nop
+8000aa94: 00000013 nop
+8000aa98: 00000013 nop
+8000aa9c: 00000013 nop
+8000aaa0: 00000013 nop
+8000aaa4: 00000013 nop
+8000aaa8: 00000013 nop
+8000aaac: 00000013 nop
+8000aab0: 00000013 nop
+8000aab4: 00000013 nop
+8000aab8: 00000013 nop
+8000aabc: 00000013 nop
+8000aac0: 00000013 nop
+8000aac4: 00000013 nop
+8000aac8: 00000013 nop
+8000aacc: 00000013 nop
+8000aad0: 00000013 nop
+8000aad4: 00000013 nop
+8000aad8: 00000013 nop
+8000aadc: 00000013 nop
+8000aae0: 00000013 nop
+8000aae4: 00000013 nop
+8000aae8: 00000013 nop
+8000aaec: 00000013 nop
+8000aaf0: 00000013 nop
+8000aaf4: 00000013 nop
+8000aaf8: 00000013 nop
+8000aafc: 00000013 nop
+8000ab00: 00000013 nop
+8000ab04: 00000013 nop
+8000ab08: 00000013 nop
+8000ab0c: 00000013 nop
+8000ab10: 00000013 nop
+8000ab14: 00000013 nop
+8000ab18: 00000013 nop
+8000ab1c: 00000013 nop
+8000ab20: 00000013 nop
+8000ab24: 00000013 nop
+8000ab28: 00000013 nop
+8000ab2c: 00000013 nop
+8000ab30: 00000013 nop
+8000ab34: 00000013 nop
+8000ab38: 00000013 nop
+8000ab3c: 00000013 nop
+8000ab40: 00000013 nop
+8000ab44: 00000013 nop
+8000ab48: 00000013 nop
+8000ab4c: 00000013 nop
+8000ab50: 00000013 nop
+8000ab54: 00000013 nop
+8000ab58: 00000013 nop
+8000ab5c: 00000013 nop
+8000ab60: 00000013 nop
+8000ab64: 00000013 nop
+8000ab68: 00000013 nop
+8000ab6c: 00000013 nop
+8000ab70: 00000013 nop
+8000ab74: 00000013 nop
+8000ab78: 00000013 nop
+8000ab7c: 00000013 nop
+8000ab80: 00000013 nop
+8000ab84: 00000013 nop
+8000ab88: 00000013 nop
+8000ab8c: 00000013 nop
+8000ab90: 00000013 nop
+8000ab94: 00000013 nop
+8000ab98: 00000013 nop
+8000ab9c: 00000013 nop
+8000aba0: 00000013 nop
+8000aba4: 00000013 nop
+8000aba8: 00000013 nop
+8000abac: 00000013 nop
+8000abb0: 00000013 nop
+8000abb4: 00000013 nop
+8000abb8: 00000013 nop
+8000abbc: 00000013 nop
+8000abc0: 00000013 nop
+8000abc4: 00000013 nop
+8000abc8: 00000013 nop
+8000abcc: 00000013 nop
+8000abd0: 00000013 nop
+8000abd4: 00000013 nop
+8000abd8: 00000013 nop
+8000abdc: 00000013 nop
+8000abe0: 00000013 nop
+8000abe4: 00000013 nop
+8000abe8: 00000013 nop
+8000abec: 00000013 nop
+8000abf0: 00000013 nop
+8000abf4: 00000013 nop
+8000abf8: 00000013 nop
+8000abfc: 00000013 nop
+8000ac00: 00000013 nop
+8000ac04: 00000013 nop
+8000ac08: 00000013 nop
+8000ac0c: 00000013 nop
+8000ac10: 00000013 nop
+8000ac14: 00000013 nop
+8000ac18: 00000013 nop
+8000ac1c: 00000013 nop
+8000ac20: 00000013 nop
+8000ac24: 00000013 nop
+8000ac28: 00000013 nop
+8000ac2c: 00000013 nop
+8000ac30: 00000013 nop
+8000ac34: 00000013 nop
+8000ac38: 00000013 nop
+8000ac3c: 00000013 nop
+8000ac40: 00000013 nop
+8000ac44: 00000013 nop
+8000ac48: 00000013 nop
+8000ac4c: 00000013 nop
+8000ac50: 00000013 nop
+8000ac54: 00000013 nop
+8000ac58: 00000013 nop
+8000ac5c: 00000013 nop
+8000ac60: 00000013 nop
+8000ac64: 00000013 nop
+8000ac68: 00000013 nop
+8000ac6c: 00000013 nop
+8000ac70: 00000013 nop
+8000ac74: 00000013 nop
+8000ac78: 00000013 nop
+8000ac7c: 00000013 nop
+8000ac80: 00000013 nop
+8000ac84: 00000013 nop
+8000ac88: 00000013 nop
+8000ac8c: 00000013 nop
+8000ac90: 00000013 nop
+8000ac94: 00000013 nop
+8000ac98: 00000013 nop
+8000ac9c: 00000013 nop
+8000aca0: 00000013 nop
+8000aca4: 00000013 nop
+8000aca8: 00000013 nop
+8000acac: 00000013 nop
+8000acb0: 00000013 nop
+8000acb4: 00000013 nop
+8000acb8: 00000013 nop
+8000acbc: 00000013 nop
+8000acc0: 00000013 nop
+8000acc4: 00000013 nop
+8000acc8: 00000013 nop
+8000accc: 00000013 nop
+8000acd0: 00000013 nop
+8000acd4: 00000013 nop
+8000acd8: 00000013 nop
+8000acdc: 00000013 nop
+8000ace0: 00000013 nop
+8000ace4: 00000013 nop
+8000ace8: 00000013 nop
+8000acec: 00000013 nop
+8000acf0: 00000013 nop
+8000acf4: 00000013 nop
+8000acf8: 00000013 nop
+8000acfc: 00000013 nop
+8000ad00: 00000013 nop
+8000ad04: 00000013 nop
+8000ad08: 00000013 nop
+8000ad0c: 00000013 nop
+8000ad10: 00000013 nop
+8000ad14: 00000013 nop
+8000ad18: 00000013 nop
+8000ad1c: 00000013 nop
+8000ad20: 00000013 nop
+8000ad24: 00000013 nop
+8000ad28: 00000013 nop
+8000ad2c: 00000013 nop
+8000ad30: 00000013 nop
+8000ad34: 00000013 nop
+8000ad38: 00000013 nop
+8000ad3c: 00000013 nop
+8000ad40: 00000013 nop
+8000ad44: 00000013 nop
+8000ad48: 00000013 nop
+8000ad4c: 00000013 nop
+8000ad50: 00000013 nop
+8000ad54: 00000013 nop
+8000ad58: 00000013 nop
+8000ad5c: 00000013 nop
+8000ad60: 00000013 nop
+8000ad64: 00000013 nop
+8000ad68: 00000013 nop
+8000ad6c: 00000013 nop
+8000ad70: 00000013 nop
+8000ad74: 00000013 nop
+8000ad78: 00000013 nop
+8000ad7c: 00000013 nop
+8000ad80: 00000013 nop
+8000ad84: 00000013 nop
+8000ad88: 00000013 nop
+8000ad8c: 00000013 nop
+8000ad90: 00000013 nop
+8000ad94: 00000013 nop
+8000ad98: 00000013 nop
+8000ad9c: 00000013 nop
+8000ada0: 00000013 nop
+8000ada4: 00000013 nop
+8000ada8: 00000013 nop
+8000adac: 00000013 nop
+8000adb0: 00000013 nop
+8000adb4: 00000013 nop
+8000adb8: 00000013 nop
+8000adbc: 00000013 nop
+8000adc0: 00000013 nop
+8000adc4: 00000013 nop
+8000adc8: 00000013 nop
+8000adcc: 00000013 nop
+8000add0: 00000013 nop
+8000add4: 00000013 nop
+8000add8: 00000013 nop
+8000addc: 00000013 nop
+8000ade0: 00000013 nop
+8000ade4: 00000013 nop
+8000ade8: 00000013 nop
+8000adec: 00000013 nop
+8000adf0: 00000013 nop
+8000adf4: 00000013 nop
+8000adf8: 00000013 nop
+8000adfc: 00000013 nop
+8000ae00: 00000013 nop
+8000ae04: 00000013 nop
+8000ae08: 00000013 nop
+8000ae0c: 00000013 nop
+8000ae10: 00000013 nop
+8000ae14: 00000013 nop
+8000ae18: 00000013 nop
+8000ae1c: 00000013 nop
+8000ae20: 00000013 nop
+8000ae24: 00000013 nop
+8000ae28: 00000013 nop
+8000ae2c: 00000013 nop
+8000ae30: 00000013 nop
+8000ae34: 00000013 nop
+8000ae38: 00000013 nop
+8000ae3c: 00000013 nop
+8000ae40: 00000013 nop
+8000ae44: 00000013 nop
+8000ae48: 00000013 nop
+8000ae4c: 00000013 nop
+8000ae50: 00000013 nop
+8000ae54: 00000013 nop
+8000ae58: 00000013 nop
+8000ae5c: 00000013 nop
+8000ae60: 00000013 nop
+8000ae64: 00000013 nop
+8000ae68: 00000013 nop
+8000ae6c: 00000013 nop
+8000ae70: 00000013 nop
+8000ae74: 00000013 nop
+8000ae78: 00000013 nop
+8000ae7c: 00000013 nop
+8000ae80: 00000013 nop
+8000ae84: 00000013 nop
+8000ae88: 00000013 nop
+8000ae8c: 00000013 nop
+8000ae90: 00000013 nop
+8000ae94: 00000013 nop
+8000ae98: 00000013 nop
+8000ae9c: 00000013 nop
+8000aea0: 00000013 nop
+8000aea4: 00000013 nop
+8000aea8: 00000013 nop
+8000aeac: 00000013 nop
+8000aeb0: 00000013 nop
+8000aeb4: 00000013 nop
+8000aeb8: 00000013 nop
+8000aebc: 00000013 nop
+8000aec0: 00000013 nop
+8000aec4: 00000013 nop
+8000aec8: 00000013 nop
+8000aecc: 00000013 nop
+8000aed0: 00000013 nop
+8000aed4: 00000013 nop
+8000aed8: 00000013 nop
+8000aedc: 00000013 nop
+8000aee0: 00000013 nop
+8000aee4: 00000013 nop
+8000aee8: 00000013 nop
+8000aeec: 00000013 nop
+8000aef0: 00000013 nop
+8000aef4: 00000013 nop
+8000aef8: 00000013 nop
+8000aefc: 00000013 nop
+8000af00: 00000013 nop
+8000af04: 00000013 nop
+8000af08: 00000013 nop
+8000af0c: 00000013 nop
+8000af10: 00000013 nop
+8000af14: 00000013 nop
+8000af18: 00000013 nop
+8000af1c: 00000013 nop
+8000af20: 00000013 nop
+8000af24: 00000013 nop
+8000af28: 00000013 nop
+8000af2c: 00000013 nop
+8000af30: 00000013 nop
+8000af34: 00000013 nop
+8000af38: 00000013 nop
+8000af3c: 00000013 nop
+8000af40: 00000013 nop
+8000af44: 00000013 nop
+8000af48: 00000013 nop
+8000af4c: 00000013 nop
+8000af50: 00000013 nop
+8000af54: 00000013 nop
+8000af58: 00000013 nop
+8000af5c: 00000013 nop
+8000af60: 00000013 nop
+8000af64: 00000013 nop
+8000af68: 00000013 nop
+8000af6c: 00000013 nop
+8000af70: 00000013 nop
+8000af74: 00000013 nop
+8000af78: 00000013 nop
+8000af7c: 00000013 nop
+8000af80: 00000013 nop
+8000af84: 00000013 nop
+8000af88: 00000013 nop
+8000af8c: 00000013 nop
+8000af90: 00000013 nop
+8000af94: 00000013 nop
+8000af98: 00000013 nop
+8000af9c: 00000013 nop
+8000afa0: 00000013 nop
+8000afa4: 00000013 nop
+8000afa8: 00000013 nop
+8000afac: 00000013 nop
+8000afb0: 00000013 nop
+8000afb4: 00000013 nop
+8000afb8: 00000013 nop
+8000afbc: 00000013 nop
+8000afc0: 00000013 nop
+8000afc4: 00000013 nop
+8000afc8: 00000013 nop
+8000afcc: 00000013 nop
+8000afd0: 00000013 nop
+8000afd4: 00000013 nop
+8000afd8: 00000013 nop
+8000afdc: 00000013 nop
+8000afe0: 00000013 nop
+8000afe4: 00000013 nop
+8000afe8: 00000013 nop
+8000afec: 00000013 nop
+8000aff0: 00000013 nop
+8000aff4: 00000013 nop
+8000aff8: 00000013 nop
+8000affc: 00000013 nop
+
+8000b000 <ROM_6>:
+8000b000: 6160 flw fs0,68(a0)
+8000b002: 6362 flw ft6,24(sp)
+8000b004: 6564 flw fs1,76(a0)
+8000b006: 6766 flw fa4,88(sp)
+8000b008: 6968 flw fa0,84(a0)
+8000b00a: 6b6a flw fs6,152(sp)
+8000b00c: 6d6c flw fa1,92(a0)
+8000b00e: 6f6e flw ft10,216(sp)
+8000b010: 00000013 nop
+8000b014: 00000013 nop
+8000b018: 00000013 nop
+8000b01c: 00000013 nop
+8000b020: 00000013 nop
+8000b024: 00000013 nop
+8000b028: 00000013 nop
+8000b02c: 00000013 nop
+8000b030: 00000013 nop
+8000b034: 00000013 nop
+8000b038: 00000013 nop
+8000b03c: 00000013 nop
+8000b040: 00000013 nop
+8000b044: 00000013 nop
+8000b048: 00000013 nop
+8000b04c: 00000013 nop
+8000b050: 00000013 nop
+8000b054: 00000013 nop
+8000b058: 00000013 nop
+8000b05c: 00000013 nop
+8000b060: 00000013 nop
+8000b064: 00000013 nop
+8000b068: 00000013 nop
+8000b06c: 00000013 nop
+8000b070: 00000013 nop
+8000b074: 00000013 nop
+8000b078: 00000013 nop
+8000b07c: 00000013 nop
+8000b080: 00000013 nop
+8000b084: 00000013 nop
+8000b088: 00000013 nop
+8000b08c: 00000013 nop
+8000b090: 00000013 nop
+8000b094: 00000013 nop
+8000b098: 00000013 nop
+8000b09c: 00000013 nop
+8000b0a0: 00000013 nop
+8000b0a4: 00000013 nop
+8000b0a8: 00000013 nop
+8000b0ac: 00000013 nop
+8000b0b0: 00000013 nop
+8000b0b4: 00000013 nop
+8000b0b8: 00000013 nop
+8000b0bc: 00000013 nop
+8000b0c0: 00000013 nop
+8000b0c4: 00000013 nop
+8000b0c8: 00000013 nop
+8000b0cc: 00000013 nop
+8000b0d0: 00000013 nop
+8000b0d4: 00000013 nop
+8000b0d8: 00000013 nop
+8000b0dc: 00000013 nop
+8000b0e0: 00000013 nop
+8000b0e4: 00000013 nop
+8000b0e8: 00000013 nop
+8000b0ec: 00000013 nop
+8000b0f0: 00000013 nop
+8000b0f4: 00000013 nop
+8000b0f8: 00000013 nop
+8000b0fc: 00000013 nop
+8000b100: 00000013 nop
+8000b104: 00000013 nop
+8000b108: 00000013 nop
+8000b10c: 00000013 nop
+8000b110: 00000013 nop
+8000b114: 00000013 nop
+8000b118: 00000013 nop
+8000b11c: 00000013 nop
+8000b120: 00000013 nop
+8000b124: 00000013 nop
+8000b128: 00000013 nop
+8000b12c: 00000013 nop
+8000b130: 00000013 nop
+8000b134: 00000013 nop
+8000b138: 00000013 nop
+8000b13c: 00000013 nop
+8000b140: 00000013 nop
+8000b144: 00000013 nop
+8000b148: 00000013 nop
+8000b14c: 00000013 nop
+8000b150: 00000013 nop
+8000b154: 00000013 nop
+8000b158: 00000013 nop
+8000b15c: 00000013 nop
+8000b160: 00000013 nop
+8000b164: 00000013 nop
+8000b168: 00000013 nop
+8000b16c: 00000013 nop
+8000b170: 00000013 nop
+8000b174: 00000013 nop
+8000b178: 00000013 nop
+8000b17c: 00000013 nop
+8000b180: 00000013 nop
+8000b184: 00000013 nop
+8000b188: 00000013 nop
+8000b18c: 00000013 nop
+8000b190: 00000013 nop
+8000b194: 00000013 nop
+8000b198: 00000013 nop
+8000b19c: 00000013 nop
+8000b1a0: 00000013 nop
+8000b1a4: 00000013 nop
+8000b1a8: 00000013 nop
+8000b1ac: 00000013 nop
+8000b1b0: 00000013 nop
+8000b1b4: 00000013 nop
+8000b1b8: 00000013 nop
+8000b1bc: 00000013 nop
+8000b1c0: 00000013 nop
+8000b1c4: 00000013 nop
+8000b1c8: 00000013 nop
+8000b1cc: 00000013 nop
+8000b1d0: 00000013 nop
+8000b1d4: 00000013 nop
+8000b1d8: 00000013 nop
+8000b1dc: 00000013 nop
+8000b1e0: 00000013 nop
+8000b1e4: 00000013 nop
+8000b1e8: 00000013 nop
+8000b1ec: 00000013 nop
+8000b1f0: 00000013 nop
+8000b1f4: 00000013 nop
+8000b1f8: 00000013 nop
+8000b1fc: 00000013 nop
+8000b200: 00000013 nop
+8000b204: 00000013 nop
+8000b208: 00000013 nop
+8000b20c: 00000013 nop
+8000b210: 00000013 nop
+8000b214: 00000013 nop
+8000b218: 00000013 nop
+8000b21c: 00000013 nop
+8000b220: 00000013 nop
+8000b224: 00000013 nop
+8000b228: 00000013 nop
+8000b22c: 00000013 nop
+8000b230: 00000013 nop
+8000b234: 00000013 nop
+8000b238: 00000013 nop
+8000b23c: 00000013 nop
+8000b240: 00000013 nop
+8000b244: 00000013 nop
+8000b248: 00000013 nop
+8000b24c: 00000013 nop
+8000b250: 00000013 nop
+8000b254: 00000013 nop
+8000b258: 00000013 nop
+8000b25c: 00000013 nop
+8000b260: 00000013 nop
+8000b264: 00000013 nop
+8000b268: 00000013 nop
+8000b26c: 00000013 nop
+8000b270: 00000013 nop
+8000b274: 00000013 nop
+8000b278: 00000013 nop
+8000b27c: 00000013 nop
+8000b280: 00000013 nop
+8000b284: 00000013 nop
+8000b288: 00000013 nop
+8000b28c: 00000013 nop
+8000b290: 00000013 nop
+8000b294: 00000013 nop
+8000b298: 00000013 nop
+8000b29c: 00000013 nop
+8000b2a0: 00000013 nop
+8000b2a4: 00000013 nop
+8000b2a8: 00000013 nop
+8000b2ac: 00000013 nop
+8000b2b0: 00000013 nop
+8000b2b4: 00000013 nop
+8000b2b8: 00000013 nop
+8000b2bc: 00000013 nop
+8000b2c0: 00000013 nop
+8000b2c4: 00000013 nop
+8000b2c8: 00000013 nop
+8000b2cc: 00000013 nop
+8000b2d0: 00000013 nop
+8000b2d4: 00000013 nop
+8000b2d8: 00000013 nop
+8000b2dc: 00000013 nop
+8000b2e0: 00000013 nop
+8000b2e4: 00000013 nop
+8000b2e8: 00000013 nop
+8000b2ec: 00000013 nop
+8000b2f0: 00000013 nop
+8000b2f4: 00000013 nop
+8000b2f8: 00000013 nop
+8000b2fc: 00000013 nop
+8000b300: 00000013 nop
+8000b304: 00000013 nop
+8000b308: 00000013 nop
+8000b30c: 00000013 nop
+8000b310: 00000013 nop
+8000b314: 00000013 nop
+8000b318: 00000013 nop
+8000b31c: 00000013 nop
+8000b320: 00000013 nop
+8000b324: 00000013 nop
+8000b328: 00000013 nop
+8000b32c: 00000013 nop
+8000b330: 00000013 nop
+8000b334: 00000013 nop
+8000b338: 00000013 nop
+8000b33c: 00000013 nop
+8000b340: 00000013 nop
+8000b344: 00000013 nop
+8000b348: 00000013 nop
+8000b34c: 00000013 nop
+8000b350: 00000013 nop
+8000b354: 00000013 nop
+8000b358: 00000013 nop
+8000b35c: 00000013 nop
+8000b360: 00000013 nop
+8000b364: 00000013 nop
+8000b368: 00000013 nop
+8000b36c: 00000013 nop
+8000b370: 00000013 nop
+8000b374: 00000013 nop
+8000b378: 00000013 nop
+8000b37c: 00000013 nop
+8000b380: 00000013 nop
+8000b384: 00000013 nop
+8000b388: 00000013 nop
+8000b38c: 00000013 nop
+8000b390: 00000013 nop
+8000b394: 00000013 nop
+8000b398: 00000013 nop
+8000b39c: 00000013 nop
+8000b3a0: 00000013 nop
+8000b3a4: 00000013 nop
+8000b3a8: 00000013 nop
+8000b3ac: 00000013 nop
+8000b3b0: 00000013 nop
+8000b3b4: 00000013 nop
+8000b3b8: 00000013 nop
+8000b3bc: 00000013 nop
+8000b3c0: 00000013 nop
+8000b3c4: 00000013 nop
+8000b3c8: 00000013 nop
+8000b3cc: 00000013 nop
+8000b3d0: 00000013 nop
+8000b3d4: 00000013 nop
+8000b3d8: 00000013 nop
+8000b3dc: 00000013 nop
+8000b3e0: 00000013 nop
+8000b3e4: 00000013 nop
+8000b3e8: 00000013 nop
+8000b3ec: 00000013 nop
+8000b3f0: 00000013 nop
+8000b3f4: 00000013 nop
+8000b3f8: 00000013 nop
+8000b3fc: 00000013 nop
+8000b400: 00000013 nop
+8000b404: 00000013 nop
+8000b408: 00000013 nop
+8000b40c: 00000013 nop
+8000b410: 00000013 nop
+8000b414: 00000013 nop
+8000b418: 00000013 nop
+8000b41c: 00000013 nop
+8000b420: 00000013 nop
+8000b424: 00000013 nop
+8000b428: 00000013 nop
+8000b42c: 00000013 nop
+8000b430: 00000013 nop
+8000b434: 00000013 nop
+8000b438: 00000013 nop
+8000b43c: 00000013 nop
+8000b440: 00000013 nop
+8000b444: 00000013 nop
+8000b448: 00000013 nop
+8000b44c: 00000013 nop
+8000b450: 00000013 nop
+8000b454: 00000013 nop
+8000b458: 00000013 nop
+8000b45c: 00000013 nop
+8000b460: 00000013 nop
+8000b464: 00000013 nop
+8000b468: 00000013 nop
+8000b46c: 00000013 nop
+8000b470: 00000013 nop
+8000b474: 00000013 nop
+8000b478: 00000013 nop
+8000b47c: 00000013 nop
+8000b480: 00000013 nop
+8000b484: 00000013 nop
+8000b488: 00000013 nop
+8000b48c: 00000013 nop
+8000b490: 00000013 nop
+8000b494: 00000013 nop
+8000b498: 00000013 nop
+8000b49c: 00000013 nop
+8000b4a0: 00000013 nop
+8000b4a4: 00000013 nop
+8000b4a8: 00000013 nop
+8000b4ac: 00000013 nop
+8000b4b0: 00000013 nop
+8000b4b4: 00000013 nop
+8000b4b8: 00000013 nop
+8000b4bc: 00000013 nop
+8000b4c0: 00000013 nop
+8000b4c4: 00000013 nop
+8000b4c8: 00000013 nop
+8000b4cc: 00000013 nop
+8000b4d0: 00000013 nop
+8000b4d4: 00000013 nop
+8000b4d8: 00000013 nop
+8000b4dc: 00000013 nop
+8000b4e0: 00000013 nop
+8000b4e4: 00000013 nop
+8000b4e8: 00000013 nop
+8000b4ec: 00000013 nop
+8000b4f0: 00000013 nop
+8000b4f4: 00000013 nop
+8000b4f8: 00000013 nop
+8000b4fc: 00000013 nop
+8000b500: 00000013 nop
+8000b504: 00000013 nop
+8000b508: 00000013 nop
+8000b50c: 00000013 nop
+8000b510: 00000013 nop
+8000b514: 00000013 nop
+8000b518: 00000013 nop
+8000b51c: 00000013 nop
+8000b520: 00000013 nop
+8000b524: 00000013 nop
+8000b528: 00000013 nop
+8000b52c: 00000013 nop
+8000b530: 00000013 nop
+8000b534: 00000013 nop
+8000b538: 00000013 nop
+8000b53c: 00000013 nop
+8000b540: 00000013 nop
+8000b544: 00000013 nop
+8000b548: 00000013 nop
+8000b54c: 00000013 nop
+8000b550: 00000013 nop
+8000b554: 00000013 nop
+8000b558: 00000013 nop
+8000b55c: 00000013 nop
+8000b560: 00000013 nop
+8000b564: 00000013 nop
+8000b568: 00000013 nop
+8000b56c: 00000013 nop
+8000b570: 00000013 nop
+8000b574: 00000013 nop
+8000b578: 00000013 nop
+8000b57c: 00000013 nop
+8000b580: 00000013 nop
+8000b584: 00000013 nop
+8000b588: 00000013 nop
+8000b58c: 00000013 nop
+8000b590: 00000013 nop
+8000b594: 00000013 nop
+8000b598: 00000013 nop
+8000b59c: 00000013 nop
+8000b5a0: 00000013 nop
+8000b5a4: 00000013 nop
+8000b5a8: 00000013 nop
+8000b5ac: 00000013 nop
+8000b5b0: 00000013 nop
+8000b5b4: 00000013 nop
+8000b5b8: 00000013 nop
+8000b5bc: 00000013 nop
+8000b5c0: 00000013 nop
+8000b5c4: 00000013 nop
+8000b5c8: 00000013 nop
+8000b5cc: 00000013 nop
+8000b5d0: 00000013 nop
+8000b5d4: 00000013 nop
+8000b5d8: 00000013 nop
+8000b5dc: 00000013 nop
+8000b5e0: 00000013 nop
+8000b5e4: 00000013 nop
+8000b5e8: 00000013 nop
+8000b5ec: 00000013 nop
+8000b5f0: 00000013 nop
+8000b5f4: 00000013 nop
+8000b5f8: 00000013 nop
+8000b5fc: 00000013 nop
+8000b600: 00000013 nop
+8000b604: 00000013 nop
+8000b608: 00000013 nop
+8000b60c: 00000013 nop
+8000b610: 00000013 nop
+8000b614: 00000013 nop
+8000b618: 00000013 nop
+8000b61c: 00000013 nop
+8000b620: 00000013 nop
+8000b624: 00000013 nop
+8000b628: 00000013 nop
+8000b62c: 00000013 nop
+8000b630: 00000013 nop
+8000b634: 00000013 nop
+8000b638: 00000013 nop
+8000b63c: 00000013 nop
+8000b640: 00000013 nop
+8000b644: 00000013 nop
+8000b648: 00000013 nop
+8000b64c: 00000013 nop
+8000b650: 00000013 nop
+8000b654: 00000013 nop
+8000b658: 00000013 nop
+8000b65c: 00000013 nop
+8000b660: 00000013 nop
+8000b664: 00000013 nop
+8000b668: 00000013 nop
+8000b66c: 00000013 nop
+8000b670: 00000013 nop
+8000b674: 00000013 nop
+8000b678: 00000013 nop
+8000b67c: 00000013 nop
+8000b680: 00000013 nop
+8000b684: 00000013 nop
+8000b688: 00000013 nop
+8000b68c: 00000013 nop
+8000b690: 00000013 nop
+8000b694: 00000013 nop
+8000b698: 00000013 nop
+8000b69c: 00000013 nop
+8000b6a0: 00000013 nop
+8000b6a4: 00000013 nop
+8000b6a8: 00000013 nop
+8000b6ac: 00000013 nop
+8000b6b0: 00000013 nop
+8000b6b4: 00000013 nop
+8000b6b8: 00000013 nop
+8000b6bc: 00000013 nop
+8000b6c0: 00000013 nop
+8000b6c4: 00000013 nop
+8000b6c8: 00000013 nop
+8000b6cc: 00000013 nop
+8000b6d0: 00000013 nop
+8000b6d4: 00000013 nop
+8000b6d8: 00000013 nop
+8000b6dc: 00000013 nop
+8000b6e0: 00000013 nop
+8000b6e4: 00000013 nop
+8000b6e8: 00000013 nop
+8000b6ec: 00000013 nop
+8000b6f0: 00000013 nop
+8000b6f4: 00000013 nop
+8000b6f8: 00000013 nop
+8000b6fc: 00000013 nop
+8000b700: 00000013 nop
+8000b704: 00000013 nop
+8000b708: 00000013 nop
+8000b70c: 00000013 nop
+8000b710: 00000013 nop
+8000b714: 00000013 nop
+8000b718: 00000013 nop
+8000b71c: 00000013 nop
+8000b720: 00000013 nop
+8000b724: 00000013 nop
+8000b728: 00000013 nop
+8000b72c: 00000013 nop
+8000b730: 00000013 nop
+8000b734: 00000013 nop
+8000b738: 00000013 nop
+8000b73c: 00000013 nop
+8000b740: 00000013 nop
+8000b744: 00000013 nop
+8000b748: 00000013 nop
+8000b74c: 00000013 nop
+8000b750: 00000013 nop
+8000b754: 00000013 nop
+8000b758: 00000013 nop
+8000b75c: 00000013 nop
+8000b760: 00000013 nop
+8000b764: 00000013 nop
+8000b768: 00000013 nop
+8000b76c: 00000013 nop
+8000b770: 00000013 nop
+8000b774: 00000013 nop
+8000b778: 00000013 nop
+8000b77c: 00000013 nop
+8000b780: 00000013 nop
+8000b784: 00000013 nop
+8000b788: 00000013 nop
+8000b78c: 00000013 nop
+8000b790: 00000013 nop
+8000b794: 00000013 nop
+8000b798: 00000013 nop
+8000b79c: 00000013 nop
+8000b7a0: 00000013 nop
+8000b7a4: 00000013 nop
+8000b7a8: 00000013 nop
+8000b7ac: 00000013 nop
+8000b7b0: 00000013 nop
+8000b7b4: 00000013 nop
+8000b7b8: 00000013 nop
+8000b7bc: 00000013 nop
+8000b7c0: 00000013 nop
+8000b7c4: 00000013 nop
+8000b7c8: 00000013 nop
+8000b7cc: 00000013 nop
+8000b7d0: 00000013 nop
+8000b7d4: 00000013 nop
+8000b7d8: 00000013 nop
+8000b7dc: 00000013 nop
+8000b7e0: 00000013 nop
+8000b7e4: 00000013 nop
+8000b7e8: 00000013 nop
+8000b7ec: 00000013 nop
+8000b7f0: 00000013 nop
+8000b7f4: 00000013 nop
+8000b7f8: 00000013 nop
+8000b7fc: 00000013 nop
+8000b800: 00000013 nop
+8000b804: 00000013 nop
+8000b808: 00000013 nop
+8000b80c: 00000013 nop
+8000b810: 00000013 nop
+8000b814: 00000013 nop
+8000b818: 00000013 nop
+8000b81c: 00000013 nop
+8000b820: 00000013 nop
+8000b824: 00000013 nop
+8000b828: 00000013 nop
+8000b82c: 00000013 nop
+8000b830: 00000013 nop
+8000b834: 00000013 nop
+8000b838: 00000013 nop
+8000b83c: 00000013 nop
+8000b840: 00000013 nop
+8000b844: 00000013 nop
+8000b848: 00000013 nop
+8000b84c: 00000013 nop
+8000b850: 00000013 nop
+8000b854: 00000013 nop
+8000b858: 00000013 nop
+8000b85c: 00000013 nop
+8000b860: 00000013 nop
+8000b864: 00000013 nop
+8000b868: 00000013 nop
+8000b86c: 00000013 nop
+8000b870: 00000013 nop
+8000b874: 00000013 nop
+8000b878: 00000013 nop
+8000b87c: 00000013 nop
+8000b880: 00000013 nop
+8000b884: 00000013 nop
+8000b888: 00000013 nop
+8000b88c: 00000013 nop
+8000b890: 00000013 nop
+8000b894: 00000013 nop
+8000b898: 00000013 nop
+8000b89c: 00000013 nop
+8000b8a0: 00000013 nop
+8000b8a4: 00000013 nop
+8000b8a8: 00000013 nop
+8000b8ac: 00000013 nop
+8000b8b0: 00000013 nop
+8000b8b4: 00000013 nop
+8000b8b8: 00000013 nop
+8000b8bc: 00000013 nop
+8000b8c0: 00000013 nop
+8000b8c4: 00000013 nop
+8000b8c8: 00000013 nop
+8000b8cc: 00000013 nop
+8000b8d0: 00000013 nop
+8000b8d4: 00000013 nop
+8000b8d8: 00000013 nop
+8000b8dc: 00000013 nop
+8000b8e0: 00000013 nop
+8000b8e4: 00000013 nop
+8000b8e8: 00000013 nop
+8000b8ec: 00000013 nop
+8000b8f0: 00000013 nop
+8000b8f4: 00000013 nop
+8000b8f8: 00000013 nop
+8000b8fc: 00000013 nop
+8000b900: 00000013 nop
+8000b904: 00000013 nop
+8000b908: 00000013 nop
+8000b90c: 00000013 nop
+8000b910: 00000013 nop
+8000b914: 00000013 nop
+8000b918: 00000013 nop
+8000b91c: 00000013 nop
+8000b920: 00000013 nop
+8000b924: 00000013 nop
+8000b928: 00000013 nop
+8000b92c: 00000013 nop
+8000b930: 00000013 nop
+8000b934: 00000013 nop
+8000b938: 00000013 nop
+8000b93c: 00000013 nop
+8000b940: 00000013 nop
+8000b944: 00000013 nop
+8000b948: 00000013 nop
+8000b94c: 00000013 nop
+8000b950: 00000013 nop
+8000b954: 00000013 nop
+8000b958: 00000013 nop
+8000b95c: 00000013 nop
+8000b960: 00000013 nop
+8000b964: 00000013 nop
+8000b968: 00000013 nop
+8000b96c: 00000013 nop
+8000b970: 00000013 nop
+8000b974: 00000013 nop
+8000b978: 00000013 nop
+8000b97c: 00000013 nop
+8000b980: 00000013 nop
+8000b984: 00000013 nop
+8000b988: 00000013 nop
+8000b98c: 00000013 nop
+8000b990: 00000013 nop
+8000b994: 00000013 nop
+8000b998: 00000013 nop
+8000b99c: 00000013 nop
+8000b9a0: 00000013 nop
+8000b9a4: 00000013 nop
+8000b9a8: 00000013 nop
+8000b9ac: 00000013 nop
+8000b9b0: 00000013 nop
+8000b9b4: 00000013 nop
+8000b9b8: 00000013 nop
+8000b9bc: 00000013 nop
+8000b9c0: 00000013 nop
+8000b9c4: 00000013 nop
+8000b9c8: 00000013 nop
+8000b9cc: 00000013 nop
+8000b9d0: 00000013 nop
+8000b9d4: 00000013 nop
+8000b9d8: 00000013 nop
+8000b9dc: 00000013 nop
+8000b9e0: 00000013 nop
+8000b9e4: 00000013 nop
+8000b9e8: 00000013 nop
+8000b9ec: 00000013 nop
+8000b9f0: 00000013 nop
+8000b9f4: 00000013 nop
+8000b9f8: 00000013 nop
+8000b9fc: 00000013 nop
+8000ba00: 00000013 nop
+8000ba04: 00000013 nop
+8000ba08: 00000013 nop
+8000ba0c: 00000013 nop
+8000ba10: 00000013 nop
+8000ba14: 00000013 nop
+8000ba18: 00000013 nop
+8000ba1c: 00000013 nop
+8000ba20: 00000013 nop
+8000ba24: 00000013 nop
+8000ba28: 00000013 nop
+8000ba2c: 00000013 nop
+8000ba30: 00000013 nop
+8000ba34: 00000013 nop
+8000ba38: 00000013 nop
+8000ba3c: 00000013 nop
+8000ba40: 00000013 nop
+8000ba44: 00000013 nop
+8000ba48: 00000013 nop
+8000ba4c: 00000013 nop
+8000ba50: 00000013 nop
+8000ba54: 00000013 nop
+8000ba58: 00000013 nop
+8000ba5c: 00000013 nop
+8000ba60: 00000013 nop
+8000ba64: 00000013 nop
+8000ba68: 00000013 nop
+8000ba6c: 00000013 nop
+8000ba70: 00000013 nop
+8000ba74: 00000013 nop
+8000ba78: 00000013 nop
+8000ba7c: 00000013 nop
+8000ba80: 00000013 nop
+8000ba84: 00000013 nop
+8000ba88: 00000013 nop
+8000ba8c: 00000013 nop
+8000ba90: 00000013 nop
+8000ba94: 00000013 nop
+8000ba98: 00000013 nop
+8000ba9c: 00000013 nop
+8000baa0: 00000013 nop
+8000baa4: 00000013 nop
+8000baa8: 00000013 nop
+8000baac: 00000013 nop
+8000bab0: 00000013 nop
+8000bab4: 00000013 nop
+8000bab8: 00000013 nop
+8000babc: 00000013 nop
+8000bac0: 00000013 nop
+8000bac4: 00000013 nop
+8000bac8: 00000013 nop
+8000bacc: 00000013 nop
+8000bad0: 00000013 nop
+8000bad4: 00000013 nop
+8000bad8: 00000013 nop
+8000badc: 00000013 nop
+8000bae0: 00000013 nop
+8000bae4: 00000013 nop
+8000bae8: 00000013 nop
+8000baec: 00000013 nop
+8000baf0: 00000013 nop
+8000baf4: 00000013 nop
+8000baf8: 00000013 nop
+8000bafc: 00000013 nop
+8000bb00: 00000013 nop
+8000bb04: 00000013 nop
+8000bb08: 00000013 nop
+8000bb0c: 00000013 nop
+8000bb10: 00000013 nop
+8000bb14: 00000013 nop
+8000bb18: 00000013 nop
+8000bb1c: 00000013 nop
+8000bb20: 00000013 nop
+8000bb24: 00000013 nop
+8000bb28: 00000013 nop
+8000bb2c: 00000013 nop
+8000bb30: 00000013 nop
+8000bb34: 00000013 nop
+8000bb38: 00000013 nop
+8000bb3c: 00000013 nop
+8000bb40: 00000013 nop
+8000bb44: 00000013 nop
+8000bb48: 00000013 nop
+8000bb4c: 00000013 nop
+8000bb50: 00000013 nop
+8000bb54: 00000013 nop
+8000bb58: 00000013 nop
+8000bb5c: 00000013 nop
+8000bb60: 00000013 nop
+8000bb64: 00000013 nop
+8000bb68: 00000013 nop
+8000bb6c: 00000013 nop
+8000bb70: 00000013 nop
+8000bb74: 00000013 nop
+8000bb78: 00000013 nop
+8000bb7c: 00000013 nop
+8000bb80: 00000013 nop
+8000bb84: 00000013 nop
+8000bb88: 00000013 nop
+8000bb8c: 00000013 nop
+8000bb90: 00000013 nop
+8000bb94: 00000013 nop
+8000bb98: 00000013 nop
+8000bb9c: 00000013 nop
+8000bba0: 00000013 nop
+8000bba4: 00000013 nop
+8000bba8: 00000013 nop
+8000bbac: 00000013 nop
+8000bbb0: 00000013 nop
+8000bbb4: 00000013 nop
+8000bbb8: 00000013 nop
+8000bbbc: 00000013 nop
+8000bbc0: 00000013 nop
+8000bbc4: 00000013 nop
+8000bbc8: 00000013 nop
+8000bbcc: 00000013 nop
+8000bbd0: 00000013 nop
+8000bbd4: 00000013 nop
+8000bbd8: 00000013 nop
+8000bbdc: 00000013 nop
+8000bbe0: 00000013 nop
+8000bbe4: 00000013 nop
+8000bbe8: 00000013 nop
+8000bbec: 00000013 nop
+8000bbf0: 00000013 nop
+8000bbf4: 00000013 nop
+8000bbf8: 00000013 nop
+8000bbfc: 00000013 nop
+8000bc00: 00000013 nop
+8000bc04: 00000013 nop
+8000bc08: 00000013 nop
+8000bc0c: 00000013 nop
+8000bc10: 00000013 nop
+8000bc14: 00000013 nop
+8000bc18: 00000013 nop
+8000bc1c: 00000013 nop
+8000bc20: 00000013 nop
+8000bc24: 00000013 nop
+8000bc28: 00000013 nop
+8000bc2c: 00000013 nop
+8000bc30: 00000013 nop
+8000bc34: 00000013 nop
+8000bc38: 00000013 nop
+8000bc3c: 00000013 nop
+8000bc40: 00000013 nop
+8000bc44: 00000013 nop
+8000bc48: 00000013 nop
+8000bc4c: 00000013 nop
+8000bc50: 00000013 nop
+8000bc54: 00000013 nop
+8000bc58: 00000013 nop
+8000bc5c: 00000013 nop
+8000bc60: 00000013 nop
+8000bc64: 00000013 nop
+8000bc68: 00000013 nop
+8000bc6c: 00000013 nop
+8000bc70: 00000013 nop
+8000bc74: 00000013 nop
+8000bc78: 00000013 nop
+8000bc7c: 00000013 nop
+8000bc80: 00000013 nop
+8000bc84: 00000013 nop
+8000bc88: 00000013 nop
+8000bc8c: 00000013 nop
+8000bc90: 00000013 nop
+8000bc94: 00000013 nop
+8000bc98: 00000013 nop
+8000bc9c: 00000013 nop
+8000bca0: 00000013 nop
+8000bca4: 00000013 nop
+8000bca8: 00000013 nop
+8000bcac: 00000013 nop
+8000bcb0: 00000013 nop
+8000bcb4: 00000013 nop
+8000bcb8: 00000013 nop
+8000bcbc: 00000013 nop
+8000bcc0: 00000013 nop
+8000bcc4: 00000013 nop
+8000bcc8: 00000013 nop
+8000bccc: 00000013 nop
+8000bcd0: 00000013 nop
+8000bcd4: 00000013 nop
+8000bcd8: 00000013 nop
+8000bcdc: 00000013 nop
+8000bce0: 00000013 nop
+8000bce4: 00000013 nop
+8000bce8: 00000013 nop
+8000bcec: 00000013 nop
+8000bcf0: 00000013 nop
+8000bcf4: 00000013 nop
+8000bcf8: 00000013 nop
+8000bcfc: 00000013 nop
+8000bd00: 00000013 nop
+8000bd04: 00000013 nop
+8000bd08: 00000013 nop
+8000bd0c: 00000013 nop
+8000bd10: 00000013 nop
+8000bd14: 00000013 nop
+8000bd18: 00000013 nop
+8000bd1c: 00000013 nop
+8000bd20: 00000013 nop
+8000bd24: 00000013 nop
+8000bd28: 00000013 nop
+8000bd2c: 00000013 nop
+8000bd30: 00000013 nop
+8000bd34: 00000013 nop
+8000bd38: 00000013 nop
+8000bd3c: 00000013 nop
+8000bd40: 00000013 nop
+8000bd44: 00000013 nop
+8000bd48: 00000013 nop
+8000bd4c: 00000013 nop
+8000bd50: 00000013 nop
+8000bd54: 00000013 nop
+8000bd58: 00000013 nop
+8000bd5c: 00000013 nop
+8000bd60: 00000013 nop
+8000bd64: 00000013 nop
+8000bd68: 00000013 nop
+8000bd6c: 00000013 nop
+8000bd70: 00000013 nop
+8000bd74: 00000013 nop
+8000bd78: 00000013 nop
+8000bd7c: 00000013 nop
+8000bd80: 00000013 nop
+8000bd84: 00000013 nop
+8000bd88: 00000013 nop
+8000bd8c: 00000013 nop
+8000bd90: 00000013 nop
+8000bd94: 00000013 nop
+8000bd98: 00000013 nop
+8000bd9c: 00000013 nop
+8000bda0: 00000013 nop
+8000bda4: 00000013 nop
+8000bda8: 00000013 nop
+8000bdac: 00000013 nop
+8000bdb0: 00000013 nop
+8000bdb4: 00000013 nop
+8000bdb8: 00000013 nop
+8000bdbc: 00000013 nop
+8000bdc0: 00000013 nop
+8000bdc4: 00000013 nop
+8000bdc8: 00000013 nop
+8000bdcc: 00000013 nop
+8000bdd0: 00000013 nop
+8000bdd4: 00000013 nop
+8000bdd8: 00000013 nop
+8000bddc: 00000013 nop
+8000bde0: 00000013 nop
+8000bde4: 00000013 nop
+8000bde8: 00000013 nop
+8000bdec: 00000013 nop
+8000bdf0: 00000013 nop
+8000bdf4: 00000013 nop
+8000bdf8: 00000013 nop
+8000bdfc: 00000013 nop
+8000be00: 00000013 nop
+8000be04: 00000013 nop
+8000be08: 00000013 nop
+8000be0c: 00000013 nop
+8000be10: 00000013 nop
+8000be14: 00000013 nop
+8000be18: 00000013 nop
+8000be1c: 00000013 nop
+8000be20: 00000013 nop
+8000be24: 00000013 nop
+8000be28: 00000013 nop
+8000be2c: 00000013 nop
+8000be30: 00000013 nop
+8000be34: 00000013 nop
+8000be38: 00000013 nop
+8000be3c: 00000013 nop
+8000be40: 00000013 nop
+8000be44: 00000013 nop
+8000be48: 00000013 nop
+8000be4c: 00000013 nop
+8000be50: 00000013 nop
+8000be54: 00000013 nop
+8000be58: 00000013 nop
+8000be5c: 00000013 nop
+8000be60: 00000013 nop
+8000be64: 00000013 nop
+8000be68: 00000013 nop
+8000be6c: 00000013 nop
+8000be70: 00000013 nop
+8000be74: 00000013 nop
+8000be78: 00000013 nop
+8000be7c: 00000013 nop
+8000be80: 00000013 nop
+8000be84: 00000013 nop
+8000be88: 00000013 nop
+8000be8c: 00000013 nop
+8000be90: 00000013 nop
+8000be94: 00000013 nop
+8000be98: 00000013 nop
+8000be9c: 00000013 nop
+8000bea0: 00000013 nop
+8000bea4: 00000013 nop
+8000bea8: 00000013 nop
+8000beac: 00000013 nop
+8000beb0: 00000013 nop
+8000beb4: 00000013 nop
+8000beb8: 00000013 nop
+8000bebc: 00000013 nop
+8000bec0: 00000013 nop
+8000bec4: 00000013 nop
+8000bec8: 00000013 nop
+8000becc: 00000013 nop
+8000bed0: 00000013 nop
+8000bed4: 00000013 nop
+8000bed8: 00000013 nop
+8000bedc: 00000013 nop
+8000bee0: 00000013 nop
+8000bee4: 00000013 nop
+8000bee8: 00000013 nop
+8000beec: 00000013 nop
+8000bef0: 00000013 nop
+8000bef4: 00000013 nop
+8000bef8: 00000013 nop
+8000befc: 00000013 nop
+8000bf00: 00000013 nop
+8000bf04: 00000013 nop
+8000bf08: 00000013 nop
+8000bf0c: 00000013 nop
+8000bf10: 00000013 nop
+8000bf14: 00000013 nop
+8000bf18: 00000013 nop
+8000bf1c: 00000013 nop
+8000bf20: 00000013 nop
+8000bf24: 00000013 nop
+8000bf28: 00000013 nop
+8000bf2c: 00000013 nop
+8000bf30: 00000013 nop
+8000bf34: 00000013 nop
+8000bf38: 00000013 nop
+8000bf3c: 00000013 nop
+8000bf40: 00000013 nop
+8000bf44: 00000013 nop
+8000bf48: 00000013 nop
+8000bf4c: 00000013 nop
+8000bf50: 00000013 nop
+8000bf54: 00000013 nop
+8000bf58: 00000013 nop
+8000bf5c: 00000013 nop
+8000bf60: 00000013 nop
+8000bf64: 00000013 nop
+8000bf68: 00000013 nop
+8000bf6c: 00000013 nop
+8000bf70: 00000013 nop
+8000bf74: 00000013 nop
+8000bf78: 00000013 nop
+8000bf7c: 00000013 nop
+8000bf80: 00000013 nop
+8000bf84: 00000013 nop
+8000bf88: 00000013 nop
+8000bf8c: 00000013 nop
+8000bf90: 00000013 nop
+8000bf94: 00000013 nop
+8000bf98: 00000013 nop
+8000bf9c: 00000013 nop
+8000bfa0: 00000013 nop
+8000bfa4: 00000013 nop
+8000bfa8: 00000013 nop
+8000bfac: 00000013 nop
+8000bfb0: 00000013 nop
+8000bfb4: 00000013 nop
+8000bfb8: 00000013 nop
+8000bfbc: 00000013 nop
+8000bfc0: 00000013 nop
+8000bfc4: 00000013 nop
+8000bfc8: 00000013 nop
+8000bfcc: 00000013 nop
+8000bfd0: 00000013 nop
+8000bfd4: 00000013 nop
+8000bfd8: 00000013 nop
+8000bfdc: 00000013 nop
+8000bfe0: 00000013 nop
+8000bfe4: 00000013 nop
+8000bfe8: 00000013 nop
+8000bfec: 00000013 nop
+8000bff0: 00000013 nop
+8000bff4: 00000013 nop
+8000bff8: 00000013 nop
+8000bffc: 00000013 nop
+
+8000c000 <ROM_7>:
+8000c000: 7170 flw fa2,100(a0)
+8000c002: 7372 flw ft6,60(sp)
+8000c004: 7574 flw fa3,108(a0)
+8000c006: 7776 flw fa4,124(sp)
+8000c008: 7978 flw fa4,116(a0)
+8000c00a: 7b7a flw fs6,188(sp)
+8000c00c: 7d7c flw fa5,124(a0)
+8000c00e: 7f7e flw ft10,252(sp)
+ ...
diff --git a/VexRiscv/src/test/cpp/raw/mmu/build/mmu.hex b/VexRiscv/src/test/cpp/raw/mmu/build/mmu.hex
new file mode 100644
index 0000000..6760347
--- /dev/null
+++ b/VexRiscv/src/test/cpp/raw/mmu/build/mmu.hex
@@ -0,0 +1,3233 @@
+:0200000480007A
+:10000000930E0000970000009380005973905030C9
+:10001000130E1000977000009380C0FE3721262732
+:100020001301415283A0400063922054130E20001C
+:10003000970000009380000273901034B7200000F6
+:100040009380008073900030730020306F00005266
+:10005000130E3000B71000009380008073900030C2
+:10006000970000009380400173901034730020309B
+:100070006F00C04F130E400097800000938080F8FF
+:10008000373136371301415383A040006390204E2F
+:10009000130E5000971000009380C07617210000C7
+:1000A000130141F6135121001361110123A0200017
+:1000B00097200000938000F5370100801351210044
+:1000C0001361F10023A02000130E500097200000C0
+:1000D00093804083173100001301C1F213512100B6
+:1000E0001361110123A0200097300000938000F4D9
+:1000F00017910000130101F1135121001361F10167
+:1001000023A02000973000009380C0F317A10000C7
+:10011000130141EF135121001361310123A020008D
+:1001200097300000938040F217A10000130181ED89
+:10013000135121001361710123A0200097300000AA
+:100140009380C0F017A100001301C1EB13512100EF
+:100150001361910123A0200097300000938040EFAD
+:1001600017A10000130101EA135121001361B1012D
+:1001700023A02000973000009380C0ED17A100005D
+:10018000130141E8135121001361F10023A0200065
+:10019000130E5000972000009380C08617010000C6
+:1001A000130141E6135121001361F10123A0200046
+:1001B000130E5000972000009380C09423A00000ED
+:1001C000B700040073A0001097100000938080E334
+:1001D00093D0C00037010080B3E020007390001876
+:1001E000130E6000B7A000909380800037514A4BF7
+:1001F0001301819483A00000639A2036130E7000CF
+:10020000B7A00090938000363701EEAA13011100C9
+:1002100023A0200083A00000639A2034130E8000E6
+:1002200097C00020938040DE3771767713014157E5
+:1002300083A00000639C2032130E9000B7A000A0A2
+:10024000938000363701EEAA1301210023A020007D
+:1002500083A00000639C2030130EA0007350001890
+:1002600097900000938000103701EEAA130111004F
+:1002700083A00000639C202E130EB00097A0000006
+:100280009380400E3701EEAA1301210083A00000E5
+:10029000639E202C971000009380C0D693D0C0009E
+:1002A00037010080B3E0200073900018130EC000E7
+:1002B000930E1000170F0000130F0F0173000000C2
+:1002C0006F00C02A130ED000170F0000130F4F014C
+:1002D000B70000B083A080006F004029130EE0003B
+:1002E000170F0000130F4F01B70000B023A4100038
+:1002F0006F00C027130EF000170F0000130F4F01FF
+:10030000B70000B0678000006F004026130E0001A8
+:10031000930E0000B70001909380800037615A5B14
+:100320001301819583A0000063922024B7100190EF
+:100330009380800037615A5B1301819583A0000090
+:1003400063962022B73001909380800037615A5B1A
+:100350001301819583A00000639A2020130E1001E1
+:10036000B7100190938000363701EEAA13013100D7
+:1003700023A0200083A00000639A201E130E2001FA
+:100380009700000093808001372101901301010143
+:10039000670001006F00801D130E3001930E1000E6
+:1003A000170F0000130F8F01B720019093800001F9
+:1003B00083A000006F00801B170F0000130F8F0138
+:1003C000B73001909380000123A010006F00001A45
+:1003D000170F0000130F8F01B710019093800001D9
+:1003E000678000006F008018130E5001930E00000C
+:1003F000B700080073A00010B72001909380800020
+:1004000037615A5B1301819583A000006390201629
+:10041000B700080073B00010930E0000130E4001E7
+:10042000B7400190938000383701EEAA13015100C4
+:1004300023A0200083A00000639A2012B7000400CC
+:1004400073B00010930E1000170F0000130F8F01F0
+:10045000B71001909380806423A010006F000011FA
+:10046000130E2003930E0000B700040073A00010C9
+:10047000732500187310001897200000938080B82F
+:1004800037010080135121001361F10123A02000E6
+:10049000731005189300001073B00010970000004F
+:1004A0009380800173901014730000127300201069
+:1004B0006F00C00B130E3003B710019093808000C3
+:1004C00037615A5B1301819583A000006390200A75
+:1004D000B7A000A0938040323701EEAA130181003B
+:1004E00023A0200083A0000063922008130E400385
+:1004F00097000000938080013721019013010101D2
+:10050000670001006F008006130E5003930E100069
+:10051000170F0000130F8F01B7400190938000392F
+:10052000678000006F008004130E6003930E1000BC
+:10053000170F0000130F8F01B740019093804039CF
+:1005400083A000006F008002130E7003930E100052
+:10055000170F0000130F8F01B7400190938080396F
+:1005600023A010006F0080006F008001930E000038
+:1005700073000000370110F0130141F22320C10184
+:10058000930E200073000000370110F0130101F2F8
+:1005900023200100E3800EFEF3202034F3201034EA
+:1005A000F3200030F320303493002000E38E1EFC53
+:1005B00073101F347300203013000000130000007C
+:1005C00013000000130000001300000013000000DF
+:1005D00013000000130000001300000013000000CF
+:1005E00013000000130000001300000013000000BF
+:1005F00013000000130000001300000013000000AF
+:10060000130000001300000013000000130000009E
+:10061000130000001300000013000000130000008E
+:10062000130000001300000013000000130000007E
+:10063000130000001300000013000000130000006E
+:10064000130000001300000013000000130000005E
+:10065000130000001300000013000000130000004E
+:10066000130000001300000013000000130000003E
+:10067000130000001300000013000000130000002E
+:10068000130000001300000013000000130000001E
+:10069000130000001300000013000000130000000E
+:1006A00013000000130000001300000013000000FE
+:1006B00013000000130000001300000013000000EE
+:1006C00013000000130000001300000013000000DE
+:1006D00013000000130000001300000013000000CE
+:1006E00013000000130000001300000013000000BE
+:1006F00013000000130000001300000013000000AE
+:10070000130000001300000013000000130000009D
+:10071000130000001300000013000000130000008D
+:10072000130000001300000013000000130000007D
+:10073000130000001300000013000000130000006D
+:10074000130000001300000013000000130000005D
+:10075000130000001300000013000000130000004D
+:10076000130000001300000013000000130000003D
+:10077000130000001300000013000000130000002D
+:10078000130000001300000013000000130000001D
+:10079000130000001300000013000000130000000D
+:1007A00013000000130000001300000013000000FD
+:1007B00013000000130000001300000013000000ED
+:1007C00013000000130000001300000013000000DD
+:1007D00013000000130000001300000013000000CD
+:1007E00013000000130000001300000013000000BD
+:1007F00013000000130000001300000013000000AD
+:10080000130000001300000013000000130000009C
+:10081000130000001300000013000000130000008C
+:10082000130000001300000013000000130000007C
+:10083000130000001300000013000000130000006C
+:10084000130000001300000013000000130000005C
+:10085000130000001300000013000000130000004C
+:10086000130000001300000013000000130000003C
+:10087000130000001300000013000000130000002C
+:10088000130000001300000013000000130000001C
+:10089000130000001300000013000000130000000C
+:1008A00013000000130000001300000013000000FC
+:1008B00013000000130000001300000013000000EC
+:1008C00013000000130000001300000013000000DC
+:1008D00013000000130000001300000013000000CC
+:1008E00013000000130000001300000013000000BC
+:1008F00013000000130000001300000013000000AC
+:10090000130000001300000013000000130000009B
+:10091000130000001300000013000000130000008B
+:10092000130000001300000013000000130000007B
+:10093000130000001300000013000000130000006B
+:10094000130000001300000013000000130000005B
+:10095000130000001300000013000000130000004B
+:10096000130000001300000013000000130000003B
+:10097000130000001300000013000000130000002B
+:10098000130000001300000013000000130000001B
+:10099000130000001300000013000000130000000B
+:1009A00013000000130000001300000013000000FB
+:1009B00013000000130000001300000013000000EB
+:1009C00013000000130000001300000013000000DB
+:1009D00013000000130000001300000013000000CB
+:1009E00013000000130000001300000013000000BB
+:1009F00013000000130000001300000013000000AB
+:100A0000130000001300000013000000130000009A
+:100A1000130000001300000013000000130000008A
+:100A2000130000001300000013000000130000007A
+:100A3000130000001300000013000000130000006A
+:100A4000130000001300000013000000130000005A
+:100A5000130000001300000013000000130000004A
+:100A6000130000001300000013000000130000003A
+:100A7000130000001300000013000000130000002A
+:100A8000130000001300000013000000130000001A
+:100A9000130000001300000013000000130000000A
+:100AA00013000000130000001300000013000000FA
+:100AB00013000000130000001300000013000000EA
+:100AC00013000000130000001300000013000000DA
+:100AD00013000000130000001300000013000000CA
+:100AE00013000000130000001300000013000000BA
+:100AF00013000000130000001300000013000000AA
+:100B00001300000013000000130000001300000099
+:100B10001300000013000000130000001300000089
+:100B20001300000013000000130000001300000079
+:100B30001300000013000000130000001300000069
+:100B40001300000013000000130000001300000059
+:100B50001300000013000000130000001300000049
+:100B60001300000013000000130000001300000039
+:100B70001300000013000000130000001300000029
+:100B80001300000013000000130000001300000019
+:100B90001300000013000000130000001300000009
+:100BA00013000000130000001300000013000000F9
+:100BB00013000000130000001300000013000000E9
+:100BC00013000000130000001300000013000000D9
+:100BD00013000000130000001300000013000000C9
+:100BE00013000000130000001300000013000000B9
+:100BF00013000000130000001300000013000000A9
+:100C00001300000013000000130000001300000098
+:100C10001300000013000000130000001300000088
+:100C20001300000013000000130000001300000078
+:100C30001300000013000000130000001300000068
+:100C40001300000013000000130000001300000058
+:100C50001300000013000000130000001300000048
+:100C60001300000013000000130000001300000038
+:100C70001300000013000000130000001300000028
+:100C80001300000013000000130000001300000018
+:100C90001300000013000000130000001300000008
+:100CA00013000000130000001300000013000000F8
+:100CB00013000000130000001300000013000000E8
+:100CC00013000000130000001300000013000000D8
+:100CD00013000000130000001300000013000000C8
+:100CE00013000000130000001300000013000000B8
+:100CF00013000000130000001300000013000000A8
+:100D00001300000013000000130000001300000097
+:100D10001300000013000000130000001300000087
+:100D20001300000013000000130000001300000077
+:100D30001300000013000000130000001300000067
+:100D40001300000013000000130000001300000057
+:100D50001300000013000000130000001300000047
+:100D60001300000013000000130000001300000037
+:100D70001300000013000000130000001300000027
+:100D80001300000013000000130000001300000017
+:100D90001300000013000000130000001300000007
+:100DA00013000000130000001300000013000000F7
+:100DB00013000000130000001300000013000000E7
+:100DC00013000000130000001300000013000000D7
+:100DD00013000000130000001300000013000000C7
+:100DE00013000000130000001300000013000000B7
+:100DF00013000000130000001300000013000000A7
+:100E00001300000013000000130000001300000096
+:100E10001300000013000000130000001300000086
+:100E20001300000013000000130000001300000076
+:100E30001300000013000000130000001300000066
+:100E40001300000013000000130000001300000056
+:100E50001300000013000000130000001300000046
+:100E60001300000013000000130000001300000036
+:100E70001300000013000000130000001300000026
+:100E80001300000013000000130000001300000016
+:100E90001300000013000000130000001300000006
+:100EA00013000000130000001300000013000000F6
+:100EB00013000000130000001300000013000000E6
+:100EC00013000000130000001300000013000000D6
+:100ED00013000000130000001300000013000000C6
+:100EE00013000000130000001300000013000000B6
+:100EF00013000000130000001300000013000000A6
+:100F00001300000013000000130000001300000095
+:100F10001300000013000000130000001300000085
+:100F20001300000013000000130000001300000075
+:100F30001300000013000000130000001300000065
+:100F40001300000013000000130000001300000055
+:100F50001300000013000000130000001300000045
+:100F60001300000013000000130000001300000035
+:100F70001300000013000000130000001300000025
+:100F80001300000013000000130000001300000015
+:100F90001300000013000000130000001300000005
+:100FA00013000000130000001300000013000000F5
+:100FB00013000000130000001300000013000000E5
+:100FC00013000000130000001300000013000000D5
+:100FD00013000000130000001300000013000000C5
+:100FE00013000000130000001300000013000000B5
+:100FF00013000000130000001300000013000000A5
+:1010000000000000130000001300000013000000A7
+:101010001300000013000000130000001300000084
+:101020001300000013000000130000001300000074
+:101030001300000013000000130000001300000064
+:101040001300000013000000130000001300000054
+:101050001300000013000000130000001300000044
+:101060001300000013000000130000001300000034
+:101070001300000013000000130000001300000024
+:101080001300000013000000130000001300000014
+:101090001300000013000000130000001300000004
+:1010A00013000000130000001300000013000000F4
+:1010B00013000000130000001300000013000000E4
+:1010C00013000000130000001300000013000000D4
+:1010D00013000000130000001300000013000000C4
+:1010E00013000000130000001300000013000000B4
+:1010F00013000000130000001300000013000000A4
+:101100001300000013000000130000001300000093
+:101110001300000013000000130000001300000083
+:101120001300000013000000130000001300000073
+:101130001300000013000000130000001300000063
+:101140001300000013000000130000001300000053
+:101150001300000013000000130000001300000043
+:101160001300000013000000130000001300000033
+:101170001300000013000000130000001300000023
+:101180001300000013000000130000001300000013
+:101190001300000013000000130000001300000003
+:1011A00013000000130000001300000013000000F3
+:1011B00013000000130000001300000013000000E3
+:1011C00013000000130000001300000013000000D3
+:1011D00013000000130000001300000013000000C3
+:1011E00013000000130000001300000013000000B3
+:1011F00013000000130000001300000013000000A3
+:101200001300000013000000130000001300000092
+:101210001300000013000000130000001300000082
+:101220001300000013000000130000001300000072
+:101230001300000013000000130000001300000062
+:101240001300000013000000130000001300000052
+:101250001300000013000000130000001300000042
+:101260001300000013000000130000001300000032
+:101270001300000013000000130000001300000022
+:101280001300000013000000130000001300000012
+:101290001300000013000000130000001300000002
+:1012A00013000000130000001300000013000000F2
+:1012B00013000000130000001300000013000000E2
+:1012C00013000000130000001300000013000000D2
+:1012D00013000000130000001300000013000000C2
+:1012E00013000000130000001300000013000000B2
+:1012F00013000000130000001300000013000000A2
+:101300001300000013000000130000001300000091
+:101310001300000013000000130000001300000081
+:101320001300000013000000130000001300000071
+:101330001300000013000000130000001300000061
+:101340001300000013000000130000001300000051
+:101350001300000013000000130000001300000041
+:101360001300000013000000130000001300000031
+:101370001300000013000000130000001300000021
+:101380001300000013000000130000001300000011
+:101390001300000013000000130000001300000001
+:1013A00013000000130000001300000013000000F1
+:1013B00013000000130000001300000013000000E1
+:1013C00013000000130000001300000013000000D1
+:1013D00013000000130000001300000013000000C1
+:1013E00013000000130000001300000013000000B1
+:1013F00013000000130000001300000013000000A1
+:101400001300000013000000130000001300000090
+:101410001300000013000000130000001300000080
+:101420001300000013000000130000001300000070
+:101430001300000013000000130000001300000060
+:101440001300000013000000130000001300000050
+:101450001300000013000000130000001300000040
+:101460001300000013000000130000001300000030
+:101470001300000013000000130000001300000020
+:101480001300000013000000130000001300000010
+:101490001300000013000000130000001300000000
+:1014A00013000000130000001300000013000000F0
+:1014B00013000000130000001300000013000000E0
+:1014C00013000000130000001300000013000000D0
+:1014D00013000000130000001300000013000000C0
+:1014E00013000000130000001300000013000000B0
+:1014F00013000000130000001300000013000000A0
+:10150000130000001300000013000000130000008F
+:10151000130000001300000013000000130000007F
+:10152000130000001300000013000000130000006F
+:10153000130000001300000013000000130000005F
+:10154000130000001300000013000000130000004F
+:10155000130000001300000013000000130000003F
+:10156000130000001300000013000000130000002F
+:10157000130000001300000013000000130000001F
+:10158000130000001300000013000000130000000F
+:1015900013000000130000001300000013000000FF
+:1015A00013000000130000001300000013000000EF
+:1015B00013000000130000001300000013000000DF
+:1015C00013000000130000001300000013000000CF
+:1015D00013000000130000001300000013000000BF
+:1015E00013000000130000001300000013000000AF
+:1015F000130000001300000013000000130000009F
+:10160000130000001300000013000000130000008E
+:10161000130000001300000013000000130000007E
+:10162000130000001300000013000000130000006E
+:10163000130000001300000013000000130000005E
+:10164000130000001300000013000000130000004E
+:10165000130000001300000013000000130000003E
+:10166000130000001300000013000000130000002E
+:10167000130000001300000013000000130000001E
+:10168000130000001300000013000000130000000E
+:1016900013000000130000001300000013000000FE
+:1016A00013000000130000001300000013000000EE
+:1016B00013000000130000001300000013000000DE
+:1016C00013000000130000001300000013000000CE
+:1016D00013000000130000001300000013000000BE
+:1016E00013000000130000001300000013000000AE
+:1016F000130000001300000013000000130000009E
+:10170000130000001300000013000000130000008D
+:10171000130000001300000013000000130000007D
+:10172000130000001300000013000000130000006D
+:10173000130000001300000013000000130000005D
+:10174000130000001300000013000000130000004D
+:10175000130000001300000013000000130000003D
+:10176000130000001300000013000000130000002D
+:10177000130000001300000013000000130000001D
+:10178000130000001300000013000000130000000D
+:1017900013000000130000001300000013000000FD
+:1017A00013000000130000001300000013000000ED
+:1017B00013000000130000001300000013000000DD
+:1017C00013000000130000001300000013000000CD
+:1017D00013000000130000001300000013000000BD
+:1017E00013000000130000001300000013000000AD
+:1017F000130000001300000013000000130000009D
+:10180000130000001300000013000000130000008C
+:10181000130000001300000013000000130000007C
+:10182000130000001300000013000000130000006C
+:10183000130000001300000013000000130000005C
+:10184000130000001300000013000000130000004C
+:10185000130000001300000013000000130000003C
+:10186000130000001300000013000000130000002C
+:10187000130000001300000013000000130000001C
+:10188000130000001300000013000000130000000C
+:1018900013000000130000001300000013000000FC
+:1018A00013000000130000001300000013000000EC
+:1018B00013000000130000001300000013000000DC
+:1018C00013000000130000001300000013000000CC
+:1018D00013000000130000001300000013000000BC
+:1018E00013000000130000001300000013000000AC
+:1018F000130000001300000013000000130000009C
+:10190000130000001300000013000000130000008B
+:10191000130000001300000013000000130000007B
+:10192000130000001300000013000000130000006B
+:10193000130000001300000013000000130000005B
+:10194000130000001300000013000000130000004B
+:10195000130000001300000013000000130000003B
+:10196000130000001300000013000000130000002B
+:10197000130000001300000013000000130000001B
+:10198000130000001300000013000000130000000B
+:1019900013000000130000001300000013000000FB
+:1019A00013000000130000001300000013000000EB
+:1019B00013000000130000001300000013000000DB
+:1019C00013000000130000001300000013000000CB
+:1019D00013000000130000001300000013000000BB
+:1019E00013000000130000001300000013000000AB
+:1019F000130000001300000013000000130000009B
+:101A0000130000001300000013000000130000008A
+:101A1000130000001300000013000000130000007A
+:101A2000130000001300000013000000130000006A
+:101A3000130000001300000013000000130000005A
+:101A4000130000001300000013000000130000004A
+:101A5000130000001300000013000000130000003A
+:101A6000130000001300000013000000130000002A
+:101A7000130000001300000013000000130000001A
+:101A8000130000001300000013000000130000000A
+:101A900013000000130000001300000013000000FA
+:101AA00013000000130000001300000013000000EA
+:101AB00013000000130000001300000013000000DA
+:101AC00013000000130000001300000013000000CA
+:101AD00013000000130000001300000013000000BA
+:101AE00013000000130000001300000013000000AA
+:101AF000130000001300000013000000130000009A
+:101B00001300000013000000130000001300000089
+:101B10001300000013000000130000001300000079
+:101B20001300000013000000130000001300000069
+:101B30001300000013000000130000001300000059
+:101B40001300000013000000130000001300000049
+:101B50001300000013000000130000001300000039
+:101B60001300000013000000130000001300000029
+:101B70001300000013000000130000001300000019
+:101B80001300000013000000130000001300000009
+:101B900013000000130000001300000013000000F9
+:101BA00013000000130000001300000013000000E9
+:101BB00013000000130000001300000013000000D9
+:101BC00013000000130000001300000013000000C9
+:101BD00013000000130000001300000013000000B9
+:101BE00013000000130000001300000013000000A9
+:101BF0001300000013000000130000001300000099
+:101C00001300000013000000130000001300000088
+:101C10001300000013000000130000001300000078
+:101C20001300000013000000130000001300000068
+:101C30001300000013000000130000001300000058
+:101C40001300000013000000130000001300000048
+:101C50001300000013000000130000001300000038
+:101C60001300000013000000130000001300000028
+:101C70001300000013000000130000001300000018
+:101C80001300000013000000130000001300000008
+:101C900013000000130000001300000013000000F8
+:101CA00013000000130000001300000013000000E8
+:101CB00013000000130000001300000013000000D8
+:101CC00013000000130000001300000013000000C8
+:101CD00013000000130000001300000013000000B8
+:101CE00013000000130000001300000013000000A8
+:101CF0001300000013000000130000001300000098
+:101D00001300000013000000130000001300000087
+:101D10001300000013000000130000001300000077
+:101D20001300000013000000130000001300000067
+:101D30001300000013000000130000001300000057
+:101D40001300000013000000130000001300000047
+:101D50001300000013000000130000001300000037
+:101D60001300000013000000130000001300000027
+:101D70001300000013000000130000001300000017
+:101D80001300000013000000130000001300000007
+:101D900013000000130000001300000013000000F7
+:101DA00013000000130000001300000013000000E7
+:101DB00013000000130000001300000013000000D7
+:101DC00013000000130000001300000013000000C7
+:101DD00013000000130000001300000013000000B7
+:101DE00013000000130000001300000013000000A7
+:101DF0001300000013000000130000001300000097
+:101E00001300000013000000130000001300000086
+:101E10001300000013000000130000001300000076
+:101E20001300000013000000130000001300000066
+:101E30001300000013000000130000001300000056
+:101E40001300000013000000130000001300000046
+:101E50001300000013000000130000001300000036
+:101E60001300000013000000130000001300000026
+:101E70001300000013000000130000001300000016
+:101E80001300000013000000130000001300000006
+:101E900013000000130000001300000013000000F6
+:101EA00013000000130000001300000013000000E6
+:101EB00013000000130000001300000013000000D6
+:101EC00013000000130000001300000013000000C6
+:101ED00013000000130000001300000013000000B6
+:101EE00013000000130000001300000013000000A6
+:101EF0001300000013000000130000001300000096
+:101F00001300000013000000130000001300000085
+:101F10001300000013000000130000001300000075
+:101F20001300000013000000130000001300000065
+:101F30001300000013000000130000001300000055
+:101F40001300000013000000130000001300000045
+:101F50001300000013000000130000001300000035
+:101F60001300000013000000130000001300000025
+:101F70001300000013000000130000001300000015
+:101F80001300000013000000130000001300000005
+:101F900013000000130000001300000013000000F5
+:101FA00013000000130000001300000013000000E5
+:101FB00013000000130000001300000013000000D5
+:101FC00013000000130000001300000013000000C5
+:101FD00013000000130000001300000013000000B5
+:101FE00013000000130000001300000013000000A5
+:101FF0001300000013000000130000001300000095
+:102000000000000013000000130000001300000097
+:102010001300000013000000130000001300000074
+:102020001300000013000000130000001300000064
+:102030001300000013000000130000001300000054
+:102040001300000013000000130000001300000044
+:102050001300000013000000130000001300000034
+:102060001300000013000000130000001300000024
+:102070001300000013000000130000001300000014
+:102080001300000013000000130000001300000004
+:1020900013000000130000001300000013000000F4
+:1020A00013000000130000001300000013000000E4
+:1020B00013000000130000001300000013000000D4
+:1020C00013000000130000001300000013000000C4
+:1020D00013000000130000001300000013000000B4
+:1020E00013000000130000001300000013000000A4
+:1020F0001300000013000000130000001300000094
+:102100001300000013000000130000001300000083
+:102110001300000013000000130000001300000073
+:102120001300000013000000130000001300000063
+:102130001300000013000000130000001300000053
+:102140001300000013000000130000001300000043
+:102150001300000013000000130000001300000033
+:102160001300000013000000130000001300000023
+:102170001300000013000000130000001300000013
+:102180001300000013000000130000001300000003
+:1021900013000000130000001300000013000000F3
+:1021A00013000000130000001300000013000000E3
+:1021B00013000000130000001300000013000000D3
+:1021C00013000000130000001300000013000000C3
+:1021D00013000000130000001300000013000000B3
+:1021E00013000000130000001300000013000000A3
+:1021F0001300000013000000130000001300000093
+:102200001300000013000000130000001300000082
+:102210001300000013000000130000001300000072
+:102220001300000013000000130000001300000062
+:102230001300000013000000130000001300000052
+:102240001300000013000000130000001300000042
+:102250001300000013000000130000001300000032
+:102260001300000013000000130000001300000022
+:102270001300000013000000130000001300000012
+:102280001300000013000000130000001300000002
+:1022900013000000130000001300000013000000F2
+:1022A00013000000130000001300000013000000E2
+:1022B00013000000130000001300000013000000D2
+:1022C00013000000130000001300000013000000C2
+:1022D00013000000130000001300000013000000B2
+:1022E00013000000130000001300000013000000A2
+:1022F0001300000013000000130000001300000092
+:102300001300000013000000130000001300000081
+:102310001300000013000000130000001300000071
+:102320001300000013000000130000001300000061
+:102330001300000013000000130000001300000051
+:102340001300000013000000130000001300000041
+:102350001300000013000000130000001300000031
+:102360001300000013000000130000001300000021
+:102370001300000013000000130000001300000011
+:102380001300000013000000130000001300000001
+:1023900013000000130000001300000013000000F1
+:1023A00013000000130000001300000013000000E1
+:1023B00013000000130000001300000013000000D1
+:1023C00013000000130000001300000013000000C1
+:1023D00013000000130000001300000013000000B1
+:1023E00013000000130000001300000013000000A1
+:1023F0001300000013000000130000001300000091
+:102400001300000013000000130000001300000080
+:102410001300000013000000130000001300000070
+:102420001300000013000000130000001300000060
+:102430001300000013000000130000001300000050
+:102440001300000013000000130000001300000040
+:102450001300000013000000130000001300000030
+:102460001300000013000000130000001300000020
+:102470001300000013000000130000001300000010
+:102480001300000013000000130000001300000000
+:1024900013000000130000001300000013000000F0
+:1024A00013000000130000001300000013000000E0
+:1024B00013000000130000001300000013000000D0
+:1024C00013000000130000001300000013000000C0
+:1024D00013000000130000001300000013000000B0
+:1024E00013000000130000001300000013000000A0
+:1024F0001300000013000000130000001300000090
+:10250000130000001300000013000000130000007F
+:10251000130000001300000013000000130000006F
+:10252000130000001300000013000000130000005F
+:10253000130000001300000013000000130000004F
+:10254000130000001300000013000000130000003F
+:10255000130000001300000013000000130000002F
+:10256000130000001300000013000000130000001F
+:10257000130000001300000013000000130000000F
+:1025800013000000130000001300000013000000FF
+:1025900013000000130000001300000013000000EF
+:1025A00013000000130000001300000013000000DF
+:1025B00013000000130000001300000013000000CF
+:1025C00013000000130000001300000013000000BF
+:1025D00013000000130000001300000013000000AF
+:1025E000130000001300000013000000130000009F
+:1025F000130000001300000013000000130000008F
+:10260000130000001300000013000000130000007E
+:10261000130000001300000013000000130000006E
+:10262000130000001300000013000000130000005E
+:10263000130000001300000013000000130000004E
+:10264000130000001300000013000000130000003E
+:10265000130000001300000013000000130000002E
+:10266000130000001300000013000000130000001E
+:10267000130000001300000013000000130000000E
+:1026800013000000130000001300000013000000FE
+:1026900013000000130000001300000013000000EE
+:1026A00013000000130000001300000013000000DE
+:1026B00013000000130000001300000013000000CE
+:1026C00013000000130000001300000013000000BE
+:1026D00013000000130000001300000013000000AE
+:1026E000130000001300000013000000130000009E
+:1026F000130000001300000013000000130000008E
+:10270000130000001300000013000000130000007D
+:10271000130000001300000013000000130000006D
+:10272000130000001300000013000000130000005D
+:10273000130000001300000013000000130000004D
+:10274000130000001300000013000000130000003D
+:10275000130000001300000013000000130000002D
+:10276000130000001300000013000000130000001D
+:10277000130000001300000013000000130000000D
+:1027800013000000130000001300000013000000FD
+:1027900013000000130000001300000013000000ED
+:1027A00013000000130000001300000013000000DD
+:1027B00013000000130000001300000013000000CD
+:1027C00013000000130000001300000013000000BD
+:1027D00013000000130000001300000013000000AD
+:1027E000130000001300000013000000130000009D
+:1027F000130000001300000013000000130000008D
+:10280000130000001300000013000000130000007C
+:10281000130000001300000013000000130000006C
+:10282000130000001300000013000000130000005C
+:10283000130000001300000013000000130000004C
+:10284000130000001300000013000000130000003C
+:10285000130000001300000013000000130000002C
+:10286000130000001300000013000000130000001C
+:10287000130000001300000013000000130000000C
+:1028800013000000130000001300000013000000FC
+:1028900013000000130000001300000013000000EC
+:1028A00013000000130000001300000013000000DC
+:1028B00013000000130000001300000013000000CC
+:1028C00013000000130000001300000013000000BC
+:1028D00013000000130000001300000013000000AC
+:1028E000130000001300000013000000130000009C
+:1028F000130000001300000013000000130000008C
+:10290000130000001300000013000000130000007B
+:10291000130000001300000013000000130000006B
+:10292000130000001300000013000000130000005B
+:10293000130000001300000013000000130000004B
+:10294000130000001300000013000000130000003B
+:10295000130000001300000013000000130000002B
+:10296000130000001300000013000000130000001B
+:10297000130000001300000013000000130000000B
+:1029800013000000130000001300000013000000FB
+:1029900013000000130000001300000013000000EB
+:1029A00013000000130000001300000013000000DB
+:1029B00013000000130000001300000013000000CB
+:1029C00013000000130000001300000013000000BB
+:1029D00013000000130000001300000013000000AB
+:1029E000130000001300000013000000130000009B
+:1029F000130000001300000013000000130000008B
+:102A0000130000001300000013000000130000007A
+:102A1000130000001300000013000000130000006A
+:102A2000130000001300000013000000130000005A
+:102A3000130000001300000013000000130000004A
+:102A4000130000001300000013000000130000003A
+:102A5000130000001300000013000000130000002A
+:102A6000130000001300000013000000130000001A
+:102A7000130000001300000013000000130000000A
+:102A800013000000130000001300000013000000FA
+:102A900013000000130000001300000013000000EA
+:102AA00013000000130000001300000013000000DA
+:102AB00013000000130000001300000013000000CA
+:102AC00013000000130000001300000013000000BA
+:102AD00013000000130000001300000013000000AA
+:102AE000130000001300000013000000130000009A
+:102AF000130000001300000013000000130000008A
+:102B00001300000013000000130000001300000079
+:102B10001300000013000000130000001300000069
+:102B20001300000013000000130000001300000059
+:102B30001300000013000000130000001300000049
+:102B40001300000013000000130000001300000039
+:102B50001300000013000000130000001300000029
+:102B60001300000013000000130000001300000019
+:102B70001300000013000000130000001300000009
+:102B800013000000130000001300000013000000F9
+:102B900013000000130000001300000013000000E9
+:102BA00013000000130000001300000013000000D9
+:102BB00013000000130000001300000013000000C9
+:102BC00013000000130000001300000013000000B9
+:102BD00013000000130000001300000013000000A9
+:102BE0001300000013000000130000001300000099
+:102BF0001300000013000000130000001300000089
+:102C00001300000013000000130000001300000078
+:102C10001300000013000000130000001300000068
+:102C20001300000013000000130000001300000058
+:102C30001300000013000000130000001300000048
+:102C40001300000013000000130000001300000038
+:102C50001300000013000000130000001300000028
+:102C60001300000013000000130000001300000018
+:102C70001300000013000000130000001300000008
+:102C800013000000130000001300000013000000F8
+:102C900013000000130000001300000013000000E8
+:102CA00013000000130000001300000013000000D8
+:102CB00013000000130000001300000013000000C8
+:102CC00013000000130000001300000013000000B8
+:102CD00013000000130000001300000013000000A8
+:102CE0001300000013000000130000001300000098
+:102CF0001300000013000000130000001300000088
+:102D00001300000013000000130000001300000077
+:102D10001300000013000000130000001300000067
+:102D20001300000013000000130000001300000057
+:102D30001300000013000000130000001300000047
+:102D40001300000013000000130000001300000037
+:102D50001300000013000000130000001300000027
+:102D60001300000013000000130000001300000017
+:102D70001300000013000000130000001300000007
+:102D800013000000130000001300000013000000F7
+:102D900013000000130000001300000013000000E7
+:102DA00013000000130000001300000013000000D7
+:102DB00013000000130000001300000013000000C7
+:102DC00013000000130000001300000013000000B7
+:102DD00013000000130000001300000013000000A7
+:102DE0001300000013000000130000001300000097
+:102DF0001300000013000000130000001300000087
+:102E00001300000013000000130000001300000076
+:102E10001300000013000000130000001300000066
+:102E20001300000013000000130000001300000056
+:102E30001300000013000000130000001300000046
+:102E40001300000013000000130000001300000036
+:102E50001300000013000000130000001300000026
+:102E60001300000013000000130000001300000016
+:102E70001300000013000000130000001300000006
+:102E800013000000130000001300000013000000F6
+:102E900013000000130000001300000013000000E6
+:102EA00013000000130000001300000013000000D6
+:102EB00013000000130000001300000013000000C6
+:102EC00013000000130000001300000013000000B6
+:102ED00013000000130000001300000013000000A6
+:102EE0001300000013000000130000001300000096
+:102EF0001300000013000000130000001300000086
+:102F00001300000013000000130000001300000075
+:102F10001300000013000000130000001300000065
+:102F20001300000013000000130000001300000055
+:102F30001300000013000000130000001300000045
+:102F40001300000013000000130000001300000035
+:102F50001300000013000000130000001300000025
+:102F60001300000013000000130000001300000015
+:102F70001300000013000000130000001300000005
+:102F800013000000130000001300000013000000F5
+:102F900013000000130000001300000013000000E5
+:102FA00013000000130000001300000013000000D5
+:102FB00013000000130000001300000013000000C5
+:102FC00013000000130000001300000013000000B5
+:102FD00013000000130000001300000013000000A5
+:102FE0001300000013000000130000001300000095
+:102FF0001300000013000000130000001300000085
+:103000000000000013000000130000001300000087
+:103010001300000013000000130000001300000064
+:103020001300000013000000130000001300000054
+:103030001300000013000000130000001300000044
+:103040001300000013000000130000001300000034
+:103050001300000013000000130000001300000024
+:103060001300000013000000130000001300000014
+:103070001300000013000000130000001300000004
+:1030800013000000130000001300000013000000F4
+:1030900013000000130000001300000013000000E4
+:1030A00013000000130000001300000013000000D4
+:1030B00013000000130000001300000013000000C4
+:1030C00013000000130000001300000013000000B4
+:1030D00013000000130000001300000013000000A4
+:1030E0001300000013000000130000001300000094
+:1030F0001300000013000000130000001300000084
+:103100001300000013000000130000001300000073
+:103110001300000013000000130000001300000063
+:103120001300000013000000130000001300000053
+:103130001300000013000000130000001300000043
+:103140001300000013000000130000001300000033
+:103150001300000013000000130000001300000023
+:103160001300000013000000130000001300000013
+:103170001300000013000000130000001300000003
+:1031800013000000130000001300000013000000F3
+:1031900013000000130000001300000013000000E3
+:1031A00013000000130000001300000013000000D3
+:1031B00013000000130000001300000013000000C3
+:1031C00013000000130000001300000013000000B3
+:1031D00013000000130000001300000013000000A3
+:1031E0001300000013000000130000001300000093
+:1031F0001300000013000000130000001300000083
+:103200001300000013000000130000001300000072
+:103210001300000013000000130000001300000062
+:103220001300000013000000130000001300000052
+:103230001300000013000000130000001300000042
+:103240001300000013000000130000001300000032
+:103250001300000013000000130000001300000022
+:103260001300000013000000130000001300000012
+:103270001300000013000000130000001300000002
+:1032800013000000130000001300000013000000F2
+:1032900013000000130000001300000013000000E2
+:1032A00013000000130000001300000013000000D2
+:1032B00013000000130000001300000013000000C2
+:1032C00013000000130000001300000013000000B2
+:1032D00013000000130000001300000013000000A2
+:1032E0001300000013000000130000001300000092
+:1032F0001300000013000000130000001300000082
+:103300001300000013000000130000001300000071
+:103310001300000013000000130000001300000061
+:103320001300000013000000130000001300000051
+:103330001300000013000000130000001300000041
+:103340001300000013000000130000001300000031
+:103350001300000013000000130000001300000021
+:103360001300000013000000130000001300000011
+:103370001300000013000000130000001300000001
+:1033800013000000130000001300000013000000F1
+:1033900013000000130000001300000013000000E1
+:1033A00013000000130000001300000013000000D1
+:1033B00013000000130000001300000013000000C1
+:1033C00013000000130000001300000013000000B1
+:1033D00013000000130000001300000013000000A1
+:1033E0001300000013000000130000001300000091
+:1033F0001300000013000000130000001300000081
+:103400001300000013000000130000001300000070
+:103410001300000013000000130000001300000060
+:103420001300000013000000130000001300000050
+:103430001300000013000000130000001300000040
+:103440001300000013000000130000001300000030
+:103450001300000013000000130000001300000020
+:103460001300000013000000130000001300000010
+:103470001300000013000000130000001300000000
+:1034800013000000130000001300000013000000F0
+:1034900013000000130000001300000013000000E0
+:1034A00013000000130000001300000013000000D0
+:1034B00013000000130000001300000013000000C0
+:1034C00013000000130000001300000013000000B0
+:1034D00013000000130000001300000013000000A0
+:1034E0001300000013000000130000001300000090
+:1034F0001300000013000000130000001300000080
+:10350000130000001300000013000000130000006F
+:10351000130000001300000013000000130000005F
+:10352000130000001300000013000000130000004F
+:10353000130000001300000013000000130000003F
+:10354000130000001300000013000000130000002F
+:10355000130000001300000013000000130000001F
+:10356000130000001300000013000000130000000F
+:1035700013000000130000001300000013000000FF
+:1035800013000000130000001300000013000000EF
+:1035900013000000130000001300000013000000DF
+:1035A00013000000130000001300000013000000CF
+:1035B00013000000130000001300000013000000BF
+:1035C00013000000130000001300000013000000AF
+:1035D000130000001300000013000000130000009F
+:1035E000130000001300000013000000130000008F
+:1035F000130000001300000013000000130000007F
+:10360000130000001300000013000000130000006E
+:10361000130000001300000013000000130000005E
+:10362000130000001300000013000000130000004E
+:10363000130000001300000013000000130000003E
+:10364000130000001300000013000000130000002E
+:10365000130000001300000013000000130000001E
+:10366000130000001300000013000000130000000E
+:1036700013000000130000001300000013000000FE
+:1036800013000000130000001300000013000000EE
+:1036900013000000130000001300000013000000DE
+:1036A00013000000130000001300000013000000CE
+:1036B00013000000130000001300000013000000BE
+:1036C00013000000130000001300000013000000AE
+:1036D000130000001300000013000000130000009E
+:1036E000130000001300000013000000130000008E
+:1036F000130000001300000013000000130000007E
+:10370000130000001300000013000000130000006D
+:10371000130000001300000013000000130000005D
+:10372000130000001300000013000000130000004D
+:10373000130000001300000013000000130000003D
+:10374000130000001300000013000000130000002D
+:10375000130000001300000013000000130000001D
+:10376000130000001300000013000000130000000D
+:1037700013000000130000001300000013000000FD
+:1037800013000000130000001300000013000000ED
+:1037900013000000130000001300000013000000DD
+:1037A00013000000130000001300000013000000CD
+:1037B00013000000130000001300000013000000BD
+:1037C00013000000130000001300000013000000AD
+:1037D000130000001300000013000000130000009D
+:1037E000130000001300000013000000130000008D
+:1037F000130000001300000013000000130000007D
+:10380000130000001300000013000000130000006C
+:10381000130000001300000013000000130000005C
+:10382000130000001300000013000000130000004C
+:10383000130000001300000013000000130000003C
+:10384000130000001300000013000000130000002C
+:10385000130000001300000013000000130000001C
+:10386000130000001300000013000000130000000C
+:1038700013000000130000001300000013000000FC
+:1038800013000000130000001300000013000000EC
+:1038900013000000130000001300000013000000DC
+:1038A00013000000130000001300000013000000CC
+:1038B00013000000130000001300000013000000BC
+:1038C00013000000130000001300000013000000AC
+:1038D000130000001300000013000000130000009C
+:1038E000130000001300000013000000130000008C
+:1038F000130000001300000013000000130000007C
+:10390000130000001300000013000000130000006B
+:10391000130000001300000013000000130000005B
+:10392000130000001300000013000000130000004B
+:10393000130000001300000013000000130000003B
+:10394000130000001300000013000000130000002B
+:10395000130000001300000013000000130000001B
+:10396000130000001300000013000000130000000B
+:1039700013000000130000001300000013000000FB
+:1039800013000000130000001300000013000000EB
+:1039900013000000130000001300000013000000DB
+:1039A00013000000130000001300000013000000CB
+:1039B00013000000130000001300000013000000BB
+:1039C00013000000130000001300000013000000AB
+:1039D000130000001300000013000000130000009B
+:1039E000130000001300000013000000130000008B
+:1039F000130000001300000013000000130000007B
+:103A0000130000001300000013000000130000006A
+:103A1000130000001300000013000000130000005A
+:103A2000130000001300000013000000130000004A
+:103A3000130000001300000013000000130000003A
+:103A4000130000001300000013000000130000002A
+:103A5000130000001300000013000000130000001A
+:103A6000130000001300000013000000130000000A
+:103A700013000000130000001300000013000000FA
+:103A800013000000130000001300000013000000EA
+:103A900013000000130000001300000013000000DA
+:103AA00013000000130000001300000013000000CA
+:103AB00013000000130000001300000013000000BA
+:103AC00013000000130000001300000013000000AA
+:103AD000130000001300000013000000130000009A
+:103AE000130000001300000013000000130000008A
+:103AF000130000001300000013000000130000007A
+:103B00001300000013000000130000001300000069
+:103B10001300000013000000130000001300000059
+:103B20001300000013000000130000001300000049
+:103B30001300000013000000130000001300000039
+:103B40001300000013000000130000001300000029
+:103B50001300000013000000130000001300000019
+:103B60001300000013000000130000001300000009
+:103B700013000000130000001300000013000000F9
+:103B800013000000130000001300000013000000E9
+:103B900013000000130000001300000013000000D9
+:103BA00013000000130000001300000013000000C9
+:103BB00013000000130000001300000013000000B9
+:103BC00013000000130000001300000013000000A9
+:103BD0001300000013000000130000001300000099
+:103BE0001300000013000000130000001300000089
+:103BF0001300000013000000130000001300000079
+:103C00001300000013000000130000001300000068
+:103C10001300000013000000130000001300000058
+:103C20001300000013000000130000001300000048
+:103C30001300000013000000130000001300000038
+:103C40001300000013000000130000001300000028
+:103C50001300000013000000130000001300000018
+:103C60001300000013000000130000001300000008
+:103C700013000000130000001300000013000000F8
+:103C800013000000130000001300000013000000E8
+:103C900013000000130000001300000013000000D8
+:103CA00013000000130000001300000013000000C8
+:103CB00013000000130000001300000013000000B8
+:103CC00013000000130000001300000013000000A8
+:103CD0001300000013000000130000001300000098
+:103CE0001300000013000000130000001300000088
+:103CF0001300000013000000130000001300000078
+:103D00001300000013000000130000001300000067
+:103D10001300000013000000130000001300000057
+:103D20001300000013000000130000001300000047
+:103D30001300000013000000130000001300000037
+:103D40001300000013000000130000001300000027
+:103D50001300000013000000130000001300000017
+:103D60001300000013000000130000001300000007
+:103D700013000000130000001300000013000000F7
+:103D800013000000130000001300000013000000E7
+:103D900013000000130000001300000013000000D7
+:103DA00013000000130000001300000013000000C7
+:103DB00013000000130000001300000013000000B7
+:103DC00013000000130000001300000013000000A7
+:103DD0001300000013000000130000001300000097
+:103DE0001300000013000000130000001300000087
+:103DF0001300000013000000130000001300000077
+:103E00001300000013000000130000001300000066
+:103E10001300000013000000130000001300000056
+:103E20001300000013000000130000001300000046
+:103E30001300000013000000130000001300000036
+:103E40001300000013000000130000001300000026
+:103E50001300000013000000130000001300000016
+:103E60001300000013000000130000001300000006
+:103E700013000000130000001300000013000000F6
+:103E800013000000130000001300000013000000E6
+:103E900013000000130000001300000013000000D6
+:103EA00013000000130000001300000013000000C6
+:103EB00013000000130000001300000013000000B6
+:103EC00013000000130000001300000013000000A6
+:103ED0001300000013000000130000001300000096
+:103EE0001300000013000000130000001300000086
+:103EF0001300000013000000130000001300000076
+:103F00001300000013000000130000001300000065
+:103F10001300000013000000130000001300000055
+:103F20001300000013000000130000001300000045
+:103F30001300000013000000130000001300000035
+:103F40001300000013000000130000001300000025
+:103F50001300000013000000130000001300000015
+:103F60001300000013000000130000001300000005
+:103F700013000000130000001300000013000000F5
+:103F800013000000130000001300000013000000E5
+:103F900013000000130000001300000013000000D5
+:103FA00013000000130000001300000013000000C5
+:103FB00013000000130000001300000013000000B5
+:103FC00013000000130000001300000013000000A5
+:103FD0001300000013000000130000001300000095
+:103FE0001300000013000000130000001300000085
+:103FF0001300000013000000130000001300000075
+:104000000000000013000000130000001300000077
+:104010001300000013000000130000001300000054
+:104020001300000013000000130000001300000044
+:104030001300000013000000130000001300000034
+:104040001300000013000000130000001300000024
+:104050001300000013000000130000001300000014
+:104060001300000013000000130000001300000004
+:1040700013000000130000001300000013000000F4
+:1040800013000000130000001300000013000000E4
+:1040900013000000130000001300000013000000D4
+:1040A00013000000130000001300000013000000C4
+:1040B00013000000130000001300000013000000B4
+:1040C00013000000130000001300000013000000A4
+:1040D0001300000013000000130000001300000094
+:1040E0001300000013000000130000001300000084
+:1040F0001300000013000000130000001300000074
+:104100001300000013000000130000001300000063
+:104110001300000013000000130000001300000053
+:104120001300000013000000130000001300000043
+:104130001300000013000000130000001300000033
+:104140001300000013000000130000001300000023
+:104150001300000013000000130000001300000013
+:104160001300000013000000130000001300000003
+:1041700013000000130000001300000013000000F3
+:1041800013000000130000001300000013000000E3
+:1041900013000000130000001300000013000000D3
+:1041A00013000000130000001300000013000000C3
+:1041B00013000000130000001300000013000000B3
+:1041C00013000000130000001300000013000000A3
+:1041D0001300000013000000130000001300000093
+:1041E0001300000013000000130000001300000083
+:1041F0001300000013000000130000001300000073
+:104200001300000013000000130000001300000062
+:104210001300000013000000130000001300000052
+:104220001300000013000000130000001300000042
+:104230001300000013000000130000001300000032
+:104240001300000013000000130000001300000022
+:104250001300000013000000130000001300000012
+:104260001300000013000000130000001300000002
+:1042700013000000130000001300000013000000F2
+:1042800013000000130000001300000013000000E2
+:1042900013000000130000001300000013000000D2
+:1042A00013000000130000001300000013000000C2
+:1042B00013000000130000001300000013000000B2
+:1042C00013000000130000001300000013000000A2
+:1042D0001300000013000000130000001300000092
+:1042E0001300000013000000130000001300000082
+:1042F0001300000013000000130000001300000072
+:104300001300000013000000130000001300000061
+:104310001300000013000000130000001300000051
+:104320001300000013000000130000001300000041
+:104330001300000013000000130000001300000031
+:104340001300000013000000130000001300000021
+:104350001300000013000000130000001300000011
+:104360001300000013000000130000001300000001
+:1043700013000000130000001300000013000000F1
+:1043800013000000130000001300000013000000E1
+:1043900013000000130000001300000013000000D1
+:1043A00013000000130000001300000013000000C1
+:1043B00013000000130000001300000013000000B1
+:1043C00013000000130000001300000013000000A1
+:1043D0001300000013000000130000001300000091
+:1043E0001300000013000000130000001300000081
+:1043F0001300000013000000130000001300000071
+:104400001300000013000000130000001300000060
+:104410001300000013000000130000001300000050
+:104420001300000013000000130000001300000040
+:104430001300000013000000130000001300000030
+:104440001300000013000000130000001300000020
+:104450001300000013000000130000001300000010
+:104460001300000013000000130000001300000000
+:1044700013000000130000001300000013000000F0
+:1044800013000000130000001300000013000000E0
+:1044900013000000130000001300000013000000D0
+:1044A00013000000130000001300000013000000C0
+:1044B00013000000130000001300000013000000B0
+:1044C00013000000130000001300000013000000A0
+:1044D0001300000013000000130000001300000090
+:1044E0001300000013000000130000001300000080
+:1044F0001300000013000000130000001300000070
+:10450000130000001300000013000000130000005F
+:10451000130000001300000013000000130000004F
+:10452000130000001300000013000000130000003F
+:10453000130000001300000013000000130000002F
+:10454000130000001300000013000000130000001F
+:10455000130000001300000013000000130000000F
+:1045600013000000130000001300000013000000FF
+:1045700013000000130000001300000013000000EF
+:1045800013000000130000001300000013000000DF
+:1045900013000000130000001300000013000000CF
+:1045A00013000000130000001300000013000000BF
+:1045B00013000000130000001300000013000000AF
+:1045C000130000001300000013000000130000009F
+:1045D000130000001300000013000000130000008F
+:1045E000130000001300000013000000130000007F
+:1045F000130000001300000013000000130000006F
+:10460000130000001300000013000000130000005E
+:10461000130000001300000013000000130000004E
+:10462000130000001300000013000000130000003E
+:10463000130000001300000013000000130000002E
+:10464000130000001300000013000000130000001E
+:10465000130000001300000013000000130000000E
+:1046600013000000130000001300000013000000FE
+:1046700013000000130000001300000013000000EE
+:1046800013000000130000001300000013000000DE
+:1046900013000000130000001300000013000000CE
+:1046A00013000000130000001300000013000000BE
+:1046B00013000000130000001300000013000000AE
+:1046C000130000001300000013000000130000009E
+:1046D000130000001300000013000000130000008E
+:1046E000130000001300000013000000130000007E
+:1046F000130000001300000013000000130000006E
+:10470000130000001300000013000000130000005D
+:10471000130000001300000013000000130000004D
+:10472000130000001300000013000000130000003D
+:10473000130000001300000013000000130000002D
+:10474000130000001300000013000000130000001D
+:10475000130000001300000013000000130000000D
+:1047600013000000130000001300000013000000FD
+:1047700013000000130000001300000013000000ED
+:1047800013000000130000001300000013000000DD
+:1047900013000000130000001300000013000000CD
+:1047A00013000000130000001300000013000000BD
+:1047B00013000000130000001300000013000000AD
+:1047C000130000001300000013000000130000009D
+:1047D000130000001300000013000000130000008D
+:1047E000130000001300000013000000130000007D
+:1047F000130000001300000013000000130000006D
+:10480000130000001300000013000000130000005C
+:10481000130000001300000013000000130000004C
+:10482000130000001300000013000000130000003C
+:10483000130000001300000013000000130000002C
+:10484000130000001300000013000000130000001C
+:10485000130000001300000013000000130000000C
+:1048600013000000130000001300000013000000FC
+:1048700013000000130000001300000013000000EC
+:1048800013000000130000001300000013000000DC
+:1048900013000000130000001300000013000000CC
+:1048A00013000000130000001300000013000000BC
+:1048B00013000000130000001300000013000000AC
+:1048C000130000001300000013000000130000009C
+:1048D000130000001300000013000000130000008C
+:1048E000130000001300000013000000130000007C
+:1048F000130000001300000013000000130000006C
+:10490000130000001300000013000000130000005B
+:10491000130000001300000013000000130000004B
+:10492000130000001300000013000000130000003B
+:10493000130000001300000013000000130000002B
+:10494000130000001300000013000000130000001B
+:10495000130000001300000013000000130000000B
+:1049600013000000130000001300000013000000FB
+:1049700013000000130000001300000013000000EB
+:1049800013000000130000001300000013000000DB
+:1049900013000000130000001300000013000000CB
+:1049A00013000000130000001300000013000000BB
+:1049B00013000000130000001300000013000000AB
+:1049C000130000001300000013000000130000009B
+:1049D000130000001300000013000000130000008B
+:1049E000130000001300000013000000130000007B
+:1049F000130000001300000013000000130000006B
+:104A0000130000001300000013000000130000005A
+:104A1000130000001300000013000000130000004A
+:104A2000130000001300000013000000130000003A
+:104A3000130000001300000013000000130000002A
+:104A4000130000001300000013000000130000001A
+:104A5000130000001300000013000000130000000A
+:104A600013000000130000001300000013000000FA
+:104A700013000000130000001300000013000000EA
+:104A800013000000130000001300000013000000DA
+:104A900013000000130000001300000013000000CA
+:104AA00013000000130000001300000013000000BA
+:104AB00013000000130000001300000013000000AA
+:104AC000130000001300000013000000130000009A
+:104AD000130000001300000013000000130000008A
+:104AE000130000001300000013000000130000007A
+:104AF000130000001300000013000000130000006A
+:104B00001300000013000000130000001300000059
+:104B10001300000013000000130000001300000049
+:104B20001300000013000000130000001300000039
+:104B30001300000013000000130000001300000029
+:104B40001300000013000000130000001300000019
+:104B50001300000013000000130000001300000009
+:104B600013000000130000001300000013000000F9
+:104B700013000000130000001300000013000000E9
+:104B800013000000130000001300000013000000D9
+:104B900013000000130000001300000013000000C9
+:104BA00013000000130000001300000013000000B9
+:104BB00013000000130000001300000013000000A9
+:104BC0001300000013000000130000001300000099
+:104BD0001300000013000000130000001300000089
+:104BE0001300000013000000130000001300000079
+:104BF0001300000013000000130000001300000069
+:104C00001300000013000000130000001300000058
+:104C10001300000013000000130000001300000048
+:104C20001300000013000000130000001300000038
+:104C30001300000013000000130000001300000028
+:104C40001300000013000000130000001300000018
+:104C50001300000013000000130000001300000008
+:104C600013000000130000001300000013000000F8
+:104C700013000000130000001300000013000000E8
+:104C800013000000130000001300000013000000D8
+:104C900013000000130000001300000013000000C8
+:104CA00013000000130000001300000013000000B8
+:104CB00013000000130000001300000013000000A8
+:104CC0001300000013000000130000001300000098
+:104CD0001300000013000000130000001300000088
+:104CE0001300000013000000130000001300000078
+:104CF0001300000013000000130000001300000068
+:104D00001300000013000000130000001300000057
+:104D10001300000013000000130000001300000047
+:104D20001300000013000000130000001300000037
+:104D30001300000013000000130000001300000027
+:104D40001300000013000000130000001300000017
+:104D50001300000013000000130000001300000007
+:104D600013000000130000001300000013000000F7
+:104D700013000000130000001300000013000000E7
+:104D800013000000130000001300000013000000D7
+:104D900013000000130000001300000013000000C7
+:104DA00013000000130000001300000013000000B7
+:104DB00013000000130000001300000013000000A7
+:104DC0001300000013000000130000001300000097
+:104DD0001300000013000000130000001300000087
+:104DE0001300000013000000130000001300000077
+:104DF0001300000013000000130000001300000067
+:104E00001300000013000000130000001300000056
+:104E10001300000013000000130000001300000046
+:104E20001300000013000000130000001300000036
+:104E30001300000013000000130000001300000026
+:104E40001300000013000000130000001300000016
+:104E50001300000013000000130000001300000006
+:104E600013000000130000001300000013000000F6
+:104E700013000000130000001300000013000000E6
+:104E800013000000130000001300000013000000D6
+:104E900013000000130000001300000013000000C6
+:104EA00013000000130000001300000013000000B6
+:104EB00013000000130000001300000013000000A6
+:104EC0001300000013000000130000001300000096
+:104ED0001300000013000000130000001300000086
+:104EE0001300000013000000130000001300000076
+:104EF0001300000013000000130000001300000066
+:104F00001300000013000000130000001300000055
+:104F10001300000013000000130000001300000045
+:104F20001300000013000000130000001300000035
+:104F30001300000013000000130000001300000025
+:104F40001300000013000000130000001300000015
+:104F50001300000013000000130000001300000005
+:104F600013000000130000001300000013000000F5
+:104F700013000000130000001300000013000000E5
+:104F800013000000130000001300000013000000D5
+:104F900013000000130000001300000013000000C5
+:104FA00013000000130000001300000013000000B5
+:104FB00013000000130000001300000013000000A5
+:104FC0001300000013000000130000001300000095
+:104FD0001300000013000000130000001300000085
+:104FE0001300000013000000130000001300000075
+:104FF0001300000013000000130000001300000065
+:10500000000102030405060708090A0B0C0D0E0F28
+:105010001300000013000000130000001300000044
+:105020001300000013000000130000001300000034
+:105030001300000013000000130000001300000024
+:105040001300000013000000130000001300000014
+:105050001300000013000000130000001300000004
+:1050600013000000130000001300000013000000F4
+:1050700013000000130000001300000013000000E4
+:1050800013000000130000001300000013000000D4
+:1050900013000000130000001300000013000000C4
+:1050A00013000000130000001300000013000000B4
+:1050B00013000000130000001300000013000000A4
+:1050C0001300000013000000130000001300000094
+:1050D0001300000013000000130000001300000084
+:1050E0001300000013000000130000001300000074
+:1050F0001300000013000000130000001300000064
+:105100001300000013000000130000001300000053
+:105110001300000013000000130000001300000043
+:105120001300000013000000130000001300000033
+:105130001300000013000000130000001300000023
+:105140001300000013000000130000001300000013
+:105150001300000013000000130000001300000003
+:1051600013000000130000001300000013000000F3
+:1051700013000000130000001300000013000000E3
+:1051800013000000130000001300000013000000D3
+:1051900013000000130000001300000013000000C3
+:1051A00013000000130000001300000013000000B3
+:1051B00013000000130000001300000013000000A3
+:1051C0001300000013000000130000001300000093
+:1051D0001300000013000000130000001300000083
+:1051E0001300000013000000130000001300000073
+:1051F0001300000013000000130000001300000063
+:105200001300000013000000130000001300000052
+:105210001300000013000000130000001300000042
+:105220001300000013000000130000001300000032
+:105230001300000013000000130000001300000022
+:105240001300000013000000130000001300000012
+:105250001300000013000000130000001300000002
+:1052600013000000130000001300000013000000F2
+:1052700013000000130000001300000013000000E2
+:1052800013000000130000001300000013000000D2
+:1052900013000000130000001300000013000000C2
+:1052A00013000000130000001300000013000000B2
+:1052B00013000000130000001300000013000000A2
+:1052C0001300000013000000130000001300000092
+:1052D0001300000013000000130000001300000082
+:1052E0001300000013000000130000001300000072
+:1052F0001300000013000000130000001300000062
+:105300001300000013000000130000001300000051
+:105310001300000013000000130000001300000041
+:105320001300000013000000130000001300000031
+:105330001300000013000000130000001300000021
+:105340001300000013000000130000001300000011
+:105350001300000013000000130000001300000001
+:1053600013000000130000001300000013000000F1
+:1053700013000000130000001300000013000000E1
+:1053800013000000130000001300000013000000D1
+:1053900013000000130000001300000013000000C1
+:1053A00013000000130000001300000013000000B1
+:1053B00013000000130000001300000013000000A1
+:1053C0001300000013000000130000001300000091
+:1053D0001300000013000000130000001300000081
+:1053E0001300000013000000130000001300000071
+:1053F0001300000013000000130000001300000061
+:105400001300000013000000130000001300000050
+:105410001300000013000000130000001300000040
+:105420001300000013000000130000001300000030
+:105430001300000013000000130000001300000020
+:105440001300000013000000130000001300000010
+:105450001300000013000000130000001300000000
+:1054600013000000130000001300000013000000F0
+:1054700013000000130000001300000013000000E0
+:1054800013000000130000001300000013000000D0
+:1054900013000000130000001300000013000000C0
+:1054A00013000000130000001300000013000000B0
+:1054B00013000000130000001300000013000000A0
+:1054C0001300000013000000130000001300000090
+:1054D0001300000013000000130000001300000080
+:1054E0001300000013000000130000001300000070
+:1054F0001300000013000000130000001300000060
+:10550000130000001300000013000000130000004F
+:10551000130000001300000013000000130000003F
+:10552000130000001300000013000000130000002F
+:10553000130000001300000013000000130000001F
+:10554000130000001300000013000000130000000F
+:1055500013000000130000001300000013000000FF
+:1055600013000000130000001300000013000000EF
+:1055700013000000130000001300000013000000DF
+:1055800013000000130000001300000013000000CF
+:1055900013000000130000001300000013000000BF
+:1055A00013000000130000001300000013000000AF
+:1055B000130000001300000013000000130000009F
+:1055C000130000001300000013000000130000008F
+:1055D000130000001300000013000000130000007F
+:1055E000130000001300000013000000130000006F
+:1055F000130000001300000013000000130000005F
+:10560000130000001300000013000000130000004E
+:10561000130000001300000013000000130000003E
+:10562000130000001300000013000000130000002E
+:10563000130000001300000013000000130000001E
+:10564000130000001300000013000000130000000E
+:1056500013000000130000001300000013000000FE
+:1056600013000000130000001300000013000000EE
+:1056700013000000130000001300000013000000DE
+:1056800013000000130000001300000013000000CE
+:1056900013000000130000001300000013000000BE
+:1056A00013000000130000001300000013000000AE
+:1056B000130000001300000013000000130000009E
+:1056C000130000001300000013000000130000008E
+:1056D000130000001300000013000000130000007E
+:1056E000130000001300000013000000130000006E
+:1056F000130000001300000013000000130000005E
+:10570000130000001300000013000000130000004D
+:10571000130000001300000013000000130000003D
+:10572000130000001300000013000000130000002D
+:10573000130000001300000013000000130000001D
+:10574000130000001300000013000000130000000D
+:1057500013000000130000001300000013000000FD
+:1057600013000000130000001300000013000000ED
+:1057700013000000130000001300000013000000DD
+:1057800013000000130000001300000013000000CD
+:1057900013000000130000001300000013000000BD
+:1057A00013000000130000001300000013000000AD
+:1057B000130000001300000013000000130000009D
+:1057C000130000001300000013000000130000008D
+:1057D000130000001300000013000000130000007D
+:1057E000130000001300000013000000130000006D
+:1057F000130000001300000013000000130000005D
+:10580000130000001300000013000000130000004C
+:10581000130000001300000013000000130000003C
+:10582000130000001300000013000000130000002C
+:10583000130000001300000013000000130000001C
+:10584000130000001300000013000000130000000C
+:1058500013000000130000001300000013000000FC
+:1058600013000000130000001300000013000000EC
+:1058700013000000130000001300000013000000DC
+:1058800013000000130000001300000013000000CC
+:1058900013000000130000001300000013000000BC
+:1058A00013000000130000001300000013000000AC
+:1058B000130000001300000013000000130000009C
+:1058C000130000001300000013000000130000008C
+:1058D000130000001300000013000000130000007C
+:1058E000130000001300000013000000130000006C
+:1058F000130000001300000013000000130000005C
+:10590000130000001300000013000000130000004B
+:10591000130000001300000013000000130000003B
+:10592000130000001300000013000000130000002B
+:10593000130000001300000013000000130000001B
+:10594000130000001300000013000000130000000B
+:1059500013000000130000001300000013000000FB
+:1059600013000000130000001300000013000000EB
+:1059700013000000130000001300000013000000DB
+:1059800013000000130000001300000013000000CB
+:1059900013000000130000001300000013000000BB
+:1059A00013000000130000001300000013000000AB
+:1059B000130000001300000013000000130000009B
+:1059C000130000001300000013000000130000008B
+:1059D000130000001300000013000000130000007B
+:1059E000130000001300000013000000130000006B
+:1059F000130000001300000013000000130000005B
+:105A0000130000001300000013000000130000004A
+:105A1000130000001300000013000000130000003A
+:105A2000130000001300000013000000130000002A
+:105A3000130000001300000013000000130000001A
+:105A4000130000001300000013000000130000000A
+:105A500013000000130000001300000013000000FA
+:105A600013000000130000001300000013000000EA
+:105A700013000000130000001300000013000000DA
+:105A800013000000130000001300000013000000CA
+:105A900013000000130000001300000013000000BA
+:105AA00013000000130000001300000013000000AA
+:105AB000130000001300000013000000130000009A
+:105AC000130000001300000013000000130000008A
+:105AD000130000001300000013000000130000007A
+:105AE000130000001300000013000000130000006A
+:105AF000130000001300000013000000130000005A
+:105B00001300000013000000130000001300000049
+:105B10001300000013000000130000001300000039
+:105B20001300000013000000130000001300000029
+:105B30001300000013000000130000001300000019
+:105B40001300000013000000130000001300000009
+:105B500013000000130000001300000013000000F9
+:105B600013000000130000001300000013000000E9
+:105B700013000000130000001300000013000000D9
+:105B800013000000130000001300000013000000C9
+:105B900013000000130000001300000013000000B9
+:105BA00013000000130000001300000013000000A9
+:105BB0001300000013000000130000001300000099
+:105BC0001300000013000000130000001300000089
+:105BD0001300000013000000130000001300000079
+:105BE0001300000013000000130000001300000069
+:105BF0001300000013000000130000001300000059
+:105C00001300000013000000130000001300000048
+:105C10001300000013000000130000001300000038
+:105C20001300000013000000130000001300000028
+:105C30001300000013000000130000001300000018
+:105C40001300000013000000130000001300000008
+:105C500013000000130000001300000013000000F8
+:105C600013000000130000001300000013000000E8
+:105C700013000000130000001300000013000000D8
+:105C800013000000130000001300000013000000C8
+:105C900013000000130000001300000013000000B8
+:105CA00013000000130000001300000013000000A8
+:105CB0001300000013000000130000001300000098
+:105CC0001300000013000000130000001300000088
+:105CD0001300000013000000130000001300000078
+:105CE0001300000013000000130000001300000068
+:105CF0001300000013000000130000001300000058
+:105D00001300000013000000130000001300000047
+:105D10001300000013000000130000001300000037
+:105D20001300000013000000130000001300000027
+:105D30001300000013000000130000001300000017
+:105D40001300000013000000130000001300000007
+:105D500013000000130000001300000013000000F7
+:105D600013000000130000001300000013000000E7
+:105D700013000000130000001300000013000000D7
+:105D800013000000130000001300000013000000C7
+:105D900013000000130000001300000013000000B7
+:105DA00013000000130000001300000013000000A7
+:105DB0001300000013000000130000001300000097
+:105DC0001300000013000000130000001300000087
+:105DD0001300000013000000130000001300000077
+:105DE0001300000013000000130000001300000067
+:105DF0001300000013000000130000001300000057
+:105E00001300000013000000130000001300000046
+:105E10001300000013000000130000001300000036
+:105E20001300000013000000130000001300000026
+:105E30001300000013000000130000001300000016
+:105E40001300000013000000130000001300000006
+:105E500013000000130000001300000013000000F6
+:105E600013000000130000001300000013000000E6
+:105E700013000000130000001300000013000000D6
+:105E800013000000130000001300000013000000C6
+:105E900013000000130000001300000013000000B6
+:105EA00013000000130000001300000013000000A6
+:105EB0001300000013000000130000001300000096
+:105EC0001300000013000000130000001300000086
+:105ED0001300000013000000130000001300000076
+:105EE0001300000013000000130000001300000066
+:105EF0001300000013000000130000001300000056
+:105F00001300000013000000130000001300000045
+:105F10001300000013000000130000001300000035
+:105F20001300000013000000130000001300000025
+:105F30001300000013000000130000001300000015
+:105F40001300000013000000130000001300000005
+:105F500013000000130000001300000013000000F5
+:105F600013000000130000001300000013000000E5
+:105F700013000000130000001300000013000000D5
+:105F800013000000130000001300000013000000C5
+:105F900013000000130000001300000013000000B5
+:105FA00013000000130000001300000013000000A5
+:105FB0001300000013000000130000001300000095
+:105FC0001300000013000000130000001300000085
+:105FD0001300000013000000130000001300000075
+:105FE0001300000013000000130000001300000065
+:105FF0001300000013000000130000001300000055
+:10600000101112131415161718191A1B1C1D1E1F18
+:106010001300000013000000130000001300000034
+:106020001300000013000000130000001300000024
+:106030001300000013000000130000001300000014
+:106040001300000013000000130000001300000004
+:1060500013000000130000001300000013000000F4
+:1060600013000000130000001300000013000000E4
+:1060700013000000130000001300000013000000D4
+:1060800013000000130000001300000013000000C4
+:1060900013000000130000001300000013000000B4
+:1060A00013000000130000001300000013000000A4
+:1060B0001300000013000000130000001300000094
+:1060C0001300000013000000130000001300000084
+:1060D0001300000013000000130000001300000074
+:1060E0001300000013000000130000001300000064
+:1060F0001300000013000000130000001300000054
+:106100001300000013000000130000001300000043
+:106110001300000013000000130000001300000033
+:106120001300000013000000130000001300000023
+:106130001300000013000000130000001300000013
+:106140001300000013000000130000001300000003
+:1061500013000000130000001300000013000000F3
+:1061600013000000130000001300000013000000E3
+:1061700013000000130000001300000013000000D3
+:1061800013000000130000001300000013000000C3
+:1061900013000000130000001300000013000000B3
+:1061A00013000000130000001300000013000000A3
+:1061B0001300000013000000130000001300000093
+:1061C0001300000013000000130000001300000083
+:1061D0001300000013000000130000001300000073
+:1061E0001300000013000000130000001300000063
+:1061F0001300000013000000130000001300000053
+:106200001300000013000000130000001300000042
+:106210001300000013000000130000001300000032
+:106220001300000013000000130000001300000022
+:106230001300000013000000130000001300000012
+:106240001300000013000000130000001300000002
+:1062500013000000130000001300000013000000F2
+:1062600013000000130000001300000013000000E2
+:1062700013000000130000001300000013000000D2
+:1062800013000000130000001300000013000000C2
+:1062900013000000130000001300000013000000B2
+:1062A00013000000130000001300000013000000A2
+:1062B0001300000013000000130000001300000092
+:1062C0001300000013000000130000001300000082
+:1062D0001300000013000000130000001300000072
+:1062E0001300000013000000130000001300000062
+:1062F0001300000013000000130000001300000052
+:106300001300000013000000130000001300000041
+:106310001300000013000000130000001300000031
+:106320001300000013000000130000001300000021
+:106330001300000013000000130000001300000011
+:106340001300000013000000130000001300000001
+:1063500013000000130000001300000013000000F1
+:1063600013000000130000001300000013000000E1
+:1063700013000000130000001300000013000000D1
+:1063800013000000130000001300000013000000C1
+:1063900013000000130000001300000013000000B1
+:1063A00013000000130000001300000013000000A1
+:1063B0001300000013000000130000001300000091
+:1063C0001300000013000000130000001300000081
+:1063D0001300000013000000130000001300000071
+:1063E0001300000013000000130000001300000061
+:1063F0001300000013000000130000001300000051
+:106400001300000013000000130000001300000040
+:106410001300000013000000130000001300000030
+:106420001300000013000000130000001300000020
+:106430001300000013000000130000001300000010
+:106440001300000013000000130000001300000000
+:1064500013000000130000001300000013000000F0
+:1064600013000000130000001300000013000000E0
+:1064700013000000130000001300000013000000D0
+:1064800013000000130000001300000013000000C0
+:1064900013000000130000001300000013000000B0
+:1064A00013000000130000001300000013000000A0
+:1064B0001300000013000000130000001300000090
+:1064C0001300000013000000130000001300000080
+:1064D0001300000013000000130000001300000070
+:1064E0001300000013000000130000001300000060
+:1064F0001300000013000000130000001300000050
+:10650000130000001300000013000000130000003F
+:10651000130000001300000013000000130000002F
+:10652000130000001300000013000000130000001F
+:10653000130000001300000013000000130000000F
+:1065400013000000130000001300000013000000FF
+:1065500013000000130000001300000013000000EF
+:1065600013000000130000001300000013000000DF
+:1065700013000000130000001300000013000000CF
+:1065800013000000130000001300000013000000BF
+:1065900013000000130000001300000013000000AF
+:1065A000130000001300000013000000130000009F
+:1065B000130000001300000013000000130000008F
+:1065C000130000001300000013000000130000007F
+:1065D000130000001300000013000000130000006F
+:1065E000130000001300000013000000130000005F
+:1065F000130000001300000013000000130000004F
+:10660000130000001300000013000000130000003E
+:10661000130000001300000013000000130000002E
+:10662000130000001300000013000000130000001E
+:10663000130000001300000013000000130000000E
+:1066400013000000130000001300000013000000FE
+:1066500013000000130000001300000013000000EE
+:1066600013000000130000001300000013000000DE
+:1066700013000000130000001300000013000000CE
+:1066800013000000130000001300000013000000BE
+:1066900013000000130000001300000013000000AE
+:1066A000130000001300000013000000130000009E
+:1066B000130000001300000013000000130000008E
+:1066C000130000001300000013000000130000007E
+:1066D000130000001300000013000000130000006E
+:1066E000130000001300000013000000130000005E
+:1066F000130000001300000013000000130000004E
+:10670000130000001300000013000000130000003D
+:10671000130000001300000013000000130000002D
+:10672000130000001300000013000000130000001D
+:10673000130000001300000013000000130000000D
+:1067400013000000130000001300000013000000FD
+:1067500013000000130000001300000013000000ED
+:1067600013000000130000001300000013000000DD
+:1067700013000000130000001300000013000000CD
+:1067800013000000130000001300000013000000BD
+:1067900013000000130000001300000013000000AD
+:1067A000130000001300000013000000130000009D
+:1067B000130000001300000013000000130000008D
+:1067C000130000001300000013000000130000007D
+:1067D000130000001300000013000000130000006D
+:1067E000130000001300000013000000130000005D
+:1067F000130000001300000013000000130000004D
+:10680000130000001300000013000000130000003C
+:10681000130000001300000013000000130000002C
+:10682000130000001300000013000000130000001C
+:10683000130000001300000013000000130000000C
+:1068400013000000130000001300000013000000FC
+:1068500013000000130000001300000013000000EC
+:1068600013000000130000001300000013000000DC
+:1068700013000000130000001300000013000000CC
+:1068800013000000130000001300000013000000BC
+:1068900013000000130000001300000013000000AC
+:1068A000130000001300000013000000130000009C
+:1068B000130000001300000013000000130000008C
+:1068C000130000001300000013000000130000007C
+:1068D000130000001300000013000000130000006C
+:1068E000130000001300000013000000130000005C
+:1068F000130000001300000013000000130000004C
+:10690000130000001300000013000000130000003B
+:10691000130000001300000013000000130000002B
+:10692000130000001300000013000000130000001B
+:10693000130000001300000013000000130000000B
+:1069400013000000130000001300000013000000FB
+:1069500013000000130000001300000013000000EB
+:1069600013000000130000001300000013000000DB
+:1069700013000000130000001300000013000000CB
+:1069800013000000130000001300000013000000BB
+:1069900013000000130000001300000013000000AB
+:1069A000130000001300000013000000130000009B
+:1069B000130000001300000013000000130000008B
+:1069C000130000001300000013000000130000007B
+:1069D000130000001300000013000000130000006B
+:1069E000130000001300000013000000130000005B
+:1069F000130000001300000013000000130000004B
+:106A0000130000001300000013000000130000003A
+:106A1000130000001300000013000000130000002A
+:106A2000130000001300000013000000130000001A
+:106A3000130000001300000013000000130000000A
+:106A400013000000130000001300000013000000FA
+:106A500013000000130000001300000013000000EA
+:106A600013000000130000001300000013000000DA
+:106A700013000000130000001300000013000000CA
+:106A800013000000130000001300000013000000BA
+:106A900013000000130000001300000013000000AA
+:106AA000130000001300000013000000130000009A
+:106AB000130000001300000013000000130000008A
+:106AC000130000001300000013000000130000007A
+:106AD000130000001300000013000000130000006A
+:106AE000130000001300000013000000130000005A
+:106AF000130000001300000013000000130000004A
+:106B00001300000013000000130000001300000039
+:106B10001300000013000000130000001300000029
+:106B20001300000013000000130000001300000019
+:106B30001300000013000000130000001300000009
+:106B400013000000130000001300000013000000F9
+:106B500013000000130000001300000013000000E9
+:106B600013000000130000001300000013000000D9
+:106B700013000000130000001300000013000000C9
+:106B800013000000130000001300000013000000B9
+:106B900013000000130000001300000013000000A9
+:106BA0001300000013000000130000001300000099
+:106BB0001300000013000000130000001300000089
+:106BC0001300000013000000130000001300000079
+:106BD0001300000013000000130000001300000069
+:106BE0001300000013000000130000001300000059
+:106BF0001300000013000000130000001300000049
+:106C00001300000013000000130000001300000038
+:106C10001300000013000000130000001300000028
+:106C20001300000013000000130000001300000018
+:106C30001300000013000000130000001300000008
+:106C400013000000130000001300000013000000F8
+:106C500013000000130000001300000013000000E8
+:106C600013000000130000001300000013000000D8
+:106C700013000000130000001300000013000000C8
+:106C800013000000130000001300000013000000B8
+:106C900013000000130000001300000013000000A8
+:106CA0001300000013000000130000001300000098
+:106CB0001300000013000000130000001300000088
+:106CC0001300000013000000130000001300000078
+:106CD0001300000013000000130000001300000068
+:106CE0001300000013000000130000001300000058
+:106CF0001300000013000000130000001300000048
+:106D00001300000013000000130000001300000037
+:106D10001300000013000000130000001300000027
+:106D20001300000013000000130000001300000017
+:106D30001300000013000000130000001300000007
+:106D400013000000130000001300000013000000F7
+:106D500013000000130000001300000013000000E7
+:106D600013000000130000001300000013000000D7
+:106D700013000000130000001300000013000000C7
+:106D800013000000130000001300000013000000B7
+:106D900013000000130000001300000013000000A7
+:106DA0001300000013000000130000001300000097
+:106DB0001300000013000000130000001300000087
+:106DC0001300000013000000130000001300000077
+:106DD0001300000013000000130000001300000067
+:106DE0001300000013000000130000001300000057
+:106DF0001300000013000000130000001300000047
+:106E00001300000013000000130000001300000036
+:106E10001300000013000000130000001300000026
+:106E20001300000013000000130000001300000016
+:106E30001300000013000000130000001300000006
+:106E400013000000130000001300000013000000F6
+:106E500013000000130000001300000013000000E6
+:106E600013000000130000001300000013000000D6
+:106E700013000000130000001300000013000000C6
+:106E800013000000130000001300000013000000B6
+:106E900013000000130000001300000013000000A6
+:106EA0001300000013000000130000001300000096
+:106EB0001300000013000000130000001300000086
+:106EC0001300000013000000130000001300000076
+:106ED0001300000013000000130000001300000066
+:106EE0001300000013000000130000001300000056
+:106EF0001300000013000000130000001300000046
+:106F00001300000013000000130000001300000035
+:106F10001300000013000000130000001300000025
+:106F20001300000013000000130000001300000015
+:106F30001300000013000000130000001300000005
+:106F400013000000130000001300000013000000F5
+:106F500013000000130000001300000013000000E5
+:106F600013000000130000001300000013000000D5
+:106F700013000000130000001300000013000000C5
+:106F800013000000130000001300000013000000B5
+:106F900013000000130000001300000013000000A5
+:106FA0001300000013000000130000001300000095
+:106FB0001300000013000000130000001300000085
+:106FC0001300000013000000130000001300000075
+:106FD0001300000013000000130000001300000065
+:106FE0001300000013000000130000001300000055
+:106FF0001300000013000000130000001300000045
+:10700000202122232425262728292A2B2C2D2E2F08
+:107010001300000013000000130000001300000024
+:107020001300000013000000130000001300000014
+:107030001300000013000000130000001300000004
+:1070400013000000130000001300000013000000F4
+:1070500013000000130000001300000013000000E4
+:1070600013000000130000001300000013000000D4
+:1070700013000000130000001300000013000000C4
+:1070800013000000130000001300000013000000B4
+:1070900013000000130000001300000013000000A4
+:1070A0001300000013000000130000001300000094
+:1070B0001300000013000000130000001300000084
+:1070C0001300000013000000130000001300000074
+:1070D0001300000013000000130000001300000064
+:1070E0001300000013000000130000001300000054
+:1070F0001300000013000000130000001300000044
+:107100001300000013000000130000001300000033
+:107110001300000013000000130000001300000023
+:107120001300000013000000130000001300000013
+:107130001300000013000000130000001300000003
+:1071400013000000130000001300000013000000F3
+:1071500013000000130000001300000013000000E3
+:1071600013000000130000001300000013000000D3
+:1071700013000000130000001300000013000000C3
+:1071800013000000130000001300000013000000B3
+:1071900013000000130000001300000013000000A3
+:1071A0001300000013000000130000001300000093
+:1071B0001300000013000000130000001300000083
+:1071C0001300000013000000130000001300000073
+:1071D0001300000013000000130000001300000063
+:1071E0001300000013000000130000001300000053
+:1071F0001300000013000000130000001300000043
+:107200001300000013000000130000001300000032
+:107210001300000013000000130000001300000022
+:107220001300000013000000130000001300000012
+:107230001300000013000000130000001300000002
+:1072400013000000130000001300000013000000F2
+:1072500013000000130000001300000013000000E2
+:1072600013000000130000001300000013000000D2
+:1072700013000000130000001300000013000000C2
+:1072800013000000130000001300000013000000B2
+:1072900013000000130000001300000013000000A2
+:1072A0001300000013000000130000001300000092
+:1072B0001300000013000000130000001300000082
+:1072C0001300000013000000130000001300000072
+:1072D0001300000013000000130000001300000062
+:1072E0001300000013000000130000001300000052
+:1072F0001300000013000000130000001300000042
+:107300001300000013000000130000001300000031
+:107310001300000013000000130000001300000021
+:107320001300000013000000130000001300000011
+:107330001300000013000000130000001300000001
+:1073400013000000130000001300000013000000F1
+:1073500013000000130000001300000013000000E1
+:1073600013000000130000001300000013000000D1
+:1073700013000000130000001300000013000000C1
+:1073800013000000130000001300000013000000B1
+:1073900013000000130000001300000013000000A1
+:1073A0001300000013000000130000001300000091
+:1073B0001300000013000000130000001300000081
+:1073C0001300000013000000130000001300000071
+:1073D0001300000013000000130000001300000061
+:1073E0001300000013000000130000001300000051
+:1073F0001300000013000000130000001300000041
+:107400001300000013000000130000001300000030
+:107410001300000013000000130000001300000020
+:107420001300000013000000130000001300000010
+:107430001300000013000000130000001300000000
+:1074400013000000130000001300000013000000F0
+:1074500013000000130000001300000013000000E0
+:1074600013000000130000001300000013000000D0
+:1074700013000000130000001300000013000000C0
+:1074800013000000130000001300000013000000B0
+:1074900013000000130000001300000013000000A0
+:1074A0001300000013000000130000001300000090
+:1074B0001300000013000000130000001300000080
+:1074C0001300000013000000130000001300000070
+:1074D0001300000013000000130000001300000060
+:1074E0001300000013000000130000001300000050
+:1074F0001300000013000000130000001300000040
+:10750000130000001300000013000000130000002F
+:10751000130000001300000013000000130000001F
+:10752000130000001300000013000000130000000F
+:1075300013000000130000001300000013000000FF
+:1075400013000000130000001300000013000000EF
+:1075500013000000130000001300000013000000DF
+:1075600013000000130000001300000013000000CF
+:1075700013000000130000001300000013000000BF
+:1075800013000000130000001300000013000000AF
+:10759000130000001300000013000000130000009F
+:1075A000130000001300000013000000130000008F
+:1075B000130000001300000013000000130000007F
+:1075C000130000001300000013000000130000006F
+:1075D000130000001300000013000000130000005F
+:1075E000130000001300000013000000130000004F
+:1075F000130000001300000013000000130000003F
+:10760000130000001300000013000000130000002E
+:10761000130000001300000013000000130000001E
+:10762000130000001300000013000000130000000E
+:1076300013000000130000001300000013000000FE
+:1076400013000000130000001300000013000000EE
+:1076500013000000130000001300000013000000DE
+:1076600013000000130000001300000013000000CE
+:1076700013000000130000001300000013000000BE
+:1076800013000000130000001300000013000000AE
+:10769000130000001300000013000000130000009E
+:1076A000130000001300000013000000130000008E
+:1076B000130000001300000013000000130000007E
+:1076C000130000001300000013000000130000006E
+:1076D000130000001300000013000000130000005E
+:1076E000130000001300000013000000130000004E
+:1076F000130000001300000013000000130000003E
+:10770000130000001300000013000000130000002D
+:10771000130000001300000013000000130000001D
+:10772000130000001300000013000000130000000D
+:1077300013000000130000001300000013000000FD
+:1077400013000000130000001300000013000000ED
+:1077500013000000130000001300000013000000DD
+:1077600013000000130000001300000013000000CD
+:1077700013000000130000001300000013000000BD
+:1077800013000000130000001300000013000000AD
+:10779000130000001300000013000000130000009D
+:1077A000130000001300000013000000130000008D
+:1077B000130000001300000013000000130000007D
+:1077C000130000001300000013000000130000006D
+:1077D000130000001300000013000000130000005D
+:1077E000130000001300000013000000130000004D
+:1077F000130000001300000013000000130000003D
+:10780000130000001300000013000000130000002C
+:10781000130000001300000013000000130000001C
+:10782000130000001300000013000000130000000C
+:1078300013000000130000001300000013000000FC
+:1078400013000000130000001300000013000000EC
+:1078500013000000130000001300000013000000DC
+:1078600013000000130000001300000013000000CC
+:1078700013000000130000001300000013000000BC
+:1078800013000000130000001300000013000000AC
+:10789000130000001300000013000000130000009C
+:1078A000130000001300000013000000130000008C
+:1078B000130000001300000013000000130000007C
+:1078C000130000001300000013000000130000006C
+:1078D000130000001300000013000000130000005C
+:1078E000130000001300000013000000130000004C
+:1078F000130000001300000013000000130000003C
+:10790000130000001300000013000000130000002B
+:10791000130000001300000013000000130000001B
+:10792000130000001300000013000000130000000B
+:1079300013000000130000001300000013000000FB
+:1079400013000000130000001300000013000000EB
+:1079500013000000130000001300000013000000DB
+:1079600013000000130000001300000013000000CB
+:1079700013000000130000001300000013000000BB
+:1079800013000000130000001300000013000000AB
+:10799000130000001300000013000000130000009B
+:1079A000130000001300000013000000130000008B
+:1079B000130000001300000013000000130000007B
+:1079C000130000001300000013000000130000006B
+:1079D000130000001300000013000000130000005B
+:1079E000130000001300000013000000130000004B
+:1079F000130000001300000013000000130000003B
+:107A0000130000001300000013000000130000002A
+:107A1000130000001300000013000000130000001A
+:107A2000130000001300000013000000130000000A
+:107A300013000000130000001300000013000000FA
+:107A400013000000130000001300000013000000EA
+:107A500013000000130000001300000013000000DA
+:107A600013000000130000001300000013000000CA
+:107A700013000000130000001300000013000000BA
+:107A800013000000130000001300000013000000AA
+:107A9000130000001300000013000000130000009A
+:107AA000130000001300000013000000130000008A
+:107AB000130000001300000013000000130000007A
+:107AC000130000001300000013000000130000006A
+:107AD000130000001300000013000000130000005A
+:107AE000130000001300000013000000130000004A
+:107AF000130000001300000013000000130000003A
+:107B00001300000013000000130000001300000029
+:107B10001300000013000000130000001300000019
+:107B20001300000013000000130000001300000009
+:107B300013000000130000001300000013000000F9
+:107B400013000000130000001300000013000000E9
+:107B500013000000130000001300000013000000D9
+:107B600013000000130000001300000013000000C9
+:107B700013000000130000001300000013000000B9
+:107B800013000000130000001300000013000000A9
+:107B90001300000013000000130000001300000099
+:107BA0001300000013000000130000001300000089
+:107BB0001300000013000000130000001300000079
+:107BC0001300000013000000130000001300000069
+:107BD0001300000013000000130000001300000059
+:107BE0001300000013000000130000001300000049
+:107BF0001300000013000000130000001300000039
+:107C00001300000013000000130000001300000028
+:107C10001300000013000000130000001300000018
+:107C20001300000013000000130000001300000008
+:107C300013000000130000001300000013000000F8
+:107C400013000000130000001300000013000000E8
+:107C500013000000130000001300000013000000D8
+:107C600013000000130000001300000013000000C8
+:107C700013000000130000001300000013000000B8
+:107C800013000000130000001300000013000000A8
+:107C90001300000013000000130000001300000098
+:107CA0001300000013000000130000001300000088
+:107CB0001300000013000000130000001300000078
+:107CC0001300000013000000130000001300000068
+:107CD0001300000013000000130000001300000058
+:107CE0001300000013000000130000001300000048
+:107CF0001300000013000000130000001300000038
+:107D00001300000013000000130000001300000027
+:107D10001300000013000000130000001300000017
+:107D20001300000013000000130000001300000007
+:107D300013000000130000001300000013000000F7
+:107D400013000000130000001300000013000000E7
+:107D500013000000130000001300000013000000D7
+:107D600013000000130000001300000013000000C7
+:107D700013000000130000001300000013000000B7
+:107D800013000000130000001300000013000000A7
+:107D90001300000013000000130000001300000097
+:107DA0001300000013000000130000001300000087
+:107DB0001300000013000000130000001300000077
+:107DC0001300000013000000130000001300000067
+:107DD0001300000013000000130000001300000057
+:107DE0001300000013000000130000001300000047
+:107DF0001300000013000000130000001300000037
+:107E00001300000013000000130000001300000026
+:107E10001300000013000000130000001300000016
+:107E20001300000013000000130000001300000006
+:107E300013000000130000001300000013000000F6
+:107E400013000000130000001300000013000000E6
+:107E500013000000130000001300000013000000D6
+:107E600013000000130000001300000013000000C6
+:107E700013000000130000001300000013000000B6
+:107E800013000000130000001300000013000000A6
+:107E90001300000013000000130000001300000096
+:107EA0001300000013000000130000001300000086
+:107EB0001300000013000000130000001300000076
+:107EC0001300000013000000130000001300000066
+:107ED0001300000013000000130000001300000056
+:107EE0001300000013000000130000001300000046
+:107EF0001300000013000000130000001300000036
+:107F00001300000013000000130000001300000025
+:107F10001300000013000000130000001300000015
+:107F20001300000013000000130000001300000005
+:107F300013000000130000001300000013000000F5
+:107F400013000000130000001300000013000000E5
+:107F500013000000130000001300000013000000D5
+:107F600013000000130000001300000013000000C5
+:107F700013000000130000001300000013000000B5
+:107F800013000000130000001300000013000000A5
+:107F90001300000013000000130000001300000095
+:107FA0001300000013000000130000001300000085
+:107FB0001300000013000000130000001300000075
+:107FC0001300000013000000130000001300000065
+:107FD0001300000013000000130000001300000055
+:107FE0001300000013000000130000001300000045
+:107FF0001300000013000000130000001300000035
+:10800000303132333435363738393A3B3C3D3E3FF8
+:108010001300000013000000130000001300000014
+:108020001300000013000000130000001300000004
+:1080300013000000130000001300000013000000F4
+:1080400013000000130000001300000013000000E4
+:1080500013000000130000001300000013000000D4
+:1080600013000000130000001300000013000000C4
+:1080700013000000130000001300000013000000B4
+:1080800013000000130000001300000013000000A4
+:108090001300000013000000130000001300000094
+:1080A0001300000013000000130000001300000084
+:1080B0001300000013000000130000001300000074
+:1080C0001300000013000000130000001300000064
+:1080D0001300000013000000130000001300000054
+:1080E0001300000013000000130000001300000044
+:1080F0001300000013000000130000001300000034
+:108100001300000013000000130000001300000023
+:108110001300000013000000130000001300000013
+:108120001300000013000000130000001300000003
+:1081300013000000130000001300000013000000F3
+:1081400013000000130000001300000013000000E3
+:1081500013000000130000001300000013000000D3
+:1081600013000000130000001300000013000000C3
+:1081700013000000130000001300000013000000B3
+:1081800013000000130000001300000013000000A3
+:108190001300000013000000130000001300000093
+:1081A0001300000013000000130000001300000083
+:1081B0001300000013000000130000001300000073
+:1081C0001300000013000000130000001300000063
+:1081D0001300000013000000130000001300000053
+:1081E0001300000013000000130000001300000043
+:1081F0001300000013000000130000001300000033
+:108200001300000013000000130000001300000022
+:108210001300000013000000130000001300000012
+:108220001300000013000000130000001300000002
+:1082300013000000130000001300000013000000F2
+:1082400013000000130000001300000013000000E2
+:1082500013000000130000001300000013000000D2
+:1082600013000000130000001300000013000000C2
+:1082700013000000130000001300000013000000B2
+:1082800013000000130000001300000013000000A2
+:108290001300000013000000130000001300000092
+:1082A0001300000013000000130000001300000082
+:1082B0001300000013000000130000001300000072
+:1082C0001300000013000000130000001300000062
+:1082D0001300000013000000130000001300000052
+:1082E0001300000013000000130000001300000042
+:1082F0001300000013000000130000001300000032
+:108300001300000013000000130000001300000021
+:108310001300000013000000130000001300000011
+:108320001300000013000000130000001300000001
+:1083300013000000130000001300000013000000F1
+:1083400013000000130000001300000013000000E1
+:1083500013000000130000001300000013000000D1
+:1083600013000000130000001300000013000000C1
+:1083700013000000130000001300000013000000B1
+:1083800013000000130000001300000013000000A1
+:108390001300000013000000130000001300000091
+:1083A0001300000013000000130000001300000081
+:1083B0001300000013000000130000001300000071
+:1083C0001300000013000000130000001300000061
+:1083D0001300000013000000130000001300000051
+:1083E0001300000013000000130000001300000041
+:1083F0001300000013000000130000001300000031
+:108400001300000013000000130000001300000020
+:108410001300000013000000130000001300000010
+:108420001300000013000000130000001300000000
+:1084300013000000130000001300000013000000F0
+:1084400013000000130000001300000013000000E0
+:1084500013000000130000001300000013000000D0
+:1084600013000000130000001300000013000000C0
+:1084700013000000130000001300000013000000B0
+:1084800013000000130000001300000013000000A0
+:108490001300000013000000130000001300000090
+:1084A0001300000013000000130000001300000080
+:1084B0001300000013000000130000001300000070
+:1084C0001300000013000000130000001300000060
+:1084D0001300000013000000130000001300000050
+:1084E0001300000013000000130000001300000040
+:1084F0001300000013000000130000001300000030
+:10850000130000001300000013000000130000001F
+:10851000130000001300000013000000130000000F
+:1085200013000000130000001300000013000000FF
+:1085300013000000130000001300000013000000EF
+:1085400013000000130000001300000013000000DF
+:1085500013000000130000001300000013000000CF
+:1085600013000000130000001300000013000000BF
+:1085700013000000130000001300000013000000AF
+:10858000130000001300000013000000130000009F
+:10859000130000001300000013000000130000008F
+:1085A000130000001300000013000000130000007F
+:1085B000130000001300000013000000130000006F
+:1085C000130000001300000013000000130000005F
+:1085D000130000001300000013000000130000004F
+:1085E000130000001300000013000000130000003F
+:1085F000130000001300000013000000130000002F
+:10860000130000001300000013000000130000001E
+:10861000130000001300000013000000130000000E
+:1086200013000000130000001300000013000000FE
+:1086300013000000130000001300000013000000EE
+:1086400013000000130000001300000013000000DE
+:1086500013000000130000001300000013000000CE
+:1086600013000000130000001300000013000000BE
+:1086700013000000130000001300000013000000AE
+:10868000130000001300000013000000130000009E
+:10869000130000001300000013000000130000008E
+:1086A000130000001300000013000000130000007E
+:1086B000130000001300000013000000130000006E
+:1086C000130000001300000013000000130000005E
+:1086D000130000001300000013000000130000004E
+:1086E000130000001300000013000000130000003E
+:1086F000130000001300000013000000130000002E
+:10870000130000001300000013000000130000001D
+:10871000130000001300000013000000130000000D
+:1087200013000000130000001300000013000000FD
+:1087300013000000130000001300000013000000ED
+:1087400013000000130000001300000013000000DD
+:1087500013000000130000001300000013000000CD
+:1087600013000000130000001300000013000000BD
+:1087700013000000130000001300000013000000AD
+:10878000130000001300000013000000130000009D
+:10879000130000001300000013000000130000008D
+:1087A000130000001300000013000000130000007D
+:1087B000130000001300000013000000130000006D
+:1087C000130000001300000013000000130000005D
+:1087D000130000001300000013000000130000004D
+:1087E000130000001300000013000000130000003D
+:1087F000130000001300000013000000130000002D
+:10880000130000001300000013000000130000001C
+:10881000130000001300000013000000130000000C
+:1088200013000000130000001300000013000000FC
+:1088300013000000130000001300000013000000EC
+:1088400013000000130000001300000013000000DC
+:1088500013000000130000001300000013000000CC
+:1088600013000000130000001300000013000000BC
+:1088700013000000130000001300000013000000AC
+:10888000130000001300000013000000130000009C
+:10889000130000001300000013000000130000008C
+:1088A000130000001300000013000000130000007C
+:1088B000130000001300000013000000130000006C
+:1088C000130000001300000013000000130000005C
+:1088D000130000001300000013000000130000004C
+:1088E000130000001300000013000000130000003C
+:1088F000130000001300000013000000130000002C
+:10890000130000001300000013000000130000001B
+:10891000130000001300000013000000130000000B
+:1089200013000000130000001300000013000000FB
+:1089300013000000130000001300000013000000EB
+:1089400013000000130000001300000013000000DB
+:1089500013000000130000001300000013000000CB
+:1089600013000000130000001300000013000000BB
+:1089700013000000130000001300000013000000AB
+:10898000130000001300000013000000130000009B
+:10899000130000001300000013000000130000008B
+:1089A000130000001300000013000000130000007B
+:1089B000130000001300000013000000130000006B
+:1089C000130000001300000013000000130000005B
+:1089D000130000001300000013000000130000004B
+:1089E000130000001300000013000000130000003B
+:1089F000130000001300000013000000130000002B
+:108A0000130000001300000013000000130000001A
+:108A1000130000001300000013000000130000000A
+:108A200013000000130000001300000013000000FA
+:108A300013000000130000001300000013000000EA
+:108A400013000000130000001300000013000000DA
+:108A500013000000130000001300000013000000CA
+:108A600013000000130000001300000013000000BA
+:108A700013000000130000001300000013000000AA
+:108A8000130000001300000013000000130000009A
+:108A9000130000001300000013000000130000008A
+:108AA000130000001300000013000000130000007A
+:108AB000130000001300000013000000130000006A
+:108AC000130000001300000013000000130000005A
+:108AD000130000001300000013000000130000004A
+:108AE000130000001300000013000000130000003A
+:108AF000130000001300000013000000130000002A
+:108B00001300000013000000130000001300000019
+:108B10001300000013000000130000001300000009
+:108B200013000000130000001300000013000000F9
+:108B300013000000130000001300000013000000E9
+:108B400013000000130000001300000013000000D9
+:108B500013000000130000001300000013000000C9
+:108B600013000000130000001300000013000000B9
+:108B700013000000130000001300000013000000A9
+:108B80001300000013000000130000001300000099
+:108B90001300000013000000130000001300000089
+:108BA0001300000013000000130000001300000079
+:108BB0001300000013000000130000001300000069
+:108BC0001300000013000000130000001300000059
+:108BD0001300000013000000130000001300000049
+:108BE0001300000013000000130000001300000039
+:108BF0001300000013000000130000001300000029
+:108C00001300000013000000130000001300000018
+:108C10001300000013000000130000001300000008
+:108C200013000000130000001300000013000000F8
+:108C300013000000130000001300000013000000E8
+:108C400013000000130000001300000013000000D8
+:108C500013000000130000001300000013000000C8
+:108C600013000000130000001300000013000000B8
+:108C700013000000130000001300000013000000A8
+:108C80001300000013000000130000001300000098
+:108C90001300000013000000130000001300000088
+:108CA0001300000013000000130000001300000078
+:108CB0001300000013000000130000001300000068
+:108CC0001300000013000000130000001300000058
+:108CD0001300000013000000130000001300000048
+:108CE0001300000013000000130000001300000038
+:108CF0001300000013000000130000001300000028
+:108D00001300000013000000130000001300000017
+:108D10001300000013000000130000001300000007
+:108D200013000000130000001300000013000000F7
+:108D300013000000130000001300000013000000E7
+:108D400013000000130000001300000013000000D7
+:108D500013000000130000001300000013000000C7
+:108D600013000000130000001300000013000000B7
+:108D700013000000130000001300000013000000A7
+:108D80001300000013000000130000001300000097
+:108D90001300000013000000130000001300000087
+:108DA0001300000013000000130000001300000077
+:108DB0001300000013000000130000001300000067
+:108DC0001300000013000000130000001300000057
+:108DD0001300000013000000130000001300000047
+:108DE0001300000013000000130000001300000037
+:108DF0001300000013000000130000001300000027
+:108E00001300000013000000130000001300000016
+:108E10001300000013000000130000001300000006
+:108E200013000000130000001300000013000000F6
+:108E300013000000130000001300000013000000E6
+:108E400013000000130000001300000013000000D6
+:108E500013000000130000001300000013000000C6
+:108E600013000000130000001300000013000000B6
+:108E700013000000130000001300000013000000A6
+:108E80001300000013000000130000001300000096
+:108E90001300000013000000130000001300000086
+:108EA0001300000013000000130000001300000076
+:108EB0001300000013000000130000001300000066
+:108EC0001300000013000000130000001300000056
+:108ED0001300000013000000130000001300000046
+:108EE0001300000013000000130000001300000036
+:108EF0001300000013000000130000001300000026
+:108F00001300000013000000130000001300000015
+:108F10001300000013000000130000001300000005
+:108F200013000000130000001300000013000000F5
+:108F300013000000130000001300000013000000E5
+:108F400013000000130000001300000013000000D5
+:108F500013000000130000001300000013000000C5
+:108F600013000000130000001300000013000000B5
+:108F700013000000130000001300000013000000A5
+:108F80001300000013000000130000001300000095
+:108F90001300000013000000130000001300000085
+:108FA0001300000013000000130000001300000075
+:108FB0001300000013000000130000001300000065
+:108FC0001300000013000000130000001300000055
+:108FD0001300000013000000130000001300000045
+:108FE0001300000013000000130000001300000035
+:108FF0001300000013000000130000001300000025
+:10900000404142434445464748494A4B4C4D4E4FE8
+:109010001300000013000000130000001300000004
+:1090200013000000130000001300000013000000F4
+:1090300013000000130000001300000013000000E4
+:1090400013000000130000001300000013000000D4
+:1090500013000000130000001300000013000000C4
+:1090600013000000130000001300000013000000B4
+:1090700013000000130000001300000013000000A4
+:109080001300000013000000130000001300000094
+:109090001300000013000000130000001300000084
+:1090A0001300000013000000130000001300000074
+:1090B0001300000013000000130000001300000064
+:1090C0001300000013000000130000001300000054
+:1090D0001300000013000000130000001300000044
+:1090E0001300000013000000130000001300000034
+:1090F0001300000013000000130000001300000024
+:109100001300000013000000130000001300000013
+:109110001300000013000000130000001300000003
+:1091200013000000130000001300000013000000F3
+:1091300013000000130000001300000013000000E3
+:1091400013000000130000001300000013000000D3
+:1091500013000000130000001300000013000000C3
+:1091600013000000130000001300000013000000B3
+:1091700013000000130000001300000013000000A3
+:109180001300000013000000130000001300000093
+:109190001300000013000000130000001300000083
+:1091A0001300000013000000130000001300000073
+:1091B0001300000013000000130000001300000063
+:1091C0001300000013000000130000001300000053
+:1091D0001300000013000000130000001300000043
+:1091E0001300000013000000130000001300000033
+:1091F0001300000013000000130000001300000023
+:109200001300000013000000130000001300000012
+:109210001300000013000000130000001300000002
+:1092200013000000130000001300000013000000F2
+:1092300013000000130000001300000013000000E2
+:1092400013000000130000001300000013000000D2
+:1092500013000000130000001300000013000000C2
+:1092600013000000130000001300000013000000B2
+:1092700013000000130000001300000013000000A2
+:109280001300000013000000130000001300000092
+:109290001300000013000000130000001300000082
+:1092A0001300000013000000130000001300000072
+:1092B0001300000013000000130000001300000062
+:1092C0001300000013000000130000001300000052
+:1092D0001300000013000000130000001300000042
+:1092E0001300000013000000130000001300000032
+:1092F0001300000013000000130000001300000022
+:109300001300000013000000130000001300000011
+:109310001300000013000000130000001300000001
+:1093200013000000130000001300000013000000F1
+:1093300013000000130000001300000013000000E1
+:1093400013000000130000001300000013000000D1
+:1093500013000000130000001300000013000000C1
+:1093600013000000130000001300000013000000B1
+:1093700013000000130000001300000013000000A1
+:109380001300000013000000130000001300000091
+:109390001300000013000000130000001300000081
+:1093A0001300000013000000130000001300000071
+:1093B0001300000013000000130000001300000061
+:1093C0001300000013000000130000001300000051
+:1093D0001300000013000000130000001300000041
+:1093E0001300000013000000130000001300000031
+:1093F0001300000013000000130000001300000021
+:109400001300000013000000130000001300000010
+:109410001300000013000000130000001300000000
+:1094200013000000130000001300000013000000F0
+:1094300013000000130000001300000013000000E0
+:1094400013000000130000001300000013000000D0
+:1094500013000000130000001300000013000000C0
+:1094600013000000130000001300000013000000B0
+:1094700013000000130000001300000013000000A0
+:109480001300000013000000130000001300000090
+:109490001300000013000000130000001300000080
+:1094A0001300000013000000130000001300000070
+:1094B0001300000013000000130000001300000060
+:1094C0001300000013000000130000001300000050
+:1094D0001300000013000000130000001300000040
+:1094E0001300000013000000130000001300000030
+:1094F0001300000013000000130000001300000020
+:10950000130000001300000013000000130000000F
+:1095100013000000130000001300000013000000FF
+:1095200013000000130000001300000013000000EF
+:1095300013000000130000001300000013000000DF
+:1095400013000000130000001300000013000000CF
+:1095500013000000130000001300000013000000BF
+:1095600013000000130000001300000013000000AF
+:10957000130000001300000013000000130000009F
+:10958000130000001300000013000000130000008F
+:10959000130000001300000013000000130000007F
+:1095A000130000001300000013000000130000006F
+:1095B000130000001300000013000000130000005F
+:1095C000130000001300000013000000130000004F
+:1095D000130000001300000013000000130000003F
+:1095E000130000001300000013000000130000002F
+:1095F000130000001300000013000000130000001F
+:10960000130000001300000013000000130000000E
+:1096100013000000130000001300000013000000FE
+:1096200013000000130000001300000013000000EE
+:1096300013000000130000001300000013000000DE
+:1096400013000000130000001300000013000000CE
+:1096500013000000130000001300000013000000BE
+:1096600013000000130000001300000013000000AE
+:10967000130000001300000013000000130000009E
+:10968000130000001300000013000000130000008E
+:10969000130000001300000013000000130000007E
+:1096A000130000001300000013000000130000006E
+:1096B000130000001300000013000000130000005E
+:1096C000130000001300000013000000130000004E
+:1096D000130000001300000013000000130000003E
+:1096E000130000001300000013000000130000002E
+:1096F000130000001300000013000000130000001E
+:10970000130000001300000013000000130000000D
+:1097100013000000130000001300000013000000FD
+:1097200013000000130000001300000013000000ED
+:1097300013000000130000001300000013000000DD
+:1097400013000000130000001300000013000000CD
+:1097500013000000130000001300000013000000BD
+:1097600013000000130000001300000013000000AD
+:10977000130000001300000013000000130000009D
+:10978000130000001300000013000000130000008D
+:10979000130000001300000013000000130000007D
+:1097A000130000001300000013000000130000006D
+:1097B000130000001300000013000000130000005D
+:1097C000130000001300000013000000130000004D
+:1097D000130000001300000013000000130000003D
+:1097E000130000001300000013000000130000002D
+:1097F000130000001300000013000000130000001D
+:10980000130000001300000013000000130000000C
+:1098100013000000130000001300000013000000FC
+:1098200013000000130000001300000013000000EC
+:1098300013000000130000001300000013000000DC
+:1098400013000000130000001300000013000000CC
+:1098500013000000130000001300000013000000BC
+:1098600013000000130000001300000013000000AC
+:10987000130000001300000013000000130000009C
+:10988000130000001300000013000000130000008C
+:10989000130000001300000013000000130000007C
+:1098A000130000001300000013000000130000006C
+:1098B000130000001300000013000000130000005C
+:1098C000130000001300000013000000130000004C
+:1098D000130000001300000013000000130000003C
+:1098E000130000001300000013000000130000002C
+:1098F000130000001300000013000000130000001C
+:10990000130000001300000013000000130000000B
+:1099100013000000130000001300000013000000FB
+:1099200013000000130000001300000013000000EB
+:1099300013000000130000001300000013000000DB
+:1099400013000000130000001300000013000000CB
+:1099500013000000130000001300000013000000BB
+:1099600013000000130000001300000013000000AB
+:10997000130000001300000013000000130000009B
+:10998000130000001300000013000000130000008B
+:10999000130000001300000013000000130000007B
+:1099A000130000001300000013000000130000006B
+:1099B000130000001300000013000000130000005B
+:1099C000130000001300000013000000130000004B
+:1099D000130000001300000013000000130000003B
+:1099E000130000001300000013000000130000002B
+:1099F000130000001300000013000000130000001B
+:109A0000130000001300000013000000130000000A
+:109A100013000000130000001300000013000000FA
+:109A200013000000130000001300000013000000EA
+:109A300013000000130000001300000013000000DA
+:109A400013000000130000001300000013000000CA
+:109A500013000000130000001300000013000000BA
+:109A600013000000130000001300000013000000AA
+:109A7000130000001300000013000000130000009A
+:109A8000130000001300000013000000130000008A
+:109A9000130000001300000013000000130000007A
+:109AA000130000001300000013000000130000006A
+:109AB000130000001300000013000000130000005A
+:109AC000130000001300000013000000130000004A
+:109AD000130000001300000013000000130000003A
+:109AE000130000001300000013000000130000002A
+:109AF000130000001300000013000000130000001A
+:109B00001300000013000000130000001300000009
+:109B100013000000130000001300000013000000F9
+:109B200013000000130000001300000013000000E9
+:109B300013000000130000001300000013000000D9
+:109B400013000000130000001300000013000000C9
+:109B500013000000130000001300000013000000B9
+:109B600013000000130000001300000013000000A9
+:109B70001300000013000000130000001300000099
+:109B80001300000013000000130000001300000089
+:109B90001300000013000000130000001300000079
+:109BA0001300000013000000130000001300000069
+:109BB0001300000013000000130000001300000059
+:109BC0001300000013000000130000001300000049
+:109BD0001300000013000000130000001300000039
+:109BE0001300000013000000130000001300000029
+:109BF0001300000013000000130000001300000019
+:109C00001300000013000000130000001300000008
+:109C100013000000130000001300000013000000F8
+:109C200013000000130000001300000013000000E8
+:109C300013000000130000001300000013000000D8
+:109C400013000000130000001300000013000000C8
+:109C500013000000130000001300000013000000B8
+:109C600013000000130000001300000013000000A8
+:109C70001300000013000000130000001300000098
+:109C80001300000013000000130000001300000088
+:109C90001300000013000000130000001300000078
+:109CA0001300000013000000130000001300000068
+:109CB0001300000013000000130000001300000058
+:109CC0001300000013000000130000001300000048
+:109CD0001300000013000000130000001300000038
+:109CE0001300000013000000130000001300000028
+:109CF0001300000013000000130000001300000018
+:109D00001300000013000000130000001300000007
+:109D100013000000130000001300000013000000F7
+:109D200013000000130000001300000013000000E7
+:109D300013000000130000001300000013000000D7
+:109D400013000000130000001300000013000000C7
+:109D500013000000130000001300000013000000B7
+:109D600013000000130000001300000013000000A7
+:109D70001300000013000000130000001300000097
+:109D80001300000013000000130000001300000087
+:109D90001300000013000000130000001300000077
+:109DA0001300000013000000130000001300000067
+:109DB0001300000013000000130000001300000057
+:109DC0001300000013000000130000001300000047
+:109DD0001300000013000000130000001300000037
+:109DE0001300000013000000130000001300000027
+:109DF0001300000013000000130000001300000017
+:109E00001300000013000000130000001300000006
+:109E100013000000130000001300000013000000F6
+:109E200013000000130000001300000013000000E6
+:109E300013000000130000001300000013000000D6
+:109E400013000000130000001300000013000000C6
+:109E500013000000130000001300000013000000B6
+:109E600013000000130000001300000013000000A6
+:109E70001300000013000000130000001300000096
+:109E80001300000013000000130000001300000086
+:109E90001300000013000000130000001300000076
+:109EA0001300000013000000130000001300000066
+:109EB0001300000013000000130000001300000056
+:109EC0001300000013000000130000001300000046
+:109ED0001300000013000000130000001300000036
+:109EE0001300000013000000130000001300000026
+:109EF0001300000013000000130000001300000016
+:109F00001300000013000000130000001300000005
+:109F100013000000130000001300000013000000F5
+:109F200013000000130000001300000013000000E5
+:109F300013000000130000001300000013000000D5
+:109F400013000000130000001300000013000000C5
+:109F500013000000130000001300000013000000B5
+:109F600013000000130000001300000013000000A5
+:109F70001300000013000000130000001300000095
+:109F80001300000013000000130000001300000085
+:109F90001300000013000000130000001300000075
+:109FA0001300000013000000130000001300000065
+:109FB0001300000013000000130000001300000055
+:109FC0001300000013000000130000001300000045
+:109FD0001300000013000000130000001300000035
+:109FE0001300000013000000130000001300000025
+:109FF0001300000013000000130000001300000015
+:10A00000505152535455565758595A5B5C5D5E5FD8
+:10A010006780000013000000130000001300000020
+:10A0200013000000130000001300000013000000E4
+:10A0300013000000130000001300000013000000D4
+:10A0400013000000130000001300000013000000C4
+:10A0500013000000130000001300000013000000B4
+:10A0600013000000130000001300000013000000A4
+:10A070001300000013000000130000001300000094
+:10A080001300000013000000130000001300000084
+:10A090001300000013000000130000001300000074
+:10A0A0001300000013000000130000001300000064
+:10A0B0001300000013000000130000001300000054
+:10A0C0001300000013000000130000001300000044
+:10A0D0001300000013000000130000001300000034
+:10A0E0001300000013000000130000001300000024
+:10A0F0001300000013000000130000001300000014
+:10A100001300000013000000130000001300000003
+:10A1100013000000130000001300000013000000F3
+:10A1200013000000130000001300000013000000E3
+:10A1300013000000130000001300000013000000D3
+:10A1400013000000130000001300000013000000C3
+:10A1500013000000130000001300000013000000B3
+:10A1600013000000130000001300000013000000A3
+:10A170001300000013000000130000001300000093
+:10A180001300000013000000130000001300000083
+:10A190001300000013000000130000001300000073
+:10A1A0001300000013000000130000001300000063
+:10A1B0001300000013000000130000001300000053
+:10A1C0001300000013000000130000001300000043
+:10A1D0001300000013000000130000001300000033
+:10A1E0001300000013000000130000001300000023
+:10A1F0001300000013000000130000001300000013
+:10A200001300000013000000130000001300000002
+:10A2100013000000130000001300000013000000F2
+:10A2200013000000130000001300000013000000E2
+:10A2300013000000130000001300000013000000D2
+:10A2400013000000130000001300000013000000C2
+:10A2500013000000130000001300000013000000B2
+:10A2600013000000130000001300000013000000A2
+:10A270001300000013000000130000001300000092
+:10A280001300000013000000130000001300000082
+:10A290001300000013000000130000001300000072
+:10A2A0001300000013000000130000001300000062
+:10A2B0001300000013000000130000001300000052
+:10A2C0001300000013000000130000001300000042
+:10A2D0001300000013000000130000001300000032
+:10A2E0001300000013000000130000001300000022
+:10A2F0001300000013000000130000001300000012
+:10A300001300000013000000130000001300000001
+:10A3100013000000130000001300000013000000F1
+:10A3200013000000130000001300000013000000E1
+:10A3300013000000130000001300000013000000D1
+:10A3400013000000130000001300000013000000C1
+:10A3500013000000130000001300000013000000B1
+:10A3600013000000130000001300000013000000A1
+:10A370001300000013000000130000001300000091
+:10A380001300000013000000130000001300000081
+:10A390001300000013000000130000001300000071
+:10A3A0001300000013000000130000001300000061
+:10A3B0001300000013000000130000001300000051
+:10A3C0001300000013000000130000001300000041
+:10A3D0001300000013000000130000001300000031
+:10A3E0001300000013000000130000001300000021
+:10A3F0001300000013000000130000001300000011
+:10A400001300000013000000130000001300000000
+:10A4100013000000130000001300000013000000F0
+:10A4200013000000130000001300000013000000E0
+:10A4300013000000130000001300000013000000D0
+:10A4400013000000130000001300000013000000C0
+:10A4500013000000130000001300000013000000B0
+:10A4600013000000130000001300000013000000A0
+:10A470001300000013000000130000001300000090
+:10A480001300000013000000130000001300000080
+:10A490001300000013000000130000001300000070
+:10A4A0001300000013000000130000001300000060
+:10A4B0001300000013000000130000001300000050
+:10A4C0001300000013000000130000001300000040
+:10A4D0001300000013000000130000001300000030
+:10A4E0001300000013000000130000001300000020
+:10A4F0001300000013000000130000001300000010
+:10A5000013000000130000001300000013000000FF
+:10A5100013000000130000001300000013000000EF
+:10A5200013000000130000001300000013000000DF
+:10A5300013000000130000001300000013000000CF
+:10A5400013000000130000001300000013000000BF
+:10A5500013000000130000001300000013000000AF
+:10A56000130000001300000013000000130000009F
+:10A57000130000001300000013000000130000008F
+:10A58000130000001300000013000000130000007F
+:10A59000130000001300000013000000130000006F
+:10A5A000130000001300000013000000130000005F
+:10A5B000130000001300000013000000130000004F
+:10A5C000130000001300000013000000130000003F
+:10A5D000130000001300000013000000130000002F
+:10A5E000130000001300000013000000130000001F
+:10A5F000130000001300000013000000130000000F
+:10A6000013000000130000001300000013000000FE
+:10A6100013000000130000001300000013000000EE
+:10A6200013000000130000001300000013000000DE
+:10A6300013000000130000001300000013000000CE
+:10A6400013000000130000001300000013000000BE
+:10A6500013000000130000001300000013000000AE
+:10A66000130000001300000013000000130000009E
+:10A67000130000001300000013000000130000008E
+:10A68000130000001300000013000000130000007E
+:10A69000130000001300000013000000130000006E
+:10A6A000130000001300000013000000130000005E
+:10A6B000130000001300000013000000130000004E
+:10A6C000130000001300000013000000130000003E
+:10A6D000130000001300000013000000130000002E
+:10A6E000130000001300000013000000130000001E
+:10A6F000130000001300000013000000130000000E
+:10A7000013000000130000001300000013000000FD
+:10A7100013000000130000001300000013000000ED
+:10A7200013000000130000001300000013000000DD
+:10A7300013000000130000001300000013000000CD
+:10A7400013000000130000001300000013000000BD
+:10A7500013000000130000001300000013000000AD
+:10A76000130000001300000013000000130000009D
+:10A77000130000001300000013000000130000008D
+:10A78000130000001300000013000000130000007D
+:10A79000130000001300000013000000130000006D
+:10A7A000130000001300000013000000130000005D
+:10A7B000130000001300000013000000130000004D
+:10A7C000130000001300000013000000130000003D
+:10A7D000130000001300000013000000130000002D
+:10A7E000130000001300000013000000130000001D
+:10A7F000130000001300000013000000130000000D
+:10A8000013000000130000001300000013000000FC
+:10A8100013000000130000001300000013000000EC
+:10A8200013000000130000001300000013000000DC
+:10A8300013000000130000001300000013000000CC
+:10A8400013000000130000001300000013000000BC
+:10A8500013000000130000001300000013000000AC
+:10A86000130000001300000013000000130000009C
+:10A87000130000001300000013000000130000008C
+:10A88000130000001300000013000000130000007C
+:10A89000130000001300000013000000130000006C
+:10A8A000130000001300000013000000130000005C
+:10A8B000130000001300000013000000130000004C
+:10A8C000130000001300000013000000130000003C
+:10A8D000130000001300000013000000130000002C
+:10A8E000130000001300000013000000130000001C
+:10A8F000130000001300000013000000130000000C
+:10A9000013000000130000001300000013000000FB
+:10A9100013000000130000001300000013000000EB
+:10A9200013000000130000001300000013000000DB
+:10A9300013000000130000001300000013000000CB
+:10A9400013000000130000001300000013000000BB
+:10A9500013000000130000001300000013000000AB
+:10A96000130000001300000013000000130000009B
+:10A97000130000001300000013000000130000008B
+:10A98000130000001300000013000000130000007B
+:10A99000130000001300000013000000130000006B
+:10A9A000130000001300000013000000130000005B
+:10A9B000130000001300000013000000130000004B
+:10A9C000130000001300000013000000130000003B
+:10A9D000130000001300000013000000130000002B
+:10A9E000130000001300000013000000130000001B
+:10A9F000130000001300000013000000130000000B
+:10AA000013000000130000001300000013000000FA
+:10AA100013000000130000001300000013000000EA
+:10AA200013000000130000001300000013000000DA
+:10AA300013000000130000001300000013000000CA
+:10AA400013000000130000001300000013000000BA
+:10AA500013000000130000001300000013000000AA
+:10AA6000130000001300000013000000130000009A
+:10AA7000130000001300000013000000130000008A
+:10AA8000130000001300000013000000130000007A
+:10AA9000130000001300000013000000130000006A
+:10AAA000130000001300000013000000130000005A
+:10AAB000130000001300000013000000130000004A
+:10AAC000130000001300000013000000130000003A
+:10AAD000130000001300000013000000130000002A
+:10AAE000130000001300000013000000130000001A
+:10AAF000130000001300000013000000130000000A
+:10AB000013000000130000001300000013000000F9
+:10AB100013000000130000001300000013000000E9
+:10AB200013000000130000001300000013000000D9
+:10AB300013000000130000001300000013000000C9
+:10AB400013000000130000001300000013000000B9
+:10AB500013000000130000001300000013000000A9
+:10AB60001300000013000000130000001300000099
+:10AB70001300000013000000130000001300000089
+:10AB80001300000013000000130000001300000079
+:10AB90001300000013000000130000001300000069
+:10ABA0001300000013000000130000001300000059
+:10ABB0001300000013000000130000001300000049
+:10ABC0001300000013000000130000001300000039
+:10ABD0001300000013000000130000001300000029
+:10ABE0001300000013000000130000001300000019
+:10ABF0001300000013000000130000001300000009
+:10AC000013000000130000001300000013000000F8
+:10AC100013000000130000001300000013000000E8
+:10AC200013000000130000001300000013000000D8
+:10AC300013000000130000001300000013000000C8
+:10AC400013000000130000001300000013000000B8
+:10AC500013000000130000001300000013000000A8
+:10AC60001300000013000000130000001300000098
+:10AC70001300000013000000130000001300000088
+:10AC80001300000013000000130000001300000078
+:10AC90001300000013000000130000001300000068
+:10ACA0001300000013000000130000001300000058
+:10ACB0001300000013000000130000001300000048
+:10ACC0001300000013000000130000001300000038
+:10ACD0001300000013000000130000001300000028
+:10ACE0001300000013000000130000001300000018
+:10ACF0001300000013000000130000001300000008
+:10AD000013000000130000001300000013000000F7
+:10AD100013000000130000001300000013000000E7
+:10AD200013000000130000001300000013000000D7
+:10AD300013000000130000001300000013000000C7
+:10AD400013000000130000001300000013000000B7
+:10AD500013000000130000001300000013000000A7
+:10AD60001300000013000000130000001300000097
+:10AD70001300000013000000130000001300000087
+:10AD80001300000013000000130000001300000077
+:10AD90001300000013000000130000001300000067
+:10ADA0001300000013000000130000001300000057
+:10ADB0001300000013000000130000001300000047
+:10ADC0001300000013000000130000001300000037
+:10ADD0001300000013000000130000001300000027
+:10ADE0001300000013000000130000001300000017
+:10ADF0001300000013000000130000001300000007
+:10AE000013000000130000001300000013000000F6
+:10AE100013000000130000001300000013000000E6
+:10AE200013000000130000001300000013000000D6
+:10AE300013000000130000001300000013000000C6
+:10AE400013000000130000001300000013000000B6
+:10AE500013000000130000001300000013000000A6
+:10AE60001300000013000000130000001300000096
+:10AE70001300000013000000130000001300000086
+:10AE80001300000013000000130000001300000076
+:10AE90001300000013000000130000001300000066
+:10AEA0001300000013000000130000001300000056
+:10AEB0001300000013000000130000001300000046
+:10AEC0001300000013000000130000001300000036
+:10AED0001300000013000000130000001300000026
+:10AEE0001300000013000000130000001300000016
+:10AEF0001300000013000000130000001300000006
+:10AF000013000000130000001300000013000000F5
+:10AF100013000000130000001300000013000000E5
+:10AF200013000000130000001300000013000000D5
+:10AF300013000000130000001300000013000000C5
+:10AF400013000000130000001300000013000000B5
+:10AF500013000000130000001300000013000000A5
+:10AF60001300000013000000130000001300000095
+:10AF70001300000013000000130000001300000085
+:10AF80001300000013000000130000001300000075
+:10AF90001300000013000000130000001300000065
+:10AFA0001300000013000000130000001300000055
+:10AFB0001300000013000000130000001300000045
+:10AFC0001300000013000000130000001300000035
+:10AFD0001300000013000000130000001300000025
+:10AFE0001300000013000000130000001300000015
+:10AFF0001300000013000000130000001300000005
+:10B00000606162636465666768696A6B6C6D6E6FC8
+:10B0100013000000130000001300000013000000E4
+:10B0200013000000130000001300000013000000D4
+:10B0300013000000130000001300000013000000C4
+:10B0400013000000130000001300000013000000B4
+:10B0500013000000130000001300000013000000A4
+:10B060001300000013000000130000001300000094
+:10B070001300000013000000130000001300000084
+:10B080001300000013000000130000001300000074
+:10B090001300000013000000130000001300000064
+:10B0A0001300000013000000130000001300000054
+:10B0B0001300000013000000130000001300000044
+:10B0C0001300000013000000130000001300000034
+:10B0D0001300000013000000130000001300000024
+:10B0E0001300000013000000130000001300000014
+:10B0F0001300000013000000130000001300000004
+:10B1000013000000130000001300000013000000F3
+:10B1100013000000130000001300000013000000E3
+:10B1200013000000130000001300000013000000D3
+:10B1300013000000130000001300000013000000C3
+:10B1400013000000130000001300000013000000B3
+:10B1500013000000130000001300000013000000A3
+:10B160001300000013000000130000001300000093
+:10B170001300000013000000130000001300000083
+:10B180001300000013000000130000001300000073
+:10B190001300000013000000130000001300000063
+:10B1A0001300000013000000130000001300000053
+:10B1B0001300000013000000130000001300000043
+:10B1C0001300000013000000130000001300000033
+:10B1D0001300000013000000130000001300000023
+:10B1E0001300000013000000130000001300000013
+:10B1F0001300000013000000130000001300000003
+:10B2000013000000130000001300000013000000F2
+:10B2100013000000130000001300000013000000E2
+:10B2200013000000130000001300000013000000D2
+:10B2300013000000130000001300000013000000C2
+:10B2400013000000130000001300000013000000B2
+:10B2500013000000130000001300000013000000A2
+:10B260001300000013000000130000001300000092
+:10B270001300000013000000130000001300000082
+:10B280001300000013000000130000001300000072
+:10B290001300000013000000130000001300000062
+:10B2A0001300000013000000130000001300000052
+:10B2B0001300000013000000130000001300000042
+:10B2C0001300000013000000130000001300000032
+:10B2D0001300000013000000130000001300000022
+:10B2E0001300000013000000130000001300000012
+:10B2F0001300000013000000130000001300000002
+:10B3000013000000130000001300000013000000F1
+:10B3100013000000130000001300000013000000E1
+:10B3200013000000130000001300000013000000D1
+:10B3300013000000130000001300000013000000C1
+:10B3400013000000130000001300000013000000B1
+:10B3500013000000130000001300000013000000A1
+:10B360001300000013000000130000001300000091
+:10B370001300000013000000130000001300000081
+:10B380001300000013000000130000001300000071
+:10B390001300000013000000130000001300000061
+:10B3A0001300000013000000130000001300000051
+:10B3B0001300000013000000130000001300000041
+:10B3C0001300000013000000130000001300000031
+:10B3D0001300000013000000130000001300000021
+:10B3E0001300000013000000130000001300000011
+:10B3F0001300000013000000130000001300000001
+:10B4000013000000130000001300000013000000F0
+:10B4100013000000130000001300000013000000E0
+:10B4200013000000130000001300000013000000D0
+:10B4300013000000130000001300000013000000C0
+:10B4400013000000130000001300000013000000B0
+:10B4500013000000130000001300000013000000A0
+:10B460001300000013000000130000001300000090
+:10B470001300000013000000130000001300000080
+:10B480001300000013000000130000001300000070
+:10B490001300000013000000130000001300000060
+:10B4A0001300000013000000130000001300000050
+:10B4B0001300000013000000130000001300000040
+:10B4C0001300000013000000130000001300000030
+:10B4D0001300000013000000130000001300000020
+:10B4E0001300000013000000130000001300000010
+:10B4F0001300000013000000130000001300000000
+:10B5000013000000130000001300000013000000EF
+:10B5100013000000130000001300000013000000DF
+:10B5200013000000130000001300000013000000CF
+:10B5300013000000130000001300000013000000BF
+:10B5400013000000130000001300000013000000AF
+:10B55000130000001300000013000000130000009F
+:10B56000130000001300000013000000130000008F
+:10B57000130000001300000013000000130000007F
+:10B58000130000001300000013000000130000006F
+:10B59000130000001300000013000000130000005F
+:10B5A000130000001300000013000000130000004F
+:10B5B000130000001300000013000000130000003F
+:10B5C000130000001300000013000000130000002F
+:10B5D000130000001300000013000000130000001F
+:10B5E000130000001300000013000000130000000F
+:10B5F00013000000130000001300000013000000FF
+:10B6000013000000130000001300000013000000EE
+:10B6100013000000130000001300000013000000DE
+:10B6200013000000130000001300000013000000CE
+:10B6300013000000130000001300000013000000BE
+:10B6400013000000130000001300000013000000AE
+:10B65000130000001300000013000000130000009E
+:10B66000130000001300000013000000130000008E
+:10B67000130000001300000013000000130000007E
+:10B68000130000001300000013000000130000006E
+:10B69000130000001300000013000000130000005E
+:10B6A000130000001300000013000000130000004E
+:10B6B000130000001300000013000000130000003E
+:10B6C000130000001300000013000000130000002E
+:10B6D000130000001300000013000000130000001E
+:10B6E000130000001300000013000000130000000E
+:10B6F00013000000130000001300000013000000FE
+:10B7000013000000130000001300000013000000ED
+:10B7100013000000130000001300000013000000DD
+:10B7200013000000130000001300000013000000CD
+:10B7300013000000130000001300000013000000BD
+:10B7400013000000130000001300000013000000AD
+:10B75000130000001300000013000000130000009D
+:10B76000130000001300000013000000130000008D
+:10B77000130000001300000013000000130000007D
+:10B78000130000001300000013000000130000006D
+:10B79000130000001300000013000000130000005D
+:10B7A000130000001300000013000000130000004D
+:10B7B000130000001300000013000000130000003D
+:10B7C000130000001300000013000000130000002D
+:10B7D000130000001300000013000000130000001D
+:10B7E000130000001300000013000000130000000D
+:10B7F00013000000130000001300000013000000FD
+:10B8000013000000130000001300000013000000EC
+:10B8100013000000130000001300000013000000DC
+:10B8200013000000130000001300000013000000CC
+:10B8300013000000130000001300000013000000BC
+:10B8400013000000130000001300000013000000AC
+:10B85000130000001300000013000000130000009C
+:10B86000130000001300000013000000130000008C
+:10B87000130000001300000013000000130000007C
+:10B88000130000001300000013000000130000006C
+:10B89000130000001300000013000000130000005C
+:10B8A000130000001300000013000000130000004C
+:10B8B000130000001300000013000000130000003C
+:10B8C000130000001300000013000000130000002C
+:10B8D000130000001300000013000000130000001C
+:10B8E000130000001300000013000000130000000C
+:10B8F00013000000130000001300000013000000FC
+:10B9000013000000130000001300000013000000EB
+:10B9100013000000130000001300000013000000DB
+:10B9200013000000130000001300000013000000CB
+:10B9300013000000130000001300000013000000BB
+:10B9400013000000130000001300000013000000AB
+:10B95000130000001300000013000000130000009B
+:10B96000130000001300000013000000130000008B
+:10B97000130000001300000013000000130000007B
+:10B98000130000001300000013000000130000006B
+:10B99000130000001300000013000000130000005B
+:10B9A000130000001300000013000000130000004B
+:10B9B000130000001300000013000000130000003B
+:10B9C000130000001300000013000000130000002B
+:10B9D000130000001300000013000000130000001B
+:10B9E000130000001300000013000000130000000B
+:10B9F00013000000130000001300000013000000FB
+:10BA000013000000130000001300000013000000EA
+:10BA100013000000130000001300000013000000DA
+:10BA200013000000130000001300000013000000CA
+:10BA300013000000130000001300000013000000BA
+:10BA400013000000130000001300000013000000AA
+:10BA5000130000001300000013000000130000009A
+:10BA6000130000001300000013000000130000008A
+:10BA7000130000001300000013000000130000007A
+:10BA8000130000001300000013000000130000006A
+:10BA9000130000001300000013000000130000005A
+:10BAA000130000001300000013000000130000004A
+:10BAB000130000001300000013000000130000003A
+:10BAC000130000001300000013000000130000002A
+:10BAD000130000001300000013000000130000001A
+:10BAE000130000001300000013000000130000000A
+:10BAF00013000000130000001300000013000000FA
+:10BB000013000000130000001300000013000000E9
+:10BB100013000000130000001300000013000000D9
+:10BB200013000000130000001300000013000000C9
+:10BB300013000000130000001300000013000000B9
+:10BB400013000000130000001300000013000000A9
+:10BB50001300000013000000130000001300000099
+:10BB60001300000013000000130000001300000089
+:10BB70001300000013000000130000001300000079
+:10BB80001300000013000000130000001300000069
+:10BB90001300000013000000130000001300000059
+:10BBA0001300000013000000130000001300000049
+:10BBB0001300000013000000130000001300000039
+:10BBC0001300000013000000130000001300000029
+:10BBD0001300000013000000130000001300000019
+:10BBE0001300000013000000130000001300000009
+:10BBF00013000000130000001300000013000000F9
+:10BC000013000000130000001300000013000000E8
+:10BC100013000000130000001300000013000000D8
+:10BC200013000000130000001300000013000000C8
+:10BC300013000000130000001300000013000000B8
+:10BC400013000000130000001300000013000000A8
+:10BC50001300000013000000130000001300000098
+:10BC60001300000013000000130000001300000088
+:10BC70001300000013000000130000001300000078
+:10BC80001300000013000000130000001300000068
+:10BC90001300000013000000130000001300000058
+:10BCA0001300000013000000130000001300000048
+:10BCB0001300000013000000130000001300000038
+:10BCC0001300000013000000130000001300000028
+:10BCD0001300000013000000130000001300000018
+:10BCE0001300000013000000130000001300000008
+:10BCF00013000000130000001300000013000000F8
+:10BD000013000000130000001300000013000000E7
+:10BD100013000000130000001300000013000000D7
+:10BD200013000000130000001300000013000000C7
+:10BD300013000000130000001300000013000000B7
+:10BD400013000000130000001300000013000000A7
+:10BD50001300000013000000130000001300000097
+:10BD60001300000013000000130000001300000087
+:10BD70001300000013000000130000001300000077
+:10BD80001300000013000000130000001300000067
+:10BD90001300000013000000130000001300000057
+:10BDA0001300000013000000130000001300000047
+:10BDB0001300000013000000130000001300000037
+:10BDC0001300000013000000130000001300000027
+:10BDD0001300000013000000130000001300000017
+:10BDE0001300000013000000130000001300000007
+:10BDF00013000000130000001300000013000000F7
+:10BE000013000000130000001300000013000000E6
+:10BE100013000000130000001300000013000000D6
+:10BE200013000000130000001300000013000000C6
+:10BE300013000000130000001300000013000000B6
+:10BE400013000000130000001300000013000000A6
+:10BE50001300000013000000130000001300000096
+:10BE60001300000013000000130000001300000086
+:10BE70001300000013000000130000001300000076
+:10BE80001300000013000000130000001300000066
+:10BE90001300000013000000130000001300000056
+:10BEA0001300000013000000130000001300000046
+:10BEB0001300000013000000130000001300000036
+:10BEC0001300000013000000130000001300000026
+:10BED0001300000013000000130000001300000016
+:10BEE0001300000013000000130000001300000006
+:10BEF00013000000130000001300000013000000F6
+:10BF000013000000130000001300000013000000E5
+:10BF100013000000130000001300000013000000D5
+:10BF200013000000130000001300000013000000C5
+:10BF300013000000130000001300000013000000B5
+:10BF400013000000130000001300000013000000A5
+:10BF50001300000013000000130000001300000095
+:10BF60001300000013000000130000001300000085
+:10BF70001300000013000000130000001300000075
+:10BF80001300000013000000130000001300000065
+:10BF90001300000013000000130000001300000055
+:10BFA0001300000013000000130000001300000045
+:10BFB0001300000013000000130000001300000035
+:10BFC0001300000013000000130000001300000025
+:10BFD0001300000013000000130000001300000015
+:10BFE0001300000013000000130000001300000005
+:10BFF00013000000130000001300000013000000F5
+:10C00000707172737475767778797A7B7C7D7E7FB8
+:10C010000000000000000000000000000000000020
+:10C020000000000000000000000000000000000010
+:10C030000000000000000000000000000000000000
+:10C0400000000000000000000000000000000000F0
+:10C0500000000000000000000000000000000000E0
+:10C0600000000000000000000000000000000000D0
+:10C0700000000000000000000000000000000000C0
+:10C0800000000000000000000000000000000000B0
+:10C0900000000000000000000000000000000000A0
+:10C0A0000000000000000000000000000000000090
+:10C0B0000000000000000000000000000000000080
+:10C0C0000000000000000000000000000000000070
+:10C0D0000000000000000000000000000000000060
+:10C0E0000000000000000000000000000000000050
+:10C0F0000000000000000000000000000000000040
+:10C10000000000000000000000000000000000002F
+:10C11000000000000000000000000000000000001F
+:10C12000000000000000000000000000000000000F
+:10C1300000000000000000000000000000000000FF
+:10C1400000000000000000000000000000000000EF
+:10C1500000000000000000000000000000000000DF
+:10C1600000000000000000000000000000000000CF
+:10C1700000000000000000000000000000000000BF
+:10C1800000000000000000000000000000000000AF
+:10C19000000000000000000000000000000000009F
+:10C1A000000000000000000000000000000000008F
+:10C1B000000000000000000000000000000000007F
+:10C1C000000000000000000000000000000000006F
+:10C1D000000000000000000000000000000000005F
+:10C1E000000000000000000000000000000000004F
+:10C1F000000000000000000000000000000000003F
+:10C20000000000000000000000000000000000002E
+:10C21000000000000000000000000000000000001E
+:10C22000000000000000000000000000000000000E
+:10C2300000000000000000000000000000000000FE
+:10C2400000000000000000000000000000000000EE
+:10C2500000000000000000000000000000000000DE
+:10C2600000000000000000000000000000000000CE
+:10C2700000000000000000000000000000000000BE
+:10C2800000000000000000000000000000000000AE
+:10C29000000000000000000000000000000000009E
+:10C2A000000000000000000000000000000000008E
+:10C2B000000000000000000000000000000000007E
+:10C2C000000000000000000000000000000000006E
+:10C2D000000000000000000000000000000000005E
+:10C2E000000000000000000000000000000000004E
+:10C2F000000000000000000000000000000000003E
+:10C30000000000000000000000000000000000002D
+:10C31000000000000000000000000000000000001D
+:10C32000000000000000000000000000000000000D
+:10C3300000000000000000000000000000000000FD
+:10C3400000000000000000000000000000000000ED
+:10C3500000000000000000000000000000000000DD
+:10C3600000000000000000000000000000000000CD
+:10C3700000000000000000000000000000000000BD
+:10C3800000000000000000000000000000000000AD
+:10C39000000000000000000000000000000000009D
+:10C3A000000000000000000000000000000000008D
+:10C3B000000000000000000000000000000000007D
+:10C3C000000000000000000000000000000000006D
+:10C3D000000000000000000000000000000000005D
+:10C3E000000000000000000000000000000000004D
+:10C3F000000000000000000000000000000000003D
+:10C40000000000000000000000000000000000002C
+:10C41000000000000000000000000000000000001C
+:10C42000000000000000000000000000000000000C
+:10C4300000000000000000000000000000000000FC
+:10C4400000000000000000000000000000000000EC
+:10C4500000000000000000000000000000000000DC
+:10C4600000000000000000000000000000000000CC
+:10C4700000000000000000000000000000000000BC
+:10C4800000000000000000000000000000000000AC
+:10C49000000000000000000000000000000000009C
+:10C4A000000000000000000000000000000000008C
+:10C4B000000000000000000000000000000000007C
+:10C4C000000000000000000000000000000000006C
+:10C4D000000000000000000000000000000000005C
+:10C4E000000000000000000000000000000000004C
+:10C4F000000000000000000000000000000000003C
+:10C50000000000000000000000000000000000002B
+:10C51000000000000000000000000000000000001B
+:10C52000000000000000000000000000000000000B
+:10C5300000000000000000000000000000000000FB
+:10C5400000000000000000000000000000000000EB
+:10C5500000000000000000000000000000000000DB
+:10C5600000000000000000000000000000000000CB
+:10C5700000000000000000000000000000000000BB
+:10C5800000000000000000000000000000000000AB
+:10C59000000000000000000000000000000000009B
+:10C5A000000000000000000000000000000000008B
+:10C5B000000000000000000000000000000000007B
+:10C5C000000000000000000000000000000000006B
+:10C5D000000000000000000000000000000000005B
+:10C5E000000000000000000000000000000000004B
+:10C5F000000000000000000000000000000000003B
+:10C60000000000000000000000000000000000002A
+:10C61000000000000000000000000000000000001A
+:10C62000000000000000000000000000000000000A
+:10C6300000000000000000000000000000000000FA
+:10C6400000000000000000000000000000000000EA
+:10C6500000000000000000000000000000000000DA
+:10C6600000000000000000000000000000000000CA
+:10C6700000000000000000000000000000000000BA
+:10C6800000000000000000000000000000000000AA
+:10C69000000000000000000000000000000000009A
+:10C6A000000000000000000000000000000000008A
+:10C6B000000000000000000000000000000000007A
+:10C6C000000000000000000000000000000000006A
+:10C6D000000000000000000000000000000000005A
+:10C6E000000000000000000000000000000000004A
+:10C6F000000000000000000000000000000000003A
+:10C700000000000000000000000000000000000029
+:10C710000000000000000000000000000000000019
+:10C720000000000000000000000000000000000009
+:10C7300000000000000000000000000000000000F9
+:10C7400000000000000000000000000000000000E9
+:10C7500000000000000000000000000000000000D9
+:10C7600000000000000000000000000000000000C9
+:10C7700000000000000000000000000000000000B9
+:10C7800000000000000000000000000000000000A9
+:10C790000000000000000000000000000000000099
+:10C7A0000000000000000000000000000000000089
+:10C7B0000000000000000000000000000000000079
+:10C7C0000000000000000000000000000000000069
+:10C7D0000000000000000000000000000000000059
+:10C7E0000000000000000000000000000000000049
+:10C7F0000000000000000000000000000000000039
+:10C800000000000000000000000000000000000028
+:10C810000000000000000000000000000000000018
+:10C820000000000000000000000000000000000008
+:10C8300000000000000000000000000000000000F8
+:10C8400000000000000000000000000000000000E8
+:10C8500000000000000000000000000000000000D8
+:10C8600000000000000000000000000000000000C8
+:10C8700000000000000000000000000000000000B8
+:10C8800000000000000000000000000000000000A8
+:10C890000000000000000000000000000000000098
+:10C8A0000000000000000000000000000000000088
+:10C8B0000000000000000000000000000000000078
+:10C8C0000000000000000000000000000000000068
+:10C8D0000000000000000000000000000000000058
+:10C8E0000000000000000000000000000000000048
+:10C8F0000000000000000000000000000000000038
+:10C900000000000000000000000000000000000027
+:10C910000000000000000000000000000000000017
+:10C920000000000000000000000000000000000007
+:10C9300000000000000000000000000000000000F7
+:10C9400000000000000000000000000000000000E7
+:10C9500000000000000000000000000000000000D7
+:10C9600000000000000000000000000000000000C7
+:10C9700000000000000000000000000000000000B7
+:10C9800000000000000000000000000000000000A7
+:10C990000000000000000000000000000000000097
+:10C9A0000000000000000000000000000000000087
+:10C9B0000000000000000000000000000000000077
+:10C9C0000000000000000000000000000000000067
+:0CC9D0000000000000000000000000005B
+:040000058000000077
+:00000001FF
diff --git a/VexRiscv/src/test/cpp/raw/mmu/makefile b/VexRiscv/src/test/cpp/raw/mmu/makefile
new file mode 100644
index 0000000..961e3bc
--- /dev/null
+++ b/VexRiscv/src/test/cpp/raw/mmu/makefile
@@ -0,0 +1,3 @@
+PROJ_NAME=mmu
+
+include ../common/asm.mk \ No newline at end of file
diff --git a/VexRiscv/src/test/cpp/raw/mmu/src/crt.S b/VexRiscv/src/test/cpp/raw/mmu/src/crt.S
new file mode 100644
index 0000000..2f85bbe
--- /dev/null
+++ b/VexRiscv/src/test/cpp/raw/mmu/src/crt.S
@@ -0,0 +1,526 @@
+.globl _start
+
+#define TEST_ID x28
+#define TRAP_OK x29
+#define TRAP_RET x30
+
+
+ROM_SUPER_0:
+
+_start:
+ li TRAP_OK, 0 //Do not allow trap
+ la x1, trap
+ csrw mtvec, x1
+
+test1: //test ram
+ li TEST_ID, 1
+ la x1, ROM_2
+ li x2, 0x27262524
+ lw x1, 4(x1)
+ bne x1, x2, fail
+
+test2: //dummy mret
+ li TEST_ID, 2
+ la x1, test3
+ csrw mepc, x1
+ li x1, 0x1800
+ csrw mstatus, x1
+ mret
+ j fail
+
+
+test3: // jump to supervisor
+ li TEST_ID, 3
+ li x1, 0x0800
+ csrw mstatus, x1
+ la x1, test4
+ csrw mepc, x1
+ mret
+ j fail
+
+
+
+test4: //test ram mmu off
+ li TEST_ID, 4
+ la x1, ROM_3
+ li x2, 0x37363534
+ lw x1, 4(x1)
+ bne x1, x2, fail
+
+test5: //setup MMU
+
+ li TEST_ID, 5
+ la x1, MMU_TABLE_0 + 0x800
+ la x2, MMU_TABLE_1
+ srli x2, x2, 2
+ ori x2, x2, 0x11
+ sw x2, 0(x1)
+
+ la x1, MMU_TABLE_1 + 0x000*4
+ li x2, 0x80000000
+ srli x2, x2, 2
+ ori x2, x2, 0x0F
+ sw x2, 0(x1)
+
+
+ li TEST_ID, 5
+ la x1, MMU_TABLE_0 + 0x900
+ la x2, MMU_TABLE_2
+ srli x2, x2, 2
+ ori x2, x2, 0x11
+ sw x2, 0(x1)
+
+ la x1, MMU_TABLE_2 + 0x00A*4
+ la x2, ROM_4
+ srli x2, x2, 2
+ ori x2, x2, 0x1F
+ sw x2, 0(x1)
+
+ la x1, MMU_TABLE_2 + 0x010*4 // Read Only
+ la x2, ROM_5
+ srli x2, x2, 2
+ ori x2, x2, 0x11 + (0x1 << 1)
+ sw x2, 0(x1)
+
+ la x1, MMU_TABLE_2 + 0x011*4 // Read Write
+ la x2, ROM_5
+ srli x2, x2, 2
+ ori x2, x2, 0x11 + (0x3 << 1)
+ sw x2, 0(x1)
+
+ la x1, MMU_TABLE_2 + 0x012*4 // Execute only
+ la x2, ROM_5
+ srli x2, x2, 2
+ ori x2, x2, 0x11 + (0x4 << 1)
+ sw x2, 0(x1)
+
+ la x1, MMU_TABLE_2 + 0x013*4 //Read Execute
+ la x2, ROM_5
+ srli x2, x2, 2
+ ori x2, x2, 0x11 + (0x5 << 1)
+ sw x2, 0(x1)
+
+ la x1, MMU_TABLE_2 + 0x014*4 //no user
+ la x2, ROM_5
+ srli x2, x2, 2
+ ori x2, x2, 0x01 + (0x7 << 1)
+ sw x2, 0(x1)
+
+ li TEST_ID, 5
+ la x1, MMU_TABLE_0 + 0xA00
+ la x2, ROM_SUPER_0
+ srli x2, x2, 2
+ ori x2, x2, 0x1F
+ sw x2, 0(x1)
+
+ li TEST_ID, 5
+ la x1, MMU_TABLE_0 + 0xB00
+ sw x0, 0(x1)
+
+ li x1, 1 << 18 //SUM
+ csrs sstatus, x1
+
+ la x1, MMU_TABLE_0
+ srli x1, x1, 12
+ li x2, 0x80000000
+ or x1, x1, x2
+ csrw satp, x1
+
+
+test6: //read through MMU
+ li TEST_ID, 6
+ li x1, 0x9000A008
+ li x2, 0x4B4A4948
+ lw x1, 0(x1)
+ bne x1, x2, fail
+
+
+
+test7: //write-read through MMU
+ li TEST_ID, 7
+ li x1, 0x9000A360
+ li x2, 0xAAEE0001
+ sw x2, 0(x1)
+ lw x1, 0(x1)
+ bne x1, x2, fail
+
+
+test8: //read through MMU super page
+ li TEST_ID, 8
+ la x1, ROM_7 + 0x20000004
+ li x2, 0x77767574
+ lw x1, 0(x1)
+ bne x1, x2, fail
+
+
+
+test9: //write-read through MMU super page
+ li TEST_ID, 9
+ li x1, 0xA000A360
+ li x2, 0xAAEE0002
+ sw x2, 0(x1)
+ lw x1, 0(x1)
+ bne x1, x2, fail
+
+
+
+test10: //check previously written value without the MMU
+ li TEST_ID, 10
+ csrwi satp, 0
+
+ la x1, ROM_4 + 0x360
+ li x2, 0xAAEE0001
+ lw x1, 0(x1)
+ bne x1, x2, fail
+
+
+test11:
+ li TEST_ID, 11
+ la x1, ROM_SUPER_0 + 0xA360
+ li x2, 0xAAEE0002
+ lw x1, 0(x1)
+ bne x1, x2, fail
+
+
+ la x1, MMU_TABLE_0
+ srli x1, x1, 12
+ li x2, 0x80000000
+ or x1, x1, x2
+ csrw satp, x1
+
+
+test12: //Dummy trap
+ li TEST_ID, 12
+ li TRAP_OK, 1 //Allow trap
+ la TRAP_RET, test13 // trap return address
+ ecall
+ j fail
+
+
+test13: //Trap load page fault
+ li TEST_ID, 13
+ la TRAP_RET, test14
+ li x1, 0xB0000000
+ lw x1, 8(x1)
+ j fail
+
+
+test14: //Trap store page fault
+ li TEST_ID, 14
+ la TRAP_RET, test15
+ li x1, 0xB0000000
+ sw x1, 8(x1)
+ j fail
+
+
+test15: //Trap instruction fetch
+ li TEST_ID, 15
+ la TRAP_RET, test15_end
+ li x1, 0xB0000000
+ jr x1
+ j fail
+
+test15_end:
+
+
+test16: //Test limited read access
+ li TEST_ID, 16
+ li TRAP_OK, 0 //disable trap
+
+ li x1, 0x90010008
+ li x2, 0x5B5A5958
+ lw x1, 0(x1)
+ bne x1, x2, fail
+
+
+ li x1, 0x90011008
+ li x2, 0x5B5A5958
+ lw x1, 0(x1)
+ bne x1, x2, fail
+
+ li x1, 0x90013008
+ li x2, 0x5B5A5958
+ lw x1, 0(x1)
+ bne x1, x2, fail
+
+test17: //Test limited write access
+ li TEST_ID, 17
+
+ li x1, 0x90011360
+ li x2, 0xAAEE0003
+ sw x2, 0(x1)
+ lw x1, 0(x1)
+ bne x1, x2, fail
+
+test18: //Test limited execute access
+ li TEST_ID, 18
+
+ la x1, test18_end
+ li x2, 0x90012010
+ jr x2
+ j fail
+test18_end:
+
+
+test19: //exception by access limitations
+ li TEST_ID, 19
+ li TRAP_OK, 1 //Allow trap
+ la TRAP_RET, test19_readTrap
+ li x1, 0x90012010
+ lw x1, 0(x1)
+ j fail
+test19_readTrap:
+ la TRAP_RET, test19_writeTrap
+ li x1, 0x90013010
+ sw x1, 0(x1)
+ j fail
+test19_writeTrap:
+ la TRAP_RET, test19_executeTrap
+ li x1, 0x90011010
+ jr x1
+ j fail
+test19_executeTrap:
+
+
+test20: //mxr set, read executable
+ li TEST_ID, 21
+ li TRAP_OK, 0
+ li x1, 1 << 19
+ csrs sstatus, x1
+ li x1, 0x90012008
+ li x2, 0x5B5A5958
+ lw x1, 0(x1)
+ bne x1, x2, fail
+ li x1, 1 << 19
+ csrc sstatus, x1
+
+
+test21: //supervisor accessing not user
+ li TRAP_OK, 0
+ li TEST_ID, 20
+ li x1, 0x90014380
+ li x2, 0xAAEE0005
+ sw x2, 0(x1)
+ lw x1, 0(x1)
+ bne x1, x2, fail
+
+
+
+ li x1, 1 << 18 //clear SUM
+ csrc sstatus, x1
+ li TRAP_OK, 1
+ la TRAP_RET, test21_pass
+ li x1, 0x90011648
+ sw x1, 0(x1)
+ j fail
+
+test21_pass:
+
+
+
+
+
+test50: //User mode setup
+ li TEST_ID, 50
+ li TRAP_OK, 0
+
+ //set SUM
+ li x1, 1 << 18
+ csrs sstatus, x1
+
+ //remap code tlb into userspace
+ csrr x10, satp
+ csrw satp, x0
+ la x1, MMU_TABLE_1 + 0x000*4
+ li x2, 0x80000000
+ srli x2, x2, 2
+ ori x2, x2, 0x1F
+ sw x2, 0(x1)
+ csrw satp, x10
+
+ li x1, 1 << 8
+ csrc sstatus, x1 //clear SPP
+
+ la x1, test51
+ csrw sepc, x1
+ sfence.vma
+ sret
+ j fail
+
+test51: //user read/write
+ li TEST_ID, 51
+ li x1, 0x90011008
+ li x2, 0x5B5A5958
+ lw x1, 0(x1)
+ bne x1, x2, fail
+
+ li x1, 0xA000A324
+ li x2, 0xAAEE0008
+ sw x2, 0(x1)
+ lw x1, 0(x1)
+ bne x1, x2, fail
+
+test52: //user fetch
+ li TEST_ID, 52
+ la x1, test53
+ li x2, 0x90012010
+ jr x2
+ j fail
+
+test53: // user fetch page fault
+ li TEST_ID, 53
+ li TRAP_OK, 1
+ la TRAP_RET, test54
+ li x1, 0x90014390
+ jr x1
+ j fail
+
+test54: //user load page fault
+ li TEST_ID, 54
+ li TRAP_OK, 1
+ la TRAP_RET, test55
+ li x1, 0x90014394
+ lw x1, 0(x1)
+ j fail
+
+test55: //user store page fault
+ li TEST_ID, 55
+ li TRAP_OK, 1
+ la TRAP_RET, test56
+ li x1, 0x90014398
+ sw x1, 0(x1)
+ j fail
+
+test56:
+
+
+
+
+
+
+
+ j pass
+
+fail: //TEST_ID => error code
+ li TRAP_OK, 0
+ ecall
+failFence:
+ li x2, 0xF00FFF24
+ sw TEST_ID, 0(x2)
+
+pass:
+ li TRAP_OK, 2
+ ecall
+passFence:
+ li x2, 0xF00FFF20
+ sw x0, 0(x2)
+
+
+trap:
+ beq TRAP_OK, x0, failFence
+ csrr x1, mcause
+ csrr x1, mepc
+ csrr x1, mstatus
+ csrr x1, mbadaddr
+ li x1, 2
+ beq TRAP_OK, x1, passFence
+ csrw mepc, TRAP_RET
+ mret
+
+
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+
+.align 12
+MMU_TABLE_0:
+.word 0
+
+.align 12
+MMU_TABLE_1:
+.word 0
+
+.align 12
+MMU_TABLE_2:
+.word 0
+
+.align 12
+MMU_TABLE_3:
+.word 0
+
+.align 12
+ROM_0:
+.word 0x03020100
+.word 0x07060504
+.word 0x0B0A0908
+.word 0x0F0E0D0C
+
+.align 12
+ROM_1:
+.word 0x13121110
+.word 0x17161514
+.word 0x1B1A1918
+.word 0x1F1E1D1C
+
+.align 12
+ROM_2:
+.word 0x23222120
+.word 0x27262524
+.word 0x2B2A2928
+.word 0x2F2E2D2C
+
+.align 12
+ROM_3:
+.word 0x33323130
+.word 0x37363534
+.word 0x3B3A3938
+.word 0x3F3E3D3C
+
+.align 12
+ROM_4:
+.word 0x43424140
+.word 0x47464544
+.word 0x4B4A4948
+.word 0x4F4E4D4C
+
+.align 12
+ROM_5:
+.word 0x53525150
+.word 0x57565554
+.word 0x5B5A5958
+.word 0x5F5E5D5C
+ jr x1
+
+.align 12
+ROM_6:
+.word 0x63626160
+.word 0x67666564
+.word 0x6B6A6968
+.word 0x6F6E6D6C
+
+.align 12
+ROM_7:
+.word 0x73727170
+.word 0x77767574
+.word 0x7B7A7978
+.word 0x7F7E7D7C
+
+/*
+.align 22
+ROM_SUPER_0:
+.word 0x83828180
+.word 0x87868584
+.word 0x8B8A8988
+.word 0x8F8E8D8C
+
+.align 12
+ROM_SUPER_1:
+.word 0x93929190
+.word 0x97969594
+.word 0x9B9A9998
+.word 0x9F9E9D9C*/
+
+
diff --git a/VexRiscv/src/test/cpp/raw/mmu/src/ld b/VexRiscv/src/test/cpp/raw/mmu/src/ld
new file mode 100644
index 0000000..93d8de8
--- /dev/null
+++ b/VexRiscv/src/test/cpp/raw/mmu/src/ld
@@ -0,0 +1,16 @@
+OUTPUT_ARCH( "riscv" )
+
+MEMORY {
+ onChipRam (W!RX)/*(RX)*/ : ORIGIN = 0x80000000, LENGTH = 128K
+}
+
+SECTIONS
+{
+
+ .crt_section :
+ {
+ . = ALIGN(4);
+ *crt.o(.text)
+ } > onChipRam
+
+}
diff --git a/VexRiscv/src/test/cpp/raw/pmp/build/pmp.asm b/VexRiscv/src/test/cpp/raw/pmp/build/pmp.asm
new file mode 100644
index 0000000..f8a30e2
--- /dev/null
+++ b/VexRiscv/src/test/cpp/raw/pmp/build/pmp.asm
@@ -0,0 +1,258 @@
+
+build/pmp.elf: file format elf32-littleriscv
+
+
+Disassembly of section .crt_section:
+
+80000000 <_start>:
+80000000: 00000493 li s1,0
+80000004: 00000097 auipc ra,0x0
+80000008: 01008093 addi ra,ra,16 # 80000014 <trap>
+8000000c: 30509073 csrw mtvec,ra
+80000010: 0140006f j 80000024 <test0>
+
+80000014 <trap>:
+80000014: 341f1073 csrw mepc,t5
+80000018: 00049463 bnez s1,80000020 <trap_exit>
+8000001c: 30200073 mret
+
+80000020 <trap_exit>:
+80000020: 000f0067 jr t5
+
+80000024 <test0>:
+80000024: 00000e13 li t3,0
+80000028: 00000f17 auipc t5,0x0
+8000002c: 324f0f13 addi t5,t5,804 # 8000034c <fail>
+80000030: 800000b7 lui ra,0x80000
+80000034: 80008237 lui tp,0x80008
+80000038: deadc137 lui sp,0xdeadc
+8000003c: eef10113 addi sp,sp,-273 # deadbeef <pass+0x5eadbb97>
+80000040: 0020a023 sw sp,0(ra) # 80000000 <pass+0xfffffca8>
+80000044: 00222023 sw sp,0(tp) # 80008000 <pass+0x7ca8>
+80000048: 0000a183 lw gp,0(ra)
+8000004c: 30311063 bne sp,gp,8000034c <fail>
+80000050: 00022183 lw gp,0(tp) # 0 <_start-0x80000000>
+80000054: 2e311c63 bne sp,gp,8000034c <fail>
+80000058: 071a02b7 lui t0,0x71a0
+8000005c: 3a029073 csrw pmpcfg0,t0
+80000060: 3a002373 csrr t1,pmpcfg0
+80000064: 2e629463 bne t0,t1,8000034c <fail>
+80000068: 1a1902b7 lui t0,0x1a190
+8000006c: 30428293 addi t0,t0,772 # 1a190304 <_start-0x65e6fcfc>
+80000070: 3a129073 csrw pmpcfg1,t0
+80000074: 000f12b7 lui t0,0xf1
+80000078: 90a28293 addi t0,t0,-1782 # f090a <_start-0x7ff0f6f6>
+8000007c: 3a229073 csrw pmpcfg2,t0
+80000080: 3a202373 csrr t1,pmpcfg2
+80000084: 2c629463 bne t0,t1,8000034c <fail>
+80000088: 1c1e22b7 lui t0,0x1c1e2
+8000008c: 90028293 addi t0,t0,-1792 # 1c1e1900 <_start-0x63e1e700>
+80000090: 3a329073 csrw pmpcfg3,t0
+80000094: 200002b7 lui t0,0x20000
+80000098: 3b029073 csrw pmpaddr0,t0
+8000009c: 3b002373 csrr t1,pmpaddr0
+800000a0: 2a629663 bne t0,t1,8000034c <fail>
+800000a4: fff00293 li t0,-1
+800000a8: 3b129073 csrw pmpaddr1,t0
+800000ac: 202002b7 lui t0,0x20200
+800000b0: 3b229073 csrw pmpaddr2,t0
+800000b4: 200042b7 lui t0,0x20004
+800000b8: fff28293 addi t0,t0,-1 # 20003fff <_start-0x5fffc001>
+800000bc: 3b329073 csrw pmpaddr3,t0
+800000c0: 200042b7 lui t0,0x20004
+800000c4: fff28293 addi t0,t0,-1 # 20003fff <_start-0x5fffc001>
+800000c8: 3b429073 csrw pmpaddr4,t0
+800000cc: 200042b7 lui t0,0x20004
+800000d0: fff28293 addi t0,t0,-1 # 20003fff <_start-0x5fffc001>
+800000d4: 3b529073 csrw pmpaddr5,t0
+800000d8: 230002b7 lui t0,0x23000
+800000dc: fff28293 addi t0,t0,-1 # 22ffffff <_start-0x5d000001>
+800000e0: 3b629073 csrw pmpaddr6,t0
+800000e4: 220402b7 lui t0,0x22040
+800000e8: fff28293 addi t0,t0,-1 # 2203ffff <_start-0x5dfc0001>
+800000ec: 3b729073 csrw pmpaddr7,t0
+800000f0: 200d02b7 lui t0,0x200d0
+800000f4: 3b829073 csrw pmpaddr8,t0
+800000f8: 200e02b7 lui t0,0x200e0
+800000fc: 3b929073 csrw pmpaddr9,t0
+80000100: fff00293 li t0,-1
+80000104: 3ba29073 csrw pmpaddr10,t0
+80000108: 00000293 li t0,0
+8000010c: 3bb29073 csrw pmpaddr11,t0
+80000110: 00000293 li t0,0
+80000114: 3bc29073 csrw pmpaddr12,t0
+80000118: 00000293 li t0,0
+8000011c: 3bd29073 csrw pmpaddr13,t0
+80000120: 00000293 li t0,0
+80000124: 3be29073 csrw pmpaddr14,t0
+80000128: fff00293 li t0,-1
+8000012c: 3bf29073 csrw pmpaddr15,t0
+80000130: 00c10137 lui sp,0xc10
+80000134: fee10113 addi sp,sp,-18 # c0ffee <_start-0x7f3f0012>
+80000138: 0020a023 sw sp,0(ra)
+8000013c: 00222023 sw sp,0(tp) # 0 <_start-0x80000000>
+80000140: 0000a183 lw gp,0(ra)
+80000144: 20311463 bne sp,gp,8000034c <fail>
+80000148: 00000193 li gp,0
+8000014c: 00022183 lw gp,0(tp) # 0 <_start-0x80000000>
+80000150: 1e311e63 bne sp,gp,8000034c <fail>
+
+80000154 <test1>:
+80000154: 00100e13 li t3,1
+80000158: 00000f17 auipc t5,0x0
+8000015c: 1f4f0f13 addi t5,t5,500 # 8000034c <fail>
+80000160: 079a12b7 lui t0,0x79a1
+80000164: 80828293 addi t0,t0,-2040 # 79a0808 <_start-0x7865f7f8>
+80000168: 3a029073 csrw pmpcfg0,t0
+8000016c: 3a002373 csrr t1,pmpcfg0
+80000170: 1c629e63 bne t0,t1,8000034c <fail>
+80000174: 808000b7 lui ra,0x80800
+80000178: deadc137 lui sp,0xdeadc
+8000017c: eef10113 addi sp,sp,-273 # deadbeef <pass+0x5eadbb97>
+80000180: 0020a023 sw sp,0(ra) # 80800000 <pass+0x7ffca8>
+80000184: 00000f17 auipc t5,0x0
+80000188: 010f0f13 addi t5,t5,16 # 80000194 <test2>
+8000018c: 0000a183 lw gp,0(ra)
+80000190: 1bc0006f j 8000034c <fail>
+
+80000194 <test2>:
+80000194: 00200e13 li t3,2
+80000198: 00000f17 auipc t5,0x0
+8000019c: 1b4f0f13 addi t5,t5,436 # 8000034c <fail>
+800001a0: 071a02b7 lui t0,0x71a0
+800001a4: 3a029073 csrw pmpcfg0,t0
+800001a8: 3a002373 csrr t1,pmpcfg0
+800001ac: 1a628063 beq t0,t1,8000034c <fail>
+800001b0: 3b305073 csrwi pmpaddr3,0
+800001b4: 3b302373 csrr t1,pmpaddr3
+800001b8: 18031a63 bnez t1,8000034c <fail>
+800001bc: 3b205073 csrwi pmpaddr2,0
+800001c0: 3b202373 csrr t1,pmpaddr2
+800001c4: 18030463 beqz t1,8000034c <fail>
+800001c8: 808000b7 lui ra,0x80800
+800001cc: deadc137 lui sp,0xdeadc
+800001d0: eef10113 addi sp,sp,-273 # deadbeef <pass+0x5eadbb97>
+800001d4: 0020a023 sw sp,0(ra) # 80800000 <pass+0x7ffca8>
+800001d8: 00000f17 auipc t5,0x0
+800001dc: 010f0f13 addi t5,t5,16 # 800001e8 <test3>
+800001e0: 0000a183 lw gp,0(ra)
+800001e4: 1680006f j 8000034c <fail>
+
+800001e8 <test3>:
+800001e8: 00300e13 li t3,3
+800001ec: 00000f17 auipc t5,0x0
+800001f0: 160f0f13 addi t5,t5,352 # 8000034c <fail>
+800001f4: 00ff02b7 lui t0,0xff0
+800001f8: 3b32a073 csrs pmpaddr3,t0
+800001fc: 3b302373 csrr t1,pmpaddr3
+80000200: 14629663 bne t0,t1,8000034c <fail>
+80000204: 0ff00293 li t0,255
+80000208: 3b32a073 csrs pmpaddr3,t0
+8000020c: 3b302373 csrr t1,pmpaddr3
+80000210: 00ff02b7 lui t0,0xff0
+80000214: 0ff28293 addi t0,t0,255 # ff00ff <_start-0x7f00ff01>
+80000218: 12629a63 bne t0,t1,8000034c <fail>
+8000021c: 00ff02b7 lui t0,0xff0
+80000220: 3b32b073 csrc pmpaddr3,t0
+80000224: 3b302373 csrr t1,pmpaddr3
+80000228: 0ff00293 li t0,255
+8000022c: 12629063 bne t0,t1,8000034c <fail>
+80000230: 00ff02b7 lui t0,0xff0
+80000234: 0ff28293 addi t0,t0,255 # ff00ff <_start-0x7f00ff01>
+80000238: 3a02b073 csrc pmpcfg0,t0
+8000023c: 3a002373 csrr t1,pmpcfg0
+80000240: 079a02b7 lui t0,0x79a0
+80000244: 10629463 bne t0,t1,8000034c <fail>
+80000248: 00ff02b7 lui t0,0xff0
+8000024c: 70728293 addi t0,t0,1799 # ff0707 <_start-0x7f00f8f9>
+80000250: 3a02a073 csrs pmpcfg0,t0
+80000254: 3a002373 csrr t1,pmpcfg0
+80000258: 079a02b7 lui t0,0x79a0
+8000025c: 70728293 addi t0,t0,1799 # 79a0707 <_start-0x7865f8f9>
+80000260: 0e629663 bne t0,t1,8000034c <fail>
+
+80000264 <test4>:
+80000264: 00400e13 li t3,4
+80000268: 00000f17 auipc t5,0x0
+8000026c: 0e4f0f13 addi t5,t5,228 # 8000034c <fail>
+80000270: 00000117 auipc sp,0x0
+80000274: 01010113 addi sp,sp,16 # 80000280 <test5>
+80000278: 34111073 csrw mepc,sp
+8000027c: 30200073 mret
+
+80000280 <test5>:
+80000280: 00500e13 li t3,5
+80000284: 00000f17 auipc t5,0x0
+80000288: 0c8f0f13 addi t5,t5,200 # 8000034c <fail>
+8000028c: deadc137 lui sp,0xdeadc
+80000290: eef10113 addi sp,sp,-273 # deadbeef <pass+0x5eadbb97>
+80000294: 808000b7 lui ra,0x80800
+80000298: 0020a023 sw sp,0(ra) # 80800000 <pass+0x7ffca8>
+8000029c: 00000f17 auipc t5,0x0
+800002a0: 010f0f13 addi t5,t5,16 # 800002ac <test6>
+800002a4: 0000a183 lw gp,0(ra)
+800002a8: 0a40006f j 8000034c <fail>
+
+800002ac <test6>:
+800002ac: 00600e13 li t3,6
+
+800002b0 <test7>:
+800002b0: 00700e13 li t3,7
+800002b4: 00000f17 auipc t5,0x0
+800002b8: 098f0f13 addi t5,t5,152 # 8000034c <fail>
+800002bc: 890000b7 lui ra,0x89000
+800002c0: ff008093 addi ra,ra,-16 # 88fffff0 <pass+0x8fffc98>
+800002c4: 0000a183 lw gp,0(ra)
+800002c8: 00000f17 auipc t5,0x0
+800002cc: 010f0f13 addi t5,t5,16 # 800002d8 <test8a>
+800002d0: 0030a023 sw gp,0(ra)
+800002d4: 0780006f j 8000034c <fail>
+
+800002d8 <test8a>:
+800002d8: 00800e13 li t3,8
+800002dc: 00000f17 auipc t5,0x0
+800002e0: 014f0f13 addi t5,t5,20 # 800002f0 <test8b>
+800002e4: 00100493 li s1,1
+800002e8: 3a305073 csrwi pmpcfg3,0
+800002ec: 0600006f j 8000034c <fail>
+
+800002f0 <test8b>:
+800002f0: 00800e13 li t3,8
+800002f4: 1c1e22b7 lui t0,0x1c1e2
+800002f8: 90028293 addi t0,t0,-1792 # 1c1e1900 <_start-0x63e1e700>
+800002fc: 3a302373 csrr t1,pmpcfg3
+80000300: 04629663 bne t0,t1,8000034c <fail>
+
+80000304 <test9a>:
+80000304: 00900e13 li t3,9
+80000308: 00000f17 auipc t5,0x0
+8000030c: 044f0f13 addi t5,t5,68 # 8000034c <fail>
+80000310: 00000493 li s1,0
+80000314: 00000117 auipc sp,0x0
+80000318: 01010113 addi sp,sp,16 # 80000324 <test9b>
+8000031c: 34111073 csrw mepc,sp
+80000320: 30200073 mret
+
+80000324 <test9b>:
+80000324: 00900e13 li t3,9
+80000328: 00000f17 auipc t5,0x0
+8000032c: 014f0f13 addi t5,t5,20 # 8000033c <test9c>
+80000330: 00100493 li s1,1
+80000334: 3ba05073 csrwi pmpaddr10,0
+80000338: 0140006f j 8000034c <fail>
+
+8000033c <test9c>:
+8000033c: 00900e13 li t3,9
+80000340: fff00293 li t0,-1
+80000344: 3ba02373 csrr t1,pmpaddr10
+80000348: 00628863 beq t0,t1,80000358 <pass>
+
+8000034c <fail>:
+8000034c: f0100137 lui sp,0xf0100
+80000350: f2410113 addi sp,sp,-220 # f00fff24 <pass+0x700ffbcc>
+80000354: 01c12023 sw t3,0(sp)
+
+80000358 <pass>:
+80000358: f0100137 lui sp,0xf0100
+8000035c: f2010113 addi sp,sp,-224 # f00fff20 <pass+0x700ffbc8>
+80000360: 00012023 sw zero,0(sp)
diff --git a/VexRiscv/src/test/cpp/raw/pmp/build/pmp.elf b/VexRiscv/src/test/cpp/raw/pmp/build/pmp.elf
new file mode 100755
index 0000000..f6c3c69
--- /dev/null
+++ b/VexRiscv/src/test/cpp/raw/pmp/build/pmp.elf
Binary files differ
diff --git a/VexRiscv/src/test/cpp/raw/pmp/build/pmp.hex b/VexRiscv/src/test/cpp/raw/pmp/build/pmp.hex
new file mode 100644
index 0000000..509c291
--- /dev/null
+++ b/VexRiscv/src/test/cpp/raw/pmp/build/pmp.hex
@@ -0,0 +1,58 @@
+:0200000480007A
+:10000000930400009700000093800001739050302B
+:100010006F00400173101F3463940400730020309C
+:1000200067000F00130E0000170F0000130F4F3270
+:10003000B70000803782008037C1ADDE1301F1EEDA
+:1000400023A020002320220083A100006310313070
+:1000500083210200631C312EB7021A077390023A03
+:100060007323003A6394622EB702191A93824230C6
+:100070007390123AB7120F009382A2907390223AB3
+:100080007323203A6394622CB7221E1C9382029041
+:100090007390323AB70200207390023B7323003B07
+:1000A0006396622A9302F0FF7390123BB7022020FE
+:1000B0007390223BB74200209382F2FF7390323B51
+:1000C000B74200209382F2FF7390423BB742002078
+:1000D0009382F2FF7390523BB70200239382F2FFA8
+:1000E0007390623BB70204229382F2FF7390723BDB
+:1000F000B7020D207390823BB7020E207390923BA3
+:100100009302F0FF7390A23B930200007390B23B06
+:10011000930200007390C23B930200007390D23BA5
+:10012000930200007390E23B9302F0FF7390F23B66
+:100130003701C1001301E1FE23A02000232022008B
+:1001400083A1000063143120930100008321020089
+:10015000631E311E130E1000170F0000130F4F1FE8
+:10016000B7129A07938282807390023A7323003AFF
+:10017000639E621CB700808037C1ADDE1301F1EED3
+:1001800023A02000170F0000130F0F0183A1000010
+:100190006F00C01B130E2000170F0000130F4F1B22
+:1001A000B7021A077390023A7323003A6380621A07
+:1001B0007350303B7323303B631A03187350203B5A
+:1001C0007323203B63040318B700808037C1ADDE82
+:1001D0001301F1EE23A02000170F0000130F0F01F1
+:1001E00083A100006F008016130E3000170F00006F
+:1001F000130F0F16B702FF0073A0323B7323303B7F
+:10020000639662149302F00F73A0323B7323303B6A
+:10021000B702FF009382F20F639A6212B702FF00E7
+:1002200073B0323B7323303B9302F00F6390621242
+:10023000B702FF009382F20F73B0023A7323003AC1
+:10024000B7029A0763946210B702FF00938272703C
+:1002500073A0023A7323003AB7029A07938272702E
+:100260006396620E130E4000170F0000130F4F0E1F
+:1002700017010000130101017310113473002030C5
+:10028000130E5000170F0000130F8F0C37C1ADDE97
+:100290001301F1EEB700808023A02000170F0000AB
+:1002A000130F0F0183A100006F00400A130E6000BE
+:1002B000130E7000170F0000130F8F09B70000898D
+:1002C000938000FF83A10000170F0000130F0F01A0
+:1002D00023A030006F008007130E8000170F00006E
+:1002E000130F4F01930410007350303A6F00000653
+:1002F000130E8000B7221E1C938202907323303AA3
+:1003000063966204130E9000170F0000130F4F0442
+:100310009304000017010000130101017310113450
+:1003200073002030130E9000170F0000130F4F01C1
+:10033000930410007350A03B6F004001130E900017
+:100340009302F0FF7323A03B63886200370110F033
+:10035000130141F22320C101370110F0130101F212
+:040360002320010055
+:040000058000000077
+:00000001FF
diff --git a/VexRiscv/src/test/cpp/raw/pmp/build/pmp.map b/VexRiscv/src/test/cpp/raw/pmp/build/pmp.map
new file mode 100644
index 0000000..ab2c78d
--- /dev/null
+++ b/VexRiscv/src/test/cpp/raw/pmp/build/pmp.map
@@ -0,0 +1,35 @@
+
+Memory Configuration
+
+Name Origin Length Attributes
+onChipRam 0x0000000080000000 0x0000000000020000 w !xr
+*default* 0x0000000000000000 0xffffffffffffffff
+
+Linker script and memory map
+
+LOAD build/src/crt.o
+LOAD /opt/riscv_10092021/bin/../lib/gcc/riscv64-unknown-elf/8.3.0/rv32i/ilp32/libgcc.a
+START GROUP
+LOAD /opt/riscv_10092021/bin/../lib/gcc/riscv64-unknown-elf/8.3.0/../../../../riscv64-unknown-elf/lib/rv32i/ilp32/libc.a
+LOAD /opt/riscv_10092021/bin/../lib/gcc/riscv64-unknown-elf/8.3.0/../../../../riscv64-unknown-elf/lib/rv32i/ilp32/libgloss.a
+END GROUP
+LOAD /opt/riscv_10092021/bin/../lib/gcc/riscv64-unknown-elf/8.3.0/rv32i/ilp32/libgcc.a
+
+.crt_section 0x0000000080000000 0x364
+ 0x0000000080000000 . = ALIGN (0x4)
+ *crt.o(.text)
+ .text 0x0000000080000000 0x364 build/src/crt.o
+ 0x0000000080000000 _start
+ 0x0000000080000014 trap
+OUTPUT(build/pmp.elf elf32-littleriscv)
+
+.data 0x0000000080000364 0x0
+ .data 0x0000000080000364 0x0 build/src/crt.o
+
+.bss 0x0000000080000364 0x0
+ .bss 0x0000000080000364 0x0 build/src/crt.o
+
+.riscv.attributes
+ 0x0000000000000000 0x1a
+ .riscv.attributes
+ 0x0000000000000000 0x1a build/src/crt.o
diff --git a/VexRiscv/src/test/cpp/raw/pmp/makefile b/VexRiscv/src/test/cpp/raw/pmp/makefile
new file mode 100644
index 0000000..0069df4
--- /dev/null
+++ b/VexRiscv/src/test/cpp/raw/pmp/makefile
@@ -0,0 +1,3 @@
+PROJ_NAME=pmp
+
+include ../common/asm.mk
diff --git a/VexRiscv/src/test/cpp/raw/pmp/src/crt.S b/VexRiscv/src/test/cpp/raw/pmp/src/crt.S
new file mode 100644
index 0000000..ce10ad7
--- /dev/null
+++ b/VexRiscv/src/test/cpp/raw/pmp/src/crt.S
@@ -0,0 +1,269 @@
+/*
+ * Copyright (c) 2020 Samuel Lindemer <samuel.lindemer@ri.se>
+ *
+ * SPDX-License-Identifier: MIT
+ */
+
+#define TEST_ID x28
+#define TRAP_RETURN x30
+#define TRAP_EXIT x9
+
+#define PMPCFG0 0x071a0000
+#define PMPCFG0_ 0x079a0808
+#define PMPCFG1 0x1a190304
+#define PMPCFG2 0x000f090a
+#define PMPCFG3 0x1c1e1900
+
+#define PMPADDR0 0x20000000 // OFF (test0) -> TOR (test1) -> OFF (test2)
+#define PMPADDR1 0xffffffff // OFF (test0) -> TOR (test1) -> OFF (test2)
+#define PMPADDR2 0x20200000 // NAPOT W
+#define PMPADDR3 0x20003fff // OFF RWX -> 0x00000000 OFF RWX (test2)
+#define PMPADDR4 0x20003fff // OFF X
+#define PMPADDR5 0x20003fff // OFF RW
+#define PMPADDR6 0x22ffffff // NAPOT R
+#define PMPADDR7 0x2203ffff // NAPOT W
+#define PMPADDR8 0x200d0000 // TOR W
+#define PMPADDR9 0x200e0000 // TOR R
+#define PMPADDR10 0xffffffff // TOR RWX
+#define PMPADDR11 0x00000000 // OFF
+#define PMPADDR12 0x00000000 // OFF
+#define PMPADDR13 0x00000000 // NAPOT R
+#define PMPADDR14 0x00000000 // NAPOT WX
+#define PMPADDR15 0xffffffff // NAPOT X
+
+.global _start
+_start:
+ li TRAP_EXIT, 0x0
+ la x1, trap
+ csrw mtvec, x1
+ j test0
+
+.global trap
+trap:
+ csrw mepc, TRAP_RETURN
+ bnez TRAP_EXIT, trap_exit
+ mret
+
+// return from trap, but stay in M-mode
+trap_exit:
+ jr TRAP_RETURN
+
+// configure PMP, attempt read/write from machine mode
+test0:
+ li TEST_ID, 0
+ la TRAP_RETURN, fail
+
+ li x1, 0x80000000
+ li x4, 0x80008000
+ li x2, 0xdeadbeef
+ sw x2, 0x0(x1)
+ sw x2, 0x0(x4)
+ lw x3, 0x0(x1)
+ bne x2, x3, fail
+ lw x3, 0x0(x4)
+ bne x2, x3, fail
+
+ li x5, PMPCFG0
+ csrw pmpcfg0, x5
+ csrr x6, pmpcfg0
+ bne x5, x6, fail
+ li x5, PMPCFG1
+ csrw pmpcfg1, x5
+ li x5, PMPCFG2
+ csrw pmpcfg2, x5
+ csrr x6, pmpcfg2
+ bne x5, x6, fail
+ li x5, PMPCFG3
+ csrw pmpcfg3, x5
+ li x5, PMPADDR0
+ csrw pmpaddr0, x5
+ csrr x6, pmpaddr0
+ bne x5, x6, fail
+ li x5, PMPADDR1
+ csrw pmpaddr1, x5
+ li x5, PMPADDR2
+ csrw pmpaddr2, x5
+ li x5, PMPADDR3
+ csrw pmpaddr3, x5
+ li x5, PMPADDR4
+ csrw pmpaddr4, x5
+ li x5, PMPADDR5
+ csrw pmpaddr5, x5
+ li x5, PMPADDR6
+ csrw pmpaddr6, x5
+ li x5, PMPADDR7
+ csrw pmpaddr7, x5
+ li x5, PMPADDR8
+ csrw pmpaddr8, x5
+ li x5, PMPADDR9
+ csrw pmpaddr9, x5
+ li x5, PMPADDR10
+ csrw pmpaddr10, x5
+ li x5, PMPADDR11
+ csrw pmpaddr11, x5
+ li x5, PMPADDR12
+ csrw pmpaddr12, x5
+ li x5, PMPADDR13
+ csrw pmpaddr13, x5
+ li x5, PMPADDR14
+ csrw pmpaddr14, x5
+ li x5, PMPADDR15
+ csrw pmpaddr15, x5
+
+ li x2, 0xc0ffee
+ sw x2, 0x0(x1)
+ sw x2, 0x0(x4)
+ lw x3, 0x0(x1)
+ bne x2, x3, fail
+ li x3, 0x0
+ lw x3, 0x0(x4)
+ bne x2, x3, fail
+
+// lock region 2, attempt read/write from machine mode
+test1:
+ li TEST_ID, 1
+ la TRAP_RETURN, fail
+ li x5, PMPCFG0_
+ csrw pmpcfg0, x5 // lock region 2
+ csrr x6, pmpcfg0
+ bne x5, x6, fail
+ li x1, 0x80800000
+ li x2, 0xdeadbeef
+ sw x2, 0x0(x1) // should be OK (write region 2)
+ la TRAP_RETURN, test2
+ lw x3, 0x0(x1) // should fault (read region 2)
+ j fail
+
+// "unlock" region 2, attempt read/write from machine mode
+test2:
+ li TEST_ID, 2
+ la TRAP_RETURN, fail
+ li x5, PMPCFG0
+ csrw pmpcfg0, x5 // "unlock" region 2
+ csrr x6, pmpcfg0
+ beq x5, x6, fail
+ csrwi pmpaddr3, 0x0
+ csrr x6, pmpaddr3
+ bnez x6, fail
+ csrwi pmpaddr2, 0x0
+ csrr x6, pmpaddr2
+ beqz x6, fail
+ li x1, 0x80800000
+ li x2, 0xdeadbeef
+ sw x2, 0x0(x1) // should still be OK (write region 2)
+ la TRAP_RETURN, test3
+ lw x3, 0x0(x1) // should still fault (read region 2)
+ j fail
+
+// verify masked CSR read/write operations
+test3:
+ li TEST_ID, 3
+ la TRAP_RETURN, fail
+ li x5, 0x00ff0000
+ csrs pmpaddr3, x5
+ csrr x6, pmpaddr3
+ bne x5, x6, fail
+ li x5, 0x000000ff
+ csrs pmpaddr3, x5
+ csrr x6, pmpaddr3
+ li x5, 0x00ff00ff
+ bne x5, x6, fail
+ li x5, 0x00ff0000
+ csrc pmpaddr3, x5
+ csrr x6, pmpaddr3
+ li x5, 0x000000ff
+ bne x5, x6, fail
+ li x5, 0x00ff00ff
+ csrc pmpcfg0, x5
+ csrr x6, pmpcfg0
+ li x5, 0x079a0000
+ bne x5, x6, fail
+ li x5, 0x00ff0707
+ csrs pmpcfg0, x5
+ csrr x6, pmpcfg0
+ li x5, 0x079a0707
+ bne x5, x6, fail
+
+// jump into U-mode
+test4:
+ li TEST_ID, 4
+ la TRAP_RETURN, fail
+ la x2, test5
+ csrw mepc, x2
+ mret
+
+// attempt to read/write the locked region from U-mode
+test5:
+ li TEST_ID, 5
+ la TRAP_RETURN, fail
+ li x2, 0xdeadbeef
+ li x1, 0x80800000
+ sw x2, 0x0(x1) // should be OK (write region 2)
+ la TRAP_RETURN, test6
+ lw x3, 0x0(x1) // should fault (read region 2)
+ j fail
+
+// attempt to read/write overlapping regions from U-mode
+test6:
+ li TEST_ID, 6
+ //la TRAP_RETURN, fail
+ //li x2, 0xdeadbeef
+ //li x1, 0x88000000
+ //sw x2, 0x0(x1) // should be OK (write region 6/7)
+ //lw x3, 0x0(x1) // should be OK (write region 6/7)
+
+test7:
+ li TEST_ID, 7
+ la TRAP_RETURN, fail
+ li x1, 0x88fffff0
+ lw x3, 0x0(x1) // should be OK (read region 6)
+ la TRAP_RETURN, test8a
+ sw x3, 0x0(x1) // should fault (write region 6)
+ j fail
+
+// attempt to write a pmpcfg# register from U-mode
+test8a:
+ li TEST_ID, 8
+ la TRAP_RETURN, test8b
+ li TRAP_EXIT, 0x1
+ csrwi pmpcfg3, 0x0
+ j fail
+
+// check the result from M-mode
+test8b:
+ li TEST_ID, 8
+ li x5, PMPCFG3
+ csrr x6, pmpcfg3
+ bne x5, x6, fail
+
+// jump back into U-mode
+test9a:
+ li TEST_ID, 9
+ la TRAP_RETURN, fail
+ li TRAP_EXIT, 0x0
+ la x2, test9b
+ csrw mepc, x2
+ mret
+
+// attempt to write a pmpaddr# register from U-mode
+test9b:
+ li TEST_ID, 9
+ la TRAP_RETURN, test9c
+ li TRAP_EXIT, 0x1
+ csrwi pmpaddr10, 0x0
+ j fail
+
+// check the result from M-mode
+test9c:
+ li TEST_ID, 9
+ li x5, PMPADDR10
+ csrr x6, pmpaddr10
+ beq x5, x6, pass
+
+fail:
+ li x2, 0xf00fff24
+ sw TEST_ID, 0(x2)
+
+pass:
+ li x2, 0xf00fff20
+ sw x0, 0(x2) \ No newline at end of file
diff --git a/VexRiscv/src/test/cpp/raw/pmp/src/ld b/VexRiscv/src/test/cpp/raw/pmp/src/ld
new file mode 100644
index 0000000..93d8de8
--- /dev/null
+++ b/VexRiscv/src/test/cpp/raw/pmp/src/ld
@@ -0,0 +1,16 @@
+OUTPUT_ARCH( "riscv" )
+
+MEMORY {
+ onChipRam (W!RX)/*(RX)*/ : ORIGIN = 0x80000000, LENGTH = 128K
+}
+
+SECTIONS
+{
+
+ .crt_section :
+ {
+ . = ALIGN(4);
+ *crt.o(.text)
+ } > onChipRam
+
+}
diff --git a/VexRiscv/src/test/cpp/raw/smp/.gitignore b/VexRiscv/src/test/cpp/raw/smp/.gitignore
new file mode 100644
index 0000000..a7caa3b
--- /dev/null
+++ b/VexRiscv/src/test/cpp/raw/smp/.gitignore
@@ -0,0 +1,6 @@
+*.map
+*.v
+*.elf
+*.o
+*.hex
+!*.bin \ No newline at end of file
diff --git a/VexRiscv/src/test/cpp/raw/smp/build/smp.asm b/VexRiscv/src/test/cpp/raw/smp/build/smp.asm
new file mode 100644
index 0000000..b0492f9
--- /dev/null
+++ b/VexRiscv/src/test/cpp/raw/smp/build/smp.asm
@@ -0,0 +1,441 @@
+
+build/smp.elf: file format elf32-littleriscv
+
+
+Disassembly of section .crt_section:
+
+80000000 <_start>:
+80000000: f1402473 csrr s0,mhartid
+80000004: f80002b7 lui t0,0xf8000
+80000008: f1402373 csrr t1,mhartid
+8000000c: 01031313 slli t1,t1,0x10
+80000010: 006282b3 add t0,t0,t1
+80000014: 0082a023 sw s0,0(t0) # f8000000 <consistancy_done_call+0x77fffab8>
+
+80000018 <count_thread_start>:
+80000018: 00100513 li a0,1
+8000001c: 00000597 auipc a1,0x0
+80000020: 42058593 addi a1,a1,1056 # 8000043c <thread_count>
+80000024: 00a5a02f amoadd.w zero,a0,(a1)
+
+80000028 <count_thread_wait>:
+80000028: 00000417 auipc s0,0x0
+8000002c: 41442403 lw s0,1044(s0) # 8000043c <thread_count>
+80000030: 19000513 li a0,400
+80000034: 3fc000ef jal ra,80000430 <sleep>
+80000038: 00000497 auipc s1,0x0
+8000003c: 4044a483 lw s1,1028(s1) # 8000043c <thread_count>
+80000040: fe8494e3 bne s1,s0,80000028 <count_thread_wait>
+80000044: f80002b7 lui t0,0xf8000
+80000048: 00428293 addi t0,t0,4 # f8000004 <consistancy_done_call+0x77fffabc>
+8000004c: f1402373 csrr t1,mhartid
+80000050: 01031313 slli t1,t1,0x10
+80000054: 006282b3 add t0,t0,t1
+80000058: 0092a023 sw s1,0(t0)
+
+8000005c <barrier_amo_test>:
+8000005c: 00100513 li a0,1
+80000060: 290000ef jal ra,800002f0 <barrier_amo>
+80000064: 00200513 li a0,2
+80000068: 288000ef jal ra,800002f0 <barrier_amo>
+8000006c: 00300513 li a0,3
+80000070: 280000ef jal ra,800002f0 <barrier_amo>
+80000074: 00400513 li a0,4
+80000078: 2f4000ef jal ra,8000036c <barrier_lrsc>
+8000007c: 00500513 li a0,5
+80000080: 2ec000ef jal ra,8000036c <barrier_lrsc>
+80000084: 00600513 li a0,6
+80000088: 2e4000ef jal ra,8000036c <barrier_lrsc>
+8000008c: 00700513 li a0,7
+80000090: 260000ef jal ra,800002f0 <barrier_amo>
+80000094: 00800513 li a0,8
+80000098: 2d4000ef jal ra,8000036c <barrier_lrsc>
+8000009c: 00000197 auipc gp,0x0
+800000a0: 3ac1a183 lw gp,940(gp) # 80000448 <barrier_allocator>
+
+800000a4 <consistancy_test1>:
+800000a4: 00000297 auipc t0,0x0
+800000a8: 06828293 addi t0,t0,104 # 8000010c <consistancy_init_load>
+800000ac: 00000317 auipc t1,0x0
+800000b0: 48532a23 sw t0,1172(t1) # 80000540 <consistancy_init_call>
+800000b4: 00000297 auipc t0,0x0
+800000b8: 06028293 addi t0,t0,96 # 80000114 <consistancy_do_simple_fence>
+800000bc: 00000317 auipc t1,0x0
+800000c0: 48532423 sw t0,1160(t1) # 80000544 <consistancy_do_call>
+800000c4: 00000297 auipc t0,0x0
+800000c8: 01428293 addi t0,t0,20 # 800000d8 <consistancy_test2>
+800000cc: 00000317 auipc t1,0x0
+800000d0: 46532e23 sw t0,1148(t1) # 80000548 <consistancy_done_call>
+800000d4: 0640006f j 80000138 <consistancy_start>
+
+800000d8 <consistancy_test2>:
+800000d8: 00000297 auipc t0,0x0
+800000dc: 03428293 addi t0,t0,52 # 8000010c <consistancy_init_load>
+800000e0: 00000317 auipc t1,0x0
+800000e4: 46532023 sw t0,1120(t1) # 80000540 <consistancy_init_call>
+800000e8: 00000297 auipc t0,0x0
+800000ec: 04028293 addi t0,t0,64 # 80000128 <consistancy_do_rl_fence>
+800000f0: 00000317 auipc t1,0x0
+800000f4: 44532a23 sw t0,1108(t1) # 80000544 <consistancy_do_call>
+800000f8: 00000297 auipc t0,0x0
+800000fc: 2f428293 addi t0,t0,756 # 800003ec <success>
+80000100: 00000317 auipc t1,0x0
+80000104: 44532423 sw t0,1096(t1) # 80000548 <consistancy_done_call>
+80000108: 0300006f j 80000138 <consistancy_start>
+
+8000010c <consistancy_init_load>:
+8000010c: 0004a983 lw s3,0(s1)
+80000110: 0c40006f j 800001d4 <consistancy_do_init_done>
+
+80000114 <consistancy_do_simple_fence>:
+80000114: 01242023 sw s2,0(s0)
+80000118: 0120000f fence w,r
+8000011c: 0004a983 lw s3,0(s1)
+80000120: 05342023 sw s3,64(s0)
+80000124: 0cc0006f j 800001f0 <consistancy_join>
+
+80000128 <consistancy_do_rl_fence>:
+80000128: 01242023 sw s2,0(s0)
+8000012c: 1204a9af lr.w.rl s3,(s1)
+80000130: 05342023 sw s3,64(s0)
+80000134: 0bc0006f j 800001f0 <consistancy_join>
+
+80000138 <consistancy_start>:
+80000138: 00018513 mv a0,gp
+8000013c: 00118193 addi gp,gp,1
+80000140: 22c000ef jal ra,8000036c <barrier_lrsc>
+80000144: 00000297 auipc t0,0x0
+80000148: 3002a823 sw zero,784(t0) # 80000454 <consistancy_all_tested>
+
+8000014c <consistancy_loop>:
+8000014c: 00018513 mv a0,gp
+80000150: 00118193 addi gp,gp,1
+80000154: 218000ef jal ra,8000036c <barrier_lrsc>
+80000158: 00000297 auipc t0,0x0
+8000015c: 2fc2a283 lw t0,764(t0) # 80000454 <consistancy_all_tested>
+80000160: 03200313 li t1,50
+80000164: 1662da63 bge t0,t1,800002d8 <consistancy_passed>
+80000168: 00000297 auipc t0,0x0
+8000016c: 2e42a283 lw t0,740(t0) # 8000044c <consistancy_a_hart>
+80000170: 00000317 auipc t1,0x0
+80000174: 2e032303 lw t1,736(t1) # 80000450 <consistancy_b_hart>
+80000178: 06628c63 beq t0,t1,800001f0 <consistancy_join>
+8000017c: f14022f3 csrr t0,mhartid
+80000180: 00000317 auipc t1,0x0
+80000184: 2cc32303 lw t1,716(t1) # 8000044c <consistancy_a_hart>
+80000188: 00000417 auipc s0,0x0
+8000018c: 33840413 addi s0,s0,824 # 800004c0 <consistancy_a_value>
+80000190: 00000497 auipc s1,0x0
+80000194: 33448493 addi s1,s1,820 # 800004c4 <consistancy_b_value>
+80000198: 02628863 beq t0,t1,800001c8 <consistancy_do>
+8000019c: 00000317 auipc t1,0x0
+800001a0: 2b432303 lw t1,692(t1) # 80000450 <consistancy_b_hart>
+800001a4: 00000417 auipc s0,0x0
+800001a8: 32040413 addi s0,s0,800 # 800004c4 <consistancy_b_value>
+800001ac: 00000497 auipc s1,0x0
+800001b0: 31448493 addi s1,s1,788 # 800004c0 <consistancy_a_value>
+800001b4: 00628a63 beq t0,t1,800001c8 <consistancy_do>
+
+800001b8 <consistancy_hart_not_involved>:
+800001b8: 00018513 mv a0,gp
+800001bc: 00118193 addi gp,gp,1
+800001c0: 1ac000ef jal ra,8000036c <barrier_lrsc>
+800001c4: 02c0006f j 800001f0 <consistancy_join>
+
+800001c8 <consistancy_do>:
+800001c8: 00000297 auipc t0,0x0
+800001cc: 3782a283 lw t0,888(t0) # 80000540 <consistancy_init_call>
+800001d0: 000280e7 jalr t0
+
+800001d4 <consistancy_do_init_done>:
+800001d4: 29a00913 li s2,666
+800001d8: 00018513 mv a0,gp
+800001dc: 00118193 addi gp,gp,1
+800001e0: 18c000ef jal ra,8000036c <barrier_lrsc>
+800001e4: 00000297 auipc t0,0x0
+800001e8: 3602a283 lw t0,864(t0) # 80000544 <consistancy_do_call>
+800001ec: 000280e7 jalr t0
+
+800001f0 <consistancy_join>:
+800001f0: 0330000f fence rw,rw
+800001f4: 00018513 mv a0,gp
+800001f8: 00118193 addi gp,gp,1
+800001fc: 170000ef jal ra,8000036c <barrier_lrsc>
+80000200: f14022f3 csrr t0,mhartid
+80000204: f40294e3 bnez t0,8000014c <consistancy_loop>
+
+80000208 <consistancy_assert>:
+80000208: 00000297 auipc t0,0x0
+8000020c: 2442a283 lw t0,580(t0) # 8000044c <consistancy_a_hart>
+80000210: 00000317 auipc t1,0x0
+80000214: 24032303 lw t1,576(t1) # 80000450 <consistancy_b_hart>
+80000218: 04628263 beq t0,t1,8000025c <consistancy_increment>
+8000021c: 00000517 auipc a0,0x0
+80000220: 2e852503 lw a0,744(a0) # 80000504 <consistancy_a_readed>
+80000224: f80002b7 lui t0,0xf8000
+80000228: 01428293 addi t0,t0,20 # f8000014 <consistancy_done_call+0x77fffacc>
+8000022c: f1402373 csrr t1,mhartid
+80000230: 01031313 slli t1,t1,0x10
+80000234: 006282b3 add t0,t0,t1
+80000238: 00a2a023 sw a0,0(t0)
+8000023c: 00000517 auipc a0,0x0
+80000240: 2c452503 lw a0,708(a0) # 80000500 <consistancy_b_readed>
+80000244: f80002b7 lui t0,0xf8000
+80000248: 01428293 addi t0,t0,20 # f8000014 <consistancy_done_call+0x77fffacc>
+8000024c: f1402373 csrr t1,mhartid
+80000250: 01031313 slli t1,t1,0x10
+80000254: 006282b3 add t0,t0,t1
+80000258: 00a2a023 sw a0,0(t0)
+
+8000025c <consistancy_increment>:
+8000025c: f14022f3 csrr t0,mhartid
+80000260: ee0296e3 bnez t0,8000014c <consistancy_loop>
+80000264: 00000297 auipc t0,0x0
+80000268: 2402ae23 sw zero,604(t0) # 800004c0 <consistancy_a_value>
+8000026c: 00000297 auipc t0,0x0
+80000270: 2402ac23 sw zero,600(t0) # 800004c4 <consistancy_b_value>
+80000274: 00000417 auipc s0,0x0
+80000278: 1c842403 lw s0,456(s0) # 8000043c <thread_count>
+8000027c: 00000297 auipc t0,0x0
+80000280: 1d42a283 lw t0,468(t0) # 80000450 <consistancy_b_hart>
+80000284: 00128293 addi t0,t0,1
+80000288: 00000317 auipc t1,0x0
+8000028c: 1c532423 sw t0,456(t1) # 80000450 <consistancy_b_hart>
+80000290: 04829063 bne t0,s0,800002d0 <consistancy_increment_fence>
+80000294: 00000317 auipc t1,0x0
+80000298: 1a032e23 sw zero,444(t1) # 80000450 <consistancy_b_hart>
+8000029c: 00000297 auipc t0,0x0
+800002a0: 1b02a283 lw t0,432(t0) # 8000044c <consistancy_a_hart>
+800002a4: 00128293 addi t0,t0,1
+800002a8: 00000317 auipc t1,0x0
+800002ac: 1a532223 sw t0,420(t1) # 8000044c <consistancy_a_hart>
+800002b0: 02829063 bne t0,s0,800002d0 <consistancy_increment_fence>
+800002b4: 00000317 auipc t1,0x0
+800002b8: 18032c23 sw zero,408(t1) # 8000044c <consistancy_a_hart>
+800002bc: 00000297 auipc t0,0x0
+800002c0: 1982a283 lw t0,408(t0) # 80000454 <consistancy_all_tested>
+800002c4: 00128293 addi t0,t0,1
+800002c8: 00000317 auipc t1,0x0
+800002cc: 18532623 sw t0,396(t1) # 80000454 <consistancy_all_tested>
+
+800002d0 <consistancy_increment_fence>:
+800002d0: 0130000f fence w,rw
+800002d4: e79ff06f j 8000014c <consistancy_loop>
+
+800002d8 <consistancy_passed>:
+800002d8: 00000417 auipc s0,0x0
+800002dc: 27042403 lw s0,624(s0) # 80000548 <consistancy_done_call>
+800002e0: 00018513 mv a0,gp
+800002e4: 00118193 addi gp,gp,1
+800002e8: 084000ef jal ra,8000036c <barrier_lrsc>
+800002ec: 000400e7 jalr s0
+
+800002f0 <barrier_amo>:
+800002f0: f80002b7 lui t0,0xf8000
+800002f4: 00c28293 addi t0,t0,12 # f800000c <consistancy_done_call+0x77fffac4>
+800002f8: f1402373 csrr t1,mhartid
+800002fc: 01031313 slli t1,t1,0x10
+80000300: 006282b3 add t0,t0,t1
+80000304: 00a2a023 sw a0,0(t0)
+80000308: 00000e97 auipc t4,0x0
+8000030c: 13ceae83 lw t4,316(t4) # 80000444 <barrier_phase>
+80000310: 00000297 auipc t0,0x0
+80000314: 13028293 addi t0,t0,304 # 80000440 <barrier_value>
+80000318: 00100313 li t1,1
+8000031c: 0062a2af amoadd.w t0,t1,(t0)
+80000320: 00128293 addi t0,t0,1
+80000324: 00000317 auipc t1,0x0
+80000328: 11832303 lw t1,280(t1) # 8000043c <thread_count>
+8000032c: 00629c63 bne t0,t1,80000344 <barrier_amo_wait>
+80000330: 001e8293 addi t0,t4,1
+80000334: 00000317 auipc t1,0x0
+80000338: 10032623 sw zero,268(t1) # 80000440 <barrier_value>
+8000033c: 00000317 auipc t1,0x0
+80000340: 10532423 sw t0,264(t1) # 80000444 <barrier_phase>
+
+80000344 <barrier_amo_wait>:
+80000344: 00000297 auipc t0,0x0
+80000348: 1002a283 lw t0,256(t0) # 80000444 <barrier_phase>
+8000034c: ffd28ce3 beq t0,t4,80000344 <barrier_amo_wait>
+80000350: f80002b7 lui t0,0xf8000
+80000354: 01028293 addi t0,t0,16 # f8000010 <consistancy_done_call+0x77fffac8>
+80000358: f1402373 csrr t1,mhartid
+8000035c: 01031313 slli t1,t1,0x10
+80000360: 006282b3 add t0,t0,t1
+80000364: 00a2a023 sw a0,0(t0)
+80000368: 00008067 ret
+
+8000036c <barrier_lrsc>:
+8000036c: f80002b7 lui t0,0xf8000
+80000370: 00c28293 addi t0,t0,12 # f800000c <consistancy_done_call+0x77fffac4>
+80000374: f1402373 csrr t1,mhartid
+80000378: 01031313 slli t1,t1,0x10
+8000037c: 006282b3 add t0,t0,t1
+80000380: 00a2a023 sw a0,0(t0)
+80000384: 00000e97 auipc t4,0x0
+80000388: 0c0eae83 lw t4,192(t4) # 80000444 <barrier_phase>
+8000038c: 00000297 auipc t0,0x0
+80000390: 0b428293 addi t0,t0,180 # 80000440 <barrier_value>
+
+80000394 <barrier_lrsc_try>:
+80000394: 1002a32f lr.w t1,(t0)
+80000398: 00130313 addi t1,t1,1
+8000039c: 1862a3af sc.w t2,t1,(t0)
+800003a0: fe039ae3 bnez t2,80000394 <barrier_lrsc_try>
+800003a4: 00000297 auipc t0,0x0
+800003a8: 0982a283 lw t0,152(t0) # 8000043c <thread_count>
+800003ac: 00629c63 bne t0,t1,800003c4 <barrier_lrsc_wait>
+800003b0: 001e8293 addi t0,t4,1
+800003b4: 00000317 auipc t1,0x0
+800003b8: 08032623 sw zero,140(t1) # 80000440 <barrier_value>
+800003bc: 00000317 auipc t1,0x0
+800003c0: 08532423 sw t0,136(t1) # 80000444 <barrier_phase>
+
+800003c4 <barrier_lrsc_wait>:
+800003c4: 00000297 auipc t0,0x0
+800003c8: 0802a283 lw t0,128(t0) # 80000444 <barrier_phase>
+800003cc: ffd28ce3 beq t0,t4,800003c4 <barrier_lrsc_wait>
+800003d0: f80002b7 lui t0,0xf8000
+800003d4: 01028293 addi t0,t0,16 # f8000010 <consistancy_done_call+0x77fffac8>
+800003d8: f1402373 csrr t1,mhartid
+800003dc: 01031313 slli t1,t1,0x10
+800003e0: 006282b3 add t0,t0,t1
+800003e4: 00a2a023 sw a0,0(t0)
+800003e8: 00008067 ret
+
+800003ec <success>:
+800003ec: 00000413 li s0,0
+800003f0: f80002b7 lui t0,0xf8000
+800003f4: 00828293 addi t0,t0,8 # f8000008 <consistancy_done_call+0x77fffac0>
+800003f8: f1402373 csrr t1,mhartid
+800003fc: 01031313 slli t1,t1,0x10
+80000400: 006282b3 add t0,t0,t1
+80000404: 0082a023 sw s0,0(t0)
+80000408: 0240006f j 8000042c <end>
+
+8000040c <failure>:
+8000040c: 00100413 li s0,1
+80000410: f80002b7 lui t0,0xf8000
+80000414: 00828293 addi t0,t0,8 # f8000008 <consistancy_done_call+0x77fffac0>
+80000418: f1402373 csrr t1,mhartid
+8000041c: 01031313 slli t1,t1,0x10
+80000420: 006282b3 add t0,t0,t1
+80000424: 0082a023 sw s0,0(t0)
+80000428: 0040006f j 8000042c <end>
+
+8000042c <end>:
+8000042c: 0000006f j 8000042c <end>
+
+80000430 <sleep>:
+80000430: fff50513 addi a0,a0,-1
+80000434: fe051ee3 bnez a0,80000430 <sleep>
+80000438: 00008067 ret
+
+8000043c <thread_count>:
+8000043c: 0000 unimp
+ ...
+
+80000440 <barrier_value>:
+80000440: 0000 unimp
+ ...
+
+80000444 <barrier_phase>:
+80000444: 0000 unimp
+ ...
+
+80000448 <barrier_allocator>:
+80000448: 1000 addi s0,sp,32
+ ...
+
+8000044c <consistancy_a_hart>:
+8000044c: 0000 unimp
+ ...
+
+80000450 <consistancy_b_hart>:
+80000450: 0000 unimp
+ ...
+
+80000454 <consistancy_all_tested>:
+80000454: 0000 unimp
+80000456: 0000 unimp
+80000458: 00000013 nop
+8000045c: 00000013 nop
+80000460: 00000013 nop
+80000464: 00000013 nop
+80000468: 00000013 nop
+8000046c: 00000013 nop
+80000470: 00000013 nop
+80000474: 00000013 nop
+80000478: 00000013 nop
+8000047c: 00000013 nop
+80000480: 00000013 nop
+80000484: 00000013 nop
+80000488: 00000013 nop
+8000048c: 00000013 nop
+80000490: 00000013 nop
+80000494: 00000013 nop
+80000498: 00000013 nop
+8000049c: 00000013 nop
+800004a0: 00000013 nop
+800004a4: 00000013 nop
+800004a8: 00000013 nop
+800004ac: 00000013 nop
+800004b0: 00000013 nop
+800004b4: 00000013 nop
+800004b8: 00000013 nop
+800004bc: 00000013 nop
+
+800004c0 <consistancy_a_value>:
+800004c0: 0000 unimp
+ ...
+
+800004c4 <consistancy_b_value>:
+800004c4: 0000 unimp
+800004c6: 0000 unimp
+800004c8: 00000013 nop
+800004cc: 00000013 nop
+800004d0: 00000013 nop
+800004d4: 00000013 nop
+800004d8: 00000013 nop
+800004dc: 00000013 nop
+800004e0: 00000013 nop
+800004e4: 00000013 nop
+800004e8: 00000013 nop
+800004ec: 00000013 nop
+800004f0: 00000013 nop
+800004f4: 00000013 nop
+800004f8: 00000013 nop
+800004fc: 00000013 nop
+
+80000500 <consistancy_b_readed>:
+80000500: 0000 unimp
+ ...
+
+80000504 <consistancy_a_readed>:
+80000504: 0000 unimp
+80000506: 0000 unimp
+80000508: 00000013 nop
+8000050c: 00000013 nop
+80000510: 00000013 nop
+80000514: 00000013 nop
+80000518: 00000013 nop
+8000051c: 00000013 nop
+80000520: 00000013 nop
+80000524: 00000013 nop
+80000528: 00000013 nop
+8000052c: 00000013 nop
+80000530: 00000013 nop
+80000534: 00000013 nop
+80000538: 00000013 nop
+8000053c: 00000013 nop
+
+80000540 <consistancy_init_call>:
+80000540: 0000 unimp
+ ...
+
+80000544 <consistancy_do_call>:
+80000544: 0000 unimp
+ ...
+
+80000548 <consistancy_done_call>:
+ ...
diff --git a/VexRiscv/src/test/cpp/raw/smp/build/smp.bin b/VexRiscv/src/test/cpp/raw/smp/build/smp.bin
new file mode 100755
index 0000000..5ce6918
--- /dev/null
+++ b/VexRiscv/src/test/cpp/raw/smp/build/smp.bin
Binary files differ
diff --git a/VexRiscv/src/test/cpp/raw/smp/makefile b/VexRiscv/src/test/cpp/raw/smp/makefile
new file mode 100644
index 0000000..0886c1b
--- /dev/null
+++ b/VexRiscv/src/test/cpp/raw/smp/makefile
@@ -0,0 +1,5 @@
+PROJ_NAME=smp
+
+ATOMIC=yes
+
+include ../common/asm.mk \ No newline at end of file
diff --git a/VexRiscv/src/test/cpp/raw/smp/src/crt.S b/VexRiscv/src/test/cpp/raw/smp/src/crt.S
new file mode 100644
index 0000000..9a72bd7
--- /dev/null
+++ b/VexRiscv/src/test/cpp/raw/smp/src/crt.S
@@ -0,0 +1,287 @@
+#define CONSISTENCY_REDO_COUNT 50
+
+
+#define REPORT_OFFSET 0xF8000000
+#define REPORT_THREAD_ID 0x00
+#define REPORT_THREAD_COUNT 0x04
+#define REPORT_END 0x08
+#define REPORT_BARRIER_START 0x0C
+#define REPORT_BARRIER_END 0x10
+#define REPORT_CONSISTENCY_VALUES 0x14
+
+#define report(reg, id) \
+ li t0, REPORT_OFFSET+id; \
+ csrr t1, mhartid; \
+ slli t1, t1, 16; \
+ add t0, t0, t1; \
+ sw reg, 0(t0); \
+
+_start:
+ csrr s0, mhartid
+ report(s0, REPORT_THREAD_ID)
+
+
+count_thread_start:
+ //Count up threads
+ li a0, 1
+ la a1, thread_count
+ amoadd.w x0, a0, (a1)
+
+count_thread_wait:
+ //Wait everybody
+ lw s0, thread_count
+ li a0, 400
+ call sleep
+ lw s1, thread_count
+ bne s1, s0, count_thread_wait
+ report(s1, REPORT_THREAD_COUNT)
+
+
+barrier_amo_test:
+ li a0, 1
+ call barrier_amo
+ li a0, 2
+ call barrier_amo
+ li a0, 3
+ call barrier_amo
+
+ li a0, 4
+ call barrier_lrsc
+ li a0, 5
+ call barrier_lrsc
+ li a0, 6
+ call barrier_lrsc
+
+ li a0, 7
+ call barrier_amo
+ li a0, 8
+ call barrier_lrsc
+
+
+ lw gp, barrier_allocator
+
+consistancy_test1:
+ la t0, consistancy_init_load
+ sw t0, consistancy_init_call, t1
+ la t0, consistancy_do_simple_fence
+ sw t0, consistancy_do_call, t1
+ la t0, consistancy_test2
+ sw t0, consistancy_done_call, t1
+ j consistancy_start
+
+consistancy_test2:
+ la t0, consistancy_init_load
+ sw t0, consistancy_init_call, t1
+ la t0, consistancy_do_rl_fence
+ sw t0, consistancy_do_call, t1
+ la t0, success
+ sw t0, consistancy_done_call, t1
+ j consistancy_start
+
+
+consistancy_init_load:
+ lw s3, (s1) //Help getting the cache loaded for the consistancy check
+ j consistancy_do_init_done
+
+consistancy_do_simple_fence:
+ //Consistancy check : write to read ordering on two thread
+ sw s2, (s0)
+ fence w,r
+ lw s3, (s1)
+ sw s3, 64(s0)
+ j consistancy_join
+
+consistancy_do_rl_fence:
+ //Consistancy check : write to read ordering on two thread
+ sw s2, (s0)
+ lr.w.rl s3, (s1)
+ sw s3, 64(s0)
+ j consistancy_join
+
+
+consistancy_start:
+ mv a0, gp
+ addi gp, gp, 1
+ call barrier_lrsc
+ sw x0, consistancy_all_tested, t0
+consistancy_loop:
+ //Sync
+ mv a0, gp
+ addi gp, gp, 1
+ call barrier_lrsc
+
+ //all passed ?
+ lw t0, consistancy_all_tested
+ li t1, CONSISTENCY_REDO_COUNT
+ bge t0, t1, consistancy_passed
+
+ //identify who is A, who is B
+ lw t0, consistancy_a_hart
+ lw t1, consistancy_b_hart
+ beq t0, t1, consistancy_join
+ csrr t0, mhartid
+ lw t1, consistancy_a_hart
+ la s0, consistancy_a_value
+ la s1, consistancy_b_value
+ beq t0, t1, consistancy_do
+ lw t1, consistancy_b_hart
+ la s0, consistancy_b_value
+ la s1, consistancy_a_value
+ beq t0, t1, consistancy_do
+
+consistancy_hart_not_involved:
+ mv a0, gp
+ addi gp, gp, 1
+ call barrier_lrsc
+ j consistancy_join
+
+consistancy_do:
+ lw t0, consistancy_init_call
+ jalr t0
+consistancy_do_init_done:
+ li s2, 666
+ mv a0, gp
+ addi gp, gp, 1
+ call barrier_lrsc
+
+
+ lw t0, consistancy_do_call
+ jalr t0
+
+consistancy_join:
+ fence rw, rw //ensure updated values
+ mv a0, gp
+ addi gp, gp, 1
+ call barrier_lrsc
+ csrr t0, mhartid
+ bnez t0, consistancy_loop
+
+consistancy_assert:
+ lw t0, consistancy_a_hart
+ lw t1, consistancy_b_hart
+ beq t0, t1, consistancy_increment
+ lw a0, consistancy_a_readed
+ report(a0, REPORT_CONSISTENCY_VALUES)
+ lw a0, consistancy_b_readed
+ report(a0, REPORT_CONSISTENCY_VALUES)
+
+consistancy_increment:
+ csrr t0, mhartid
+ bnez t0, consistancy_loop
+ sw x0, (consistancy_a_value), t0
+ sw x0, (consistancy_b_value), t0
+ lw s0,thread_count
+ lw t0,consistancy_b_hart
+ addi t0, t0, 1
+ sw t0, consistancy_b_hart, t1
+ bne t0, s0, consistancy_increment_fence
+ sw x0, consistancy_b_hart, t1
+ lw t0,consistancy_a_hart
+ addi t0, t0, 1
+ sw t0, consistancy_a_hart, t1
+ bne t0, s0, consistancy_increment_fence
+ sw x0, consistancy_a_hart, t1
+ lw t0, consistancy_all_tested
+ addi t0, t0, 1
+ sw t0, consistancy_all_tested, t1
+consistancy_increment_fence:
+ fence w, rw
+ j consistancy_loop
+
+consistancy_passed:
+ lw s0, consistancy_done_call
+ mv a0, gp
+ addi gp, gp, 1
+ call barrier_lrsc
+ jalr s0
+
+
+
+#define ENTRY_PHASE t4
+barrier_amo:
+ report(a0, REPORT_BARRIER_START)
+ lw ENTRY_PHASE, barrier_phase
+ la t0, barrier_value
+ li t1, 1
+ amoadd.w t0, t1, (t0)
+ addi t0, t0, 1
+ lw t1, thread_count
+ bne t0, t1, barrier_amo_wait
+ addi t0,ENTRY_PHASE,1
+ sw x0, barrier_value, t1
+ sw t0, barrier_phase, t1
+barrier_amo_wait:
+ lw t0, barrier_phase
+ beq t0, ENTRY_PHASE, barrier_amo_wait
+ report(a0, REPORT_BARRIER_END)
+ ret
+
+barrier_lrsc:
+ report(a0, REPORT_BARRIER_START)
+ lw ENTRY_PHASE, barrier_phase
+ la t0, barrier_value
+barrier_lrsc_try:
+ lr.w t1, (t0)
+ addi t1, t1, 1
+ sc.w t2, t1, (t0)
+ bnez t2, barrier_lrsc_try
+ lw t0, thread_count
+ bne t0, t1, barrier_lrsc_wait
+ addi t0,ENTRY_PHASE,1
+ sw x0, barrier_value, t1
+ sw t0, barrier_phase, t1
+barrier_lrsc_wait:
+ lw t0, barrier_phase
+ beq t0, ENTRY_PHASE, barrier_lrsc_wait
+ report(a0, REPORT_BARRIER_END)
+ ret
+
+
+
+
+success:
+ li s0, 0
+ report(s0, REPORT_END)
+ j end
+
+failure:
+ li s0, 1
+ report(s0, REPORT_END)
+ j end
+
+end:
+ j end
+
+
+sleep:
+ addi a0, a0, -1
+ bnez a0, sleep
+ ret
+
+
+thread_count: .word 0
+
+.align 6 //Same cache line
+barrier_value: .word 0
+barrier_phase: .word 0
+barrier_allocator: .word 0x1000
+
+consistancy_a_hart: .word 0
+consistancy_b_hart: .word 0
+consistancy_all_tested: .word 0
+
+
+nop;nop;nop;nop;nop;nop;nop;nop;
+nop;nop;nop;nop;nop;nop;nop;nop;
+.align 6 //Same cache line
+consistancy_a_value: .word 0
+consistancy_b_value: .word 0
+
+.align 6 //Same cache line
+consistancy_b_readed: .word 0
+consistancy_a_readed: .word 0
+
+.align 6 //Same cache line
+consistancy_init_call: .word 0
+consistancy_do_call: .word 0
+consistancy_done_call: .word 0 \ No newline at end of file
diff --git a/VexRiscv/src/test/cpp/raw/smp/src/ld b/VexRiscv/src/test/cpp/raw/smp/src/ld
new file mode 100644
index 0000000..93d8de8
--- /dev/null
+++ b/VexRiscv/src/test/cpp/raw/smp/src/ld
@@ -0,0 +1,16 @@
+OUTPUT_ARCH( "riscv" )
+
+MEMORY {
+ onChipRam (W!RX)/*(RX)*/ : ORIGIN = 0x80000000, LENGTH = 128K
+}
+
+SECTIONS
+{
+
+ .crt_section :
+ {
+ . = ALIGN(4);
+ *crt.o(.text)
+ } > onChipRam
+
+}
diff --git a/VexRiscv/src/test/cpp/regression/.gitignore b/VexRiscv/src/test/cpp/regression/.gitignore
new file mode 100644
index 0000000..576890f
--- /dev/null
+++ b/VexRiscv/src/test/cpp/regression/.gitignore
@@ -0,0 +1,3 @@
+*.regTraceRef
+/freertos.gtkw
+*.cproject
diff --git a/VexRiscv/src/test/cpp/regression/atomic.gtkw b/VexRiscv/src/test/cpp/regression/atomic.gtkw
new file mode 100644
index 0000000..26e6575
--- /dev/null
+++ b/VexRiscv/src/test/cpp/regression/atomic.gtkw
@@ -0,0 +1,52 @@
+[*]
+[*] GTKWave Analyzer v3.3.58 (w)1999-2014 BSI
+[*] Thu Jan 4 16:18:18 2018
+[*]
+[dumpfile] "/home/spinalvm/hdl/VexRiscv/src/test/cpp/regression/atomic.vcd"
+[dumpfile_mtime] "Thu Jan 4 16:18:11 2018"
+[dumpfile_size] 19545269
+[savefile] "/home/spinalvm/hdl/VexRiscv/src/test/cpp/regression/atomic.gtkw"
+[timestart] 1478
+[size] 1784 950
+[pos] -1 -1
+*-7.000000 1726 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
+[treeopen] TOP.
+[treeopen] TOP.VexRiscv.
+[sst_width] 289
+[signals_width] 559
+[sst_expanded] 1
+[sst_vpaned_height] 191
+@22
+TOP.VexRiscv.writeBack_RegFilePlugin_regFileWrite_payload_address[4:0]
+TOP.VexRiscv.writeBack_RegFilePlugin_regFileWrite_payload_data[31:0]
+@28
+TOP.VexRiscv.writeBack_RegFilePlugin_regFileWrite_valid
+TOP.VexRiscv.dataCache_1.stageB_atomic_entriesHit
+@22
+TOP.VexRiscv.dataCache_1.stageB_atomic_entries_0_address[31:0]
+@28
+TOP.VexRiscv.dataCache_1.stageB_atomic_entries_0_size[1:0]
+TOP.VexRiscv.dataCache_1.stageB_atomic_entries_0_valid
+@22
+TOP.VexRiscv.dataCache_1.stageB_atomic_entries_1_address[31:0]
+@28
+TOP.VexRiscv.dataCache_1.stageB_atomic_entries_1_size[1:0]
+TOP.VexRiscv.dataCache_1.stageB_atomic_entries_1_valid
+@29
+[color] 1
+TOP.VexRiscv.writeBack_arbitration_isFiring
+[color] 1
+TOP.VexRiscv.writeBack_arbitration_isValid
+@23
+[color] 1
+TOP.VexRiscv.writeBack_PC[31:0]
+@28
+TOP.VexRiscv.CsrPlugin_mstatus_MIE
+TOP.VexRiscv.CsrPlugin_mstatus_MPIE
+TOP.VexRiscv.CsrPlugin_mstatus_MPP[1:0]
+@24
+TOP.VexRiscv.RegFilePlugin_regFile(28)[31:0]
+@22
+TOP.VexRiscv.CsrPlugin_mepc[31:0]
+[pattern_trace] 1
+[pattern_trace] 0
diff --git a/VexRiscv/src/test/cpp/regression/branch.gtkw b/VexRiscv/src/test/cpp/regression/branch.gtkw
new file mode 100644
index 0000000..9bd2437
--- /dev/null
+++ b/VexRiscv/src/test/cpp/regression/branch.gtkw
@@ -0,0 +1,31 @@
+[*]
+[*] GTKWave Analyzer v3.3.58 (w)1999-2014 BSI
+[*] Mon Mar 20 10:40:36 2017
+[*]
+[dumpfile] "/home/spinalvm/Spinal/VexRiscv/src/test/cpp/testA/dhrystoneO3M.vcd"
+[dumpfile_mtime] "Mon Mar 20 10:40:36 2017"
+[dumpfile_size] 1149914709
+[savefile] "/home/spinalvm/Spinal/VexRiscv/src/test/cpp/testA/branch.gtkw"
+[timestart] 68
+[size] 1776 953
+[pos] -775 -1
+*-4.000000 87 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
+[treeopen] TOP.
+[sst_width] 432
+[signals_width] 520
+[sst_expanded] 1
+[sst_vpaned_height] 279
+@28
+TOP.VexRiscv.execute_input_HISTORY_LINE_history[1:0]
+TOP.VexRiscv.fetch_HISTORY_LINE_history[1:0]
+TOP.VexRiscv.memory_input_HISTORY_LINE_history[1:0]
+TOP.VexRiscv.decode_arbitration_isValid
+TOP.VexRiscv.decode_arbitration_isFiring
+@22
+TOP.VexRiscv.decode_input_PC[31:0]
+@28
+TOP.VexRiscv.decode_input_HISTORY_LINE_history[1:0]
+@29
+TOP.VexRiscv.prefetch_PcManagerSimplePlugin_jump_pcLoad_valid
+[pattern_trace] 1
+[pattern_trace] 0
diff --git a/VexRiscv/src/test/cpp/regression/dcache.gtkw b/VexRiscv/src/test/cpp/regression/dcache.gtkw
new file mode 100644
index 0000000..388eb87
--- /dev/null
+++ b/VexRiscv/src/test/cpp/regression/dcache.gtkw
@@ -0,0 +1,85 @@
+[*]
+[*] GTKWave Analyzer v3.3.58 (w)1999-2014 BSI
+[*] Sun Apr 23 13:26:26 2017
+[*]
+[dumpfile] "/home/spinalvm/Spinal/VexRiscv/src/test/cpp/testA/rv32ui-p-sw.vcd"
+[dumpfile_mtime] "Sun Apr 23 13:04:48 2017"
+[dumpfile_size] 389364
+[savefile] "/home/spinalvm/Spinal/VexRiscv/src/test/cpp/testA/dcache.gtkw"
+[timestart] 569
+[size] 1776 953
+[pos] -1 -353
+*-3.252876 591 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
+[treeopen] TOP.
+[treeopen] TOP.VexRiscv.
+[sst_width] 387
+[signals_width] 376
+[sst_expanded] 1
+[sst_vpaned_height] 253
+@800200
+-execute
+@28
+TOP.VexRiscv.dataCache_1.io_cpu_execute_isValid
+@22
+TOP.VexRiscv.dataCache_1.io_cpu_execute_args_address[31:0]
+@28
+TOP.VexRiscv.dataCache_1.io_cpu_execute_args_all
+TOP.VexRiscv.dataCache_1.io_cpu_execute_args_bypass
+@22
+TOP.VexRiscv.dataCache_1.io_cpu_execute_args_data[31:0]
+@28
+TOP.VexRiscv.dataCache_1.io_cpu_execute_args_kind[1:0]
+@22
+TOP.VexRiscv.dataCache_1.io_cpu_execute_args_mask[3:0]
+@28
+TOP.VexRiscv.dataCache_1.io_cpu_execute_args_wr
+TOP.VexRiscv.dataCache_1.io_cpu_execute_isStuck
+@1000200
+-execute
+@28
+TOP.VexRiscv.dataCache_1.io_cpu_memory_isStuck
+@800200
+-writeBack
+@22
+TOP.VexRiscv.dataCache_1.io_cpu_writeBack_data[31:0]
+@28
+TOP.VexRiscv.dataCache_1.io_cpu_writeBack_haltIt
+TOP.VexRiscv.dataCache_1.io_cpu_writeBack_isStuck
+TOP.VexRiscv.dataCache_1.io_cpu_writeBack_isValid
+@1000200
+-writeBack
+@22
+TOP.VexRiscv.dataCache_1.io_mem_cmd_payload_address[31:0]
+TOP.VexRiscv.dataCache_1.io_mem_cmd_payload_data[31:0]
+TOP.VexRiscv.dataCache_1.io_mem_cmd_payload_mask[3:0]
+@28
+TOP.VexRiscv.dataCache_1.io_mem_cmd_payload_wr
+TOP.VexRiscv.dataCache_1.io_mem_cmd_ready
+TOP.VexRiscv.dataCache_1.io_mem_cmd_valid
+@22
+TOP.VexRiscv.dataCache_1.io_mem_rsp_payload_data[31:0]
+@28
+TOP.VexRiscv.dataCache_1.io_mem_rsp_valid
+TOP.VexRiscv.dataCache_1.dataWriteCmd_payload_address[2:0]
+@22
+TOP.VexRiscv.dataCache_1.dataWriteCmd_payload_data[31:0]
+TOP.VexRiscv.dataCache_1.dataWriteCmd_payload_mask[3:0]
+@28
+TOP.VexRiscv.dataCache_1.dataWriteCmd_valid
+TOP.VexRiscv.dataCache_1.clk
+TOP.VexRiscv.dataCache_1.way_dataReadRspTwoEnable
+@22
+TOP.VexRiscv.dataCache_1.way_dataReadRspTwo[31:0]
+@28
+TOP.VexRiscv.dataCache_1.way_tagReadRspTwoEnable
+@22
+TOP.VexRiscv.dataCache_1.way_tagReadRspTwo_address[26:0]
+@28
+TOP.VexRiscv.dataCache_1.way_tagReadRspTwo_dirty
+TOP.VexRiscv.dataCache_1.way_tagReadRspTwo_used
+@29
+TOP.VexRiscv.dataCache_1.way_dataReadRspOneAddress[2:0]
+@22
+TOP.VexRiscv.dataCache_1.way_dataReadRspOne[31:0]
+[pattern_trace] 1
+[pattern_trace] 0
diff --git a/VexRiscv/src/test/cpp/regression/debug.gtkw b/VexRiscv/src/test/cpp/regression/debug.gtkw
new file mode 100644
index 0000000..d22d878
--- /dev/null
+++ b/VexRiscv/src/test/cpp/regression/debug.gtkw
@@ -0,0 +1,96 @@
+[*]
+[*] GTKWave Analyzer v3.3.58 (w)1999-2014 BSI
+[*] Thu Feb 1 00:52:25 2018
+[*]
+[dumpfile] "/home/spinalvm/hdl/VexRiscv/src/test/cpp/regression/rv32ui-p-lui.vcd"
+[dumpfile_mtime] "Thu Feb 1 00:52:17 2018"
+[dumpfile_size] 183735
+[savefile] "/home/spinalvm/hdl/VexRiscv/src/test/cpp/regression/debug.gtkw"
+[timestart] 0
+[size] 1784 950
+[pos] -1 -1
+*-3.000000 0 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
+[treeopen] TOP.
+[treeopen] TOP.VexRiscv.
+[sst_width] 409
+[signals_width] 540
+[sst_expanded] 1
+[sst_vpaned_height] 271
+@22
+TOP.VexRiscv.prefetch_PcManagerSimplePlugin_jump_pcLoad_payload[31:0]
+@28
+TOP.VexRiscv.prefetch_PcManagerSimplePlugin_jump_pcLoad_valid
+@22
+TOP.VexRiscv.prefetch_PC[31:0]
+@28
+TOP.VexRiscv.debug_bus_cmd_valid
+TOP.VexRiscv.reset
+TOP.VexRiscv.clk
+TOP.VexRiscv.prefetch_PcManagerSimplePlugin_samplePcNext
+@22
+TOP.VexRiscv.prefetch_PcManagerSimplePlugin_pcBeforeJumps[31:0]
+@28
+TOP.VexRiscv.prefetch_PcManagerSimplePlugin_jump_pcLoad_valid
+TOP.VexRiscv.fetch_BranchPlugin_hit
+TOP.VexRiscv.execute_BRANCH_DO
+@22
+TOP.VexRiscv.prefetch_PcManagerSimplePlugin_pcReg[31:0]
+TOP.VexRiscv.prefetch_PcManagerSimplePlugin_pc[31:0]
+@28
+TOP.VexRiscv.prefetch_arbitration_isValid
+TOP.VexRiscv.fetch_arbitration_isValid
+TOP.VexRiscv.decode_arbitration_isValid
+TOP.VexRiscv.execute_arbitration_isValid
+TOP.VexRiscv.memory_arbitration_isValid
+TOP.VexRiscv.writeBack_arbitration_isValid
+TOP.VexRiscv.CsrPlugin_interrupt
+TOP.VexRiscv.CsrPlugin_exception
+TOP.VexRiscv.decode_arbitration_isStuck
+TOP.VexRiscv.decode_arbitration_isStuckByOthers
+TOP.VexRiscv.execute_arbitration_isStuck
+TOP.VexRiscv.execute_arbitration_isStuckByOthers
+TOP.VexRiscv.fetch_arbitration_isStuck
+TOP.VexRiscv.fetch_arbitration_isStuckByOthers
+TOP.VexRiscv.memory_arbitration_isStuck
+TOP.VexRiscv.memory_arbitration_isStuckByOthers
+TOP.VexRiscv.prefetch_arbitration_isStuck
+TOP.VexRiscv.prefetch_arbitration_isStuckByOthers
+TOP.VexRiscv.writeBack_arbitration_isStuck
+TOP.VexRiscv.writeBack_arbitration_isStuckByOthers
+TOP.VexRiscv.iBus_cmd_valid
+TOP.VexRiscv.iBus_cmd_ready
+@22
+TOP.VexRiscv.iBus_cmd_payload_pc[31:0]
+@28
+TOP.VexRiscv.iBus_rsp_error
+@22
+TOP.VexRiscv.iBus_rsp_inst[31:0]
+@28
+TOP.VexRiscv.iBus_rsp_ready
+TOP.VexRiscv.debug_bus_cmd_valid
+@22
+TOP.VexRiscv.BranchPlugin_counter[8:0]
+@28
+TOP.VexRiscv.decode_IS_EBREAK
+TOP.VexRiscv.execute_IS_EBREAK
+TOP.VexRiscv.CsrPlugin_pipelineLiberator_done
+TOP.VexRiscv.CsrPlugin_pipelineLiberator_enable
+TOP.VexRiscv.DebugPlugin_haltIt
+@22
+TOP.VexRiscv.writeBack_INSTRUCTION[31:0]
+@29
+TOP.VexRiscv.DebugPlugin_stepIt
+@22
+TOP.VexRiscv.debug_bus_cmd_payload_address[7:0]
+TOP.VexRiscv.debug_bus_cmd_payload_data[31:0]
+@28
+TOP.VexRiscv.debug_bus_cmd_payload_wr
+TOP.VexRiscv.debug_bus_cmd_ready
+TOP.VexRiscv.debug_bus_cmd_valid
+@22
+TOP.VexRiscv.debug_bus_rsp_data[31:0]
+@28
+TOP.VexRiscv.debug_resetOut
+TOP.VexRiscv.debugReset
+[pattern_trace] 1
+[pattern_trace] 0
diff --git a/VexRiscv/src/test/cpp/regression/default.gtkw b/VexRiscv/src/test/cpp/regression/default.gtkw
new file mode 100644
index 0000000..cea3b75
--- /dev/null
+++ b/VexRiscv/src/test/cpp/regression/default.gtkw
@@ -0,0 +1,100 @@
+[*]
+[*] GTKWave Analyzer v3.3.58 (w)1999-2014 BSI
+[*] Sat Mar 25 13:21:38 2017
+[*]
+[dumpfile] "/home/spinalvm/Spinal/VexRiscv/src/test/cpp/testA/machineCsr.vcd"
+[dumpfile_mtime] "Sat Mar 25 13:21:31 2017"
+[dumpfile_size] 2048473
+[savefile] "/home/spinalvm/Spinal/VexRiscv/src/test/cpp/testA/default.gtkw"
+[timestart] 0
+[size] 1776 953
+[pos] -1 -1
+*-9.770813 718 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
+[treeopen] TOP.
+[treeopen] TOP.VexRiscv.
+[sst_width] 294
+[signals_width] 597
+[sst_expanded] 1
+[sst_vpaned_height] 593
+@28
+TOP.VexRiscv.writeBack_arbitration_isValid
+@22
+TOP.VexRiscv.writeBack_PC[31:0]
+TOP.VexRiscv.writeBack_INSTRUCTION[31:0]
+TOP.VexRiscv.RegFilePlugin_regFile(10)[31:0]
+TOP.VexRiscv.RegFilePlugin_regFile(11)[31:0]
+TOP.VexRiscv.prefetch_PcManagerSimplePlugin_pcBeforeJumps[31:0]
+TOP.VexRiscv.prefetch_PcManagerSimplePlugin_pc[31:0]
+TOP.VexRiscv.MachineCsr_mepc[31:0]
+@28
+TOP.VexRiscv.timerInterrupt
+TOP.VexRiscv.execute_arbitration_isValid
+@22
+TOP.VexRiscv.execute_PC[31:0]
+@28
+TOP.VexRiscv.MachineCsr_mie_MEIE
+TOP.VexRiscv.MachineCsr_mie_MSIE
+TOP.VexRiscv.MachineCsr_mie_MTIE
+TOP.VexRiscv.MachineCsr_mstatus_MIE
+TOP.VexRiscv.MachineCsr_mip_MEIP
+TOP.VexRiscv.MachineCsr_mip_MSIP
+TOP.VexRiscv.MachineCsr_mip_MTIP
+TOP.VexRiscv.MachineCsr_interrupt
+TOP.VexRiscv.MachineCsr_writeBackWfi
+TOP.VexRiscv.writeBack_arbitration_isValid
+TOP.VexRiscv.writeBack_ENV_CTRL[2:0]
+TOP.VexRiscv.execute_EXCEPTION
+TOP.VexRiscv.memory_EXCEPTION
+TOP.VexRiscv.writeBack_EXCEPTION
+TOP.VexRiscv.prefetch_arbitration_isValid
+TOP.VexRiscv.fetch_arbitration_isValid
+TOP.VexRiscv.decode_arbitration_isValid
+TOP.VexRiscv.execute_arbitration_isValid
+TOP.VexRiscv.memory_arbitration_isValid
+TOP.VexRiscv.writeBack_arbitration_isValid
+TOP.VexRiscv.prefetch_arbitration_removeIt
+TOP.VexRiscv.fetch_arbitration_removeIt
+@29
+TOP.VexRiscv.decode_arbitration_removeIt
+@28
+TOP.VexRiscv.execute_arbitration_removeIt
+TOP.VexRiscv.memory_arbitration_removeIt
+TOP.VexRiscv.writeBack_arbitration_removeIt
+TOP.VexRiscv.prefetch_arbitration_isStuck
+TOP.VexRiscv.fetch_arbitration_isStuck
+TOP.VexRiscv.decode_arbitration_isStuck
+TOP.VexRiscv.execute_arbitration_isStuck
+TOP.VexRiscv.memory_arbitration_isStuck
+TOP.VexRiscv.writeBack_arbitration_isStuck
+@22
+TOP.VexRiscv.prefetch_PcManagerSimplePlugin_jump_pcLoad_payload[31:0]
+@28
+TOP.VexRiscv.prefetch_PcManagerSimplePlugin_jump_pcLoad_valid
+@22
+TOP.VexRiscv.MachineCsr_mepc[31:0]
+TOP.VexRiscv.prefetch_PcManagerSimplePlugin_pcReg[31:0]
+TOP.VexRiscv.prefetch_PC_CALC_WITHOUT_JUMP[31:0]
+TOP.VexRiscv.prefetch_PcManagerSimplePlugin_pc[31:0]
+TOP.VexRiscv.prefetch_PC[31:0]
+TOP.VexRiscv.fetch_PC[31:0]
+TOP.VexRiscv.decode_PC[31:0]
+TOP.VexRiscv.execute_PC[31:0]
+TOP.VexRiscv.memory_PC[31:0]
+TOP.VexRiscv.writeBack_PC[31:0]
+@28
+TOP.VexRiscv.prefetch_arbitration_isStuckByOthers
+TOP.VexRiscv.fetch_arbitration_isStuckByOthers
+TOP.VexRiscv.decode_arbitration_isStuckByOthers
+TOP.VexRiscv.execute_arbitration_isStuckByOthers
+TOP.VexRiscv.memory_arbitration_isStuckByOthers
+TOP.VexRiscv.writeBack_arbitration_isStuckByOthers
+TOP.VexRiscv.prefetch_arbitration_haltIt
+TOP.VexRiscv.fetch_arbitration_haltIt
+TOP.VexRiscv.decode_arbitration_haltIt
+TOP.VexRiscv.execute_arbitration_haltIt
+TOP.VexRiscv.memory_arbitration_haltIt
+TOP.VexRiscv.writeBack_arbitration_haltIt
+TOP.VexRiscv.MachineCsr_mie_MTIE
+TOP.VexRiscv.MachineCsr_mip_MTIP
+[pattern_trace] 1
+[pattern_trace] 0
diff --git a/VexRiscv/src/test/cpp/regression/dhrystoneO3.logRef b/VexRiscv/src/test/cpp/regression/dhrystoneO3.logRef
new file mode 100644
index 0000000..1bdf354
--- /dev/null
+++ b/VexRiscv/src/test/cpp/regression/dhrystoneO3.logRef
@@ -0,0 +1,57 @@
+
+Dhrystone Benchmark, Version 2.1 (Language: C)
+
+Program compiled without 'register' attribute
+
+Please give the number of runs through the benchmark:
+Execution starts, 200 runs through Dhrystone
+Execution ends
+
+Final values of the variables used in the benchmark:
+
+Int_Glob: 5
+ should be: 5
+Bool_Glob: 1
+ should be: 1
+Ch_1_Glob: A
+ should be: A
+Ch_2_Glob: B
+ should be: B
+Arr_1_Glob[8]: 7
+ should be: 7
+Arr_2_Glob[8][7]: 210
+ should be: Number_Of_Runs + 10
+Ptr_Glob->
+ Ptr_Comp: -2147458812
+ should be: (implementation-dependent)
+ Discr: 0
+ should be: 0
+ Enum_Comp: 2
+ should be: 2
+ Int_Comp: 17
+ should be: 17
+ Str_Comp: DHRYSTONE PROGRAM, SOME STRING
+ should be: DHRYSTONE PROGRAM, SOME STRING
+Next_Ptr_Glob->
+ Ptr_Comp: -2147458812
+ should be: (implementation-dependent), same as above
+ Discr: 0
+ should be: 0
+ Enum_Comp: 1
+ should be: 1
+ Int_Comp: 18
+ should be: 18
+ Str_Comp: DHRYSTONE PROGRAM, SOME STRING
+ should be: DHRYSTONE PROGRAM, SOME STRING
+Int_1_Loc: 5
+ should be: 5
+Int_2_Loc: 13
+ should be: 13
+Int_3_Loc: 7
+ should be: 7
+Enum_Loc: 1
+ should be: 1
+Str_1_Loc: DHRYSTONE PROGRAM, 1'ST STRING
+ should be: DHRYSTONE PROGRAM, 1'ST STRING
+Str_2_Loc: DHRYSTONE PROGRAM, 2'ND STRING
+ should be: DHRYSTONE PROGRAM, 2'ND STRING
diff --git a/VexRiscv/src/test/cpp/regression/dhrystoneO3C.logRef b/VexRiscv/src/test/cpp/regression/dhrystoneO3C.logRef
new file mode 100644
index 0000000..9985a89
--- /dev/null
+++ b/VexRiscv/src/test/cpp/regression/dhrystoneO3C.logRef
@@ -0,0 +1,57 @@
+
+Dhrystone Benchmark, Version 2.1 (Language: C)
+
+Program compiled without 'register' attribute
+
+Please give the number of runs through the benchmark:
+Execution starts, 200 runs through Dhrystone
+Execution ends
+
+Final values of the variables used in the benchmark:
+
+Int_Glob: 5
+ should be: 5
+Bool_Glob: 1
+ should be: 1
+Ch_1_Glob: A
+ should be: A
+Ch_2_Glob: B
+ should be: B
+Arr_1_Glob[8]: 7
+ should be: 7
+Arr_2_Glob[8][7]: 210
+ should be: Number_Of_Runs + 10
+Ptr_Glob->
+ Ptr_Comp: -2147459900
+ should be: (implementation-dependent)
+ Discr: 0
+ should be: 0
+ Enum_Comp: 2
+ should be: 2
+ Int_Comp: 17
+ should be: 17
+ Str_Comp: DHRYSTONE PROGRAM, SOME STRING
+ should be: DHRYSTONE PROGRAM, SOME STRING
+Next_Ptr_Glob->
+ Ptr_Comp: -2147459900
+ should be: (implementation-dependent), same as above
+ Discr: 0
+ should be: 0
+ Enum_Comp: 1
+ should be: 1
+ Int_Comp: 18
+ should be: 18
+ Str_Comp: DHRYSTONE PROGRAM, SOME STRING
+ should be: DHRYSTONE PROGRAM, SOME STRING
+Int_1_Loc: 5
+ should be: 5
+Int_2_Loc: 13
+ should be: 13
+Int_3_Loc: 7
+ should be: 7
+Enum_Loc: 1
+ should be: 1
+Str_1_Loc: DHRYSTONE PROGRAM, 1'ST STRING
+ should be: DHRYSTONE PROGRAM, 1'ST STRING
+Str_2_Loc: DHRYSTONE PROGRAM, 2'ND STRING
+ should be: DHRYSTONE PROGRAM, 2'ND STRING
diff --git a/VexRiscv/src/test/cpp/regression/dhrystoneO3M.logRef b/VexRiscv/src/test/cpp/regression/dhrystoneO3M.logRef
new file mode 100644
index 0000000..1c6f8d1
--- /dev/null
+++ b/VexRiscv/src/test/cpp/regression/dhrystoneO3M.logRef
@@ -0,0 +1,57 @@
+
+Dhrystone Benchmark, Version 2.1 (Language: C)
+
+Program compiled without 'register' attribute
+
+Please give the number of runs through the benchmark:
+Execution starts, 200 runs through Dhrystone
+Execution ends
+
+Final values of the variables used in the benchmark:
+
+Int_Glob: 5
+ should be: 5
+Bool_Glob: 1
+ should be: 1
+Ch_1_Glob: A
+ should be: A
+Ch_2_Glob: B
+ should be: B
+Arr_1_Glob[8]: 7
+ should be: 7
+Arr_2_Glob[8][7]: 210
+ should be: Number_Of_Runs + 10
+Ptr_Glob->
+ Ptr_Comp: -2147459860
+ should be: (implementation-dependent)
+ Discr: 0
+ should be: 0
+ Enum_Comp: 2
+ should be: 2
+ Int_Comp: 17
+ should be: 17
+ Str_Comp: DHRYSTONE PROGRAM, SOME STRING
+ should be: DHRYSTONE PROGRAM, SOME STRING
+Next_Ptr_Glob->
+ Ptr_Comp: -2147459860
+ should be: (implementation-dependent), same as above
+ Discr: 0
+ should be: 0
+ Enum_Comp: 1
+ should be: 1
+ Int_Comp: 18
+ should be: 18
+ Str_Comp: DHRYSTONE PROGRAM, SOME STRING
+ should be: DHRYSTONE PROGRAM, SOME STRING
+Int_1_Loc: 5
+ should be: 5
+Int_2_Loc: 13
+ should be: 13
+Int_3_Loc: 7
+ should be: 7
+Enum_Loc: 1
+ should be: 1
+Str_1_Loc: DHRYSTONE PROGRAM, 1'ST STRING
+ should be: DHRYSTONE PROGRAM, 1'ST STRING
+Str_2_Loc: DHRYSTONE PROGRAM, 2'ND STRING
+ should be: DHRYSTONE PROGRAM, 2'ND STRING
diff --git a/VexRiscv/src/test/cpp/regression/dhrystoneO3MC.logRef b/VexRiscv/src/test/cpp/regression/dhrystoneO3MC.logRef
new file mode 100644
index 0000000..a584b67
--- /dev/null
+++ b/VexRiscv/src/test/cpp/regression/dhrystoneO3MC.logRef
@@ -0,0 +1,57 @@
+
+Dhrystone Benchmark, Version 2.1 (Language: C)
+
+Program compiled without 'register' attribute
+
+Please give the number of runs through the benchmark:
+Execution starts, 200 runs through Dhrystone
+Execution ends
+
+Final values of the variables used in the benchmark:
+
+Int_Glob: 5
+ should be: 5
+Bool_Glob: 1
+ should be: 1
+Ch_1_Glob: A
+ should be: A
+Ch_2_Glob: B
+ should be: B
+Arr_1_Glob[8]: 7
+ should be: 7
+Arr_2_Glob[8][7]: 210
+ should be: Number_Of_Runs + 10
+Ptr_Glob->
+ Ptr_Comp: -2147460916
+ should be: (implementation-dependent)
+ Discr: 0
+ should be: 0
+ Enum_Comp: 2
+ should be: 2
+ Int_Comp: 17
+ should be: 17
+ Str_Comp: DHRYSTONE PROGRAM, SOME STRING
+ should be: DHRYSTONE PROGRAM, SOME STRING
+Next_Ptr_Glob->
+ Ptr_Comp: -2147460916
+ should be: (implementation-dependent), same as above
+ Discr: 0
+ should be: 0
+ Enum_Comp: 1
+ should be: 1
+ Int_Comp: 18
+ should be: 18
+ Str_Comp: DHRYSTONE PROGRAM, SOME STRING
+ should be: DHRYSTONE PROGRAM, SOME STRING
+Int_1_Loc: 5
+ should be: 5
+Int_2_Loc: 13
+ should be: 13
+Int_3_Loc: 7
+ should be: 7
+Enum_Loc: 1
+ should be: 1
+Str_1_Loc: DHRYSTONE PROGRAM, 1'ST STRING
+ should be: DHRYSTONE PROGRAM, 1'ST STRING
+Str_2_Loc: DHRYSTONE PROGRAM, 2'ND STRING
+ should be: DHRYSTONE PROGRAM, 2'ND STRING
diff --git a/VexRiscv/src/test/cpp/regression/encoding.h b/VexRiscv/src/test/cpp/regression/encoding.h
new file mode 100644
index 0000000..c109ce1
--- /dev/null
+++ b/VexRiscv/src/test/cpp/regression/encoding.h
@@ -0,0 +1,1471 @@
+// See LICENSE for license details.
+
+#ifndef RISCV_CSR_ENCODING_H
+#define RISCV_CSR_ENCODING_H
+
+#define MSTATUS_UIE 0x00000001
+#define MSTATUS_SIE 0x00000002
+#define MSTATUS_HIE 0x00000004
+#define MSTATUS_MIE 0x00000008
+#define MSTATUS_UPIE 0x00000010
+#define MSTATUS_SPIE 0x00000020
+#define MSTATUS_HPIE 0x00000040
+#define MSTATUS_MPIE 0x00000080
+#define MSTATUS_SPP 0x00000100
+#define MSTATUS_HPP 0x00000600
+#define MSTATUS_MPP 0x00001800
+#define MSTATUS_FS 0x00006000
+#define MSTATUS_XS 0x00018000
+#define MSTATUS_MPRV 0x00020000
+#define MSTATUS_SUM 0x00040000
+#define MSTATUS_MXR 0x00080000
+#define MSTATUS_TVM 0x00100000
+#define MSTATUS_TW 0x00200000
+#define MSTATUS_TSR 0x00400000
+#define MSTATUS32_SD 0x80000000
+#define MSTATUS_UXL 0x0000000300000000
+#define MSTATUS_SXL 0x0000000C00000000
+#define MSTATUS64_SD 0x8000000000000000
+
+#define SSTATUS_UIE 0x00000001
+#define SSTATUS_SIE 0x00000002
+#define SSTATUS_UPIE 0x00000010
+#define SSTATUS_SPIE 0x00000020
+#define SSTATUS_SPP 0x00000100
+#define SSTATUS_FS 0x00006000
+#define SSTATUS_XS 0x00018000
+#define SSTATUS_SUM 0x00040000
+#define SSTATUS_MXR 0x00080000
+#define SSTATUS32_SD 0x80000000
+#define SSTATUS_UXL 0x0000000300000000
+#define SSTATUS64_SD 0x8000000000000000
+
+#define DCSR_XDEBUGVER (3U<<30)
+#define DCSR_NDRESET (1<<29)
+#define DCSR_FULLRESET (1<<28)
+#define DCSR_EBREAKM (1<<15)
+#define DCSR_EBREAKH (1<<14)
+#define DCSR_EBREAKS (1<<13)
+#define DCSR_EBREAKU (1<<12)
+#define DCSR_STOPCYCLE (1<<10)
+#define DCSR_STOPTIME (1<<9)
+#define DCSR_CAUSE (7<<6)
+#define DCSR_DEBUGINT (1<<5)
+#define DCSR_HALT (1<<3)
+#define DCSR_STEP (1<<2)
+#define DCSR_PRV (3<<0)
+
+#define DCSR_CAUSE_NONE 0
+#define DCSR_CAUSE_SWBP 1
+#define DCSR_CAUSE_HWBP 2
+#define DCSR_CAUSE_DEBUGINT 3
+#define DCSR_CAUSE_STEP 4
+#define DCSR_CAUSE_HALT 5
+
+#define MCONTROL_TYPE(xlen) (0xfULL<<((xlen)-4))
+#define MCONTROL_DMODE(xlen) (1ULL<<((xlen)-5))
+#define MCONTROL_MASKMAX(xlen) (0x3fULL<<((xlen)-11))
+
+#define MCONTROL_SELECT (1<<19)
+#define MCONTROL_TIMING (1<<18)
+#define MCONTROL_ACTION (0x3f<<12)
+#define MCONTROL_CHAIN (1<<11)
+#define MCONTROL_MATCH (0xf<<7)
+#define MCONTROL_M (1<<6)
+#define MCONTROL_H (1<<5)
+#define MCONTROL_S (1<<4)
+#define MCONTROL_U (1<<3)
+#define MCONTROL_EXECUTE (1<<2)
+#define MCONTROL_STORE (1<<1)
+#define MCONTROL_LOAD (1<<0)
+
+#define MCONTROL_TYPE_NONE 0
+#define MCONTROL_TYPE_MATCH 2
+
+#define MCONTROL_ACTION_DEBUG_EXCEPTION 0
+#define MCONTROL_ACTION_DEBUG_MODE 1
+#define MCONTROL_ACTION_TRACE_START 2
+#define MCONTROL_ACTION_TRACE_STOP 3
+#define MCONTROL_ACTION_TRACE_EMIT 4
+
+#define MCONTROL_MATCH_EQUAL 0
+#define MCONTROL_MATCH_NAPOT 1
+#define MCONTROL_MATCH_GE 2
+#define MCONTROL_MATCH_LT 3
+#define MCONTROL_MATCH_MASK_LOW 4
+#define MCONTROL_MATCH_MASK_HIGH 5
+
+#define MIP_SSIP (1 << IRQ_S_SOFT)
+#define MIP_HSIP (1 << IRQ_H_SOFT)
+#define MIP_MSIP (1 << IRQ_M_SOFT)
+#define MIP_STIP (1 << IRQ_S_TIMER)
+#define MIP_HTIP (1 << IRQ_H_TIMER)
+#define MIP_MTIP (1 << IRQ_M_TIMER)
+#define MIP_SEIP (1 << IRQ_S_EXT)
+#define MIP_HEIP (1 << IRQ_H_EXT)
+#define MIP_MEIP (1 << IRQ_M_EXT)
+
+#define SIP_SSIP MIP_SSIP
+#define SIP_STIP MIP_STIP
+
+#define PRV_U 0
+#define PRV_S 1
+#define PRV_H 2
+#define PRV_M 3
+
+#define SATP32_MODE 0x80000000
+#define SATP32_ASID 0x7FC00000
+#define SATP32_PPN 0x003FFFFF
+#define SATP64_MODE 0xF000000000000000
+#define SATP64_ASID 0x0FFFF00000000000
+#define SATP64_PPN 0x00000FFFFFFFFFFF
+
+#define SATP_MODE_OFF 0
+#define SATP_MODE_SV32 1
+#define SATP_MODE_SV39 8
+#define SATP_MODE_SV48 9
+#define SATP_MODE_SV57 10
+#define SATP_MODE_SV64 11
+
+#define PMP_R 0x01
+#define PMP_W 0x02
+#define PMP_X 0x04
+#define PMP_A 0x18
+#define PMP_L 0x80
+#define PMP_SHIFT 2
+
+#define PMP_TOR 0x08
+#define PMP_NA4 0x10
+#define PMP_NAPOT 0x18
+
+#define IRQ_S_SOFT 1
+#define IRQ_H_SOFT 2
+#define IRQ_M_SOFT 3
+#define IRQ_S_TIMER 5
+#define IRQ_H_TIMER 6
+#define IRQ_M_TIMER 7
+#define IRQ_S_EXT 9
+#define IRQ_H_EXT 10
+#define IRQ_M_EXT 11
+#define IRQ_COP 12
+#define IRQ_HOST 13
+
+#define DEFAULT_RSTVEC 0x00001000
+#define CLINT_BASE 0x02000000
+#define CLINT_SIZE 0x000c0000
+#define EXT_IO_BASE 0x40000000
+#define DRAM_BASE 0x80000000
+
+// page table entry (PTE) fields
+#define PTE_V 0x001 // Valid
+#define PTE_R 0x002 // Read
+#define PTE_W 0x004 // Write
+#define PTE_X 0x008 // Execute
+#define PTE_U 0x010 // User
+#define PTE_G 0x020 // Global
+#define PTE_A 0x040 // Accessed
+#define PTE_D 0x080 // Dirty
+#define PTE_SOFT 0x300 // Reserved for Software
+
+#define PTE_PPN_SHIFT 10
+
+#define PTE_TABLE(PTE) (((PTE) & (PTE_V | PTE_R | PTE_W | PTE_X)) == PTE_V)
+
+#ifdef __riscv
+
+#if __riscv_xlen == 64
+# define MSTATUS_SD MSTATUS64_SD
+# define SSTATUS_SD SSTATUS64_SD
+# define RISCV_PGLEVEL_BITS 9
+# define SATP_MODE SATP64_MODE
+#else
+# define MSTATUS_SD MSTATUS32_SD
+# define SSTATUS_SD SSTATUS32_SD
+# define RISCV_PGLEVEL_BITS 10
+# define SATP_MODE SATP32_MODE
+#endif
+#define RISCV_PGSHIFT 12
+#define RISCV_PGSIZE (1 << RISCV_PGSHIFT)
+
+#ifndef __ASSEMBLER__
+
+#ifdef __GNUC__
+
+#define read_csr(reg) ({ unsigned long __tmp; \
+ asm volatile ("csrr %0, " #reg : "=r"(__tmp)); \
+ __tmp; })
+
+#define write_csr(reg, val) ({ \
+ asm volatile ("csrw " #reg ", %0" :: "rK"(val)); })
+
+#define swap_csr(reg, val) ({ unsigned long __tmp; \
+ asm volatile ("csrrw %0, " #reg ", %1" : "=r"(__tmp) : "rK"(val)); \
+ __tmp; })
+
+#define set_csr(reg, bit) ({ unsigned long __tmp; \
+ asm volatile ("csrrs %0, " #reg ", %1" : "=r"(__tmp) : "rK"(bit)); \
+ __tmp; })
+
+#define clear_csr(reg, bit) ({ unsigned long __tmp; \
+ asm volatile ("csrrc %0, " #reg ", %1" : "=r"(__tmp) : "rK"(bit)); \
+ __tmp; })
+
+#define rdtime() read_csr(time)
+#define rdcycle() read_csr(cycle)
+#define rdinstret() read_csr(instret)
+
+#endif
+
+#endif
+
+#endif
+
+#endif
+/* Automatically generated by parse-opcodes. */
+#ifndef RISCV_ENCODING_H
+#define RISCV_ENCODING_H
+#define MATCH_BEQ 0x63
+#define MASK_BEQ 0x707f
+#define MATCH_BNE 0x1063
+#define MASK_BNE 0x707f
+#define MATCH_BLT 0x4063
+#define MASK_BLT 0x707f
+#define MATCH_BGE 0x5063
+#define MASK_BGE 0x707f
+#define MATCH_BLTU 0x6063
+#define MASK_BLTU 0x707f
+#define MATCH_BGEU 0x7063
+#define MASK_BGEU 0x707f
+#define MATCH_JALR 0x67
+#define MASK_JALR 0x707f
+#define MATCH_JAL 0x6f
+#define MASK_JAL 0x7f
+#define MATCH_LUI 0x37
+#define MASK_LUI 0x7f
+#define MATCH_AUIPC 0x17
+#define MASK_AUIPC 0x7f
+#define MATCH_ADDI 0x13
+#define MASK_ADDI 0x707f
+#define MATCH_SLLI 0x1013
+#define MASK_SLLI 0xfc00707f
+#define MATCH_SLTI 0x2013
+#define MASK_SLTI 0x707f
+#define MATCH_SLTIU 0x3013
+#define MASK_SLTIU 0x707f
+#define MATCH_XORI 0x4013
+#define MASK_XORI 0x707f
+#define MATCH_SRLI 0x5013
+#define MASK_SRLI 0xfc00707f
+#define MATCH_SRAI 0x40005013
+#define MASK_SRAI 0xfc00707f
+#define MATCH_ORI 0x6013
+#define MASK_ORI 0x707f
+#define MATCH_ANDI 0x7013
+#define MASK_ANDI 0x707f
+#define MATCH_ADD 0x33
+#define MASK_ADD 0xfe00707f
+#define MATCH_SUB 0x40000033
+#define MASK_SUB 0xfe00707f
+#define MATCH_SLL 0x1033
+#define MASK_SLL 0xfe00707f
+#define MATCH_SLT 0x2033
+#define MASK_SLT 0xfe00707f
+#define MATCH_SLTU 0x3033
+#define MASK_SLTU 0xfe00707f
+#define MATCH_XOR 0x4033
+#define MASK_XOR 0xfe00707f
+#define MATCH_SRL 0x5033
+#define MASK_SRL 0xfe00707f
+#define MATCH_SRA 0x40005033
+#define MASK_SRA 0xfe00707f
+#define MATCH_OR 0x6033
+#define MASK_OR 0xfe00707f
+#define MATCH_AND 0x7033
+#define MASK_AND 0xfe00707f
+#define MATCH_ADDIW 0x1b
+#define MASK_ADDIW 0x707f
+#define MATCH_SLLIW 0x101b
+#define MASK_SLLIW 0xfe00707f
+#define MATCH_SRLIW 0x501b
+#define MASK_SRLIW 0xfe00707f
+#define MATCH_SRAIW 0x4000501b
+#define MASK_SRAIW 0xfe00707f
+#define MATCH_ADDW 0x3b
+#define MASK_ADDW 0xfe00707f
+#define MATCH_SUBW 0x4000003b
+#define MASK_SUBW 0xfe00707f
+#define MATCH_SLLW 0x103b
+#define MASK_SLLW 0xfe00707f
+#define MATCH_SRLW 0x503b
+#define MASK_SRLW 0xfe00707f
+#define MATCH_SRAW 0x4000503b
+#define MASK_SRAW 0xfe00707f
+#define MATCH_LB 0x3
+#define MASK_LB 0x707f
+#define MATCH_LH 0x1003
+#define MASK_LH 0x707f
+#define MATCH_LW 0x2003
+#define MASK_LW 0x707f
+#define MATCH_LD 0x3003
+#define MASK_LD 0x707f
+#define MATCH_LBU 0x4003
+#define MASK_LBU 0x707f
+#define MATCH_LHU 0x5003
+#define MASK_LHU 0x707f
+#define MATCH_LWU 0x6003
+#define MASK_LWU 0x707f
+#define MATCH_SB 0x23
+#define MASK_SB 0x707f
+#define MATCH_SH 0x1023
+#define MASK_SH 0x707f
+#define MATCH_SW 0x2023
+#define MASK_SW 0x707f
+#define MATCH_SD 0x3023
+#define MASK_SD 0x707f
+#define MATCH_FENCE 0xf
+#define MASK_FENCE 0x707f
+#define MATCH_FENCE_I 0x100f
+#define MASK_FENCE_I 0x707f
+#define MATCH_MUL 0x2000033
+#define MASK_MUL 0xfe00707f
+#define MATCH_MULH 0x2001033
+#define MASK_MULH 0xfe00707f
+#define MATCH_MULHSU 0x2002033
+#define MASK_MULHSU 0xfe00707f
+#define MATCH_MULHU 0x2003033
+#define MASK_MULHU 0xfe00707f
+#define MATCH_DIV 0x2004033
+#define MASK_DIV 0xfe00707f
+#define MATCH_DIVU 0x2005033
+#define MASK_DIVU 0xfe00707f
+#define MATCH_REM 0x2006033
+#define MASK_REM 0xfe00707f
+#define MATCH_REMU 0x2007033
+#define MASK_REMU 0xfe00707f
+#define MATCH_MULW 0x200003b
+#define MASK_MULW 0xfe00707f
+#define MATCH_DIVW 0x200403b
+#define MASK_DIVW 0xfe00707f
+#define MATCH_DIVUW 0x200503b
+#define MASK_DIVUW 0xfe00707f
+#define MATCH_REMW 0x200603b
+#define MASK_REMW 0xfe00707f
+#define MATCH_REMUW 0x200703b
+#define MASK_REMUW 0xfe00707f
+#define MATCH_AMOADD_W 0x202f
+#define MASK_AMOADD_W 0xf800707f
+#define MATCH_AMOXOR_W 0x2000202f
+#define MASK_AMOXOR_W 0xf800707f
+#define MATCH_AMOOR_W 0x4000202f
+#define MASK_AMOOR_W 0xf800707f
+#define MATCH_AMOAND_W 0x6000202f
+#define MASK_AMOAND_W 0xf800707f
+#define MATCH_AMOMIN_W 0x8000202f
+#define MASK_AMOMIN_W 0xf800707f
+#define MATCH_AMOMAX_W 0xa000202f
+#define MASK_AMOMAX_W 0xf800707f
+#define MATCH_AMOMINU_W 0xc000202f
+#define MASK_AMOMINU_W 0xf800707f
+#define MATCH_AMOMAXU_W 0xe000202f
+#define MASK_AMOMAXU_W 0xf800707f
+#define MATCH_AMOSWAP_W 0x800202f
+#define MASK_AMOSWAP_W 0xf800707f
+#define MATCH_LR_W 0x1000202f
+#define MASK_LR_W 0xf9f0707f
+#define MATCH_SC_W 0x1800202f
+#define MASK_SC_W 0xf800707f
+#define MATCH_AMOADD_D 0x302f
+#define MASK_AMOADD_D 0xf800707f
+#define MATCH_AMOXOR_D 0x2000302f
+#define MASK_AMOXOR_D 0xf800707f
+#define MATCH_AMOOR_D 0x4000302f
+#define MASK_AMOOR_D 0xf800707f
+#define MATCH_AMOAND_D 0x6000302f
+#define MASK_AMOAND_D 0xf800707f
+#define MATCH_AMOMIN_D 0x8000302f
+#define MASK_AMOMIN_D 0xf800707f
+#define MATCH_AMOMAX_D 0xa000302f
+#define MASK_AMOMAX_D 0xf800707f
+#define MATCH_AMOMINU_D 0xc000302f
+#define MASK_AMOMINU_D 0xf800707f
+#define MATCH_AMOMAXU_D 0xe000302f
+#define MASK_AMOMAXU_D 0xf800707f
+#define MATCH_AMOSWAP_D 0x800302f
+#define MASK_AMOSWAP_D 0xf800707f
+#define MATCH_LR_D 0x1000302f
+#define MASK_LR_D 0xf9f0707f
+#define MATCH_SC_D 0x1800302f
+#define MASK_SC_D 0xf800707f
+#define MATCH_ECALL 0x73
+#define MASK_ECALL 0xffffffff
+#define MATCH_EBREAK 0x100073
+#define MASK_EBREAK 0xffffffff
+#define MATCH_URET 0x200073
+#define MASK_URET 0xffffffff
+#define MATCH_SRET 0x10200073
+#define MASK_SRET 0xffffffff
+#define MATCH_MRET 0x30200073
+#define MASK_MRET 0xffffffff
+#define MATCH_DRET 0x7b200073
+#define MASK_DRET 0xffffffff
+#define MATCH_SFENCE_VMA 0x12000073
+#define MASK_SFENCE_VMA 0xfe007fff
+#define MATCH_WFI 0x10500073
+#define MASK_WFI 0xffffffff
+#define MATCH_CSRRW 0x1073
+#define MASK_CSRRW 0x707f
+#define MATCH_CSRRS 0x2073
+#define MASK_CSRRS 0x707f
+#define MATCH_CSRRC 0x3073
+#define MASK_CSRRC 0x707f
+#define MATCH_CSRRWI 0x5073
+#define MASK_CSRRWI 0x707f
+#define MATCH_CSRRSI 0x6073
+#define MASK_CSRRSI 0x707f
+#define MATCH_CSRRCI 0x7073
+#define MASK_CSRRCI 0x707f
+#define MATCH_FADD_S 0x53
+#define MASK_FADD_S 0xfe00007f
+#define MATCH_FSUB_S 0x8000053
+#define MASK_FSUB_S 0xfe00007f
+#define MATCH_FMUL_S 0x10000053
+#define MASK_FMUL_S 0xfe00007f
+#define MATCH_FDIV_S 0x18000053
+#define MASK_FDIV_S 0xfe00007f
+#define MATCH_FSGNJ_S 0x20000053
+#define MASK_FSGNJ_S 0xfe00707f
+#define MATCH_FSGNJN_S 0x20001053
+#define MASK_FSGNJN_S 0xfe00707f
+#define MATCH_FSGNJX_S 0x20002053
+#define MASK_FSGNJX_S 0xfe00707f
+#define MATCH_FMIN_S 0x28000053
+#define MASK_FMIN_S 0xfe00707f
+#define MATCH_FMAX_S 0x28001053
+#define MASK_FMAX_S 0xfe00707f
+#define MATCH_FSQRT_S 0x58000053
+#define MASK_FSQRT_S 0xfff0007f
+#define MATCH_FADD_D 0x2000053
+#define MASK_FADD_D 0xfe00007f
+#define MATCH_FSUB_D 0xa000053
+#define MASK_FSUB_D 0xfe00007f
+#define MATCH_FMUL_D 0x12000053
+#define MASK_FMUL_D 0xfe00007f
+#define MATCH_FDIV_D 0x1a000053
+#define MASK_FDIV_D 0xfe00007f
+#define MATCH_FSGNJ_D 0x22000053
+#define MASK_FSGNJ_D 0xfe00707f
+#define MATCH_FSGNJN_D 0x22001053
+#define MASK_FSGNJN_D 0xfe00707f
+#define MATCH_FSGNJX_D 0x22002053
+#define MASK_FSGNJX_D 0xfe00707f
+#define MATCH_FMIN_D 0x2a000053
+#define MASK_FMIN_D 0xfe00707f
+#define MATCH_FMAX_D 0x2a001053
+#define MASK_FMAX_D 0xfe00707f
+#define MATCH_FCVT_S_D 0x40100053
+#define MASK_FCVT_S_D 0xfff0007f
+#define MATCH_FCVT_D_S 0x42000053
+#define MASK_FCVT_D_S 0xfff0007f
+#define MATCH_FSQRT_D 0x5a000053
+#define MASK_FSQRT_D 0xfff0007f
+#define MATCH_FADD_Q 0x6000053
+#define MASK_FADD_Q 0xfe00007f
+#define MATCH_FSUB_Q 0xe000053
+#define MASK_FSUB_Q 0xfe00007f
+#define MATCH_FMUL_Q 0x16000053
+#define MASK_FMUL_Q 0xfe00007f
+#define MATCH_FDIV_Q 0x1e000053
+#define MASK_FDIV_Q 0xfe00007f
+#define MATCH_FSGNJ_Q 0x26000053
+#define MASK_FSGNJ_Q 0xfe00707f
+#define MATCH_FSGNJN_Q 0x26001053
+#define MASK_FSGNJN_Q 0xfe00707f
+#define MATCH_FSGNJX_Q 0x26002053
+#define MASK_FSGNJX_Q 0xfe00707f
+#define MATCH_FMIN_Q 0x2e000053
+#define MASK_FMIN_Q 0xfe00707f
+#define MATCH_FMAX_Q 0x2e001053
+#define MASK_FMAX_Q 0xfe00707f
+#define MATCH_FCVT_S_Q 0x40300053
+#define MASK_FCVT_S_Q 0xfff0007f
+#define MATCH_FCVT_Q_S 0x46000053
+#define MASK_FCVT_Q_S 0xfff0007f
+#define MATCH_FCVT_D_Q 0x42300053
+#define MASK_FCVT_D_Q 0xfff0007f
+#define MATCH_FCVT_Q_D 0x46100053
+#define MASK_FCVT_Q_D 0xfff0007f
+#define MATCH_FSQRT_Q 0x5e000053
+#define MASK_FSQRT_Q 0xfff0007f
+#define MATCH_FLE_S 0xa0000053
+#define MASK_FLE_S 0xfe00707f
+#define MATCH_FLT_S 0xa0001053
+#define MASK_FLT_S 0xfe00707f
+#define MATCH_FEQ_S 0xa0002053
+#define MASK_FEQ_S 0xfe00707f
+#define MATCH_FLE_D 0xa2000053
+#define MASK_FLE_D 0xfe00707f
+#define MATCH_FLT_D 0xa2001053
+#define MASK_FLT_D 0xfe00707f
+#define MATCH_FEQ_D 0xa2002053
+#define MASK_FEQ_D 0xfe00707f
+#define MATCH_FLE_Q 0xa6000053
+#define MASK_FLE_Q 0xfe00707f
+#define MATCH_FLT_Q 0xa6001053
+#define MASK_FLT_Q 0xfe00707f
+#define MATCH_FEQ_Q 0xa6002053
+#define MASK_FEQ_Q 0xfe00707f
+#define MATCH_FCVT_W_S 0xc0000053
+#define MASK_FCVT_W_S 0xfff0007f
+#define MATCH_FCVT_WU_S 0xc0100053
+#define MASK_FCVT_WU_S 0xfff0007f
+#define MATCH_FCVT_L_S 0xc0200053
+#define MASK_FCVT_L_S 0xfff0007f
+#define MATCH_FCVT_LU_S 0xc0300053
+#define MASK_FCVT_LU_S 0xfff0007f
+#define MATCH_FMV_X_W 0xe0000053
+#define MASK_FMV_X_W 0xfff0707f
+#define MATCH_FCLASS_S 0xe0001053
+#define MASK_FCLASS_S 0xfff0707f
+#define MATCH_FCVT_W_D 0xc2000053
+#define MASK_FCVT_W_D 0xfff0007f
+#define MATCH_FCVT_WU_D 0xc2100053
+#define MASK_FCVT_WU_D 0xfff0007f
+#define MATCH_FCVT_L_D 0xc2200053
+#define MASK_FCVT_L_D 0xfff0007f
+#define MATCH_FCVT_LU_D 0xc2300053
+#define MASK_FCVT_LU_D 0xfff0007f
+#define MATCH_FMV_X_D 0xe2000053
+#define MASK_FMV_X_D 0xfff0707f
+#define MATCH_FCLASS_D 0xe2001053
+#define MASK_FCLASS_D 0xfff0707f
+#define MATCH_FCVT_W_Q 0xc6000053
+#define MASK_FCVT_W_Q 0xfff0007f
+#define MATCH_FCVT_WU_Q 0xc6100053
+#define MASK_FCVT_WU_Q 0xfff0007f
+#define MATCH_FCVT_L_Q 0xc6200053
+#define MASK_FCVT_L_Q 0xfff0007f
+#define MATCH_FCVT_LU_Q 0xc6300053
+#define MASK_FCVT_LU_Q 0xfff0007f
+#define MATCH_FMV_X_Q 0xe6000053
+#define MASK_FMV_X_Q 0xfff0707f
+#define MATCH_FCLASS_Q 0xe6001053
+#define MASK_FCLASS_Q 0xfff0707f
+#define MATCH_FCVT_S_W 0xd0000053
+#define MASK_FCVT_S_W 0xfff0007f
+#define MATCH_FCVT_S_WU 0xd0100053
+#define MASK_FCVT_S_WU 0xfff0007f
+#define MATCH_FCVT_S_L 0xd0200053
+#define MASK_FCVT_S_L 0xfff0007f
+#define MATCH_FCVT_S_LU 0xd0300053
+#define MASK_FCVT_S_LU 0xfff0007f
+#define MATCH_FMV_W_X 0xf0000053
+#define MASK_FMV_W_X 0xfff0707f
+#define MATCH_FCVT_D_W 0xd2000053
+#define MASK_FCVT_D_W 0xfff0007f
+#define MATCH_FCVT_D_WU 0xd2100053
+#define MASK_FCVT_D_WU 0xfff0007f
+#define MATCH_FCVT_D_L 0xd2200053
+#define MASK_FCVT_D_L 0xfff0007f
+#define MATCH_FCVT_D_LU 0xd2300053
+#define MASK_FCVT_D_LU 0xfff0007f
+#define MATCH_FMV_D_X 0xf2000053
+#define MASK_FMV_D_X 0xfff0707f
+#define MATCH_FCVT_Q_W 0xd6000053
+#define MASK_FCVT_Q_W 0xfff0007f
+#define MATCH_FCVT_Q_WU 0xd6100053
+#define MASK_FCVT_Q_WU 0xfff0007f
+#define MATCH_FCVT_Q_L 0xd6200053
+#define MASK_FCVT_Q_L 0xfff0007f
+#define MATCH_FCVT_Q_LU 0xd6300053
+#define MASK_FCVT_Q_LU 0xfff0007f
+#define MATCH_FMV_Q_X 0xf6000053
+#define MASK_FMV_Q_X 0xfff0707f
+#define MATCH_FLW 0x2007
+#define MASK_FLW 0x707f
+#define MATCH_FLD 0x3007
+#define MASK_FLD 0x707f
+#define MATCH_FLQ 0x4007
+#define MASK_FLQ 0x707f
+#define MATCH_FSW 0x2027
+#define MASK_FSW 0x707f
+#define MATCH_FSD 0x3027
+#define MASK_FSD 0x707f
+#define MATCH_FSQ 0x4027
+#define MASK_FSQ 0x707f
+#define MATCH_FMADD_S 0x43
+#define MASK_FMADD_S 0x600007f
+#define MATCH_FMSUB_S 0x47
+#define MASK_FMSUB_S 0x600007f
+#define MATCH_FNMSUB_S 0x4b
+#define MASK_FNMSUB_S 0x600007f
+#define MATCH_FNMADD_S 0x4f
+#define MASK_FNMADD_S 0x600007f
+#define MATCH_FMADD_D 0x2000043
+#define MASK_FMADD_D 0x600007f
+#define MATCH_FMSUB_D 0x2000047
+#define MASK_FMSUB_D 0x600007f
+#define MATCH_FNMSUB_D 0x200004b
+#define MASK_FNMSUB_D 0x600007f
+#define MATCH_FNMADD_D 0x200004f
+#define MASK_FNMADD_D 0x600007f
+#define MATCH_FMADD_Q 0x6000043
+#define MASK_FMADD_Q 0x600007f
+#define MATCH_FMSUB_Q 0x6000047
+#define MASK_FMSUB_Q 0x600007f
+#define MATCH_FNMSUB_Q 0x600004b
+#define MASK_FNMSUB_Q 0x600007f
+#define MATCH_FNMADD_Q 0x600004f
+#define MASK_FNMADD_Q 0x600007f
+#define MATCH_C_NOP 0x1
+#define MASK_C_NOP 0xffff
+#define MATCH_C_ADDI16SP 0x6101
+#define MASK_C_ADDI16SP 0xef83
+#define MATCH_C_JR 0x8002
+#define MASK_C_JR 0xf07f
+#define MATCH_C_JALR 0x9002
+#define MASK_C_JALR 0xf07f
+#define MATCH_C_EBREAK 0x9002
+#define MASK_C_EBREAK 0xffff
+#define MATCH_C_LD 0x6000
+#define MASK_C_LD 0xe003
+#define MATCH_C_SD 0xe000
+#define MASK_C_SD 0xe003
+#define MATCH_C_ADDIW 0x2001
+#define MASK_C_ADDIW 0xe003
+#define MATCH_C_LDSP 0x6002
+#define MASK_C_LDSP 0xe003
+#define MATCH_C_SDSP 0xe002
+#define MASK_C_SDSP 0xe003
+#define MATCH_C_ADDI4SPN 0x0
+#define MASK_C_ADDI4SPN 0xe003
+#define MATCH_C_FLD 0x2000
+#define MASK_C_FLD 0xe003
+#define MATCH_C_LW 0x4000
+#define MASK_C_LW 0xe003
+#define MATCH_C_FLW 0x6000
+#define MASK_C_FLW 0xe003
+#define MATCH_C_FSD 0xa000
+#define MASK_C_FSD 0xe003
+#define MATCH_C_SW 0xc000
+#define MASK_C_SW 0xe003
+#define MATCH_C_FSW 0xe000
+#define MASK_C_FSW 0xe003
+#define MATCH_C_ADDI 0x1
+#define MASK_C_ADDI 0xe003
+#define MATCH_C_JAL 0x2001
+#define MASK_C_JAL 0xe003
+#define MATCH_C_LI 0x4001
+#define MASK_C_LI 0xe003
+#define MATCH_C_LUI 0x6001
+#define MASK_C_LUI 0xe003
+#define MATCH_C_SRLI 0x8001
+#define MASK_C_SRLI 0xec03
+#define MATCH_C_SRAI 0x8401
+#define MASK_C_SRAI 0xec03
+#define MATCH_C_ANDI 0x8801
+#define MASK_C_ANDI 0xec03
+#define MATCH_C_SUB 0x8c01
+#define MASK_C_SUB 0xfc63
+#define MATCH_C_XOR 0x8c21
+#define MASK_C_XOR 0xfc63
+#define MATCH_C_OR 0x8c41
+#define MASK_C_OR 0xfc63
+#define MATCH_C_AND 0x8c61
+#define MASK_C_AND 0xfc63
+#define MATCH_C_SUBW 0x9c01
+#define MASK_C_SUBW 0xfc63
+#define MATCH_C_ADDW 0x9c21
+#define MASK_C_ADDW 0xfc63
+#define MATCH_C_J 0xa001
+#define MASK_C_J 0xe003
+#define MATCH_C_BEQZ 0xc001
+#define MASK_C_BEQZ 0xe003
+#define MATCH_C_BNEZ 0xe001
+#define MASK_C_BNEZ 0xe003
+#define MATCH_C_SLLI 0x2
+#define MASK_C_SLLI 0xe003
+#define MATCH_C_FLDSP 0x2002
+#define MASK_C_FLDSP 0xe003
+#define MATCH_C_LWSP 0x4002
+#define MASK_C_LWSP 0xe003
+#define MATCH_C_FLWSP 0x6002
+#define MASK_C_FLWSP 0xe003
+#define MATCH_C_MV 0x8002
+#define MASK_C_MV 0xf003
+#define MATCH_C_ADD 0x9002
+#define MASK_C_ADD 0xf003
+#define MATCH_C_FSDSP 0xa002
+#define MASK_C_FSDSP 0xe003
+#define MATCH_C_SWSP 0xc002
+#define MASK_C_SWSP 0xe003
+#define MATCH_C_FSWSP 0xe002
+#define MASK_C_FSWSP 0xe003
+#define MATCH_CUSTOM0 0xb
+#define MASK_CUSTOM0 0x707f
+#define MATCH_CUSTOM0_RS1 0x200b
+#define MASK_CUSTOM0_RS1 0x707f
+#define MATCH_CUSTOM0_RS1_RS2 0x300b
+#define MASK_CUSTOM0_RS1_RS2 0x707f
+#define MATCH_CUSTOM0_RD 0x400b
+#define MASK_CUSTOM0_RD 0x707f
+#define MATCH_CUSTOM0_RD_RS1 0x600b
+#define MASK_CUSTOM0_RD_RS1 0x707f
+#define MATCH_CUSTOM0_RD_RS1_RS2 0x700b
+#define MASK_CUSTOM0_RD_RS1_RS2 0x707f
+#define MATCH_CUSTOM1 0x2b
+#define MASK_CUSTOM1 0x707f
+#define MATCH_CUSTOM1_RS1 0x202b
+#define MASK_CUSTOM1_RS1 0x707f
+#define MATCH_CUSTOM1_RS1_RS2 0x302b
+#define MASK_CUSTOM1_RS1_RS2 0x707f
+#define MATCH_CUSTOM1_RD 0x402b
+#define MASK_CUSTOM1_RD 0x707f
+#define MATCH_CUSTOM1_RD_RS1 0x602b
+#define MASK_CUSTOM1_RD_RS1 0x707f
+#define MATCH_CUSTOM1_RD_RS1_RS2 0x702b
+#define MASK_CUSTOM1_RD_RS1_RS2 0x707f
+#define MATCH_CUSTOM2 0x5b
+#define MASK_CUSTOM2 0x707f
+#define MATCH_CUSTOM2_RS1 0x205b
+#define MASK_CUSTOM2_RS1 0x707f
+#define MATCH_CUSTOM2_RS1_RS2 0x305b
+#define MASK_CUSTOM2_RS1_RS2 0x707f
+#define MATCH_CUSTOM2_RD 0x405b
+#define MASK_CUSTOM2_RD 0x707f
+#define MATCH_CUSTOM2_RD_RS1 0x605b
+#define MASK_CUSTOM2_RD_RS1 0x707f
+#define MATCH_CUSTOM2_RD_RS1_RS2 0x705b
+#define MASK_CUSTOM2_RD_RS1_RS2 0x707f
+#define MATCH_CUSTOM3 0x7b
+#define MASK_CUSTOM3 0x707f
+#define MATCH_CUSTOM3_RS1 0x207b
+#define MASK_CUSTOM3_RS1 0x707f
+#define MATCH_CUSTOM3_RS1_RS2 0x307b
+#define MASK_CUSTOM3_RS1_RS2 0x707f
+#define MATCH_CUSTOM3_RD 0x407b
+#define MASK_CUSTOM3_RD 0x707f
+#define MATCH_CUSTOM3_RD_RS1 0x607b
+#define MASK_CUSTOM3_RD_RS1 0x707f
+#define MATCH_CUSTOM3_RD_RS1_RS2 0x707b
+#define MASK_CUSTOM3_RD_RS1_RS2 0x707f
+#define CSR_FFLAGS 0x1
+#define CSR_FRM 0x2
+#define CSR_FCSR 0x3
+#define CSR_CYCLE 0xc00
+#define CSR_TIME 0xc01
+#define CSR_INSTRET 0xc02
+#define CSR_HPMCOUNTER3 0xc03
+#define CSR_HPMCOUNTER4 0xc04
+#define CSR_HPMCOUNTER5 0xc05
+#define CSR_HPMCOUNTER6 0xc06
+#define CSR_HPMCOUNTER7 0xc07
+#define CSR_HPMCOUNTER8 0xc08
+#define CSR_HPMCOUNTER9 0xc09
+#define CSR_HPMCOUNTER10 0xc0a
+#define CSR_HPMCOUNTER11 0xc0b
+#define CSR_HPMCOUNTER12 0xc0c
+#define CSR_HPMCOUNTER13 0xc0d
+#define CSR_HPMCOUNTER14 0xc0e
+#define CSR_HPMCOUNTER15 0xc0f
+#define CSR_HPMCOUNTER16 0xc10
+#define CSR_HPMCOUNTER17 0xc11
+#define CSR_HPMCOUNTER18 0xc12
+#define CSR_HPMCOUNTER19 0xc13
+#define CSR_HPMCOUNTER20 0xc14
+#define CSR_HPMCOUNTER21 0xc15
+#define CSR_HPMCOUNTER22 0xc16
+#define CSR_HPMCOUNTER23 0xc17
+#define CSR_HPMCOUNTER24 0xc18
+#define CSR_HPMCOUNTER25 0xc19
+#define CSR_HPMCOUNTER26 0xc1a
+#define CSR_HPMCOUNTER27 0xc1b
+#define CSR_HPMCOUNTER28 0xc1c
+#define CSR_HPMCOUNTER29 0xc1d
+#define CSR_HPMCOUNTER30 0xc1e
+#define CSR_HPMCOUNTER31 0xc1f
+#define CSR_SSTATUS 0x100
+#define CSR_SIE 0x104
+#define CSR_STVEC 0x105
+#define CSR_SCOUNTEREN 0x106
+#define CSR_SSCRATCH 0x140
+#define CSR_SEPC 0x141
+#define CSR_SCAUSE 0x142
+#define CSR_STVAL 0x143
+#define CSR_SIP 0x144
+#define CSR_SATP 0x180
+#define CSR_MSTATUS 0x300
+#define CSR_MISA 0x301
+#define CSR_MEDELEG 0x302
+#define CSR_MIDELEG 0x303
+#define CSR_MIE 0x304
+#define CSR_MTVEC 0x305
+#define CSR_MCOUNTEREN 0x306
+#define CSR_MSCRATCH 0x340
+#define CSR_MEPC 0x341
+#define CSR_MCAUSE 0x342
+#define CSR_MTVAL 0x343
+#define CSR_MIP 0x344
+#define CSR_PMPCFG0 0x3a0
+#define CSR_PMPCFG1 0x3a1
+#define CSR_PMPCFG2 0x3a2
+#define CSR_PMPCFG3 0x3a3
+#define CSR_PMPADDR0 0x3b0
+#define CSR_PMPADDR1 0x3b1
+#define CSR_PMPADDR2 0x3b2
+#define CSR_PMPADDR3 0x3b3
+#define CSR_PMPADDR4 0x3b4
+#define CSR_PMPADDR5 0x3b5
+#define CSR_PMPADDR6 0x3b6
+#define CSR_PMPADDR7 0x3b7
+#define CSR_PMPADDR8 0x3b8
+#define CSR_PMPADDR9 0x3b9
+#define CSR_PMPADDR10 0x3ba
+#define CSR_PMPADDR11 0x3bb
+#define CSR_PMPADDR12 0x3bc
+#define CSR_PMPADDR13 0x3bd
+#define CSR_PMPADDR14 0x3be
+#define CSR_PMPADDR15 0x3bf
+#define CSR_TSELECT 0x7a0
+#define CSR_TDATA1 0x7a1
+#define CSR_TDATA2 0x7a2
+#define CSR_TDATA3 0x7a3
+#define CSR_DCSR 0x7b0
+#define CSR_DPC 0x7b1
+#define CSR_DSCRATCH 0x7b2
+#define CSR_MCYCLE 0xb00
+#define CSR_MINSTRET 0xb02
+#define CSR_MHPMCOUNTER3 0xb03
+#define CSR_MHPMCOUNTER4 0xb04
+#define CSR_MHPMCOUNTER5 0xb05
+#define CSR_MHPMCOUNTER6 0xb06
+#define CSR_MHPMCOUNTER7 0xb07
+#define CSR_MHPMCOUNTER8 0xb08
+#define CSR_MHPMCOUNTER9 0xb09
+#define CSR_MHPMCOUNTER10 0xb0a
+#define CSR_MHPMCOUNTER11 0xb0b
+#define CSR_MHPMCOUNTER12 0xb0c
+#define CSR_MHPMCOUNTER13 0xb0d
+#define CSR_MHPMCOUNTER14 0xb0e
+#define CSR_MHPMCOUNTER15 0xb0f
+#define CSR_MHPMCOUNTER16 0xb10
+#define CSR_MHPMCOUNTER17 0xb11
+#define CSR_MHPMCOUNTER18 0xb12
+#define CSR_MHPMCOUNTER19 0xb13
+#define CSR_MHPMCOUNTER20 0xb14
+#define CSR_MHPMCOUNTER21 0xb15
+#define CSR_MHPMCOUNTER22 0xb16
+#define CSR_MHPMCOUNTER23 0xb17
+#define CSR_MHPMCOUNTER24 0xb18
+#define CSR_MHPMCOUNTER25 0xb19
+#define CSR_MHPMCOUNTER26 0xb1a
+#define CSR_MHPMCOUNTER27 0xb1b
+#define CSR_MHPMCOUNTER28 0xb1c
+#define CSR_MHPMCOUNTER29 0xb1d
+#define CSR_MHPMCOUNTER30 0xb1e
+#define CSR_MHPMCOUNTER31 0xb1f
+#define CSR_MHPMEVENT3 0x323
+#define CSR_MHPMEVENT4 0x324
+#define CSR_MHPMEVENT5 0x325
+#define CSR_MHPMEVENT6 0x326
+#define CSR_MHPMEVENT7 0x327
+#define CSR_MHPMEVENT8 0x328
+#define CSR_MHPMEVENT9 0x329
+#define CSR_MHPMEVENT10 0x32a
+#define CSR_MHPMEVENT11 0x32b
+#define CSR_MHPMEVENT12 0x32c
+#define CSR_MHPMEVENT13 0x32d
+#define CSR_MHPMEVENT14 0x32e
+#define CSR_MHPMEVENT15 0x32f
+#define CSR_MHPMEVENT16 0x330
+#define CSR_MHPMEVENT17 0x331
+#define CSR_MHPMEVENT18 0x332
+#define CSR_MHPMEVENT19 0x333
+#define CSR_MHPMEVENT20 0x334
+#define CSR_MHPMEVENT21 0x335
+#define CSR_MHPMEVENT22 0x336
+#define CSR_MHPMEVENT23 0x337
+#define CSR_MHPMEVENT24 0x338
+#define CSR_MHPMEVENT25 0x339
+#define CSR_MHPMEVENT26 0x33a
+#define CSR_MHPMEVENT27 0x33b
+#define CSR_MHPMEVENT28 0x33c
+#define CSR_MHPMEVENT29 0x33d
+#define CSR_MHPMEVENT30 0x33e
+#define CSR_MHPMEVENT31 0x33f
+#define CSR_MVENDORID 0xf11
+#define CSR_MARCHID 0xf12
+#define CSR_MIMPID 0xf13
+#define CSR_MHARTID 0xf14
+#define CSR_CYCLEH 0xc80
+#define CSR_TIMEH 0xc81
+#define CSR_INSTRETH 0xc82
+#define CSR_HPMCOUNTER3H 0xc83
+#define CSR_HPMCOUNTER4H 0xc84
+#define CSR_HPMCOUNTER5H 0xc85
+#define CSR_HPMCOUNTER6H 0xc86
+#define CSR_HPMCOUNTER7H 0xc87
+#define CSR_HPMCOUNTER8H 0xc88
+#define CSR_HPMCOUNTER9H 0xc89
+#define CSR_HPMCOUNTER10H 0xc8a
+#define CSR_HPMCOUNTER11H 0xc8b
+#define CSR_HPMCOUNTER12H 0xc8c
+#define CSR_HPMCOUNTER13H 0xc8d
+#define CSR_HPMCOUNTER14H 0xc8e
+#define CSR_HPMCOUNTER15H 0xc8f
+#define CSR_HPMCOUNTER16H 0xc90
+#define CSR_HPMCOUNTER17H 0xc91
+#define CSR_HPMCOUNTER18H 0xc92
+#define CSR_HPMCOUNTER19H 0xc93
+#define CSR_HPMCOUNTER20H 0xc94
+#define CSR_HPMCOUNTER21H 0xc95
+#define CSR_HPMCOUNTER22H 0xc96
+#define CSR_HPMCOUNTER23H 0xc97
+#define CSR_HPMCOUNTER24H 0xc98
+#define CSR_HPMCOUNTER25H 0xc99
+#define CSR_HPMCOUNTER26H 0xc9a
+#define CSR_HPMCOUNTER27H 0xc9b
+#define CSR_HPMCOUNTER28H 0xc9c
+#define CSR_HPMCOUNTER29H 0xc9d
+#define CSR_HPMCOUNTER30H 0xc9e
+#define CSR_HPMCOUNTER31H 0xc9f
+#define CSR_MCYCLEH 0xb80
+#define CSR_MINSTRETH 0xb82
+#define CSR_MHPMCOUNTER3H 0xb83
+#define CSR_MHPMCOUNTER4H 0xb84
+#define CSR_MHPMCOUNTER5H 0xb85
+#define CSR_MHPMCOUNTER6H 0xb86
+#define CSR_MHPMCOUNTER7H 0xb87
+#define CSR_MHPMCOUNTER8H 0xb88
+#define CSR_MHPMCOUNTER9H 0xb89
+#define CSR_MHPMCOUNTER10H 0xb8a
+#define CSR_MHPMCOUNTER11H 0xb8b
+#define CSR_MHPMCOUNTER12H 0xb8c
+#define CSR_MHPMCOUNTER13H 0xb8d
+#define CSR_MHPMCOUNTER14H 0xb8e
+#define CSR_MHPMCOUNTER15H 0xb8f
+#define CSR_MHPMCOUNTER16H 0xb90
+#define CSR_MHPMCOUNTER17H 0xb91
+#define CSR_MHPMCOUNTER18H 0xb92
+#define CSR_MHPMCOUNTER19H 0xb93
+#define CSR_MHPMCOUNTER20H 0xb94
+#define CSR_MHPMCOUNTER21H 0xb95
+#define CSR_MHPMCOUNTER22H 0xb96
+#define CSR_MHPMCOUNTER23H 0xb97
+#define CSR_MHPMCOUNTER24H 0xb98
+#define CSR_MHPMCOUNTER25H 0xb99
+#define CSR_MHPMCOUNTER26H 0xb9a
+#define CSR_MHPMCOUNTER27H 0xb9b
+#define CSR_MHPMCOUNTER28H 0xb9c
+#define CSR_MHPMCOUNTER29H 0xb9d
+#define CSR_MHPMCOUNTER30H 0xb9e
+#define CSR_MHPMCOUNTER31H 0xb9f
+#define CAUSE_MISALIGNED_FETCH 0x0
+#define CAUSE_FETCH_ACCESS 0x1
+#define CAUSE_ILLEGAL_INSTRUCTION 0x2
+#define CAUSE_BREAKPOINT 0x3
+#define CAUSE_MISALIGNED_LOAD 0x4
+#define CAUSE_LOAD_ACCESS 0x5
+#define CAUSE_MISALIGNED_STORE 0x6
+#define CAUSE_STORE_ACCESS 0x7
+#define CAUSE_USER_ECALL 0x8
+#define CAUSE_SUPERVISOR_ECALL 0x9
+#define CAUSE_HYPERVISOR_ECALL 0xa
+#define CAUSE_MACHINE_ECALL 0xb
+#define CAUSE_FETCH_PAGE_FAULT 0xc
+#define CAUSE_LOAD_PAGE_FAULT 0xd
+#define CAUSE_STORE_PAGE_FAULT 0xf
+#endif
+#ifdef DECLARE_INSN
+DECLARE_INSN(beq, MATCH_BEQ, MASK_BEQ)
+DECLARE_INSN(bne, MATCH_BNE, MASK_BNE)
+DECLARE_INSN(blt, MATCH_BLT, MASK_BLT)
+DECLARE_INSN(bge, MATCH_BGE, MASK_BGE)
+DECLARE_INSN(bltu, MATCH_BLTU, MASK_BLTU)
+DECLARE_INSN(bgeu, MATCH_BGEU, MASK_BGEU)
+DECLARE_INSN(jalr, MATCH_JALR, MASK_JALR)
+DECLARE_INSN(jal, MATCH_JAL, MASK_JAL)
+DECLARE_INSN(lui, MATCH_LUI, MASK_LUI)
+DECLARE_INSN(auipc, MATCH_AUIPC, MASK_AUIPC)
+DECLARE_INSN(addi, MATCH_ADDI, MASK_ADDI)
+DECLARE_INSN(slli, MATCH_SLLI, MASK_SLLI)
+DECLARE_INSN(slti, MATCH_SLTI, MASK_SLTI)
+DECLARE_INSN(sltiu, MATCH_SLTIU, MASK_SLTIU)
+DECLARE_INSN(xori, MATCH_XORI, MASK_XORI)
+DECLARE_INSN(srli, MATCH_SRLI, MASK_SRLI)
+DECLARE_INSN(srai, MATCH_SRAI, MASK_SRAI)
+DECLARE_INSN(ori, MATCH_ORI, MASK_ORI)
+DECLARE_INSN(andi, MATCH_ANDI, MASK_ANDI)
+DECLARE_INSN(add, MATCH_ADD, MASK_ADD)
+DECLARE_INSN(sub, MATCH_SUB, MASK_SUB)
+DECLARE_INSN(sll, MATCH_SLL, MASK_SLL)
+DECLARE_INSN(slt, MATCH_SLT, MASK_SLT)
+DECLARE_INSN(sltu, MATCH_SLTU, MASK_SLTU)
+DECLARE_INSN(xor, MATCH_XOR, MASK_XOR)
+DECLARE_INSN(srl, MATCH_SRL, MASK_SRL)
+DECLARE_INSN(sra, MATCH_SRA, MASK_SRA)
+DECLARE_INSN(or, MATCH_OR, MASK_OR)
+DECLARE_INSN(and, MATCH_AND, MASK_AND)
+DECLARE_INSN(addiw, MATCH_ADDIW, MASK_ADDIW)
+DECLARE_INSN(slliw, MATCH_SLLIW, MASK_SLLIW)
+DECLARE_INSN(srliw, MATCH_SRLIW, MASK_SRLIW)
+DECLARE_INSN(sraiw, MATCH_SRAIW, MASK_SRAIW)
+DECLARE_INSN(addw, MATCH_ADDW, MASK_ADDW)
+DECLARE_INSN(subw, MATCH_SUBW, MASK_SUBW)
+DECLARE_INSN(sllw, MATCH_SLLW, MASK_SLLW)
+DECLARE_INSN(srlw, MATCH_SRLW, MASK_SRLW)
+DECLARE_INSN(sraw, MATCH_SRAW, MASK_SRAW)
+DECLARE_INSN(lb, MATCH_LB, MASK_LB)
+DECLARE_INSN(lh, MATCH_LH, MASK_LH)
+DECLARE_INSN(lw, MATCH_LW, MASK_LW)
+DECLARE_INSN(ld, MATCH_LD, MASK_LD)
+DECLARE_INSN(lbu, MATCH_LBU, MASK_LBU)
+DECLARE_INSN(lhu, MATCH_LHU, MASK_LHU)
+DECLARE_INSN(lwu, MATCH_LWU, MASK_LWU)
+DECLARE_INSN(sb, MATCH_SB, MASK_SB)
+DECLARE_INSN(sh, MATCH_SH, MASK_SH)
+DECLARE_INSN(sw, MATCH_SW, MASK_SW)
+DECLARE_INSN(sd, MATCH_SD, MASK_SD)
+DECLARE_INSN(fence, MATCH_FENCE, MASK_FENCE)
+DECLARE_INSN(fence_i, MATCH_FENCE_I, MASK_FENCE_I)
+DECLARE_INSN(mul, MATCH_MUL, MASK_MUL)
+DECLARE_INSN(mulh, MATCH_MULH, MASK_MULH)
+DECLARE_INSN(mulhsu, MATCH_MULHSU, MASK_MULHSU)
+DECLARE_INSN(mulhu, MATCH_MULHU, MASK_MULHU)
+DECLARE_INSN(div, MATCH_DIV, MASK_DIV)
+DECLARE_INSN(divu, MATCH_DIVU, MASK_DIVU)
+DECLARE_INSN(rem, MATCH_REM, MASK_REM)
+DECLARE_INSN(remu, MATCH_REMU, MASK_REMU)
+DECLARE_INSN(mulw, MATCH_MULW, MASK_MULW)
+DECLARE_INSN(divw, MATCH_DIVW, MASK_DIVW)
+DECLARE_INSN(divuw, MATCH_DIVUW, MASK_DIVUW)
+DECLARE_INSN(remw, MATCH_REMW, MASK_REMW)
+DECLARE_INSN(remuw, MATCH_REMUW, MASK_REMUW)
+DECLARE_INSN(amoadd_w, MATCH_AMOADD_W, MASK_AMOADD_W)
+DECLARE_INSN(amoxor_w, MATCH_AMOXOR_W, MASK_AMOXOR_W)
+DECLARE_INSN(amoor_w, MATCH_AMOOR_W, MASK_AMOOR_W)
+DECLARE_INSN(amoand_w, MATCH_AMOAND_W, MASK_AMOAND_W)
+DECLARE_INSN(amomin_w, MATCH_AMOMIN_W, MASK_AMOMIN_W)
+DECLARE_INSN(amomax_w, MATCH_AMOMAX_W, MASK_AMOMAX_W)
+DECLARE_INSN(amominu_w, MATCH_AMOMINU_W, MASK_AMOMINU_W)
+DECLARE_INSN(amomaxu_w, MATCH_AMOMAXU_W, MASK_AMOMAXU_W)
+DECLARE_INSN(amoswap_w, MATCH_AMOSWAP_W, MASK_AMOSWAP_W)
+DECLARE_INSN(lr_w, MATCH_LR_W, MASK_LR_W)
+DECLARE_INSN(sc_w, MATCH_SC_W, MASK_SC_W)
+DECLARE_INSN(amoadd_d, MATCH_AMOADD_D, MASK_AMOADD_D)
+DECLARE_INSN(amoxor_d, MATCH_AMOXOR_D, MASK_AMOXOR_D)
+DECLARE_INSN(amoor_d, MATCH_AMOOR_D, MASK_AMOOR_D)
+DECLARE_INSN(amoand_d, MATCH_AMOAND_D, MASK_AMOAND_D)
+DECLARE_INSN(amomin_d, MATCH_AMOMIN_D, MASK_AMOMIN_D)
+DECLARE_INSN(amomax_d, MATCH_AMOMAX_D, MASK_AMOMAX_D)
+DECLARE_INSN(amominu_d, MATCH_AMOMINU_D, MASK_AMOMINU_D)
+DECLARE_INSN(amomaxu_d, MATCH_AMOMAXU_D, MASK_AMOMAXU_D)
+DECLARE_INSN(amoswap_d, MATCH_AMOSWAP_D, MASK_AMOSWAP_D)
+DECLARE_INSN(lr_d, MATCH_LR_D, MASK_LR_D)
+DECLARE_INSN(sc_d, MATCH_SC_D, MASK_SC_D)
+DECLARE_INSN(ecall, MATCH_ECALL, MASK_ECALL)
+DECLARE_INSN(ebreak, MATCH_EBREAK, MASK_EBREAK)
+DECLARE_INSN(uret, MATCH_URET, MASK_URET)
+DECLARE_INSN(sret, MATCH_SRET, MASK_SRET)
+DECLARE_INSN(mret, MATCH_MRET, MASK_MRET)
+DECLARE_INSN(dret, MATCH_DRET, MASK_DRET)
+DECLARE_INSN(sfence_vma, MATCH_SFENCE_VMA, MASK_SFENCE_VMA)
+DECLARE_INSN(wfi, MATCH_WFI, MASK_WFI)
+DECLARE_INSN(csrrw, MATCH_CSRRW, MASK_CSRRW)
+DECLARE_INSN(csrrs, MATCH_CSRRS, MASK_CSRRS)
+DECLARE_INSN(csrrc, MATCH_CSRRC, MASK_CSRRC)
+DECLARE_INSN(csrrwi, MATCH_CSRRWI, MASK_CSRRWI)
+DECLARE_INSN(csrrsi, MATCH_CSRRSI, MASK_CSRRSI)
+DECLARE_INSN(csrrci, MATCH_CSRRCI, MASK_CSRRCI)
+DECLARE_INSN(fadd_s, MATCH_FADD_S, MASK_FADD_S)
+DECLARE_INSN(fsub_s, MATCH_FSUB_S, MASK_FSUB_S)
+DECLARE_INSN(fmul_s, MATCH_FMUL_S, MASK_FMUL_S)
+DECLARE_INSN(fdiv_s, MATCH_FDIV_S, MASK_FDIV_S)
+DECLARE_INSN(fsgnj_s, MATCH_FSGNJ_S, MASK_FSGNJ_S)
+DECLARE_INSN(fsgnjn_s, MATCH_FSGNJN_S, MASK_FSGNJN_S)
+DECLARE_INSN(fsgnjx_s, MATCH_FSGNJX_S, MASK_FSGNJX_S)
+DECLARE_INSN(fmin_s, MATCH_FMIN_S, MASK_FMIN_S)
+DECLARE_INSN(fmax_s, MATCH_FMAX_S, MASK_FMAX_S)
+DECLARE_INSN(fsqrt_s, MATCH_FSQRT_S, MASK_FSQRT_S)
+DECLARE_INSN(fadd_d, MATCH_FADD_D, MASK_FADD_D)
+DECLARE_INSN(fsub_d, MATCH_FSUB_D, MASK_FSUB_D)
+DECLARE_INSN(fmul_d, MATCH_FMUL_D, MASK_FMUL_D)
+DECLARE_INSN(fdiv_d, MATCH_FDIV_D, MASK_FDIV_D)
+DECLARE_INSN(fsgnj_d, MATCH_FSGNJ_D, MASK_FSGNJ_D)
+DECLARE_INSN(fsgnjn_d, MATCH_FSGNJN_D, MASK_FSGNJN_D)
+DECLARE_INSN(fsgnjx_d, MATCH_FSGNJX_D, MASK_FSGNJX_D)
+DECLARE_INSN(fmin_d, MATCH_FMIN_D, MASK_FMIN_D)
+DECLARE_INSN(fmax_d, MATCH_FMAX_D, MASK_FMAX_D)
+DECLARE_INSN(fcvt_s_d, MATCH_FCVT_S_D, MASK_FCVT_S_D)
+DECLARE_INSN(fcvt_d_s, MATCH_FCVT_D_S, MASK_FCVT_D_S)
+DECLARE_INSN(fsqrt_d, MATCH_FSQRT_D, MASK_FSQRT_D)
+DECLARE_INSN(fadd_q, MATCH_FADD_Q, MASK_FADD_Q)
+DECLARE_INSN(fsub_q, MATCH_FSUB_Q, MASK_FSUB_Q)
+DECLARE_INSN(fmul_q, MATCH_FMUL_Q, MASK_FMUL_Q)
+DECLARE_INSN(fdiv_q, MATCH_FDIV_Q, MASK_FDIV_Q)
+DECLARE_INSN(fsgnj_q, MATCH_FSGNJ_Q, MASK_FSGNJ_Q)
+DECLARE_INSN(fsgnjn_q, MATCH_FSGNJN_Q, MASK_FSGNJN_Q)
+DECLARE_INSN(fsgnjx_q, MATCH_FSGNJX_Q, MASK_FSGNJX_Q)
+DECLARE_INSN(fmin_q, MATCH_FMIN_Q, MASK_FMIN_Q)
+DECLARE_INSN(fmax_q, MATCH_FMAX_Q, MASK_FMAX_Q)
+DECLARE_INSN(fcvt_s_q, MATCH_FCVT_S_Q, MASK_FCVT_S_Q)
+DECLARE_INSN(fcvt_q_s, MATCH_FCVT_Q_S, MASK_FCVT_Q_S)
+DECLARE_INSN(fcvt_d_q, MATCH_FCVT_D_Q, MASK_FCVT_D_Q)
+DECLARE_INSN(fcvt_q_d, MATCH_FCVT_Q_D, MASK_FCVT_Q_D)
+DECLARE_INSN(fsqrt_q, MATCH_FSQRT_Q, MASK_FSQRT_Q)
+DECLARE_INSN(fle_s, MATCH_FLE_S, MASK_FLE_S)
+DECLARE_INSN(flt_s, MATCH_FLT_S, MASK_FLT_S)
+DECLARE_INSN(feq_s, MATCH_FEQ_S, MASK_FEQ_S)
+DECLARE_INSN(fle_d, MATCH_FLE_D, MASK_FLE_D)
+DECLARE_INSN(flt_d, MATCH_FLT_D, MASK_FLT_D)
+DECLARE_INSN(feq_d, MATCH_FEQ_D, MASK_FEQ_D)
+DECLARE_INSN(fle_q, MATCH_FLE_Q, MASK_FLE_Q)
+DECLARE_INSN(flt_q, MATCH_FLT_Q, MASK_FLT_Q)
+DECLARE_INSN(feq_q, MATCH_FEQ_Q, MASK_FEQ_Q)
+DECLARE_INSN(fcvt_w_s, MATCH_FCVT_W_S, MASK_FCVT_W_S)
+DECLARE_INSN(fcvt_wu_s, MATCH_FCVT_WU_S, MASK_FCVT_WU_S)
+DECLARE_INSN(fcvt_l_s, MATCH_FCVT_L_S, MASK_FCVT_L_S)
+DECLARE_INSN(fcvt_lu_s, MATCH_FCVT_LU_S, MASK_FCVT_LU_S)
+DECLARE_INSN(fmv_x_w, MATCH_FMV_X_W, MASK_FMV_X_W)
+DECLARE_INSN(fclass_s, MATCH_FCLASS_S, MASK_FCLASS_S)
+DECLARE_INSN(fcvt_w_d, MATCH_FCVT_W_D, MASK_FCVT_W_D)
+DECLARE_INSN(fcvt_wu_d, MATCH_FCVT_WU_D, MASK_FCVT_WU_D)
+DECLARE_INSN(fcvt_l_d, MATCH_FCVT_L_D, MASK_FCVT_L_D)
+DECLARE_INSN(fcvt_lu_d, MATCH_FCVT_LU_D, MASK_FCVT_LU_D)
+DECLARE_INSN(fmv_x_d, MATCH_FMV_X_D, MASK_FMV_X_D)
+DECLARE_INSN(fclass_d, MATCH_FCLASS_D, MASK_FCLASS_D)
+DECLARE_INSN(fcvt_w_q, MATCH_FCVT_W_Q, MASK_FCVT_W_Q)
+DECLARE_INSN(fcvt_wu_q, MATCH_FCVT_WU_Q, MASK_FCVT_WU_Q)
+DECLARE_INSN(fcvt_l_q, MATCH_FCVT_L_Q, MASK_FCVT_L_Q)
+DECLARE_INSN(fcvt_lu_q, MATCH_FCVT_LU_Q, MASK_FCVT_LU_Q)
+DECLARE_INSN(fmv_x_q, MATCH_FMV_X_Q, MASK_FMV_X_Q)
+DECLARE_INSN(fclass_q, MATCH_FCLASS_Q, MASK_FCLASS_Q)
+DECLARE_INSN(fcvt_s_w, MATCH_FCVT_S_W, MASK_FCVT_S_W)
+DECLARE_INSN(fcvt_s_wu, MATCH_FCVT_S_WU, MASK_FCVT_S_WU)
+DECLARE_INSN(fcvt_s_l, MATCH_FCVT_S_L, MASK_FCVT_S_L)
+DECLARE_INSN(fcvt_s_lu, MATCH_FCVT_S_LU, MASK_FCVT_S_LU)
+DECLARE_INSN(fmv_w_x, MATCH_FMV_W_X, MASK_FMV_W_X)
+DECLARE_INSN(fcvt_d_w, MATCH_FCVT_D_W, MASK_FCVT_D_W)
+DECLARE_INSN(fcvt_d_wu, MATCH_FCVT_D_WU, MASK_FCVT_D_WU)
+DECLARE_INSN(fcvt_d_l, MATCH_FCVT_D_L, MASK_FCVT_D_L)
+DECLARE_INSN(fcvt_d_lu, MATCH_FCVT_D_LU, MASK_FCVT_D_LU)
+DECLARE_INSN(fmv_d_x, MATCH_FMV_D_X, MASK_FMV_D_X)
+DECLARE_INSN(fcvt_q_w, MATCH_FCVT_Q_W, MASK_FCVT_Q_W)
+DECLARE_INSN(fcvt_q_wu, MATCH_FCVT_Q_WU, MASK_FCVT_Q_WU)
+DECLARE_INSN(fcvt_q_l, MATCH_FCVT_Q_L, MASK_FCVT_Q_L)
+DECLARE_INSN(fcvt_q_lu, MATCH_FCVT_Q_LU, MASK_FCVT_Q_LU)
+DECLARE_INSN(fmv_q_x, MATCH_FMV_Q_X, MASK_FMV_Q_X)
+DECLARE_INSN(flw, MATCH_FLW, MASK_FLW)
+DECLARE_INSN(fld, MATCH_FLD, MASK_FLD)
+DECLARE_INSN(flq, MATCH_FLQ, MASK_FLQ)
+DECLARE_INSN(fsw, MATCH_FSW, MASK_FSW)
+DECLARE_INSN(fsd, MATCH_FSD, MASK_FSD)
+DECLARE_INSN(fsq, MATCH_FSQ, MASK_FSQ)
+DECLARE_INSN(fmadd_s, MATCH_FMADD_S, MASK_FMADD_S)
+DECLARE_INSN(fmsub_s, MATCH_FMSUB_S, MASK_FMSUB_S)
+DECLARE_INSN(fnmsub_s, MATCH_FNMSUB_S, MASK_FNMSUB_S)
+DECLARE_INSN(fnmadd_s, MATCH_FNMADD_S, MASK_FNMADD_S)
+DECLARE_INSN(fmadd_d, MATCH_FMADD_D, MASK_FMADD_D)
+DECLARE_INSN(fmsub_d, MATCH_FMSUB_D, MASK_FMSUB_D)
+DECLARE_INSN(fnmsub_d, MATCH_FNMSUB_D, MASK_FNMSUB_D)
+DECLARE_INSN(fnmadd_d, MATCH_FNMADD_D, MASK_FNMADD_D)
+DECLARE_INSN(fmadd_q, MATCH_FMADD_Q, MASK_FMADD_Q)
+DECLARE_INSN(fmsub_q, MATCH_FMSUB_Q, MASK_FMSUB_Q)
+DECLARE_INSN(fnmsub_q, MATCH_FNMSUB_Q, MASK_FNMSUB_Q)
+DECLARE_INSN(fnmadd_q, MATCH_FNMADD_Q, MASK_FNMADD_Q)
+DECLARE_INSN(c_nop, MATCH_C_NOP, MASK_C_NOP)
+DECLARE_INSN(c_addi16sp, MATCH_C_ADDI16SP, MASK_C_ADDI16SP)
+DECLARE_INSN(c_jr, MATCH_C_JR, MASK_C_JR)
+DECLARE_INSN(c_jalr, MATCH_C_JALR, MASK_C_JALR)
+DECLARE_INSN(c_ebreak, MATCH_C_EBREAK, MASK_C_EBREAK)
+DECLARE_INSN(c_ld, MATCH_C_LD, MASK_C_LD)
+DECLARE_INSN(c_sd, MATCH_C_SD, MASK_C_SD)
+DECLARE_INSN(c_addiw, MATCH_C_ADDIW, MASK_C_ADDIW)
+DECLARE_INSN(c_ldsp, MATCH_C_LDSP, MASK_C_LDSP)
+DECLARE_INSN(c_sdsp, MATCH_C_SDSP, MASK_C_SDSP)
+DECLARE_INSN(c_addi4spn, MATCH_C_ADDI4SPN, MASK_C_ADDI4SPN)
+DECLARE_INSN(c_fld, MATCH_C_FLD, MASK_C_FLD)
+DECLARE_INSN(c_lw, MATCH_C_LW, MASK_C_LW)
+DECLARE_INSN(c_flw, MATCH_C_FLW, MASK_C_FLW)
+DECLARE_INSN(c_fsd, MATCH_C_FSD, MASK_C_FSD)
+DECLARE_INSN(c_sw, MATCH_C_SW, MASK_C_SW)
+DECLARE_INSN(c_fsw, MATCH_C_FSW, MASK_C_FSW)
+DECLARE_INSN(c_addi, MATCH_C_ADDI, MASK_C_ADDI)
+DECLARE_INSN(c_jal, MATCH_C_JAL, MASK_C_JAL)
+DECLARE_INSN(c_li, MATCH_C_LI, MASK_C_LI)
+DECLARE_INSN(c_lui, MATCH_C_LUI, MASK_C_LUI)
+DECLARE_INSN(c_srli, MATCH_C_SRLI, MASK_C_SRLI)
+DECLARE_INSN(c_srai, MATCH_C_SRAI, MASK_C_SRAI)
+DECLARE_INSN(c_andi, MATCH_C_ANDI, MASK_C_ANDI)
+DECLARE_INSN(c_sub, MATCH_C_SUB, MASK_C_SUB)
+DECLARE_INSN(c_xor, MATCH_C_XOR, MASK_C_XOR)
+DECLARE_INSN(c_or, MATCH_C_OR, MASK_C_OR)
+DECLARE_INSN(c_and, MATCH_C_AND, MASK_C_AND)
+DECLARE_INSN(c_subw, MATCH_C_SUBW, MASK_C_SUBW)
+DECLARE_INSN(c_addw, MATCH_C_ADDW, MASK_C_ADDW)
+DECLARE_INSN(c_j, MATCH_C_J, MASK_C_J)
+DECLARE_INSN(c_beqz, MATCH_C_BEQZ, MASK_C_BEQZ)
+DECLARE_INSN(c_bnez, MATCH_C_BNEZ, MASK_C_BNEZ)
+DECLARE_INSN(c_slli, MATCH_C_SLLI, MASK_C_SLLI)
+DECLARE_INSN(c_fldsp, MATCH_C_FLDSP, MASK_C_FLDSP)
+DECLARE_INSN(c_lwsp, MATCH_C_LWSP, MASK_C_LWSP)
+DECLARE_INSN(c_flwsp, MATCH_C_FLWSP, MASK_C_FLWSP)
+DECLARE_INSN(c_mv, MATCH_C_MV, MASK_C_MV)
+DECLARE_INSN(c_add, MATCH_C_ADD, MASK_C_ADD)
+DECLARE_INSN(c_fsdsp, MATCH_C_FSDSP, MASK_C_FSDSP)
+DECLARE_INSN(c_swsp, MATCH_C_SWSP, MASK_C_SWSP)
+DECLARE_INSN(c_fswsp, MATCH_C_FSWSP, MASK_C_FSWSP)
+DECLARE_INSN(custom0, MATCH_CUSTOM0, MASK_CUSTOM0)
+DECLARE_INSN(custom0_rs1, MATCH_CUSTOM0_RS1, MASK_CUSTOM0_RS1)
+DECLARE_INSN(custom0_rs1_rs2, MATCH_CUSTOM0_RS1_RS2, MASK_CUSTOM0_RS1_RS2)
+DECLARE_INSN(custom0_rd, MATCH_CUSTOM0_RD, MASK_CUSTOM0_RD)
+DECLARE_INSN(custom0_rd_rs1, MATCH_CUSTOM0_RD_RS1, MASK_CUSTOM0_RD_RS1)
+DECLARE_INSN(custom0_rd_rs1_rs2, MATCH_CUSTOM0_RD_RS1_RS2, MASK_CUSTOM0_RD_RS1_RS2)
+DECLARE_INSN(custom1, MATCH_CUSTOM1, MASK_CUSTOM1)
+DECLARE_INSN(custom1_rs1, MATCH_CUSTOM1_RS1, MASK_CUSTOM1_RS1)
+DECLARE_INSN(custom1_rs1_rs2, MATCH_CUSTOM1_RS1_RS2, MASK_CUSTOM1_RS1_RS2)
+DECLARE_INSN(custom1_rd, MATCH_CUSTOM1_RD, MASK_CUSTOM1_RD)
+DECLARE_INSN(custom1_rd_rs1, MATCH_CUSTOM1_RD_RS1, MASK_CUSTOM1_RD_RS1)
+DECLARE_INSN(custom1_rd_rs1_rs2, MATCH_CUSTOM1_RD_RS1_RS2, MASK_CUSTOM1_RD_RS1_RS2)
+DECLARE_INSN(custom2, MATCH_CUSTOM2, MASK_CUSTOM2)
+DECLARE_INSN(custom2_rs1, MATCH_CUSTOM2_RS1, MASK_CUSTOM2_RS1)
+DECLARE_INSN(custom2_rs1_rs2, MATCH_CUSTOM2_RS1_RS2, MASK_CUSTOM2_RS1_RS2)
+DECLARE_INSN(custom2_rd, MATCH_CUSTOM2_RD, MASK_CUSTOM2_RD)
+DECLARE_INSN(custom2_rd_rs1, MATCH_CUSTOM2_RD_RS1, MASK_CUSTOM2_RD_RS1)
+DECLARE_INSN(custom2_rd_rs1_rs2, MATCH_CUSTOM2_RD_RS1_RS2, MASK_CUSTOM2_RD_RS1_RS2)
+DECLARE_INSN(custom3, MATCH_CUSTOM3, MASK_CUSTOM3)
+DECLARE_INSN(custom3_rs1, MATCH_CUSTOM3_RS1, MASK_CUSTOM3_RS1)
+DECLARE_INSN(custom3_rs1_rs2, MATCH_CUSTOM3_RS1_RS2, MASK_CUSTOM3_RS1_RS2)
+DECLARE_INSN(custom3_rd, MATCH_CUSTOM3_RD, MASK_CUSTOM3_RD)
+DECLARE_INSN(custom3_rd_rs1, MATCH_CUSTOM3_RD_RS1, MASK_CUSTOM3_RD_RS1)
+DECLARE_INSN(custom3_rd_rs1_rs2, MATCH_CUSTOM3_RD_RS1_RS2, MASK_CUSTOM3_RD_RS1_RS2)
+#endif
+#ifdef DECLARE_CSR
+DECLARE_CSR(fflags, CSR_FFLAGS)
+DECLARE_CSR(frm, CSR_FRM)
+DECLARE_CSR(fcsr, CSR_FCSR)
+DECLARE_CSR(cycle, CSR_CYCLE)
+DECLARE_CSR(time, CSR_TIME)
+DECLARE_CSR(instret, CSR_INSTRET)
+DECLARE_CSR(hpmcounter3, CSR_HPMCOUNTER3)
+DECLARE_CSR(hpmcounter4, CSR_HPMCOUNTER4)
+DECLARE_CSR(hpmcounter5, CSR_HPMCOUNTER5)
+DECLARE_CSR(hpmcounter6, CSR_HPMCOUNTER6)
+DECLARE_CSR(hpmcounter7, CSR_HPMCOUNTER7)
+DECLARE_CSR(hpmcounter8, CSR_HPMCOUNTER8)
+DECLARE_CSR(hpmcounter9, CSR_HPMCOUNTER9)
+DECLARE_CSR(hpmcounter10, CSR_HPMCOUNTER10)
+DECLARE_CSR(hpmcounter11, CSR_HPMCOUNTER11)
+DECLARE_CSR(hpmcounter12, CSR_HPMCOUNTER12)
+DECLARE_CSR(hpmcounter13, CSR_HPMCOUNTER13)
+DECLARE_CSR(hpmcounter14, CSR_HPMCOUNTER14)
+DECLARE_CSR(hpmcounter15, CSR_HPMCOUNTER15)
+DECLARE_CSR(hpmcounter16, CSR_HPMCOUNTER16)
+DECLARE_CSR(hpmcounter17, CSR_HPMCOUNTER17)
+DECLARE_CSR(hpmcounter18, CSR_HPMCOUNTER18)
+DECLARE_CSR(hpmcounter19, CSR_HPMCOUNTER19)
+DECLARE_CSR(hpmcounter20, CSR_HPMCOUNTER20)
+DECLARE_CSR(hpmcounter21, CSR_HPMCOUNTER21)
+DECLARE_CSR(hpmcounter22, CSR_HPMCOUNTER22)
+DECLARE_CSR(hpmcounter23, CSR_HPMCOUNTER23)
+DECLARE_CSR(hpmcounter24, CSR_HPMCOUNTER24)
+DECLARE_CSR(hpmcounter25, CSR_HPMCOUNTER25)
+DECLARE_CSR(hpmcounter26, CSR_HPMCOUNTER26)
+DECLARE_CSR(hpmcounter27, CSR_HPMCOUNTER27)
+DECLARE_CSR(hpmcounter28, CSR_HPMCOUNTER28)
+DECLARE_CSR(hpmcounter29, CSR_HPMCOUNTER29)
+DECLARE_CSR(hpmcounter30, CSR_HPMCOUNTER30)
+DECLARE_CSR(hpmcounter31, CSR_HPMCOUNTER31)
+DECLARE_CSR(sstatus, CSR_SSTATUS)
+DECLARE_CSR(sie, CSR_SIE)
+DECLARE_CSR(stvec, CSR_STVEC)
+DECLARE_CSR(scounteren, CSR_SCOUNTEREN)
+DECLARE_CSR(sscratch, CSR_SSCRATCH)
+DECLARE_CSR(sepc, CSR_SEPC)
+DECLARE_CSR(scause, CSR_SCAUSE)
+DECLARE_CSR(stval, CSR_STVAL)
+DECLARE_CSR(sip, CSR_SIP)
+DECLARE_CSR(satp, CSR_SATP)
+DECLARE_CSR(mstatus, CSR_MSTATUS)
+DECLARE_CSR(misa, CSR_MISA)
+DECLARE_CSR(medeleg, CSR_MEDELEG)
+DECLARE_CSR(mideleg, CSR_MIDELEG)
+DECLARE_CSR(mie, CSR_MIE)
+DECLARE_CSR(mtvec, CSR_MTVEC)
+DECLARE_CSR(mcounteren, CSR_MCOUNTEREN)
+DECLARE_CSR(mscratch, CSR_MSCRATCH)
+DECLARE_CSR(mepc, CSR_MEPC)
+DECLARE_CSR(mcause, CSR_MCAUSE)
+DECLARE_CSR(mtval, CSR_MTVAL)
+DECLARE_CSR(mip, CSR_MIP)
+DECLARE_CSR(pmpcfg0, CSR_PMPCFG0)
+DECLARE_CSR(pmpcfg1, CSR_PMPCFG1)
+DECLARE_CSR(pmpcfg2, CSR_PMPCFG2)
+DECLARE_CSR(pmpcfg3, CSR_PMPCFG3)
+DECLARE_CSR(pmpaddr0, CSR_PMPADDR0)
+DECLARE_CSR(pmpaddr1, CSR_PMPADDR1)
+DECLARE_CSR(pmpaddr2, CSR_PMPADDR2)
+DECLARE_CSR(pmpaddr3, CSR_PMPADDR3)
+DECLARE_CSR(pmpaddr4, CSR_PMPADDR4)
+DECLARE_CSR(pmpaddr5, CSR_PMPADDR5)
+DECLARE_CSR(pmpaddr6, CSR_PMPADDR6)
+DECLARE_CSR(pmpaddr7, CSR_PMPADDR7)
+DECLARE_CSR(pmpaddr8, CSR_PMPADDR8)
+DECLARE_CSR(pmpaddr9, CSR_PMPADDR9)
+DECLARE_CSR(pmpaddr10, CSR_PMPADDR10)
+DECLARE_CSR(pmpaddr11, CSR_PMPADDR11)
+DECLARE_CSR(pmpaddr12, CSR_PMPADDR12)
+DECLARE_CSR(pmpaddr13, CSR_PMPADDR13)
+DECLARE_CSR(pmpaddr14, CSR_PMPADDR14)
+DECLARE_CSR(pmpaddr15, CSR_PMPADDR15)
+DECLARE_CSR(tselect, CSR_TSELECT)
+DECLARE_CSR(tdata1, CSR_TDATA1)
+DECLARE_CSR(tdata2, CSR_TDATA2)
+DECLARE_CSR(tdata3, CSR_TDATA3)
+DECLARE_CSR(dcsr, CSR_DCSR)
+DECLARE_CSR(dpc, CSR_DPC)
+DECLARE_CSR(dscratch, CSR_DSCRATCH)
+DECLARE_CSR(mcycle, CSR_MCYCLE)
+DECLARE_CSR(minstret, CSR_MINSTRET)
+DECLARE_CSR(mhpmcounter3, CSR_MHPMCOUNTER3)
+DECLARE_CSR(mhpmcounter4, CSR_MHPMCOUNTER4)
+DECLARE_CSR(mhpmcounter5, CSR_MHPMCOUNTER5)
+DECLARE_CSR(mhpmcounter6, CSR_MHPMCOUNTER6)
+DECLARE_CSR(mhpmcounter7, CSR_MHPMCOUNTER7)
+DECLARE_CSR(mhpmcounter8, CSR_MHPMCOUNTER8)
+DECLARE_CSR(mhpmcounter9, CSR_MHPMCOUNTER9)
+DECLARE_CSR(mhpmcounter10, CSR_MHPMCOUNTER10)
+DECLARE_CSR(mhpmcounter11, CSR_MHPMCOUNTER11)
+DECLARE_CSR(mhpmcounter12, CSR_MHPMCOUNTER12)
+DECLARE_CSR(mhpmcounter13, CSR_MHPMCOUNTER13)
+DECLARE_CSR(mhpmcounter14, CSR_MHPMCOUNTER14)
+DECLARE_CSR(mhpmcounter15, CSR_MHPMCOUNTER15)
+DECLARE_CSR(mhpmcounter16, CSR_MHPMCOUNTER16)
+DECLARE_CSR(mhpmcounter17, CSR_MHPMCOUNTER17)
+DECLARE_CSR(mhpmcounter18, CSR_MHPMCOUNTER18)
+DECLARE_CSR(mhpmcounter19, CSR_MHPMCOUNTER19)
+DECLARE_CSR(mhpmcounter20, CSR_MHPMCOUNTER20)
+DECLARE_CSR(mhpmcounter21, CSR_MHPMCOUNTER21)
+DECLARE_CSR(mhpmcounter22, CSR_MHPMCOUNTER22)
+DECLARE_CSR(mhpmcounter23, CSR_MHPMCOUNTER23)
+DECLARE_CSR(mhpmcounter24, CSR_MHPMCOUNTER24)
+DECLARE_CSR(mhpmcounter25, CSR_MHPMCOUNTER25)
+DECLARE_CSR(mhpmcounter26, CSR_MHPMCOUNTER26)
+DECLARE_CSR(mhpmcounter27, CSR_MHPMCOUNTER27)
+DECLARE_CSR(mhpmcounter28, CSR_MHPMCOUNTER28)
+DECLARE_CSR(mhpmcounter29, CSR_MHPMCOUNTER29)
+DECLARE_CSR(mhpmcounter30, CSR_MHPMCOUNTER30)
+DECLARE_CSR(mhpmcounter31, CSR_MHPMCOUNTER31)
+DECLARE_CSR(mhpmevent3, CSR_MHPMEVENT3)
+DECLARE_CSR(mhpmevent4, CSR_MHPMEVENT4)
+DECLARE_CSR(mhpmevent5, CSR_MHPMEVENT5)
+DECLARE_CSR(mhpmevent6, CSR_MHPMEVENT6)
+DECLARE_CSR(mhpmevent7, CSR_MHPMEVENT7)
+DECLARE_CSR(mhpmevent8, CSR_MHPMEVENT8)
+DECLARE_CSR(mhpmevent9, CSR_MHPMEVENT9)
+DECLARE_CSR(mhpmevent10, CSR_MHPMEVENT10)
+DECLARE_CSR(mhpmevent11, CSR_MHPMEVENT11)
+DECLARE_CSR(mhpmevent12, CSR_MHPMEVENT12)
+DECLARE_CSR(mhpmevent13, CSR_MHPMEVENT13)
+DECLARE_CSR(mhpmevent14, CSR_MHPMEVENT14)
+DECLARE_CSR(mhpmevent15, CSR_MHPMEVENT15)
+DECLARE_CSR(mhpmevent16, CSR_MHPMEVENT16)
+DECLARE_CSR(mhpmevent17, CSR_MHPMEVENT17)
+DECLARE_CSR(mhpmevent18, CSR_MHPMEVENT18)
+DECLARE_CSR(mhpmevent19, CSR_MHPMEVENT19)
+DECLARE_CSR(mhpmevent20, CSR_MHPMEVENT20)
+DECLARE_CSR(mhpmevent21, CSR_MHPMEVENT21)
+DECLARE_CSR(mhpmevent22, CSR_MHPMEVENT22)
+DECLARE_CSR(mhpmevent23, CSR_MHPMEVENT23)
+DECLARE_CSR(mhpmevent24, CSR_MHPMEVENT24)
+DECLARE_CSR(mhpmevent25, CSR_MHPMEVENT25)
+DECLARE_CSR(mhpmevent26, CSR_MHPMEVENT26)
+DECLARE_CSR(mhpmevent27, CSR_MHPMEVENT27)
+DECLARE_CSR(mhpmevent28, CSR_MHPMEVENT28)
+DECLARE_CSR(mhpmevent29, CSR_MHPMEVENT29)
+DECLARE_CSR(mhpmevent30, CSR_MHPMEVENT30)
+DECLARE_CSR(mhpmevent31, CSR_MHPMEVENT31)
+DECLARE_CSR(mvendorid, CSR_MVENDORID)
+DECLARE_CSR(marchid, CSR_MARCHID)
+DECLARE_CSR(mimpid, CSR_MIMPID)
+DECLARE_CSR(mhartid, CSR_MHARTID)
+DECLARE_CSR(cycleh, CSR_CYCLEH)
+DECLARE_CSR(timeh, CSR_TIMEH)
+DECLARE_CSR(instreth, CSR_INSTRETH)
+DECLARE_CSR(hpmcounter3h, CSR_HPMCOUNTER3H)
+DECLARE_CSR(hpmcounter4h, CSR_HPMCOUNTER4H)
+DECLARE_CSR(hpmcounter5h, CSR_HPMCOUNTER5H)
+DECLARE_CSR(hpmcounter6h, CSR_HPMCOUNTER6H)
+DECLARE_CSR(hpmcounter7h, CSR_HPMCOUNTER7H)
+DECLARE_CSR(hpmcounter8h, CSR_HPMCOUNTER8H)
+DECLARE_CSR(hpmcounter9h, CSR_HPMCOUNTER9H)
+DECLARE_CSR(hpmcounter10h, CSR_HPMCOUNTER10H)
+DECLARE_CSR(hpmcounter11h, CSR_HPMCOUNTER11H)
+DECLARE_CSR(hpmcounter12h, CSR_HPMCOUNTER12H)
+DECLARE_CSR(hpmcounter13h, CSR_HPMCOUNTER13H)
+DECLARE_CSR(hpmcounter14h, CSR_HPMCOUNTER14H)
+DECLARE_CSR(hpmcounter15h, CSR_HPMCOUNTER15H)
+DECLARE_CSR(hpmcounter16h, CSR_HPMCOUNTER16H)
+DECLARE_CSR(hpmcounter17h, CSR_HPMCOUNTER17H)
+DECLARE_CSR(hpmcounter18h, CSR_HPMCOUNTER18H)
+DECLARE_CSR(hpmcounter19h, CSR_HPMCOUNTER19H)
+DECLARE_CSR(hpmcounter20h, CSR_HPMCOUNTER20H)
+DECLARE_CSR(hpmcounter21h, CSR_HPMCOUNTER21H)
+DECLARE_CSR(hpmcounter22h, CSR_HPMCOUNTER22H)
+DECLARE_CSR(hpmcounter23h, CSR_HPMCOUNTER23H)
+DECLARE_CSR(hpmcounter24h, CSR_HPMCOUNTER24H)
+DECLARE_CSR(hpmcounter25h, CSR_HPMCOUNTER25H)
+DECLARE_CSR(hpmcounter26h, CSR_HPMCOUNTER26H)
+DECLARE_CSR(hpmcounter27h, CSR_HPMCOUNTER27H)
+DECLARE_CSR(hpmcounter28h, CSR_HPMCOUNTER28H)
+DECLARE_CSR(hpmcounter29h, CSR_HPMCOUNTER29H)
+DECLARE_CSR(hpmcounter30h, CSR_HPMCOUNTER30H)
+DECLARE_CSR(hpmcounter31h, CSR_HPMCOUNTER31H)
+DECLARE_CSR(mcycleh, CSR_MCYCLEH)
+DECLARE_CSR(minstreth, CSR_MINSTRETH)
+DECLARE_CSR(mhpmcounter3h, CSR_MHPMCOUNTER3H)
+DECLARE_CSR(mhpmcounter4h, CSR_MHPMCOUNTER4H)
+DECLARE_CSR(mhpmcounter5h, CSR_MHPMCOUNTER5H)
+DECLARE_CSR(mhpmcounter6h, CSR_MHPMCOUNTER6H)
+DECLARE_CSR(mhpmcounter7h, CSR_MHPMCOUNTER7H)
+DECLARE_CSR(mhpmcounter8h, CSR_MHPMCOUNTER8H)
+DECLARE_CSR(mhpmcounter9h, CSR_MHPMCOUNTER9H)
+DECLARE_CSR(mhpmcounter10h, CSR_MHPMCOUNTER10H)
+DECLARE_CSR(mhpmcounter11h, CSR_MHPMCOUNTER11H)
+DECLARE_CSR(mhpmcounter12h, CSR_MHPMCOUNTER12H)
+DECLARE_CSR(mhpmcounter13h, CSR_MHPMCOUNTER13H)
+DECLARE_CSR(mhpmcounter14h, CSR_MHPMCOUNTER14H)
+DECLARE_CSR(mhpmcounter15h, CSR_MHPMCOUNTER15H)
+DECLARE_CSR(mhpmcounter16h, CSR_MHPMCOUNTER16H)
+DECLARE_CSR(mhpmcounter17h, CSR_MHPMCOUNTER17H)
+DECLARE_CSR(mhpmcounter18h, CSR_MHPMCOUNTER18H)
+DECLARE_CSR(mhpmcounter19h, CSR_MHPMCOUNTER19H)
+DECLARE_CSR(mhpmcounter20h, CSR_MHPMCOUNTER20H)
+DECLARE_CSR(mhpmcounter21h, CSR_MHPMCOUNTER21H)
+DECLARE_CSR(mhpmcounter22h, CSR_MHPMCOUNTER22H)
+DECLARE_CSR(mhpmcounter23h, CSR_MHPMCOUNTER23H)
+DECLARE_CSR(mhpmcounter24h, CSR_MHPMCOUNTER24H)
+DECLARE_CSR(mhpmcounter25h, CSR_MHPMCOUNTER25H)
+DECLARE_CSR(mhpmcounter26h, CSR_MHPMCOUNTER26H)
+DECLARE_CSR(mhpmcounter27h, CSR_MHPMCOUNTER27H)
+DECLARE_CSR(mhpmcounter28h, CSR_MHPMCOUNTER28H)
+DECLARE_CSR(mhpmcounter29h, CSR_MHPMCOUNTER29H)
+DECLARE_CSR(mhpmcounter30h, CSR_MHPMCOUNTER30H)
+DECLARE_CSR(mhpmcounter31h, CSR_MHPMCOUNTER31H)
+#endif
+#ifdef DECLARE_CAUSE
+DECLARE_CAUSE("misaligned fetch", CAUSE_MISALIGNED_FETCH)
+DECLARE_CAUSE("fetch access", CAUSE_FETCH_ACCESS)
+DECLARE_CAUSE("illegal instruction", CAUSE_ILLEGAL_INSTRUCTION)
+DECLARE_CAUSE("breakpoint", CAUSE_BREAKPOINT)
+DECLARE_CAUSE("misaligned load", CAUSE_MISALIGNED_LOAD)
+DECLARE_CAUSE("load access", CAUSE_LOAD_ACCESS)
+DECLARE_CAUSE("misaligned store", CAUSE_MISALIGNED_STORE)
+DECLARE_CAUSE("store access", CAUSE_STORE_ACCESS)
+DECLARE_CAUSE("user_ecall", CAUSE_USER_ECALL)
+DECLARE_CAUSE("supervisor_ecall", CAUSE_SUPERVISOR_ECALL)
+DECLARE_CAUSE("hypervisor_ecall", CAUSE_HYPERVISOR_ECALL)
+DECLARE_CAUSE("machine_ecall", CAUSE_MACHINE_ECALL)
+DECLARE_CAUSE("fetch page fault", CAUSE_FETCH_PAGE_FAULT)
+DECLARE_CAUSE("load page fault", CAUSE_LOAD_PAGE_FAULT)
+DECLARE_CAUSE("store page fault", CAUSE_STORE_PAGE_FAULT)
+#endif
diff --git a/VexRiscv/src/test/cpp/regression/fail.gtkw b/VexRiscv/src/test/cpp/regression/fail.gtkw
new file mode 100644
index 0000000..d0fff46
--- /dev/null
+++ b/VexRiscv/src/test/cpp/regression/fail.gtkw
@@ -0,0 +1,29 @@
+[*]
+[*] GTKWave Analyzer v3.3.100 (w)1999-2019 BSI
+[*] Thu Apr 25 14:41:35 2019
+[*]
+[dumpfile] "/home/miaou/pro/VexRiscv/src/test/cpp/regression/C.SLLI.vcd"
+[dumpfile_mtime] "Thu Apr 25 14:39:03 2019"
+[dumpfile_size] 295925
+[savefile] "/home/miaou/pro/VexRiscv/src/test/cpp/regression/fail.gtkw"
+[timestart] 0
+[size] 1920 1030
+[pos] -458 -215
+*-2.000000 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
+[treeopen] TOP.
+[sst_width] 196
+[signals_width] 366
+[sst_expanded] 1
+[sst_vpaned_height] 299
+@28
+TOP.VexRiscv.lastStageIsValid
+TOP.VexRiscv.lastStageIsFiring
+@22
+TOP.VexRiscv.lastStageInstruction[31:0]
+TOP.VexRiscv.lastStagePc[31:0]
+TOP.VexRiscv.lastStageRegFileWrite_payload_address[4:0]
+TOP.VexRiscv.lastStageRegFileWrite_payload_data[31:0]
+@28
+TOP.VexRiscv.lastStageRegFileWrite_valid
+[pattern_trace] 1
+[pattern_trace] 0
diff --git a/VexRiscv/src/test/cpp/regression/icache.gtkw b/VexRiscv/src/test/cpp/regression/icache.gtkw
new file mode 100644
index 0000000..5a7020f
--- /dev/null
+++ b/VexRiscv/src/test/cpp/regression/icache.gtkw
@@ -0,0 +1,67 @@
+[*]
+[*] GTKWave Analyzer v3.3.86 (w)1999-2017 BSI
+[*] Wed Apr 11 18:53:23 2018
+[*]
+[dumpfile] "/home/spinalvm/hdl/VexRiscv/src/test/cpp/regression/rv32ui-p-lui.vcd"
+[dumpfile_mtime] "Wed Apr 11 18:52:18 2018"
+[dumpfile_size] 325049
+[savefile] "/home/spinalvm/hdl/VexRiscv/src/test/cpp/regression/icache.gtkw"
+[timestart] 1006
+[size] 1784 950
+[pos] -383 -155
+*-5.000000 1046 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
+[treeopen] TOP.
+[treeopen] TOP.VexRiscv.
+[sst_width] 370
+[signals_width] 349
+[sst_expanded] 1
+[sst_vpaned_height] 271
+@28
+TOP.VexRiscv.decode_arbitration_isValid
+TOP.VexRiscv.decode_arbitration_redoIt
+TOP.VexRiscv.IBusCachedPlugin_cache.io_cpu_prefetch_haltIt
+@22
+TOP.VexRiscv.iBus_cmd_payload_address[31:0]
+@28
+TOP.VexRiscv.iBus_cmd_payload_size[2:0]
+TOP.VexRiscv.iBus_cmd_ready
+@29
+TOP.VexRiscv.iBus_cmd_valid
+@22
+TOP.VexRiscv.iBus_rsp_payload_data[31:0]
+@28
+TOP.VexRiscv.iBus_rsp_payload_error
+TOP.VexRiscv.iBus_rsp_valid
+[color] 2
+TOP.VexRiscv.IBusCachedPlugin_cache.io_cpu_prefetch_isValid
+[color] 2
+TOP.VexRiscv.IBusCachedPlugin_cache.io_cpu_prefetch_haltIt
+@22
+[color] 2
+TOP.VexRiscv.IBusCachedPlugin_cache.io_cpu_prefetch_pc[31:0]
+@28
+TOP.VexRiscv.IBusCachedPlugin_cache.io_cpu_fetch_isValid
+TOP.VexRiscv.IBusCachedPlugin_cache.io_cpu_fetch_isStuck
+@22
+TOP.VexRiscv.IBusCachedPlugin_cache.io_cpu_fetch_data[31:0]
+TOP.VexRiscv.IBusCachedPlugin_cache.io_cpu_fetch_pc[31:0]
+@28
+[color] 6
+TOP.VexRiscv.IBusCachedPlugin_cache.io_cpu_decode_isValid
+[color] 6
+TOP.VexRiscv.IBusCachedPlugin_cache.io_cpu_decode_cacheMiss
+[color] 6
+TOP.VexRiscv.IBusCachedPlugin_cache.io_cpu_decode_error
+[color] 6
+TOP.VexRiscv.IBusCachedPlugin_cache.io_cpu_decode_illegalAccess
+[color] 6
+TOP.VexRiscv.IBusCachedPlugin_cache.io_cpu_decode_isStuck
+[color] 6
+TOP.VexRiscv.IBusCachedPlugin_cache.io_cpu_decode_isUser
+[color] 6
+TOP.VexRiscv.IBusCachedPlugin_cache.io_cpu_decode_mmuMiss
+@22
+[color] 6
+TOP.VexRiscv.IBusCachedPlugin_cache.io_cpu_decode_pc[31:0]
+[pattern_trace] 1
+[pattern_trace] 0
diff --git a/VexRiscv/src/test/cpp/regression/main.cpp b/VexRiscv/src/test/cpp/regression/main.cpp
new file mode 100644
index 0000000..3d61c9a
--- /dev/null
+++ b/VexRiscv/src/test/cpp/regression/main.cpp
@@ -0,0 +1,4514 @@
+#include "VVexRiscv.h"
+#include "VVexRiscv_VexRiscv.h"
+#ifdef REF
+#include "VVexRiscv_RiscvCore.h"
+#endif
+#include "verilated.h"
+#include "verilated_fst_c.h"
+#include <stdio.h>
+#include <iostream>
+#include <stdlib.h>
+#include <stdint.h>
+#include <cstring>
+#include <string.h>
+#include <iostream>
+#include <fstream>
+#include <vector>
+#include <mutex>
+#include <iomanip>
+#include <queue>
+#include <time.h>
+#include "encoding.h"
+
+#define VL_RANDOM_I_WIDTH(w) (VL_RANDOM_I() & (1l << w)-1l)
+
+using namespace std;
+
+struct timespec timer_get(){
+ struct timespec start_time;
+ clock_gettime(CLOCK_PROCESS_CPUTIME_ID, &start_time);
+ return start_time;
+}
+
+class Memory{
+public:
+ uint8_t* mem[1 << 12];
+
+ Memory(){
+ for(uint32_t i = 0;i < (1 << 12);i++) mem[i] = NULL;
+ }
+ ~Memory(){
+ for(uint32_t i = 0;i < (1 << 12);i++) if(mem[i]) delete [] mem[i];
+ }
+
+ uint8_t* get(uint32_t address){
+ if(mem[address >> 20] == NULL) {
+ uint8_t* ptr = new uint8_t[1024*1024];
+ for(uint32_t i = 0;i < 1024*1024;i+=4) {
+ ptr[i + 0] = 0xFF;
+ ptr[i + 1] = 0xFF;
+ ptr[i + 2] = 0xFF;
+ ptr[i + 3] = 0xFF;
+ }
+ mem[address >> 20] = ptr;
+ }
+ return &mem[address >> 20][address & 0xFFFFF];
+ }
+
+ void read(uint32_t address,uint32_t length, uint8_t *data){
+ for(int i = 0;i < length;i++){
+ data[i] = (*this)[address + i];
+ }
+ }
+
+ void write(uint32_t address,uint32_t length, uint8_t *data){
+ for(int i = 0;i < length;i++){
+ (*this)[address + i] = data[i];
+ }
+ }
+
+ uint8_t& operator [](uint32_t address) {
+ return *get(address);
+ }
+
+ /*T operator [](uint32_t address) const {
+ return get(address);
+ }*/
+};
+
+//uint8_t memory[1024 * 1024];
+
+uint32_t hti(char c) {
+ if (c >= 'A' && c <= 'F')
+ return c - 'A' + 10;
+ if (c >= 'a' && c <= 'f')
+ return c - 'a' + 10;
+ return c - '0';
+}
+
+uint32_t hToI(char *c, uint32_t size) {
+ uint32_t value = 0;
+ for (uint32_t i = 0; i < size; i++) {
+ value += hti(c[i]) << ((size - i - 1) * 4);
+ }
+ return value;
+}
+
+void loadHexImpl(string path,Memory* mem) {
+ FILE *fp = fopen(&path[0], "r");
+ if(fp == 0){
+ cout << path << " not found" << endl;
+ }
+ //Preload 0x0 <-> 0x80000000 jumps
+ ((uint32_t*)mem->get(0))[0] = 0x800000b7;
+ ((uint32_t*)mem->get(0))[1] = 0x000080e7;
+ ((uint32_t*)mem->get(0x80000000))[0] = 0x00000097;
+
+ fseek(fp, 0, SEEK_END);
+ uint32_t size = ftell(fp);
+ fseek(fp, 0, SEEK_SET);
+ char* content = new char[size];
+ fread(content, 1, size, fp);
+ fclose(fp);
+
+ int offset = 0;
+ char* line = content;
+ while (1) {
+ if (line[0] == ':') {
+ uint32_t byteCount = hToI(line + 1, 2);
+ uint32_t nextAddr = hToI(line + 3, 4) + offset;
+ uint32_t key = hToI(line + 7, 2);
+// printf("%d %d %d\n", byteCount, nextAddr,key);
+ switch (key) {
+ case 0:
+ for (uint32_t i = 0; i < byteCount; i++) {
+ *(mem->get(nextAddr + i)) = hToI(line + 9 + i * 2, 2);
+ //printf("%x %x %c%c\n",nextAddr + i,hToI(line + 9 + i*2,2),line[9 + i * 2],line[9 + i * 2+1]);
+ }
+ break;
+ case 2:
+// cout << offset << endl;
+ offset = hToI(line + 9, 4) << 4;
+ break;
+ case 4:
+// cout << offset << endl;
+ offset = hToI(line + 9, 4) << 16;
+ break;
+ default:
+// cout << "??? " << key << endl;
+ break;
+ }
+ }
+
+ while (*line != '\n' && size != 0) {
+ line++;
+ size--;
+ }
+ if (size <= 1)
+ break;
+ line++;
+ size--;
+ }
+
+ delete [] content;
+}
+
+void loadBinImpl(string path,Memory* mem, uint32_t offset) {
+ FILE *fp = fopen(&path[0], "r");
+ if(fp == 0){
+ cout << path << " not found" << endl;
+ }
+
+ fseek(fp, 0, SEEK_END);
+ uint32_t size = ftell(fp);
+ fseek(fp, 0, SEEK_SET);
+ char* content = new char[size];
+ fread(content, 1, size, fp);
+ fclose(fp);
+
+ for(int byteId = 0; byteId < size;byteId++){
+ *(mem->get(offset + byteId)) = content[byteId];
+ }
+
+ delete [] content;
+}
+
+
+
+#define TEXTIFY(A) #A
+
+void breakMe(){
+ int a = 0;
+}
+#define assertEq(x,ref) if(x != ref) {\
+ printf("\n*** %s is %d but should be %d ***\n\n",TEXTIFY(x),x,ref);\
+ breakMe();\
+ throw std::exception();\
+}
+
+class success : public std::exception { };
+
+
+
+
+#define MVENDORID 0xF11 // MRO Vendor ID.
+#define MARCHID 0xF12 // MRO Architecture ID.
+#define MIMPID 0xF13 // MRO Implementation ID.
+#define MHARTID 0xF14 // MRO Hardware thread ID.Machine Trap Setup
+#define MSTATUS 0x300 // MRW Machine status register.
+#define MISA 0x301 // MRW ISA and extensions
+#define MEDELEG 0x302 // MRW Machine exception delegation register.
+#define MIDELEG 0x303 // MRW Machine interrupt delegation register.
+#define MIE 0x304 // MRW Machine interrupt-enable register.
+#define MTVEC 0x305 // MRW Machine trap-handler base address. Machine Trap Handling
+#define MSCRATCH 0x340 // MRW Scratch register for machine trap handlers.
+#define MEPC 0x341 // MRW Machine exception program counter.
+#define MCAUSE 0x342 // MRW Machine trap cause.
+#define MBADADDR 0x343 // MRW Machine bad address.
+#define MIP 0x344 // MRW Machine interrupt pending.
+#define MBASE 0x380 // MRW Base register.
+#define MBOUND 0x381 // MRW Bound register.
+#define MIBASE 0x382 // MRW Instruction base register.
+#define MIBOUND 0x383 // MRW Instruction bound register.
+#define MDBASE 0x384 // MRW Data base register.
+#define MDBOUND 0x385 // MRW Data bound register.
+#define MCYCLE 0xB00 // MRW Machine cycle counter.
+#define MINSTRET 0xB02 // MRW Machine instructions-retired counter.
+#define MCYCLEH 0xB80 // MRW Upper 32 bits of mcycle, RV32I only.
+#define MINSTRETH 0xB82 // MRW Upper 32 bits of minstret, RV32I only.
+
+
+#define SSTATUS 0x100
+#define SIE 0x104
+#define STVEC 0x105
+#define SCOUNTEREN 0x106
+#define SSCRATCH 0x140
+#define SEPC 0x141
+#define SCAUSE 0x142
+#define STVAL 0x143
+#define SIP 0x144
+#define SATP 0x180
+
+#define UTIME 0xC01 // rdtime
+#define UTIMEH 0xC81
+
+#define SSTATUS_SIE 0x00000002
+#define SSTATUS_SPIE 0x00000020
+#define SSTATUS_SPP 0x00000100
+
+#ifdef SUPERVISOR
+#define MSTATUS_READ_MASK 0xFFFFFFFF
+#else
+#define MSTATUS_READ_MASK 0x7888
+#endif
+
+#ifdef RVF
+#define STATUS_FS_MASK 0x6000
+#else
+#define STATUS_FS_MASK 0x0000
+#endif
+
+#define FFLAGS 0x1
+#define FRM 0x2
+#define FCSR 0x3
+
+#define u32 uint32_t
+#define u64 uint64_t
+
+class FpuRsp{
+public:
+ u32 flags;
+ u64 value;
+};
+
+class FpuCommit{
+public:
+ u64 value;
+};
+
+class FpuCompletion{
+public:
+ u32 flags;
+};
+
+
+bool fpuCommitLut[32] = {true,true,true,true,true,true,false,false,true,false,false,true,false,false,false,false,false,false,false,false,false,false,false,false,false,false,true,false,false,false,true,false};
+bool fpuRspLut[32] = {false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,true,false,false,false,true,false,false,false,true,false,false,false};
+bool fpuRs1Lut[32] = {false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,true,false,false,false,true,false};
+class RiscvGolden {
+public:
+ int32_t pc, lastPc;
+ uint32_t lastInstruction;
+ int32_t regs[32];
+ uint64_t stepCounter;
+
+ uint32_t mscratch, sscratch;
+ uint32_t misa;
+ uint32_t privilege;
+
+ uint32_t medeleg;
+ uint32_t mideleg;
+
+ queue<FpuRsp> fpuRsp;
+ queue<FpuCommit> fpuCommit;
+ queue<FpuCompletion> fpuCompletion;
+
+ union status {
+ uint32_t raw;
+ struct {
+ uint32_t _1a : 1;
+ uint32_t sie : 1;
+ uint32_t _1b : 1;
+ uint32_t mie : 1;
+ uint32_t _2a : 1;
+ uint32_t spie : 1;
+ uint32_t _2b : 1;
+ uint32_t mpie : 1;
+ uint32_t spp : 1;
+ uint32_t _3 : 2;
+ uint32_t mpp : 2;
+ uint32_t fs : 2;
+ uint32_t _4 : 2;
+ uint32_t mprv : 1;
+ uint32_t sum : 1;
+ uint32_t mxr : 1;
+ };
+ }__attribute__((packed)) status;
+
+
+
+ uint32_t ipInput;
+ uint32_t ipSoft;
+ union IpOr {
+ uint32_t raw;
+ struct {
+ uint32_t _1a : 1;
+ uint32_t ssip : 1;
+ uint32_t _1b : 1;
+ uint32_t msip : 1;
+ uint32_t _2a : 1;
+ uint32_t stip : 1;
+ uint32_t _2b : 1;
+ uint32_t mtip : 1;
+ uint32_t _3a : 1;
+ uint32_t seip : 1;
+ uint32_t _3b : 1;
+ uint32_t meip : 1;
+ };
+ }__attribute__((packed));
+
+ IpOr getIp(){
+ IpOr ret;
+ ret.raw = ipSoft | ipInput;
+ return ret;
+ }
+
+ union mie {
+ uint32_t raw;
+ struct {
+ uint32_t _1a : 1;
+ uint32_t ssie : 1;
+ uint32_t _1b : 1;
+ uint32_t msie : 1;
+ uint32_t _2a : 1;
+ uint32_t stie : 1;
+ uint32_t _2b : 1;
+ uint32_t mtie : 1;
+ uint32_t _3a : 1;
+ uint32_t seie : 1;
+ uint32_t _3b : 1;
+ uint32_t meie : 1;
+ };
+ }__attribute__((packed)) ie;
+
+ union Xtvec {
+ uint32_t raw;
+ struct __attribute__((packed)) {
+ uint32_t _1 : 2;
+ uint32_t base : 30;
+ };
+ };
+
+ Xtvec mtvec, stvec;
+
+
+
+ union mcause {
+ uint32_t raw;
+ struct __attribute__((packed)) {
+ uint32_t exceptionCode : 31;
+ uint32_t interrupt : 1;
+ };
+ } mcause;
+
+
+ union scause {
+ uint32_t raw;
+ struct __attribute__((packed)){
+ uint32_t exceptionCode : 31;
+ uint32_t interrupt : 1;
+ };
+ } scause;
+
+ union satp {
+ uint32_t raw;
+ struct __attribute__((packed)){
+ uint32_t ppn : 22;
+ uint32_t _x : 9;
+ uint32_t mode : 1;
+ };
+ }satp;
+
+ union Tlb {
+ uint32_t raw;
+ struct __attribute__((packed)){
+ uint32_t v : 1;
+ uint32_t r : 1;
+ uint32_t w : 1;
+ uint32_t x : 1;
+ uint32_t u : 1;
+ uint32_t _dummy : 5;
+ uint32_t ppn : 22;
+ };
+ struct __attribute__((packed)){
+ uint32_t _dummyX : 10;
+ uint32_t ppn0 : 10;
+ uint32_t ppn1 : 12;
+ };
+ };
+
+ union fcsr {
+ uint32_t raw;
+ struct __attribute__((packed)){
+ uint32_t flags : 5;
+ uint32_t frm : 3;
+ };
+ }fcsr;
+
+
+ bool lrscReserved;
+ uint32_t lrscReservedAddress;
+ u32 fpuCompletionTockens;
+ u32 dutRfWriteValue;
+
+ RiscvGolden() {
+ pc = 0x80000000;
+ regs[0] = 0;
+ for (int i = 0; i < 32; i++)
+ regs[i] = 0;
+
+ ie.raw = 0;
+ mtvec.raw = 0x80000020;
+ mcause.raw = 0;
+ mbadaddr = 0;
+ mepc = 0;
+ misa = 0x40041101; //TODO
+ status.raw = 0;
+ status.mpp = 3;
+ status.spp = 1;
+ #ifdef RVF
+ status.fs = 1;
+ misa |= 1 << 5;
+ #endif
+ #ifdef RVD
+ misa |= 1 << 3;
+ #endif
+ fcsr.flags = 0;
+ fcsr.frm = 0;
+ privilege = 3;
+ medeleg = 0;
+ mideleg = 0;
+ satp.mode = 0;
+ ipSoft = 0;
+ ipInput = 0;
+ stepCounter = 0;
+ sbadaddr = 42;
+ lrscReserved = false;
+ fpuCompletionTockens = 0;
+ }
+
+ virtual void rfWrite(int32_t address, int32_t data) {
+ if (address != 0)
+ regs[address] = data;
+ }
+
+ virtual void pcWrite(int32_t target) {
+ if(isPcAligned(target)){
+ lastPc = pc;
+ pc = target;
+ } else {
+ trap(0, 0, target);
+ }
+ }
+ uint32_t mbadaddr, sbadaddr;
+ uint32_t mepc, sepc;
+
+ virtual bool iRead(int32_t address, uint32_t *data) = 0;
+ virtual bool dRead(int32_t address, int32_t size, uint8_t *data) = 0;
+ virtual void dWrite(int32_t address, int32_t size, uint8_t *data) = 0;
+
+ enum AccessKind {READ,WRITE,EXECUTE,READ_WRITE};
+ virtual bool isMmuRegion(uint32_t v) = 0;
+ bool v2p(uint32_t v, uint32_t *p, AccessKind kind){
+ uint32_t effectivePrivilege = status.mprv && kind != EXECUTE ? status.mpp : privilege;
+ if(effectivePrivilege == 3 || satp.mode == 0 || !isMmuRegion(v)){
+ *p = v;
+ } else {
+ Tlb tlb;
+ dRead((satp.ppn << 12) | ((v >> 22) << 2), 4, (uint8_t*)&tlb.raw);
+ if(!tlb.v) return true;
+ bool superPage = true;
+ if(!tlb.x && !tlb.r && !tlb.w){
+ dRead((tlb.ppn << 12) | (((v >> 12) & 0x3FF) << 2), 4, (uint8_t*)&tlb.raw);
+ if(!tlb.v) return true;
+ superPage = false;
+ }
+ if(!tlb.u && effectivePrivilege == 0) return true;
+ if( tlb.u && effectivePrivilege == 1 && !status.sum) return true;
+ if(superPage && tlb.ppn0 != 0) return true;
+ if(kind == READ || kind == READ_WRITE) if(!tlb.r && !(status.mxr && tlb.x)) return true;
+ if(kind == WRITE || kind == READ_WRITE) if(!tlb.w) return true;
+ if(kind == EXECUTE) if(!tlb.x) return true;
+
+ *p = (tlb.ppn1 << 22) | (superPage ? v & 0x3FF000 : tlb.ppn0 << 12) | (v & 0xFFF);
+ }
+ return false;
+ }
+
+ void trap(bool interrupt,int32_t cause) {
+ trap(interrupt, cause, false, 0);
+ }
+ void trap(bool interrupt,int32_t cause, uint32_t value) {
+ trap(interrupt, cause, true, value);
+ }
+ void trap(bool interrupt,int32_t cause, bool valueWrite, uint32_t value) {
+#ifdef FLOW_INFO
+// cout << "TRAP " << (interrupt ? "interrupt" : "exception") << " cause=" << cause << " PC=0x" << hex << pc << " val=0x" << hex << value << dec << endl;
+// if(cause == 9){
+// cout << hex << " a7=0x" << regs[17] << " a0=0x" << regs[10] << " a1=0x" << regs[11] << " a2=0x" << regs[12] << dec << endl;
+// }
+#endif
+ //Check leguality of the interrupt
+ if(interrupt) {
+ bool hit = false;
+ for(int i = 0;i < 5;i++){
+ if(pendingInterrupts[i] == 1 << cause){
+ hit = true;
+ break;
+ }
+ }
+ if(!hit){
+ cout << "DUT had trigger an interrupts which wasn't by the REF" << endl;
+ fail();
+ }
+ }
+
+ uint32_t deleg = interrupt ? mideleg : medeleg;
+ uint32_t targetPrivilege = 3;
+ if(deleg & (1 << cause)) targetPrivilege = 1;
+ targetPrivilege = max(targetPrivilege, privilege);
+ Xtvec xtvec = targetPrivilege == 3 ? mtvec : stvec;
+
+
+
+ switch(targetPrivilege){
+ case 3:
+ if(valueWrite) mbadaddr = value;
+ mcause.interrupt = interrupt;
+ mcause.exceptionCode = cause;
+ status.mpie = status.mie;
+ status.mie = false;
+ status.mpp = privilege;
+ mepc = pc;
+ break;
+ case 1:
+ if(valueWrite) sbadaddr = value;
+ scause.interrupt = interrupt;
+ scause.exceptionCode = cause;
+ status.spie = status.sie;
+ status.sie = false;
+ status.spp = privilege;
+ sepc = pc;
+ break;
+ }
+
+ privilege = targetPrivilege;
+ pcWrite(xtvec.base << 2);
+ if(interrupt) livenessInterrupt = 0;
+
+// if(!interrupt) step(); //As VexRiscv instruction which trap do not reach writeback stage fire
+ }
+
+ uint32_t currentInstruction;
+ void ilegalInstruction(){
+ trap(0, 2, currentInstruction);
+ }
+
+ virtual void fail() {
+ }
+
+
+
+ virtual bool csrRead(int32_t csr, uint32_t *value){
+ if(((csr >> 8) & 0x3) > privilege) return true;
+ switch(csr){
+ case MSTATUS: *value = (status.raw | (((status.raw & 0x6000) == 0x6000) ? 0x80000000 : 0)) & MSTATUS_READ_MASK; break;
+ case MIP: *value = getIp().raw; break;
+ case MIE: *value = ie.raw; break;
+ case MTVEC: *value = mtvec.raw; break;
+ case MCAUSE: *value = mcause.raw; break;
+ case MBADADDR: *value = mbadaddr; break;
+ case MEPC: *value = mepc; break;
+ case MSCRATCH: *value = mscratch; break;
+ case MISA: *value = misa; break;
+ case MEDELEG: *value = medeleg; break;
+ case MIDELEG: *value = mideleg; break;
+ case MHARTID: *value = 0; break;
+
+ case SSTATUS: *value = (status.raw | (((status.raw & 0x6000) == 0x6000) ? 0x80000000 : 0)) & (0x800C0133 | STATUS_FS_MASK); break;
+ case SIP: *value = getIp().raw & 0x333; break;
+ case SIE: *value = ie.raw & 0x333; break;
+ case STVEC: *value = stvec.raw; break;
+ case SCAUSE: *value = scause.raw; break;
+ case STVAL: *value = sbadaddr; break;
+ case SEPC: *value = sepc; break;
+ case SSCRATCH: *value = sscratch; break;
+ case SATP: *value = satp.raw; break;
+
+ #ifdef RVF
+ case FCSR: *value = fcsr.raw; break;
+ case FRM: *value = fcsr.frm; break;
+ case FFLAGS: *value = fcsr.flags; break;
+ #endif
+
+ #ifdef UTIME_INPUT
+ case UTIME: *value = dutRfWriteValue; break;
+ case UTIMEH: *value = dutRfWriteValue; break;
+ #endif
+
+ default: return true; break;
+ }
+ return false;
+ }
+
+ virtual uint32_t csrReadToWriteOverride(int32_t csr, uint32_t value){
+ if(((csr >> 8) & 0x3) > privilege) return true;
+ switch(csr){
+ case MIP: return ipSoft; break;
+ case SIP: return ipSoft & 0x333; break;
+ };
+ return value;
+ }
+
+ #define maskedWrite(dst, src, mask) dst=((dst) & ~(mask))|((src) & (mask));
+
+ virtual bool csrWrite(int32_t csr, uint32_t value){
+ if(((csr >> 8) & 0x3) > privilege) return true;
+ switch(csr){
+ case MSTATUS: status.raw = value & 0x7FFFFFFF; break;
+ case MIP: ipSoft = value; break;
+ case MIE: ie.raw = value; break;
+ case MTVEC: mtvec.raw = value; break;
+ case MCAUSE: mcause.raw = value; break;
+ case MBADADDR: mbadaddr = value; break;
+ case MEPC: mepc = value; break;
+ case MSCRATCH: mscratch = value; break;
+ case MISA: misa = value; break;
+ case MEDELEG: medeleg = value & (~0x8); break;
+ case MIDELEG: mideleg = value; break;
+
+ case SSTATUS: maskedWrite(status.raw, value, 0xC0133 | STATUS_FS_MASK); break;
+ case SIP: maskedWrite(ipSoft, value,0x333); break;
+ case SIE: maskedWrite(ie.raw, value,0x333); break;
+ case STVEC: stvec.raw = value; break;
+ case SCAUSE: scause.raw = value; break;
+ case STVAL: sbadaddr = value; break;
+ case SEPC: sepc = value; break;
+ case SSCRATCH: sscratch = value; break;
+ case SATP: satp.raw = value; break;
+
+ #ifdef RVF
+ case FCSR: fcsr.raw = value & 0x7F; break;
+ case FRM: fcsr.frm = value; break;
+ case FFLAGS: fcsr.flags = value; break;
+ #endif
+
+ default: ilegalInstruction(); return true; break;
+ }
+ return false;
+ }
+
+
+ int livenessStep = 0;
+ int livenessInterrupt = 0;
+ uint32_t pendingInterruptsPtr = 0;
+ uint32_t pendingInterrupts[5] = {0,0,0,0,0};
+ virtual void liveness(bool inWfi){
+ uint32_t pendingInterrupt = getPendingInterrupt();
+ pendingInterrupts[pendingInterruptsPtr++] = getPendingInterrupt();
+ if(pendingInterruptsPtr >= 5) pendingInterruptsPtr = 0;
+ if(pendingInterrupt) livenessInterrupt++; else livenessInterrupt = 0;
+ if(!inWfi) livenessStep++; else livenessStep = 0;
+
+ if(livenessStep > 10000){
+ cout << "Liveness step failure" << endl;
+ fail();
+ }
+
+ if(livenessInterrupt > 1000){
+ cout << "Liveness interrupt failure" << endl;
+ fail();
+ }
+ }
+
+
+ uint32_t getPendingInterrupt(){
+ uint32_t mEnabled = status.mie && privilege == 3 || privilege < 3;
+ uint32_t sEnabled = status.sie && privilege == 1 || privilege < 1;
+
+ uint32_t masked = getIp().raw & ~mideleg & -mEnabled & ie.raw;
+ if (masked == 0)
+ masked = getIp().raw & mideleg & -sEnabled & ie.raw & 0x333;
+
+ if (masked) {
+ if (masked & MIP_MEIP)
+ masked &= MIP_MEIP;
+ else if (masked & MIP_MSIP)
+ masked &= MIP_MSIP;
+ else if (masked & MIP_MTIP)
+ masked &= MIP_MTIP;
+ else if (masked & MIP_SEIP)
+ masked &= MIP_SEIP;
+ else if (masked & MIP_SSIP)
+ masked &= MIP_SSIP;
+ else if (masked & MIP_STIP)
+ masked &= MIP_STIP;
+ else
+ fail();
+ }
+
+ return masked;
+ }
+
+
+ bool isPcAligned(uint32_t pc){
+#ifdef COMPRESSED
+ return (pc & 1) == 0;
+#else
+ return (pc & 3) == 0;
+#endif
+ }
+
+
+
+ virtual void step() {
+ stepCounter++;
+ livenessStep = 0;
+
+ while(fpuCompletionTockens != 0 && !fpuCompletion.empty()){
+ FpuCompletion completion = fpuCompletion.front(); fpuCompletion.pop();
+ fcsr.flags |= completion.flags;
+ fpuCompletionTockens -= 1;
+ }
+
+
+ #define rd32 ((i >> 7) & 0x1F)
+ #define iBits(lo, len) ((i >> lo) & ((1 << len)-1))
+ #define iBitsSigned(lo, len) int32_t(i) << (32-lo-len) >> (32-len)
+ #define iSign() iBitsSigned(31, 1)
+ #define i32_rs1 regs[(i >> 15) & 0x1F]
+ #define i32_rs2 regs[(i >> 20) & 0x1F]
+ #define i32_i_imm (int32_t(i) >> 20)
+ #define i32_s_imm (iBits(7, 5) + (iBitsSigned(25, 7) << 5))
+ #define i32_shamt ((i >> 20) & 0x1F)
+ #define i32_sb_imm ((iBits(8, 4) << 1) + (iBits(25,6) << 5) + (iBits(7,1) << 11) + (iSign() << 12))
+ #define i32_csr iBits(20, 12)
+ #define i32_func3 iBits(12, 3)
+ #define i32_func7 iBits(25, 7)
+ #define i16_addi4spn_imm ((iBits(6, 1) << 2) + (iBits(5, 1) << 3) + (iBits(11, 2) << 4) + (iBits(7, 4) << 6))
+ #define i16_lw_imm ((iBits(6, 1) << 2) + (iBits(10, 3) << 3) + (iBits(5, 1) << 6))
+ #define i16_addr2 (iBits(2,3) + 8)
+ #define i16_addr1 (iBits(7,3) + 8)
+ #define i16_rf1 regs[i16_addr1]
+ #define i16_rf2 regs[i16_addr2]
+ #define rf_sp regs[2]
+ #define i16_imm (iBits(2, 5) + (iBitsSigned(12, 1) << 5))
+ #define i16_j_imm ((iBits(3, 3) << 1) + (iBits(11, 1) << 4) + (iBits(2, 1) << 5) + (iBits(7, 1) << 6) + (iBits(6, 1) << 7) + (iBits(9, 2) << 8) + (iBits(8, 1) << 10) + (iBitsSigned(12, 1) << 11))
+ #define i16_addi16sp_imm ((iBits(6, 1) << 4) + (iBits(2, 1) << 5) + (iBits(5, 1) << 6) + (iBits(3, 2) << 7) + (iBitsSigned(12, 1) << 9))
+ #define i16_zimm (iBits(2, 5))
+ #define i16_b_imm ((iBits(3, 2) << 1) + (iBits(10, 2) << 3) + (iBits(2, 1) << 5) + (iBits(5, 2) << 6) + (iBitsSigned(12, 1) << 8))
+ #define i16_lwsp_imm ((iBits(4, 3) << 2) + (iBits(12, 1) << 5) + (iBits(2, 2) << 6))
+ #define i16_swsp_imm ((iBits(9, 4) << 2) + (iBits(7, 2) << 6))
+ uint32_t i;
+ uint32_t u32Buf;
+ uint32_t pAddr;
+ if (pc & 2) {
+ if(v2p(pc - 2, &pAddr, EXECUTE)){ trap(0, 12, pc - 2); return; }
+ if(iRead(pAddr, &i)){
+ trap(0, 1, 0);
+ return;
+ }
+ i >>= 16;
+ if ((i & 3) == 3) {
+ uint32_t u32Buf;
+ if(v2p(pc + 2, &pAddr, EXECUTE)){ trap(0, 12, pc + 2); return; }
+ if(iRead(pAddr, &u32Buf)){
+ trap(0, 1, 0);
+ return;
+ }
+ i |= u32Buf << 16;
+ }
+ } else {
+ if(v2p(pc, &pAddr, EXECUTE)){ trap(0, 12, pc); return; }
+ if(iRead(pAddr, &i)){
+ trap(0, 1, 0);
+ return;
+ }
+ }
+ lastInstruction = i;
+ currentInstruction = i;
+ if ((i & 0x3) == 0x3) {
+ //32 bit
+ switch (i & 0x7F) {
+ #ifdef RVF
+ case 0x43:// RVFD
+ case 0x47:
+ case 0x4B:
+ case 0x4F:
+ case 0x53: {
+ u32 format = iBits(25,2);
+ u32 opcode = iBits(27,5);
+ bool withCommit = fpuCommitLut[opcode];
+ bool withRsp = fpuRspLut[opcode];
+ bool withRs1 = fpuRs1Lut[opcode];
+ if((i & 0x7F) != 0x53) { // FMADD
+ withCommit = true;
+ withRsp = false;
+ }
+ #ifdef RVD
+ if(format > 1) ilegalInstruction();
+ #else
+ if(format > 0) ilegalInstruction();
+ #endif
+
+ if(withCommit){
+ FpuCommit commit = fpuCommit.front(); fpuCommit.pop();
+ fpuCompletionTockens += 1;
+// cout << "withRs1 " << withRs1 << " " << opcode << endl;
+ if(withRs1 && memcmp(&i32_rs1, &commit.value, 4)){
+ cout << "FPU commit missmatch DUT=" << hex << commit.value << " REF=" << i32_rs1 << dec << endl;
+ fail();
+ return;
+ }
+ }
+ if(withRsp){
+ auto rsp = fpuRsp.front(); fpuRsp.pop();
+ fcsr.flags |= rsp.flags;
+ rfWrite(rd32, (u32)rsp.value);
+ }
+ status.fs = 3;
+ pcWrite(pc + 4);
+ } break;
+ case 0x07: { //Fpu load
+ uint32_t size = 1 << ((i >> 12) & 0x3);
+ if(size < 4) ilegalInstruction();
+ #ifdef RVD
+ if(size > 8) ilegalInstruction();
+ #else
+ if(format > 4) ilegalInstruction();
+ #endif
+ auto commit = fpuCommit.front(); fpuCommit.pop();
+ fpuCompletionTockens += 1;
+
+
+ uint64_t data = 0;
+ uint32_t address = i32_rs1 + i32_i_imm;
+ if(address & (size-1)){
+ trap(0, 4, address);
+ } else {
+ if(v2p(address, &pAddr, READ)){ trap(0, 13, address); return; }
+ if(dRead(pAddr, size, (uint8_t*)&data)){
+ trap(0, 5, address);
+ } else {
+ if(memcmp(&data, &commit.value, size)){
+ cout << "FPU load missmatch DUT=" << hex << commit.value << " REF=" << data << dec << endl;
+ fail();
+ } else {
+ status.fs = 3;
+ pcWrite(pc + 4);
+ }
+ }
+ }
+ } break;
+ case 0x27: { //Fpu store
+ uint32_t size = 1 << ((i >> 12) & 0x3);
+ if(size < 4) ilegalInstruction();
+ #ifdef RVD
+ if(size > 8) ilegalInstruction();
+ #else
+ if(format > 4) ilegalInstruction();
+ #endif
+
+ auto rsp = fpuRsp.front(); fpuRsp.pop();
+ fcsr.flags |= rsp.flags;
+ uint32_t address = i32_rs1 + i32_s_imm;
+ if(address & (size-1)){
+ trap(0, 6, address);
+ } else {
+ if(v2p(address, &pAddr, WRITE)){ trap(0, 15, address); return; }
+ dWrite(pAddr, size, (uint8_t*) &rsp.value);
+ status.fs = 3;
+ pcWrite(pc + 4);
+ lrscReserved = false;
+ }
+ } break;
+ #endif
+ case 0x37:rfWrite(rd32, i & 0xFFFFF000);pcWrite(pc + 4);break; // LUI
+ case 0x17:rfWrite(rd32, (i & 0xFFFFF000) + pc);pcWrite(pc + 4);break; //AUIPC
+ case 0x6F:rfWrite(rd32, pc + 4);pcWrite(pc + (iBits(21, 10) << 1) + (iBits(20, 1) << 11) + (iBits(12, 8) << 12) + (iSign() << 20));break; //JAL
+ case 0x67:{
+ uint32_t target = (i32_rs1 + i32_i_imm) & ~1;
+ if(isPcAligned(target)) rfWrite(rd32, pc + 4);
+ pcWrite(target);
+ } break; //JALR
+ case 0x63:
+ switch ((i >> 12) & 0x7) {
+ case 0x0:if (i32_rs1 == i32_rs2)pcWrite(pc + i32_sb_imm);else pcWrite(pc + 4);break;
+ case 0x1:if (i32_rs1 != i32_rs2)pcWrite(pc + i32_sb_imm);else pcWrite(pc + 4);break;
+ case 0x4:if (i32_rs1 < i32_rs2)pcWrite(pc + i32_sb_imm); else pcWrite(pc + 4);break;
+ case 0x5:if (i32_rs1 >= i32_rs2)pcWrite(pc + i32_sb_imm);else pcWrite(pc + 4);break;
+ case 0x6:if (uint32_t(i32_rs1) < uint32_t(i32_rs2)) pcWrite(pc + i32_sb_imm); else pcWrite(pc + 4);break;
+ case 0x7:if (uint32_t(i32_rs1) >= uint32_t(i32_rs2))pcWrite(pc + i32_sb_imm); else pcWrite(pc + 4);break;
+ }
+ break;
+ case 0x03:{ //LOADS
+ uint32_t data;
+ uint32_t address = i32_rs1 + i32_i_imm;
+ uint32_t size = 1 << ((i >> 12) & 0x3);
+ if(address & (size-1)){
+ trap(0, 4, address);
+ } else {
+ if(v2p(address, &pAddr, READ)){ trap(0, 13, address); return; }
+ if(dRead(pAddr, size, (uint8_t*)&data)){
+ trap(0, 5, address);
+ } else {
+ switch ((i >> 12) & 0x7) {
+ case 0x0:rfWrite(rd32, int8_t(data));pcWrite(pc + 4);break;
+ case 0x1:rfWrite(rd32, int16_t(data));pcWrite(pc + 4);break;
+ case 0x2:rfWrite(rd32, int32_t(data));pcWrite(pc + 4);break;
+ case 0x4:rfWrite(rd32, uint8_t(data));pcWrite(pc + 4);break;
+ case 0x5:rfWrite(rd32, uint16_t(data));pcWrite(pc + 4);break;
+ }
+ }
+ }
+ }break;
+ case 0x23: { //STORE
+ uint32_t address = i32_rs1 + i32_s_imm;
+ uint32_t size = 1 << ((i >> 12) & 0x3);
+ if(address & (size-1)){
+ trap(0, 6, address);
+ } else {
+ if(v2p(address, &pAddr, WRITE)){ trap(0, 15, address); return; }
+ dWrite(pAddr, size, (uint8_t*)&i32_rs2);
+ pcWrite(pc + 4);
+ lrscReserved = false;
+ }
+ }break;
+ case 0x13: //ALUi
+ switch ((i >> 12) & 0x7) {
+ case 0x0:rfWrite(rd32, i32_rs1 + i32_i_imm);pcWrite(pc + 4);break;
+ case 0x1:
+ switch ((i >> 25) & 0x7F) {
+ case 0x00:rfWrite(rd32, i32_rs1 << i32_shamt);pcWrite(pc + 4);break;
+ }
+ break;
+ case 0x2:rfWrite(rd32, i32_rs1 < i32_i_imm);pcWrite(pc + 4);break;
+ case 0x3:rfWrite(rd32, uint32_t(i32_rs1) < uint32_t(i32_i_imm));pcWrite(pc + 4);break;
+ case 0x4:rfWrite(rd32, i32_rs1 ^ i32_i_imm);pcWrite(pc + 4);break;
+ case 0x5:
+ switch ((i >> 25) & 0x7F) {
+ case 0x00:rfWrite(rd32, uint32_t(i32_rs1) >> i32_shamt);pcWrite(pc + 4);break;
+ case 0x20:rfWrite(rd32, i32_rs1 >> i32_shamt);pcWrite(pc + 4);break;
+ }
+ break;
+ case 0x6:rfWrite(rd32, i32_rs1 | i32_i_imm);pcWrite(pc + 4);break;
+ case 0x7: rfWrite(rd32, i32_rs1 & i32_i_imm);pcWrite(pc + 4);break;
+ }
+ break;
+ case 0x33: //ALU
+ if (((i >> 25) & 0x7F) == 0x01) {
+ switch ((i >> 12) & 0x7) {
+ case 0x0:rfWrite(rd32, int32_t(i32_rs1) * int32_t(i32_rs2));pcWrite(pc + 4);break;
+ case 0x1:rfWrite(rd32,(int64_t(i32_rs1) * int64_t(i32_rs2)) >> 32);pcWrite(pc + 4);break;
+ case 0x2:rfWrite(rd32,(int64_t(i32_rs1) * uint64_t(uint32_t(i32_rs2)))>> 32);pcWrite(pc + 4);break;
+ case 0x3:rfWrite(rd32,(uint64_t(uint32_t(i32_rs1)) * uint64_t(uint32_t(i32_rs2))) >> 32);pcWrite(pc + 4);break;
+ case 0x4:rfWrite(rd32,i32_rs2 == 0 ? -1 : int64_t(i32_rs1) / int64_t(i32_rs2));pcWrite(pc + 4);break;
+ case 0x5:rfWrite(rd32,i32_rs2 == 0 ? -1 : uint32_t(i32_rs1) / uint32_t(i32_rs2));pcWrite(pc + 4);break;
+ case 0x6:rfWrite(rd32,i32_rs2 == 0 ? i32_rs1 : int64_t(i32_rs1)% int64_t(i32_rs2));pcWrite(pc + 4);break;
+ case 0x7:rfWrite(rd32,i32_rs2 == 0 ? i32_rs1 : uint32_t(i32_rs1) % uint32_t(i32_rs2));pcWrite(pc + 4);break;
+ }
+ } else {
+ switch ((i >> 12) & 0x7) {
+ case 0x0:
+ switch ((i >> 25) & 0x7F) {
+ case 0x00:rfWrite(rd32, i32_rs1 + i32_rs2);pcWrite(pc + 4);break;
+ case 0x20:rfWrite(rd32, i32_rs1 - i32_rs2);pcWrite(pc + 4);break;
+ }
+ break;
+ case 0x1:rfWrite(rd32, i32_rs1 << (i32_rs2 & 0x1F));pcWrite(pc + 4);break;
+ case 0x2:rfWrite(rd32, i32_rs1 < i32_rs2);pcWrite(pc + 4);break;
+ case 0x3:rfWrite(rd32, uint32_t(i32_rs1) < uint32_t(i32_rs2));pcWrite(pc + 4);break;
+ case 0x4:rfWrite(rd32, i32_rs1 ^ i32_rs2);pcWrite(pc + 4);break;
+ case 0x5:
+ switch ((i >> 25) & 0x7F) {
+ case 0x00:rfWrite(rd32, uint32_t(i32_rs1) >> (i32_rs2 & 0x1F));pcWrite(pc + 4);break;
+ case 0x20:rfWrite(rd32, i32_rs1 >> (i32_rs2 & 0x1F));pcWrite(pc + 4);break;
+ }
+ break;
+ case 0x6:rfWrite(rd32, i32_rs1 | i32_rs2);pcWrite(pc + 4);break;
+ case 0x7:rfWrite(rd32, i32_rs1 & i32_rs2); pcWrite(pc + 4);break;
+ }
+ }
+ break;
+ case 0x73:{
+ if(i32_func3 == 0){
+ switch(i){
+ case 0x30200073:{ //MRET
+ if(privilege < 3){ ilegalInstruction(); return;}
+ privilege = status.mpp;
+ status.mie = status.mpie;
+ status.mpie = 1;
+ status.mpp = 0;
+ pcWrite(mepc);
+ }break;
+ case 0x10200073:{ //SRET
+ if(privilege < 1){ ilegalInstruction(); return;}
+ privilege = status.spp;
+ status.sie = status.spie;
+ status.spie = 1;
+ status.spp = 0;
+ pcWrite(sepc);
+ }break;
+ case 0x00000073:{ //ECALL
+ trap(0, 8+privilege, 0x00000073); //To follow the VexRiscv area saving implementation
+ }break;
+ case 0x10500073:{ //WFI
+ pcWrite(pc + 4);
+ }break;
+ default:
+ if((i & 0xFE007FFF) == 0x12000073){ //SFENCE.VMA
+ pcWrite(pc + 4);
+ }else {
+ ilegalInstruction();
+ }
+ break;
+ }
+ } else {
+ //CSR
+ uint32_t input = (i & 0x4000) ? ((i >> 15) & 0x1F) : i32_rs1;
+ uint32_t clear, set;
+ bool write;
+ switch ((i >> 12) & 0x3) {
+ case 1: clear = ~0; set = input; write = true; break;
+ case 2: clear = 0; set = input; write = ((i >> 15) & 0x1F) != 0; break;
+ case 3: clear = input; set = 0; write = ((i >> 15) & 0x1F) != 0; break;
+ }
+ uint32_t csrAddress = i32_csr;
+ uint32_t old;
+ if(csrRead(i32_csr, &old)) { ilegalInstruction();return; }
+ if(write) if(csrWrite(i32_csr, (csrReadToWriteOverride(i32_csr, old) & ~clear) | set)) { ilegalInstruction();return; }
+ rfWrite(rd32, old);
+ pcWrite(pc + 4);
+ }
+ break;
+ }
+ case 0x2F: // Atomic stuff
+ switch(i32_func3){
+ case 0x2:
+ switch(iBits(27,5)){
+ case 0x2:{ //LR
+ uint32_t data;
+ uint32_t address = i32_rs1;
+ if(address & 3){
+ trap(0, 4, address);
+ } else {
+ if(v2p(address, &pAddr, READ)){ trap(0, 13, address); return; }
+ if(dRead(pAddr, 4, (uint8_t*)&data)){
+ trap(0, 5, address);
+ } else {
+ lrscReserved = true;
+ lrscReservedAddress = pAddr;
+ rfWrite(rd32, data);
+ pcWrite(pc + 4);
+ }
+ }
+ } break;
+ case 0x3:{ //SC
+ uint32_t address = i32_rs1;
+ if(address & 3){
+ trap(0, 6, address);
+ } else {
+ if(v2p(address, &pAddr, WRITE)){ trap(0, 15, address); return; }
+ #ifdef DBUS_EXCLUSIVE
+ bool hit = lrscReserved && lrscReservedAddress == pAddr;
+ #else
+ bool hit = lrscReserved;
+ #endif
+ if(hit){
+ dWrite(pAddr, 4, (uint8_t*)&i32_rs2);
+ }
+ lrscReserved = false;
+ rfWrite(rd32, !hit);
+ pcWrite(pc + 4);
+ }
+ } break;
+ default: {
+ #ifndef AMO
+ ilegalInstruction();
+ #else
+ uint32_t sel = (i >> 27) & 0x1F;
+ uint32_t addr = i32_rs1;
+ int32_t src = i32_rs2;
+ int32_t readValue;
+
+ lrscReserved = false;
+
+
+ uint32_t pAddr;
+ if(v2p(addr, &pAddr, READ_WRITE)){ trap(0, 15, addr); return; }
+ if(dRead(pAddr, 4, (uint8_t*)&readValue)){
+ trap(0, 15, addr); return;
+ return;
+ }
+ int writeValue;
+ switch(sel){
+ case 0x0: writeValue = src + readValue; break;
+ case 0x1: writeValue = src; break;
+ case 0x4: writeValue = src ^ readValue; break;
+ case 0xC: writeValue = src & readValue; break;
+ case 0x8: writeValue = src | readValue; break;
+ case 0x10: writeValue = min(src, readValue); break;
+ case 0x14: writeValue = max(src, readValue); break;
+ case 0x18: writeValue = min((unsigned int)src, (unsigned int)readValue); break;
+ case 0x1C: writeValue = max((unsigned int)src, (unsigned int)readValue); break;
+ default: ilegalInstruction(); return; break;
+ }
+ dWrite(pAddr, 4, (uint8_t*)&writeValue);
+ rfWrite(rd32, readValue);
+ pcWrite(pc + 4);
+ #endif
+ } break;
+ }
+ break;
+ default: ilegalInstruction(); break;
+ }
+ break;
+ case 0x0f:
+ if(i == 0x100F || (i & 0xF00FFFFF) == 0x000F){ // FENCE FENCE.I
+ pcWrite(pc + 4);
+ } else{
+ ilegalInstruction();
+ }
+ break;
+ default: ilegalInstruction(); break;
+ }
+ } else {
+ #ifndef COMPRESSED
+ cout << "ERROR : RiscvGolden got a RVC instruction while the CPU isn't RVC ready" << endl;
+ ilegalInstruction(); return;
+ #endif
+ switch((iBits(0, 2) << 3) + iBits(13, 3)){
+ case 0: rfWrite(i16_addr2, rf_sp + i16_addi4spn_imm); pcWrite(pc + 2); break;
+ case 2: {
+ uint32_t data;
+ uint32_t address = i16_rf1 + i16_lw_imm;
+ if(address & 0x3){
+ trap(0, 4, address);
+ } else {
+ if(v2p(address, &pAddr, READ)){ trap(0, 13, address); return; }
+ if(dRead(pAddr, 4, (uint8_t*)&data)) {
+ trap(0, 5, address);
+ } else {
+ rfWrite(i16_addr2, data); pcWrite(pc + 2);
+ }
+ }
+ } break;
+ case 6: {
+ uint32_t address = i16_rf1 + i16_lw_imm;
+ if(address & 0x3){
+ trap(0, 6, address);
+ } else {
+ if(v2p(address, &pAddr, WRITE)){ trap(0, 15, address); return; }
+ dWrite(pAddr, 4, (uint8_t*)&i16_rf2);
+ pcWrite(pc + 2);
+ lrscReserved = false;
+ }
+ }break;
+ case 8: rfWrite(rd32, regs[rd32] + i16_imm); pcWrite(pc + 2); break;
+ case 9: rfWrite(1, pc + 2);pcWrite(pc + i16_j_imm); break;
+ case 10: rfWrite(rd32, i16_imm);pcWrite(pc + 2); break;
+ case 11:
+ if(rd32 == 2) { rfWrite(2, rf_sp + i16_addi16sp_imm);pcWrite(pc + 2); }
+ else { rfWrite(rd32, i16_imm << 12);pcWrite(pc + 2); } break;
+ case 12:
+ switch(iBits(10,2)){
+ case 0: rfWrite(i16_addr1, uint32_t(i16_rf1) >> i16_zimm); pcWrite(pc + 2);break;
+ case 1: rfWrite(i16_addr1, i16_rf1 >> i16_zimm); pcWrite(pc + 2);break;
+ case 2: rfWrite(i16_addr1, i16_rf1 & i16_imm); pcWrite(pc + 2);break;
+ case 3:
+ switch(iBits(5,2)){
+ case 0: rfWrite(i16_addr1, i16_rf1 - i16_rf2); pcWrite(pc + 2);break;
+ case 1: rfWrite(i16_addr1, i16_rf1 ^ i16_rf2); pcWrite(pc + 2);break;
+ case 2: rfWrite(i16_addr1, i16_rf1 | i16_rf2); pcWrite(pc + 2);break;
+ case 3: rfWrite(i16_addr1, i16_rf1 & i16_rf2); pcWrite(pc + 2);break;
+ }
+ break;
+ }
+ break;
+ case 13: pcWrite(pc + i16_j_imm); break;
+ case 14: pcWrite(i16_rf1 == 0 ? pc + i16_b_imm : pc + 2); break;
+ case 15: pcWrite(i16_rf1 != 0 ? pc + i16_b_imm : pc + 2); break;
+ case 16: rfWrite(rd32, regs[rd32] << i16_zimm); pcWrite(pc + 2); break;
+ case 18:{
+ uint32_t data;
+ uint32_t address = rf_sp + i16_lwsp_imm;
+ if(address & 0x3){
+ trap(0, 4, address);
+ } else {
+ if(v2p(address, &pAddr, READ)){ trap(0, 13, address); return; }
+ if(dRead(pAddr, 4,(uint8_t*) &data)){
+ trap(0, 5, address);
+ } else {
+ rfWrite(rd32, data); pcWrite(pc + 2);
+ }
+ }
+ }break;
+ case 20:
+ if(i & 0x1000){
+ if(iBits(2,10) == 0){
+
+ } else if(iBits(2,5) == 0){
+ rfWrite(1, pc + 2); pcWrite(regs[rd32] & ~1);
+ } else {
+ rfWrite(rd32, regs[rd32] + regs[iBits(2,5)]); pcWrite(pc + 2);
+ }
+ } else {
+ if(iBits(2,5) == 0){
+ pcWrite(regs[rd32] & ~1);
+ } else {
+ rfWrite(rd32, regs[iBits(2,5)]); pcWrite(pc + 2);
+ }
+ }
+ break;
+ case 22: {
+ uint32_t address = rf_sp + i16_swsp_imm;
+ if(address & 3){
+ trap(0,6, address);
+ } else {
+ if(v2p(address, &pAddr, WRITE)){ trap(0, 15, address); return; }
+ dWrite(pAddr, 4, (uint8_t*)&regs[iBits(2,5)]); pcWrite(pc + 2);
+ lrscReserved = false;
+ }
+ }break;
+ }
+ }
+ }
+};
+
+
+class SimElement{
+public:
+ virtual ~SimElement(){}
+ virtual void onReset(){}
+ virtual void postReset(){}
+ virtual void preCycle(){}
+ virtual void postCycle(){}
+};
+
+
+
+class Workspace;
+
+class Workspace{
+public:
+ static mutex staticMutex;
+ static uint32_t testsCounter, successCounter;
+ static uint64_t cycles;
+ uint64_t instanceCycles = 0;
+ vector<SimElement*> simElements;
+ Memory mem;
+ string name;
+ uint64_t currentTime = 22;
+ uint64_t mTimeCmp = 0;
+ uint64_t mTime = 0;
+ VVexRiscv* top;
+ bool resetDone = false;
+ bool riscvRefEnable = false;
+ uint64_t i;
+ double cyclesPerSecond = 10e6;
+ double allowedCycles = 0.0;
+ uint32_t bootPc = -1;
+ uint32_t iStall = STALL,dStall = STALL;
+ #ifdef TRACE
+ VerilatedFstC* tfp;
+ #endif
+ bool allowInvalidate = true;
+
+ uint32_t seed;
+
+ Workspace* setIStall(bool enable) { iStall = enable; return this; }
+ Workspace* setDStall(bool enable) { dStall = enable; return this; }
+
+ ofstream regTraces;
+ ofstream memTraces;
+ ofstream logTraces;
+ ofstream debugLog;
+
+ struct timespec start_time;
+
+ class CpuRef : public RiscvGolden{
+ public:
+ Memory mem;
+
+ class MemWrite {
+ public:
+ int32_t address, size;
+ uint8_t data42[64];
+ };
+
+ class MemRead {
+ public:
+ int32_t address, size;
+ uint8_t data42[64];
+ bool error;
+ };
+
+ uint32_t periphWriteTimer = 0;
+ queue<MemWrite> periphWritesGolden;
+ queue<MemWrite> periphWrites;
+ queue<MemRead> periphRead;
+ Workspace *ws;
+ CpuRef(Workspace *ws){
+ this->ws = ws;
+ }
+
+ virtual void fail() { ws->fail(); }
+
+
+ virtual bool isMmuRegion(uint32_t v) {return ws->isMmuRegion(v);}
+
+ bool rfWriteValid;
+ int32_t rfWriteAddress;
+ int32_t rfWriteData;
+ virtual void rfWrite(int32_t address, int32_t data){
+ rfWriteValid = address != 0;
+ rfWriteAddress = address;
+ rfWriteData = data;
+ RiscvGolden::rfWrite(address,data);
+ }
+
+
+ virtual bool iRead(int32_t address, uint32_t *data){
+ bool error;
+ ws->iBusAccess(address, data, &error);
+// ws->iBusAccessPatch(address,data,&error);
+ return error;
+ }
+
+ virtual bool dRead(int32_t address, int32_t size, uint8_t *data){
+ if(size < 1 || size > 8){
+ cout << "dRead size=" << size << endl;
+ fail();
+ }
+ if((address & (size-1)) != 0)
+ cout << "Ref did a unaligned read" << endl;
+ if(ws->isPerifRegion(address)){
+ MemRead t = periphRead.front();
+ if(t.address != address || t.size != size){
+ cout << "DRead missmatch" << hex << endl;
+ cout << " REF : address=" << address << " size=" << size << endl;
+ cout << " DUT : address=" << t.address << " size=" << t.size << endl;
+ fail();
+ }
+
+ for(int i = 0; i < size; i++){
+ data[i] = t.data42[i];
+ }
+ periphRead.pop();
+ return t.error;
+ }else {
+ mem.read(address, size, data);
+ }
+ return false;
+ }
+ virtual void dWrite(int32_t address, int32_t size, uint8_t *data){
+ if(address & (size-1) != 0)
+ cout << "Ref did a unaligned write" << endl;
+
+ if(!ws->isPerifRegion(address)){
+ mem.write(address, size, data);
+ }
+ if(ws->isDBusCheckedRegion(address)){
+ MemWrite w;
+ w.address = address;
+ w.size = size;
+ for(int i = 0; i < size; i++){
+ w.data42[i] = data[i];
+ }
+ periphWritesGolden.push(w);
+ if(periphWritesGolden.size() > 10){
+ cout << "??? periphWritesGolden" << endl;
+ fail();
+ }
+ }
+ }
+
+
+ void step() {
+ rfWriteValid = false;
+ RiscvGolden::step();
+
+ switch(periphWrites.empty() + uint32_t(periphWritesGolden.empty())*2){
+ case 3: periphWriteTimer = 0; break;
+ case 1: case 2: if(periphWriteTimer++ == 20){
+ cout << "periphWrite timout" << endl; fail();
+ } break;
+ case 0:
+ MemWrite t = periphWrites.front();
+ MemWrite t2 = periphWritesGolden.front();
+ bool dataMatch = true;
+ for(int i = 0;i < min(t.size, t2.size);i++) dataMatch &= t.data42[i] == t2.data42[i];
+ if(t.address != t2.address || t.size != t2.size || !dataMatch){
+ cout << hex << "periphWrite missmatch" << endl;
+ cout << " DUT address=" << t.address << " size=" << t.size << " data=" << *((uint32_t*)t.data42) << endl;
+ cout << " REF address=" << t2.address << " size=" << t2.size << " data=" << *((uint32_t*)t2.data42) << endl;
+ fail();
+ }
+ periphWrites.pop();
+ periphWritesGolden.pop();
+ periphWriteTimer = 0;
+ break;
+ }
+
+
+ }
+ };
+
+ CpuRef riscvRef = CpuRef(this);
+ string vcdName;
+ Workspace* setVcdName(string name){
+ vcdName = name;
+ return this;
+ }
+ Workspace(string name){
+ vcdName = name;
+ //seed = VL_RANDOM_I_WIDTH(32)^VL_RANDOM_I_WIDTH(32)^0x1093472;
+ //srand48(seed);
+ // setIStall(false);
+ // setDStall(false);
+ staticMutex.lock();
+ testsCounter++;
+ staticMutex.unlock();
+ this->name = name;
+ top = new VVexRiscv;
+ #ifdef TRACE_ACCESS
+ regTraces.open (name + ".regTrace");
+ memTraces.open (name + ".memTrace");
+ #endif
+ logTraces.open (name + ".logTrace");
+ debugLog.open (name + ".debugTrace");
+ fillSimELements();
+ clock_gettime(CLOCK_PROCESS_CPUTIME_ID, &start_time);
+ }
+
+ virtual ~Workspace(){
+ delete top;
+ #ifdef TRACE
+ delete tfp;
+ #endif
+
+ for(SimElement* simElement : simElements) {
+ delete simElement;
+ }
+ }
+
+ Workspace* loadHex(string path){
+ loadHexImpl(path,&mem);
+ loadHexImpl(path,&riscvRef.mem);
+ return this;
+ }
+
+ Workspace* loadBin(string path, uint32_t offset){
+ loadBinImpl(path,&mem, offset);
+ loadBinImpl(path,&riscvRef.mem, offset);
+ return this;
+ }
+
+ Workspace* setCyclesPerSecond(double value){
+ cyclesPerSecond = value;
+ return this;
+ }
+
+ Workspace* bootAt(uint32_t pc) {
+ bootPc = pc;
+ riscvRef.pc = pc;
+ return this;
+ }
+
+ Workspace* withRiscvRef(){
+ #ifdef WITH_RISCV_REF
+ riscvRefEnable = true;
+ #endif
+ return this;
+ }
+
+ Workspace* withInvalidation(){
+ allowInvalidate = true;
+ return this;
+ }
+ Workspace* withoutInvalidation(){
+ allowInvalidate = false;
+ return this;
+ }
+ Workspace* writeWord(uint32_t address, uint32_t data){
+ mem.write(address, 4, (uint8_t*)&data);
+ riscvRef.mem.write(address, 4, (uint8_t*)&data);
+ return this;
+ }
+
+ virtual bool isPerifRegion(uint32_t addr) { return false; }
+ virtual bool isMmuRegion(uint32_t addr) { return true;}
+ virtual void iBusAccess(uint32_t addr, uint32_t *data, bool *error) {
+ if(addr % 4 != 0) {
+ cout << "Warning, unaligned IBusAccess : " << addr << endl;
+ fail();
+ }
+ *data = ( (mem[addr + 0] << 0)
+ | (mem[addr + 1] << 8)
+ | (mem[addr + 2] << 16)
+ | (mem[addr + 3] << 24));
+ *error = false;
+ }
+
+
+ virtual bool isDBusCheckedRegion(uint32_t address){ return isPerifRegion(address);}
+ virtual void dBusAccess(uint32_t addr,bool wr, uint32_t size, uint8_t *data, bool *error) {
+ assertEq(addr % size, 0);
+ if(!isPerifRegion(addr)) {
+ if(wr){
+ for(uint32_t b = 0;b < size;b++){
+ *mem.get(addr + b) = ((uint8_t*)data)[b];
+ }
+
+ }else{
+ uint32_t innerOffset = addr & (DBUS_LOAD_DATA_WIDTH/8-1);
+ for(uint32_t b = 0;b < size;b++){
+ ((uint8_t*)data)[b] = mem[addr + b];
+ }
+ }
+ }
+
+
+ if(wr){
+ if(isDBusCheckedRegion(addr)){
+ CpuRef::MemWrite w;
+ w.address = addr;
+ w.size = size;
+ for(uint32_t b = 0;b < size;b++){
+ w.data42[b] = data[b];
+ }
+ riscvRef.periphWrites.push(w);
+ }
+ } else {
+ if(isPerifRegion(addr)){
+ CpuRef::MemRead r;
+ r.address = addr;
+ r.size = size;
+ for(uint32_t b = 0;b < size;b++){
+ r.data42[b] = data[b];
+ }
+ r.error = *error;
+ riscvRef.periphRead.push(r);
+ }
+ }
+ }
+
+// void periphAccess(uint32_t addr,bool wr, uint32_t size,uint32_t mask, uint32_t *data, bool *error){
+// if(wr){
+// CpuRef::MemWrite w;
+// w.address = addr;
+// w.size = 1 << size;
+// w.data = *data;
+// riscvRef.periphWrites.push(w);
+// } else {
+// CpuRef::MemRead r;
+// r.address = addr;
+// r.size = 1 << size;
+// r.data = *data;
+// r.error = *error;
+// riscvRef.periphRead.push(r);
+// }
+// }
+
+ virtual void postReset() {}
+ virtual void checks(){}
+ virtual void pass(){ throw success();}
+ virtual void fail(){ throw std::exception();}
+ virtual void fillSimELements();
+ void dump(uint64_t i){
+ #ifdef TRACE
+ if(i == TRACE_START && i != 0) cout << "**" << endl << "**" << endl << "**" << endl << "**" << endl << "**" << endl << "START TRACE" << endl;
+ if(i >= TRACE_START) tfp->dump(i);
+ #ifdef TRACE_SPORADIC
+ else if(i % 1000000 < 100) tfp->dump(i);
+ #endif
+ #endif
+ }
+
+ uint64_t privilegeCounters[4] = {0,0,0,0};
+ Workspace* run(uint64_t timeout = 5000){
+// cout << "Start " << name << endl;
+ if(timeout == 0) timeout = 0x7FFFFFFFFFFFFFFF;
+
+ currentTime = 4;
+ // init trace dump
+ #ifdef TRACE
+ Verilated::traceEverOn(true);
+ tfp = new VerilatedFstC;
+ top->trace(tfp, 99);
+ tfp->open((vcdName + ".fst").c_str());
+ #endif
+
+ // Reset
+ top->clk = 0;
+ top->reset = 0;
+
+
+ top->eval(); currentTime = 3;
+ for(SimElement* simElement : simElements) simElement->onReset();
+
+ top->reset = 1;
+ top->eval();
+ top->clk = 1;
+ top->eval();
+ top->clk = 0;
+ top->eval();
+ #ifdef CSR
+ top->timerInterrupt = 0;
+ top->externalInterrupt = 1;
+ top->softwareInterrupt = 0;
+ #endif
+ #ifdef SUPERVISOR
+ top->externalInterruptS = 0;
+ #endif
+ #ifdef DEBUG_PLUGIN_EXTERNAL
+ top->timerInterrupt = 0;
+ top->externalInterrupt = 0;
+ #endif
+ dump(0);
+ top->reset = 0;
+ for(SimElement* simElement : simElements) simElement->postReset();
+
+ top->eval(); currentTime = 2;
+
+
+ postReset();
+
+ //Sync register file initial content
+ for(int i = 1;i < 32;i++){
+ riscvRef.regs[i] = top->VexRiscv->RegFilePlugin_regFile[i];
+ }
+ resetDone = true;
+
+ #ifdef REF
+ if(bootPc != -1) top->VexRiscv->core->prefetch_pc = bootPc;
+ #else
+ if(bootPc != -1) {
+ #if defined(IBUS_SIMPLE) || defined(IBUS_SIMPLE_WISHBONE) || defined(IBUS_SIMPLE_AHBLITE3)
+ top->VexRiscv->IBusSimplePlugin_fetchPc_pcReg = bootPc;
+ #ifdef COMPRESSED
+ top->VexRiscv->IBusSimplePlugin_decodePc_pcReg = bootPc;
+ #endif
+ #else
+ top->VexRiscv->IBusCachedPlugin_fetchPc_pcReg = bootPc;
+ #ifdef COMPRESSED
+ top->VexRiscv->IBusCachedPlugin_decodePc_pcReg = bootPc;
+ #endif
+ #endif
+ }
+ #endif
+
+
+ bool failed = false;
+ try {
+ // run simulation for 100 clock periods
+ for (i = 16; i < timeout*2; i+=2) {
+ /*while(allowedCycles <= 0.0){
+ struct timespec end_time;
+ clock_gettime(CLOCK_PROCESS_CPUTIME_ID, &end_time);
+ uint64_t diffInNanos = end_time.tv_sec*1e9 + end_time.tv_nsec - start_time.tv_sec*1e9 - start_time.tv_nsec;
+ start_time = end_time;
+ double dt = diffInNanos*1e-9;
+ allowedCycles += dt*cyclesPerSecond;
+ if(allowedCycles > cyclesPerSecond/100) allowedCycles = cyclesPerSecond/100;
+ }
+ allowedCycles-=1.0;*/
+
+
+ #ifndef REF_TIME
+ #ifndef MTIME_INSTR_FACTOR
+ mTime = i/2;
+ #else
+ mTime += top->VexRiscv->lastStageIsFiring*MTIME_INSTR_FACTOR;
+ #endif
+ #endif
+ #ifdef TIMER_INTERRUPT
+ top->timerInterrupt = mTime >= mTimeCmp ? 1 : 0;
+ //if(mTime == mTimeCmp) printf("SIM timer tick\n");
+ #endif
+
+
+ #ifdef UTIME_INPUT
+ top->utime = mTime;
+ #endif
+
+ currentTime = i;
+
+ #ifdef FLOW_INFO
+ if(i % 5000000 == 0) cout << endl << "**" << endl << "**" << endl << "PROGRESS TRACE_START=" << i << endl;
+ #endif
+
+
+ // dump variables into VCD file and toggle clock
+
+ dump(i);
+ //top->eval();
+ top->clk = 0;
+ top->eval();
+
+ #ifdef CSR
+ if(riscvRefEnable) {
+ riscvRef.ipInput = 0;
+ #ifdef TIMER_INTERRUPT
+ riscvRef.ipInput |= top->timerInterrupt << 7;
+ #endif
+ #ifdef EXTERNAL_INTERRUPT
+ riscvRef.ipInput |= top->externalInterrupt << 11;
+ #endif
+ #ifdef CSR
+ riscvRef.ipInput |= top->softwareInterrupt << 3;
+ #endif
+ #ifdef SUPERVISOR
+ // riscvRef.ipInput |= top->timerInterruptS << 5;
+ riscvRef.ipInput |= top->externalInterruptS << 9;
+ #endif
+
+ riscvRef.liveness(top->VexRiscv->CsrPlugin_inWfi);
+ if(top->VexRiscv->CsrPlugin_interruptJump){
+ if(riscvRefEnable) riscvRef.trap(true, top->VexRiscv->CsrPlugin_interrupt_code);
+ }
+ }
+ #endif
+
+ #ifdef RVF
+ if(riscvRefEnable) {
+ if(top->VexRiscv->writeBack_FpuPlugin_commit_valid && top->VexRiscv->writeBack_FpuPlugin_commit_ready && top->VexRiscv->writeBack_FpuPlugin_commit_payload_write){
+ FpuCommit c;
+ c.value = top->VexRiscv->writeBack_FpuPlugin_commit_payload_value;
+ riscvRef.fpuCommit.push(c);
+ }
+
+ if(top->VexRiscv->FpuPlugin_port_rsp_valid && top->VexRiscv->FpuPlugin_port_rsp_ready && top->VexRiscv->lastStageIsFiring){
+ FpuRsp c;
+ c.value = top->VexRiscv->FpuPlugin_port_rsp_payload_value;
+ c.flags = (top->VexRiscv->FpuPlugin_port_rsp_payload_NX << 0) |
+ (top->VexRiscv->FpuPlugin_port_rsp_payload_NV << 4);
+ riscvRef.fpuRsp.push(c);
+ }
+
+ if(top->VexRiscv->FpuPlugin_port_completion_valid && top->VexRiscv->FpuPlugin_port_completion_payload_written){
+ FpuCompletion c;
+ c.flags = (top->VexRiscv->FpuPlugin_port_completion_payload_flags_NX << 0) |
+ (top->VexRiscv->FpuPlugin_port_completion_payload_flags_UF << 1) |
+ (top->VexRiscv->FpuPlugin_port_completion_payload_flags_OF << 2) |
+ (top->VexRiscv->FpuPlugin_port_completion_payload_flags_DZ << 3) |
+ (top->VexRiscv->FpuPlugin_port_completion_payload_flags_NV << 4);
+ riscvRef.fpuCompletion.push(c);
+ }
+ }
+ #endif
+
+
+
+ if(top->VexRiscv->lastStageIsFiring){
+ if(riscvRefEnable) {
+// privilegeCounters[riscvRef.privilege]++;
+// if((riscvRef.stepCounter & 0xFFFFF) == 0){
+// cout << "privilege report" << endl;
+// cout << "- U " << privilegeCounters[0] << endl;
+// cout << "- S " << privilegeCounters[1] << endl;
+// cout << "- M " << privilegeCounters[3] << endl;
+// }
+ riscvRef.dutRfWriteValue = top->VexRiscv->lastStageRegFileWrite_payload_data;
+ riscvRef.step();
+ bool mIntTimer = false;
+ bool mIntExt = false;
+ }
+
+ if(riscvRefEnable && top->VexRiscv->lastStagePc != riscvRef.lastPc){
+ cout << hex << " pc missmatch " << top->VexRiscv->lastStagePc << " should be " << riscvRef.lastPc << dec << endl;
+ fail();
+ }
+
+
+ bool rfWriteValid = false;
+ int32_t rfWriteAddress;
+ int32_t rfWriteData;
+
+ if(top->VexRiscv->lastStageRegFileWrite_valid == 1 && top->VexRiscv->lastStageRegFileWrite_payload_address != 0){
+ rfWriteValid = true;
+ rfWriteAddress = top->VexRiscv->lastStageRegFileWrite_payload_address;
+ rfWriteData = top->VexRiscv->lastStageRegFileWrite_payload_data;
+ #ifdef TRACE_ACCESS
+ regTraces <<
+ #ifdef TRACE_WITH_TIME
+ currentTime <<
+ #endif
+ " PC " << hex << setw(8) << top->VexRiscv->lastStagePc << " : reg[" << dec << setw(2) << (uint32_t)top->VexRiscv->lastStageRegFileWrite_payload_address << "] = " << hex << setw(8) << top->VexRiscv->lastStageRegFileWrite_payload_data << dec << endl;
+ #endif
+ } else {
+ #ifdef TRACE_ACCESS
+ regTraces <<
+ #ifdef TRACE_WITH_TIME
+ currentTime <<
+ #endif
+ " PC " << hex << setw(8) << top->VexRiscv->lastStagePc << dec << endl;
+ #endif
+ }
+ if(riscvRefEnable) if(rfWriteValid != riscvRef.rfWriteValid ||
+ (rfWriteValid && (rfWriteAddress!= riscvRef.rfWriteAddress || rfWriteData!= riscvRef.rfWriteData))){
+ cout << "regFile write missmatch :" << endl;
+ if(rfWriteValid) cout << " REF: RF[" << riscvRef.rfWriteAddress << "] = 0x" << hex << riscvRef.rfWriteData << dec << endl;
+ if(rfWriteValid) cout << " DUT: RF[" << rfWriteAddress << "] = 0x" << hex << rfWriteData << dec << endl;
+ fail();
+ }
+ }
+
+ #ifdef CSR
+ if(top->VexRiscv->CsrPlugin_hadException){
+ if(riscvRefEnable) {
+ riscvRef.step();
+ }
+ }
+ #endif
+
+ for(SimElement* simElement : simElements) simElement->preCycle();
+
+ dump(i + 1);
+
+ checks();
+ //top->eval();
+ top->clk = 1;
+ top->eval();
+
+ instanceCycles += 1;
+
+ for(SimElement* simElement : simElements) simElement->postCycle();
+ #ifdef RVF
+ top->fpuCmdHalt = VL_RANDOM_I_WIDTH(1);
+ top->fpuCommitHalt = VL_RANDOM_I_WIDTH(1);
+ top->fpuRspHalt = VL_RANDOM_I_WIDTH(1);
+ #endif
+
+
+
+ if (Verilated::gotFinish())
+ exit(0);
+ }
+ cout << "timeout" << endl;
+ fail();
+ } catch (const success e) {
+ staticMutex.lock();
+ cout <<"SUCCESS " << name << endl;
+ successCounter++;
+ cycles += instanceCycles;
+ staticMutex.unlock();
+ } catch (const std::exception& e) {
+ staticMutex.lock();
+
+ cout << "FAIL " << name << " at PC=" << hex << setw(8) << top->VexRiscv->lastStagePc << dec; //<< " seed : " << seed <<
+ if(riscvRefEnable) cout << hex << " REF PC=" << riscvRef.lastPc << " REF I=" << riscvRef.lastInstruction << dec;
+ cout << " time=" << i;
+ cout << endl;
+
+ cycles += instanceCycles;
+ staticMutex.unlock();
+ failed = true;
+ }
+
+
+
+ dump(i+2);
+ dump(i+10);
+ #ifdef TRACE
+ tfp->close();
+ #endif
+ #ifdef STOP_ON_ERROR
+ if(failed){
+ sleep(1);
+ exit(-1);
+ }
+ #endif
+ return this;
+ }
+};
+
+
+class WorkspaceRegression : public Workspace {
+public:
+
+ WorkspaceRegression(string name) : Workspace(name){
+
+ }
+
+ virtual bool isPerifRegion(uint32_t addr) { return (addr & 0xF0000000) == 0xF0000000;}
+
+
+ virtual void iBusAccess(uint32_t addr, uint32_t *data, bool *error){
+ Workspace::iBusAccess(addr,data,error);
+ *error = addr == 0xF00FFF60u;
+ }
+
+ virtual void dutPutChar(char c){}
+
+ virtual void dBusAccess(uint32_t addr,bool wr, uint32_t size, uint8_t *dataBytes, bool *error) {
+ uint32_t *data = ((uint32_t*)dataBytes);
+ if(wr){
+ switch(addr){
+ case 0xF0010000u: {
+ cout << (char)*data;
+ logTraces << (char)*data;
+ dutPutChar((char)*data);
+ break;
+ }
+#ifdef EXTERNAL_INTERRUPT
+ case 0xF0011000u: top->externalInterrupt = *data & 1; break;
+#endif
+#ifdef SUPERVISOR
+ case 0xF0012000u: top->externalInterruptS = *data & 1; break;
+#endif
+#ifdef CSR
+ case 0xF0013000u: top->softwareInterrupt = *data & 1; break;
+#endif
+ case 0xF00FFF00u: {
+ cout << (char)*data;
+ logTraces << (char)*data;
+ dutPutChar((char)*data);
+ break;
+ }
+ #ifndef DEBUG_PLUGIN_EXTERNAL
+ case 0xF00FFF20u:
+ if(*data == 0)
+ pass();
+ else
+ fail();
+ break;
+ case 0xF00FFF24u:
+ cout << "TEST ERROR CODE " << *data << endl;
+ fail();
+ break;
+ #endif
+ case 0xF00FFF48u: mTimeCmp = (mTimeCmp & 0xFFFFFFFF00000000) | *data;break;
+ case 0xF00FFF4Cu: mTimeCmp = (mTimeCmp & 0x00000000FFFFFFFF) | (((uint64_t)*data) << 32); break;
+ case 0xF00FFF50u: cout << "mTime " << *data << " : " << mTime << endl;
+ }
+ if((addr & 0xFFFFF000) == 0xF5670000){
+ uint32_t t = 0x900FF000 | (addr & 0xFFF);
+ uint32_t old = (*mem.get(t + 3) << 24) | (*mem.get(t + 2) << 16) | (*mem.get(t + 1) << 8) | (*mem.get(t + 0) << 0);
+ old++;
+ *mem.get(t + 0) = old & 0xFF; old >>= 8;
+ *mem.get(t + 1) = old & 0xFF; old >>= 8;
+ *mem.get(t + 2) = old & 0xFF; old >>= 8;
+ *mem.get(t + 3) = old & 0xFF; old >>= 8;
+ }
+ }else{
+ switch(addr){
+ case 0xF00FFF10u:
+ *data = mTime;
+ #ifdef REF_TIME
+ mTime += 100000;
+ #endif
+ break;
+ case 0xF00FFF40u: *data = mTime; break;
+ case 0xF00FFF44u: *data = mTime >> 32; break;
+ case 0xF00FFF48u: *data = mTimeCmp; break;
+ case 0xF00FFF4Cu: *data = mTimeCmp >> 32; break;
+ case 0xF0010004u: *data = ~0; break;
+ }
+ }
+
+ *error = addr == 0xF00FFF60u;
+ Workspace::dBusAccess(addr,wr,size,dataBytes,error);
+ }
+
+
+
+};
+
+
+
+class ZephyrRegression : public WorkspaceRegression{
+public:
+
+
+ uint32_t regFileWriteRefIndex = 0;
+ const char *target = "PROJECT EXECUTION SUCCESSFUL";
+ const char *hit = target;
+
+ ZephyrRegression(string name) : WorkspaceRegression(name) {
+ cout << endl << endl;
+
+ }
+
+ virtual void dutPutChar(char c){
+ if(*hit == c) hit++; else hit = target;
+ if(*hit == 0) {
+ cout << endl << "T=" << i <<endl;
+ cout << endl;
+ pass();
+ }
+ }
+};
+
+
+
+
+
+
+#ifdef IBUS_SIMPLE
+class IBusSimple : public SimElement{
+public:
+ uint32_t pendings[256];
+ uint32_t rPtr = 0, wPtr = 0;
+
+ Workspace *ws;
+ VVexRiscv* top;
+ IBusSimple(Workspace* ws){
+ this->ws = ws;
+ this->top = ws->top;
+ }
+
+ virtual void onReset(){
+ top->iBus_cmd_ready = 1;
+ top->iBus_rsp_valid = 0;
+ }
+
+ virtual void preCycle(){
+ if (top->iBus_cmd_valid && top->iBus_cmd_ready) {
+ //assertEq(top->iBus_cmd_payload_pc & 3,0);
+ pendings[wPtr] = (top->iBus_cmd_payload_pc);
+ wPtr = (wPtr + 1) & 0xFF;
+ //ws->iBusAccess(top->iBus_cmd_payload_pc,&inst_next,&error_next);
+ }
+ }
+ //TODO doesn't catch when instruction removed ?
+ virtual void postCycle(){
+ top->iBus_rsp_valid = 0;
+ if(rPtr != wPtr && (!ws->iStall || VL_RANDOM_I_WIDTH(7) < 100)){
+ uint32_t inst_next;
+ bool error_next;
+ ws->iBusAccess(pendings[rPtr], &inst_next,&error_next);
+ rPtr = (rPtr + 1) & 0xFF;
+ top->iBus_rsp_payload_inst = inst_next;
+ top->iBus_rsp_valid = 1;
+ top->iBus_rsp_payload_error = error_next;
+ } else {
+ top->iBus_rsp_payload_inst = VL_RANDOM_I_WIDTH(32);
+ top->iBus_rsp_payload_error = VL_RANDOM_I_WIDTH(1);
+ }
+ if(ws->iStall) top->iBus_cmd_ready = VL_RANDOM_I_WIDTH(7) < 100;
+ }
+};
+#endif
+
+
+#ifdef IBUS_TC
+
+class IBusTc : public SimElement{
+public:
+
+ uint32_t nextData;
+
+ Workspace *ws;
+ VVexRiscv* top;
+ IBusTc(Workspace* ws){
+ this->ws = ws;
+ this->top = ws->top;
+ }
+
+ virtual void onReset(){
+ }
+
+ virtual void preCycle(){
+ if (top->iBusTc_enable) {
+ if((top->iBusTc_address & 0x70000000) != 0){
+ printf("IBusTc access out of range\n");
+ ws->fail();
+ }
+ bool error_next;
+ ws->iBusAccess(top->iBusTc_address, &nextData,&error_next);
+ }
+ }
+
+ virtual void postCycle(){
+ top->iBusTc_data = nextData;
+ }
+};
+
+#endif
+
+
+#ifdef IBUS_SIMPLE_AVALON
+
+struct IBusSimpleAvalonRsp{
+ uint32_t data;
+ bool error;
+};
+
+
+class IBusSimpleAvalon : public SimElement{
+public:
+ queue<IBusSimpleAvalonRsp> rsps;
+
+ Workspace *ws;
+ VVexRiscv* top;
+ IBusSimpleAvalon(Workspace* ws){
+ this->ws = ws;
+ this->top = ws->top;
+ }
+
+ virtual void onReset(){
+ top->iBusAvalon_waitRequestn = 1;
+ top->iBusAvalon_readDataValid = 0;
+ }
+
+ virtual void preCycle(){
+ if (top->iBusAvalon_read && top->iBusAvalon_waitRequestn) {
+ IBusSimpleAvalonRsp rsp;
+ ws->iBusAccess(top->iBusAvalon_address,&rsp.data,&rsp.error);
+ rsps.push(rsp);
+ }
+ }
+ //TODO doesn't catch when instruction removed ?
+ virtual void postCycle(){
+ if(!rsps.empty() && (!ws->iStall || VL_RANDOM_I_WIDTH(7) < 100)){
+ IBusSimpleAvalonRsp rsp = rsps.front(); rsps.pop();
+ top->iBusAvalon_readDataValid = 1;
+ top->iBusAvalon_readData = rsp.data;
+ top->iBusAvalon_response = rsp.error ? 3 : 0;
+ } else {
+ top->iBusAvalon_readDataValid = 0;
+ top->iBusAvalon_readData = VL_RANDOM_I_WIDTH(32);
+ top->iBusAvalon_response = VL_RANDOM_I_WIDTH(2);
+ }
+ if(ws->iStall)
+ top->iBusAvalon_waitRequestn = VL_RANDOM_I_WIDTH(7) < 100;
+ }
+};
+#endif
+
+
+
+#ifdef IBUS_SIMPLE_AHBLITE3
+class IBusSimpleAhbLite3 : public SimElement{
+public:
+ Workspace *ws;
+ VVexRiscv* top;
+
+ uint32_t iBusAhbLite3_HRDATA;
+ bool iBusAhbLite3_HRESP;
+ bool pending;
+
+ IBusSimpleAhbLite3(Workspace* ws){
+ this->ws = ws;
+ this->top = ws->top;
+ }
+
+ virtual void onReset(){
+ pending = false;
+ top->iBusAhbLite3_HREADY = 1;
+ top->iBusAhbLite3_HRESP = 0;
+ }
+
+ virtual void preCycle(){
+ if (top->iBusAhbLite3_HTRANS == 2 && top->iBusAhbLite3_HREADY && !top->iBusAhbLite3_HWRITE) {
+ ws->iBusAccess(top->iBusAhbLite3_HADDR,&iBusAhbLite3_HRDATA,&iBusAhbLite3_HRESP);
+ pending = true;
+ }
+ }
+
+ virtual void postCycle(){
+ if(ws->iStall)
+ top->iBusAhbLite3_HREADY = (!ws->iStall || VL_RANDOM_I_WIDTH(7) < 100);
+
+ if(pending && top->iBusAhbLite3_HREADY){
+ top->iBusAhbLite3_HRDATA = iBusAhbLite3_HRDATA;
+ top->iBusAhbLite3_HRESP = iBusAhbLite3_HRESP;
+ pending = false;
+ } else {
+ top->iBusAhbLite3_HRDATA = VL_RANDOM_I_WIDTH(32);
+ top->iBusAhbLite3_HRESP = VL_RANDOM_I_WIDTH(1);
+ }
+ }
+};
+#endif
+
+
+#ifdef IBUS_CACHED
+class IBusCached : public SimElement{
+public:
+ bool error_next = false;
+ uint32_t pendingCount = 0;
+ uint32_t address;
+
+ Workspace *ws;
+ VVexRiscv* top;
+ IBusCached(Workspace* ws){
+ this->ws = ws;
+ this->top = ws->top;
+ }
+
+
+ virtual void onReset(){
+ top->iBus_cmd_ready = 1;
+ top->iBus_rsp_valid = 0;
+ }
+
+ virtual void preCycle(){
+ if (top->iBus_cmd_valid && top->iBus_cmd_ready && pendingCount == 0) {
+ assertEq((top->iBus_cmd_payload_address & 3),0);
+ pendingCount = (1 << top->iBus_cmd_payload_size)/4;
+ address = top->iBus_cmd_payload_address;
+ }
+ }
+
+ virtual void postCycle(){
+ bool error;
+ top->iBus_rsp_valid = 0;
+ if(pendingCount != 0 && (!ws->iStall || VL_RANDOM_I_WIDTH(7) < 100)){
+ #ifdef IBUS_TC
+ if((address & 0x70000000) == 0){
+ printf("IBUS_CACHED access out of range\n");
+ ws->fail();
+ }
+ #endif
+ error = false;
+ for(int idx = 0;idx < IBUS_DATA_WIDTH/32;idx++){
+ bool localError = false;
+ ws->iBusAccess(address+idx*4,((uint32_t*)&top->iBus_rsp_payload_data)+idx,&localError);
+ error |= localError;
+ }
+ top->iBus_rsp_payload_error = error;
+ pendingCount-=IBUS_DATA_WIDTH/32;
+ address = address + IBUS_DATA_WIDTH/8;
+ top->iBus_rsp_valid = 1;
+ }
+ if(ws->iStall) top->iBus_cmd_ready = VL_RANDOM_I_WIDTH(7) < 100 && pendingCount == 0;
+ }
+};
+#endif
+
+#ifdef IBUS_CACHED_AVALON
+#include <queue>
+
+struct IBusCachedAvalonTask{
+ uint32_t address;
+ uint32_t pendingCount;
+};
+
+class IBusCachedAvalon : public SimElement{
+public:
+ uint32_t inst_next = VL_RANDOM_I_WIDTH(32);
+ bool error_next = false;
+
+ queue<IBusCachedAvalonTask> tasks;
+ Workspace *ws;
+ VVexRiscv* top;
+
+ IBusCachedAvalon(Workspace* ws){
+ this->ws = ws;
+ this->top = ws->top;
+ }
+
+ virtual void onReset(){
+ top->iBusAvalon_waitRequestn = 1;
+ top->iBusAvalon_readDataValid = 0;
+ }
+
+ virtual void preCycle(){
+ if (top->iBusAvalon_read && top->iBusAvalon_waitRequestn) {
+ assertEq(top->iBusAvalon_address & 3,0);
+ IBusCachedAvalonTask task;
+ task.address = top->iBusAvalon_address;
+ task.pendingCount = top->iBusAvalon_burstCount;
+ tasks.push(task);
+ }
+ }
+
+ virtual void postCycle(){
+ bool error;
+ top->iBusAvalon_readDataValid = 0;
+ if(!tasks.empty() && (!ws->iStall || VL_RANDOM_I_WIDTH(7) < 100)){
+ uint32_t &address = tasks.front().address;
+ uint32_t &pendingCount = tasks.front().pendingCount;
+ bool error;
+ ws->iBusAccess(address,&top->iBusAvalon_readData,&error);
+ top->iBusAvalon_response = error ? 3 : 0;
+ pendingCount--;
+ address = (address & ~0x1F) + ((address + 4) & 0x1F);
+ top->iBusAvalon_readDataValid = 1;
+ if(pendingCount == 0)
+ tasks.pop();
+ }
+ if(ws->iStall)
+ top->iBusAvalon_waitRequestn = VL_RANDOM_I_WIDTH(7) < 100;
+ }
+};
+#endif
+
+
+#if defined(IBUS_CACHED_WISHBONE) || defined(IBUS_SIMPLE_WISHBONE)
+#include <queue>
+
+class IBusCachedWishbone : public SimElement{
+public:
+
+ Workspace *ws;
+ VVexRiscv* top;
+
+ IBusCachedWishbone(Workspace* ws){
+ this->ws = ws;
+ this->top = ws->top;
+ }
+
+ virtual void onReset(){
+ top->iBusWishbone_ACK = !ws->iStall;
+ top->iBusWishbone_ERR = 0;
+ }
+
+ virtual void preCycle(){
+
+ }
+
+ virtual void postCycle(){
+
+ if(ws->iStall)
+ top->iBusWishbone_ACK = VL_RANDOM_I_WIDTH(7) < 100;
+
+ top->iBusWishbone_DAT_MISO = VL_RANDOM_I_WIDTH(32);
+ if (top->iBusWishbone_CYC && top->iBusWishbone_STB && top->iBusWishbone_ACK) {
+ if(top->iBusWishbone_WE){
+
+ } else {
+ bool error;
+ ws->iBusAccess(top->iBusWishbone_ADR << 2,&top->iBusWishbone_DAT_MISO,&error);
+ top->iBusWishbone_ERR = error;
+ }
+ }
+ }
+};
+#endif
+
+
+#ifdef DBUS_SIMPLE
+class DBusSimple : public SimElement{
+public:
+ uint32_t data_next = VL_RANDOM_I_WIDTH(32);
+ bool error_next = false;
+ bool pending = false;
+
+ Workspace *ws;
+ VVexRiscv* top;
+ DBusSimple(Workspace* ws){
+ this->ws = ws;
+ this->top = ws->top;
+ }
+
+ virtual void onReset(){
+ top->dBus_cmd_ready = 1;
+ top->dBus_rsp_ready = 1;
+ }
+
+ virtual void preCycle(){
+ if (top->dBus_cmd_valid && top->dBus_cmd_ready) {
+ pending = true;
+ data_next = top->dBus_cmd_payload_data;
+ ws->dBusAccess(top->dBus_cmd_payload_address,top->dBus_cmd_payload_wr,1 << top->dBus_cmd_payload_size,((uint8_t*)&data_next) + (top->dBus_cmd_payload_address & 3),&error_next);
+ }
+ }
+
+ virtual void postCycle(){
+ top->dBus_rsp_ready = 0;
+ if(pending && (!ws->dStall || VL_RANDOM_I_WIDTH(7) < 100)){
+ pending = false;
+ top->dBus_rsp_ready = 1;
+ top->dBus_rsp_data = data_next;
+ top->dBus_rsp_error = error_next;
+ } else{
+ top->dBus_rsp_data = VL_RANDOM_I_WIDTH(32);
+ }
+
+ if(ws->dStall) top->dBus_cmd_ready = VL_RANDOM_I_WIDTH(7) < 100 && !pending;
+ }
+};
+#endif
+
+#ifdef DBUS_SIMPLE_AVALON
+#include <queue>
+struct DBusSimpleAvalonRsp{
+ uint32_t data;
+ bool error;
+};
+
+
+class DBusSimpleAvalon : public SimElement{
+public:
+ queue<DBusSimpleAvalonRsp> rsps;
+
+ Workspace *ws;
+ VVexRiscv* top;
+ DBusSimpleAvalon(Workspace* ws){
+ this->ws = ws;
+ this->top = ws->top;
+ }
+
+ virtual void onReset(){
+ top->dBusAvalon_waitRequestn = 1;
+ top->dBusAvalon_readDataValid = 0;
+ }
+
+ virtual void preCycle(){
+ if (top->dBusAvalon_write && top->dBusAvalon_waitRequestn) {
+ bool dummy;
+ ws->dBusAccess(top->dBusAvalon_address,1,2,top->dBusAvalon_byteEnable,&top->dBusAvalon_writeData,&dummy);
+ }
+ if (top->dBusAvalon_read && top->dBusAvalon_waitRequestn) {
+ DBusSimpleAvalonRsp rsp;
+ ws->dBusAccess(top->dBusAvalon_address,0,2,0xF,&rsp.data,&rsp.error);
+ rsps.push(rsp);
+ }
+ }
+ //TODO doesn't catch when instruction removed ?
+ virtual void postCycle(){
+ if(!rsps.empty() && (!ws->iStall || VL_RANDOM_I_WIDTH(7) < 100)){
+ DBusSimpleAvalonRsp rsp = rsps.front(); rsps.pop();
+ top->dBusAvalon_readDataValid = 1;
+ top->dBusAvalon_readData = rsp.data;
+ top->dBusAvalon_response = rsp.error ? 3 : 0;
+ } else {
+ top->dBusAvalon_readDataValid = 0;
+ top->dBusAvalon_readData = VL_RANDOM_I_WIDTH(32);
+ top->dBusAvalon_response = VL_RANDOM_I_WIDTH(2);
+ }
+ if(ws->iStall)
+ top->dBusAvalon_waitRequestn = VL_RANDOM_I_WIDTH(7) < 100;
+ }
+};
+#endif
+
+
+
+#ifdef DBUS_SIMPLE_AHBLITE3
+class DBusSimpleAhbLite3 : public SimElement{
+public:
+ Workspace *ws;
+ VVexRiscv* top;
+
+ uint32_t dBusAhbLite3_HADDR, dBusAhbLite3_HSIZE, dBusAhbLite3_HTRANS, dBusAhbLite3_HWRITE;
+
+ DBusSimpleAhbLite3(Workspace* ws){
+ this->ws = ws;
+ this->top = ws->top;
+ }
+
+ virtual void onReset(){
+ top->dBusAhbLite3_HREADY = 1;
+ top->dBusAhbLite3_HRESP = 0;
+ dBusAhbLite3_HTRANS = 0;
+ }
+
+ virtual void preCycle(){
+ if(top->dBusAhbLite3_HREADY && dBusAhbLite3_HTRANS == 2 && dBusAhbLite3_HWRITE){
+ uint32_t data = top->dBusAhbLite3_HWDATA;
+ bool error;
+ ws->dBusAccess(dBusAhbLite3_HADDR, 1, dBusAhbLite3_HSIZE, ((1 << (1 << dBusAhbLite3_HSIZE))-1) << (dBusAhbLite3_HADDR & 0x3),&data,&error);
+ }
+
+ if(top->dBusAhbLite3_HREADY){
+ dBusAhbLite3_HADDR = top->dBusAhbLite3_HADDR ;
+ dBusAhbLite3_HSIZE = top->dBusAhbLite3_HSIZE ;
+ dBusAhbLite3_HTRANS = top->dBusAhbLite3_HTRANS ;
+ dBusAhbLite3_HWRITE = top->dBusAhbLite3_HWRITE ;
+ }
+ }
+
+ virtual void postCycle(){
+ if(ws->iStall)
+ top->dBusAhbLite3_HREADY = (!ws->iStall || VL_RANDOM_I_WIDTH(7) < 100);
+
+ top->dBusAhbLite3_HRDATA = VL_RANDOM_I_WIDTH(32);
+ top->dBusAhbLite3_HRESP = VL_RANDOM_I_WIDTH(1);
+
+ if(top->dBusAhbLite3_HREADY && dBusAhbLite3_HTRANS == 2 && !dBusAhbLite3_HWRITE){
+
+ bool error;
+ ws->dBusAccess(dBusAhbLite3_HADDR, 0, dBusAhbLite3_HSIZE, ((1 << (1 << dBusAhbLite3_HSIZE))-1) << (dBusAhbLite3_HADDR & 0x3),&top->dBusAhbLite3_HRDATA,&error);
+ top->dBusAhbLite3_HRESP = error;
+ }
+ }
+};
+#endif
+
+
+#if defined(DBUS_CACHED_WISHBONE) || defined(DBUS_SIMPLE_WISHBONE)
+#include <queue>
+
+
+class DBusCachedWishbone : public SimElement{
+public:
+
+ Workspace *ws;
+ VVexRiscv* top;
+
+ DBusCachedWishbone(Workspace* ws){
+ this->ws = ws;
+ this->top = ws->top;
+ }
+
+ virtual void onReset(){
+ top->dBusWishbone_ACK = !ws->iStall;
+ top->dBusWishbone_ERR = 0;
+ }
+
+ virtual void preCycle(){
+
+ }
+
+ virtual void postCycle(){
+ if(ws->iStall)
+ top->dBusWishbone_ACK = VL_RANDOM_I_WIDTH(7) < 100;
+ top->dBusWishbone_DAT_MISO = VL_RANDOM_I_WIDTH(32);
+ if (top->dBusWishbone_CYC && top->dBusWishbone_STB && top->dBusWishbone_ACK) {
+ if(top->dBusWishbone_WE){
+ bool dummy;
+ ws->dBusAccess(top->dBusWishbone_ADR << 2 ,1,2,top->dBusWishbone_SEL,&top->dBusWishbone_DAT_MOSI,&dummy);
+ } else {
+ bool error;
+ ws->dBusAccess(top->dBusWishbone_ADR << 2,0,2,0xF,&top->dBusWishbone_DAT_MISO,&error);
+ top->dBusWishbone_ERR = error;
+ }
+ }
+ }
+};
+#endif
+
+#ifdef DBUS_CACHED
+
+//#include "VVexRiscv_DataCache.h"
+#include <queue>
+
+struct DBusCachedTask{
+ char data[DBUS_LOAD_DATA_WIDTH/8];
+ bool error;
+ bool last;
+ bool exclusive;
+};
+
+class DBusCached : public SimElement{
+public:
+ queue<DBusCachedTask> rsps;
+ queue<uint32_t> invalidationHint;
+
+ bool reservationValid = false;
+ uint32_t reservationAddress;
+ uint32_t pendingSync = 0;
+
+ Workspace *ws;
+ VVexRiscv* top;
+ DBusCachedTask rsp;
+
+ DBusCached(Workspace* ws){
+ this->ws = ws;
+ this->top = ws->top;
+ }
+
+ virtual void onReset(){
+ top->dBus_cmd_ready = 1;
+ top->dBus_rsp_valid = 0;
+ #ifdef DBUS_AGGREGATION
+ top->dBus_rsp_payload_aggregated = 0;
+ #endif
+ #ifdef DBUS_INVALIDATE
+ top->dBus_inv_valid = 0;
+ top->dBus_ack_ready = 0;
+ top->dBus_sync_valid = 0;
+ #ifdef DBUS_AGGREGATION
+ top->dBus_sync_payload_aggregated = 0;
+ #endif
+ #endif
+ }
+
+ virtual void preCycle(){
+ if (top->dBus_cmd_valid && top->dBus_cmd_ready) {
+ if(top->dBus_cmd_payload_wr){
+ int size = 1 << top->dBus_cmd_payload_size;
+ #ifdef DBUS_INVALIDATE
+ pendingSync += 1;
+ #endif
+ #ifndef DBUS_EXCLUSIVE
+ bool error;
+ int shift = top->dBus_cmd_payload_address & (DBUS_STORE_DATA_WIDTH/8-1);
+ ws->dBusAccess(top->dBus_cmd_payload_address,1,size,((uint8_t*)&top->dBus_cmd_payload_data) + shift,&error);
+ #else
+ bool cancel = false, error = false;
+ if(top->dBus_cmd_payload_exclusive){
+ bool hit = reservationValid && reservationAddress == top->dBus_cmd_payload_address;
+ rsp.exclusive = hit;
+ cancel = !hit;
+ }
+ if(!cancel) {
+ for(int idx = 0;idx < 1;idx++){
+ bool localError = false;
+ int shift = top->dBus_cmd_payload_address & (DBUS_STORE_DATA_WIDTH/8-1);
+ ws->dBusAccess(top->dBus_cmd_payload_address,1,size,((uint8_t*)&top->dBus_cmd_payload_data) + shift,&localError);
+ error |= localError;
+ }
+ }
+
+ reservationValid = false;
+ rsp.last = true;
+ rsp.error = error;
+ rsps.push(rsp);
+ #endif
+ } else {
+ bool error = false;
+ uint32_t beatCount = (((1 << top->dBus_cmd_payload_size)*8+DBUS_LOAD_DATA_WIDTH-1) / DBUS_LOAD_DATA_WIDTH)-1;
+ uint32_t startAt = top->dBus_cmd_payload_address;
+ uint32_t endAt = top->dBus_cmd_payload_address + (1 << top->dBus_cmd_payload_size);
+ uint32_t address = top->dBus_cmd_payload_address & ~(DBUS_LOAD_DATA_WIDTH/8-1);
+ uint8_t buffer[64];
+ ws->dBusAccess(top->dBus_cmd_payload_address,0,1 << top->dBus_cmd_payload_size,buffer, &error);
+ for(int beat = 0;beat <= beatCount;beat++){
+ for(int i = 0;i < DBUS_LOAD_DATA_WIDTH/8;i++){
+ rsp.data[i] = (address >= startAt && address < endAt) ? buffer[address-top->dBus_cmd_payload_address] : VL_RANDOM_I_WIDTH(8);
+ address += 1;
+ }
+ rsp.last = beat == beatCount;
+ #ifdef DBUS_EXCLUSIVE
+ if(top->dBus_cmd_payload_exclusive){
+ rsp.exclusive = true;
+ reservationValid = true;
+ reservationAddress = top->dBus_cmd_payload_address;
+ }
+ #endif
+ rsp.error = error;
+ rsps.push(rsp);
+ }
+
+ #ifdef DBUS_INVALIDATE
+ if(ws->allowInvalidate){
+ if(VL_RANDOM_I_WIDTH(7) < 10){
+ invalidationHint.push(top->dBus_cmd_payload_address + VL_RANDOM_I_WIDTH(5));
+ }
+ }
+ #endif
+ }
+ }
+ #ifdef DBUS_INVALIDATE
+ if(top->dBus_sync_valid && top->dBus_sync_ready){
+ pendingSync -= 1;
+ }
+ #endif
+ }
+
+ virtual void postCycle(){
+
+ if(!rsps.empty() && (!ws->dStall || VL_RANDOM_I_WIDTH(7) < 100)){
+ DBusCachedTask rsp = rsps.front();
+ rsps.pop();
+ top->dBus_rsp_valid = 1;
+ top->dBus_rsp_payload_error = rsp.error;
+ for(int idx = 0;idx < DBUS_LOAD_DATA_WIDTH/32;idx++){
+ ((uint32_t*)&top->dBus_rsp_payload_data)[idx] = ((uint32_t*)rsp.data)[idx];
+ }
+ top->dBus_rsp_payload_last = rsp.last;
+ #ifdef DBUS_EXCLUSIVE
+ top->dBus_rsp_payload_exclusive = rsp.exclusive;
+ #endif
+ } else{
+ top->dBus_rsp_valid = 0;
+ for(int idx = 0;idx < DBUS_LOAD_DATA_WIDTH/32;idx++){
+ ((uint32_t*)&top->dBus_rsp_payload_data)[idx] = VL_RANDOM_I_WIDTH(32);
+ }
+ top->dBus_rsp_payload_error = VL_RANDOM_I_WIDTH(1);
+ top->dBus_rsp_payload_last = VL_RANDOM_I_WIDTH(1);
+ #ifdef DBUS_EXCLUSIVE
+ top->dBus_rsp_payload_exclusive = VL_RANDOM_I_WIDTH(1);
+ #endif
+ }
+ top->dBus_cmd_ready = (ws->dStall ? VL_RANDOM_I_WIDTH(7) < 100 : 1);
+
+ #ifdef DBUS_INVALIDATE
+ if(ws->allowInvalidate){
+ if(top->dBus_inv_ready) top->dBus_inv_valid = 0;
+ if(top->dBus_inv_valid == 0 && VL_RANDOM_I_WIDTH(7) < 5){
+ top->dBus_inv_valid = 1;
+ top->dBus_inv_payload_fragment_enable = VL_RANDOM_I_WIDTH(7) < 100;
+ if(!invalidationHint.empty()){
+ top->dBus_inv_payload_fragment_address = invalidationHint.front();
+ invalidationHint.pop();
+ } else {
+ top->dBus_inv_payload_fragment_address = VL_RANDOM_I_WIDTH(32);
+ }
+ }
+ }
+ top->dBus_ack_ready = (ws->dStall ? VL_RANDOM_I_WIDTH(7) < 100 : 1);
+ if(top->dBus_sync_ready) top->dBus_sync_valid = 0;
+ if(top->dBus_sync_valid == 0 && pendingSync != 0 && (ws->dStall ? VL_RANDOM_I_WIDTH(7) < 80 : 1) ){
+ top->dBus_sync_valid = 1;
+ }
+ #endif
+
+ }
+};
+#endif
+
+#ifdef DBUS_CACHED_AVALON
+#include <queue>
+
+struct DBusCachedAvalonTask{
+ uint32_t data;
+ bool error;
+};
+
+class DBusCachedAvalon : public SimElement{
+public:
+ uint32_t beatCounter = 0;
+ queue<DBusCachedAvalonTask> rsps;
+
+ Workspace *ws;
+ VVexRiscv* top;
+ DBusCachedAvalon(Workspace* ws){
+ this->ws = ws;
+ this->top = ws->top;
+ }
+
+ virtual void onReset(){
+ top->dBusAvalon_waitRequestn = 1;
+ top->dBusAvalon_readDataValid = 0;
+ }
+
+
+ virtual void preCycle(){
+ if ((top->dBusAvalon_read || top->dBusAvalon_write) && top->dBusAvalon_waitRequestn) {
+ if(top->dBusAvalon_write){
+ uint32_t size = __builtin_popcount(top->dBusAvalon_byteEnable);
+ uint32_t offset = ffs(top->dBusAvalon_byteEnable)-1;
+ bool error_next = false;
+ ws->dBusAccess(top->dBusAvalon_address + beatCounter * 4 + offset,1,size,((uint8_t*)&top->dBusAvalon_writeData)+offset,&error_next);
+ beatCounter++;
+ if(beatCounter == top->dBusAvalon_burstCount){
+ beatCounter = 0;
+ }
+ } else {
+ for(int beat = 0;beat < top->dBusAvalon_burstCount;beat++){
+ DBusCachedAvalonTask rsp;
+ ws->dBusAccess(top->dBusAvalon_address + beat * 4 ,0,4,((uint8_t*)&rsp.data),&rsp.error);
+ rsps.push(rsp);
+ }
+ }
+ }
+ }
+
+ virtual void postCycle(){
+ if(!rsps.empty() && (!ws->dStall || VL_RANDOM_I_WIDTH(7) < 100)){
+ DBusCachedAvalonTask rsp = rsps.front();
+ rsps.pop();
+ top->dBusAvalon_response = rsp.error ? 3 : 0;
+ top->dBusAvalon_readData = rsp.data;
+ top->dBusAvalon_readDataValid = 1;
+ } else{
+ top->dBusAvalon_readDataValid = 0;
+ top->dBusAvalon_readData = VL_RANDOM_I_WIDTH(32);
+ top->dBusAvalon_response = VL_RANDOM_I_WIDTH(2); //TODO
+ }
+
+ top->dBusAvalon_waitRequestn = (ws->dStall ? VL_RANDOM_I_WIDTH(7) < 100 : 1);
+ }
+};
+#endif
+
+
+#ifdef DEBUG_PLUGIN
+#include <stdio.h>
+#include <sys/socket.h>
+#include <netinet/in.h>
+#include <string.h>
+#include <arpa/inet.h>
+#include <fcntl.h>
+#include <sys/ioctl.h>
+#include <netinet/tcp.h>
+
+/** Returns true on success, or false if there was an error */
+bool SetSocketBlockingEnabled(int fd, bool blocking)
+{
+ if (fd < 0) return false;
+
+#ifdef WIN32
+ unsigned long mode = blocking ? 0 : 1;
+ return (ioctlsocket(fd, FIONBIO, &mode) == 0) ? true : false;
+#else
+ int flags = fcntl(fd, F_GETFL, 0);
+ if (flags < 0) return false;
+ flags = blocking ? (flags&~O_NONBLOCK) : (flags|O_NONBLOCK);
+ return (fcntl(fd, F_SETFL, flags) == 0) ? true : false;
+#endif
+}
+
+struct DebugPluginTask{
+ bool wr;
+ uint32_t address;
+ uint32_t data;
+};
+
+class DebugPlugin : public SimElement{
+public:
+ Workspace *ws;
+ VVexRiscv* top;
+
+ int serverSocket, clientHandle;
+ struct sockaddr_in serverAddr;
+ struct sockaddr_storage serverStorage;
+ socklen_t addr_size;
+ char buffer[1024];
+ uint32_t timeSpacer = 0;
+ bool taskValid = false;
+ DebugPluginTask task;
+
+
+ DebugPlugin(Workspace* ws){
+ this->ws = ws;
+ this->top = ws->top;
+
+ #ifdef DEBUG_PLUGIN_EXTERNAL
+ ws->mTimeCmp = ~0;
+ #endif
+ top->debugReset = 0;
+
+
+
+ //---- Create the socket. The three arguments are: ----//
+ // 1) Internet domain 2) Stream socket 3) Default protocol (TCP in this case) //
+ serverSocket = socket(PF_INET, SOCK_STREAM, 0);
+ assert(serverSocket != -1);
+ SetSocketBlockingEnabled(serverSocket,0);
+ int flag = 1;
+ int result = setsockopt(serverSocket, /* socket affected */
+ IPPROTO_TCP, /* set option at TCP level */
+ TCP_NODELAY, /* name of option */
+ (char *) &flag, /* the cast is historical
+ cruft */
+ sizeof(int)); /* length of option value */
+
+ //---- Configure settings of the server address struct ----//
+ // Address family = Internet //
+ serverAddr.sin_family = AF_INET;
+ // Set port number, using htons function to use proper byte order //
+ serverAddr.sin_port = htons(7893);
+ // Set IP address to localhost //
+ serverAddr.sin_addr.s_addr = inet_addr("127.0.0.1");
+ // Set all bits of the padding field to 0 //
+ memset(serverAddr.sin_zero, '\0', sizeof serverAddr.sin_zero);
+
+ //---- Bind the address struct to the socket ----//
+ bind(serverSocket, (struct sockaddr *) &serverAddr, sizeof(serverAddr));
+
+ //---- Listen on the socket, with 5 max connection requests queued ----//
+ listen(serverSocket,1);
+
+ //---- Accept call creates a new socket for the incoming connection ----//
+ addr_size = sizeof serverStorage;
+
+ clientHandle = -1;
+ }
+
+ virtual ~DebugPlugin(){
+ if(clientHandle != -1) {
+ shutdown(clientHandle,SHUT_RDWR);
+ usleep(100);
+ }
+ if(serverSocket != -1) {
+ close(serverSocket);
+ usleep(100);
+ }
+ }
+
+ virtual void onReset(){
+ top->debugReset = 1;
+ }
+
+
+
+ virtual void postReset(){
+ top->debugReset = 0;
+ }
+
+ void connectionReset(){
+ printf("CONNECTION RESET\n");
+ shutdown(clientHandle,SHUT_RDWR);
+ clientHandle = -1;
+ }
+
+
+ virtual void preCycle(){
+
+ }
+
+ virtual void postCycle(){
+ top->reset = top->debug_resetOut;
+ if(timeSpacer == 0){
+ if(clientHandle == -1){
+ clientHandle = accept(serverSocket, (struct sockaddr *) &serverStorage, &addr_size);
+ if(clientHandle != -1)
+ printf("CONNECTED\n");
+ timeSpacer = 1000;
+ }
+
+
+ if(clientHandle != -1 && taskValid == false){
+ int requiredSize = 1 + 1 + 4 + 4;
+ int n;
+ timeSpacer = 20;
+ if(ioctl(clientHandle,FIONREAD,&n) != 0){
+ connectionReset();
+ } else if(n >= requiredSize){
+ if(requiredSize != read(clientHandle,buffer,requiredSize)){
+ connectionReset();
+ } else {
+ bool wr = buffer[0];
+ uint32_t size = buffer[1];
+ uint32_t address = *((uint32_t*)(buffer + 2));
+ uint32_t data = *((uint32_t*)(buffer + 6));
+
+ if((address & ~ 0x4) == 0xF00F0000){
+ assert(size == 2);
+ timeSpacer = 100;
+
+ taskValid = true;
+ task.wr = wr;
+ task.address = address;
+ task.data = data;
+ }
+ }
+ } else {
+ int error = 0;
+ socklen_t len = sizeof (error);
+ int retval = getsockopt (clientHandle, SOL_SOCKET, SO_ERROR, &error, &len);
+ if (retval != 0 || error != 0) {
+ connectionReset();
+ }
+ }
+ }
+ } else {
+ timeSpacer--;
+ }
+ }
+
+ void sendRsp(uint32_t data){
+ if(clientHandle != -1){
+ if(send(clientHandle,&data,4,0) == -1) connectionReset();
+ }
+ }
+};
+#endif
+
+#ifdef DEBUG_PLUGIN_STD
+class DebugPluginStd : public DebugPlugin{
+public:
+ DebugPluginStd(Workspace* ws) : DebugPlugin(ws){
+
+ }
+
+ virtual void onReset(){
+ DebugPlugin::onReset();
+ top->debug_bus_cmd_valid = 0;
+ }
+
+ bool rspFire = false;
+
+ virtual void preCycle(){
+ DebugPlugin::preCycle();
+
+ if(rspFire){
+ sendRsp(top->debug_bus_rsp_data);
+ rspFire = false;
+ }
+
+ if(top->debug_bus_cmd_valid && top->debug_bus_cmd_ready){
+ taskValid = false;
+ if(!top->debug_bus_cmd_payload_wr){
+ rspFire = true;
+ }
+ }
+ }
+
+ virtual void postCycle(){
+ DebugPlugin::postCycle();
+
+ if(taskValid){
+ top->debug_bus_cmd_valid = 1;
+ top->debug_bus_cmd_payload_wr = task.wr;
+ top->debug_bus_cmd_payload_address = task.address;
+ top->debug_bus_cmd_payload_data = task.data;
+ }else {
+ top->debug_bus_cmd_valid = 0;
+ top->debug_bus_cmd_payload_wr = VL_RANDOM_I_WIDTH(1);
+ top->debug_bus_cmd_payload_address = VL_RANDOM_I_WIDTH(8);
+ top->debug_bus_cmd_payload_data = VL_RANDOM_I_WIDTH(32);
+ }
+ }
+};
+
+#endif
+
+#ifdef DEBUG_PLUGIN_AVALON
+class DebugPluginAvalon : public DebugPlugin{
+public:
+ DebugPluginAvalon(Workspace* ws) : DebugPlugin(ws){
+
+ }
+
+ virtual void onReset(){
+ DebugPlugin::onReset();
+ top->debugBusAvalon_read = 0;
+ top->debugBusAvalon_write = 0;
+ }
+
+ bool rspFire = false;
+
+ virtual void preCycle(){
+ DebugPlugin::preCycle();
+
+ if(rspFire){
+ sendRsp(top->debugBusAvalon_readData);
+ rspFire = false;
+ }
+
+ if((top->debugBusAvalon_read || top->debugBusAvalon_write) && top->debugBusAvalon_waitRequestn){
+ taskValid = false;
+ if(top->debugBusAvalon_read){
+ rspFire = true;
+ }
+ }
+ }
+
+ virtual void postCycle(){
+ DebugPlugin::postCycle();
+
+ if(taskValid){
+ top->debugBusAvalon_write = task.wr;
+ top->debugBusAvalon_read = !task.wr;
+ top->debugBusAvalon_address = task.address;
+ top->debugBusAvalon_writeData = task.data;
+ }else {
+ top->debugBusAvalon_write = 0;
+ top->debugBusAvalon_read = 0;
+ top->debugBusAvalon_address = VL_RANDOM_I_WIDTH(8);
+ top->debugBusAvalon_writeData = VL_RANDOM_I_WIDTH(32);
+ }
+ }
+};
+
+#endif
+
+void Workspace::fillSimELements(){
+ #ifdef IBUS_SIMPLE
+ simElements.push_back(new IBusSimple(this));
+ #endif
+ #ifdef IBUS_SIMPLE_AVALON
+ simElements.push_back(new IBusSimpleAvalon(this));
+ #endif
+ #ifdef IBUS_SIMPLE_AHBLITE3
+ simElements.push_back(new IBusSimpleAhbLite3(this));
+ #endif
+
+
+ #ifdef IBUS_CACHED
+ simElements.push_back(new IBusCached(this));
+ #endif
+ #ifdef IBUS_CACHED_AVALON
+ simElements.push_back(new IBusCachedAvalon(this));
+ #endif
+ #if defined(IBUS_CACHED_WISHBONE) || defined(IBUS_SIMPLE_WISHBONE)
+ simElements.push_back(new IBusCachedWishbone(this));
+ #endif
+
+ #ifdef IBUS_TC
+ simElements.push_back(new IBusTc(this));
+ #endif
+
+ #ifdef DBUS_SIMPLE
+ simElements.push_back(new DBusSimple(this));
+ #endif
+ #ifdef DBUS_SIMPLE_AVALON
+ simElements.push_back(new DBusSimpleAvalon(this));
+ #endif
+ #ifdef DBUS_SIMPLE_AHBLITE3
+ simElements.push_back(new DBusSimpleAhbLite3(this));
+ #endif
+ #ifdef DBUS_CACHED
+ simElements.push_back(new DBusCached(this));
+ #endif
+ #ifdef DBUS_CACHED_AVALON
+ simElements.push_back(new DBusCachedAvalon(this));
+ #endif
+ #if defined(DBUS_CACHED_WISHBONE) || defined(DBUS_SIMPLE_WISHBONE)
+ simElements.push_back(new DBusCachedWishbone(this));
+ #endif
+ #ifdef DEBUG_PLUGIN_STD
+ simElements.push_back(new DebugPluginStd(this));
+ #endif
+ #ifdef DEBUG_PLUGIN_AVALON
+ simElements.push_back(new DebugPluginAvalon(this));
+ #endif
+}
+
+mutex Workspace::staticMutex;
+uint64_t Workspace::cycles = 0;
+uint32_t Workspace::testsCounter = 0, Workspace::successCounter = 0;
+
+#ifndef REF
+#define testA1ReagFileWriteRef {1,10},{2,20},{3,40},{4,60}
+#define testA2ReagFileWriteRef {5,1},{7,3}
+uint32_t regFileWriteRefArray[][2] = {
+ testA1ReagFileWriteRef,
+ testA1ReagFileWriteRef,
+ testA2ReagFileWriteRef,
+ testA2ReagFileWriteRef
+};
+
+class TestA : public WorkspaceRegression{
+public:
+
+
+ uint32_t regFileWriteRefIndex = 0;
+
+ TestA() : WorkspaceRegression("testA") {
+ loadHex(string(REGRESSION_PATH) + "../../resources/hex/testA.hex");
+ }
+
+ virtual void checks(){
+ if(top->VexRiscv->lastStageRegFileWrite_valid == 1 && top->VexRiscv->lastStageRegFileWrite_payload_address != 0){
+ assertEq(top->VexRiscv->lastStageRegFileWrite_payload_address, regFileWriteRefArray[regFileWriteRefIndex][0]);
+ assertEq(top->VexRiscv->lastStageRegFileWrite_payload_data, regFileWriteRefArray[regFileWriteRefIndex][1]);
+ //printf("%d\n",i);
+
+ regFileWriteRefIndex++;
+ if(regFileWriteRefIndex == sizeof(regFileWriteRefArray)/sizeof(regFileWriteRefArray[0])){
+ pass();
+ }
+ }
+ }
+};
+
+class TestX28 : public WorkspaceRegression{
+public:
+ uint32_t refIndex = 0;
+ uint32_t *ref;
+ uint32_t refSize;
+
+ TestX28(string name, uint32_t *ref, uint32_t refSize) : WorkspaceRegression(name) {
+ this->ref = ref;
+ this->refSize = refSize;
+ loadHex(string(REGRESSION_PATH) + "../../resources/hex/" + name + ".hex");
+ }
+
+ virtual void checks(){
+ if(top->VexRiscv->lastStageRegFileWrite_valid == 1 && top->VexRiscv->lastStageRegFileWrite_payload_address == 28){
+ assertEq(top->VexRiscv->lastStageRegFileWrite_payload_data, ref[refIndex]);
+ //printf("%d\n",i);
+
+ refIndex++;
+ if(refIndex == refSize){
+ pass();
+ }
+ }
+ }
+};
+
+
+class RiscvTest : public WorkspaceRegression{
+public:
+ RiscvTest(string name) : WorkspaceRegression(name) {
+ loadHex(string(REGRESSION_PATH) + "../../resources/hex/" + name + ".hex");
+ bootAt(0x800000bcu);
+ }
+
+ virtual void postReset() {
+// #ifdef CSR
+// top->VexRiscv->prefetch_PcManagerSimplePlugin_pcReg = 0x80000000u;
+// #else
+// #endif
+ }
+
+ virtual void checks(){
+ if(top->VexRiscv->lastStageIsFiring && top->VexRiscv->lastStageInstruction == 0x00000013){
+ uint32_t instruction;
+ bool error;
+ Workspace::mem.read(top->VexRiscv->lastStagePc, 4, (uint8_t*)&instruction);
+ //printf("%x => %x\n", top->VexRiscv->lastStagePc, instruction );
+ if(instruction == 0x00000073){
+ uint32_t code = top->VexRiscv->RegFilePlugin_regFile[28];
+ uint32_t code2 = top->VexRiscv->RegFilePlugin_regFile[3];
+ if((code & 1) == 0 && (code2 & 1) == 0){
+ cout << "Wrong error code"<< endl;
+ fail();
+ }
+ if(code == 1 || code2 == 1){
+ pass();
+ }else{
+ cout << "Error code " << code2/2 << endl;
+ fail();
+ }
+ }
+ }
+ }
+
+ virtual void iBusAccess(uint32_t addr, uint32_t *data, bool *error){
+ WorkspaceRegression::iBusAccess(addr,data,error);
+ if(*data == 0x0ff0000f) *data = 0x00000013;
+ if(*data == 0x00000073) *data = 0x00000013;
+ }
+};
+#endif
+class Dhrystone : public WorkspaceRegression{
+public:
+ string hexName;
+ Dhrystone(string name,string hexName,bool iStall, bool dStall) : WorkspaceRegression(name) {
+ setIStall(iStall);
+ setDStall(dStall);
+ withRiscvRef();
+ loadHex(string(REGRESSION_PATH) + "../../resources/hex/" + hexName + ".hex");
+ this->hexName = hexName;
+ }
+
+ virtual void checks(){
+
+ }
+
+ virtual void pass(){
+ FILE *refFile = fopen((hexName + ".logRef").c_str(), "r");
+ fseek(refFile, 0, SEEK_END);
+ uint32_t refSize = ftell(refFile);
+ fseek(refFile, 0, SEEK_SET);
+ char* ref = new char[refSize];
+ fread(ref, 1, refSize, refFile);
+ fclose(refFile);
+
+
+ logTraces.flush();
+ logTraces.close();
+
+ FILE *logFile = fopen((name + ".logTrace").c_str(), "r");
+ fseek(logFile, 0, SEEK_END);
+ uint32_t logSize = ftell(logFile);
+ fseek(logFile, 0, SEEK_SET);
+ char* log = new char[logSize];
+ fread(log, 1, logSize, logFile);
+ fclose(logFile);
+
+ if(refSize > logSize || memcmp(log,ref,refSize))
+ fail();
+ else
+ Workspace::pass();
+ }
+};
+
+class Compliance : public WorkspaceRegression{
+public:
+ string name;
+ ofstream out32;
+ int out32Counter = 0;
+ Compliance(string name) : WorkspaceRegression(name) {
+ withRiscvRef();
+ loadHex(string(REGRESSION_PATH) + "../../resources/hex/" + name + ".elf.hex");
+ out32.open (name + ".out32");
+ this->name = name;
+ }
+
+
+ virtual void dBusAccess(uint32_t addr,bool wr, uint32_t size, uint8_t *dataBytes, bool *error) {
+ if(wr && addr == 0xF00FFF2C){
+ uint32_t *data = (uint32_t*)dataBytes;
+ out32 << hex << setw(8) << std::setfill('0') << *data << dec;
+ if(++out32Counter % 4 == 0) out32 << "\n";
+ }
+ WorkspaceRegression::dBusAccess(addr,wr,size,dataBytes,error);
+ }
+
+ virtual void checks(){
+
+ }
+
+
+
+ virtual void pass(){
+ FILE *refFile = fopen((string(REGRESSION_PATH) + string("../../resources/ref/") + name + ".reference_output").c_str(), "r");
+ fseek(refFile, 0, SEEK_END);
+ uint32_t refSize = ftell(refFile);
+ fseek(refFile, 0, SEEK_SET);
+ char* ref = new char[refSize];
+ fread(ref, 1, refSize, refFile);
+ fclose(refFile);
+
+
+ out32.flush();
+ out32.close();
+
+ FILE *logFile = fopen((name + ".out32").c_str(), "r");
+ fseek(logFile, 0, SEEK_END);
+ uint32_t logSize = ftell(logFile);
+ fseek(logFile, 0, SEEK_SET);
+ char* log = new char[logSize];
+ fread(log, 1, logSize, logFile);
+ fclose(logFile);
+
+ if(refSize > logSize || memcmp(log,ref,refSize))
+ fail();
+ else
+ Workspace::pass();
+ }
+};
+
+
+#ifdef DEBUG_PLUGIN
+
+#include<pthread.h>
+#include<stdlib.h>
+#include<unistd.h>
+#include <netinet/tcp.h>
+
+#define RISCV_SPINAL_FLAGS_RESET 1<<0
+#define RISCV_SPINAL_FLAGS_HALT 1<<1
+#define RISCV_SPINAL_FLAGS_PIP_BUSY 1<<2
+#define RISCV_SPINAL_FLAGS_IS_IN_BREAKPOINT 1<<3
+#define RISCV_SPINAL_FLAGS_STEP 1<<4
+#define RISCV_SPINAL_FLAGS_PC_INC 1<<5
+
+#define RISCV_SPINAL_FLAGS_RESET_SET 1<<16
+#define RISCV_SPINAL_FLAGS_HALT_SET 1<<17
+
+#define RISCV_SPINAL_FLAGS_RESET_CLEAR 1<<24
+#define RISCV_SPINAL_FLAGS_HALT_CLEAR 1<<25
+
+class DebugPluginTest : public WorkspaceRegression{
+public:
+ pthread_t clientThreadId;
+ char buffer[1024];
+ bool clientSuccess = false, clientFail = false;
+
+ static void* clientThreadWrapper(void *debugModule){
+ ((DebugPluginTest*)debugModule)->clientThread();
+ return NULL;
+ }
+
+ int clientSocket;
+ void accessCmd(bool wr, uint32_t size, uint32_t address, uint32_t data){
+ buffer[0] = wr;
+ buffer[1] = size;
+ *((uint32_t*) (buffer + 2)) = address;
+ *((uint32_t*) (buffer + 6)) = data;
+ send(clientSocket,buffer,10,0);
+ }
+
+ void writeCmd(uint32_t size, uint32_t address, uint32_t data){
+ accessCmd(true, 2, address, data);
+ }
+
+
+ uint32_t readCmd(uint32_t size, uint32_t address){
+ accessCmd(false, 2, address, VL_RANDOM_I_WIDTH(32));
+ int error;
+ if((error = recv(clientSocket, buffer, 4, 0)) != 4){
+ printf("Should read 4 bytes, had %d", error);
+ while(1);
+ }
+
+ return *((uint32_t*) buffer);
+ }
+
+
+
+ void clientThread(){
+ struct sockaddr_in serverAddr;
+
+ //---- Create the socket. The three arguments are: ----//
+ // 1) Internet domain 2) Stream socket 3) Default protocol (TCP in this case) //
+ clientSocket = socket(PF_INET, SOCK_STREAM, 0);
+ int flag = 1;
+ int result = setsockopt(clientSocket, /* socket affected */
+ IPPROTO_TCP, /* set option at TCP level */
+ TCP_NODELAY, /* name of option */
+ (char *) &flag, /* the cast is historical
+ cruft */
+ sizeof(int)); /* length of option value */
+
+ //---- Configure settings of the server address struct ----//
+ // Address family = Internet //
+ serverAddr.sin_family = AF_INET;
+ // Set port number, using htons function to use proper byte order //
+ serverAddr.sin_port = htons(7893);
+ // Set IP address to localhost //
+ serverAddr.sin_addr.s_addr = inet_addr("127.0.0.1");
+ // Set all bits of the padding field to 0 //
+ memset(serverAddr.sin_zero, '\0', sizeof serverAddr.sin_zero);
+
+ //---- Connect the socket to the server using the address struct ----//
+ socklen_t addr_size = sizeof serverAddr;
+ int error = connect(clientSocket, (struct sockaddr *) &serverAddr, addr_size);
+// printf("!! %x\n",readCmd(2,0x8));
+ uint32_t debugAddress = 0xF00F0000;
+ uint32_t readValue;
+
+ while(resetDone != true){usleep(100);}
+
+ while((readCmd(2,debugAddress) & RISCV_SPINAL_FLAGS_HALT) == 0){usleep(100);}
+ if((readValue = readCmd(2,debugAddress + 4)) != 0x8000000C){
+ printf("wrong breakA PC %x\n",readValue);
+ clientFail = true; return;
+ }
+
+ writeCmd(2, debugAddress + 4, 0x13 + (1 << 15)); //Read regfile
+ if((readValue = readCmd(2,debugAddress + 4)) != 10){
+ printf("wrong breakB PC %x\n",readValue);
+ clientFail = true; return;
+ }
+
+ writeCmd(2, debugAddress + 4, 0x13 + (2 << 15)); //Read regfile
+ if((readValue = readCmd(2,debugAddress + 4)) != 20){
+ printf("wrong breakC PC %x\n",readValue);
+ clientFail = true; return;
+ }
+
+ writeCmd(2, debugAddress + 4, 0x13 + (3 << 15)); //Read regfile
+ if((readValue = readCmd(2,debugAddress + 4)) != 30){
+ printf("wrong breakD PC %x\n",readValue);
+ clientFail = true; return;
+ }
+
+ writeCmd(2, debugAddress + 4, 0x13 + (1 << 7) + (40 << 20)); //Write x1 with 40
+ writeCmd(2, debugAddress + 4, 0x80000eb7); //Write x29 with 0x10
+ writeCmd(2, debugAddress + 4, 0x010e8e93); //Write x29 with 0x10
+ writeCmd(2, debugAddress + 4, 0x67 + (29 << 15)); //Branch x29
+ writeCmd(2, debugAddress + 0, RISCV_SPINAL_FLAGS_HALT_CLEAR); //Run CPU
+
+ while((readCmd(2,debugAddress) & RISCV_SPINAL_FLAGS_HALT) == 0){usleep(100);}
+ if((readValue = readCmd(2,debugAddress + 4)) != 0x80000014){
+ printf("wrong breakE PC 3 %x\n",readValue);
+ clientFail = true; return;
+ }
+
+
+ writeCmd(2, debugAddress + 4, 0x13 + (3 << 15)); //Read regfile
+ if((readValue = readCmd(2,debugAddress + 4)) != 60){
+ printf("wrong x1 %x\n",readValue);
+ clientFail = true; return;
+ }
+
+
+ writeCmd(2, debugAddress + 4, 0x80000eb7); //Write x29 with 0x10
+ writeCmd(2, debugAddress + 4, 0x018e8e93); //Write x29 with 0x10
+ writeCmd(2, debugAddress + 4, 0x67 + (29 << 15)); //Branch x29
+ writeCmd(2, debugAddress + 0, RISCV_SPINAL_FLAGS_HALT_CLEAR); //Run CPU
+
+
+
+ while((readCmd(2,debugAddress) & RISCV_SPINAL_FLAGS_HALT) == 0){usleep(100);}
+ if((readValue = readCmd(2,debugAddress + 4)) != 0x80000024){
+ printf("wrong breakF PC 3 %x\n",readValue);
+ clientFail = true; return;
+ }
+
+
+ writeCmd(2, debugAddress + 4, 0x13 + (3 << 15)); //Read x3
+ if((readValue = readCmd(2,debugAddress + 4)) != 171){
+ printf("wrong x3 %x\n",readValue);
+ clientFail = true; return;
+ }
+
+
+ clientSuccess = true;
+ }
+
+
+ DebugPluginTest() : WorkspaceRegression("DebugPluginTest") {
+ loadHex(string(REGRESSION_PATH) + "../../resources/hex/debugPlugin.hex");
+ pthread_create(&clientThreadId, NULL, &clientThreadWrapper, this);
+ }
+
+ virtual ~DebugPluginTest(){
+ if(clientSocket != -1) close(clientSocket);
+ }
+
+ virtual void checks(){
+ if(clientSuccess) pass();
+ if(clientFail) fail();
+ }
+
+ virtual void postReset(){
+ Workspace::postReset();
+ top->VexRiscv->DebugPlugin_debugUsed = 1;
+ }
+};
+
+#endif
+
+
+//#ifdef LITEX
+//class LitexSoC : public Workspace{
+//public:
+//
+// LitexSoC(string name) : Workspace(name) {
+//
+// }
+// virtual bool isDBusCheckedRegion(uint32_t address){ return true;}
+// virtual bool isPerifRegion(uint32_t addr) { return (addr & 0xF0000000) == 0xB0000000 || (addr & 0xE0000000) == 0xE0000000;}
+// virtual bool isMmuRegion(uint32_t addr) { return (addr & 0xFF000000) != 0x81000000;}
+//
+// virtual void dBusAccess(uint32_t addr,bool wr, uint32_t size,uint32_t mask, uint32_t *data, bool *error) {
+// if(isPerifRegion(addr)) switch(addr){
+// //TODO Emulate peripherals here
+// case 0xFFFFFFE0: if(wr) fail(); else *data = mTime; break;
+// case 0xFFFFFFE4: if(wr) fail(); else *data = mTime >> 32; break;
+// case 0xFFFFFFE8: if(wr) mTimeCmp = (mTimeCmp & 0xFFFFFFFF00000000) | *data; else *data = mTimeCmp; break;
+// case 0xFFFFFFEC: if(wr) mTimeCmp = (mTimeCmp & 0x00000000FFFFFFFF) | (((uint64_t)*data) << 32); else *data = mTimeCmp >> 32; break;
+// case 0xFFFFFFF8:
+// if(wr){
+// cout << (char)*data;
+// logTraces << (char)*data;
+// logTraces.flush();
+// } else fail();
+// break;
+// case 0xFFFFFFFC: fail(); break; //Simulation end
+// default: cout << "Unmapped peripheral access : addr=0x" << hex << addr << " wr=" << wr << " mask=0x" << mask << " data=0x" << data << dec << endl; fail(); break;
+// }
+//
+// Workspace::dBusAccess(addr,wr,size,mask,data,error);
+// }
+//};
+//#endif
+
+
+
+#include <unistd.h>
+#include <termios.h>
+#include <fcntl.h>
+termios stdinRestoreSettings;
+void stdinNonBuffered(){
+ static struct termios old, new1;
+ tcgetattr(STDIN_FILENO, &old); // grab old terminal i/o settings
+ new1 = old; // make new settings same as old settings
+ new1.c_lflag &= ~ICANON; // disable buffered i/o
+ new1.c_lflag &= ~ECHO;
+ tcsetattr(STDIN_FILENO, TCSANOW, &new1); // use these new terminal i/o settings now
+ setvbuf(stdin, NULL, _IONBF, 0);
+ stdinRestoreSettings = old;
+}
+
+
+bool stdinNonEmpty(){
+ struct timeval tv;
+ fd_set fds;
+ tv.tv_sec = 0;
+ tv.tv_usec = 0;
+ FD_ZERO(&fds);
+ FD_SET(STDIN_FILENO, &fds);
+ select(STDIN_FILENO+1, &fds, NULL, NULL, &tv);
+ return (FD_ISSET(0, &fds));
+}
+
+
+void stdoutNonBuffered(){
+ setvbuf(stdout, NULL, _IONBF, 0);
+}
+
+void stdinRestore(){
+ tcsetattr(STDIN_FILENO, TCSANOW, &stdinRestoreSettings);
+}
+
+
+
+void my_handler(int s){
+ printf("Caught signal %d\n",s);
+ stdinRestore();
+ exit(1);
+}
+#include <signal.h>
+
+void captureCtrlC(){
+ struct sigaction sigIntHandler;
+
+ sigIntHandler.sa_handler = my_handler;
+ sigemptyset(&sigIntHandler.sa_mask);
+ sigIntHandler.sa_flags = 0;
+
+ sigaction(SIGINT, &sigIntHandler, NULL);
+}
+
+
+
+
+#if defined(LINUX_SOC) || defined(LINUX_REGRESSION)
+#include <queue>
+class LinuxSoc : public Workspace{
+public:
+ queue <char> customCin;
+ void pushCin(string m){
+ for(char& c : m) {
+ customCin.push(c);
+ }
+ }
+
+ LinuxSoc(string name) : Workspace(name) {
+ #ifdef WITH_USER_IO
+ stdinNonBuffered();
+ captureCtrlC();
+ #endif
+ stdoutNonBuffered();
+ }
+
+ virtual ~LinuxSoc(){
+ #ifdef WITH_USER_IO
+ stdinRestore();
+ #endif
+ }
+ virtual bool isDBusCheckedRegion(uint32_t address){ return true;}
+ virtual bool isPerifRegion(uint32_t addr) { return (addr & 0xF0000000) == 0xF0000000 || (addr & 0xE0000000) == 0xE0000000;}
+ virtual bool isMmuRegion(uint32_t addr) { return true; }
+
+
+
+ virtual void dBusAccess(uint32_t addr,bool wr, uint32_t size,uint8_t *dataBytes, bool *error) {
+ uint32_t *data = (uint32_t*)dataBytes;
+
+ if(isPerifRegion(addr)) {
+ switch(addr){
+ case 0xFFFFFFE0: if(wr) fail(); else *data = mTime; break;
+ case 0xFFFFFFE4: if(wr) fail(); else *data = mTime >> 32; break;
+ case 0xFFFFFFE8: if(wr) mTimeCmp = (mTimeCmp & 0xFFFFFFFF00000000) | *data; else *data = mTimeCmp; break;
+ case 0xFFFFFFEC: if(wr) mTimeCmp = (mTimeCmp & 0x00000000FFFFFFFF) | (((uint64_t)*data) << 32); else *data = mTimeCmp >> 32; break;
+ case 0xFFFFFFF8:
+ if(wr){
+ char c = (char)*data;
+ cout << c;
+ logTraces << c;
+ logTraces.flush();
+ onStdout(c);
+ } else {
+ #ifdef WITH_USER_IO
+ if(stdinNonEmpty()){
+ char c;
+ read(0, &c, 1);
+ *data = c;
+ } else
+ #endif
+ if(!customCin.empty()){
+ *data = customCin.front();
+ customCin.pop();
+ } else {
+ *data = -1;
+ }
+ }
+ break;
+ case 0xFFFFFFFC: fail(); break; //Simulation end
+ default: cout << "Unmapped peripheral access : addr=0x" << hex << addr << " wr=" << wr << " mask=0x" << " data=0x" << data << dec << endl; fail(); break;
+ }
+ }
+ Workspace::dBusAccess(addr,wr,size,dataBytes,error);
+ }
+
+ virtual void onStdout(char c){
+
+ }
+};
+
+class LinuxRegression: public LinuxSoc{
+public:
+ string pendingLine = "";
+ bool pendingLineContain(string m) {
+ return strstr(pendingLine.c_str(), m.c_str()) != NULL;
+ }
+
+ enum State{LOGIN, ECHO_FILE, HEXDUMP, HEXDUMP_CHECK, PASS};
+ State state = LOGIN;
+ LinuxRegression(string name) : LinuxSoc(name) {
+
+ }
+
+ ~LinuxRegression() {
+ }
+
+
+ virtual void onStdout(char c){
+ pendingLine += c;
+ switch(state){
+ case LOGIN: if (pendingLineContain("buildroot login:")) { pushCin("root\n"); state = ECHO_FILE; } break;
+ case ECHO_FILE: if (pendingLineContain("# ")) { pushCin("echo \"miaou\" > test.txt\n"); state = HEXDUMP; pendingLine = "";} break;
+ case HEXDUMP: if (pendingLineContain("# ")) { pushCin("hexdump -C test.txt\n"); state = HEXDUMP_CHECK; pendingLine = "";} break;
+ case HEXDUMP_CHECK: if (pendingLineContain("00000000 6d 69 61 6f 75 0a ")) { pushCin(""); state = PASS; pendingLine = "";} break;
+ case PASS: if (pendingLineContain("# ")) { pass(); } break;
+ }
+ if(c == '\n' || pendingLine.length() > 200) pendingLine = "";
+ }
+};
+
+#endif
+
+#ifdef LINUX_SOC_SMP
+
+class LinuxSocSmp : public Workspace{
+public:
+ queue <char> customCin;
+ void pushCin(string m){
+ for(char& c : m) {
+ customCin.push(c);
+ }
+ }
+
+ LinuxSocSmp(string name) : Workspace(name) {
+ #ifdef WITH_USER_IO
+ stdinNonBuffered();
+ captureCtrlC();
+ #endif
+ stdoutNonBuffered();
+ }
+
+ virtual ~LinuxSocSmp(){
+ #ifdef WITH_USER_IO
+ stdinRestore();
+ #endif
+ }
+ virtual bool isDBusCheckedRegion(uint32_t address){ return true;}
+ virtual bool isPerifRegion(uint32_t addr) { return (addr & 0xF0000000) == 0xF0000000;}
+ virtual bool isMmuRegion(uint32_t addr) { return true; }
+
+
+
+ virtual void dBusAccess(uint32_t addr,bool wr, uint32_t size, uint8_t *dataBytes, bool *error) {
+ uint32_t *data = (uint32_t*)dataBytes;
+ if(isPerifRegion(addr)) switch(addr){
+ case 0xF0010000: if(wr && *data != 0) fail(); else *data = 0; break;
+ case 0xF001BFF8: if(wr) fail(); else *data = mTime; break;
+ case 0xF001BFFC: if(wr) fail(); else *data = mTime >> 32; break;
+ case 0xF0014000: if(wr) mTimeCmp = (mTimeCmp & 0xFFFFFFFF00000000) | *data; else fail(); break;
+ case 0xF0014004: if(wr) mTimeCmp = (mTimeCmp & 0x00000000FFFFFFFF) | (((uint64_t)*data) << 32); else fail(); break;
+ case 0xF0000000:
+ if(wr){
+ char c = (char)*data;
+ cout << c;
+ logTraces << c;
+ logTraces.flush();
+ onStdout(c);
+ }
+ case 0xF0000004:
+ if(!wr){
+ #ifdef WITH_USER_IO
+ if(stdinNonEmpty()){
+ char c;
+ read(0, &c, 1);
+ *data = c;
+ } else
+ #endif
+ if(!customCin.empty()){
+ *data = customCin.front();
+ customCin.pop();
+ } else {
+ *data = -1;
+ }
+ }
+ break;
+ default: cout << "Unmapped peripheral access : addr=0x" << hex << addr << " wr=" << wr << " data=0x" << data << dec << endl; fail(); break;
+ }
+ Workspace::dBusAccess(addr,wr,size,dataBytes,error);
+ }
+
+ virtual void onStdout(char c){
+
+ }
+};
+
+#endif
+
+string riscvTestMain[] = {
+ //"rv32ui-p-simple",
+ "rv32ui-p-lui",
+ "rv32ui-p-auipc",
+ "rv32ui-p-jal",
+ "rv32ui-p-jalr",
+ "rv32ui-p-beq",
+ "rv32ui-p-bge",
+ "rv32ui-p-bgeu",
+ "rv32ui-p-blt",
+ "rv32ui-p-bltu",
+ "rv32ui-p-bne",
+ "rv32ui-p-add",
+ "rv32ui-p-addi",
+ "rv32ui-p-and",
+ "rv32ui-p-andi",
+ "rv32ui-p-or",
+ "rv32ui-p-ori",
+ "rv32ui-p-sll",
+ "rv32ui-p-slli",
+ "rv32ui-p-slt",
+ "rv32ui-p-slti",
+ "rv32ui-p-sra",
+ "rv32ui-p-srai",
+ "rv32ui-p-srl",
+ "rv32ui-p-srli",
+ "rv32ui-p-sub",
+ "rv32ui-p-xor",
+ "rv32ui-p-xori"
+};
+
+string riscvTestMemory[] = {
+ "rv32ui-p-lb",
+ "rv32ui-p-lbu",
+ "rv32ui-p-lh",
+ "rv32ui-p-lhu",
+ "rv32ui-p-lw",
+ "rv32ui-p-sb",
+ "rv32ui-p-sh",
+ "rv32ui-p-sw"
+};
+
+
+string riscvTestFloat[] = {
+ "rv32uf-p-fmadd",
+ "rv32uf-p-fadd",
+ "rv32uf-p-fcmp",
+ "rv32uf-p-fcvt_w",
+ "rv32uf-p-ldst",
+ "rv32uf-p-recoding",
+ "rv32uf-p-fclass",
+ "rv32uf-p-fcvt",
+ "rv32uf-p-fdiv",
+ "rv32uf-p-fmin",
+ "rv32uf-p-move"
+};
+
+
+string riscvTestDouble[] = {
+ "rv32ud-p-fmadd",
+ "rv32ud-p-fadd",
+ "rv32ud-p-fcvt",
+ "rv32ud-p-recoding",
+ "rv32ud-p-fclass",
+ "rv32ud-p-fcvt_w",
+ "rv32ud-p-fmin",
+ "rv32ud-p-fcmp",
+ "rv32ud-p-fdiv",
+ "rv32ud-p-ldst"
+};
+
+
+
+
+string riscvTestMul[] = {
+ "rv32um-p-mul",
+ "rv32um-p-mulh",
+ "rv32um-p-mulhsu",
+ "rv32um-p-mulhu"
+};
+
+string riscvTestDiv[] = {
+ "rv32um-p-div",
+ "rv32um-p-divu",
+ "rv32um-p-rem",
+ "rv32um-p-remu"
+};
+
+string freeRtosTests[] = {
+// "test1","test1","test1","test1","test1","test1","test1","test1",
+// "test1","test1","test1","test1","test1","test1","test1","test1",
+// "test1","test1","test1","test1","test1","test1","test1","test1",
+// "test1","test1","test1","test1","test1","test1","test1","test1",
+// "test1","test1","test1","test1","test1","test1","test1","test1",
+// "test1","test1","test1","test1","test1","test1","test1","test1",
+// "test1","test1","test1","test1","test1","test1","test1","test1",
+// "test1","test1","test1","test1","test1","test1","test1","test1",
+// "test1","test1","test1","test1","test1","test1","test1","test1",
+// "test1","test1","test1","test1","test1","test1","test1","test1",
+// "test1","test1","test1","test1","test1","test1","test1","test1",
+// "test1","test1","test1","test1","test1","test1","test1","test1",
+// "test1","test1","test1","test1","test1","test1","test1","test1"
+
+ "AltQTest", "AltBlock", "AltPollQ", "blocktim", "countsem", "dead", "EventGroupsDemo", "flop", "integer", "QPeek",
+ "QueueSet", "recmutex", "semtest", "TaskNotify", "crhook", "dynamic",
+ "GenQTest", "PollQ", "QueueOverwrite", "QueueSetPolling", "sp_flop", "test1"
+ //"BlockQ","BlockQ","BlockQ","BlockQ","BlockQ","BlockQ","BlockQ","BlockQ"
+// "flop"
+// "flop", "sp_flop" // <- Simple test
+ // "AltBlckQ" ???
+
+};
+
+
+string zephyrTests[] = {
+ "tests_kernel_stack_stack_api",
+ "tests_kernel_context",
+// "tests_kernel_critical", //Too long
+ "tests_kernel_fifo_fifo_api",
+ "tests_kernel_mbox_mbox_usage",
+// "tests_kernel_mem_pool_mem_pool_threadsafe", //Too long
+ "tests_kernel_sleep"
+// "tests_kernel_timer_timer_api" //Lock like if the CPU is too slow, it will make it fail
+};
+
+
+
+string riscvComplianceMain[] = {
+ "I-IO",
+ "I-NOP-01",
+ "I-LUI-01",
+ "I-ADD-01",
+ "I-ADDI-01",
+ "I-AND-01",
+ "I-ANDI-01",
+ "I-SUB-01",
+ "I-OR-01",
+ "I-ORI-01",
+ "I-XOR-01",
+ "I-XORI-01",
+ "I-SRA-01",
+ "I-SRAI-01",
+ "I-SRL-01",
+ "I-SRLI-01",
+ "I-SLL-01",
+ "I-SLLI-01",
+ "I-SLT-01",
+ "I-SLTI-01",
+ "I-SLTIU-01",
+ "I-SLTU-01",
+ "I-AUIPC-01",
+ "I-BEQ-01",
+ "I-BGE-01",
+ "I-BGEU-01",
+ "I-BLT-01",
+ "I-BLTU-01",
+ "I-BNE-01",
+ "I-JAL-01",
+ "I-JALR-01",
+ "I-DELAY_SLOTS-01",
+ "I-ENDIANESS-01",
+ "I-RF_size-01",
+ "I-RF_width-01",
+ "I-RF_x0-01",
+};
+
+
+
+string complianceTestMemory[] = {
+ "I-LB-01",
+ "I-LBU-01",
+ "I-LH-01",
+ "I-LHU-01",
+ "I-LW-01",
+ "I-SB-01",
+ "I-SH-01",
+ "I-SW-01"
+};
+
+
+string complianceTestCsr[] = {
+ "I-CSRRC-01",
+ "I-CSRRCI-01",
+ "I-CSRRS-01",
+ "I-CSRRSI-01",
+ "I-CSRRW-01",
+ "I-CSRRWI-01",
+ #ifndef COMPRESSED
+ "I-MISALIGN_JMP-01", //Only apply for non RVC cores
+ #endif
+ "I-MISALIGN_LDST-01",
+ "I-ECALL-01",
+};
+
+
+string complianceTestMul[] = {
+ "MUL",
+ "MULH",
+ "MULHSU",
+ "MULHU",
+};
+
+string complianceTestDiv[] = {
+ "DIV",
+ "DIVU",
+ "REM",
+ "REMU",
+};
+
+
+string complianceTestC[] = {
+ "C.ADD",
+ "C.ADDI16SP",
+ "C.ADDI4SPN",
+ "C.ADDI",
+ "C.AND",
+ "C.ANDI",
+ "C.BEQZ",
+ "C.BNEZ",
+ "C.JAL",
+ "C.JALR",
+ "C.J",
+ "C.JR",
+ "C.LI",
+ "C.LUI",
+ "C.LW",
+ "C.LWSP",
+ "C.MV",
+ "C.OR",
+ "C.SLLI",
+ "C.SRAI",
+ "C.SRLI",
+ "C.SUB",
+ "C.SW",
+ "C.SWSP",
+ "C.XOR",
+};
+
+
+
+
+
+
+struct timespec timer_start(){
+ struct timespec start_time;
+ clock_gettime(CLOCK_REALTIME, &start_time); //CLOCK_PROCESS_CPUTIME_ID
+ return start_time;
+}
+
+long timer_end(struct timespec start_time){
+ struct timespec end_time;
+ clock_gettime(CLOCK_REALTIME, &end_time);
+ uint64_t diffInNanos = end_time.tv_sec*1e9 + end_time.tv_nsec - start_time.tv_sec*1e9 - start_time.tv_nsec;
+ return diffInNanos;
+}
+
+#define redo(count,that) for(uint32_t xxx = 0;xxx < count;xxx++) that
+#include <pthread.h>
+#include <queue>
+#include <functional>
+#include <thread>
+
+
+static void multiThreading(queue<std::function<void()>> *lambdas, std::mutex *mutex){
+ uint32_t counter = 0;
+ while(true){
+ mutex->lock();
+ if(lambdas->empty()){
+ mutex->unlock();
+ break;
+ }
+
+ #ifdef SEED
+ uint32_t seed = SEED + counter;
+ counter++;
+ srand48(seed);
+ printf("MT_SEED=%d \n", seed);
+ #endif
+ std::function<void()> lambda = lambdas->front();
+ lambdas->pop();
+ mutex->unlock();
+
+ lambda();
+ }
+}
+
+
+static void multiThreadedExecute(queue<std::function<void()>> &lambdas){
+ std::mutex mutex;
+ if(THREAD_COUNT == 1){
+ multiThreading(&lambdas, &mutex);
+ } else {
+ std::thread * t[THREAD_COUNT];
+ for(int id = 0;id < THREAD_COUNT;id++){
+ t[id] = new thread(multiThreading,&lambdas,&mutex);
+ }
+ for(int id = 0;id < THREAD_COUNT;id++){
+ t[id]->join();
+ delete t[id];
+ }
+ }
+}
+
+int main(int argc, char **argv, char **env) {
+ #ifdef SEED
+ srand48(SEED);
+ #endif
+ Verilated::randReset(2);
+ Verilated::commandArgs(argc, argv);
+
+ printf("BOOT\n");
+ timespec startedAt = timer_start();
+
+
+#ifdef LINUX_SOC_SMP
+ {
+
+ LinuxSocSmp soc("linuxSmp");
+ #ifndef DEBUG_PLUGIN_EXTERNAL
+ soc.withRiscvRef();
+ soc.loadBin(EMULATOR, 0x80000000);
+ soc.loadBin(VMLINUX, 0x80400000);
+ soc.loadBin(DTB, 0x80FF0000);
+ soc.loadBin(RAMDISK, 0x81000000);
+ #endif
+ //soc.setIStall(true);
+ //soc.setDStall(true);
+ soc.bootAt(0x80000000);
+ soc.run(0);
+// soc.run((496300000l + 2000000) / 2);
+// soc.run(438700000l/2);
+ return -1;
+ }
+#endif
+
+
+
+ #ifdef RVF
+ for(const string &name : riscvTestFloat){
+ redo(REDO,RiscvTest(name).withRiscvRef()->bootAt(0x80000188u)->writeWord(0x80000184u, 0x00305073)->run();)
+ }
+ #endif
+ #ifdef RVD
+ for(const string &name : riscvTestDouble){
+ redo(REDO,RiscvTest(name).withRiscvRef()->bootAt(0x80000188u)->writeWord(0x80000184u, 0x00305073)->run();)
+ }
+ #endif
+ //return 0;
+
+//#ifdef LITEX
+// LitexSoC("linux")
+// .withRiscvRef()
+// ->loadBin(EMULATOR, 0x80000000)
+// ->loadBin(DTB, 0x81000000)
+// ->loadBin(VMLINUX, 0xc0000000)
+// ->loadBin(RAMDISK, 0xc2000000)
+// ->setIStall(false) //TODO It currently improve speed but should be removed later
+// ->setDStall(false)
+// ->bootAt(0x80000000)
+// ->run(0);
+//#endif
+
+// {
+// static struct termios old, new1;
+// tcgetattr(0, &old); /* grab old terminal i/o settings */
+// new1 = old; /* make new settings same as old settings */
+// new1.c_lflag &= ~ICANON; /* disable buffered i/o */
+// new1.c_lflag &= ~ECHO;
+// tcsetattr(0, TCSANOW, &new1); /* use these new terminal i/o settings now */
+// }
+//
+// std::string initialCommand;
+//
+// while(true){
+// if(!inputAvailable()) {
+// std::cout << "Waiting for input (Ctrl-C to cancel)..." << std::endl;
+// sleep(1);
+// } else {
+// char c;
+// read(0, &c, 1); printf("%d\n", c);
+//// std::getline(std::cin, initialCommand);
+// }
+// }
+//
+
+// char c;
+// while (1) { read(0, &c, 1); printf("%d\n", c); }
+// while(true){
+// char c = getchar();
+// if(c > 0)
+// {
+// putchar(c);
+// } else {
+// putchar('*');
+// sleep(500);
+// }
+// }
+
+#ifdef LINUX_SOC
+ {
+
+ LinuxSoc soc("linux");
+ #ifndef DEBUG_PLUGIN_EXTERNAL
+ soc.withRiscvRef();
+ soc.loadBin(EMULATOR, 0x80000000);
+ soc.loadBin(VMLINUX, 0xC0000000);
+ soc.loadBin(DTB, 0xC3000000);
+ soc.loadBin(RAMDISK, 0xC2000000);
+ #endif
+ //soc.setIStall(true);
+ //soc.setDStall(true);
+ soc.bootAt(0x80000000);
+ soc.run(0);
+// soc.run((496300000l + 2000000) / 2);
+// soc.run(438700000l/2);
+ return -1;
+ }
+#endif
+
+
+
+
+
+// #ifdef MMU
+// redo(REDO,WorkspaceRegression("mmu").withRiscvRef()->loadHex("../raw/mmu/build/mmu.hex")->bootAt(0x80000000u)->run(50e3););
+// #endif
+// redo(REDO,WorkspaceRegression("deleg").withRiscvRef()->loadHex("../raw/deleg/build/deleg.hex")->bootAt(0x80000000u)->run(50e3););
+// return 0;
+
+
+ for(int idx = 0;idx < 1;idx++){
+
+ #if defined(DEBUG_PLUGIN_EXTERNAL) || defined(RUN_HEX)
+ {
+ WorkspaceRegression w("run");
+ #ifdef RUN_HEX
+ //w.loadHex("/home/spinalvm/hdl/zephyr/zephyrSpinalHdl/samples/synchronization/build/zephyr/zephyr.hex");
+ w.loadHex(RUN_HEX);
+ w.withRiscvRef();
+ #endif
+ w.setIStall(false);
+ w.setDStall(false);
+
+ #if defined(TRACE) || defined(TRACE_ACCESS)
+ //w.setCyclesPerSecond(5e3);
+ //printf("Speed reduced 5Khz\n");
+ #endif
+ w.run(0xFFFFFFFFFFFF);
+ exit(0);
+ }
+ #endif
+
+
+ #ifdef ISA_TEST
+
+ // redo(REDO,TestA().run();)
+ for(const string &name : riscvComplianceMain){
+ redo(REDO, Compliance(name).run();)
+ }
+ for(const string &name : complianceTestMemory){
+ redo(REDO, Compliance(name).run();)
+ }
+
+ #ifdef COMPRESSED
+ for(const string &name : complianceTestC){
+ redo(REDO, Compliance(name).run();)
+ }
+ #endif
+
+ #ifdef MUL
+ for(const string &name : complianceTestMul){
+ redo(REDO, Compliance(name).run();)
+ }
+ #endif
+ #ifdef DIV
+ for(const string &name : complianceTestDiv){
+ redo(REDO, Compliance(name).run();)
+ }
+ #endif
+ #if defined(CSR) && !defined(CSR_SKIP_TEST)
+ for(const string &name : complianceTestCsr){
+ redo(REDO, Compliance(name).run();)
+ }
+ #endif
+
+ #ifdef FENCEI
+ redo(REDO, Compliance("I-FENCE.I-01").run();)
+ #endif
+ #ifdef EBREAK
+ redo(REDO, Compliance("I-EBREAK-01").run();)
+ #endif
+
+ for(const string &name : riscvTestMain){
+ redo(REDO,RiscvTest(name).withRiscvRef()->run();)
+ }
+ for(const string &name : riscvTestMemory){
+ redo(REDO,RiscvTest(name).withRiscvRef()->run();)
+ }
+
+
+ #ifdef MUL
+ for(const string &name : riscvTestMul){
+ redo(REDO,RiscvTest(name).withRiscvRef()->run();)
+ }
+ #endif
+ #ifdef DIV
+ for(const string &name : riscvTestDiv){
+ redo(REDO,RiscvTest(name).withRiscvRef()->run();)
+ }
+ #endif
+
+ #ifdef COMPRESSED
+ redo(REDO,RiscvTest("rv32uc-p-rvc").withRiscvRef()->bootAt(0x800000FCu)->run());
+ #endif
+
+ #if defined(CSR) && !defined(CSR_SKIP_TEST)
+ #ifndef COMPRESSED
+ uint32_t machineCsrRef[] = {1,11, 2,0x80000003u, 3,0x80000007u, 4,0x8000000bu, 5,6,7,0x80000007u ,
+ 8,6,9,6,10,4,11,4, 12,13,0, 14,2, 15,5,16,17,1 };
+ redo(REDO,TestX28("../../cpp/raw/machineCsr/build/machineCsr",machineCsrRef, sizeof(machineCsrRef)/4).withRiscvRef()->setVcdName("machineCsr")->run(10e4);)
+ #else
+ uint32_t machineCsrRef[] = {1,11, 2,0x80000003u, 3,0x80000007u, 4,0x8000000bu, 5,6,7,0x80000007u ,
+ 8,6,9,6,10,4,11,4, 12,13, 14,2, 15,5,16,17,1 };
+ redo(REDO,TestX28("../../cpp/raw/machineCsr/build/machineCsrCompressed",machineCsrRef, sizeof(machineCsrRef)/4).withRiscvRef()->setVcdName("machineCsrCompressed")->run(10e4);)
+ #endif
+ #endif
+// #ifdef MMU
+// uint32_t mmuRef[] = {1,2,3, 0x11111111, 0x11111111, 0x11111111, 0x22222222, 0x22222222, 0x22222222, 4, 0x11111111, 0x33333333, 0x33333333, 5,
+// 13, 0xC4000000,0x33333333, 6,7,
+// 1,2,3, 0x11111111, 0x11111111, 0x11111111, 0x22222222, 0x22222222, 0x22222222, 4, 0x11111111, 0x33333333, 0x33333333, 5,
+// 13, 0xC4000000,0x33333333, 6,7};
+// redo(REDO,TestX28("mmu",mmuRef, sizeof(mmuRef)/4).noInstructionReadCheck()->run(4e4);)
+// #endif
+
+ #ifdef IBUS_CACHED
+ redo(REDO,WorkspaceRegression("icache").withRiscvRef()->loadHex(string(REGRESSION_PATH) + "../raw/icache/build/icache.hex")->bootAt(0x80000000u)->run(50e3););
+ #endif
+ #ifdef DBUS_CACHED
+ redo(REDO,WorkspaceRegression("dcache").loadHex(string(REGRESSION_PATH) + "../raw/dcache/build/dcache.hex")->bootAt(0x80000000u)->run(2500e3););
+ #endif
+
+ #ifdef MMU
+ redo(REDO,WorkspaceRegression("mmu").withRiscvRef()->loadHex(string(REGRESSION_PATH) + "../raw/mmu/build/mmu.hex")->bootAt(0x80000000u)->run(50e3););
+ #endif
+ #ifdef SUPERVISOR
+ redo(REDO,WorkspaceRegression("deleg").withRiscvRef()->loadHex(string(REGRESSION_PATH) + "../raw/deleg/build/deleg.hex")->bootAt(0x80000000u)->run(50e3););
+ #endif
+
+ #ifdef DEBUG_PLUGIN
+ #ifndef CONCURRENT_OS_EXECUTIONS
+ redo(REDO,DebugPluginTest().run(1e6););
+ #endif
+ #endif
+ #endif
+
+ #ifdef CUSTOM_SIMD_ADD
+ redo(REDO,WorkspaceRegression("custom_simd_add").loadHex(string(REGRESSION_PATH) + "../custom/simd_add/build/custom_simd_add.hex")->bootAt(0x00000000u)->run(50e3););
+ #endif
+
+ #ifdef CUSTOM_CSR
+ redo(REDO,WorkspaceRegression("custom_csr").loadHex(string(REGRESSION_PATH) + "../custom/custom_csr/build/custom_csr.hex")->bootAt(0x00000000u)->run(50e3););
+ #endif
+
+
+ #ifdef LRSC
+ redo(REDO,WorkspaceRegression("lrsc").withRiscvRef()->loadHex(string(REGRESSION_PATH) + "../raw/lrsc/build/lrsc.hex")->bootAt(0x00000000u)->run(10e3););
+ #endif
+
+ #ifdef PMP
+ redo(REDO,WorkspaceRegression("pmp").loadHex(string(REGRESSION_PATH) + "../raw/pmp/build/pmp.hex")->bootAt(0x80000000u)->run(10e3););
+ #endif
+
+ #ifdef AMO
+ redo(REDO,WorkspaceRegression("amo").withRiscvRef()->loadHex(string(REGRESSION_PATH) + "../raw/amo/build/amo.hex")->bootAt(0x00000000u)->run(10e3););
+ #endif
+
+ #ifdef DHRYSTONE
+ Dhrystone("dhrystoneO3_Stall","dhrystoneO3",true,true).run(1.5e6);
+ #if defined(COMPRESSED)
+ Dhrystone("dhrystoneO3C_Stall","dhrystoneO3C",true,true).run(1.5e6);
+ #endif
+ #if defined(MUL) && defined(DIV)
+ Dhrystone("dhrystoneO3M_Stall","dhrystoneO3M",true,true).run(1.9e6);
+ #if defined(COMPRESSED)
+ Dhrystone("dhrystoneO3MC_Stall","dhrystoneO3MC",true,true).run(1.9e6);
+ #endif
+ #endif
+ #if defined(COMPRESSED)
+ Dhrystone("dhrystoneO3C","dhrystoneO3C",false,false).run(1.9e6);
+ #endif
+ Dhrystone("dhrystoneO3","dhrystoneO3",false,false).run(1.9e6);
+ #if defined(MUL) && defined(DIV)
+ #if defined(COMPRESSED)
+ Dhrystone("dhrystoneO3MC","dhrystoneO3MC",false,false).run(1.9e6);
+ #endif
+ Dhrystone("dhrystoneO3M","dhrystoneO3M",false,false).run(1.9e6);
+ #endif
+ #endif
+
+ #ifdef COREMARK
+ for(int withStall = 1; true ;withStall--){
+ string rv = "rv32i";
+ #if defined(MUL) && defined(DIV)
+ rv += "m";
+ #endif
+ #if defined(COMPRESSED)
+ if(withStall == -2) break;
+ if(withStall != -1) rv += "c";
+ #else
+ if(withStall == -1) break;
+ #endif
+ WorkspaceRegression("coremark_" + rv + (withStall > 0 ? "_stall" : "_nostall")).withRiscvRef()
+ ->loadBin(string(REGRESSION_PATH) + "../../resources/bin/coremark_" + rv + ".bin", 0x80000000)
+ ->bootAt(0x80000000)
+ ->setIStall(withStall > 0)
+ ->setDStall(withStall > 0)
+ ->run(50e6);
+ }
+ #endif
+
+
+
+ #ifdef FREERTOS
+ {
+ #ifdef SEED
+ srand48(SEED);
+ #endif
+ //redo(1,WorkspaceRegression("freeRTOS_demo").loadHex("../../resources/hex/freeRTOS_demo.hex")->bootAt(0x80000000u)->run(100e6);)
+ vector <std::function<void()>> tasks;
+
+ /*for(int redo = 0;redo < 4;redo++)*/{
+ for(const string &name : freeRtosTests){
+ tasks.push_back([=]() { WorkspaceRegression(name + "_rv32i_O0").withRiscvRef()->loadHex(string(REGRESSION_PATH) + "../../resources/freertos/" + name + "_rv32i_O0.hex")->bootAt(0x80000000u)->run(4e6*15);});
+ tasks.push_back([=]() { WorkspaceRegression(name + "_rv32i_O3").withRiscvRef()->loadHex(string(REGRESSION_PATH) + "../../resources/freertos/" + name + "_rv32i_O3.hex")->bootAt(0x80000000u)->run(4e6*15);});
+ #ifdef COMPRESSED
+// tasks.push_back([=]() { WorkspaceRegression(name + "_rv32ic_O0").withRiscvRef()->loadHex(string(REGRESSION_PATH) + "../../resources/freertos/" + name + "_rv32ic_O0.hex")->bootAt(0x80000000u)->run(5e6*15);});
+ tasks.push_back([=]() { WorkspaceRegression(name + "_rv32ic_O3").withRiscvRef()->loadHex(string(REGRESSION_PATH) + "../../resources/freertos/" + name + "_rv32ic_O3.hex")->bootAt(0x80000000u)->run(4e6*15);});
+ #endif
+ #if defined(MUL) && defined(DIV)
+// #ifdef COMPRESSED
+// tasks.push_back([=]() { WorkspaceRegression(name + "_rv32imac_O3").withRiscvRef()->loadHex(string(REGRESSION_PATH) + "../../resources/freertos/" + name + "_rv32imac_O3.hex")->bootAt(0x80000000u)->run(4e6*15);});
+// #else
+ tasks.push_back([=]() { WorkspaceRegression(name + "_rv32im_O3").withRiscvRef()->loadHex(string(REGRESSION_PATH) + "../../resources/freertos/" + name + "_rv32im_O3.hex")->bootAt(0x80000000u)->run(4e6*15);});
+// #endif
+ #endif
+ }
+ }
+
+ while(tasks.size() > FREERTOS_COUNT){
+ tasks.erase(tasks.begin() + (VL_RANDOM_I_WIDTH(32)%tasks.size()));
+ }
+
+
+ queue <std::function<void()>> tasksSelected(std::deque<std::function<void()>>(tasks.begin(), tasks.end()));
+ multiThreadedExecute(tasksSelected);
+ }
+ #endif
+
+ #ifdef ZEPHYR
+ {
+ #ifdef SEED
+ srand48(SEED);
+ #endif
+ //redo(1,WorkspaceRegression("freeRTOS_demo").loadHex("../../resources/hex/freeRTOS_demo.hex")->bootAt(0x80000000u)->run(100e6);)
+ vector <std::function<void()>> tasks;
+
+ /*for(int redo = 0;redo < 4;redo++)*/{
+ for(const string &name : zephyrTests){
+ #ifdef COMPRESSED
+ tasks.push_back([=]() { ZephyrRegression(name + "_rv32ic").withRiscvRef()->loadHex(string(REGRESSION_PATH) + "../../resources/VexRiscvRegressionData/sim/zephyr/" + name + "_rv32ic.hex")->bootAt(0x80000000u)->run(180e6);});
+ #else
+ tasks.push_back([=]() { ZephyrRegression(name + "_rv32i").withRiscvRef()->loadHex(string(REGRESSION_PATH) + "../../resources/VexRiscvRegressionData/sim/zephyr/" + name + "_rv32i.hex")->bootAt(0x80000000u)->run(180e6);});
+ #endif
+ #if defined(MUL) && defined(DIV)
+ tasks.push_back([=]() { ZephyrRegression(name + "_rv32im").withRiscvRef()->loadHex(string(REGRESSION_PATH) + "../../resources/VexRiscvRegressionData/sim/zephyr/" + name + "_rv32im.hex")->bootAt(0x80000000u)->run(180e6);});
+ #endif
+ }
+ }
+
+ while(tasks.size() > ZEPHYR_COUNT){
+ tasks.erase(tasks.begin() + (VL_RANDOM_I_WIDTH(32)%tasks.size()));
+ }
+
+
+ queue <std::function<void()>> tasksSelected(std::deque<std::function<void()>>(tasks.begin(), tasks.end()));
+ multiThreadedExecute(tasksSelected);
+ }
+ #endif
+
+ #if defined(LINUX_REGRESSION)
+ {
+
+ LinuxRegression soc("linux");
+ #ifndef DEBUG_PLUGIN_EXTERNAL
+ soc.withRiscvRef();
+ soc.loadBin(string(REGRESSION_PATH) + EMULATOR, 0x80000000);
+ soc.loadBin(string(REGRESSION_PATH) + VMLINUX, 0xC0000000);
+ soc.loadBin(string(REGRESSION_PATH) + DTB, 0xC3000000);
+ soc.loadBin(string(REGRESSION_PATH) + RAMDISK, 0xC2000000);
+ #endif
+ //soc.setIStall(true);
+ //soc.setDStall(true);
+ soc.bootAt(0x80000000);
+ soc.run(153995602l*9);
+// soc.run((470000000l + 2000000) / 2);
+// soc.run(438700000l/2);
+ }
+ #endif
+
+ }
+
+ uint64_t duration = timer_end(startedAt);
+ cout << endl << "****************************************************************" << endl;
+ cout << "Had simulate " << Workspace::cycles << " clock cycles in " << duration*1e-9 << " s (" << Workspace::cycles / (duration*1e-6) << " Khz)" << endl;
+ if(Workspace::successCounter == Workspace::testsCounter)
+ cout << "REGRESSION SUCCESS " << Workspace::successCounter << "/" << Workspace::testsCounter << endl;
+ else
+ cout<< "REGRESSION FAILURE " << Workspace::testsCounter - Workspace::successCounter << "/" << Workspace::testsCounter << endl;
+ cout << "****************************************************************" << endl << endl;
+
+
+ exit(0);
+}
diff --git a/VexRiscv/src/test/cpp/regression/makefile b/VexRiscv/src/test/cpp/regression/makefile
new file mode 100644
index 0000000..b8759c9
--- /dev/null
+++ b/VexRiscv/src/test/cpp/regression/makefile
@@ -0,0 +1,345 @@
+DEBUG?=no
+REGRESSION_PATH?=./
+VEXRISCV_FILE?=../../../../VexRiscv.v
+IBUS?=CACHED
+IBUS_TC?=no
+IBUS_DATA_WIDTH?=32
+DBUS?=CACHED
+DBUS_LOAD_DATA_WIDTH?=32
+DBUS_STORE_DATA_WIDTH?=32
+TRACE?=no
+TRACE_ACCESS?=no
+TRACE_START=0
+TRACE_SPORADIC?=no
+ISA_TEST?=yes
+MUL?=yes
+DIV?=yes
+RVF?=no
+RVD?=no
+CSR?=yes
+CSR_SKIP_TEST?=no
+EBREAK?=no
+FENCEI?=no
+MMU?=yes
+DBUS_EXCLUSIVE?=no
+DBUS_INVALIDATE?=no
+PMP?=no
+SEED?=no
+LRSC?=no
+AMO?=no
+NO_STALL?=no
+DEBUG_PLUGIN?=STD
+DEBUG_PLUGIN_EXTERNAL?=no
+RUN_HEX=no
+WITH_RISCV_REF=yes
+CUSTOM_SIMD_ADD?=no
+CUSTOM_CSR?=no
+DHRYSTONE=yes
+FREERTOS?=no
+ZEPHYR?=no
+REDO?=10
+REF=no
+TRACE_WITH_TIME=no
+REF_TIME=no
+THREAD_COUNT?=$(shell nproc)
+MTIME_INSTR_FACTOR?=no
+COMPRESSED?=no
+SUPERVISOR?=no
+STOP_ON_ERROR?=no
+COREMARK=no
+WITH_USER_IO?=no
+
+
+ADDCFLAGS += -CFLAGS -DREGRESSION_PATH='\"$(REGRESSION_PATH)/\"'
+ADDCFLAGS += -CFLAGS -DIBUS_${IBUS}
+ADDCFLAGS += -CFLAGS -DIBUS_DATA_WIDTH=${IBUS_DATA_WIDTH}
+ADDCFLAGS += -CFLAGS -DDBUS_LOAD_DATA_WIDTH=${DBUS_LOAD_DATA_WIDTH}
+ADDCFLAGS += -CFLAGS -DDBUS_STORE_DATA_WIDTH=${DBUS_STORE_DATA_WIDTH}
+
+ADDCFLAGS += -CFLAGS -DDBUS_${DBUS}
+ADDCFLAGS += -CFLAGS -DREDO=${REDO}
+ADDCFLAGS += -CFLAGS -pthread
+ADDCFLAGS += -CFLAGS -Wno-unused-result
+
+
+
+ADDCFLAGS += -CFLAGS -DTHREAD_COUNT=${THREAD_COUNT}
+
+ifeq ($(DEBUG),yes)
+ ADDCFLAGS += -CFLAGS -O0 -CFLAGS -g
+else
+ ADDCFLAGS += -CFLAGS -O3 -O3
+endif
+
+ifeq ($(CONCURRENT_OS_EXECUTIONS),yes)
+ ADDCFLAGS += -CFLAGS -DCONCURRENT_OS_EXECUTIONS
+endif
+
+ifeq ($(LITEX),yes)
+ ADDCFLAGS += -CFLAGS -DLITEX
+ ADDCFLAGS += -CFLAGS -DVMLINUX='\"$(VMLINUX)\"'
+ ADDCFLAGS += -CFLAGS -DDTB='\"$(DTB)\"'
+ ADDCFLAGS += -CFLAGS -DRAMDISK='\"$(RAMDISK)\"'
+ ADDCFLAGS += -CFLAGS -DEMULATOR='\"$(EMULATOR)\"'
+endif
+
+ifeq ($(LINUX_SOC),yes)
+ ADDCFLAGS += -CFLAGS -DLINUX_SOC
+ ADDCFLAGS += -CFLAGS -DVMLINUX='\"$(VMLINUX)\"'
+ ADDCFLAGS += -CFLAGS -DDTB='\"$(DTB)\"'
+ ADDCFLAGS += -CFLAGS -DRAMDISK='\"$(RAMDISK)\"'
+ ADDCFLAGS += -CFLAGS -DEMULATOR='\"$(EMULATOR)\"'
+endif
+
+ifeq ($(LINUX_SOC_SMP),yes)
+ ADDCFLAGS += -CFLAGS -DLINUX_SOC_SMP
+ ADDCFLAGS += -CFLAGS -DVMLINUX='\"$(VMLINUX)\"'
+ ADDCFLAGS += -CFLAGS -DDTB='\"$(DTB)\"'
+ ADDCFLAGS += -CFLAGS -DRAMDISK='\"$(RAMDISK)\"'
+ ADDCFLAGS += -CFLAGS -DEMULATOR='\"$(EMULATOR)\"'
+endif
+
+
+ARCH_LINUX=rv32i
+ifeq ($(MUL),yes)
+ifeq ($(DIV),yes)
+ARCH_LINUX:=$(ARCH_LINUX)m
+endif
+endif
+ARCH_LINUX:=$(ARCH_LINUX)a
+ifeq ($(COMPRESSED),yes)
+ARCH_LINUX:=$(ARCH_LINUX)c
+endif
+
+ifeq ($(LINUX_REGRESSION),yes)
+ifneq ($(ARCH_LINUX),rv32iac)
+ifneq ($(ARCH_LINUX),rv32ia)
+ ADDCFLAGS += -CFLAGS -DLINUX_REGRESSION
+ ADDCFLAGS += -CFLAGS -DARCH_LINUX='\"$(ARCH_LINUX)\"'
+ ADDCFLAGS += -CFLAGS -DVMLINUX='\"../../resources/VexRiscvRegressionData/sim/linux/$(ARCH_LINUX)/Image\"'
+ ADDCFLAGS += -CFLAGS -DDTB='\"../../resources/VexRiscvRegressionData/sim/linux/$(ARCH_LINUX)/rv32.dtb\"'
+ ADDCFLAGS += -CFLAGS -DRAMDISK='\"../../resources/VexRiscvRegressionData/sim/linux/$(ARCH_LINUX)/rootfs.cpio\"'
+ ADDCFLAGS += -CFLAGS -DEMULATOR='\"../../resources/VexRiscvRegressionData/sim/linux/emulator/emulator.bin\"'
+endif
+endif
+endif
+
+
+ifeq ($(FLOW_INFO),yes)
+ ADDCFLAGS += -CFLAGS -DFLOW_INFO
+endif
+
+
+ifeq ($(COREMARK),yes)
+ ADDCFLAGS += -CFLAGS -DCOREMARK
+endif
+
+ifeq ($(WITH_RISCV_REF),yes)
+ ADDCFLAGS += -CFLAGS -DWITH_RISCV_REF
+endif
+
+
+
+ifneq ($(shell grep timerInterrupt ${VEXRISCV_FILE} -w),)
+ ADDCFLAGS += -CFLAGS -DTIMER_INTERRUPT
+endif
+
+ifneq ($(shell grep externalInterrupt ${VEXRISCV_FILE} -w),)
+ifneq ($(EXTERNAL_INTERRUPT),no)
+ ADDCFLAGS += -CFLAGS -DEXTERNAL_INTERRUPT
+endif
+endif
+
+ifneq ($(shell grep utime ${VEXRISCV_FILE} -w),)
+ ADDCFLAGS += -CFLAGS -DUTIME_INPUT
+endif
+
+ifneq ($(shell grep dBus_rsp_payload_aggregated ${VEXRISCV_FILE} -w),)
+ ADDCFLAGS += -CFLAGS -DDBUS_AGGREGATION
+endif
+
+
+ifneq ($(RUN_HEX),no)
+ ADDCFLAGS += -CFLAGS -DRUN_HEX='\"$(RUN_HEX)\"'
+endif
+
+
+ifeq ($(IBUS_TC),yes)
+ ADDCFLAGS += -CFLAGS -DIBUS_TC=yes
+endif
+ifeq ($(WITH_USER_IO),yes)
+ ADDCFLAGS += -CFLAGS -DWITH_USER_IO=yes
+endif
+
+
+ifeq ($(COMPRESSED),yes)
+ ADDCFLAGS += -CFLAGS -DCOMPRESSED
+endif
+ifeq ($(SUPERVISOR),yes)
+ ADDCFLAGS += -CFLAGS -DSUPERVISOR
+endif
+ifeq ($(FENCEI),yes)
+ ADDCFLAGS += -CFLAGS -DFENCEI
+endif
+
+ifeq ($(EBREAK),yes)
+ ADDCFLAGS += -CFLAGS -DEBREAK
+endif
+
+
+ifeq ($(DHRYSTONE),yes)
+ ADDCFLAGS += -CFLAGS -DDHRYSTONE
+endif
+
+ifeq ($(STOP_ON_ERROR),yes)
+ ADDCFLAGS += -CFLAGS -DSTOP_ON_ERROR
+endif
+
+
+ifeq ($(NO_STALL),yes)
+ ADDCFLAGS += -CFLAGS -DSTALL=0
+else
+ ADDCFLAGS += -CFLAGS -DSTALL=1
+endif
+
+ifneq ($(MTIME_INSTR_FACTOR),no)
+ ADDCFLAGS += -CFLAGS -DMTIME_INSTR_FACTOR=${MTIME_INSTR_FACTOR}
+endif
+
+ifneq ($(SEED),no)
+ ADDCFLAGS += -CFLAGS -DSEED=${SEED}
+endif
+
+ifeq ($(TRACE),yes)
+ VERILATOR_ARGS += --trace-fst
+ ADDCFLAGS += -CFLAGS -DTRACE
+endif
+
+ifeq ($(TRACE_SPORADIC),yes)
+ ADDCFLAGS += -CFLAGS -DTRACE_SPORADIC
+endif
+
+
+
+ifeq ($(CSR),yes)
+ ADDCFLAGS += -CFLAGS -DCSR
+endif
+
+ifeq ($(CSR_SKIP_TEST),yes)
+ ADDCFLAGS += -CFLAGS -DCSR_SKIP_TEST
+endif
+
+
+ifeq ($(LRSC),yes)
+ ADDCFLAGS += -CFLAGS -DLRSC
+endif
+
+ifeq ($(AMO),yes)
+ ADDCFLAGS += -CFLAGS -DAMO
+endif
+
+ifeq ($(CUSTOM_SIMD_ADD),yes)
+ ADDCFLAGS += -CFLAGS -DCUSTOM_SIMD_ADD
+endif
+
+ifeq ($(CUSTOM_CSR),yes)
+ ADDCFLAGS += -CFLAGS -DCUSTOM_CSR
+endif
+
+ifeq ($(TRACE_WITH_TIME),yes)
+ ADDCFLAGS += -CFLAGS -DTRACE_WITH_TIME
+endif
+
+ifeq ($(REF_TIME),yes)
+ ADDCFLAGS += -CFLAGS -DREF_TIME
+endif
+
+ifeq ($(ISA_TEST),yes)
+ ADDCFLAGS += -CFLAGS -DISA_TEST
+endif
+
+ifeq ($(MMU),yes)
+ ADDCFLAGS += -CFLAGS -DMMU
+endif
+
+ifeq ($(DBUS_EXCLUSIVE),yes)
+ ADDCFLAGS += -CFLAGS -DDBUS_EXCLUSIVE
+endif
+ifeq ($(DBUS_INVALIDATE),yes)
+ ADDCFLAGS += -CFLAGS -DDBUS_INVALIDATE
+endif
+
+ifeq ($(PMP),yes)
+ ADDCFLAGS += -CFLAGS -DPMP
+endif
+
+ifeq ($(MUL),yes)
+ ADDCFLAGS += -CFLAGS -DMUL
+endif
+
+ifeq ($(RVF),yes)
+ ADDCFLAGS += -CFLAGS -DRVF
+endif
+
+ifeq ($(RVD),yes)
+ ADDCFLAGS += -CFLAGS -DRVD
+endif
+
+ifeq ($(DIV),yes)
+ ADDCFLAGS += -CFLAGS -DDIV
+endif
+
+ifeq ($(TRACE_ACCESS),yes)
+ ADDCFLAGS += -CFLAGS -DTRACE_ACCESS
+endif
+
+ifneq ($(DEBUG_PLUGIN),no)
+ ADDCFLAGS += -CFLAGS -DDEBUG_PLUGIN
+ ADDCFLAGS += -CFLAGS -DDEBUG_PLUGIN_${DEBUG_PLUGIN}
+endif
+
+ifeq ($(DEBUG_PLUGIN_EXTERNAL),yes)
+ ADDCFLAGS += -CFLAGS -DDEBUG_PLUGIN_EXTERNAL
+endif
+
+ifeq ($(REF),yes)
+ ADDCFLAGS += -CFLAGS -DREF
+endif
+
+ADDCFLAGS += -CFLAGS -DTRACE_START=${TRACE_START}
+ifeq ($(FREERTOS),yes)
+ ADDCFLAGS += -CFLAGS -DFREERTOS
+ ADDCFLAGS += -CFLAGS -DFREERTOS_COUNT=99999
+else
+ifneq ($(FREERTOS),no)
+ ADDCFLAGS += -CFLAGS -DFREERTOS
+ ADDCFLAGS += -CFLAGS -DFREERTOS_COUNT=$(FREERTOS)
+endif
+endif
+
+
+ifeq ($(ZEPHYR),yes)
+ ADDCFLAGS += -CFLAGS -DZEPHYR
+ ADDCFLAGS += -CFLAGS -DZEPHYR_COUNT=99999
+else
+ifneq ($(ZEPHYR),no)
+ ADDCFLAGS += -CFLAGS -DZEPHYR
+ ADDCFLAGS += -CFLAGS -DZEPHYR_COUNT=$(ZEPHYR)
+endif
+endif
+
+all: clean run
+
+run: compile
+ ./obj_dir/VVexRiscv
+
+verilate: ${VEXRISCV_FILE}
+ cp ${VEXRISCV_FILE}*.bin . | true
+ verilator -cc ${VEXRISCV_FILE} -O3 -CFLAGS -std=c++11 -LDFLAGS -pthread ${ADDCFLAGS} --gdbbt ${VERILATOR_ARGS} -Wno-UNOPTFLAT -Wno-WIDTH --x-assign unique --exe main.cpp
+
+compile: verilate
+ make -j${THREAD_COUNT} -C obj_dir/ -f VVexRiscv.mk VVexRiscv
+
+clean:
+ rm -rf obj_dir
+
diff --git a/VexRiscv/src/test/cpp/regression/prediction.gtkw b/VexRiscv/src/test/cpp/regression/prediction.gtkw
new file mode 100644
index 0000000..8abfdd9
--- /dev/null
+++ b/VexRiscv/src/test/cpp/regression/prediction.gtkw
@@ -0,0 +1,43 @@
+[*]
+[*] GTKWave Analyzer v3.3.58 (w)1999-2014 BSI
+[*] Mon Jan 29 13:38:19 2018
+[*]
+[dumpfile] "/home/spinalvm/hdl/VexRiscv/src/test/cpp/regression/dhrystoneO3M.vcd"
+[dumpfile_mtime] "Mon Jan 29 13:37:19 2018"
+[dumpfile_size] 1215443558
+[savefile] "/home/spinalvm/hdl/VexRiscv/src/test/cpp/regression/prediction.gtkw"
+[timestart] 127017
+[size] 1784 950
+[pos] -383 -155
+*-3.000000 127032 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
+[treeopen] TOP.
+[sst_width] 400
+[signals_width] 583
+[sst_expanded] 1
+[sst_vpaned_height] 492
+@28
+TOP.VexRiscv.iBus_cmd_valid
+TOP.VexRiscv.decode_arbitration_flushAll
+TOP.VexRiscv.execute_arbitration_flushAll
+TOP.VexRiscv.fetch_arbitration_flushAll
+TOP.VexRiscv.memory_arbitration_flushAll
+TOP.VexRiscv.prefetch_arbitration_flushAll
+TOP.VexRiscv.writeBack_arbitration_flushAll
+TOP.VexRiscv.execute_BranchPlugin_predictionMissmatch
+TOP.VexRiscv.execute_PREDICTION2_confidence[1:0]
+@22
+TOP.VexRiscv.execute_PREDICTION2_source[18:0]
+TOP.VexRiscv.execute_PREDICTION2_target[31:0]
+@28
+TOP.VexRiscv.execute_PREDICTION_HIT2
+TOP.VexRiscv.execute_PREDICTION_WRITE_HAZARD2
+@23
+TOP.VexRiscv.execute_PC[31:0]
+@28
+TOP.VexRiscv.prefetch_PcManagerSimplePlugin_jump_pcLoad_valid
+@22
+TOP.VexRiscv.prefetch_PcManagerSimplePlugin_jump_pcLoad_payload[31:0]
+@29
+TOP.VexRiscv.execute_arbitration_isFiring
+[pattern_trace] 1
+[pattern_trace] 0
diff --git a/VexRiscv/src/test/cpp/regression/refDiff.gtkw b/VexRiscv/src/test/cpp/regression/refDiff.gtkw
new file mode 100644
index 0000000..5be0db4
--- /dev/null
+++ b/VexRiscv/src/test/cpp/regression/refDiff.gtkw
@@ -0,0 +1,40 @@
+[*]
+[*] GTKWave Analyzer v3.3.58 (w)1999-2014 BSI
+[*] Fri Mar 17 18:05:14 2017
+[*]
+[dumpfile] "/home/spinalvm/Spinal/VexRiscv/src/test/cpp/testA/DhrystoneRef.vcd"
+[dumpfile_mtime] "Fri Mar 17 18:03:52 2017"
+[dumpfile_size] 1483111421
+[savefile] "/home/spinalvm/Spinal/VexRiscv/src/test/cpp/testA/refDiff.gtkw"
+[timestart] 36700
+[size] 1774 451
+[pos] -775 -353
+*-2.000000 36713 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
+[treeopen] TOP.
+[treeopen] TOP.VexRiscv.
+[sst_width] 201
+[signals_width] 583
+[sst_expanded] 1
+[sst_vpaned_height] 68
+@22
+TOP.VexRiscv.writeBack_RegFilePlugin_regFileWrite_payload_address[4:0]
+@24
+TOP.VexRiscv.writeBack_RegFilePlugin_regFileWrite_payload_data[31:0]
+@28
+TOP.VexRiscv.writeBack_RegFilePlugin_regFileWrite_valid
+TOP.VexRiscv.writeBack_arbitration_isValid
+TOP.VexRiscv.clk
+@22
+TOP.VexRiscv.core.writeBack_inInst_payload_instruction[31:0]
+TOP.VexRiscv.core.writeBack_inInst_payload_pcPlus4[31:0]
+TOP.dCmd_payload_address[31:0]
+TOP.dCmd_payload_data[31:0]
+@28
+TOP.dCmd_payload_size[1:0]
+TOP.dCmd_payload_wr
+TOP.dCmd_ready
+TOP.dCmd_valid
+@25
+TOP.dRsp_data[31:0]
+[pattern_trace] 1
+[pattern_trace] 0
diff --git a/VexRiscv/src/test/cpp/regression/wrongDiff.gtkw b/VexRiscv/src/test/cpp/regression/wrongDiff.gtkw
new file mode 100644
index 0000000..29d111c
--- /dev/null
+++ b/VexRiscv/src/test/cpp/regression/wrongDiff.gtkw
@@ -0,0 +1,62 @@
+[*]
+[*] GTKWave Analyzer v3.3.58 (w)1999-2014 BSI
+[*] Sat Mar 18 09:49:22 2017
+[*]
+[dumpfile] "/home/spinalvm/Spinal/VexRiscv/src/test/cpp/testA/DhrystoneWrong.vcd"
+[dumpfile_mtime] "Sat Mar 18 08:08:53 2017"
+[dumpfile_size] 1450277049
+[savefile] "/home/spinalvm/Spinal/VexRiscv/src/test/cpp/testA/wrongDiff.gtkw"
+[timestart] 37402
+[size] 1774 476
+[pos] -1 475
+*-2.000000 37407 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
+[treeopen] TOP.
+[treeopen] TOP.VexRiscv.
+[sst_width] 201
+[signals_width] 583
+[sst_expanded] 1
+[sst_vpaned_height] 112
+@28
+TOP.VexRiscv.fetch_arbitration_isStuck
+TOP.VexRiscv.decode_arbitration_isStuck
+TOP.VexRiscv.execute_arbitration_isStuck
+TOP.VexRiscv.memory_arbitration_isStuck
+TOP.VexRiscv.writeBack_arbitration_isStuck
+TOP.VexRiscv.prefetch_arbitration_isValid
+TOP.VexRiscv.fetch_arbitration_isValid
+@29
+TOP.VexRiscv.decode_arbitration_isValid
+@28
+TOP.VexRiscv.execute_arbitration_isValid
+TOP.VexRiscv.memory_arbitration_isValid
+TOP.VexRiscv.writeBack_arbitration_isValid
+@22
+TOP.VexRiscv.writeBack_input_PC[31:0]
+TOP.VexRiscv.writeBack_RegFilePlugin_regFileWrite_payload_address[4:0]
+@24
+TOP.VexRiscv.writeBack_RegFilePlugin_regFileWrite_payload_data[31:0]
+@28
+TOP.VexRiscv.writeBack_RegFilePlugin_regFileWrite_valid
+TOP.VexRiscv.writeBack_arbitration_isValid
+TOP.VexRiscv.clk
+TOP.dCmd_valid
+TOP.dCmd_ready
+TOP.dCmd_payload_wr
+TOP.dCmd_payload_size[1:0]
+@22
+TOP.dCmd_payload_address[31:0]
+TOP.dCmd_payload_data[31:0]
+@24
+TOP.dRsp_data[31:0]
+@22
+TOP.VexRiscv.execute_input_PC[31:0]
+TOP.VexRiscv.execute_input_INSTRUCTION[31:0]
+@28
+TOP.VexRiscv.fetch_arbitration_removeIt
+TOP.VexRiscv.decode_arbitration_removeIt
+TOP.VexRiscv.execute_arbitration_removeIt
+TOP.VexRiscv.memory_arbitration_removeIt
+TOP.VexRiscv.writeBack_arbitration_removeIt
+TOP.VexRiscv.execute_arbitration_isValid
+[pattern_trace] 1
+[pattern_trace] 0
diff --git a/VexRiscv/src/test/cpp/regression/yolo.gtkw b/VexRiscv/src/test/cpp/regression/yolo.gtkw
new file mode 100644
index 0000000..66b5bbc
--- /dev/null
+++ b/VexRiscv/src/test/cpp/regression/yolo.gtkw
@@ -0,0 +1,84 @@
+[*]
+[*] GTKWave Analyzer v3.3.58 (w)1999-2014 BSI
+[*] Tue Mar 14 21:27:40 2017
+[*]
+[dumpfile] "/home/spinalvm/Spinal/VexRiscv/src/test/cpp/testA/rv32ui-p-lw.vcd"
+[dumpfile_mtime] "Tue Mar 14 21:24:45 2017"
+[dumpfile_size] 1017741
+[savefile] "/home/spinalvm/Spinal/VexRiscv/src/test/cpp/testA/yolo.gtkw"
+[timestart] 41
+[size] 1776 953
+[pos] -1 -1
+*-1.801840 49 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
+[treeopen] TOP.
+[sst_width] 418
+[signals_width] 559
+[sst_expanded] 1
+[sst_vpaned_height] 279
+@28
+TOP.clk
+TOP.dCmd_valid
+TOP.dCmd_ready
+TOP.dCmd_payload_wr
+@22
+TOP.dCmd_payload_address[31:0]
+TOP.dCmd_payload_data[31:0]
+@28
+TOP.dCmd_payload_size[1:0]
+@23
+TOP.dRsp_data[31:0]
+@22
+TOP.iCmd_payload_pc[31:0]
+@28
+TOP.iCmd_ready
+TOP.iCmd_valid
+@22
+TOP.iRsp_inst[31:0]
+@28
+TOP.reset
+TOP.clk
+TOP.iCmd_valid
+@22
+TOP.iCmd_payload_pc[31:0]
+@28
+TOP.iCmd_ready
+@22
+TOP.iRsp_inst[31:0]
+@28
+TOP.reset
+TOP.VexRiscv.writeBack_arbitration_isValid
+@22
+TOP.VexRiscv.writeBack_input_INSTRUCTION[31:0]
+TOP.VexRiscv.writeBack_input_PC[31:0]
+@28
+TOP.VexRiscv.writeBack_RegFilePlugin_regFileWrite_valid
+@22
+TOP.VexRiscv.writeBack_RegFilePlugin_regFileWrite_payload_address[4:0]
+TOP.VexRiscv.writeBack_RegFilePlugin_regFileWrite_payload_data[31:0]
+@28
+TOP.VexRiscv.prefetch_arbitration_isValid
+TOP.VexRiscv.fetch_arbitration_isValid
+TOP.VexRiscv.decode_arbitration_isValid
+TOP.VexRiscv.execute_arbitration_isValid
+TOP.VexRiscv.memory_arbitration_isValid
+TOP.VexRiscv.writeBack_arbitration_isValid
+TOP.VexRiscv.prefetch_arbitration_isStuck
+TOP.VexRiscv.fetch_arbitration_isStuck
+TOP.VexRiscv.decode_arbitration_isStuck
+TOP.VexRiscv.execute_arbitration_isStuck
+TOP.VexRiscv.memory_arbitration_isStuck
+TOP.VexRiscv.writeBack_arbitration_isStuck
+@22
+TOP.VexRiscv.prefetch_input_PC[31:0]
+TOP.VexRiscv.fetch_input_PC[31:0]
+TOP.VexRiscv.decode_input_PC[31:0]
+TOP.VexRiscv.execute_input_PC[31:0]
+TOP.VexRiscv.memory_input_PC[31:0]
+TOP.VexRiscv.writeBack_input_PC[31:0]
+TOP.VexRiscv.fetch_input_INSTRUCTION[31:0]
+TOP.VexRiscv.decode_input_INSTRUCTION[31:0]
+TOP.VexRiscv.execute_input_INSTRUCTION[31:0]
+TOP.VexRiscv.memory_input_INSTRUCTION[31:0]
+TOP.VexRiscv.writeBack_input_INSTRUCTION[31:0]
+[pattern_trace] 1
+[pattern_trace] 0