diff options
Diffstat (limited to 'VexRiscv/src/test/cpp')
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 Binary files differnew file mode 100755 index 0000000..a67f244 --- /dev/null +++ b/VexRiscv/src/test/cpp/custom/atomic/build/atomic.elf 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 Binary files differnew file mode 100755 index 0000000..61da8ff --- /dev/null +++ b/VexRiscv/src/test/cpp/custom/custom_csr/build/custom_csr.elf 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 Binary files differnew file mode 100755 index 0000000..889f618 --- /dev/null +++ b/VexRiscv/src/test/cpp/custom/simd_add/build/custom_simd_add.elf 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 Binary files differnew file mode 100755 index 0000000..f6c3c69 --- /dev/null +++ b/VexRiscv/src/test/cpp/raw/pmp/build/pmp.elf 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 Binary files differnew file mode 100755 index 0000000..5ce6918 --- /dev/null +++ b/VexRiscv/src/test/cpp/raw/smp/build/smp.bin 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*)®s[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 |