Restructure
This commit is contained in:
BIN
emulator/.DS_Store
vendored
Normal file
BIN
emulator/.DS_Store
vendored
Normal file
Binary file not shown.
0
emulator/BUGS
Normal file
0
emulator/BUGS
Normal file
12
emulator/LICENSE
Normal file
12
emulator/LICENSE
Normal file
@@ -0,0 +1,12 @@
|
||||
Copyright (c) 2011, Georgia Institute of Technology
|
||||
All rights reserved.
|
||||
|
||||
Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
|
||||
|
||||
1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
|
||||
|
||||
2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
|
||||
|
||||
3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission.
|
||||
|
||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
54
emulator/Makefile
Normal file
54
emulator/Makefile
Normal file
@@ -0,0 +1,54 @@
|
||||
################################################################################
|
||||
# HARPtools by Chad D. Kersey, Summer 2011 #
|
||||
################################################################################
|
||||
CXXFLAGS ?= -std=c++11 -fPIC -O3 # -g -DUSE_DEBUG=3 -DPRINT_ACTIVE_THREADS
|
||||
LDLIBS ?= -pthread
|
||||
PREFIX ?= /usr/local
|
||||
|
||||
LIB_OBJS=args.o mem.o core.o instruction.o enc.o util.o
|
||||
|
||||
all: harptool libharplib.so libharplib.a #libqsim-harp.so
|
||||
|
||||
# Use -static so we don't have to install the library in order to just run
|
||||
# Harptool.
|
||||
harptool: harptool.o libharplib.a
|
||||
$(CXX) $(LDFLAGS) -o $@ harptool.o libharplib.a $(LDLIBS)
|
||||
|
||||
libharplib.so: $(LIB_OBJS)
|
||||
$(CXX) -shared -o $@ $(LIB_OBJS) $(LDLIBS)
|
||||
|
||||
libharplib.a: $(LIB_OBJS)
|
||||
ar rcs $@ $(LIB_OBJS)
|
||||
|
||||
args.o : args.cpp include/args.h
|
||||
enc.o : enc.cpp include/types.h include/util.h include/enc.h include/archdef.h\
|
||||
include/instruction.h
|
||||
harptool.o : harptool.cpp include/types.h include/core.h include/enc.h \
|
||||
include/instruction.h include/mem.h include/obj.h \
|
||||
include/archdef.h include/args.h include/help.h include/debug.h
|
||||
instruction.o : instruction.cpp include/instruction.h include/obj.h \
|
||||
include/core.h include/debug.h include/asm-tokens.h
|
||||
util.o : util.cpp include/types.h include/util.h
|
||||
mem.o : mem.cpp include/types.h include/util.h include/mem.h include/debug.h \
|
||||
include/core.h
|
||||
core.o : core.cpp include/types.h include/util.h include/mem.h \
|
||||
include/debug.h include/archdef.h include/core.h
|
||||
|
||||
#QSIM_CXXFLAGS=-DEMU_INSTRUMENTATION
|
||||
#
|
||||
#libqsim-harp.so: args.cpp enc.cpp instruction.cpp obj.cpp util.cpp mem.cpp \
|
||||
# core.cpp qsim-harp.cpp lex.yy.o include/qsim-harp.h \
|
||||
# include/types.h include/core.h include/util.h include/enc.h \
|
||||
# include/archdef.h include/instruction.h include/asm-tokens.h \
|
||||
# include/mem.h
|
||||
# $(CXX) $(CXXFLAGS) $(QSIM_CXXFLAGS) -shared -o $@ $^
|
||||
|
||||
|
||||
install:
|
||||
cp libharplib.so $(PREFIX)/lib
|
||||
cp harptool $(PREFIX)/bin
|
||||
mkdir -p $(PREFIX)/include/harp
|
||||
cp include/* $(PREFIX)/include/harp
|
||||
|
||||
clean:
|
||||
rm -f *~ \#* *.o *.a *.so include/*~ include/\#* harptool
|
||||
14
emulator/WISHLIST
Normal file
14
emulator/WISHLIST
Normal file
@@ -0,0 +1,14 @@
|
||||
- Anonymous chunks whose names are not saved by the object writer.
|
||||
- 32-bit instruction encoding for larger-pointered architecture versions.
|
||||
- HOFDump mode for HARPTool/HOFTool
|
||||
- Make operation information tables into member functions of Instruction, if
|
||||
possible.
|
||||
- Anonymous assigned values in the assembler.
|
||||
- References (pointers) as .word directive contents in the assembler.
|
||||
- Instruction validation before encoding.
|
||||
- Make readError in obj.cpp throw something instead of printing a message and
|
||||
exiting.
|
||||
- Limit checking for byte/word encoders (e.g. 255 pRegs, 256 regs for byte)
|
||||
- Eliminate the tmp_buf nonsense from the chunk encoder.
|
||||
- Loosen arch restrictions imposed for interoperability (the number of lanes is
|
||||
typically unimportant)
|
||||
52
emulator/args.cpp
Normal file
52
emulator/args.cpp
Normal file
@@ -0,0 +1,52 @@
|
||||
/*******************************************************************************
|
||||
HARPtools by Chad D. Kersey, Summer 2011
|
||||
*******************************************************************************/
|
||||
#include "include/args.h"
|
||||
|
||||
#include <iostream>
|
||||
#include <string>
|
||||
|
||||
using namespace HarpTools;
|
||||
using std::string;
|
||||
|
||||
std::string CommandLineArg::helpString;
|
||||
std::map<string, CommandLineArg *> CommandLineArg::longArgs;
|
||||
std::map<string, CommandLineArg *> CommandLineArg::shortArgs;
|
||||
|
||||
CommandLineArg::CommandLineArg(string s, string l, const char *helpText)
|
||||
{
|
||||
helpString += helpText;
|
||||
longArgs[l] = this;
|
||||
shortArgs[s] = this;
|
||||
}
|
||||
|
||||
CommandLineArg::CommandLineArg(string l, const char *helpText) {
|
||||
helpString += helpText;
|
||||
longArgs[l] = this;
|
||||
}
|
||||
|
||||
void CommandLineArg::readArgs(int argc, char **argv) {
|
||||
for (int i = 0; i < argc; i++) {
|
||||
std::map<string, CommandLineArg *>::iterator
|
||||
s = shortArgs.find(std::string(argv[i])),
|
||||
l = longArgs.find(std::string(argv[i]));
|
||||
|
||||
if (s != shortArgs.end()) {
|
||||
i += s->second->read(argc - i, &argv[i]);
|
||||
} else if (l != longArgs.end()) {
|
||||
i += l->second->read(argc - i, &argv[i]);
|
||||
} else {
|
||||
throw BadArg(string(argv[i]));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void CommandLineArg::clearArgs() {
|
||||
shortArgs.clear();
|
||||
longArgs.clear();
|
||||
helpString = "";
|
||||
}
|
||||
|
||||
void CommandLineArg::showHelp(std::ostream &os) {
|
||||
os << helpString;
|
||||
}
|
||||
264
emulator/core.cpp
Normal file
264
emulator/core.cpp
Normal file
@@ -0,0 +1,264 @@
|
||||
/*******************************************************************************
|
||||
HARPtools by Chad D. Kersey, Summer 2011
|
||||
*******************************************************************************/
|
||||
|
||||
#include <iostream>
|
||||
|
||||
// #define USE_DEBUG 7
|
||||
// #define PRINT_ACTIVE_THREADS
|
||||
|
||||
#include "include/types.h"
|
||||
#include "include/util.h"
|
||||
#include "include/archdef.h"
|
||||
#include "include/mem.h"
|
||||
#include "include/enc.h"
|
||||
#include "include/core.h"
|
||||
#include "include/debug.h"
|
||||
|
||||
#ifdef EMU_INSTRUMENTATION
|
||||
#include "include/qsim-harp.h"
|
||||
#endif
|
||||
|
||||
using namespace Harp;
|
||||
using namespace std;
|
||||
|
||||
#ifdef EMU_INSTRUMENTATION
|
||||
void Harp::reg_doRead(Word cpuId, Word regNum) {
|
||||
Harp::OSDomain::osDomain->do_reg(cpuId, regNum, 8, true);
|
||||
}
|
||||
|
||||
void Harp::reg_doWrite(Word cpuId, Word regNum) {
|
||||
Harp::OSDomain::osDomain->do_reg(cpuId, regNum, 8, false);
|
||||
}
|
||||
#endif
|
||||
|
||||
Core::Core(const ArchDef &a, Decoder &d, MemoryUnit &mem, Word id):
|
||||
a(a), iDec(d), mem(mem), steps(0)
|
||||
{
|
||||
for (unsigned i = 0; i < a.getNWarps(); ++i)
|
||||
w.push_back(Warp(this));
|
||||
|
||||
w[0].activeThreads = 1;
|
||||
w[0].spawned = true;
|
||||
}
|
||||
|
||||
bool Core::interrupt(Word r0) {
|
||||
w[0].interrupt(r0);
|
||||
}
|
||||
|
||||
void Core::step() {
|
||||
++steps;
|
||||
|
||||
#ifdef PRINT_ACTIVE_THREADS
|
||||
cout << endl << "Threads:";
|
||||
#endif
|
||||
|
||||
for (unsigned i = 0; i < w.size(); ++i) {
|
||||
if (w[i].activeThreads) {
|
||||
D(3, "Core step stepping warp " << i << '[' << w[i].activeThreads << ']');
|
||||
w[i].step();
|
||||
D(3, "Now " << w[i].activeThreads << " active threads in " << i);
|
||||
}
|
||||
|
||||
#ifdef PRINT_ACTIVE_THREADS
|
||||
for (unsigned j = 0; j < w[i].tmask.size(); ++j) {
|
||||
if (w[i].activeThreads > j && w[i].tmask[j]) cout << " 1";
|
||||
else cout << " 0";
|
||||
if (j != w[i].tmask.size()-1 || i != w.size()-1) cout << ',';
|
||||
}
|
||||
#endif
|
||||
}
|
||||
#ifdef PRINT_ACTIVE_THREADS
|
||||
cout << endl;
|
||||
#endif
|
||||
}
|
||||
|
||||
bool Core::running() const {
|
||||
for (unsigned i = 0; i < w.size(); ++i)
|
||||
if (w[i].running()) return true;
|
||||
return false;
|
||||
}
|
||||
|
||||
void Core::printStats() const {
|
||||
unsigned long insts = 0;
|
||||
for (unsigned i = 0; i < w.size(); ++i)
|
||||
insts += w[i].insts;
|
||||
|
||||
cout << "Total steps: " << steps << endl;
|
||||
cout << "Total insts: " << insts << endl;
|
||||
for (unsigned i = 0; i < w.size(); ++i) {
|
||||
cout << "=== Warp " << i << " ===" << endl;
|
||||
w[i].printStats();
|
||||
}
|
||||
}
|
||||
|
||||
Warp::Warp(Core *c, Word id) :
|
||||
core(c), pc(0), interruptEnable(true),
|
||||
supervisorMode(true), activeThreads(0), reg(0), pred(0),
|
||||
shadowReg(core->a.getNRegs()), shadowPReg(core->a.getNPRegs()), id(id),
|
||||
spawned(false), steps(0), insts(0), loads(0), stores(0)
|
||||
{
|
||||
/* Build the register file. */
|
||||
Word regNum(0);
|
||||
for (Word j = 0; j < core->a.getNThds(); ++j) {
|
||||
reg.push_back(vector<Reg<Word> >(0));
|
||||
for (Word i = 0; i < core->a.getNRegs(); ++i) {
|
||||
reg[j].push_back(Reg<Word>(id, regNum++));
|
||||
}
|
||||
|
||||
pred.push_back(vector<Reg<bool> >(0));
|
||||
for (Word i = 0; i < core->a.getNPRegs(); ++i) {
|
||||
pred[j].push_back(Reg<bool>(id, regNum++));
|
||||
}
|
||||
|
||||
tmask.push_back(true);
|
||||
shadowTmask.push_back(true);
|
||||
}
|
||||
|
||||
Word csrNum(0);
|
||||
for (Word i = 0; i < (1<<12); i++)
|
||||
{
|
||||
csr.push_back(Reg<uint16_t>(id, regNum++));
|
||||
}
|
||||
|
||||
/* Set initial register contents. */
|
||||
reg[0][0] = (core->a.getNThds()<<(core->a.getWordSize()*8 / 2)) | id;
|
||||
}
|
||||
|
||||
void Warp::step() {
|
||||
Size fetchPos(0), decPos, wordSize(core->a.getWordSize());
|
||||
vector<Byte> fetchBuffer(wordSize);
|
||||
|
||||
if (activeThreads == 0) return;
|
||||
|
||||
++steps;
|
||||
|
||||
D(3, "in step pc=0x" << hex << pc);
|
||||
|
||||
// std::cout << "pc: " << hex << pc << "\n";
|
||||
|
||||
/* Fetch and decode. */
|
||||
if (wordSize < sizeof(pc)) pc &= ((1ll<<(wordSize*8))-1);
|
||||
Instruction *inst;
|
||||
bool fetchMore;
|
||||
do {
|
||||
/* Todo: speed this up for the byte encoder? */
|
||||
try {
|
||||
fetchMore = false;
|
||||
unsigned fetchSize(wordSize - (pc+fetchPos)%wordSize);
|
||||
fetchBuffer.resize(fetchPos + fetchSize);
|
||||
Word fetched = core->mem.fetch(pc + fetchPos, supervisorMode);
|
||||
writeWord(fetchBuffer, fetchPos, fetchSize, fetched);
|
||||
decPos = 0;
|
||||
inst = core->iDec.decode(fetchBuffer, decPos);
|
||||
} catch (OutOfBytes o) {
|
||||
D(3, "Caught OutOfBytes. Fetching more.");
|
||||
fetchMore = true;
|
||||
} catch (MemoryUnit::PageFault pf) {
|
||||
fetchPos = 0;
|
||||
fetchMore = true;
|
||||
interrupt(pf.notFound?1:2);
|
||||
reg[0][1] = pf.faultAddr;
|
||||
}
|
||||
} while (fetchMore);
|
||||
D(3, "Fetched at 0x" << hex << pc);
|
||||
D(3, "0x" << hex << pc << ": " << *inst);
|
||||
|
||||
#ifdef EMU_INSTRUMENTATION
|
||||
{ Addr pcPhys(core->mem.virtToPhys(pc));
|
||||
Harp::OSDomain::osDomain->
|
||||
do_inst(0, pc, pcPhys, decPos, core->mem.getPtr(pcPhys, decPos),
|
||||
(enum inst_type)inst->instTable[inst->getOpcode()].iType);
|
||||
}
|
||||
#endif
|
||||
|
||||
// Update pc
|
||||
pc += decPos;
|
||||
|
||||
// Execute
|
||||
try {
|
||||
inst->executeOn(*this);
|
||||
} catch (MemoryUnit::PageFault pf) {
|
||||
D(2, "Interrupt: Page fault");
|
||||
pc -= decPos; /* Reset to beginning of faulting address. */
|
||||
interrupt(pf.notFound?1:2);
|
||||
reg[0][1] = pf.faultAddr;
|
||||
} catch (DivergentBranchException e) {
|
||||
D(2, "Interrupt 4: Divergent branch");
|
||||
pc -= decPos;
|
||||
interrupt(4);
|
||||
} catch (DomainException e) {
|
||||
D(2, "Interrupt: DomainException");
|
||||
interrupt(5);
|
||||
}
|
||||
|
||||
// At Debug Level 3, print debug info after each instruction.
|
||||
#ifdef USE_DEBUG
|
||||
if (USE_DEBUG >= 3) {
|
||||
D(3, "Register state:");
|
||||
for (unsigned i = 0; i < reg[0].size(); ++i) {
|
||||
D_RAW(" %r" << dec << i << ':');
|
||||
for (unsigned j = 0; j < reg.size(); ++j)
|
||||
D_RAW(' ' << hex << reg[j][i] << ' ');
|
||||
D_RAW('(' << shadowReg[i] << ')' << endl);
|
||||
}
|
||||
// D(3, "Predicate state:");
|
||||
// D_RAW(" ");
|
||||
// for (unsigned j = 0; j < pred.size(); ++j) {
|
||||
// for (unsigned i = 0; i < pred[j].size(); ++i) D_RAW(pred[j][i]);
|
||||
// D_RAW(endl);
|
||||
// }
|
||||
// D_RAW(" (");
|
||||
// for (unsigned i = 0; i < shadowPReg.size(); ++i) D_RAW(shadowPReg[i]);
|
||||
// D_RAW(')' << endl);
|
||||
|
||||
D(3, "Thread mask:");
|
||||
D_RAW(" ");
|
||||
for (unsigned i = 0; i < tmask.size(); ++i) D_RAW(tmask[i] << ' ');
|
||||
D_RAW(endl);
|
||||
D_RAW(endl);
|
||||
D_RAW(endl);
|
||||
}
|
||||
#endif
|
||||
|
||||
// Clean up.
|
||||
delete inst;
|
||||
}
|
||||
|
||||
bool Warp::interrupt(Word r0) {
|
||||
if (!interruptEnable) return false;
|
||||
|
||||
#ifdef EMU_INSTRUMENTATION
|
||||
Harp::OSDomain::osDomain->do_int(0, r0);
|
||||
#endif
|
||||
|
||||
shadowActiveThreads = activeThreads;
|
||||
shadowTmask = tmask;
|
||||
shadowInterruptEnable = interruptEnable; /* For traps. */
|
||||
shadowSupervisorMode = supervisorMode;
|
||||
|
||||
for (Word i = 0; i < reg[0].size(); ++i) shadowReg[i] = reg[0][i];
|
||||
for (Word i = 0; i < pred[0].size(); ++i) shadowPReg[i] = pred[0][i];
|
||||
for (Word i = 0; i < reg.size(); ++i) tmask[i] = 1;
|
||||
|
||||
shadowPc = pc;
|
||||
activeThreads = 1;
|
||||
interruptEnable = false;
|
||||
supervisorMode = true;
|
||||
reg[0][0] = r0;
|
||||
pc = core->interruptEntry;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
void Warp::printStats() const {
|
||||
cout << "Steps : " << steps << endl
|
||||
<< "Insts : " << insts << endl
|
||||
<< "Loads : " << loads << endl
|
||||
<< "Stores: " << stores << endl;
|
||||
|
||||
unsigned const grade = reg[0][28];
|
||||
|
||||
if (grade == 1) cout << "GRADE: PASSED\n";
|
||||
else cout << "GRADE: FAILED " << (grade >> 1) << "\n";
|
||||
}
|
||||
405
emulator/enc.cpp
Normal file
405
emulator/enc.cpp
Normal file
@@ -0,0 +1,405 @@
|
||||
/*******************************************************************************
|
||||
HARPtools by Chad D. Kersey, Summer 2011
|
||||
*******************************************************************************/
|
||||
#include <iostream>
|
||||
#include <string>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include <iomanip>
|
||||
#include <vector>
|
||||
|
||||
#include "include/debug.h"
|
||||
#include "include/types.h"
|
||||
#include "include/util.h"
|
||||
#include "include/enc.h"
|
||||
#include "include/archdef.h"
|
||||
#include "include/instruction.h"
|
||||
|
||||
using namespace std;
|
||||
using namespace Harp;
|
||||
|
||||
ByteDecoder::ByteDecoder(const ArchDef &ad) {
|
||||
wordSize = ad.getWordSize();
|
||||
}
|
||||
|
||||
static void decodeError(string msg) {
|
||||
cout << "Instruction decoder error: " << msg << '\n';
|
||||
exit(1);
|
||||
}
|
||||
|
||||
void Encoder::encodeChunk(DataChunk &dest, const TextChunk &src) {
|
||||
// typedef vector<Instruction*>::const_iterator vec_it;
|
||||
// const vector<Instruction*> &s(src.instructions);
|
||||
// vector<Byte> &d(dest.contents);
|
||||
|
||||
// /* Keep encoding the instructions. */
|
||||
// Size n = 0;
|
||||
|
||||
// /* For each instruction. */
|
||||
// for (vec_it i = s.begin(); i != s.end(); i++) {
|
||||
// Ref *ref;
|
||||
|
||||
// /* Perform the encoding. */
|
||||
// n += encode(ref, d, n, **i);
|
||||
|
||||
// /* Add reference if necessary. */
|
||||
// if (ref != NULL) {
|
||||
// ref->ibase = n;
|
||||
// dest.refs.push_back(ref);
|
||||
// }
|
||||
// }
|
||||
|
||||
// dest.alignment = src.alignment;
|
||||
// dest.flags = src.flags;
|
||||
// dest.address = src.address;
|
||||
// dest.bound = src.bound;
|
||||
// if (src.isGlobal()) dest.setGlobal();
|
||||
|
||||
// d.resize(n);
|
||||
// dest.size = n;
|
||||
}
|
||||
|
||||
void Decoder::decodeChunk(TextChunk &dest, const DataChunk &src) {
|
||||
// typedef vector<Instruction*>::const_iterator vec_it;
|
||||
// const vector<Byte> &v(src.contents);
|
||||
// Size n = 0;
|
||||
|
||||
// setRefs(src.refs);
|
||||
|
||||
// while (n < src.contents.size()) {
|
||||
// Instruction *inst = decode(v, n);
|
||||
// if (inst->hasRefLiteral()) {
|
||||
// dest.refs.push_back(inst->getRefLiteral());
|
||||
// }
|
||||
|
||||
// dest.instructions.push_back(inst);
|
||||
// }
|
||||
|
||||
// dest.alignment = src.alignment;
|
||||
// dest.flags = src.flags;
|
||||
// dest.address = src.address;
|
||||
// dest.bound = src.bound;
|
||||
// if (src.isGlobal()) dest.setGlobal();
|
||||
|
||||
// clearRefs();
|
||||
// }
|
||||
|
||||
// void Decoder::setRefs(const std::vector<Ref*> &refVec) {
|
||||
// haveRefs = true;
|
||||
|
||||
// typedef std::vector<Ref*>::const_iterator vec_ci;
|
||||
|
||||
// for (vec_ci i = refVec.begin(); i != refVec.end(); i++) {
|
||||
// OffsetRef *oref = dynamic_cast<OffsetRef*>(*i);
|
||||
// if (oref) {
|
||||
// refMap[oref->getOffset()] = *i;
|
||||
// } else {
|
||||
// decodeError("Unknown Ref type in Decoder::setRefs");
|
||||
// }
|
||||
// }
|
||||
}
|
||||
|
||||
Instruction *ByteDecoder::decode(const vector<Byte> &v, Size &n) {
|
||||
Instruction &inst = *(new Instruction());
|
||||
|
||||
// uint8_t pred = readByte(v, n);
|
||||
// if (pred != 0xff) inst.setPred(pred);
|
||||
|
||||
// unsigned op = readByte(v, n);
|
||||
// inst.setOpcode(Instruction::Opcode(op));
|
||||
|
||||
// bool usedImm = false;
|
||||
|
||||
// switch ((Instruction::instTable[op]).argClass) {
|
||||
// case Instruction::AC_NONE:
|
||||
// break;
|
||||
// case Instruction::AC_2REG:
|
||||
// inst.setDestReg(readByte(v, n));
|
||||
// inst.setSrcReg(readByte(v, n));
|
||||
// break;
|
||||
// case Instruction::AC_2IMM:
|
||||
// inst.setDestReg(readByte(v, n));
|
||||
// inst.setSrcImm(readWord(v, n, wordSize));
|
||||
// usedImm = true;
|
||||
// break;
|
||||
// case Instruction::AC_3REG:
|
||||
// inst.setDestReg(readByte(v, n));
|
||||
// inst.setSrcReg(readByte(v, n));
|
||||
// inst.setSrcReg(readByte(v, n));
|
||||
// break;
|
||||
// case Instruction::AC_3PREG:
|
||||
// inst.setDestPReg(readByte(v, n));
|
||||
// inst.setSrcPReg(readByte(v, n));
|
||||
// inst.setSrcPReg(readByte(v, n));
|
||||
// break;
|
||||
// case Instruction::AC_3IMM:
|
||||
// inst.setDestReg(readByte(v, n));
|
||||
// inst.setSrcReg(readByte(v, n));
|
||||
// inst.setSrcImm(readWord(v, n, wordSize));
|
||||
// usedImm = true;
|
||||
// break;
|
||||
// case Instruction::AC_3REGSRC:
|
||||
// inst.setSrcReg(readByte(v, n));
|
||||
// inst.setSrcReg(readByte(v, n));
|
||||
// inst.setSrcReg(readByte(v, n));
|
||||
// break;
|
||||
// case Instruction::AC_1IMM:
|
||||
// inst.setSrcImm(readWord(v, n, wordSize));
|
||||
// usedImm = true;
|
||||
// break;
|
||||
// case Instruction::AC_1REG:
|
||||
// inst.setSrcReg(readByte(v, n));
|
||||
// break;
|
||||
// case Instruction::AC_3IMMSRC:
|
||||
// inst.setSrcReg(readByte(v, n));
|
||||
// inst.setSrcReg(readByte(v, n));
|
||||
// inst.setSrcImm(readWord(v, n, wordSize));
|
||||
// usedImm = true;
|
||||
// break;
|
||||
// case Instruction::AC_PREG_REG:
|
||||
// inst.setDestPReg(readByte(v, n));
|
||||
// inst.setSrcReg(readByte(v, n));
|
||||
// break;
|
||||
// case Instruction::AC_2PREG:
|
||||
// inst.setDestPReg(readByte(v, n));
|
||||
// inst.setSrcPReg(readByte(v, n));
|
||||
// break;
|
||||
// case Instruction::AC_2REGSRC:
|
||||
// inst.setSrcReg(readByte(v, n));
|
||||
// inst.setSrcReg(readByte(v, n));
|
||||
// break;
|
||||
// default:
|
||||
// decodeError("Unknown argument class.");
|
||||
// }
|
||||
|
||||
// if (haveRefs && usedImm &&
|
||||
// refMap.find(n - wordSize) != refMap.end()) {
|
||||
// OffsetRef *oref = dynamic_cast<OffsetRef*>(refMap[n - wordSize]);
|
||||
// if (!oref) {
|
||||
// decodeError("Expected OffsetRef when decoding instruction stream.");
|
||||
// }
|
||||
// Ref *r = new SimpleRef(oref->name, *(Addr*)(inst.setSrcImm()),
|
||||
// inst.hasRelImm());
|
||||
// inst.setImmRef(*r);
|
||||
// }
|
||||
|
||||
return &inst;
|
||||
}
|
||||
|
||||
ByteEncoder::ByteEncoder(const ArchDef &ad) {
|
||||
wordSize = ad.getWordSize();
|
||||
}
|
||||
|
||||
Size ByteEncoder::encode(Ref *&ref, vector<Byte> &v, Size n0, Instruction &i) {
|
||||
// Size n(n0);
|
||||
|
||||
// if (i.hasPred()) writeByte(v, n, i.getPred());
|
||||
// else writeByte(v, n, 0xff);
|
||||
|
||||
// writeByte(v, n, Byte(i.getOpcode()));
|
||||
|
||||
// if (i.hasRDest()) {
|
||||
// writeByte(v, n, Byte(i.getRDest()));
|
||||
// } else if (i.hasPDest()) {
|
||||
// writeByte(v, n, Byte(i.getPDest()));
|
||||
// }
|
||||
|
||||
// for (RegNum j = 0; j < i.getNRSrc(); j++) {
|
||||
// writeByte(v, n, Byte(i.getRSrc(j)));
|
||||
// }
|
||||
|
||||
// for (RegNum j = 0; j < i.getNPSrc(); j++) {
|
||||
// writeByte(v, n, Byte(i.getPSrc(j)));
|
||||
// }
|
||||
|
||||
// ref = NULL;
|
||||
// if (i.hasImm()) {
|
||||
// if (i.hasRefLiteral()) {
|
||||
// Ref *r = i.getRefLiteral();
|
||||
// ref = new OffsetRef(r->name, v, n, wordSize*8, wordSize, i.hasRelImm());
|
||||
// }
|
||||
|
||||
// writeWord(v, n, wordSize, i.getImm());
|
||||
// }
|
||||
|
||||
// return n - n0;
|
||||
return 0;
|
||||
}
|
||||
|
||||
static unsigned ceilLog2(RegNum x) {
|
||||
unsigned z = 0;
|
||||
bool nonZeroInnerValues(false);
|
||||
|
||||
if (x == 0) return 0;
|
||||
|
||||
while (x != 1) {
|
||||
z++;
|
||||
if (x&1) nonZeroInnerValues = true;
|
||||
x >>= 1;
|
||||
}
|
||||
|
||||
if (nonZeroInnerValues) z++;
|
||||
|
||||
return z;
|
||||
}
|
||||
|
||||
|
||||
WordDecoder::WordDecoder(const ArchDef &arch) {
|
||||
|
||||
inst_s = arch.getWordSize() * 8;
|
||||
opcode_s = 7;
|
||||
reg_s = 5;
|
||||
func3_s = 3;
|
||||
|
||||
shift_opcode = 0;
|
||||
shift_rd = opcode_s;
|
||||
shift_func3 = opcode_s + reg_s;
|
||||
shift_rs1 = opcode_s + reg_s + func3_s;
|
||||
shift_rs2 = opcode_s + reg_s + func3_s + reg_s;
|
||||
shift_func7 = opcode_s + reg_s + func3_s + reg_s + reg_s;
|
||||
shift_j_u_immed = opcode_s + reg_s;
|
||||
shift_s_b_immed = opcode_s + reg_s + func3_s + reg_s + reg_s;
|
||||
shift_i_immed = opcode_s + reg_s + func3_s + reg_s;
|
||||
|
||||
reg_mask = 0x1f;
|
||||
func3_mask = 0x7;
|
||||
func7_mask = 0x7f;
|
||||
opcode_mask = 0x7f;
|
||||
i_immed_mask = 0xfff;
|
||||
s_immed_mask = 0xfff;
|
||||
b_immed_mask = 0x1fff;
|
||||
u_immed_mask = 0xfffff;
|
||||
j_immed_mask = 0xfffff;
|
||||
|
||||
}
|
||||
|
||||
static Word signExt(Word w, Size bit, Word mask) {
|
||||
if (w>>(bit-1)) w |= ~mask;
|
||||
return w;
|
||||
}
|
||||
|
||||
Instruction *WordDecoder::decode(const std::vector<Byte> &v, Size &idx) {
|
||||
Word code(readWord(v, idx, inst_s/8));
|
||||
|
||||
// std::cout << "code: " << (int) code << " v: " << v << " indx: " << idx << "\n";
|
||||
|
||||
|
||||
Instruction &inst = * new Instruction();
|
||||
|
||||
// bool predicated = (code>>(n-1));
|
||||
bool predicated = false;
|
||||
if (predicated) { inst.setPred((code>>(inst_s-p-1))&pMask); }
|
||||
|
||||
Opcode op = (Opcode)((code>>shift_opcode)&opcode_mask);
|
||||
// std::cout << "opcode: " << op << "\n";
|
||||
inst.setOpcode(op);
|
||||
|
||||
bool usedImm(false);
|
||||
Word imeed, dest_bits, imm_bits, bit_11, bits_4_1, bit_10_5,
|
||||
bit_12, bits_19_12, bits_10_1, bit_20, unordered, func3;
|
||||
|
||||
// std::cout << "op: " << std::hex << op << " what " << instTable[op].iType << "\n";
|
||||
switch(instTable[op].iType)
|
||||
{
|
||||
case InstType::N_TYPE:
|
||||
break;
|
||||
case InstType::R_TYPE:
|
||||
inst.setPred((code>>shift_rs1) & reg_mask);
|
||||
inst.setDestReg((code>>shift_rd) & reg_mask);
|
||||
inst.setSrcReg((code>>shift_rs1) & reg_mask);
|
||||
inst.setSrcReg((code>>shift_rs2) & reg_mask);
|
||||
inst.setFunc3 ((code>>shift_func3) & func3_mask);
|
||||
inst.setFunc7 ((code>>shift_func7) & func7_mask);
|
||||
break;
|
||||
case InstType::I_TYPE:
|
||||
inst.setDestReg((code>>shift_rd) & reg_mask);
|
||||
inst.setSrcReg((code>>shift_rs1) & reg_mask);
|
||||
inst.setFunc7 ((code>>shift_func7) & func7_mask);
|
||||
func3 = (code>>shift_func3) & func3_mask;
|
||||
inst.setFunc3 (func3);
|
||||
|
||||
if ((func3 == 5) && (op != L_INST))
|
||||
{
|
||||
// std::cout << "func7: " << func7 << "\n";
|
||||
inst.setSrcImm(signExt(((code>>shift_rs2)®_mask), 5, reg_mask));
|
||||
}
|
||||
else
|
||||
{
|
||||
inst.setSrcImm(signExt(code>>shift_i_immed, 12, i_immed_mask));
|
||||
}
|
||||
|
||||
usedImm = true;
|
||||
break;
|
||||
case InstType::S_TYPE:
|
||||
// std::cout << "************STORE\n";
|
||||
inst.setSrcReg((code>>shift_rs1) & reg_mask);
|
||||
inst.setSrcReg((code>>shift_rs2) & reg_mask);
|
||||
inst.setFunc3 ((code>>shift_func3) & func3_mask);
|
||||
|
||||
dest_bits = (code>>shift_rd) & reg_mask;
|
||||
imm_bits = (code>>shift_s_b_immed & func7_mask);
|
||||
imeed = (imm_bits << reg_s) | dest_bits;
|
||||
// std::cout << "ENC: store imeed: " << imeed << "\n";
|
||||
inst.setSrcImm(signExt(imeed, 12, s_immed_mask));
|
||||
usedImm = true;
|
||||
break;
|
||||
case InstType::B_TYPE:
|
||||
|
||||
inst.setSrcReg((code>>shift_rs1) & reg_mask);
|
||||
inst.setSrcReg((code>>shift_rs2) & reg_mask);
|
||||
inst.setFunc3 ((code>>shift_func3) & func3_mask);
|
||||
|
||||
dest_bits = (code>>shift_rd) & reg_mask;
|
||||
imm_bits = (code>>shift_s_b_immed & func7_mask);
|
||||
|
||||
bit_11 = dest_bits & 0x1;
|
||||
bits_4_1 = dest_bits >> 1;
|
||||
bit_10_5 = imm_bits & 0x3f;
|
||||
bit_12 = imm_bits >> 6;
|
||||
|
||||
imeed = 0 | (bits_4_1 << 1) | (bit_10_5 << 5) | (bit_11 << 11) | (bit_12 << 12);
|
||||
|
||||
inst.setSrcImm(signExt(imeed, 13, b_immed_mask));
|
||||
usedImm = true;
|
||||
break;
|
||||
case InstType::U_TYPE:
|
||||
inst.setDestReg((code>>shift_rd) & reg_mask);
|
||||
inst.setSrcImm(signExt(code>>shift_j_u_immed, 20, u_immed_mask));
|
||||
usedImm = true;
|
||||
break;
|
||||
case InstType::J_TYPE:
|
||||
inst.setDestReg((code>>shift_rd) & reg_mask);
|
||||
|
||||
// [20 | 10:1 | 11 | 19:12]
|
||||
|
||||
unordered = code>>shift_j_u_immed;
|
||||
|
||||
bits_19_12 = unordered & 0xff;
|
||||
bit_11 = (unordered>>8) & 0x1;
|
||||
bits_10_1 = (unordered >> 9) & 0x3ff;
|
||||
bit_20 = (unordered>>19) & 0x1;
|
||||
|
||||
imeed = 0 | (bits_10_1 << 1) | (bit_11 << 11) | (bits_19_12 << 12) | (bit_20 << 20);
|
||||
|
||||
inst.setSrcImm(signExt(imeed, 20, j_immed_mask));
|
||||
usedImm = true;
|
||||
break;
|
||||
defualt:
|
||||
cout << "Unrecognized argument class in word decoder.\n";
|
||||
exit(1);
|
||||
}
|
||||
|
||||
if (haveRefs && usedImm && refMap.find(idx-n/8) != refMap.end()) {
|
||||
Ref *srcRef = refMap[idx-n/8];
|
||||
|
||||
/* Create a new ref tied to this instruction. */
|
||||
Ref *r = new SimpleRef(srcRef->name, *(Addr*)inst.setSrcImm(),
|
||||
inst.hasRelImm());
|
||||
inst.setImmRef(*r);
|
||||
}
|
||||
|
||||
D(2, "Decoded 0x" << hex << code << " into: " << inst << '\n');
|
||||
|
||||
return &inst;
|
||||
}
|
||||
|
||||
BIN
emulator/harptool
Executable file
BIN
emulator/harptool
Executable file
Binary file not shown.
132
emulator/harptool.cpp
Normal file
132
emulator/harptool.cpp
Normal file
@@ -0,0 +1,132 @@
|
||||
/*******************************************************************************
|
||||
HARPtools by Chad D. Kersey, Summer 2011
|
||||
*******************************************************************************/
|
||||
#include <iostream>
|
||||
#include <iomanip>
|
||||
#include <string>
|
||||
#include <sstream>
|
||||
#include <fstream>
|
||||
#include <stdlib.h>
|
||||
|
||||
|
||||
#include "include/debug.h"
|
||||
#include "include/types.h"
|
||||
#include "include/core.h"
|
||||
#include "include/enc.h"
|
||||
#include "include/instruction.h"
|
||||
#include "include/mem.h"
|
||||
#include "include/obj.h"
|
||||
#include "include/archdef.h"
|
||||
|
||||
#include "include/args.h"
|
||||
#include "include/help.h"
|
||||
|
||||
|
||||
using namespace Harp;
|
||||
using namespace HarpTools;
|
||||
using namespace std;
|
||||
|
||||
enum HarpToolMode { HARPTOOL_MODE_ASM, HARPTOOL_MODE_DISASM, HARPTOOL_MODE_EMU,
|
||||
HARPTOOL_MODE_LD, HARPTOOL_MODE_HELP };
|
||||
|
||||
HarpToolMode findMode(int argc, char** argv) {
|
||||
bool mode_asm, mode_disasm, mode_emu, mode_ld, mode_help;
|
||||
|
||||
if (argc == 0) return HARPTOOL_MODE_HELP;
|
||||
|
||||
CommandLineArgFlag fh("--help", "-h", "", mode_help);
|
||||
CommandLineArgFlag fa("-A", "--asm", "", mode_asm);
|
||||
CommandLineArgFlag fd("-D", "--disasm", "", mode_disasm);
|
||||
CommandLineArgFlag fe("-E", "--emu", "", mode_emu);
|
||||
CommandLineArgFlag fl("-L", "--ld", "", mode_ld);
|
||||
|
||||
CommandLineArg::readArgs((argc == 0?0:1), argv);
|
||||
CommandLineArg::clearArgs();
|
||||
|
||||
if (mode_asm) return HARPTOOL_MODE_ASM;
|
||||
if (mode_disasm) return HARPTOOL_MODE_DISASM;
|
||||
if (mode_emu) return HARPTOOL_MODE_EMU;
|
||||
if (mode_ld) return HARPTOOL_MODE_LD;
|
||||
return HARPTOOL_MODE_HELP;
|
||||
}
|
||||
|
||||
int emu_main(int argc, char **argv) {
|
||||
string archString("rv32i"), imgFileName("a.dsfsdout.bin");
|
||||
bool showHelp, showStats, basicMachine, batch;
|
||||
|
||||
/* Read the command line arguments. */
|
||||
CommandLineArgFlag fh("-h", "--help", "", showHelp);
|
||||
CommandLineArgSetter<string>fc("-c", "--core", "", imgFileName);
|
||||
CommandLineArgSetter<string>fa("-a", "--arch", "", archString);
|
||||
CommandLineArgFlag fs("-s", "--stats", "", showStats);
|
||||
CommandLineArgFlag fb("-b", "--basic", "", basicMachine);
|
||||
CommandLineArgFlag fi("-i", "--batch", "", batch);
|
||||
|
||||
CommandLineArg::readArgs(argc, argv);
|
||||
if (showHelp) {
|
||||
cout << Help::emuHelp;
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* Instantiate a Core, RAM, and console output. */
|
||||
ArchDef arch(archString);
|
||||
|
||||
Decoder *dec;
|
||||
|
||||
switch (arch.getEncChar()) {
|
||||
case 'b': dec = new ByteDecoder(arch); break;
|
||||
case 'w': dec = new WordDecoder(arch); break;
|
||||
case 'r': dec = new WordDecoder(arch); break;
|
||||
default:
|
||||
cout << "Unrecognized decoder type: '" << arch.getEncChar() << "'.\n";
|
||||
return 1;
|
||||
}
|
||||
|
||||
// std::cout << "TESTING: " << tests[t] << "\n";
|
||||
|
||||
|
||||
MemoryUnit mu(4096, arch.getWordSize(), basicMachine);
|
||||
Core core(arch, *dec, mu/*, ID in multicore implementations*/);
|
||||
|
||||
// RamMemDevice mem(imgFileName.c_str(), arch.getWordSize());
|
||||
RAM old_ram;
|
||||
old_ram.loadHexImpl(imgFileName.c_str());
|
||||
// old_ram.loadHexImpl(tests[t]);
|
||||
// MemDevice * memory = &old_ram;
|
||||
|
||||
ConsoleMemDevice console(arch.getWordSize(), cout, core, batch);
|
||||
mu.attach(old_ram, 0);
|
||||
mu.attach(console, 1ll<<(arch.getWordSize()*8 - 1));
|
||||
// mu.attach(console, 0xf0000000);
|
||||
|
||||
// core.w[0].pc = 0x8000007c; // If I want to start at a specific location
|
||||
std::cout << "ABOUT TO START\n";
|
||||
while (core.running()) { console.poll(); core.step(); }
|
||||
|
||||
if (showStats) core.printStats();
|
||||
|
||||
|
||||
std::cout << "\n";
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
int main(int argc, char** argv) {
|
||||
try {
|
||||
switch (findMode(argc - 1, argv + 1)) {
|
||||
case HARPTOOL_MODE_ASM: cout << "ASM not supported\n";
|
||||
case HARPTOOL_MODE_DISASM: cout << "DISASM not supported\n";
|
||||
case HARPTOOL_MODE_EMU: return emu_main (argc - 2, argv + 2);
|
||||
case HARPTOOL_MODE_LD: cout << "LD not supported\n";
|
||||
case HARPTOOL_MODE_HELP:
|
||||
default:
|
||||
cout << "Usage:\n" << Help::mainHelp;
|
||||
return 0;
|
||||
}
|
||||
} catch (BadArg ba) {
|
||||
cout << "Unrecognized argument \"" << ba.arg << "\".\n";
|
||||
return 1;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
116
emulator/include/archdef.h
Normal file
116
emulator/include/archdef.h
Normal file
@@ -0,0 +1,116 @@
|
||||
/*******************************************************************************
|
||||
HARPtools by Chad D. Kersey, Summer 2011
|
||||
*******************************************************************************/
|
||||
#ifndef __ARCHDEF_H
|
||||
#define __ARCHDEF_H
|
||||
|
||||
#include <string>
|
||||
#include <sstream>
|
||||
|
||||
#include <cstdlib>
|
||||
#include <stdio.h>
|
||||
#include "types.h"
|
||||
|
||||
namespace Harp {
|
||||
class ArchDef {
|
||||
public:
|
||||
struct Undefined {};
|
||||
|
||||
ArchDef(const std::string &s) {
|
||||
std::istringstream iss(s.c_str());
|
||||
|
||||
wordSize = 4;
|
||||
encChar = 'w';
|
||||
nRegs = 32;
|
||||
nPRegs = 0;
|
||||
nThds = 8;
|
||||
nWarps = 8;
|
||||
|
||||
extent = EXT_WARPS;
|
||||
|
||||
// if (!iss) { extent = EXT_NULL; return; }
|
||||
// iss >> encChar;
|
||||
// if (!iss) { extent = EXT_WORDSIZE; return; }
|
||||
// iss >> nRegs;
|
||||
// if (!iss) { extent = EXT_ENC; return; }
|
||||
// char sep;
|
||||
// iss >> sep >> nPRegs;
|
||||
// if (!iss || sep != '/') { extent = EXT_REGS; return; }
|
||||
// iss >> sep >> nThds;
|
||||
// if (!iss || sep != '/') { extent = EXT_PREGS; return; }
|
||||
// iss >> sep >> nWarps;
|
||||
// if (!iss || sep != '/') { extent = EXT_THDS; return; }
|
||||
// extent = EXT_WARPS;
|
||||
}
|
||||
|
||||
operator std::string () const {
|
||||
if (extent == EXT_NULL) return "";
|
||||
|
||||
std::ostringstream oss;
|
||||
if (extent >= EXT_WORDSIZE) oss << wordSize;
|
||||
if (extent >= EXT_ENC ) oss << encChar;
|
||||
if (extent >= EXT_REGS ) oss << nRegs;
|
||||
if (extent >= EXT_PREGS ) oss << '/' << nPRegs;
|
||||
if (extent >= EXT_THDS ) oss << '/' << nThds;
|
||||
if (extent >= EXT_WARPS ) oss << '/' << nWarps;
|
||||
|
||||
return oss.str();
|
||||
}
|
||||
|
||||
bool operator==(const ArchDef &r) const {
|
||||
Extent minExtent(r.extent > extent ? extent : r.extent);
|
||||
|
||||
// Can't be equal if we can't specify a binary encoding at all.
|
||||
if (minExtent < EXT_PREGS) return false;
|
||||
|
||||
if (minExtent >= EXT_WORDSIZE) { if (wordSize!=r.wordSize) return false; }
|
||||
if (minExtent >= EXT_ENC ) { if (encChar != r.encChar) return false; }
|
||||
if (minExtent >= EXT_REGS ) { if (nRegs != r.nRegs) return false; }
|
||||
if (minExtent >= EXT_PREGS ) { if (nPRegs != r.nPRegs) return false; }
|
||||
if (minExtent >= EXT_THDS ) { if (nThds != r.nThds) return false; }
|
||||
if (minExtent >= EXT_WARPS ) { if (nWarps != r.nWarps) return false; }
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
bool operator!=(const ArchDef &r) const { return !(*this == r); }
|
||||
|
||||
Size getWordSize() const {
|
||||
if (extent < EXT_WORDSIZE) throw Undefined(); else return wordSize;
|
||||
}
|
||||
|
||||
char getEncChar() const {
|
||||
if (extent<EXT_ENC||encChar=='x') throw Undefined(); else return encChar;
|
||||
}
|
||||
|
||||
RegNum getNRegs() const {
|
||||
if (extent < EXT_REGS) throw Undefined(); else return nRegs;
|
||||
}
|
||||
|
||||
RegNum getNPRegs() const {
|
||||
if (extent < EXT_PREGS) throw Undefined(); else return nPRegs;
|
||||
}
|
||||
|
||||
ThdNum getNThds() const {
|
||||
if (extent < EXT_THDS) throw Undefined(); else return nThds;
|
||||
}
|
||||
|
||||
ThdNum getNWarps() const {
|
||||
if (extent < EXT_WARPS) throw Undefined(); else return nWarps;
|
||||
}
|
||||
|
||||
private:
|
||||
enum Extent {
|
||||
EXT_NULL, EXT_WORDSIZE, EXT_ENC, EXT_REGS, EXT_PREGS, EXT_THDS, EXT_WARPS
|
||||
};
|
||||
|
||||
Extent extent;
|
||||
|
||||
Size wordSize;
|
||||
ThdNum nThds, nWarps;
|
||||
RegNum nRegs, nPRegs;
|
||||
char encChar;
|
||||
};
|
||||
};
|
||||
|
||||
#endif
|
||||
61
emulator/include/args.h
Normal file
61
emulator/include/args.h
Normal file
@@ -0,0 +1,61 @@
|
||||
/*******************************************************************************
|
||||
HARPtools by Chad D. Kersey, Summer 2011
|
||||
*******************************************************************************/
|
||||
#ifndef __ARGS_H
|
||||
#define __ARGS_H
|
||||
|
||||
#include <iostream>
|
||||
#include <string>
|
||||
#include <sstream>
|
||||
#include <map>
|
||||
|
||||
namespace HarpTools {
|
||||
struct BadArg { BadArg(std::string s) : arg(s) {} std::string arg; };
|
||||
|
||||
class CommandLineArg {
|
||||
public:
|
||||
CommandLineArg(std::string s, std::string l, const char *helpText);
|
||||
CommandLineArg(std::string l, const char *helpText);
|
||||
virtual int read(int argc, char** argv) = 0;
|
||||
|
||||
static void readArgs(int argc, char **argv);
|
||||
static void clearArgs();
|
||||
static void showHelp(std::ostream &os);
|
||||
|
||||
private:
|
||||
static std::string helpString;
|
||||
static std::map<std::string, CommandLineArg *> longArgs;
|
||||
static std::map<std::string, CommandLineArg *> shortArgs;
|
||||
};
|
||||
|
||||
template <typename T> class CommandLineArgSetter : public CommandLineArg {
|
||||
public:
|
||||
CommandLineArgSetter(std::string s, std::string l, const char *ht, T &x) :
|
||||
CommandLineArg(s, l, ht), x(x) {}
|
||||
CommandLineArgSetter(std::string l, const char *ht, T &x) :
|
||||
CommandLineArg(l, ht), x(x) {}
|
||||
|
||||
int read(int argc, char **argv) {
|
||||
std::istringstream iss(argv[1]);
|
||||
iss >> x;
|
||||
return 1;
|
||||
}
|
||||
private:
|
||||
T &x;
|
||||
};
|
||||
|
||||
class CommandLineArgFlag : public CommandLineArg {
|
||||
public:
|
||||
CommandLineArgFlag(std::string s, std::string l, const char *ht, bool &x) :
|
||||
CommandLineArg(s, l, ht), x(x) { x = false; }
|
||||
CommandLineArgFlag(std::string l, const char *ht, bool &x) :
|
||||
CommandLineArg(l, ht), x(x) { x = false; }
|
||||
|
||||
int read(int argc, char **argv) { x = true; return 0; }
|
||||
private:
|
||||
bool &x;
|
||||
};
|
||||
|
||||
};
|
||||
|
||||
#endif
|
||||
16
emulator/include/asm-tokens.h
Normal file
16
emulator/include/asm-tokens.h
Normal file
@@ -0,0 +1,16 @@
|
||||
#ifndef HARPTOOL_ASM_TOKENS
|
||||
#define HARPTOOL_ASM_TOKENS
|
||||
|
||||
namespace HarpTools {
|
||||
enum AsmTokens {
|
||||
ASM_T_DIR_DEF = 1, ASM_T_DIR_PERM, ASM_T_DIR_BYTE, ASM_T_DIR_WORD,
|
||||
ASM_T_DIR_SPACE, ASM_T_DIR_STRING, ASM_T_DIR_ALIGN, ASM_T_DIR_ENTRY,
|
||||
ASM_T_DIR_GLOBAL, ASM_T_DIR_ARG_NUM, ASM_T_DIR_ARG_STRING,
|
||||
ASM_T_DIR_ARG_SYM, ASM_T_DIR_ARG_R, ASM_T_DIR_ARG_W, ASM_T_DIR_ARG_X,
|
||||
ASM_T_DIR_END, ASM_T_LABEL, ASM_T_PRED, ASM_T_INST,
|
||||
ASM_T_PREG, ASM_T_REG, ASM_T_REG_RA, ASM_T_REG_SP,
|
||||
ASM_T_REG_FP, ASM_T_LIT, ASM_T_SYM, ASM_T_PEXP
|
||||
};
|
||||
};
|
||||
|
||||
#endif
|
||||
145
emulator/include/core.h
Normal file
145
emulator/include/core.h
Normal file
@@ -0,0 +1,145 @@
|
||||
/*******************************************************************************
|
||||
HARPtools by Chad D. Kersey, Summer 2011
|
||||
*******************************************************************************/
|
||||
#ifndef __CORE_H
|
||||
#define __CORE_H
|
||||
|
||||
#include <string>
|
||||
#include <vector>
|
||||
#include <stack>
|
||||
#include <map>
|
||||
#include <set>
|
||||
|
||||
#include "types.h"
|
||||
#include "archdef.h"
|
||||
#include "enc.h"
|
||||
#include "mem.h"
|
||||
#include "debug.h"
|
||||
|
||||
namespace Harp {
|
||||
#ifdef EMU_INSTRUMENTATION
|
||||
void reg_doWrite(Word cpuId, Word regNum);
|
||||
void reg_doRead(Word cpuId, Word regNum);
|
||||
#endif
|
||||
|
||||
template <typename T> class Reg {
|
||||
public:
|
||||
Reg(): cpuId(0), regNum(0), val(0) {}
|
||||
Reg(Word c, Word n): cpuId(c), regNum(n), val(0) {}
|
||||
|
||||
Reg &operator=(T r) { if (regNum) {val = r; doWrite();} return *this; }
|
||||
|
||||
operator T() const { doRead(); return val; }
|
||||
|
||||
void trunc(Size s) {
|
||||
Word mask((~0ull >> (sizeof(Word)-s)*8));
|
||||
val &= mask;
|
||||
}
|
||||
|
||||
private:
|
||||
Word cpuId, regNum;
|
||||
T val;
|
||||
|
||||
#ifdef EMU_INSTRUMENTATION
|
||||
/* Access size here is 8, representing the register size of 64-bit cores. */
|
||||
void doWrite() const { reg_doWrite(cpuId, regNum); }
|
||||
void doRead() const { reg_doRead(cpuId, regNum); }
|
||||
#else
|
||||
void doWrite() const {}
|
||||
void doRead() const {}
|
||||
#endif
|
||||
};
|
||||
|
||||
// Entry in the IPDOM Stack
|
||||
struct DomStackEntry {
|
||||
DomStackEntry(
|
||||
unsigned p, const std::vector<std::vector<Reg<Word> > >& m,
|
||||
std::vector<bool> &tm, Word pc
|
||||
): pc(pc), fallThrough(false), uni(false)
|
||||
{
|
||||
std::cout << "DomStackEntry TMASK: ";
|
||||
for (unsigned i = 0; i < m.size(); ++i)
|
||||
{
|
||||
std::cout << " " << (!bool(m[i][p]) && tm[i]);
|
||||
tmask.push_back(!bool(m[i][p]) && tm[i]);
|
||||
}
|
||||
std::cout << "\n";
|
||||
}
|
||||
|
||||
DomStackEntry(const std::vector<bool> &tmask):
|
||||
tmask(tmask), fallThrough(true), uni(false) {}
|
||||
|
||||
bool fallThrough;
|
||||
bool uni;
|
||||
std::vector<bool> tmask;
|
||||
Word pc;
|
||||
};
|
||||
|
||||
class Warp;
|
||||
|
||||
class Core {
|
||||
public:
|
||||
Core(const ArchDef &a, Decoder &d, MemoryUnit &mem, Word id=0);
|
||||
|
||||
bool interrupt(Word r0);
|
||||
bool running() const;
|
||||
void step();
|
||||
|
||||
void printStats() const;
|
||||
|
||||
const ArchDef &a;
|
||||
Decoder &iDec;
|
||||
MemoryUnit &mem;
|
||||
|
||||
Word interruptEntry;
|
||||
|
||||
unsigned long steps;
|
||||
std::vector<Warp> w;
|
||||
std::map<Word, std::set<Warp *> > b; // Barriers
|
||||
};
|
||||
|
||||
class Warp {
|
||||
public:
|
||||
Warp(Core *c, Word id=0);
|
||||
|
||||
void step();
|
||||
bool interrupt(Word r0);
|
||||
bool running() const { return activeThreads; }
|
||||
#ifdef EMU_INSTRUMENTATION
|
||||
bool getSupervisorMode() const { return supervisorMode; }
|
||||
#endif
|
||||
|
||||
void printStats() const;
|
||||
|
||||
struct MemAccess {
|
||||
MemAccess(bool w, Word a): wr(w), addr(a) {}
|
||||
bool wr;
|
||||
Word addr;
|
||||
};
|
||||
std::vector<MemAccess> memAccesses;
|
||||
|
||||
// private:
|
||||
Core *core;
|
||||
|
||||
Word pc, shadowPc, id;
|
||||
Size activeThreads, shadowActiveThreads;
|
||||
std::vector<std::vector<Reg<Word> > > reg;
|
||||
std::vector<std::vector<Reg<bool> > > pred;
|
||||
std::vector<Reg<uint16_t> > csr;
|
||||
|
||||
std::vector<bool> tmask, shadowTmask;
|
||||
std::stack<DomStackEntry> domStack;
|
||||
|
||||
std::vector<Word> shadowReg;
|
||||
std::vector<bool> shadowPReg;
|
||||
|
||||
bool interruptEnable, shadowInterruptEnable, supervisorMode,
|
||||
shadowSupervisorMode, spawned;
|
||||
|
||||
unsigned long steps, insts, loads, stores;
|
||||
|
||||
friend class Instruction;
|
||||
};
|
||||
};
|
||||
|
||||
#endif
|
||||
29
emulator/include/debug.h
Normal file
29
emulator/include/debug.h
Normal file
@@ -0,0 +1,29 @@
|
||||
/*******************************************************************************
|
||||
HARPtools by Chad D. Kersey, Spring 2013
|
||||
*******************************************************************************/
|
||||
#ifndef __DEBUG_H
|
||||
#define __DEBUG_H
|
||||
|
||||
// #define USE_DEBUG 9
|
||||
|
||||
#ifdef USE_DEBUG
|
||||
#include <iostream>
|
||||
|
||||
#define D(lvl, x) do { \
|
||||
using namespace std; \
|
||||
if ((lvl) <= USE_DEBUG) { \
|
||||
cout << "DEBUG " << __FILE__ << ':' << dec << __LINE__ << ": " \
|
||||
<< x << endl; \
|
||||
} \
|
||||
} while(0)
|
||||
|
||||
#define D_RAW(x) do { \
|
||||
std::cout << x; \
|
||||
} while (0)
|
||||
#else
|
||||
|
||||
#define D(lvl, x) do {} while(0)
|
||||
|
||||
#endif
|
||||
|
||||
#endif
|
||||
95
emulator/include/enc.h
Normal file
95
emulator/include/enc.h
Normal file
@@ -0,0 +1,95 @@
|
||||
/*******************************************************************************
|
||||
HARPtools by Chad D. Kersey, Summer 2011
|
||||
*******************************************************************************/
|
||||
#ifndef __ENC_H
|
||||
#define __ENC_H
|
||||
|
||||
#include <map>
|
||||
|
||||
#include "types.h"
|
||||
#include "instruction.h"
|
||||
#include "obj.h"
|
||||
|
||||
namespace Harp {
|
||||
class DataChunk;
|
||||
class TextChunk;
|
||||
class Ref;
|
||||
|
||||
class Encoder {
|
||||
public:
|
||||
Encoder() {}
|
||||
virtual ~Encoder() {}
|
||||
|
||||
virtual Size encode(Ref *&ref, std::vector<Byte> &v, Size n,
|
||||
Instruction &i) = 0;
|
||||
void encodeChunk(DataChunk &dest, const TextChunk &src);
|
||||
};
|
||||
|
||||
class Decoder {
|
||||
public:
|
||||
Decoder() : haveRefs(false) {}
|
||||
Decoder(const std::vector<Ref*> &refVec) : haveRefs(true) {
|
||||
setRefs(refVec);
|
||||
}
|
||||
|
||||
virtual ~Decoder() {}
|
||||
|
||||
void setRefs(const std::vector<Ref*> &);
|
||||
void clearRefs() { refMap.clear(); }
|
||||
virtual Instruction *decode(const std::vector<Byte> &v, Size &n) = 0;
|
||||
void decodeChunk(TextChunk &dest, const DataChunk &src);
|
||||
protected:
|
||||
bool haveRefs;
|
||||
std::map <Size, Ref*> refMap;
|
||||
};
|
||||
|
||||
class WordDecoder : public Decoder {
|
||||
public:
|
||||
WordDecoder(const ArchDef &);
|
||||
virtual Instruction *decode(const std::vector<Byte> &v, Size &n);
|
||||
|
||||
private:
|
||||
Size n, o, r, p, i1, i2, i3;
|
||||
Word oMask, rMask, pMask, i1Mask, i2Mask, i3Mask;
|
||||
|
||||
// FARES
|
||||
Size inst_s, opcode_s, reg_s, func3_s;
|
||||
Size shift_opcode, shift_rd, shift_rs1, shift_rs2, shift_func3, shift_func7;
|
||||
Size shift_j_u_immed, shift_s_b_immed, shift_i_immed;
|
||||
|
||||
|
||||
|
||||
Word reg_mask, func3_mask, func7_mask, opcode_mask, i_immed_mask,
|
||||
s_immed_mask, b_immed_mask, u_immed_mask, j_immed_mask;
|
||||
|
||||
};
|
||||
|
||||
class ByteDecoder : public Decoder {
|
||||
public:
|
||||
ByteDecoder(const ArchDef &);
|
||||
virtual Instruction *decode(const std::vector<Byte> &v, Size &n);
|
||||
private:
|
||||
Size wordSize;
|
||||
};
|
||||
|
||||
class WordEncoder : public Encoder {
|
||||
public:
|
||||
WordEncoder(const ArchDef &);
|
||||
virtual Size encode(Ref *&ref, std::vector<Byte> &v,
|
||||
Size n, Instruction &i);
|
||||
private:
|
||||
Size n, o, r, p, i1, i2, i3;
|
||||
Word oMask, rMask, pMask, i1Mask, i2Mask, i3Mask;
|
||||
};
|
||||
|
||||
class ByteEncoder : public Encoder {
|
||||
public:
|
||||
ByteEncoder(const ArchDef &);
|
||||
virtual Size encode(Ref *&ref, std::vector<Byte> &v,
|
||||
Size n, Instruction &i);
|
||||
private:
|
||||
Size wordSize;
|
||||
};
|
||||
};
|
||||
|
||||
#endif
|
||||
123
emulator/include/harpfloat.h
Normal file
123
emulator/include/harpfloat.h
Normal file
@@ -0,0 +1,123 @@
|
||||
/*******************************************************************************
|
||||
HARPtools by Chad D. Kersey, Summer 2011
|
||||
*******************************************************************************/
|
||||
#include <math.h>
|
||||
#include <stdlib.h>
|
||||
|
||||
#include "types.h"
|
||||
|
||||
#ifdef DEBUG
|
||||
#include <iostream>
|
||||
|
||||
#define DEBUGMSG(x) do { \
|
||||
std::cout << __FILE__ << ':' <<__LINE__ << ": " << x << '\n'; \
|
||||
} while(0)
|
||||
#else
|
||||
#define DEBUGMSG(x) do { } while(0)
|
||||
#endif
|
||||
|
||||
namespace Harp {
|
||||
// This class serves to handle the strange-precision floating point that can
|
||||
// crop up in HARP.
|
||||
class Float {
|
||||
public:
|
||||
Float(Word_u bin, Size n): sz(n) {
|
||||
DEBUGMSG("Float(0x" << std::hex << bin << ", " << std::dec << n << ')');
|
||||
|
||||
bool sign(bin >> (n*8 - 1));
|
||||
|
||||
Size expSz;
|
||||
if (n < 4) {
|
||||
expSz = 5;
|
||||
} else if (n < 8) {
|
||||
expSz = 8;
|
||||
} else {
|
||||
expSz = 11;
|
||||
}
|
||||
|
||||
Size sigSz = n*8 - expSz - 1;
|
||||
|
||||
DEBUGMSG(" exp: " << std::dec << expSz <<
|
||||
" bits, sig: " << std::dec << sigSz << " bits.");
|
||||
|
||||
int exp = (bin >> sigSz) & ((1<<expSz) - 1);
|
||||
Word_u sig = bin & ((1llu<<sigSz) - 1);
|
||||
DEBUGMSG(" sig=" << std::dec << sig << " exp=" << exp);
|
||||
|
||||
if (exp == 0) {
|
||||
// Subnormal
|
||||
d = sig / pow(2, ((1<<(expSz-1))-2)) / pow(2, sigSz);
|
||||
DEBUGMSG(" Denorm.");
|
||||
} else if (exp == ((1<<expSz) - 1)) {
|
||||
// Infinity
|
||||
d = HUGE_VAL;
|
||||
DEBUGMSG(" Inf.");
|
||||
} else {
|
||||
// Normalized, implied 1.
|
||||
exp -= (1<<(expSz - 1)) - 1;
|
||||
d = pow(2.0, exp - int(sigSz)) * double((1ll << sigSz) + sig);
|
||||
DEBUGMSG(" Norm, exp=" << exp);
|
||||
}
|
||||
|
||||
if (sign) d = -d;
|
||||
|
||||
DEBUGMSG("Set to " << d);
|
||||
}
|
||||
|
||||
Float(double d, Size n): sz(n), d(d) { DEBUGMSG("Float(double, size)"); }
|
||||
|
||||
operator Word_u() {
|
||||
DEBUGMSG("Float -> Word_u: " << d);
|
||||
Size expSz;
|
||||
if (sz < 4) {
|
||||
expSz = 5;
|
||||
} else if (sz < 8) {
|
||||
expSz = 8;
|
||||
} else {
|
||||
expSz = 11;
|
||||
}
|
||||
|
||||
Size sigSz = 8*sz - expSz - 1;
|
||||
|
||||
bool sign(d < 0);
|
||||
|
||||
bool inf(isinf(d)), zero(d == 0.0);
|
||||
int exp;
|
||||
|
||||
if (!inf && !zero) exp = floor(log2(fabs(d)));
|
||||
|
||||
Word_u rval;
|
||||
if (inf) {
|
||||
// Infinity
|
||||
DEBUGMSG(" Inf.");
|
||||
rval = ((1llu<<expSz)-1llu)<<sigSz;
|
||||
} else if (!zero && abs(exp) < (1<<(expSz-1)) - 1) {
|
||||
// Normalized with implied 1.
|
||||
Word_u sig = (fabs(d) * pow(2.0, -exp) - 1.0) * pow(2.0, sigSz);
|
||||
DEBUGMSG(" Norm, exp=" << exp << ", sig=" << sig);
|
||||
rval = ((((exp + ((1llu<<(expSz-1)) - 1llu))
|
||||
&((1llu<<expSz)-1llu)))<<sigSz) | sig;
|
||||
} else if (!zero && exp > -(1<<(expSz-1)) - sigSz) {
|
||||
// Subnormal number.
|
||||
Word_u sig = round(fabs(d)*pow(2.0,((1<<(expSz-1))-2))*pow(2.0, sigSz));
|
||||
DEBUGMSG(" Denorm, exp=" << exp << ", sig=" << sig);
|
||||
rval = sig;
|
||||
} else {
|
||||
// Zero.
|
||||
rval = 0;
|
||||
}
|
||||
|
||||
if (sign) rval |= 1llu<<(sz*8 - 1);
|
||||
|
||||
DEBUGMSG(" Returning 0x" << std::hex << rval);
|
||||
|
||||
return rval;
|
||||
}
|
||||
|
||||
operator double() { DEBUGMSG("Float->double " << d); return d; }
|
||||
|
||||
private:
|
||||
double d;
|
||||
Size sz;
|
||||
};
|
||||
};
|
||||
37
emulator/include/help.h
Normal file
37
emulator/include/help.h
Normal file
@@ -0,0 +1,37 @@
|
||||
/*******************************************************************************
|
||||
HARPtools by Chad D. Kersey, Summer 2011
|
||||
*******************************************************************************/
|
||||
#ifndef __HELP_H
|
||||
#define __HELP_H
|
||||
|
||||
/* Help messages. */
|
||||
namespace HarpTools {
|
||||
namespace Help {
|
||||
const char *mainHelp =
|
||||
"--help, -h, no arguments\n"
|
||||
" Print this message.\n"
|
||||
"-E, --emu; -A, --asm; -L, --ld; -D, --disasm\n"
|
||||
" Invoke the emulator, assembler, linker, and disassembler, "
|
||||
"respectively.\n"
|
||||
"<mode> --help\n"
|
||||
" Display contextual help.\n",
|
||||
*emuHelp = "HARP Emulator command line arguments:\n"
|
||||
" -c, --core <filename> RAM image\n"
|
||||
" -a, --arch <arch string> Architecture string\n"
|
||||
" -s, --stats Print stats on exit.\n"
|
||||
" -b, --basic Disable virtual memory.\n"
|
||||
" -i, --batch Disable console input.\n",
|
||||
*asmHelp = "HARP Assembler command line arguments:\n"
|
||||
" -a, --arch <arch string>\n"
|
||||
" -o, --output <filename>\n",
|
||||
*ldHelp = "HARP Linker command line arguments:\n"
|
||||
" -o, --output <filename>\n"
|
||||
" -a, --arch <filename>\n"
|
||||
" -f, --format <foramt string>\n"
|
||||
" --offset <bytes>\n",
|
||||
*disasmHelp = "HARP Disassembler command line arguments:\n"
|
||||
" -a, --arch <arch string> Architecture string.\n"
|
||||
" -o, --output <filename> Output filename.\n";
|
||||
};
|
||||
};
|
||||
#endif
|
||||
144
emulator/include/instruction.h
Normal file
144
emulator/include/instruction.h
Normal file
@@ -0,0 +1,144 @@
|
||||
/*******************************************************************************
|
||||
HARPtools by Chad D. Kersey, Summer 2011
|
||||
*******************************************************************************/
|
||||
#ifndef __INSTRUCTION_H
|
||||
#define __INSTRUCTION_H
|
||||
|
||||
#include <map>
|
||||
#include <iostream>
|
||||
|
||||
#include "types.h"
|
||||
|
||||
namespace Harp {
|
||||
class Warp;
|
||||
class Ref;
|
||||
|
||||
enum Opcode
|
||||
{
|
||||
NOP = 0,
|
||||
R_INST = 51,
|
||||
L_INST = 3,
|
||||
I_INST = 19,
|
||||
S_INST = 35,
|
||||
B_INST = 99,
|
||||
LUI_INST = 55,
|
||||
AUIPC_INST = 23,
|
||||
JAL_INST = 111,
|
||||
JALR_INST = 103,
|
||||
SYS_INST = 115,
|
||||
TRAP = 0x7f,
|
||||
FENCE = 0x0f,
|
||||
PJ_INST = 0x7b,
|
||||
GPGPU = 0x6b
|
||||
};
|
||||
|
||||
enum InstType { N_TYPE, R_TYPE, I_TYPE, S_TYPE, B_TYPE, U_TYPE, J_TYPE};
|
||||
|
||||
// We build a table of instruction information out of this.
|
||||
struct InstTableEntry_t {
|
||||
const char *opString;
|
||||
bool controlFlow, relAddress, allSrcArgs, privileged;
|
||||
InstType iType;
|
||||
|
||||
};
|
||||
|
||||
static std::map<int, struct InstTableEntry_t> instTable =
|
||||
{
|
||||
{Opcode::NOP, {"nop" , false, false, false, false, InstType::N_TYPE }},
|
||||
{Opcode::R_INST, {"r_type", false, false, false, false, InstType::R_TYPE }},
|
||||
{Opcode::L_INST, {"load" , false, false, false, false, InstType::I_TYPE }},
|
||||
{Opcode::I_INST, {"i_type", false, false, false, false, InstType::I_TYPE }},
|
||||
{Opcode::S_INST, {"store" , false, false, false, false, InstType::S_TYPE }},
|
||||
{Opcode::B_INST, {"branch", true , false, false, false, InstType::B_TYPE }},
|
||||
{Opcode::LUI_INST, {"lui" , false, false, false, false, InstType::U_TYPE }},
|
||||
{Opcode::AUIPC_INST, {"auipc" , false, false, false, false, InstType::U_TYPE }},
|
||||
{Opcode::JAL_INST, {"jal" , true , false, false, false, InstType::J_TYPE }},
|
||||
{Opcode::JALR_INST, {"jalr" , true , false, false, false, InstType::I_TYPE }},
|
||||
{Opcode::SYS_INST, {"SYS" , true , false, false, false, InstType::I_TYPE }},
|
||||
{Opcode::TRAP, {"TRAP" , true , false, false, false, InstType::I_TYPE }},
|
||||
{Opcode::FENCE, {"fence" , true , false, false, false, InstType::I_TYPE }},
|
||||
{Opcode::PJ_INST, {"pred j", true , false, false, false, InstType::R_TYPE }},
|
||||
{Opcode::GPGPU, {"gpgpu" , false, false, false, false, InstType::R_TYPE }}
|
||||
};
|
||||
|
||||
static const Size MAX_REG_SOURCES(3);
|
||||
static const Size MAX_PRED_SOURCES(2);
|
||||
|
||||
class Instruction;
|
||||
|
||||
struct DivergentBranchException {};
|
||||
struct DomainException {};
|
||||
|
||||
std::ostream &operator<<(std::ostream &, Instruction &);
|
||||
|
||||
class Instruction {
|
||||
public:
|
||||
Instruction() :
|
||||
predicated(false), nRsrc(0), nPsrc(0), immsrcPresent(false),
|
||||
rdestPresent(false), pdestPresent(false), refLiteral(NULL)
|
||||
{
|
||||
}
|
||||
|
||||
void executeOn(Warp &warp);
|
||||
friend std::ostream &operator<<(std::ostream &, Instruction &);
|
||||
|
||||
/* Setters used to "craft" the instruction. */
|
||||
void setOpcode (Opcode opc) { op = opc; }
|
||||
void setPred (RegNum pReg) { predicated = true; pred = pReg; }
|
||||
void setDestReg (RegNum destReg) { rdestPresent = true; rdest = destReg; }
|
||||
void setSrcReg (RegNum srcReg) { rsrc[nRsrc++] = srcReg; }
|
||||
void setFunc3 (Word func3) { this->func3 = func3; }
|
||||
void setFunc7 (Word func7) { this->func7 = func7; }
|
||||
void setDestPReg(RegNum dPReg) { pdestPresent = true; pdest = dPReg; }
|
||||
void setSrcPReg (RegNum srcPReg) { psrc[nPsrc++] = srcPReg; }
|
||||
Word *setSrcImm () { immsrcPresent = true; immsrc = 0xa5; return &immsrc;}
|
||||
void setSrcImm (Word srcImm) { immsrcPresent = true; immsrc = srcImm; }
|
||||
void setImmRef (Ref &r) { refLiteral = &r; }
|
||||
|
||||
/* Getters used by encoders. */
|
||||
Opcode getOpcode() const { return op; }
|
||||
bool hasPred() const { return predicated; }
|
||||
RegNum getPred() const { return pred; }
|
||||
RegNum getNRSrc() const { return nRsrc; }
|
||||
RegNum getRSrc(RegNum i) const { return rsrc[i]; }
|
||||
RegNum getNPSrc() const { return nPsrc; }
|
||||
RegNum getPSrc(RegNum i) const { return psrc[i]; }
|
||||
bool hasRDest() const { return rdestPresent; }
|
||||
RegNum getRDest() const { return rdest; }
|
||||
bool hasPDest() const { return pdestPresent; }
|
||||
RegNum getPDest() const { return pdest; }
|
||||
bool hasImm() const { return immsrcPresent; }
|
||||
Word getImm() const { return immsrc; }
|
||||
bool hasRefLiteral() const { return refLiteral != NULL; }
|
||||
Ref *getRefLiteral() const { return refLiteral; }
|
||||
|
||||
/* Getters used as table lookup. */
|
||||
bool hasRelImm() const { return (*(instTable.find(op))).second.relAddress; }
|
||||
|
||||
private:
|
||||
bool predicated;
|
||||
RegNum pred;
|
||||
Opcode op;
|
||||
int nRsrc, nPsrc;
|
||||
RegNum rsrc[MAX_REG_SOURCES], psrc[MAX_PRED_SOURCES];
|
||||
bool immsrcPresent;
|
||||
Word immsrc;
|
||||
Word func3;
|
||||
Word func7;
|
||||
bool rdestPresent, pdestPresent;
|
||||
RegNum rdest, pdest;
|
||||
Ref *refLiteral;
|
||||
|
||||
public:
|
||||
|
||||
|
||||
};
|
||||
};
|
||||
|
||||
#endif
|
||||
|
||||
// static struct InstTableEntry {
|
||||
// const char *opString;
|
||||
// bool controlFlow, relAddress, allSrcArgs, privileged;
|
||||
// InstType iType;
|
||||
// };
|
||||
432
emulator/include/mem.h
Normal file
432
emulator/include/mem.h
Normal file
@@ -0,0 +1,432 @@
|
||||
/*******************************************************************************
|
||||
HARPtools by Chad D. Kersey, Summer 2011
|
||||
*******************************************************************************/
|
||||
#ifndef __MEM_H
|
||||
#define __MEM_H
|
||||
|
||||
#include <ostream>
|
||||
#include <vector>
|
||||
#include <queue>
|
||||
#include <map>
|
||||
#include <pthread.h>
|
||||
|
||||
#include "types.h"
|
||||
|
||||
namespace Harp {
|
||||
void *consoleInputThread(void *);
|
||||
struct BadAddress {};
|
||||
|
||||
class MemDevice {
|
||||
public:
|
||||
virtual ~MemDevice() {}
|
||||
virtual Size size() const = 0;
|
||||
virtual Word read(Addr) = 0;
|
||||
virtual void write(Addr, Word) = 0;
|
||||
virtual Byte *base() { return NULL; } /* Null if unavailable. */
|
||||
};
|
||||
|
||||
class RamMemDevice : public MemDevice {
|
||||
public:
|
||||
RamMemDevice(Size size, Size wordSize);
|
||||
RamMemDevice(const char* filename, Size wordSize);
|
||||
~RamMemDevice() {}
|
||||
|
||||
virtual Size size() const { return contents.size(); };
|
||||
virtual Word read(Addr);
|
||||
virtual void write(Addr, Word);
|
||||
virtual Byte *base() { return &contents[0]; }
|
||||
|
||||
protected:
|
||||
Size wordSize;
|
||||
std::vector<Byte> contents;
|
||||
};
|
||||
|
||||
class RomMemDevice : public RamMemDevice {
|
||||
public:
|
||||
RomMemDevice(const char* filename, Size wordSize) :
|
||||
RamMemDevice(filename, wordSize) {}
|
||||
RomMemDevice(Size size, Size wordSize) :
|
||||
RamMemDevice(size, wordSize) {}
|
||||
~RomMemDevice();
|
||||
|
||||
virtual void write(Addr, Word);
|
||||
};
|
||||
|
||||
class Core;
|
||||
class ConsoleMemDevice : public MemDevice {
|
||||
public:
|
||||
ConsoleMemDevice(Size wS, std::ostream &o, Core &core, bool batch = false);
|
||||
~ConsoleMemDevice() {}
|
||||
|
||||
//virtual Size wordSize() const { return wordSize; }
|
||||
virtual Size size() const { return wordSize; }
|
||||
virtual Word read(Addr) { pthread_mutex_lock(&cBufLock);
|
||||
char c = cBuf.front();
|
||||
cBuf.pop();
|
||||
pthread_mutex_unlock(&cBufLock);
|
||||
return Word(c); }
|
||||
virtual void write(Addr a, Word w) { output << char(w); }
|
||||
|
||||
void poll();
|
||||
|
||||
friend void *Harp::consoleInputThread(void *);
|
||||
|
||||
private:
|
||||
std::ostream &output;
|
||||
Size wordSize;
|
||||
Core &core;
|
||||
|
||||
std::queue<char> cBuf;
|
||||
pthread_mutex_t cBufLock;
|
||||
};
|
||||
|
||||
class DiskControllerMemDevice : public MemDevice {
|
||||
public:
|
||||
DiskControllerMemDevice(Size wordSize, Size blockSize, Core &c) :
|
||||
wordSize(wordSize), blockSize(blockSize), core(c), disks() {}
|
||||
|
||||
void addDisk(Byte *file, Size n) { disks.push_back(Disk(file, n)); }
|
||||
|
||||
virtual Size size() const { return wordSize * 6; }
|
||||
virtual Word read(Addr);
|
||||
virtual void write(Addr, Word);
|
||||
|
||||
private:
|
||||
Word curDisk, curBlock, nBlocks, physAddr, command, status;
|
||||
enum Status { OK = 0, INVALID_DISK, INVALID_BLOCK };
|
||||
struct Disk {
|
||||
Disk(Byte *f, Size n): file(f), blocks(n) {}
|
||||
Byte *file;
|
||||
Size blocks;
|
||||
};
|
||||
std::vector <Disk> disks;
|
||||
Core &core;
|
||||
Size wordSize, blockSize;;
|
||||
};
|
||||
|
||||
class MemoryUnit {
|
||||
public:
|
||||
MemoryUnit(Size pageSize, Size addrBytes, bool disableVm = false) :
|
||||
pageSize(pageSize), addrBytes(addrBytes), ad(), disableVm(disableVm)
|
||||
{
|
||||
if (!disableVm)
|
||||
tlb[0] = TLBEntry(0, 077);
|
||||
}
|
||||
void attach(MemDevice &m, Addr base);
|
||||
|
||||
//Size wordSize();
|
||||
struct PageFault {
|
||||
PageFault(Addr a, bool nf) : faultAddr(a), notFound(nf) {}
|
||||
Addr faultAddr;
|
||||
bool notFound;
|
||||
}; /* Thrown on page fault. */
|
||||
|
||||
Word read(Addr, bool sup); /* For data accesses. */
|
||||
Word fetch(Addr, bool sup); /* For instruction accesses. */
|
||||
Byte *getPtr(Addr, Size);
|
||||
void write(Addr, Word, bool sup, Size);
|
||||
void tlbAdd(Addr virt, Addr phys, Word flags);
|
||||
void tlbRm(Addr va);
|
||||
void tlbFlush() { tlb.clear(); }
|
||||
|
||||
#ifdef EMU_INSTRUMENTATION
|
||||
Addr virtToPhys(Addr va);
|
||||
#endif
|
||||
|
||||
private:
|
||||
class ADecoder {
|
||||
public:
|
||||
ADecoder() : zeroChild(NULL), oneChild(NULL), range(0) {}
|
||||
ADecoder(MemDevice &md, Size range) :
|
||||
zeroChild(NULL), oneChild(NULL), range(range), md(&md) {}
|
||||
Byte *getPtr(Addr a, Size sz, Size wordSize);
|
||||
Word read(Addr a, bool sup, Size wordSize);
|
||||
void write(Addr a, Word w, bool sup, Size wordSize);
|
||||
void map(Addr a, MemDevice &md, Size range, Size bit);
|
||||
private:
|
||||
MemDevice &doLookup(Addr a, Size &bit);
|
||||
ADecoder *zeroChild, *oneChild;
|
||||
MemDevice *md;
|
||||
Size range;
|
||||
};
|
||||
|
||||
ADecoder ad;
|
||||
|
||||
struct TLBEntry {
|
||||
TLBEntry() {}
|
||||
TLBEntry(Word pfn, Word flags): pfn(pfn), flags(flags) {}
|
||||
Word flags;
|
||||
Word pfn;
|
||||
};
|
||||
|
||||
std::map<Addr, TLBEntry> tlb;
|
||||
TLBEntry tlbLookup(Addr vAddr, Word flagMask);
|
||||
|
||||
Size pageSize, addrBytes;
|
||||
|
||||
bool disableVm;
|
||||
};
|
||||
|
||||
|
||||
class RAM : public MemDevice {
|
||||
public:
|
||||
uint8_t* mem[1 << 12];
|
||||
|
||||
RAM(){
|
||||
for(uint32_t i = 0;i < (1 << 12);i++) mem[i] = NULL;
|
||||
}
|
||||
~RAM(){
|
||||
for(uint32_t i = 0;i < (1 << 12);i++) if(mem[i]) delete [] mem[i];
|
||||
}
|
||||
|
||||
void clear(){
|
||||
for(uint32_t i = 0;i < (1 << 12);i++)
|
||||
{
|
||||
if(mem[i])
|
||||
{
|
||||
delete mem[i];
|
||||
mem[i] = NULL;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
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] = 0xaa;
|
||||
ptr[i + 1] = 0xbb;
|
||||
ptr[i + 2] = 0xcc;
|
||||
ptr[i + 3] = 0xdd;
|
||||
}
|
||||
mem[address >> 20] = ptr;
|
||||
}
|
||||
return &mem[address >> 20][address & 0xFFFFF];
|
||||
}
|
||||
|
||||
void read(uint32_t address,uint32_t length, uint8_t *data){
|
||||
for(unsigned i = 0;i < length;i++){
|
||||
data[i] = (*this)[address + i];
|
||||
}
|
||||
}
|
||||
|
||||
void write(uint32_t address,uint32_t length, uint8_t *data){
|
||||
for(unsigned i = 0;i < length;i++){
|
||||
(*this)[address + i] = data[i];
|
||||
}
|
||||
}
|
||||
|
||||
virtual Size size() const { return (1<<31); };
|
||||
|
||||
void getBlock(uint32_t address, uint8_t *data)
|
||||
{
|
||||
uint32_t block_number = address & 0xffffff00; // To zero out block offset
|
||||
uint32_t bytes_num = 256;
|
||||
|
||||
this->read(block_number, bytes_num, data);
|
||||
}
|
||||
|
||||
void getWord(uint32_t address, uint32_t * data)
|
||||
{
|
||||
data[0] = 0;
|
||||
|
||||
uint8_t first = *get(address + 0);
|
||||
uint8_t second = *get(address + 1);
|
||||
uint8_t third = *get(address + 2);
|
||||
uint8_t fourth = *get(address + 3);
|
||||
|
||||
|
||||
// std::cout << std::hex;
|
||||
// std::cout << "RAM: READING ADDRESS " << address + 0 << " DATA: " << (uint32_t) first << "\n";
|
||||
// std::cout << "RAM: READING ADDRESS " << address + 1 << " DATA: " << (uint32_t) second << "\n";
|
||||
// std::cout << "RAM: READING ADDRESS " << address + 2 << " DATA: " << (uint32_t) third << "\n";
|
||||
// std::cout << "RAM: READING ADDRESS " << address + 3 << " DATA: " << (uint32_t) fourth << "\n";
|
||||
|
||||
data[0] = (data[0] << 0) | fourth;
|
||||
data[0] = (data[0] << 8) | third;
|
||||
data[0] = (data[0] << 8) | second;
|
||||
data[0] = (data[0] << 8) | first;
|
||||
// data[0] = (data[0] << 0) | first;
|
||||
// data[0] = (data[0] << 8) | second;
|
||||
// data[0] = (data[0] << 8) | third;
|
||||
// data[0] = (data[0] << 8) | fourth;
|
||||
|
||||
// std::cout << "FINAL DATA: " << data[0] << "\n";
|
||||
|
||||
}
|
||||
|
||||
void writeWord(uint32_t address, uint32_t * data)
|
||||
{
|
||||
uint32_t data_to_write = *data;
|
||||
|
||||
uint32_t byte_mask = 0xFF;
|
||||
|
||||
for (int i = 0; i < 4; i++)
|
||||
{
|
||||
// std::cout << "RAM: DATA TO WRITE " << data_to_write << "\n";
|
||||
// std::cout << "RAM: DATA TO MASK " << byte_mask << "\n";
|
||||
// std::cout << "RAM: WRITING ADDRESS " << address + i << " DATA: " << (data_to_write & byte_mask) << "\n";
|
||||
(*this)[address + i] = data_to_write & byte_mask;
|
||||
data_to_write = data_to_write >> 8;
|
||||
}
|
||||
}
|
||||
|
||||
void writeHalf(uint32_t address, uint32_t * data)
|
||||
{
|
||||
uint32_t data_to_write = *data;
|
||||
|
||||
uint32_t byte_mask = 0xFF;
|
||||
|
||||
for (int i = 0; i < 2; i++)
|
||||
{
|
||||
// std::cout << "RAM: DATA TO WRITE " << data_to_write << "\n";
|
||||
// std::cout << "RAM: DATA TO MASK " << byte_mask << "\n";
|
||||
// std::cout << "RAM: WRITING ADDRESS " << address + i << " DATA: " << (data_to_write & byte_mask) << "\n";
|
||||
(*this)[address + i] = data_to_write & byte_mask;
|
||||
data_to_write = data_to_write >> 8;
|
||||
}
|
||||
}
|
||||
|
||||
void writeByte(uint32_t address, uint32_t * data)
|
||||
{
|
||||
uint32_t data_to_write = *data;
|
||||
|
||||
uint32_t byte_mask = 0xFF;
|
||||
|
||||
(*this)[address] = data_to_write & byte_mask;
|
||||
data_to_write = data_to_write >> 8;
|
||||
|
||||
}
|
||||
|
||||
uint8_t& operator [](uint32_t address) {
|
||||
return *get(address);
|
||||
}
|
||||
|
||||
virtual void write(Addr addr, Word w)
|
||||
{
|
||||
uint32_t word = (uint32_t) w;
|
||||
writeWord(addr, &word);
|
||||
}
|
||||
|
||||
virtual Word read(Addr addr)
|
||||
{
|
||||
uint32_t w;
|
||||
getWord(addr, &w);
|
||||
// std::cout << "RAM: read -> " << w << " at addr: " << addr << "\n";
|
||||
return (Word) w;
|
||||
}
|
||||
|
||||
virtual Byte *base()
|
||||
{
|
||||
return (Byte *) this->get(0);
|
||||
}
|
||||
|
||||
// MEMORY UTILS
|
||||
|
||||
uint32_t hti_old(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_old(char *c, uint32_t size) {
|
||||
uint32_t value = 0;
|
||||
for (uint32_t i = 0; i < size; i++) {
|
||||
value += hti_old(c[i]) << ((size - i - 1) * 4);
|
||||
}
|
||||
return value;
|
||||
}
|
||||
|
||||
|
||||
|
||||
void loadHexImpl(std::string path) {
|
||||
this->clear();
|
||||
FILE *fp = fopen(&path[0], "r");
|
||||
if(fp == 0){
|
||||
std::cout << path << " not found" << std::endl;
|
||||
}
|
||||
//Preload 0x0 <-> 0x80000000 jumps
|
||||
((uint32_t*)this->get(0))[0] = 0xf1401073;
|
||||
((uint32_t*)this->get(0))[1] = 0xf1401073;
|
||||
|
||||
// ((uint32_t*)this->get(0))[1] = 0xf1401073;
|
||||
((uint32_t*)this->get(0))[2] = 0x30101073;
|
||||
|
||||
((uint32_t*)this->get(0))[3] = 0x800000b7;
|
||||
((uint32_t*)this->get(0))[4] = 0x000080e7;
|
||||
|
||||
((uint32_t*)this->get(0x80000000))[0] = 0x00000097;
|
||||
|
||||
((uint32_t*)this->get(0xb0000000))[0] = 0x01C02023;
|
||||
// F00FFF10
|
||||
((uint32_t*)this->get(0xf00fff10))[0] = 0x12345678;
|
||||
|
||||
|
||||
|
||||
|
||||
fseek(fp, 0, SEEK_END);
|
||||
uint32_t size = ftell(fp);
|
||||
fseek(fp, 0, SEEK_SET);
|
||||
char* content = new char[size];
|
||||
int x = fread(content, 1, size, fp);
|
||||
|
||||
if (!x) { std::cout << "COULD NOT READ FILE\n"; exit(1);}
|
||||
|
||||
int offset = 0;
|
||||
char* line = content;
|
||||
// std::cout << "WHTA\n";
|
||||
while (1) {
|
||||
if (line[0] == ':') {
|
||||
uint32_t byteCount = hToI_old(line + 1, 2);
|
||||
uint32_t nextAddr = hToI_old(line + 3, 4) + offset;
|
||||
uint32_t key = hToI_old(line + 7, 2);
|
||||
switch (key) {
|
||||
case 0:
|
||||
for (uint32_t i = 0; i < byteCount; i++) {
|
||||
|
||||
unsigned add = nextAddr + i;
|
||||
|
||||
*(this->get(add)) = hToI_old(line + 9 + i * 2, 2);
|
||||
// std::cout << "lhi: Address: " << std::hex <<(add) << "\tValue: " << std::hex << hToI_old(line + 9 + i * 2, 2) << std::endl;
|
||||
}
|
||||
break;
|
||||
case 2:
|
||||
// cout << offset << endl;
|
||||
offset = hToI_old(line + 9, 4) << 4;
|
||||
break;
|
||||
case 4:
|
||||
// cout << offset << endl;
|
||||
offset = hToI_old(line + 9, 4) << 16;
|
||||
break;
|
||||
default:
|
||||
// cout << "??? " << key << endl;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
while (*line != '\n' && size != 0) {
|
||||
line++;
|
||||
size--;
|
||||
}
|
||||
if (size <= 1)
|
||||
break;
|
||||
line++;
|
||||
size--;
|
||||
}
|
||||
|
||||
|
||||
if (content) delete[] content;
|
||||
}
|
||||
|
||||
};
|
||||
|
||||
|
||||
|
||||
|
||||
};
|
||||
|
||||
|
||||
#endif
|
||||
210
emulator/include/obj.h
Normal file
210
emulator/include/obj.h
Normal file
@@ -0,0 +1,210 @@
|
||||
/*******************************************************************************
|
||||
HARPtools by Chad D. Kersey, Summer 2011
|
||||
*******************************************************************************/
|
||||
#ifndef __OBJ_H
|
||||
#define __OBJ_H
|
||||
|
||||
#include <iostream>
|
||||
#include <string>
|
||||
#include <vector>
|
||||
#include <list>
|
||||
#include <stdlib.h>
|
||||
|
||||
#include "types.h"
|
||||
#include "archdef.h"
|
||||
#include "instruction.h"
|
||||
#include "enc.h"
|
||||
#include "asm-tokens.h"
|
||||
|
||||
namespace Harp {
|
||||
class Decoder;
|
||||
class Encoder;
|
||||
|
||||
class Ref {
|
||||
public:
|
||||
std::string name;
|
||||
Ref(const std::string &n, bool r, Size ib = 0):
|
||||
name(n), bound(false), relative(r), ibase(ib) { }
|
||||
virtual ~Ref() { }
|
||||
virtual void bind(Addr addr, Addr base = 0) = 0;
|
||||
virtual Addr getAddr() const = 0;
|
||||
|
||||
bool bound, relative;
|
||||
Size ibase;
|
||||
};
|
||||
|
||||
/* Used in not-yet-encoded code objects, plain old data. */
|
||||
class SimpleRef : public Ref {
|
||||
public:
|
||||
SimpleRef(const std::string &name, Addr &addr, bool rel = false) :
|
||||
Ref(name, rel), addr(addr) { }
|
||||
virtual void bind(Addr addr, Addr base = 0) {
|
||||
std::cout << "Attempted to bind a SimpleRef.\n";
|
||||
exit(1);
|
||||
}
|
||||
virtual Addr getAddr() const { return this->addr; }
|
||||
Byte *getAddrPtr() { return (Byte*)&addr; }
|
||||
|
||||
private:
|
||||
Addr &addr;
|
||||
};
|
||||
|
||||
// /* Used in already-encoded code objects. */
|
||||
// class OffsetRef : public Ref {
|
||||
// public:
|
||||
// OffsetRef(
|
||||
// const std::string &name, std::vector<Byte> &v, Size offset, Size bits,
|
||||
// Size ws, bool rel = false, Size ibase = 0
|
||||
// ) : Ref(name, rel, ibase), data(v), offset(offset), bits(bits), wordSize(ws)
|
||||
// {}
|
||||
|
||||
// virtual void bind(Addr addr, Addr base = 0) {
|
||||
// Size bytes(bits/8), remainder(bits%8);
|
||||
|
||||
// if (relative) {
|
||||
// addr = addr - base;
|
||||
// Word_s addr_s(addr);
|
||||
// if ((addr_s >> bits) != ~0ull && (addr_s >> bits) != 0) goto noFit;
|
||||
// } else {
|
||||
// Addr mask = (1ull<<bits)-1;
|
||||
// if (addr > mask) goto noFit;
|
||||
// }
|
||||
|
||||
// { Byte mask((1ull<<remainder) - 1);
|
||||
// Size i;
|
||||
// for (i = 0; i < bytes; i++) {
|
||||
// data[offset+i] = addr & 0xff;
|
||||
// addr >>= 8;
|
||||
// }
|
||||
// data[offset+i] &= ~mask;
|
||||
// data[offset+i] |= (addr&mask);
|
||||
// bound = true;
|
||||
// }
|
||||
|
||||
// return;
|
||||
// noFit:
|
||||
// std::cout << "Attempt to bind a " << bits << "-bit "
|
||||
// << (relative?"":"non-") << "relative symbol to an address"
|
||||
// " it cannot reach.\n";
|
||||
// exit(1);
|
||||
// }
|
||||
|
||||
// virtual Addr getAddr() const {
|
||||
// Size bytes = bits/8, remainder = bits%8;
|
||||
// Byte mask((1<<remainder)-1);
|
||||
// Addr a(data[offset]&mask);
|
||||
|
||||
// for (Size i = 0; i < bytes-1; i++) {
|
||||
// a |= data[offset + bytes - i - 1];
|
||||
// a <<= 8;
|
||||
// }
|
||||
// return a;
|
||||
// }
|
||||
|
||||
// Size getOffset() const { return offset; }
|
||||
// Size getBits() const { return bits; }
|
||||
|
||||
// private:
|
||||
// std::vector<Byte> &data;
|
||||
// Size offset, bits, wordSize;
|
||||
// };
|
||||
|
||||
// class Chunk {
|
||||
// public:
|
||||
// Chunk(std::string n, Size a = 0, Word f = 0) :
|
||||
// name(n), alignment(a), bound(false), flags(f), global(false) {}
|
||||
// virtual ~Chunk() { for (Size i = 0; i < refs.size(); i++) delete refs[i]; }
|
||||
// void bind(Addr a) { address = a; bound = true; }
|
||||
// void setGlobal() { global = true; }
|
||||
// bool isGlobal() const { return global; }
|
||||
// std::string name;
|
||||
// Size alignment;
|
||||
// bool bound, global;
|
||||
// Addr address;
|
||||
// Word flags;
|
||||
// std::vector<Ref*> refs;
|
||||
// };
|
||||
|
||||
// class TextChunk : public Chunk {
|
||||
// public:
|
||||
// TextChunk(std::string n, Size a = 0, Word f = 0)
|
||||
// : Chunk(n, a, f), instructions() {}
|
||||
|
||||
// ~TextChunk() {
|
||||
// for (Size i = 0; i < instructions.size(); i++) delete instructions[i];
|
||||
// }
|
||||
|
||||
// std::vector<Instruction*> instructions;
|
||||
// };
|
||||
|
||||
// class DataChunk : public Chunk {
|
||||
// public:
|
||||
// DataChunk(std::string n, Size a = 0, Word f = 0)
|
||||
// : Chunk(n, a, f), size(0), contents() {}
|
||||
// Size size;
|
||||
// std::vector<Byte> contents; /* 0 to size bytes in length. */
|
||||
// };
|
||||
|
||||
// class Obj {
|
||||
// public:
|
||||
// ~Obj() { for (Size i = 0; i < chunks.size(); i++) delete chunks[i]; }
|
||||
// std::vector<Chunk*> chunks;
|
||||
// Size entry;
|
||||
// };
|
||||
|
||||
// class DynObj : public Obj {
|
||||
// public:
|
||||
// std::vector<std::string> deps;
|
||||
// };
|
||||
|
||||
// class ObjReader {
|
||||
// public:
|
||||
// virtual Obj *read(std::istream &input) = 0;
|
||||
// private:
|
||||
// };
|
||||
|
||||
// class ObjWriter {
|
||||
// public:
|
||||
// virtual void write(std::ostream &output, const Obj &o) = 0;
|
||||
// private:
|
||||
// };
|
||||
|
||||
// class AsmReader : public ObjReader {
|
||||
// public:
|
||||
// AsmReader(ArchDef arch) :
|
||||
// wordSize(arch.getWordSize()), nRegs(arch.getNRegs()) {}
|
||||
// virtual Obj *read(std::istream &input);
|
||||
// private:
|
||||
// Size wordSize, nRegs;
|
||||
|
||||
// // Operand type sequences indexed by argument class
|
||||
// enum ArgType {AT_END, AT_REG, AT_PREG, AT_LIT};
|
||||
// static ArgType operandtype_table[][4]; // ArgClass -> ArgType[arg_idx]
|
||||
// };
|
||||
|
||||
// class HOFReader : public ObjReader {
|
||||
// public:
|
||||
// HOFReader(ArchDef &arch) : arch(arch) {}
|
||||
// Obj *read(std::istream &input);
|
||||
// private:
|
||||
// const ArchDef &arch;
|
||||
// };
|
||||
|
||||
// class AsmWriter : public ObjWriter {
|
||||
// public:
|
||||
// AsmWriter(ArchDef arch): wordSize(arch.getWordSize()) {}
|
||||
// virtual void write(std::ostream &output, const Obj &obj);
|
||||
// private:
|
||||
// Size wordSize;
|
||||
// };
|
||||
|
||||
// class HOFWriter : public ObjWriter {
|
||||
// public:
|
||||
// HOFWriter(ArchDef &arch) : arch(arch) {}
|
||||
// virtual void write(std::ostream &output, const Obj &obj);
|
||||
// private:
|
||||
// const ArchDef &arch;
|
||||
// };
|
||||
};
|
||||
|
||||
#endif
|
||||
169
emulator/include/qsim-harp.h
Normal file
169
emulator/include/qsim-harp.h
Normal file
@@ -0,0 +1,169 @@
|
||||
/*******************************************************************************
|
||||
HARPtools by Chad D. Kersey, Summer 2011
|
||||
*******************************************************************************/
|
||||
#ifndef EMU_INSTRUMENTATION
|
||||
#define EMU_INSTRUMENTATION
|
||||
#endif
|
||||
|
||||
#ifndef __QSIM_HARP_H
|
||||
#define __QSIM_HARP_H
|
||||
|
||||
#include "types.h"
|
||||
#include "core.h"
|
||||
#include "enc.h"
|
||||
#include "instruction.h"
|
||||
#include "mem.h"
|
||||
#include "obj.h"
|
||||
#include "archdef.h"
|
||||
|
||||
#include <stdint.h>
|
||||
#include <iostream>
|
||||
#include <vector>
|
||||
#include <string>
|
||||
|
||||
#include <qsim.h>
|
||||
|
||||
namespace Harp {
|
||||
class OSDomain {
|
||||
public:
|
||||
OSDomain(Harp::ArchDef &arch, std::string imgFile);
|
||||
|
||||
bool idle(unsigned i) const { return cpus[i].idle(); }
|
||||
int get_tid(unsigned i) const { return cpus[i].get_tid(); }
|
||||
bool get_prot(unsigned i) const { return cpus[i].get_prot(); }
|
||||
|
||||
int get_n() const { return cpus.size(); }
|
||||
|
||||
uint64_t run(unsigned i, uint64_t n) { return cpus[i].run(n); }
|
||||
void connect_console(std::ostream &s);
|
||||
void timer_interrupt() { /* TODO: timer convention */ }
|
||||
void interrupt(unsigned i, int vec) { cpus[i].interrupt(vec); }
|
||||
bool booted(unsigned i) const { return cpus[i].booted(); }
|
||||
void save_state(const char* state_file);
|
||||
|
||||
template <typename T>
|
||||
void set_atomic_cb
|
||||
(T *p, typename Qsim::OSDomain::atomic_cb_obj<T>::atomic_cb_t f)
|
||||
{
|
||||
atomic_cbs.push_back(new Qsim::OSDomain::atomic_cb_obj<T>(p, f));
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
void set_inst_cb
|
||||
(T* p, typename Qsim::OSDomain::inst_cb_obj<T>::inst_cb_t f)
|
||||
{
|
||||
inst_cbs.push_back(new Qsim::OSDomain::inst_cb_obj<T>(p, f));
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
void set_int_cb
|
||||
(T *p, typename Qsim::OSDomain::int_cb_obj<T>::int_cb_t f)
|
||||
{
|
||||
int_cbs.push_back(new Qsim::OSDomain::int_cb_obj<T>(p, f));
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
void set_mem_cb
|
||||
(T *p, typename Qsim::OSDomain::mem_cb_obj<T>::mem_cb_t f)
|
||||
{
|
||||
mem_cbs.push_back(new Qsim::OSDomain::mem_cb_obj<T>(p, f));
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
void set_magic_cb
|
||||
(T *p, typename Qsim::OSDomain::magic_cb_obj<T>::magic_cb_t f)
|
||||
{
|
||||
magic_cbs.push_back(new Qsim::OSDomain::magic_cb_obj<T>(p, f));
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
void set_io_cb
|
||||
(T *p, typename Qsim::OSDomain::io_cb_obj<T>::io_cb_t f)
|
||||
{ /* Do nothing. We have no separate IO address space. */ }
|
||||
|
||||
template <typename T>
|
||||
void set_reg_cb
|
||||
(T *p, typename Qsim::OSDomain::reg_cb_obj<T>::reg_cb_t f)
|
||||
{
|
||||
reg_cbs.push_back(new Qsim::OSDomain::reg_cb_obj<T>(p, f));
|
||||
}
|
||||
|
||||
template <typename T> void mem_rd(T& d, uint64_t paddr);
|
||||
template <typename T> void mem_rd_virt(unsigned i, T& d, uint64_t vaddr);
|
||||
template <typename T> void mem_wr(T& d, uint64_t paddr);
|
||||
template <typename T> void mem_wr_virt(unsigned i, T& d, uint64_t vaddr);
|
||||
|
||||
static OSDomain *osDomain;
|
||||
|
||||
bool do_atomic(unsigned c) {
|
||||
bool rval(false);
|
||||
for (unsigned i = 0; i < atomic_cbs.size(); ++i)
|
||||
if ((*atomic_cbs[i])(c)) rval = true;
|
||||
return rval;
|
||||
}
|
||||
|
||||
void do_inst(unsigned c, uint64_t va, uint64_t pa, uint8_t l,
|
||||
const uint8_t *b, enum inst_type t)
|
||||
{
|
||||
for (unsigned i = 0; i < inst_cbs.size(); ++i)
|
||||
(*inst_cbs[i])(c, va, pa, l, b, t);
|
||||
}
|
||||
|
||||
void do_int(unsigned c, int v) {
|
||||
for (unsigned i = 0; i < int_cbs.size(); ++i)
|
||||
(*int_cbs[i])(c, v);
|
||||
}
|
||||
|
||||
void do_mem(unsigned c, uint64_t va, uint64_t pa, uint8_t s, bool w) {
|
||||
for (unsigned i = 0; i < mem_cbs.size(); ++i)
|
||||
(*mem_cbs[i])(c, va, pa, s, w);
|
||||
}
|
||||
|
||||
bool do_magic(unsigned c, uint64_t r0) {
|
||||
bool rval(false);
|
||||
for (unsigned i = 0; i < magic_cbs.size(); ++i)
|
||||
if ((*magic_cbs[i])(c, r0)) rval = true;
|
||||
return rval;
|
||||
}
|
||||
|
||||
void do_reg(unsigned c, int r, uint8_t s, bool w) {
|
||||
for (unsigned i = 0; i < reg_cbs.size(); ++i)
|
||||
(*reg_cbs[i])(c, r, s, w);
|
||||
}
|
||||
|
||||
private:
|
||||
class Cpu {
|
||||
public:
|
||||
Cpu(Harp::OSDomain &osd);
|
||||
Cpu(): dec(NULL), core(NULL) {}
|
||||
~Cpu() { if (dec) delete dec; if (core) delete core; }
|
||||
|
||||
bool idle() const { return false; }
|
||||
int get_tid() const { return 0; }
|
||||
bool get_prot() const { return core->getSupervisorMode(); }
|
||||
uint64_t run(uint64_t n);
|
||||
void interrupt(int vec) { core->interrupt(vec); }
|
||||
bool booted() const { return core->running(); }
|
||||
|
||||
Harp::OSDomain *osd;
|
||||
Harp::Decoder *dec;
|
||||
Harp::Core *core;
|
||||
};
|
||||
|
||||
Harp::ArchDef arch;
|
||||
|
||||
Harp::MemoryUnit mu;
|
||||
Harp::RamMemDevice ram;
|
||||
Harp::ConsoleMemDevice *console;
|
||||
|
||||
std::vector <Harp::OSDomain::Cpu> cpus;
|
||||
|
||||
std::vector <Qsim::OSDomain::atomic_cb_obj_base*> atomic_cbs;
|
||||
std::vector <Qsim::OSDomain::inst_cb_obj_base*> inst_cbs;
|
||||
std::vector <Qsim::OSDomain::int_cb_obj_base*> int_cbs;
|
||||
std::vector <Qsim::OSDomain::mem_cb_obj_base*> mem_cbs;
|
||||
std::vector <Qsim::OSDomain::magic_cb_obj_base*> magic_cbs;
|
||||
std::vector <Qsim::OSDomain::reg_cb_obj_base*> reg_cbs;
|
||||
};
|
||||
};
|
||||
#endif
|
||||
25
emulator/include/types.h
Normal file
25
emulator/include/types.h
Normal file
@@ -0,0 +1,25 @@
|
||||
/*******************************************************************************
|
||||
HARPtools by Chad D. Kersey, Summer 2011
|
||||
*******************************************************************************/
|
||||
#ifndef __TYPES_H
|
||||
#define __TYPES_H
|
||||
|
||||
#include <stdint.h>
|
||||
|
||||
namespace Harp {
|
||||
typedef uint8_t Byte;
|
||||
typedef uint32_t Word;
|
||||
typedef uint32_t Word_u;
|
||||
typedef int32_t Word_s;
|
||||
|
||||
typedef Word_u Addr;
|
||||
typedef Word_u Size;
|
||||
|
||||
typedef unsigned RegNum;
|
||||
typedef unsigned ThdNum;
|
||||
|
||||
enum MemFlags {RD_USR = 1, WR_USR = 2, EX_USR = 4,
|
||||
RD_SUP = 8, WR_SUP = 16, EX_SUP = 32};
|
||||
};
|
||||
|
||||
#endif
|
||||
24
emulator/include/util.h
Normal file
24
emulator/include/util.h
Normal file
@@ -0,0 +1,24 @@
|
||||
/*******************************************************************************
|
||||
HARPtools by Chad D. Kersey, Summer 2011
|
||||
*******************************************************************************/
|
||||
#ifndef __UTIL_H
|
||||
#define __UTIL_H
|
||||
|
||||
#include <vector>
|
||||
#include "types.h"
|
||||
|
||||
namespace Harp {
|
||||
Word_u bytesToWord(const Byte *b, Size wordSize);
|
||||
void wordToBytes(Byte *b, Word_u w, Size wordSize);
|
||||
Word_u flagsToWord(bool r, bool w, bool x);
|
||||
void wordToFlags(bool &r, bool &w, bool &x, Word_u f);
|
||||
|
||||
class OutOfBytes {};
|
||||
|
||||
Byte readByte(const std::vector<Byte> &b, Size &n);
|
||||
Word_u readWord(const std::vector<Byte> &b, Size &n, Size wordSize);
|
||||
void writeByte(std::vector<Byte> &p, Size &n, Byte b);
|
||||
void writeWord(std::vector<Byte> &p, Size &n, Size wordSize, Word w);
|
||||
};
|
||||
|
||||
#endif
|
||||
804
emulator/instruction.cpp
Normal file
804
emulator/instruction.cpp
Normal file
@@ -0,0 +1,804 @@
|
||||
/*******************************************************************************
|
||||
HARPtools by Chad D. Kersey, Summer 2011
|
||||
*******************************************************************************/
|
||||
#include <iostream>
|
||||
#include <stdlib.h>
|
||||
|
||||
#include "include/instruction.h"
|
||||
#include "include/obj.h"
|
||||
#include "include/core.h"
|
||||
#include "include/harpfloat.h"
|
||||
#include "include/debug.h"
|
||||
|
||||
#ifdef EMU_INSTRUMENTATION
|
||||
#include "include/qsim-harp.h"
|
||||
#endif
|
||||
|
||||
using namespace Harp;
|
||||
using namespace std;
|
||||
|
||||
/* It is important that this stays consistent with the Harp::Instruction::Opcode
|
||||
enum. */
|
||||
|
||||
ostream &Harp::operator<<(ostream& os, Instruction &inst) {
|
||||
os << dec;
|
||||
|
||||
// if (inst.predicated) {
|
||||
// os << "@p" << dec << inst.pred << " ? ";
|
||||
// }
|
||||
|
||||
// os << inst.instTable[inst.op].opString << ' ';
|
||||
// if (inst.rdestPresent) os << "%r" << dec << inst.rdest << ' ';
|
||||
// if (inst.pdestPresent) os << "@p" << inst.pdest << ' ';
|
||||
// for (int i = 0; i < inst.nRsrc; i++) {
|
||||
// os << "%r" << dec << inst.rsrc[i] << ' ';
|
||||
// }
|
||||
// for (int i = 0; i < inst.nPsrc; i++) {
|
||||
// os << "@p" << dec << inst.psrc[i] << ' ';
|
||||
// }
|
||||
// if (inst.immsrcPresent) {
|
||||
// if (inst.refLiteral) os << inst.refLiteral->name;
|
||||
// else os << "#0x" << hex << inst.immsrc;
|
||||
// }
|
||||
|
||||
os << instTable[inst.op].opString;
|
||||
|
||||
os << ';';
|
||||
return os;
|
||||
}
|
||||
|
||||
bool checkUnanimous(unsigned p, const std::vector<std::vector<Reg<Word> > >& m,
|
||||
const std::vector<bool> &tm) {
|
||||
bool same;
|
||||
unsigned i;
|
||||
for (i = 0; i < m.size(); ++i) {
|
||||
if (tm[i]) {
|
||||
same = m[i][p];
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (i == m.size()) throw DivergentBranchException();
|
||||
|
||||
//std::cout << "same: " << same << " with -> ";
|
||||
for (; i < m.size(); ++i) {
|
||||
if (tm[i]) {
|
||||
//std::cout << " " << (bool(m[i][p]));
|
||||
if (same != (bool(m[i][p]))) {
|
||||
//std::cout << " FALSE\n";
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
//std::cout << " TRUE\n";
|
||||
return true;
|
||||
}
|
||||
|
||||
Word signExt(Word w, Size bit, Word mask) {
|
||||
if (w>>(bit-1)) w |= ~mask;
|
||||
return w;
|
||||
}
|
||||
|
||||
void Instruction::executeOn(Warp &c) {
|
||||
D(3, "Begin instruction execute.");
|
||||
|
||||
/* If I try to execute a privileged instruction in user mode, throw an
|
||||
exception 3. */
|
||||
if (instTable[op].privileged && !c.supervisorMode) {
|
||||
std::cout << "INTERRUPT SUPERVISOR\n";
|
||||
c.interrupt(3);
|
||||
return;
|
||||
}
|
||||
|
||||
// /* Also throw exceptions on non-masked divergent branches. */
|
||||
// if (instTable[op].controlFlow) {
|
||||
// Size t, count, active;
|
||||
// for (t = 0, count = 0, active = 0; t < c.activeThreads; ++t) {
|
||||
// if ((!predicated || c.pred[t][pred]) && c.tmask[t]) ++count;
|
||||
// if (c.tmask[t]) ++active;
|
||||
// }
|
||||
|
||||
// if (count != 0 && count != active)
|
||||
// throw DivergentBranchException();
|
||||
// }
|
||||
|
||||
Size nextActiveThreads = c.activeThreads;
|
||||
Size wordSz = c.core->a.getWordSize();
|
||||
Word nextPc = c.pc;
|
||||
|
||||
c.memAccesses.clear();
|
||||
|
||||
// If we have a load, overwriting a register's contents, we have to make sure
|
||||
// ahead of time it will not fault. Otherwise we may perform an indirect load
|
||||
// by mistake.
|
||||
// if (op == L_INST && rdest == rsrc[0]) {
|
||||
// for (Size t = 0; t < c.activeThreads; t++) {
|
||||
// if ((!predicated || c.pred[t][pred]) && c.tmask[t]) {
|
||||
// Word memAddr = c.reg[t][rsrc[0]] + immsrc;
|
||||
// c.core->mem.read(memAddr, c.supervisorMode);
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
|
||||
bool sjOnce(true), // Has not yet split or joined once.
|
||||
pcSet(false); // PC has already been set
|
||||
for (Size t = 0; t < c.activeThreads; t++) {
|
||||
vector<Reg<Word> > ®(c.reg[t]);
|
||||
vector<Reg<bool> > &pReg(c.pred[t]);
|
||||
stack<DomStackEntry> &domStack(c.domStack);
|
||||
|
||||
//std::cout << std::hex << "opcode: " << op << " func3: " << func3 << "\n";
|
||||
//if (op == GPGPU) //std::cout << "OPCODE MATCHED GPGPU\n";
|
||||
|
||||
// If this thread is masked out, don't execute the instruction, unless it's
|
||||
// a split or join.
|
||||
// if (((predicated && !pReg[pred]) || !c.tmask[t]) &&
|
||||
// op != SPLIT && op != JOIN) continue;
|
||||
|
||||
bool split = (op == GPGPU) && (func3 == 2);
|
||||
bool join = (op == GPGPU) && (func3 == 3);
|
||||
|
||||
|
||||
predicated = (op == GPGPU) && ((func3 == 7) || (func3 == 2));
|
||||
|
||||
|
||||
// printf("Predicated: %d, split: %d, join: %d\n",predicated, split, join );
|
||||
// printf("%d && ((%d) || (%d))\n",(op == GPGPU), (func3 == 7), (func3 == 2) );
|
||||
|
||||
// cout << "before " << op << " = " << GPGPU << "\n";
|
||||
if (((predicated && !reg[pred]) || !c.tmask[t]) && !split && !join)
|
||||
{
|
||||
// cout << "about to continue\n";
|
||||
continue;
|
||||
}
|
||||
// cout << "after\n";
|
||||
|
||||
++c.insts;
|
||||
|
||||
Word memAddr;
|
||||
Word shift_by;
|
||||
Word shamt;
|
||||
Word temp;
|
||||
Word data_read;
|
||||
int op1, op2;
|
||||
bool m_exten;
|
||||
// std::cout << "op = " << op << "\n";
|
||||
// std::cout << "R_INST: " << R_INST << "\n";
|
||||
switch (op) {
|
||||
|
||||
case NOP:
|
||||
//std::cout << "NOP_INST\n";
|
||||
break;
|
||||
case R_INST:
|
||||
// std::cout << "R_INST\n";
|
||||
m_exten = func7 & 0x1;
|
||||
|
||||
if (m_exten)
|
||||
{
|
||||
// std::cout << "FOUND A MUL/DIV\n";
|
||||
|
||||
switch (func3)
|
||||
{
|
||||
case 0:
|
||||
// MUL
|
||||
// cout << "MUL\n";
|
||||
reg[rdest] = ((int) reg[rsrc[0]]) * ((int) reg[rsrc[1]]);
|
||||
break;
|
||||
case 1:
|
||||
// MULH
|
||||
{
|
||||
int64_t first = (int64_t) reg[rsrc[0]];
|
||||
if (reg[rsrc[0]] & 0x80000000)
|
||||
{
|
||||
first = first | 0xFFFFFFFF00000000;
|
||||
}
|
||||
int64_t second = (int64_t) reg[rsrc[1]];
|
||||
if (reg[rsrc[1]] & 0x80000000)
|
||||
{
|
||||
second = second | 0xFFFFFFFF00000000;
|
||||
}
|
||||
// cout << "mulh: " << std::dec << first << " * " << second;
|
||||
uint64_t result = first * second;
|
||||
reg[rdest] = ( result >> 32) & 0xFFFFFFFF;
|
||||
// cout << " = " << result << " or " << reg[rdest] << "\n";
|
||||
}
|
||||
break;
|
||||
case 2:
|
||||
// MULHSU
|
||||
{
|
||||
int64_t first = (int64_t) reg[rsrc[0]];
|
||||
if (reg[rsrc[0]] & 0x80000000)
|
||||
{
|
||||
first = first | 0xFFFFFFFF00000000;
|
||||
}
|
||||
int64_t second = (int64_t) reg[rsrc[1]];
|
||||
reg[rdest] = (( first * second ) >> 32) & 0xFFFFFFFF;
|
||||
}
|
||||
break;
|
||||
case 3:
|
||||
// MULHU
|
||||
{
|
||||
uint64_t first = (uint64_t) reg[rsrc[0]];
|
||||
uint64_t second = (uint64_t) reg[rsrc[1]];
|
||||
// cout << "MULHU\n";
|
||||
reg[rdest] = (( first * second) >> 32) & 0xFFFFFFFF;
|
||||
}
|
||||
break;
|
||||
case 4:
|
||||
// DIV
|
||||
if (reg[rsrc[1]] == 0)
|
||||
{
|
||||
reg[rdest] = -1;
|
||||
break;
|
||||
}
|
||||
// cout << "dividing: " << dec << ((int) reg[rsrc[0]]) << " / " << ((int) reg[rsrc[1]]);
|
||||
reg[rdest] = ( (int) reg[rsrc[0]]) / ( (int) reg[rsrc[1]]);
|
||||
// cout << " = " << ((int) reg[rdest]) << "\n";
|
||||
break;
|
||||
case 5:
|
||||
// DIVU
|
||||
if (reg[rsrc[1]] == 0)
|
||||
{
|
||||
reg[rdest] = -1;
|
||||
break;
|
||||
}
|
||||
reg[rdest] = ((uint32_t) reg[rsrc[0]]) / ((uint32_t) reg[rsrc[1]]);
|
||||
break;
|
||||
case 6:
|
||||
// REM
|
||||
if (reg[rsrc[1]] == 0)
|
||||
{
|
||||
reg[rdest] = reg[rsrc[0]];
|
||||
break;
|
||||
}
|
||||
reg[rdest] = ((int) reg[rsrc[0]]) % ((int) reg[rsrc[1]]);
|
||||
break;
|
||||
case 7:
|
||||
// REMU
|
||||
if (reg[rsrc[1]] == 0)
|
||||
{
|
||||
reg[rdest] = reg[rsrc[0]];
|
||||
break;
|
||||
}
|
||||
reg[rdest] = ((uint32_t) reg[rsrc[0]]) % ((uint32_t) reg[rsrc[1]]);
|
||||
break;
|
||||
default:
|
||||
cout << "unsupported MUL/DIV instr\n";
|
||||
exit(1);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
// std::cout << "NORMAL R-TYPE\n";
|
||||
switch (func3)
|
||||
{
|
||||
case 0:
|
||||
if (func7)
|
||||
{
|
||||
reg[rdest] = reg[rsrc[0]] - reg[rsrc[1]];
|
||||
reg[rdest].trunc(wordSz);
|
||||
}
|
||||
else
|
||||
{
|
||||
reg[rdest] = reg[rsrc[0]] + reg[rsrc[1]];
|
||||
reg[rdest].trunc(wordSz);
|
||||
}
|
||||
break;
|
||||
case 1:
|
||||
reg[rdest] = reg[rsrc[0]] << reg[rsrc[1]];
|
||||
reg[rdest].trunc(wordSz);
|
||||
break;
|
||||
case 2:
|
||||
if ( int(reg[rsrc[0]]) < int(reg[rsrc[1]]))
|
||||
{
|
||||
reg[rdest] = 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
reg[rdest] = 0;
|
||||
}
|
||||
break;
|
||||
case 3:
|
||||
if ( Word_u(reg[rsrc[0]]) < Word_u(reg[rsrc[1]]))
|
||||
{
|
||||
reg[rdest] = 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
reg[rdest] = 0;
|
||||
}
|
||||
break;
|
||||
case 4:
|
||||
reg[rdest] = reg[rsrc[0]] ^ reg[rsrc[1]];
|
||||
break;
|
||||
case 5:
|
||||
if (func7)
|
||||
{
|
||||
reg[rdest] = int(reg[rsrc[0]]) >> int(reg[rsrc[1]]);
|
||||
reg[rdest].trunc(wordSz);
|
||||
}
|
||||
else
|
||||
{
|
||||
reg[rdest] = Word_u(reg[rsrc[0]]) >> Word_u(reg[rsrc[1]]);
|
||||
reg[rdest].trunc(wordSz);
|
||||
}
|
||||
break;
|
||||
case 6:
|
||||
reg[rdest] = reg[rsrc[0]] | reg[rsrc[1]];
|
||||
break;
|
||||
case 7:
|
||||
reg[rdest] = reg[rsrc[0]] & reg[rsrc[1]];
|
||||
break;
|
||||
default:
|
||||
cout << "ERROR: UNSUPPORTED R INST\n";
|
||||
exit(1);
|
||||
}
|
||||
}
|
||||
break;
|
||||
case L_INST:
|
||||
//std::cout << "L_INST\n";
|
||||
memAddr = ((reg[rsrc[0]] + immsrc) & 0xFFFFFFFC);
|
||||
shift_by = ((reg[rsrc[0]] + immsrc) & 0x00000003) * 8;
|
||||
data_read = c.core->mem.read(memAddr, c.supervisorMode);
|
||||
// //std::cout <<std::hex<< "EXECUTE: " << reg[rsrc[0]] << " + " << immsrc << " = " << memAddr << " -> data_read: " << data_read << "\n";
|
||||
#ifdef EMU_INSTRUMENTATION
|
||||
Harp::OSDomain::osDomain->
|
||||
do_mem(0, memAddr, c.core->mem.virtToPhys(memAddr), 8, true);
|
||||
#endif
|
||||
switch (func3)
|
||||
{
|
||||
|
||||
case 0:
|
||||
// LB
|
||||
reg[rdest] = signExt((data_read >> shift_by) & 0xFF, 8, 0xFF);
|
||||
break;
|
||||
case 1:
|
||||
// LH
|
||||
// //std::cout << "shifting by: " << shift_by << " final data: " << ((data_read >> shift_by) & 0xFFFF, 16, 0xFFFF) << "\n";
|
||||
reg[rdest] = signExt((data_read >> shift_by) & 0xFFFF, 16, 0xFFFF);
|
||||
break;
|
||||
case 2:
|
||||
reg[rdest] = int(data_read & 0xFFFFFFFF);
|
||||
break;
|
||||
case 4:
|
||||
// LBU
|
||||
reg[rdest] = unsigned((data_read >> shift_by) & 0xFF);
|
||||
break;
|
||||
case 5:
|
||||
reg[rdest] = unsigned((data_read >> shift_by) & 0xFFFF);
|
||||
break;
|
||||
default:
|
||||
cout << "ERROR: UNSUPPORTED L INST\n";
|
||||
exit(1);
|
||||
c.memAccesses.push_back(Warp::MemAccess(false, memAddr));
|
||||
}
|
||||
break;
|
||||
case I_INST:
|
||||
//std::cout << "I_INST\n";
|
||||
switch (func3)
|
||||
{
|
||||
|
||||
case 0:
|
||||
// ADDI
|
||||
reg[rdest] = reg[rsrc[0]] + immsrc;
|
||||
reg[rdest].trunc(wordSz);
|
||||
break;
|
||||
case 2:
|
||||
// SLTI
|
||||
if ( int(reg[rsrc[0]]) < int(immsrc))
|
||||
{
|
||||
reg[rdest] = 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
reg[rdest] = 0;
|
||||
}
|
||||
break;
|
||||
case 3:
|
||||
// SLTIU
|
||||
op1 = (unsigned) reg[rsrc[0]];
|
||||
if ( unsigned(reg[rsrc[0]]) < unsigned(immsrc))
|
||||
{
|
||||
reg[rdest] = 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
reg[rdest] = 0;
|
||||
}
|
||||
break;
|
||||
case 4:
|
||||
// XORI
|
||||
reg[rdest] = reg[rsrc[0]] ^ immsrc;
|
||||
break;
|
||||
case 6:
|
||||
// ORI;
|
||||
reg[rdest] = reg[rsrc[0]] | immsrc;
|
||||
break;
|
||||
case 7:
|
||||
// ANDI
|
||||
reg[rdest] = reg[rsrc[0]] & immsrc;
|
||||
break;
|
||||
case 1:
|
||||
// SLLI
|
||||
reg[rdest] = reg[rsrc[0]] << immsrc;
|
||||
reg[rdest].trunc(wordSz);
|
||||
break;
|
||||
case 5:
|
||||
if ((func7 == 0))
|
||||
{
|
||||
// SRLI
|
||||
// //std::cout << "WTF\n";
|
||||
bool isNeg = ((0x80000000 & reg[rsrc[0]])) > 0;
|
||||
Word result = Word_u(reg[rsrc[0]]) >> Word_u(immsrc);
|
||||
// if (isNeg)
|
||||
// {
|
||||
// Word mask = 0x80000000;
|
||||
// for (int i = 32; i < Word_u(immsrc); i++)
|
||||
// {
|
||||
// result |= mask;
|
||||
// mask = mask >> 1;
|
||||
// }
|
||||
// }
|
||||
|
||||
reg[rdest] = result;
|
||||
|
||||
reg[rdest].trunc(wordSz);
|
||||
}
|
||||
else
|
||||
{
|
||||
// SRAI
|
||||
// //std::cout << "WOHOOOOO\n";
|
||||
op1 = reg[rsrc[0]];
|
||||
op2 = immsrc;
|
||||
reg[rdest] = op1 >> op2;
|
||||
reg[rdest].trunc(wordSz);
|
||||
}
|
||||
break;
|
||||
default:
|
||||
cout << "ERROR: UNSUPPORTED L INST\n";
|
||||
exit(1);
|
||||
}
|
||||
break;
|
||||
case S_INST:
|
||||
//std::cout << "S_INST\n";
|
||||
++c.stores;
|
||||
memAddr = reg[rsrc[0]] + immsrc;
|
||||
// //std::cout << "STORE MEM ADDRESS: " << std::hex << reg[rsrc[0]] << " + " << immsrc << "\n";
|
||||
// //std::cout << "FUNC3: " << func3 << "\n";
|
||||
if (memAddr == 0x00010000)
|
||||
{
|
||||
std::cout << (char) reg[rsrc[1]];
|
||||
break;
|
||||
}
|
||||
switch (func3)
|
||||
{
|
||||
case 0:
|
||||
// //std::cout << "SB\n";
|
||||
c.core->mem.write(memAddr, reg[rsrc[1]] & 0x000000FF, c.supervisorMode, 1);
|
||||
break;
|
||||
case 1:
|
||||
// //std::cout << "SH\n";
|
||||
c.core->mem.write(memAddr, reg[rsrc[1]], c.supervisorMode, 2);
|
||||
break;
|
||||
case 2:
|
||||
// //std::cout << std::hex << "SW: about to write: " << reg[rsrc[1]] << " to " << memAddr << "\n";
|
||||
c.core->mem.write(memAddr, reg[rsrc[1]], c.supervisorMode, 4);
|
||||
break;
|
||||
default:
|
||||
cout << "ERROR: UNSUPPORTED S INST\n";
|
||||
exit(1);
|
||||
}
|
||||
c.memAccesses.push_back(Warp::MemAccess(true, memAddr));
|
||||
#ifdef EMU_INSTRUMENTATION
|
||||
Harp::OSDomain::osDomain->
|
||||
do_mem(0, memAddr, c.core->mem.virtToPhys(memAddr), 8, true);
|
||||
#endif
|
||||
break;
|
||||
case B_INST:
|
||||
//std::cout << "B_INST\n";
|
||||
switch (func3)
|
||||
{
|
||||
case 0:
|
||||
// BEQ
|
||||
if (int(reg[rsrc[0]]) == int(reg[rsrc[1]]))
|
||||
{
|
||||
if (!pcSet) nextPc = (c.pc - 4) + immsrc;
|
||||
pcSet = true;
|
||||
}
|
||||
break;
|
||||
case 1:
|
||||
// BNE
|
||||
if (int(reg[rsrc[0]]) != int(reg[rsrc[1]]))
|
||||
{
|
||||
if (!pcSet) nextPc = (c.pc - 4) + immsrc;
|
||||
pcSet = true;
|
||||
}
|
||||
break;
|
||||
case 4:
|
||||
// BLT
|
||||
if (int(reg[rsrc[0]]) < int(reg[rsrc[1]]))
|
||||
{
|
||||
if (!pcSet) nextPc = (c.pc - 4) + immsrc;
|
||||
pcSet = true;
|
||||
}
|
||||
break;
|
||||
case 5:
|
||||
// BGE
|
||||
if (int(reg[rsrc[0]]) >= int(reg[rsrc[1]]))
|
||||
{
|
||||
if (!pcSet) nextPc = (c.pc - 4) + immsrc;
|
||||
pcSet = true;
|
||||
}
|
||||
break;
|
||||
case 6:
|
||||
// BLTU
|
||||
if (Word_u(reg[rsrc[0]]) < Word_u(reg[rsrc[1]]))
|
||||
{
|
||||
if (!pcSet) nextPc = (c.pc - 4) + immsrc;
|
||||
pcSet = true;
|
||||
}
|
||||
break;
|
||||
case 7:
|
||||
// BGEU
|
||||
if (Word_u(reg[rsrc[0]]) >= Word_u(reg[rsrc[1]]))
|
||||
{
|
||||
if (!pcSet) nextPc = (c.pc - 4) + immsrc;
|
||||
pcSet = true;
|
||||
}
|
||||
break;
|
||||
}
|
||||
break;
|
||||
case LUI_INST:
|
||||
//std::cout << "LUI_INST\n";
|
||||
reg[rdest] = (immsrc << 12) & 0xfffff000;
|
||||
break;
|
||||
case AUIPC_INST:
|
||||
//std::cout << "AUIPC_INST\n";
|
||||
reg[rdest] = ((immsrc << 12) & 0xfffff000) + (c.pc - 4);
|
||||
break;
|
||||
case JAL_INST:
|
||||
//std::cout << "JAL_INST\n";
|
||||
if (!pcSet) nextPc = (c.pc - 4) + immsrc;
|
||||
if (!pcSet) //std::cout << "JAL... SETTING PC: " << nextPc << "\n";
|
||||
if (rdest != 0)
|
||||
{
|
||||
reg[rdest] = c.pc;
|
||||
}
|
||||
pcSet = true;
|
||||
break;
|
||||
case JALR_INST:
|
||||
//std::cout << "JALR_INST\n";
|
||||
if (!pcSet) nextPc = reg[rsrc[0]] + immsrc;
|
||||
if (!pcSet) //std::cout << "JALR... SETTING PC: " << nextPc << "\n";
|
||||
if (rdest != 0)
|
||||
{
|
||||
reg[rdest] = c.pc;
|
||||
}
|
||||
pcSet = true;
|
||||
break;
|
||||
case SYS_INST:
|
||||
//std::cout << "SYS_INST\n";
|
||||
temp = reg[rsrc[0]];
|
||||
switch (func3)
|
||||
{
|
||||
case 1:
|
||||
// printf("Case 1\n");
|
||||
if (rdest != 0)
|
||||
{
|
||||
reg[rdest] = c.csr[immsrc & 0x00000FFF];
|
||||
}
|
||||
c.csr[immsrc & 0x00000FFF] = temp;
|
||||
|
||||
break;
|
||||
case 2:
|
||||
// printf("Case 2\n");
|
||||
if (rdest != 0)
|
||||
{
|
||||
// printf("Reading from CSR: %d = %d\n", (immsrc & 0x00000FFF), c.csr[immsrc & 0x00000FFF]);
|
||||
reg[rdest] = c.csr[immsrc & 0x00000FFF];
|
||||
}
|
||||
// printf("Writing to CSR --> %d = %d\n", immsrc, (temp | c.csr[immsrc & 0x00000FFF]));
|
||||
c.csr[immsrc & 0x00000FFF] = temp | c.csr[immsrc & 0x00000FFF];
|
||||
|
||||
break;
|
||||
case 3:
|
||||
// printf("Case 3\n");
|
||||
if (rdest != 0)
|
||||
{
|
||||
reg[rdest] = c.csr[immsrc & 0x00000FFF];
|
||||
}
|
||||
c.csr[immsrc & 0x00000FFF] = temp & (~c.csr[immsrc & 0x00000FFF]);
|
||||
|
||||
break;
|
||||
case 5:
|
||||
// printf("Case 5\n");
|
||||
if (rdest != 0)
|
||||
{
|
||||
reg[rdest] = c.csr[immsrc & 0x00000FFF];
|
||||
}
|
||||
c.csr[immsrc & 0x00000FFF] = rsrc[0];
|
||||
|
||||
break;
|
||||
case 6:
|
||||
// printf("Case 6\n");
|
||||
if (rdest != 0)
|
||||
{
|
||||
reg[rdest] = c.csr[immsrc & 0x00000FFF];
|
||||
}
|
||||
c.csr[immsrc & 0x00000FFF] = rsrc[0] | c.csr[immsrc & 0x00000FFF];
|
||||
|
||||
break;
|
||||
case 7:
|
||||
// printf("Case 7\n");
|
||||
if (rdest != 0)
|
||||
{
|
||||
reg[rdest] = c.csr[immsrc & 0x00000FFF];
|
||||
}
|
||||
c.csr[immsrc & 0x00000FFF] = rsrc[0] & (~c.csr[immsrc & 0x00000FFF]);
|
||||
|
||||
break;
|
||||
case 0:
|
||||
if (immsrc < 2)
|
||||
{
|
||||
//std::cout << "INTERRUPT ECALL/EBREAK\n";
|
||||
nextActiveThreads = 0;
|
||||
c.spawned = false;
|
||||
// c.interrupt(0);
|
||||
}
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
break;
|
||||
case TRAP:
|
||||
//std::cout << "INTERRUPT TRAP\n";
|
||||
nextActiveThreads = 0;
|
||||
c.interrupt(0);
|
||||
break;
|
||||
case FENCE:
|
||||
//std::cout << "FENCE_INST\n";
|
||||
break;
|
||||
case PJ_INST:
|
||||
// pred jump reg
|
||||
//std::cout << "pred jump... src: " << rsrc[0] << std::hex << " val: " << reg[rsrc[0]] << " dest: " << reg[rsrc[1]] << "\n";
|
||||
if (reg[rsrc[0]])
|
||||
{
|
||||
if (!pcSet) nextPc = reg[rsrc[1]];
|
||||
pcSet = true;
|
||||
}
|
||||
break;
|
||||
case GPGPU:
|
||||
//std::cout << "GPGPU\n";
|
||||
switch(func3)
|
||||
{
|
||||
case 0:
|
||||
// WSPAWN
|
||||
//std::cout << "WSPAWN\n";
|
||||
if (sjOnce)
|
||||
{
|
||||
sjOnce = false;
|
||||
D(0, "Spawning a new warp.");
|
||||
// //std::cout << "SIZE: " << c.core->w.size() << "\n";
|
||||
for (unsigned i = 0; i < c.core->w.size(); ++i)
|
||||
{
|
||||
// std::cout << "SPAWNING WARP\n";
|
||||
Warp &newWarp(c.core->w[i]);
|
||||
// //std::cout << "STARTING\n";
|
||||
if (newWarp.spawned == false) {
|
||||
// //std::cout << "ABOUT TO START\n";
|
||||
newWarp.pc = reg[rsrc[0]];
|
||||
newWarp.reg[0] = reg;
|
||||
newWarp.csr = c.csr;
|
||||
newWarp.activeThreads = 1;
|
||||
newWarp.supervisorMode = false;
|
||||
newWarp.spawned = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
break;
|
||||
case 2:
|
||||
{
|
||||
// SPLIT
|
||||
//std::cout << "SPLIT\n";
|
||||
if (sjOnce)
|
||||
{
|
||||
sjOnce = false;
|
||||
if (checkUnanimous(pred, c.reg, c.tmask)) {
|
||||
//std::cout << "Unanimous pred: " << pred << " val: " << reg[pred] << "\n";
|
||||
DomStackEntry e(c.tmask);
|
||||
e.uni = true;
|
||||
c.domStack.push(e);
|
||||
break;
|
||||
}
|
||||
DomStackEntry e(pred, c.reg, c.tmask, c.pc);
|
||||
c.domStack.push(c.tmask);
|
||||
c.domStack.push(e);
|
||||
for (unsigned i = 0; i < e.tmask.size(); ++i)
|
||||
{
|
||||
c.tmask[i] = !e.tmask[i] && c.tmask[i];
|
||||
}
|
||||
}
|
||||
}
|
||||
break;
|
||||
case 3:
|
||||
// JOIN
|
||||
//std::cout << "JOIN\n";
|
||||
if (sjOnce)
|
||||
{
|
||||
sjOnce = false;
|
||||
if (!c.domStack.empty() && c.domStack.top().uni) {
|
||||
D(2, "Uni branch at join");
|
||||
c.tmask = c.domStack.top().tmask;
|
||||
c.domStack.pop();
|
||||
break;
|
||||
}
|
||||
if (!c.domStack.top().fallThrough) {
|
||||
if (!pcSet) nextPc = c.domStack.top().pc;
|
||||
pcSet = true;
|
||||
}
|
||||
c.tmask = c.domStack.top().tmask;
|
||||
c.domStack.pop();
|
||||
}
|
||||
break;
|
||||
case 4:
|
||||
// JMPRT
|
||||
//std::cout << "JMPRT\n";
|
||||
nextActiveThreads = 1;
|
||||
if (!pcSet) nextPc = reg[rsrc[0]];
|
||||
pcSet = true;
|
||||
break;
|
||||
case 5:
|
||||
// CLONE
|
||||
//std::cout << "CLONE\n";
|
||||
// //std::cout << "CLONING REG: " << rsrc[0] << " lane: " << reg[rsrc[0]] << "\n";
|
||||
c.reg[reg[rsrc[0]]] = reg;
|
||||
break;
|
||||
case 6:
|
||||
// JALRS
|
||||
//std::cout << "JALRS\n";
|
||||
nextActiveThreads = reg[rsrc[1]];
|
||||
reg[rdest] = c.pc;
|
||||
if (!pcSet) nextPc = reg[rsrc[0]];
|
||||
pcSet = true;
|
||||
// //std::cout << "ACTIVE_THREDS: " << rsrc[1] << " val: " << reg[rsrc[1]] << "\n";
|
||||
// //std::cout << "nextPC: " << rsrc[0] << " val: " << std::hex << reg[rsrc[0]] << "\n";
|
||||
break;
|
||||
default:
|
||||
cout << "ERROR: UNSUPPORTED GPGPU INSTRUCTION " << *this << "\n";
|
||||
}
|
||||
break;
|
||||
default:
|
||||
cout << "pc: " << hex << (c.pc) << "\n";
|
||||
cout << "aERROR: Unsupported instruction: " << *this << "\n" << flush;
|
||||
exit(1);
|
||||
}
|
||||
}
|
||||
|
||||
D(3, "End instruction execute.");
|
||||
|
||||
c.activeThreads = nextActiveThreads;
|
||||
|
||||
// if (nextActiveThreads != 0)
|
||||
// {
|
||||
// for (int i = 7; i >= c.activeThreads; i--)
|
||||
// {
|
||||
// c.tmask[i] = c.tmask[i] && false;
|
||||
// }
|
||||
// }
|
||||
|
||||
|
||||
|
||||
// //std::cout << "new thread mask: ";
|
||||
// for (int i = 0; i < c.tmask.size(); ++i) //std::cout << " " << c.tmask[i];
|
||||
// //std::cout << "\n";
|
||||
|
||||
// This way, if pc was set by a side effect (such as interrupt), it will
|
||||
// retain its new value.
|
||||
if (pcSet) c.pc = nextPc;
|
||||
|
||||
if (nextActiveThreads > c.reg.size()) {
|
||||
cerr << "Error: attempt to spawn " << nextActiveThreads << " threads. "
|
||||
<< c.reg.size() << " available.\n";
|
||||
abort();
|
||||
}
|
||||
}
|
||||
BIN
emulator/libharplib.a
Normal file
BIN
emulator/libharplib.a
Normal file
Binary file not shown.
BIN
emulator/libharplib.so
Executable file
BIN
emulator/libharplib.so
Executable file
Binary file not shown.
284
emulator/mem.cpp
Normal file
284
emulator/mem.cpp
Normal file
@@ -0,0 +1,284 @@
|
||||
/*******************************************************************************
|
||||
HARPtools by Chad D. Kersey, Summer 2011
|
||||
*******************************************************************************/
|
||||
#include <fstream>
|
||||
#include <iostream>
|
||||
#include <iomanip>
|
||||
#include <string>
|
||||
#include <vector>
|
||||
#include <stdlib.h>
|
||||
#include <pthread.h>
|
||||
|
||||
#include "include/debug.h"
|
||||
#include "include/types.h"
|
||||
#include "include/util.h"
|
||||
#include "include/mem.h"
|
||||
#include "include/core.h"
|
||||
|
||||
using namespace std;
|
||||
using namespace Harp;
|
||||
|
||||
RamMemDevice::RamMemDevice(const char *filename, Size wordSize) :
|
||||
wordSize(wordSize), contents()
|
||||
{
|
||||
ifstream input(filename);
|
||||
|
||||
if (!input) {
|
||||
cout << "Error reading file \"" << filename << "\" into RamMemDevice.\n";
|
||||
exit(1);
|
||||
}
|
||||
|
||||
do { contents.push_back(input.get()); } while (input);
|
||||
|
||||
while (contents.size() % wordSize) contents.push_back(0x00);
|
||||
}
|
||||
|
||||
RamMemDevice::RamMemDevice(Size size, Size wordSize) :
|
||||
contents(size), wordSize(wordSize) {}
|
||||
|
||||
void RomMemDevice::write(Addr, Word) {
|
||||
cout << "Attempt to write to ROM.\n";
|
||||
exit(1);
|
||||
}
|
||||
|
||||
Word RamMemDevice::read(Addr addr) {
|
||||
D(2, "RAM read, addr=0x" << hex << addr);
|
||||
Word w = readWord(contents, addr, wordSize - addr%wordSize);
|
||||
return w;
|
||||
}
|
||||
|
||||
void RamMemDevice::write(Addr addr, Word w) {
|
||||
D(2, "RAM write, addr=0x" << hex << addr);
|
||||
writeWord(contents, addr, wordSize - addr%wordSize, w);
|
||||
}
|
||||
|
||||
MemDevice &MemoryUnit::ADecoder::doLookup(Addr a, Size &bit) {
|
||||
if (range == 0 || (a&((1ll<<bit)-1)) >= range) {
|
||||
ADecoder *p(((a>>bit)&1)?oneChild:zeroChild);
|
||||
if (p) { bit--; return p->doLookup(a, bit); }
|
||||
else {cout << "lookup of 0x" << hex << a << " failed.\n";
|
||||
throw BadAddress();}
|
||||
} else {
|
||||
return *md;
|
||||
}
|
||||
}
|
||||
|
||||
void MemoryUnit::ADecoder::map(Addr a, MemDevice &m, Size r, Size bit)
|
||||
{
|
||||
if ((1llu << bit) <= r) {
|
||||
md = &m;
|
||||
range = m.size();
|
||||
} else {
|
||||
ADecoder *&child(((a>>bit)&1)?oneChild:zeroChild);
|
||||
if (!child) child = new ADecoder();
|
||||
child->map(a, m, r, bit-1);
|
||||
}
|
||||
}
|
||||
|
||||
Byte *MemoryUnit::ADecoder::getPtr(Addr a, Size sz, Size wordSize) {
|
||||
Size bit = wordSize - 1;
|
||||
MemDevice &m(doLookup(a, bit));
|
||||
a &= (2<<bit)-1;
|
||||
if (a + sz <= m.size()) return m.base() + a;
|
||||
return NULL;
|
||||
}
|
||||
|
||||
Word MemoryUnit::ADecoder::read(Addr a, bool sup, Size wordSize) {
|
||||
Size bit = wordSize - 1;
|
||||
MemDevice &m(doLookup(a, bit));
|
||||
a &= (2<<bit)-1;
|
||||
// std::cout << std::hex << "ADecoder::read(Addr " << a << ", sup " << sup << ", wordSize " << wordSize << " -> ";
|
||||
// std::cout << "Data: " << m.read(a) << "\n";
|
||||
return m.read(a);
|
||||
}
|
||||
|
||||
void MemoryUnit::ADecoder::write(Addr a, Word w, bool sup, Size wordSize) {
|
||||
Size bit = wordSize - 1;
|
||||
MemDevice &m(doLookup(a, bit));
|
||||
|
||||
RAM & r = (RAM &) m;
|
||||
// a &= (2<<bit)-1;
|
||||
// std::cout << std::hex << "ADecoder::write(Addr " << a << ", w " << w << ", sup " << sup << ", wordSize " << wordSize << "\n";
|
||||
Word before = m.read(a);
|
||||
Word new_word = w;
|
||||
|
||||
if (a == 0x8000012c)
|
||||
{
|
||||
printf("WRITING TO 0x8000012c -> %d\n", w);
|
||||
}
|
||||
|
||||
if (wordSize == 8)
|
||||
{
|
||||
r.writeByte(a, &w);
|
||||
}
|
||||
else if (wordSize == 16)
|
||||
{
|
||||
r.writeHalf(a, &w);
|
||||
}
|
||||
else
|
||||
{
|
||||
r.writeWord(a, &w);
|
||||
}
|
||||
// m.write(a, new_word);
|
||||
}
|
||||
|
||||
Byte *MemoryUnit::getPtr(Addr a, Size s) {
|
||||
return ad.getPtr(a, s, addrBytes*8);
|
||||
}
|
||||
|
||||
void MemoryUnit::attach(MemDevice &m, Addr base) {
|
||||
ad.map(base, m, m.size(), addrBytes*8 - 1);
|
||||
}
|
||||
|
||||
MemoryUnit::TLBEntry MemoryUnit::tlbLookup(Addr vAddr, Word flagMask) {
|
||||
map<Addr, MemoryUnit::TLBEntry>::iterator i;
|
||||
if ((i = tlb.find(vAddr/pageSize)) != tlb.end()) {
|
||||
TLBEntry &t = i->second;
|
||||
if (t.flags & flagMask) return t;
|
||||
else {
|
||||
D(2, "Page fault on addr 0x" << hex << vAddr << "(bad flags)");
|
||||
throw PageFault(vAddr, false);
|
||||
}
|
||||
} else {
|
||||
D(2, "Page fault on addr 0x" << hex << vAddr << "(not in TLB)");
|
||||
throw PageFault(vAddr, true);
|
||||
}
|
||||
}
|
||||
|
||||
#ifdef EMU_INSTRUMENTATION
|
||||
Addr MemoryUnit::virtToPhys(Addr vAddr) {
|
||||
TLBEntry t = tlbLookup(vAddr, 077);
|
||||
return t.pfn*pageSize + vAddr%pageSize;
|
||||
}
|
||||
#endif
|
||||
|
||||
Word MemoryUnit::read(Addr vAddr, bool sup) {
|
||||
Addr pAddr;
|
||||
if (disableVm) {
|
||||
pAddr = vAddr;
|
||||
} else {
|
||||
Word flagMask = sup?8:1;
|
||||
TLBEntry t = tlbLookup(vAddr, flagMask);
|
||||
pAddr = t.pfn*pageSize + vAddr%pageSize;
|
||||
}
|
||||
// std::cout << "MU::write: About to read: " << std::hex << pAddr << " = " << (ad.read(pAddr, sup, 8*addrBytes)) << " with " << std::dec << (8*addrBytes) << "\n";
|
||||
return ad.read(pAddr, sup, 8*addrBytes);
|
||||
}
|
||||
|
||||
Word MemoryUnit::fetch(Addr vAddr, bool sup) {
|
||||
Addr pAddr;
|
||||
|
||||
if (disableVm) {
|
||||
pAddr = vAddr;
|
||||
} else {
|
||||
Word flagMask = sup?32:4;
|
||||
TLBEntry t = tlbLookup(vAddr, flagMask);
|
||||
pAddr = t.pfn*pageSize + vAddr%pageSize;
|
||||
}
|
||||
|
||||
Word instruction = ad.read(pAddr, sup, 8*addrBytes);
|
||||
|
||||
return instruction;
|
||||
}
|
||||
|
||||
void MemoryUnit::write(Addr vAddr, Word w, bool sup, Size bytes) {
|
||||
Addr pAddr;
|
||||
|
||||
if (disableVm) {
|
||||
pAddr = vAddr;
|
||||
} else {
|
||||
Word flagMask = sup?16:2;
|
||||
TLBEntry t = tlbLookup(vAddr, flagMask);
|
||||
pAddr = t.pfn*pageSize + vAddr%pageSize;
|
||||
}
|
||||
// std::cout << "MU::write: About to write: " << std::hex << pAddr << " = " << w << " with " << std::dec << 8*bytes << "\n";
|
||||
ad.write(pAddr, w, sup, 8*bytes);
|
||||
// std::cout << std::hex << "reading same address: " << (this->read(vAddr, sup)) << "\n";
|
||||
}
|
||||
|
||||
void MemoryUnit::tlbAdd(Addr virt, Addr phys, Word flags) {
|
||||
D(1, "tlbAdd(0x" << hex << virt << ", 0x" << phys << ", 0x" << flags << ')');
|
||||
tlb[virt/pageSize] = TLBEntry(phys/pageSize, flags);
|
||||
}
|
||||
|
||||
void MemoryUnit::tlbRm(Addr va) {
|
||||
if (tlb.find(va/pageSize) != tlb.end()) tlb.erase(tlb.find(va/pageSize));
|
||||
}
|
||||
|
||||
void *Harp::consoleInputThread(void* arg_vp) {
|
||||
ConsoleMemDevice *arg = (ConsoleMemDevice *)arg_vp;
|
||||
char c;
|
||||
while (cin) {
|
||||
c = cin.get();
|
||||
pthread_mutex_lock(&arg->cBufLock);
|
||||
arg->cBuf.push(c);
|
||||
pthread_mutex_unlock(&arg->cBufLock);
|
||||
}
|
||||
cout << "Console input ended. Exiting.\n";
|
||||
exit(4);
|
||||
}
|
||||
|
||||
ConsoleMemDevice::ConsoleMemDevice(Size wS, std::ostream &o, Core &core,
|
||||
bool batch) :
|
||||
wordSize(wS), output(o), core(core), cBuf()
|
||||
{
|
||||
// Create a console input thread if we are running in interactive mode.
|
||||
if (!batch) {
|
||||
pthread_t *thread = new pthread_t;
|
||||
pthread_create(thread, NULL, consoleInputThread, (void*)this);
|
||||
}
|
||||
pthread_mutex_init(&cBufLock, NULL);
|
||||
}
|
||||
|
||||
void ConsoleMemDevice::poll() {
|
||||
pthread_mutex_lock(&cBufLock);
|
||||
if (!cBuf.empty()) core.interrupt(8);
|
||||
pthread_mutex_unlock(&cBufLock);
|
||||
}
|
||||
|
||||
Word DiskControllerMemDevice::read(Addr a) {
|
||||
switch (a/8) {
|
||||
case 0: return curDisk;
|
||||
case 1: return curBlock;
|
||||
case 2: return disks[curDisk].blocks * blockSize;
|
||||
case 3: return physAddr;
|
||||
case 4: return command;
|
||||
case 5: return status;
|
||||
default:
|
||||
cout << "Attempt to read invalid disk controller register.\n";
|
||||
exit(1);
|
||||
}
|
||||
}
|
||||
|
||||
void DiskControllerMemDevice::write(Addr a, Word w) {
|
||||
switch (a/8) {
|
||||
case 0: if (w <= disks.size()) {
|
||||
curDisk = w;
|
||||
status = OK;
|
||||
} else {
|
||||
status = INVALID_DISK;
|
||||
}
|
||||
break;
|
||||
case 1: if (w < disks[curDisk].blocks) {
|
||||
curBlock = w;
|
||||
} else {
|
||||
status = INVALID_BLOCK;
|
||||
}
|
||||
break;
|
||||
case 2: nBlocks = w >= disks[curDisk].blocks?disks[curDisk].blocks - 1 : w;
|
||||
status = OK;
|
||||
break;
|
||||
case 3: physAddr = w;
|
||||
status = OK;
|
||||
break;
|
||||
case 4: if (w == 0) {
|
||||
} else {
|
||||
}
|
||||
cout << "TODO: Implement disk read and write!\n";
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
57
emulator/qsim-harp.cpp
Normal file
57
emulator/qsim-harp.cpp
Normal file
@@ -0,0 +1,57 @@
|
||||
/*******************************************************************************
|
||||
HARPtools by Chad D. Kersey, Summer 2011
|
||||
*******************************************************************************/
|
||||
#include "include/qsim-harp.h"
|
||||
|
||||
#include <iostream>
|
||||
#include <string>
|
||||
|
||||
using namespace Harp;
|
||||
using namespace Qsim;
|
||||
using namespace std;
|
||||
|
||||
Harp::OSDomain* Harp::OSDomain::osDomain(NULL);
|
||||
|
||||
Harp::OSDomain::OSDomain(ArchDef &archref, string imgFile) :
|
||||
/* TODO: Move the mu to the Cpu. They're sharing a TLB now! */
|
||||
arch(archref), mu(4096, arch.getWordSize()),
|
||||
ram(imgFile.c_str(), arch.getWordSize()),
|
||||
cpus(0)
|
||||
{
|
||||
if (osDomain != NULL) {
|
||||
cout << "Error: OSDomain is a singleton.";
|
||||
exit(1);
|
||||
}
|
||||
osDomain = this;
|
||||
|
||||
std::cout << "Constructing an OSDomain with archref, " << archref.getNPRegs() << '\n';
|
||||
|
||||
std::cout << "Pushing back a Cpu in OSDomain constructor.\n";
|
||||
cpus.push_back(Cpu(*this));
|
||||
|
||||
console = new ConsoleMemDevice(arch.getWordSize(), cout, *cpus[0].core);
|
||||
|
||||
mu.attach(ram, 0);
|
||||
mu.attach(*console, 1ll<<(arch.getWordSize()*8 - 1));
|
||||
}
|
||||
|
||||
void Harp::OSDomain::connect_console(std::ostream &s) {
|
||||
/* For now this does nothing. ConsoleMemDevice is not redirectable. */
|
||||
std::cout << "in connect_console\n";
|
||||
}
|
||||
|
||||
Harp::OSDomain::Cpu::Cpu(Harp::OSDomain &o) :
|
||||
/* TODO: This should support non-word decoders! */
|
||||
osd(&o), dec(new WordDecoder(osd->arch)),
|
||||
core(new Core(osd->arch, *dec, osd->mu))
|
||||
{
|
||||
std::cout << "Constructing a new Cpu.\n";
|
||||
}
|
||||
|
||||
uint64_t Harp::OSDomain::Cpu::run(uint64_t n) {
|
||||
uint64_t i;
|
||||
std::cout << "pc=0x" << std::hex << core->pc << ", " << std::dec << sizeof(*core) << '\n';
|
||||
//osd->console->poll();
|
||||
for (i = 0; i < n; ++i) core->step();
|
||||
return i;
|
||||
}
|
||||
1
emulator/results.txt
Normal file
1
emulator/results.txt
Normal file
@@ -0,0 +1 @@
|
||||
start
|
||||
50
emulator/riscv_tests/C.ADD.elf.hex
Normal file
50
emulator/riscv_tests/C.ADD.elf.hex
Normal file
@@ -0,0 +1,50 @@
|
||||
:0200000480007A
|
||||
:1000000001000100010001000100010001000100E8
|
||||
:1000100001000100010001000100010001000100D8
|
||||
:1000200001000100010001000100010001000100C8
|
||||
:1000300001000100010001000100010001000100B8
|
||||
:1000400001000100010001000100010001000100A8
|
||||
:100050000100010001000100010001000100010098
|
||||
:100060000100010001000100010001000100010088
|
||||
:100070000100010001000100010001000100010078
|
||||
:100080000100010001000100010001000100010068
|
||||
:100090000100010001000100010001000100010058
|
||||
:1000A0000100010001000100010001000100010048
|
||||
:1000B0000100010001000100010001000100010038
|
||||
:1000C0000100010001000100010001000100010028
|
||||
:1000D0000100010001000100010001000100010018
|
||||
:1000E00001000100010001000100010001001711E1
|
||||
:1000F0000000130121F10142814192910EC081441F
|
||||
:100100000544269422C201469305F0FFB2952EC401
|
||||
:100110000147B78600009386F6FFBA9636C60148B7
|
||||
:10012000A167C2973EC8171100001301E1EE05490F
|
||||
:100130008148CA9846C0054A8549D2994EC2054BA6
|
||||
:10014000930AF0FFDA9A56C4054CB78B0000938BE4
|
||||
:10015000FBFFE29B5EC6054DA16CEA9C66C81711C9
|
||||
:1001600000001301A1EC130EF0FF814DF29D6EC053
|
||||
:10017000130FF0FF854EFA9E76C29301F0FF930FA6
|
||||
:10018000F0FF8E9F7EC41304F0FF3782000013023D
|
||||
:10019000F2FF229212C69305F0FFA164AE9426C826
|
||||
:1001A000171100001301C1E9B78600009386F6FF1E
|
||||
:1001B0000146369632C0B78700009387F7FF0547A0
|
||||
:1001C0003E973AC2B78800009388F8FF1308F0FF03
|
||||
:1001D000469842C4B78900009389F9FF3789000027
|
||||
:1001E0001309F9FF4E994AC6B78A0000938AFAFFAD
|
||||
:1001F000216A569A52C8171100001301A1E5A16B9C
|
||||
:10020000014B5E9B5AC0A16C054C669C62C2A16DFD
|
||||
:10021000130DF0FF6E9D6AC4A16E378E0000130EA1
|
||||
:10022000FEFF769E72C6A16F216F7E9F7AC817155A
|
||||
:100230000000130525DD971500009385A5E337061B
|
||||
:1002400010F01306C6F2630CB500544514C21445F1
|
||||
:1002500014C2544114C2144114C24105EDB737050C
|
||||
:1002600010F0130505F22320050000000000000037
|
||||
:0202700000008C
|
||||
:10100000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0
|
||||
:10101000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0
|
||||
:10102000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD0
|
||||
:10103000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC0
|
||||
:10104000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB0
|
||||
:10105000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA0
|
||||
:10106000FFFFFFFF00000000000000000000000084
|
||||
:040000058000000077
|
||||
:00000001FF
|
||||
45
emulator/riscv_tests/C.ADDI.elf.hex
Normal file
45
emulator/riscv_tests/C.ADDI.elf.hex
Normal file
@@ -0,0 +1,45 @@
|
||||
:0200000480007A
|
||||
:1000000001000100010001000100010001000100E8
|
||||
:1000100001000100010001000100010001000100D8
|
||||
:1000200001000100010001000100010001000100C8
|
||||
:1000300001000100010001000100010001000100B8
|
||||
:1000400001000100010001000100010001000100A8
|
||||
:100050000100010001000100010001000100010098
|
||||
:100060000100010001000100010001000100010088
|
||||
:100070000100010001000100010001000100010078
|
||||
:100080000100010001000100010001000100010068
|
||||
:100090000100010001000100010001000100010058
|
||||
:1000A0000100010001000100010001000100010048
|
||||
:1000B0000100010001000100010001000100010038
|
||||
:1000C0000100010001000100010001000100010028
|
||||
:1000D0000100010001000100010001000100010018
|
||||
:1000E00001000100010001000100010001001711E1
|
||||
:1000F0000000130121F1814185010EC00142090276
|
||||
:1001000012C201443D0422C48144C10426C6814573
|
||||
:10011000FD052EC817110000130101F00546050664
|
||||
:1001200032C08546890636C205473D073AC4854731
|
||||
:10013000C1073EC605487D0842C8171100001301DB
|
||||
:10014000E1EE9308F0FF850846C01309F0FF0909A6
|
||||
:100150004AC29309F0FFBD094EC4130AF0FF410AD9
|
||||
:1001600052C6930AF0FFFD0A56C81711000013018A
|
||||
:1001700021ED370B0800130BFBFF050B5AC0B70B23
|
||||
:100180000800938BFBFF890B5EC2370C0800130C31
|
||||
:10019000FCFF3D0C62C4B70C0800938CFCFFC10C43
|
||||
:1001A00066C6370D0800130DFDFF7D0D6AC81711D7
|
||||
:1001B0000000130121EAB70D0800850D6EC0370E4F
|
||||
:1001C0000800090E72C2B70E0800BD0E76C4370FC4
|
||||
:1001D0000800410F7AC6B70F0800FD0F7EC817153B
|
||||
:1001E0000000130525E2971500009385A5E8370662
|
||||
:1001F00010F01306C6F2630CB500544514C2144542
|
||||
:1002000014C2544114C2144114C24105EDB737055C
|
||||
:1002100010F0130505F22320050000000000000087
|
||||
:020220000000DC
|
||||
:10100000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0
|
||||
:10101000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0
|
||||
:10102000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD0
|
||||
:10103000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC0
|
||||
:10104000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB0
|
||||
:10105000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA0
|
||||
:10106000FFFFFFFF00000000000000000000000084
|
||||
:040000058000000077
|
||||
:00000001FF
|
||||
29
emulator/riscv_tests/C.ADDI16SP.elf.hex
Normal file
29
emulator/riscv_tests/C.ADDI16SP.elf.hex
Normal file
@@ -0,0 +1,29 @@
|
||||
:0200000480007A
|
||||
:1000000001000100010001000100010001000100E8
|
||||
:1000100001000100010001000100010001000100D8
|
||||
:1000200001000100010001000100010001000100C8
|
||||
:1000300001000100010001000100010001000100B8
|
||||
:1000400001000100010001000100010001000100A8
|
||||
:100050000100010001000100010001000100010098
|
||||
:100060000100010001000100010001000100010088
|
||||
:100070000100010001000100010001000100010078
|
||||
:100080000100010001000100010001000100010068
|
||||
:100090000100010001000100010001000100010058
|
||||
:1000A0000100010001000100010001000100010048
|
||||
:1000B0000100010001000100010001000100010038
|
||||
:1000C0000100010001000100010001000100010028
|
||||
:1000D0000100010001000100010001000100010018
|
||||
:1000E0000100010001000100010001000100971062
|
||||
:1000F0000000938020F1410123A020009710000010
|
||||
:10010000938080F0056123A0200097100000938069
|
||||
:10011000E0EF216123A0200097100000938040EFC2
|
||||
:100120007D6123A02000971000009380A0EE017154
|
||||
:1001300023A02000171500001305C5EC971500003B
|
||||
:10014000938545EE370610F01306C6F2630CB50032
|
||||
:10015000544514C2144514C2544114C2144114C26B
|
||||
:100160004105EDB7370510F0130505F22320050012
|
||||
:0201700000008D
|
||||
:10100000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0
|
||||
:10101000FFFFFFFF000000000000000000000000D4
|
||||
:040000058000000077
|
||||
:00000001FF
|
||||
29
emulator/riscv_tests/C.ADDI4SPN.elf.hex
Normal file
29
emulator/riscv_tests/C.ADDI4SPN.elf.hex
Normal file
@@ -0,0 +1,29 @@
|
||||
:0200000480007A
|
||||
:1000000001000100010001000100010001000100E8
|
||||
:1000100001000100010001000100010001000100D8
|
||||
:1000200001000100010001000100010001000100C8
|
||||
:1000300001000100010001000100010001000100B8
|
||||
:1000400001000100010001000100010001000100A8
|
||||
:100050000100010001000100010001000100010098
|
||||
:100060000100010001000100010001000100010088
|
||||
:100070000100010001000100010001000100010078
|
||||
:100080000100010001000100010001000100010068
|
||||
:100090000100010001000100010001000100010058
|
||||
:1000A0000100010001000100010001000100010048
|
||||
:1000B0000100010001000100010001000100010038
|
||||
:1000C0000100010001000100010001000100010028
|
||||
:1000D0000100010001000100010001000100010018
|
||||
:1000E0000100010001000100010001000100971062
|
||||
:1000F0000000938020F1500023A0C0009710000062
|
||||
:10010000938080F0340023A0D000971000009380EB
|
||||
:10011000E0EF780023A0E00097100000938040EF0C
|
||||
:100120001C0823A0F000971000009380A0EEE01FB1
|
||||
:1001300023A08000171500001305C5EC97150000DB
|
||||
:10014000938545EE370610F01306C6F2630CB50032
|
||||
:10015000544514C2144514C2544114C2144114C26B
|
||||
:100160004105EDB7370510F0130505F22320050012
|
||||
:0201700000008D
|
||||
:10100000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0
|
||||
:10101000FFFFFFFF000000000000000000000000D4
|
||||
:040000058000000077
|
||||
:00000001FF
|
||||
50
emulator/riscv_tests/C.AND.elf.hex
Normal file
50
emulator/riscv_tests/C.AND.elf.hex
Normal file
@@ -0,0 +1,50 @@
|
||||
:0200000480007A
|
||||
:1000000001000100010001000100010001000100E8
|
||||
:1000100001000100010001000100010001000100D8
|
||||
:1000200001000100010001000100010001000100C8
|
||||
:1000300001000100010001000100010001000100B8
|
||||
:1000400001000100010001000100010001000100A8
|
||||
:100050000100010001000100010001000100010098
|
||||
:100060000100010001000100010001000100010088
|
||||
:100070000100010001000100010001000100010078
|
||||
:100080000100010001000100010001000100010068
|
||||
:100090000100010001000100010001000100010058
|
||||
:1000A0000100010001000100010001000100010048
|
||||
:1000B0000100010001000100010001000100010038
|
||||
:1000C0000100010001000100010001000100010028
|
||||
:1000D0000100010001000100010001000100010018
|
||||
:1000E00001000100010001000100010001001711E1
|
||||
:1000F0000000130121F181458144ED8C26C0814629
|
||||
:100100000546758E32C281471307F0FF7D8F3AC4D2
|
||||
:100110008144378400001304F4FF658C22C6014635
|
||||
:10012000A165F18D2EC8171100001301E1EE0547FE
|
||||
:100130008146F98E36C005448547E18F3EC285452C
|
||||
:100140009304F0FFED8C26C4854637860000130625
|
||||
:10015000F6FF758E32C6854721677D8F3AC8171125
|
||||
:1001600000001301A1EC9304F0FF0144658C22C050
|
||||
:100170001306F0FF8545F18D2EC21307F0FF93069D
|
||||
:10018000F0FFF98E36C41304F0FFB78700009387A1
|
||||
:10019000F7FFE18F3EC69305F0FFA164ED8C26C802
|
||||
:1001A000171100001301C1E9B78600009386F6FF1E
|
||||
:1001B0000146758E32C0B78700009387F7FF054769
|
||||
:1001C0007D8F3AC2B78400009384F4FF1304F0FFDC
|
||||
:1001D000658C22C4378600001306F6FFB785000041
|
||||
:1001E0009385F5FFF18D2EC6378700001307F7FFC3
|
||||
:1001F000A166F98E36C8171100001301A1E521642C
|
||||
:100200008147E18F3EC0A1658544ED8C26C2A16681
|
||||
:100210001306F0FF758E32C4A167378700001307FD
|
||||
:10022000F7FF7D8F3AC6A1642164658C22C817153B
|
||||
:100230000000130525DD971500009385A5E337061B
|
||||
:1002400010F01306C6F2630CB500544514C21445F1
|
||||
:1002500014C2544114C2144114C24105EDB737050C
|
||||
:1002600010F0130505F22320050000000000000037
|
||||
:0202700000008C
|
||||
:10100000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0
|
||||
:10101000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0
|
||||
:10102000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD0
|
||||
:10103000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC0
|
||||
:10104000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB0
|
||||
:10105000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA0
|
||||
:10106000FFFFFFFF00000000000000000000000084
|
||||
:040000058000000077
|
||||
:00000001FF
|
||||
45
emulator/riscv_tests/C.ANDI.elf.hex
Normal file
45
emulator/riscv_tests/C.ANDI.elf.hex
Normal file
@@ -0,0 +1,45 @@
|
||||
:0200000480007A
|
||||
:1000000001000100010001000100010001000100E8
|
||||
:1000100001000100010001000100010001000100D8
|
||||
:1000200001000100010001000100010001000100C8
|
||||
:1000300001000100010001000100010001000100B8
|
||||
:1000400001000100010001000100010001000100A8
|
||||
:100050000100010001000100010001000100010098
|
||||
:100060000100010001000100010001000100010088
|
||||
:100070000100010001000100010001000100010078
|
||||
:100080000100010001000100010001000100010068
|
||||
:100090000100010001000100010001000100010058
|
||||
:1000A0000100010001000100010001000100010048
|
||||
:1000B0000100010001000100010001000100010038
|
||||
:1000C0000100010001000100010001000100010028
|
||||
:1000D0000100010001000100010001000100010018
|
||||
:1000E00001000100010001000100010001001711E1
|
||||
:1000F0000000130121F1814581892EC00146058A46
|
||||
:1001000032C28146C18A36C401477D8B3AC68147D7
|
||||
:10011000859B3EC817110000130101F005440188BA
|
||||
:1001200022C08544858826C28545C1892EC40546DE
|
||||
:100130007D8A32C68546859A36C81711000013019C
|
||||
:10014000E1EE1307F0FF018B3AC09307F0FF858BB8
|
||||
:100150003EC21304F0FF418822C49304F0FFFD88DF
|
||||
:1001600026C69305F0FF85992EC8171100001301CC
|
||||
:1001700021ED370608001306F6FF018A32C0B706E4
|
||||
:1001800008009386F6FF858A36C2370708001307F2
|
||||
:10019000F7FF418B3AC4B70708009387F7FFFD8B41
|
||||
:1001A0003EC6370408001304F4FF059822C817114F
|
||||
:1001B0000000130121EAB7040800818826C0B705B2
|
||||
:1001C000080085892EC237060800418A32C4B70666
|
||||
:1001D0000800FD8A36C637070800059B3AC8171580
|
||||
:1001E0000000130525E2971500009385A5E8370662
|
||||
:1001F00010F01306C6F2630CB500544514C2144542
|
||||
:1002000014C2544114C2144114C24105EDB737055C
|
||||
:1002100010F0130505F22320050000000000000087
|
||||
:020220000000DC
|
||||
:10100000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0
|
||||
:10101000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0
|
||||
:10102000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD0
|
||||
:10103000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC0
|
||||
:10104000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB0
|
||||
:10105000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA0
|
||||
:10106000FFFFFFFF00000000000000000000000084
|
||||
:040000058000000077
|
||||
:00000001FF
|
||||
33
emulator/riscv_tests/C.BEQZ.elf.hex
Normal file
33
emulator/riscv_tests/C.BEQZ.elf.hex
Normal file
@@ -0,0 +1,33 @@
|
||||
:0200000480007A
|
||||
:1000000001000100010001000100010001000100E8
|
||||
:1000100001000100010001000100010001000100D8
|
||||
:1000200001000100010001000100010001000100C8
|
||||
:1000300001000100010001000100010001000100B8
|
||||
:1000400001000100010001000100010001000100A8
|
||||
:100050000100010001000100010001000100010098
|
||||
:100060000100010001000100010001000100010088
|
||||
:100070000100010001000100010001000100010078
|
||||
:100080000100010001000100010001000100010068
|
||||
:100090000100010001000100010001000100010058
|
||||
:1000A0000100010001000100010001000100010048
|
||||
:1000B0000100010001000100010001000100010038
|
||||
:1000C0000100010001000100010001000100010028
|
||||
:1000D0000100010001000100010001000100010018
|
||||
:1000E00001000100010001000100010001001711E1
|
||||
:1000F0000000130121F181479D8F89C7B7270100B7
|
||||
:100100009387B73A3EC0171100001301E1EF054491
|
||||
:10011000018C09C4372401001304B43A22C017111A
|
||||
:1001200000001301A1EEFD54858C89C4B7240100A1
|
||||
:100130009384B43A26C017110000130161EDB7850E
|
||||
:1001400000009385F5FF8D8D89C5B7250100938546
|
||||
:10015000B53A2EC0171100001301C1EB2166118EB4
|
||||
:1001600009C6372601001306B63A32C0171500003B
|
||||
:10017000130545E9971500009385C5EA370610F089
|
||||
:100180001306C6F2630CB500544514C2144514C2DC
|
||||
:10019000544114C2144114C24105EDB7370510F0A3
|
||||
:1001A000130505F2232005000000000000000000F8
|
||||
:0201B00000004D
|
||||
:10100000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0
|
||||
:10101000FFFFFFFF000000000000000000000000D4
|
||||
:040000058000000077
|
||||
:00000001FF
|
||||
30
emulator/riscv_tests/C.BNEZ.elf.hex
Normal file
30
emulator/riscv_tests/C.BNEZ.elf.hex
Normal file
@@ -0,0 +1,30 @@
|
||||
:0200000480007A
|
||||
:1000000001000100010001000100010001000100E8
|
||||
:1000100001000100010001000100010001000100D8
|
||||
:1000200001000100010001000100010001000100C8
|
||||
:1000300001000100010001000100010001000100B8
|
||||
:1000400001000100010001000100010001000100A8
|
||||
:100050000100010001000100010001000100010098
|
||||
:100060000100010001000100010001000100010088
|
||||
:100070000100010001000100010001000100010078
|
||||
:100080000100010001000100010001000100010068
|
||||
:100090000100010001000100010001000100010058
|
||||
:1000A0000100010001000100010001000100010048
|
||||
:1000B0000100010001000100010001000100010038
|
||||
:1000C0000100010001000100010001000100010028
|
||||
:1000D0000100010001000100010001000100010018
|
||||
:1000E00001000100010001000100010001001711E1
|
||||
:1000F0000000130121F1814691E2814636C01711BB
|
||||
:100100000000130161F0054711E301473AC01711E0
|
||||
:1001100000001301A1EFFD5791E381473EC0171185
|
||||
:1001200000001301E1EE378400001304F4FF11E036
|
||||
:10013000014422C0171100001301C1EDA16491E038
|
||||
:10014000814426C0171500001305C5EB9715000064
|
||||
:10015000938545ED370610F01306C6F2630CB50023
|
||||
:10016000544514C2144514C2544114C2144114C25B
|
||||
:100170004105EDB7370510F0130505F22320050002
|
||||
:0201800000007D
|
||||
:10100000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0
|
||||
:10101000FFFFFFFF000000000000000000000000D4
|
||||
:040000058000000077
|
||||
:00000001FF
|
||||
32
emulator/riscv_tests/C.J.elf.hex
Normal file
32
emulator/riscv_tests/C.J.elf.hex
Normal file
@@ -0,0 +1,32 @@
|
||||
:0200000480007A
|
||||
:1000000001000100010001000100010001000100E8
|
||||
:1000100001000100010001000100010001000100D8
|
||||
:1000200001000100010001000100010001000100C8
|
||||
:1000300001000100010001000100010001000100B8
|
||||
:1000400001000100010001000100010001000100A8
|
||||
:100050000100010001000100010001000100010098
|
||||
:100060000100010001000100010001000100010088
|
||||
:100070000100010001000100010001000100010078
|
||||
:100080000100010001000100010001000100010068
|
||||
:100090000100010001000100010001000100010058
|
||||
:1000A0000100010001000100010001000100010048
|
||||
:1000B0000100010001000100010001000100010038
|
||||
:1000C0000100010001000100010001000100010028
|
||||
:1000D0000100010001000100010001000100010018
|
||||
:1000E00001000100010001000100010001001711E1
|
||||
:1000F0000000130121F1814529A0B7250100938556
|
||||
:10010000B53A2EC017110000130101F0054629A0D1
|
||||
:10011000372601001306B63A32C01711000013014A
|
||||
:10012000E1EEFD5629A0B72601009386B63A36C007
|
||||
:10013000171100001301C1ED378700001307F7FF07
|
||||
:1001400029A0372701001307B73A3AC0171100005A
|
||||
:10015000130141ECA16729A0B72701009387B73AA3
|
||||
:100160003EC0171500001305E5E9971500009385BB
|
||||
:1001700065EB370610F01306C6F2630CB500544564
|
||||
:1001800014C2144514C2544114C2144114C241058E
|
||||
:10019000EDB7370510F0130505F223200500000028
|
||||
:0201A00000005D
|
||||
:10100000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0
|
||||
:10101000FFFFFFFF000000000000000000000000D4
|
||||
:040000058000000077
|
||||
:00000001FF
|
||||
32
emulator/riscv_tests/C.JAL.elf.hex
Normal file
32
emulator/riscv_tests/C.JAL.elf.hex
Normal file
@@ -0,0 +1,32 @@
|
||||
:0200000480007A
|
||||
:1000000001000100010001000100010001000100E8
|
||||
:1000100001000100010001000100010001000100D8
|
||||
:1000200001000100010001000100010001000100C8
|
||||
:1000300001000100010001000100010001000100B8
|
||||
:1000400001000100010001000100010001000100A8
|
||||
:100050000100010001000100010001000100010098
|
||||
:100060000100010001000100010001000100010088
|
||||
:100070000100010001000100010001000100010078
|
||||
:100080000100010001000100010001000100010068
|
||||
:100090000100010001000100010001000100010058
|
||||
:1000A0000100010001000100010001000100010048
|
||||
:1000B0000100010001000100010001000100010038
|
||||
:1000C0000100010001000100010001000100010028
|
||||
:1000D0000100010001000100010001000100010018
|
||||
:1000E00001000100010001000100010001001711E1
|
||||
:1000F0000000130121F101442920372401001304D9
|
||||
:10010000B43A22C017110000130101F085442920E0
|
||||
:10011000B72401009384B43A26C0171100001301DC
|
||||
:10012000E1EEFD552920B72501009385B53A2EC093
|
||||
:10013000171100001301C1ED378600001306F6FF0A
|
||||
:100140002920372601001306B63A32C017110000E5
|
||||
:10015000130141ECA1662920B72601009386B63A27
|
||||
:1001600036C0171500001305E5E9971500009385C3
|
||||
:1001700065EB370610F01306C6F2630CB500544564
|
||||
:1001800014C2144514C2544114C2144114C241058E
|
||||
:10019000EDB7370510F0130505F223200500000028
|
||||
:0201A00000005D
|
||||
:10100000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0
|
||||
:10101000FFFFFFFF000000000000000000000000D4
|
||||
:040000058000000077
|
||||
:00000001FF
|
||||
35
emulator/riscv_tests/C.JALR.elf.hex
Normal file
35
emulator/riscv_tests/C.JALR.elf.hex
Normal file
@@ -0,0 +1,35 @@
|
||||
:0200000480007A
|
||||
:1000000001000100010001000100010001000100E8
|
||||
:1000100001000100010001000100010001000100D8
|
||||
:1000200001000100010001000100010001000100C8
|
||||
:1000300001000100010001000100010001000100B8
|
||||
:1000400001000100010001000100010001000100A8
|
||||
:100050000100010001000100010001000100010098
|
||||
:100060000100010001000100010001000100010088
|
||||
:100070000100010001000100010001000100010078
|
||||
:100080000100010001000100010001000100010068
|
||||
:100090000100010001000100010001000100010058
|
||||
:1000A0000100010001000100010001000100010048
|
||||
:1000B0000100010001000100010001000100010038
|
||||
:1000C0000100010001000100010001000100010028
|
||||
:1000D0000100010001000100010001000100010018
|
||||
:1000E00001000100010001000100010001001711E1
|
||||
:1000F0000000130121F10145170600001306260137
|
||||
:100100000296372501001305B53A32C017110000D9
|
||||
:10011000130181EF0545970600009386260182961C
|
||||
:10012000372501001305B53A36C017110000130139
|
||||
:10013000E1ED7D55170700001307270102973725CA
|
||||
:1001400001001305B53A3AC017110000130141EC44
|
||||
:10015000378500001305F5FF9707000093872701F7
|
||||
:100160008297372501001305B53A3EC017110000EC
|
||||
:10017000130141EA216517080000130828010298BD
|
||||
:10018000372501001305B53A42C0171500001305C5
|
||||
:1001900065E7971500009385E5E8370610F013062C
|
||||
:1001A000C6F2630CB500544514C2144514C2544140
|
||||
:1001B00014C2144114C24105EDB7370510F0130500
|
||||
:1001C00005F22320050000000000000000000000F0
|
||||
:0201D00000002D
|
||||
:10100000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0
|
||||
:10101000FFFFFFFF000000000000000000000000D4
|
||||
:040000058000000077
|
||||
:00000001FF
|
||||
35
emulator/riscv_tests/C.JR.elf.hex
Normal file
35
emulator/riscv_tests/C.JR.elf.hex
Normal file
@@ -0,0 +1,35 @@
|
||||
:0200000480007A
|
||||
:1000000001000100010001000100010001000100E8
|
||||
:1000100001000100010001000100010001000100D8
|
||||
:1000200001000100010001000100010001000100C8
|
||||
:1000300001000100010001000100010001000100B8
|
||||
:1000400001000100010001000100010001000100A8
|
||||
:100050000100010001000100010001000100010098
|
||||
:100060000100010001000100010001000100010088
|
||||
:100070000100010001000100010001000100010078
|
||||
:100080000100010001000100010001000100010068
|
||||
:100090000100010001000100010001000100010058
|
||||
:1000A0000100010001000100010001000100010048
|
||||
:1000B0000100010001000100010001000100010038
|
||||
:1000C0000100010001000100010001000100010028
|
||||
:1000D0000100010001000100010001000100010018
|
||||
:1000E00001000100010001000100010001001711E1
|
||||
:1000F0000000130121F101459701000093812101C6
|
||||
:100100008281372501001305B53A0EC01711000092
|
||||
:10011000130181EF0545170200001302220102823C
|
||||
:10012000372501001305B53A12C01711000013015D
|
||||
:10013000E1ED7D55170400001304240102843725E6
|
||||
:1001400001001305B53A22C017110000130141EC5C
|
||||
:10015000378500001305F5FF970400009384240100
|
||||
:100160008284372501001305B53A26C01711000017
|
||||
:10017000130141EA216597050000938525018285D9
|
||||
:10018000372501001305B53A2EC0171500001305D9
|
||||
:1001900065E7971500009385E5E8370610F013062C
|
||||
:1001A000C6F2630CB500544514C2144514C2544140
|
||||
:1001B00014C2144114C24105EDB7370510F0130500
|
||||
:1001C00005F22320050000000000000000000000F0
|
||||
:0201D00000002D
|
||||
:10100000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0
|
||||
:10101000FFFFFFFF000000000000000000000000D4
|
||||
:040000058000000077
|
||||
:00000001FF
|
||||
45
emulator/riscv_tests/C.LI.elf.hex
Normal file
45
emulator/riscv_tests/C.LI.elf.hex
Normal file
@@ -0,0 +1,45 @@
|
||||
:0200000480007A
|
||||
:1000000001000100010001000100010001000100E8
|
||||
:1000100001000100010001000100010001000100D8
|
||||
:1000200001000100010001000100010001000100C8
|
||||
:1000300001000100010001000100010001000100B8
|
||||
:1000400001000100010001000100010001000100A8
|
||||
:100050000100010001000100010001000100010098
|
||||
:100060000100010001000100010001000100010088
|
||||
:100070000100010001000100010001000100010078
|
||||
:100080000100010001000100010001000100010068
|
||||
:100090000100010001000100010001000100010058
|
||||
:1000A0000100010001000100010001000100010048
|
||||
:1000B0000100010001000100010001000100010038
|
||||
:1000C0000100010001000100010001000100010028
|
||||
:1000D0000100010001000100010001000100010018
|
||||
:1000E00001000100010001000100010001001711E1
|
||||
:1000F0000000130121F1814181410EC001420542FE
|
||||
:1001000012C20144414422C48144FD4426C68145B3
|
||||
:1001100085552EC817110000130101F00546014650
|
||||
:1001200032C08546854636C2054741473AC48547B1
|
||||
:10013000FD473EC60548055842C817110000130187
|
||||
:10014000E1EE9308F0FF814846C01309F0FF05492E
|
||||
:100150004AC29309F0FFC1494EC4130AF0FF7D4A19
|
||||
:1001600052C6930AF0FF855A56C8171100001301B2
|
||||
:1001700021ED370B0800130BFBFF014B5AC0B70BE7
|
||||
:100180000800938BFBFF854B5EC2370C0800130CF5
|
||||
:10019000FCFF414C62C4B70C0800938CFCFFFD4C83
|
||||
:1001A00066C6370D0800130DFDFF055D6AC81711FF
|
||||
:1001B0000000130121EAB70D0800814D6EC0370E13
|
||||
:1001C0000800054E72C2B70E0800C14E76C4370F44
|
||||
:1001D00008007D4F7AC6B70F0800855F7EC81715E7
|
||||
:1001E0000000130525E2971500009385A5E8370662
|
||||
:1001F00010F01306C6F2630CB500544514C2144542
|
||||
:1002000014C2544114C2144114C24105EDB737055C
|
||||
:1002100010F0130505F22320050000000000000087
|
||||
:020220000000DC
|
||||
:10100000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0
|
||||
:10101000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0
|
||||
:10102000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD0
|
||||
:10103000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC0
|
||||
:10104000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB0
|
||||
:10105000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA0
|
||||
:10106000FFFFFFFF00000000000000000000000084
|
||||
:040000058000000077
|
||||
:00000001FF
|
||||
45
emulator/riscv_tests/C.LUI.elf.hex
Normal file
45
emulator/riscv_tests/C.LUI.elf.hex
Normal file
@@ -0,0 +1,45 @@
|
||||
:0200000480007A
|
||||
:1000000001000100010001000100010001000100E8
|
||||
:1000100001000100010001000100010001000100D8
|
||||
:1000200001000100010001000100010001000100C8
|
||||
:1000300001000100010001000100010001000100B8
|
||||
:1000400001000100010001000100010001000100A8
|
||||
:100050000100010001000100010001000100010098
|
||||
:100060000100010001000100010001000100010088
|
||||
:100070000100010001000100010001000100010078
|
||||
:100080000100010001000100010001000100010068
|
||||
:100090000100010001000100010001000100010058
|
||||
:1000A0000100010001000100010001000100010048
|
||||
:1000B0000100010001000100010001000100010038
|
||||
:1000C0000100010001000100010001000100010028
|
||||
:1000D0000100010001000100010001000100010018
|
||||
:1000E00001000100010001000100010001001711E1
|
||||
:1000F0000000130121F1814185610EC001420962B6
|
||||
:1001000012C201443D6422C48144FD6426C6814577
|
||||
:10011000FD752EC817110000130101F00546056694
|
||||
:1001200032C08546896636C205473D673AC4854771
|
||||
:10013000FD673EC605487D7842C8171100001301CF
|
||||
:10014000E1EE9308F0FF856846C01309F0FF0969E6
|
||||
:100150004AC29309F0FFBD694EC4130AF0FF7D6ADD
|
||||
:1001600052C6930AF0FFFD7A56C81711000013011A
|
||||
:1001700021ED370B0800130BFBFF056B5AC0B70BC3
|
||||
:100180000800938BFBFF896B5EC2370C0800130CD1
|
||||
:10019000FCFF3D6C62C4B70C0800938CFCFFFD6C47
|
||||
:1001A00066C6370D0800130DFDFF7D7D6AC8171167
|
||||
:1001B0000000130121EAB70D0800856D6EC0370EEF
|
||||
:1001C0000800096E72C2B70E0800BD6E76C4370F04
|
||||
:1001D00008007D6F7AC6B70F0800FD7F7EC817152F
|
||||
:1001E0000000130525E2971500009385A5E8370662
|
||||
:1001F00010F01306C6F2630CB500544514C2144542
|
||||
:1002000014C2544114C2144114C24105EDB737055C
|
||||
:1002100010F0130505F22320050000000000000087
|
||||
:020220000000DC
|
||||
:10100000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0
|
||||
:10101000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0
|
||||
:10102000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD0
|
||||
:10103000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC0
|
||||
:10104000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB0
|
||||
:10105000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA0
|
||||
:10106000FFFFFFFF00000000000000000000000084
|
||||
:040000058000000077
|
||||
:00000001FF
|
||||
39
emulator/riscv_tests/C.LW.elf.hex
Normal file
39
emulator/riscv_tests/C.LW.elf.hex
Normal file
@@ -0,0 +1,39 @@
|
||||
:0200000480007A
|
||||
:1000000001000100010001000100010001000100E8
|
||||
:1000100001000100010001000100010001000100D8
|
||||
:1000200001000100010001000100010001000100C8
|
||||
:1000300001000100010001000100010001000100B8
|
||||
:1000400001000100010001000100010001000100A8
|
||||
:100050000100010001000100010001000100010098
|
||||
:100060000100010001000100010001000100010088
|
||||
:100070000100010001000100010001000100010078
|
||||
:100080000100010001000100010001000100010068
|
||||
:100090000100010001000100010001000100010058
|
||||
:1000A0000100010001000100010001000100010048
|
||||
:1000B0000100010001000100010001000100010038
|
||||
:1000C0000100010001000100010001000100010028
|
||||
:1000D0000100010001000100010001000100010018
|
||||
:1000E00001000100010001000100010001001711E1
|
||||
:1000F0000000130121F1171700001307E7F118435F
|
||||
:100100003AC017110000130121F0971700009387E0
|
||||
:10011000A7F0DC433EC017110000130121EF1714B4
|
||||
:100120000000130464EF004422C017110000130103
|
||||
:1001300021EE97140000938424EEE45026C017119A
|
||||
:100140000000130121ED971600009386E6ECF45EA3
|
||||
:1001500036C0171500001305E5EA971500009385D2
|
||||
:1001600065F4370610F01306C6F2630CB50054456B
|
||||
:1001700014C2144514C2544114C2144114C241059E
|
||||
:10018000EDB7370510F0130505F223200500000038
|
||||
:0201900000006D
|
||||
:10100000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0
|
||||
:10101000FFFFFFFF000000000100000002000000D1
|
||||
:1010200003000000040000000500000006000000AE
|
||||
:101030000700000008000000090000000A0000008E
|
||||
:101040000B0000000C0000000D0000000E0000006E
|
||||
:101050000F0000001000000011000000120000004E
|
||||
:10106000130000001400000015000000160000002E
|
||||
:101070001700000018000000190000001A0000000E
|
||||
:101080001B0000001C0000001D0000001E000000EE
|
||||
:101090001F00000000000000000000000000000031
|
||||
:040000058000000077
|
||||
:00000001FF
|
||||
40
emulator/riscv_tests/C.LWSP.elf.hex
Normal file
40
emulator/riscv_tests/C.LWSP.elf.hex
Normal file
@@ -0,0 +1,40 @@
|
||||
:0200000480007A
|
||||
:1000000001000100010001000100010001000100E8
|
||||
:1000100001000100010001000100010001000100D8
|
||||
:1000200001000100010001000100010001000100C8
|
||||
:1000300001000100010001000100010001000100B8
|
||||
:1000400001000100010001000100010001000100A8
|
||||
:100050000100010001000100010001000100010098
|
||||
:100060000100010001000100010001000100010088
|
||||
:100070000100010001000100010001000100010078
|
||||
:100080000100010001000100010001000100010068
|
||||
:100090000100010001000100010001000100010058
|
||||
:1000A0000100010001000100010001000100010048
|
||||
:1000B0000100010001000100010001000100010038
|
||||
:1000C0000100010001000100010001000100010028
|
||||
:1000D0000100010001000100010001000100010018
|
||||
:1000E0000100010001000100010001000100971062
|
||||
:1000F0000000938020F1171100001301E1F102428A
|
||||
:1001000023A0400097100000938000F0171100001A
|
||||
:10011000130181F0124423A0800097100000938007
|
||||
:10012000E0EE17110000130121EF224823A0000187
|
||||
:10013000971000009380C0ED171100001301C1ED6E
|
||||
:10014000F65F23A0F001971000009380A0EC171138
|
||||
:100150000000130161ECFE5A23A0500117150000A6
|
||||
:10016000130545EA971500009385C5F3370610F08F
|
||||
:100170001306C6F2630CB500544514C2144514C2EC
|
||||
:10018000544114C2144114C24105EDB7370510F0B3
|
||||
:10019000130505F223200500000000000000000008
|
||||
:0201A00000005D
|
||||
:10100000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0
|
||||
:10101000FFFFFFFF000000000100000002000000D1
|
||||
:1010200003000000040000000500000006000000AE
|
||||
:101030000700000008000000090000000A0000008E
|
||||
:101040000B0000000C0000000D0000000E0000006E
|
||||
:101050000F0000001000000011000000120000004E
|
||||
:10106000130000001400000015000000160000002E
|
||||
:101070001700000018000000190000001A0000000E
|
||||
:101080001B0000001C0000001D0000001E000000EE
|
||||
:101090001F00000000000000000000000000000031
|
||||
:040000058000000077
|
||||
:00000001FF
|
||||
50
emulator/riscv_tests/C.MV.elf.hex
Normal file
50
emulator/riscv_tests/C.MV.elf.hex
Normal file
@@ -0,0 +1,50 @@
|
||||
:0200000480007A
|
||||
:1000000001000100010001000100010001000100E8
|
||||
:1000100001000100010001000100010001000100D8
|
||||
:1000200001000100010001000100010001000100C8
|
||||
:1000300001000100010001000100010001000100B8
|
||||
:1000400001000100010001000100010001000100A8
|
||||
:100050000100010001000100010001000100010098
|
||||
:100060000100010001000100010001000100010088
|
||||
:100070000100010001000100010001000100010078
|
||||
:100080000100010001000100010001000100010068
|
||||
:100090000100010001000100010001000100010058
|
||||
:1000A0000100010001000100010001000100010048
|
||||
:1000B0000100010001000100010001000100010038
|
||||
:1000C0000100010001000100010001000100010028
|
||||
:1000D0000100010001000100010001000100010018
|
||||
:1000E00001000100010001000100010001001711E1
|
||||
:1000F0000000130121F101468145B2852EC0014760
|
||||
:100100008546BA8636C201449307F0FFA2873EC4F3
|
||||
:100110008145B78400009384F4FFAE8426C68146EF
|
||||
:100120002166368632C8171100001301E1EE8547BB
|
||||
:1001300001473E873AC085440544268422C20546CD
|
||||
:100140009305F0FFB2852EC40547B786000093865D
|
||||
:10015000F6FFBA8636C60544A167A2873EC81711C6
|
||||
:1001600000001301A1EC9305F0FF8144AE8426C08A
|
||||
:100170009306F0FF0546368632C29307F0FF130759
|
||||
:10018000F0FF3E873AC49304F0FF37840000130465
|
||||
:10019000F4FF268422C61306F0FFA165B2852EC89F
|
||||
:1001A000171100001301C1E9378700001307F7FF9B
|
||||
:1001B0008146BA8636C0378400001304F4FF8547B1
|
||||
:1001C000A2873EC2B78500009385F5FF9304F0FF38
|
||||
:1001D000AE8426C4B78600009386F6FF37860000FB
|
||||
:1001E0001306F6FF368632C6B78700009387F7FFFF
|
||||
:1001F00021673E873AC8171100001301A1E5A164E9
|
||||
:100200000144268422C021668545B2852EC221671D
|
||||
:100210009306F0FFBA8636C42164B787000093873F
|
||||
:10022000F7FFA2873EC6A165A164AE8426C8171554
|
||||
:100230000000130525DD971500009385A5E337061B
|
||||
:1002400010F01306C6F2630CB500544514C21445F1
|
||||
:1002500014C2544114C2144114C24105EDB737050C
|
||||
:1002600010F0130505F22320050000000000000037
|
||||
:0202700000008C
|
||||
:10100000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0
|
||||
:10101000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0
|
||||
:10102000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD0
|
||||
:10103000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC0
|
||||
:10104000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB0
|
||||
:10105000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA0
|
||||
:10106000FFFFFFFF00000000000000000000000084
|
||||
:040000058000000077
|
||||
:00000001FF
|
||||
50
emulator/riscv_tests/C.OR.elf.hex
Normal file
50
emulator/riscv_tests/C.OR.elf.hex
Normal file
@@ -0,0 +1,50 @@
|
||||
:0200000480007A
|
||||
:1000000001000100010001000100010001000100E8
|
||||
:1000100001000100010001000100010001000100D8
|
||||
:1000200001000100010001000100010001000100C8
|
||||
:1000300001000100010001000100010001000100B8
|
||||
:1000400001000100010001000100010001000100A8
|
||||
:100050000100010001000100010001000100010098
|
||||
:100060000100010001000100010001000100010088
|
||||
:100070000100010001000100010001000100010078
|
||||
:100080000100010001000100010001000100010068
|
||||
:100090000100010001000100010001000100010058
|
||||
:1000A0000100010001000100010001000100010048
|
||||
:1000B0000100010001000100010001000100010038
|
||||
:1000C0000100010001000100010001000100010028
|
||||
:1000D0000100010001000100010001000100010018
|
||||
:1000E00001000100010001000100010001001711E1
|
||||
:1000F0000000130121F101448147C18F3EC08145B9
|
||||
:100100008544CD8C26C281461306F0FF558E32C43D
|
||||
:100110008147378700001307F7FF5D8F3AC6814498
|
||||
:100120002164458C22C8171100001301E1EE054639
|
||||
:100130008145D18D2EC005478546D98E36C20544EE
|
||||
:100140009307F0FFC18F3EC48545B78400009384B8
|
||||
:10015000F4FFCD8C26C685462166558E32C8171110
|
||||
:1001600000001301A1EC9307F0FF01475D8F3AC037
|
||||
:100170009304F0FF0544458C22C21306F0FF93055B
|
||||
:10018000F0FFD18D2EC41307F0FFB78600009386D1
|
||||
:10019000F6FFD98E36C61304F0FFA167C18F3EC8A3
|
||||
:1001A000171100001301C1E9B78500009385F5FF21
|
||||
:1001B0008144CD8C26C0B78600009386F6FF0546A5
|
||||
:1001C000558E32C2B78700009387F7FF1307F0FF01
|
||||
:1001D0005D8F3AC4B78400009384F4FF3784000035
|
||||
:1001E0001304F4FF458C22C6378600001306F6FF81
|
||||
:1001F000A165D18D2EC8171100001301A1E521675B
|
||||
:100200008146D98E36C021648547C18F3EC2A16523
|
||||
:100210009304F0FFCD8C26C4A16637860000130638
|
||||
:10022000F6FF558E32C6A16721675D8F3AC8171554
|
||||
:100230000000130525DD971500009385A5E337061B
|
||||
:1002400010F01306C6F2630CB500544514C21445F1
|
||||
:1002500014C2544114C2144114C24105EDB737050C
|
||||
:1002600010F0130505F22320050000000000000037
|
||||
:0202700000008C
|
||||
:10100000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0
|
||||
:10101000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0
|
||||
:10102000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD0
|
||||
:10103000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC0
|
||||
:10104000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB0
|
||||
:10105000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA0
|
||||
:10106000FFFFFFFF00000000000000000000000084
|
||||
:040000058000000077
|
||||
:00000001FF
|
||||
45
emulator/riscv_tests/C.SLLI.elf.hex
Normal file
45
emulator/riscv_tests/C.SLLI.elf.hex
Normal file
@@ -0,0 +1,45 @@
|
||||
:0200000480007A
|
||||
:1000000001000100010001000100010001000100E8
|
||||
:1000100001000100010001000100010001000100D8
|
||||
:1000200001000100010001000100010001000100C8
|
||||
:1000300001000100010001000100010001000100B8
|
||||
:1000400001000100010001000100010001000100A8
|
||||
:100050000100010001000100010001000100010098
|
||||
:100060000100010001000100010001000100010088
|
||||
:100070000100010001000100010001000100010078
|
||||
:100080000100010001000100010001000100010068
|
||||
:100090000100010001000100010001000100010058
|
||||
:1000A0000100010001000100010001000100010048
|
||||
:1000B0000100010001000100010001000100010038
|
||||
:1000C0000100010001000100010001000100010028
|
||||
:1000D0000100010001000100010001000100010018
|
||||
:1000E00001000100010001000100010001001711E1
|
||||
:1000F0000000130121F1814186010EC001420A0274
|
||||
:1001000012C201443E0422C48144C20426C6814571
|
||||
:10011000FE052EC817110000130101F00546060662
|
||||
:1001200032C085468A0636C205473E073AC485472F
|
||||
:10013000C2073EC605487E0842C8171100001301D9
|
||||
:10014000E1EE9308F0FF860846C01309F0FF0A09A4
|
||||
:100150004AC29309F0FFBE094EC4130AF0FF420AD7
|
||||
:1001600052C6930AF0FFFE0A56C817110000130189
|
||||
:1001700021ED370B0800130BFBFF060B5AC0B70B22
|
||||
:100180000800938BFBFF8A0B5EC2370C0800130C30
|
||||
:10019000FCFF3E0C62C4B70C0800938CFCFFC20C41
|
||||
:1001A00066C6370D0800130DFDFF7E0D6AC81711D6
|
||||
:1001B0000000130121EAB70D0800860D6EC0370E4E
|
||||
:1001C00008000A0E72C2B70E0800BE0E76C4370FC2
|
||||
:1001D0000800420F7AC6B70F0800FE0F7EC8171539
|
||||
:1001E0000000130525E2971500009385A5E8370662
|
||||
:1001F00010F01306C6F2630CB500544514C2144542
|
||||
:1002000014C2544114C2144114C24105EDB737055C
|
||||
:1002100010F0130505F22320050000000000000087
|
||||
:020220000000DC
|
||||
:10100000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0
|
||||
:10101000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0
|
||||
:10102000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD0
|
||||
:10103000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC0
|
||||
:10104000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB0
|
||||
:10105000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA0
|
||||
:10106000FFFFFFFF00000000000000000000000084
|
||||
:040000058000000077
|
||||
:00000001FF
|
||||
45
emulator/riscv_tests/C.SRAI.elf.hex
Normal file
45
emulator/riscv_tests/C.SRAI.elf.hex
Normal file
@@ -0,0 +1,45 @@
|
||||
:0200000480007A
|
||||
:1000000001000100010001000100010001000100E8
|
||||
:1000100001000100010001000100010001000100D8
|
||||
:1000200001000100010001000100010001000100C8
|
||||
:1000300001000100010001000100010001000100B8
|
||||
:1000400001000100010001000100010001000100A8
|
||||
:100050000100010001000100010001000100010098
|
||||
:100060000100010001000100010001000100010088
|
||||
:100070000100010001000100010001000100010078
|
||||
:100080000100010001000100010001000100010068
|
||||
:100090000100010001000100010001000100010058
|
||||
:1000A0000100010001000100010001000100010048
|
||||
:1000B0000100010001000100010001000100010038
|
||||
:1000C0000100010001000100010001000100010028
|
||||
:1000D0000100010001000100010001000100010018
|
||||
:1000E00001000100010001000100010001001711E1
|
||||
:1000F0000000130121F18144858426C08145898552
|
||||
:100100002EC201463D8632C48146C18636C60147AD
|
||||
:100110007D873AC817110000130101F085478587D4
|
||||
:100120003EC00544098422C28544BD8426C4854559
|
||||
:10013000C1852EC605467D8632C817110000130101
|
||||
:10014000E1EE9306F0FF858636C01307F0FF0987BE
|
||||
:100150003AC29307F0FFBD873EC41304F0FF418409
|
||||
:1001600022C69304F0FFFD8426C817110000130176
|
||||
:1001700021EDB70508009385F5FF85852EC037066C
|
||||
:1001800008001306F6FF098632C2B70608009386F8
|
||||
:10019000F6FFBD8636C4370708001307F7FF41870F
|
||||
:1001A0003AC6B70708009387F7FFFD873EC81711C7
|
||||
:1001B0000000130121EA37040800058422C0B704B7
|
||||
:1001C0000800898426C2B7050800BD852EC43706FD
|
||||
:1001D0000800418632C6B7060800FD8636C81715E6
|
||||
:1001E0000000130525E2971500009385A5E8370662
|
||||
:1001F00010F01306C6F2630CB500544514C2144542
|
||||
:1002000014C2544114C2144114C24105EDB737055C
|
||||
:1002100010F0130505F22320050000000000000087
|
||||
:020220000000DC
|
||||
:10100000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0
|
||||
:10101000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0
|
||||
:10102000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD0
|
||||
:10103000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC0
|
||||
:10104000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB0
|
||||
:10105000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA0
|
||||
:10106000FFFFFFFF00000000000000000000000084
|
||||
:040000058000000077
|
||||
:00000001FF
|
||||
45
emulator/riscv_tests/C.SRLI.elf.hex
Normal file
45
emulator/riscv_tests/C.SRLI.elf.hex
Normal file
@@ -0,0 +1,45 @@
|
||||
:0200000480007A
|
||||
:1000000001000100010001000100010001000100E8
|
||||
:1000100001000100010001000100010001000100D8
|
||||
:1000200001000100010001000100010001000100C8
|
||||
:1000300001000100010001000100010001000100B8
|
||||
:1000400001000100010001000100010001000100A8
|
||||
:100050000100010001000100010001000100010098
|
||||
:100060000100010001000100010001000100010088
|
||||
:100070000100010001000100010001000100010078
|
||||
:100080000100010001000100010001000100010068
|
||||
:100090000100010001000100010001000100010058
|
||||
:1000A0000100010001000100010001000100010048
|
||||
:1000B0000100010001000100010001000100010038
|
||||
:1000C0000100010001000100010001000100010028
|
||||
:1000D0000100010001000100010001000100010018
|
||||
:1000E00001000100010001000100010001001711E1
|
||||
:1000F0000000130121F1014705833AC0814789833C
|
||||
:100100003EC201443D8022C48144C18026C681454F
|
||||
:10011000FD812EC817110000130101F0054605826C
|
||||
:1001200032C08546898236C205473D833AC4854739
|
||||
:10013000C1833EC605447D8022C81711000013010B
|
||||
:10014000E1EE9304F0FF858026C09305F0FF8981DE
|
||||
:100150002EC21306F0FF3D8232C49306F0FFC18227
|
||||
:1001600036C61307F0FF7D833AC81711000013014C
|
||||
:1001700021EDB70708009387F7FF85833EC037045A
|
||||
:1001800008001304F4FF098022C2B7040800938416
|
||||
:10019000F4FFBD8026C4B70508009385F5FFC18133
|
||||
:1001A0002EC6370608001306F6FF7D8232C81711E7
|
||||
:1001B0000000130121EAB7060800858236C0370720
|
||||
:1001C000080009833AC2B7070800BD833EC437045C
|
||||
:1001D0000800418022C6B7040800FD8026C8171514
|
||||
:1001E0000000130525E2971500009385A5E8370662
|
||||
:1001F00010F01306C6F2630CB500544514C2144542
|
||||
:1002000014C2544114C2144114C24105EDB737055C
|
||||
:1002100010F0130505F22320050000000000000087
|
||||
:020220000000DC
|
||||
:10100000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0
|
||||
:10101000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0
|
||||
:10102000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD0
|
||||
:10103000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC0
|
||||
:10104000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB0
|
||||
:10105000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA0
|
||||
:10106000FFFFFFFF00000000000000000000000084
|
||||
:040000058000000077
|
||||
:00000001FF
|
||||
50
emulator/riscv_tests/C.SUB.elf.hex
Normal file
50
emulator/riscv_tests/C.SUB.elf.hex
Normal file
@@ -0,0 +1,50 @@
|
||||
:0200000480007A
|
||||
:1000000001000100010001000100010001000100E8
|
||||
:1000100001000100010001000100010001000100D8
|
||||
:1000200001000100010001000100010001000100C8
|
||||
:1000300001000100010001000100010001000100B8
|
||||
:1000400001000100010001000100010001000100A8
|
||||
:100050000100010001000100010001000100010098
|
||||
:100060000100010001000100010001000100010088
|
||||
:100070000100010001000100010001000100010078
|
||||
:100080000100010001000100010001000100010068
|
||||
:100090000100010001000100010001000100010058
|
||||
:1000A0000100010001000100010001000100010048
|
||||
:1000B0000100010001000100010001000100010038
|
||||
:1000C0000100010001000100010001000100010028
|
||||
:1000D0000100010001000100010001000100010018
|
||||
:1000E00001000100010001000100010001001711E1
|
||||
:1000F0000000130121F1814581448D8C26C0814689
|
||||
:100100000546158E32C281471307F0FF1D8F3AC492
|
||||
:100110008144378400001304F4FF058C22C6014695
|
||||
:10012000A165918D2EC8171100001301E1EE05475E
|
||||
:100130008146998E36C005448547818F3EC28545EC
|
||||
:100140009304F0FF8D8C26C4854637860000130685
|
||||
:10015000F6FF158E32C6854721671D8F3AC81711E5
|
||||
:1001600000001301A1EC9304F0FF0144058C22C0B0
|
||||
:100170001306F0FF8545918D2EC21307F0FF9306FD
|
||||
:10018000F0FF998E36C41304F0FFB7870000938701
|
||||
:10019000F7FF818F3EC69305F0FFA1648D8C26C8C2
|
||||
:1001A000171100001301C1E9B78600009386F6FF1E
|
||||
:1001B0000146158E32C0B78700009387F7FF0547C9
|
||||
:1001C0001D8F3AC2B78400009384F4FF1304F0FF3C
|
||||
:1001D000058C22C4378600001306F6FFB7850000A1
|
||||
:1001E0009385F5FF918D2EC6378700001307F7FF23
|
||||
:1001F000A166998E36C8171100001301A1E521648C
|
||||
:100200008147818F3EC0A16585448D8C26C2A16641
|
||||
:100210001306F0FF158E32C4A1673787000013075D
|
||||
:10022000F7FF1D8F3AC6A1642164058C22C81715FB
|
||||
:100230000000130525DD971500009385A5E337061B
|
||||
:1002400010F01306C6F2630CB500544514C21445F1
|
||||
:1002500014C2544114C2144114C24105EDB737050C
|
||||
:1002600010F0130505F22320050000000000000037
|
||||
:0202700000008C
|
||||
:10100000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0
|
||||
:10101000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0
|
||||
:10102000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD0
|
||||
:10103000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC0
|
||||
:10104000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB0
|
||||
:10105000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA0
|
||||
:10106000FFFFFFFF00000000000000000000000084
|
||||
:040000058000000077
|
||||
:00000001FF
|
||||
41
emulator/riscv_tests/C.SW.elf.hex
Normal file
41
emulator/riscv_tests/C.SW.elf.hex
Normal file
@@ -0,0 +1,41 @@
|
||||
:0200000480007A
|
||||
:1000000001000100010001000100010001000100E8
|
||||
:1000100001000100010001000100010001000100D8
|
||||
:1000200001000100010001000100010001000100C8
|
||||
:1000300001000100010001000100010001000100B8
|
||||
:1000400001000100010001000100010001000100A8
|
||||
:100050000100010001000100010001000100010098
|
||||
:100060000100010001000100010001000100010088
|
||||
:100070000100010001000100010001000100010078
|
||||
:100080000100010001000100010001000100010068
|
||||
:100090000100010001000100010001000100010058
|
||||
:1000A0000100010001000100010001000100010048
|
||||
:1000B0000100010001000100010001000100010038
|
||||
:1000C0000100010001000100010001000100010028
|
||||
:1000D0000100010001000100010001000100010018
|
||||
:1000E00001000100010001000100010001001711E1
|
||||
:1000F0000000130121F10144171600001306C6F198
|
||||
:1001000000C2004222C0171100001301E1EF854434
|
||||
:1001100097170000938747F0C4C3C44326C0171144
|
||||
:1001200000001301A1EE7D55971400009384C4EEE6
|
||||
:1001300088C488442AC017110000130161EDB786F6
|
||||
:1001400000009386F6FF171700001307E7EC14CBA7
|
||||
:10015000144B36C0171100001301C1EBA16717162D
|
||||
:100160000000130666EB7CDE7C5E3EC017150000C7
|
||||
:10017000130545E9971500009385C5F2370610F081
|
||||
:100180001306C6F2630CB500544514C2144514C2DC
|
||||
:10019000544114C2144114C24105EDB7370510F0A3
|
||||
:1001A000130505F2232005000000000000000000F8
|
||||
:0201B00000004D
|
||||
:10100000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0
|
||||
:10101000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0
|
||||
:10102000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD0
|
||||
:10103000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC0
|
||||
:10104000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB0
|
||||
:10105000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA0
|
||||
:10106000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF90
|
||||
:10107000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF80
|
||||
:10108000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF70
|
||||
:10109000FFFFFFFF00000000000000000000000054
|
||||
:040000058000000077
|
||||
:00000001FF
|
||||
41
emulator/riscv_tests/C.SWSP.elf.hex
Normal file
41
emulator/riscv_tests/C.SWSP.elf.hex
Normal file
@@ -0,0 +1,41 @@
|
||||
:0200000480007A
|
||||
:1000000001000100010001000100010001000100E8
|
||||
:1000100001000100010001000100010001000100D8
|
||||
:1000200001000100010001000100010001000100C8
|
||||
:1000300001000100010001000100010001000100B8
|
||||
:1000400001000100010001000100010001000100A8
|
||||
:100050000100010001000100010001000100010098
|
||||
:100060000100010001000100010001000100010088
|
||||
:100070000100010001000100010001000100010078
|
||||
:100080000100010001000100010001000100010068
|
||||
:100090000100010001000100010001000100010058
|
||||
:1000A0000100010001000100010001000100010048
|
||||
:1000B0000100010001000100010001000100010038
|
||||
:1000C0000100010001000100010001000100010028
|
||||
:1000D0000100010001000100010001000100010018
|
||||
:1000E0000100010001000100010001000100971062
|
||||
:1000F0000000938020F1171100001301E1F181410C
|
||||
:100100000EC0824123A03000971000009380C0EF02
|
||||
:1001100017110000130141F0054212C2124223A040
|
||||
:10012000400097100000938060EE1711000013014B
|
||||
:10013000A1EE7D58C2C0064823A000019710000020
|
||||
:10014000938000ED17110000130101ED378C0000C2
|
||||
:10015000130CFCFFE2DC665C23A08001971000001A
|
||||
:10016000938040EB17110000130101EBA16FFEDF3C
|
||||
:10017000FE5F23A0F001171500001305A5E89715F1
|
||||
:100180000000938525F2370610F01306C6F2630CC3
|
||||
:10019000B500544514C2144514C2544114C214414C
|
||||
:1001A00014C24105EDB7370510F0130505F2232001
|
||||
:0201B000050048
|
||||
:10100000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0
|
||||
:10101000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0
|
||||
:10102000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD0
|
||||
:10103000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC0
|
||||
:10104000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB0
|
||||
:10105000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA0
|
||||
:10106000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF90
|
||||
:10107000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF80
|
||||
:10108000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF70
|
||||
:10109000FFFFFFFF00000000000000000000000054
|
||||
:040000058000000077
|
||||
:00000001FF
|
||||
50
emulator/riscv_tests/C.XOR.elf.hex
Normal file
50
emulator/riscv_tests/C.XOR.elf.hex
Normal file
@@ -0,0 +1,50 @@
|
||||
:0200000480007A
|
||||
:1000000001000100010001000100010001000100E8
|
||||
:1000100001000100010001000100010001000100D8
|
||||
:1000200001000100010001000100010001000100C8
|
||||
:1000300001000100010001000100010001000100B8
|
||||
:1000400001000100010001000100010001000100A8
|
||||
:100050000100010001000100010001000100010098
|
||||
:100060000100010001000100010001000100010088
|
||||
:100070000100010001000100010001000100010078
|
||||
:100080000100010001000100010001000100010068
|
||||
:100090000100010001000100010001000100010058
|
||||
:1000A0000100010001000100010001000100010048
|
||||
:1000B0000100010001000100010001000100010038
|
||||
:1000C0000100010001000100010001000100010028
|
||||
:1000D0000100010001000100010001000100010018
|
||||
:1000E00001000100010001000100010001001711E1
|
||||
:1000F0000000130121F181440144258C22C00146F6
|
||||
:100100008545B18D2EC201479306F0FFB98E36C4E6
|
||||
:100110000144B78700009387F7FFA18F3EC6814552
|
||||
:10012000A164AD8C26C8171100001301E1EE8546CD
|
||||
:100130000146358E32C0854705473D8F3AC285441A
|
||||
:100140001304F0FF258C22C40546B7850000938573
|
||||
:10015000F5FFB18D2EC60547A166B98E36C81711B9
|
||||
:1001600000001301A1EC1304F0FF8147A18F3EC0F2
|
||||
:100170009305F0FF8544AD8C26C29306F0FF13066D
|
||||
:10018000F0FF358E32C49307F0FF37870000130766
|
||||
:10019000F7FF3D8F3AC69304F0FF2164258C22C8F7
|
||||
:1001A000171100001301C1E9378600001306F6FF9E
|
||||
:1001B0008145B18D2EC0378700001307F7FF8546B4
|
||||
:1001C000B98E36C2378400001304F4FF9307F0FFA2
|
||||
:1001D000A18F3EC4B78500009385F5FFB78400006A
|
||||
:1001E0009384F4FFAD8C26C6B78600009386F6FF95
|
||||
:1001F0002166358E32C8171100001301A1E5A167F1
|
||||
:1002000001473D8F3AC0A1640544258C22C2216676
|
||||
:100210009305F0FFB18D2EC42167B7860000938649
|
||||
:10022000F6FFB98E36C62164A167A18F3EC81715A7
|
||||
:100230000000130525DD971500009385A5E337061B
|
||||
:1002400010F01306C6F2630CB500544514C21445F1
|
||||
:1002500014C2544114C2144114C24105EDB737050C
|
||||
:1002600010F0130505F22320050000000000000037
|
||||
:0202700000008C
|
||||
:10100000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0
|
||||
:10101000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0
|
||||
:10102000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD0
|
||||
:10103000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC0
|
||||
:10104000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB0
|
||||
:10105000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA0
|
||||
:10106000FFFFFFFF00000000000000000000000084
|
||||
:040000058000000077
|
||||
:00000001FF
|
||||
52
emulator/riscv_tests/DIV.elf.hex
Normal file
52
emulator/riscv_tests/DIV.elf.hex
Normal file
@@ -0,0 +1,52 @@
|
||||
:0200000480007A
|
||||
:1000000017110000130101001309000093080000FC
|
||||
:10001000B348190323201101130A000093091000AB
|
||||
:10002000B3493A0323223101130B0000930AF0FF76
|
||||
:10003000B34A5B0323245101130C0000B70B00806B
|
||||
:10004000938BFBFFB34B7C0323267101130D000040
|
||||
:10005000B70C0080B34C9D032328910117110000B9
|
||||
:10006000130181FB130E1000930D0000B34DBE036E
|
||||
:100070002320B101130F1000930E1000B34EDF03C5
|
||||
:100080002322D10193011000930FF0FFB3CFF103AE
|
||||
:100090002324F10113041000370200801302F2FF41
|
||||
:1000A000334244022326410093051000B704008028
|
||||
:1000B000B3C495022328910017110000130101F722
|
||||
:1000C0009306F0FF1306000033C6C6022320C100CA
|
||||
:1000D0009307F0FF1307100033C7E7022322E10064
|
||||
:1000E0009308F0FF1308F0FF33C80803232401012D
|
||||
:1000F0009309F0FF370900801309F9FF33C9290379
|
||||
:1001000023262101930AF0FF370A008033CA4A03ED
|
||||
:100110002328410117110000130181F2B70B008061
|
||||
:10012000938BFBFF130B000033CB6B032320610188
|
||||
:10013000B70C0080938CFCFF130C100033CC8C03A5
|
||||
:1001400023228101B70D0080938DFDFF130DF0FF79
|
||||
:1001500033CDAD032324A101B70E0080938EFEFFA3
|
||||
:10016000370E0080130EFEFF33CECE032326C101CF
|
||||
:10017000B70F0080938FFFFF370F008033CFEF035F
|
||||
:100180002328E101171100001301C1EC37020080A0
|
||||
:1001900093010000B341320223203100B7040080F4
|
||||
:1001A0001304100033C48402232281003706008028
|
||||
:1001B0009305F0FFB345B6022324B1003707008052
|
||||
:1001C000B70600809386F6FFB346D7022326D100F8
|
||||
:1001D00037080080B7070080B347F8022328F100F2
|
||||
:1001E00017150000130505E297150000938585EEAD
|
||||
:1001F000370610F01306C6F26306B5028326C50063
|
||||
:100200002320D600832685002320D60083264500A0
|
||||
:100210002320D600832605002320D60013050501E0
|
||||
:100220006FF09FFD370510F0130505F22320050040
|
||||
:0402300000000000CA
|
||||
:10100000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0
|
||||
:10101000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0
|
||||
:10102000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD0
|
||||
:10103000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC0
|
||||
:10104000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB0
|
||||
:10105000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA0
|
||||
:10106000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF90
|
||||
:10107000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF80
|
||||
:10108000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF70
|
||||
:10109000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF60
|
||||
:1010A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF50
|
||||
:1010B000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF40
|
||||
:1010C000FFFFFFFFFFFFFFFF000000000000000028
|
||||
:040000058000000077
|
||||
:00000001FF
|
||||
52
emulator/riscv_tests/DIVU.elf.hex
Normal file
52
emulator/riscv_tests/DIVU.elf.hex
Normal file
@@ -0,0 +1,52 @@
|
||||
:0200000480007A
|
||||
:1000000017110000130101001309000093080000FC
|
||||
:10001000B358190323201101130A0000930910009B
|
||||
:10002000B3593A0323223101130B0000930AF0FF66
|
||||
:10003000B35A5B0323245101130C0000B70B00805B
|
||||
:10004000938BFBFFB35B7C0323267101130D000030
|
||||
:10005000B70C0080B35C9D032328910117110000A9
|
||||
:10006000130181FB130E1000930D0000B35DBE035E
|
||||
:100070002320B101130F1000930E1000B35EDF03B5
|
||||
:100080002322D10193011000930FF0FFB3DFF1039E
|
||||
:100090002324F10113041000370200801302F2FF41
|
||||
:1000A000335244022326410093051000B704008018
|
||||
:1000B000B3D495022328910017110000130101F712
|
||||
:1000C0009306F0FF1306000033D6C6022320C100BA
|
||||
:1000D0009307F0FF1307100033D7E7022322E10054
|
||||
:1000E0009308F0FF1308F0FF33D80803232401011D
|
||||
:1000F0009309F0FF370900801309F9FF33D9290369
|
||||
:1001000023262101930AF0FF370A008033DA4A03DD
|
||||
:100110002328410117110000130181F2B70B008061
|
||||
:10012000938BFBFF130B000033DB6B032320610178
|
||||
:10013000B70C0080938CFCFF130C100033DC8C0395
|
||||
:1001400023228101B70D0080938DFDFF130DF0FF79
|
||||
:1001500033DDAD032324A101B70E0080938EFEFF93
|
||||
:10016000370E0080130EFEFF33DECE032326C101BF
|
||||
:10017000B70F0080938FFFFF370F008033DFEF034F
|
||||
:100180002328E101171100001301C1EC37020080A0
|
||||
:1001900093010000B351320223203100B7040080E4
|
||||
:1001A0001304100033D48402232281003706008018
|
||||
:1001B0009305F0FFB355B6022324B1003707008042
|
||||
:1001C000B70600809386F6FFB356D7022326D100E8
|
||||
:1001D00037080080B7070080B357F8022328F100E2
|
||||
:1001E00017150000130505E297150000938585EEAD
|
||||
:1001F000370610F01306C6F26306B5028326C50063
|
||||
:100200002320D600832685002320D60083264500A0
|
||||
:100210002320D600832605002320D60013050501E0
|
||||
:100220006FF09FFD370510F0130505F22320050040
|
||||
:0402300000000000CA
|
||||
:10100000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0
|
||||
:10101000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0
|
||||
:10102000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD0
|
||||
:10103000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC0
|
||||
:10104000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB0
|
||||
:10105000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA0
|
||||
:10106000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF90
|
||||
:10107000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF80
|
||||
:10108000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF70
|
||||
:10109000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF60
|
||||
:1010A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF50
|
||||
:1010B000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF40
|
||||
:1010C000FFFFFFFFFFFFFFFF000000000000000028
|
||||
:040000058000000077
|
||||
:00000001FF
|
||||
65
emulator/riscv_tests/I-ADD-01.elf.hex
Normal file
65
emulator/riscv_tests/I-ADD-01.elf.hex
Normal file
@@ -0,0 +1,65 @@
|
||||
:0200000480007A
|
||||
:100000009710000093800000171100001301810277
|
||||
:1000100083A1000013020000930210001303F0FFFD
|
||||
:10002000B70300809383F3FF3704008033824100DD
|
||||
:10003000B382510033836100B38371003384810044
|
||||
:100040002320310023224100232451002326610074
|
||||
:1000500023287100232A8100971000009380C0FAA2
|
||||
:1000600017110000130181FE03A400009304000097
|
||||
:10007000130510009305F0FF370600801306F6FF06
|
||||
:10008000B7060080B30494003305A400B305B400A0
|
||||
:100090003306C400B306D40023208100232291003C
|
||||
:1000A0002324A1002326B1002328C100232AD10044
|
||||
:1000B00097100000938080F517110000130181FA5A
|
||||
:1000C00083A6000013070000930710001308F0FF39
|
||||
:1000D000B70800809388F8FF370900803387E6006F
|
||||
:1000E000B387F60033880601B388160133892601E9
|
||||
:1000F0002320D1002322E1002324F1002326010143
|
||||
:1001000023281101232A210197100000938040F039
|
||||
:1001100017110000130181F603A9000093090000E4
|
||||
:10012000130A1000930AF0FF370B0080130BFBFF3C
|
||||
:10013000B70B0080B3093901330A4901B30A5901E9
|
||||
:10014000330B6901B30B79012320210123223101F3
|
||||
:10015000232441012326510123286101232A71010F
|
||||
:1001600097100000938000EB17110000130181F23B
|
||||
:1001700083AB0000130C0000930C1000130DF0FF74
|
||||
:10018000B70D0080938DFDFF370E0080338C8B01FF
|
||||
:10019000B38C9B01338DAB01B38DBB01338ECB018F
|
||||
:1001A0002320710123228101232491012326A1010F
|
||||
:1001B0002328B101232AC101971C0000938CCCE5B0
|
||||
:1001C000171D0000130D8DEE03AE0C00930D1000F3
|
||||
:1001D000B30EBE01338FBE01B30FBF01B380BF01A9
|
||||
:1001E0003381B001B301B1012320BD012322CD0130
|
||||
:1001F0002324DD012326ED012328FD01232A1D00F0
|
||||
:10020000232C2D00232E3D0097100000938000E149
|
||||
:1002100017110000130181EB03AE0000B79DFFF73B
|
||||
:10022000938D8D813300BE012320010097100000C3
|
||||
:10023000938000DF17110000130181E903AE000075
|
||||
:10024000B79DFFF7938D8D813300BE01B30200008F
|
||||
:10025000232001002322510097100000938080DCAE
|
||||
:1002600017110000130141E783A100003382010050
|
||||
:10027000B30202003303500033070300B307070043
|
||||
:1002800033880700B30C0001330D9001B30D0D004E
|
||||
:10029000232041002322A1012324B10117150000CE
|
||||
:1002A000130545D9971500009385C5E3370610F06F
|
||||
:1002B0001306C6F26306B5028326C5002320D600C6
|
||||
:1002C000832685002320D600832645002320D600E0
|
||||
:1002D000832605002320D600130505016FF09FFD3E
|
||||
:1002E000370510F0130505F223200500000000007B
|
||||
:0402F000000000000A
|
||||
:101000000000000001000000FFFFFFFFFFFFFF7F67
|
||||
:1010100000000080CDAB00007856341298BADCFE98
|
||||
:10102000145892360000000000000000000000008C
|
||||
:10103000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC0
|
||||
:10104000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB0
|
||||
:10105000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA0
|
||||
:10106000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF90
|
||||
:10107000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF80
|
||||
:10108000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF70
|
||||
:10109000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF60
|
||||
:1010A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF50
|
||||
:1010B000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF40
|
||||
:1010C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF30
|
||||
:1010D000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF20
|
||||
:040000058000000077
|
||||
:00000001FF
|
||||
56
emulator/riscv_tests/I-ADDI-01.elf.hex
Normal file
56
emulator/riscv_tests/I-ADDI-01.elf.hex
Normal file
@@ -0,0 +1,56 @@
|
||||
:0200000480007A
|
||||
:100000009710000093800000171100001301810277
|
||||
:1000100083A10000138211009382F17F1383F1FF0B
|
||||
:1000200093830100138401802320310023224100A7
|
||||
:10003000232451002326610023287100232A8100F4
|
||||
:1000400097100000938040FC17110000130101007D
|
||||
:1000500003A40000930414001305F47F9305F4FF38
|
||||
:1000600013060400930604802320810023229100BC
|
||||
:100070002324A1002326B1002328C100232AD10074
|
||||
:1000800097100000938080F817110000130181FD84
|
||||
:1000900083A60000138716009387F67F1388F6FF68
|
||||
:1000A00093880600138906802320D1002322E100D3
|
||||
:1000B0002324F1002326010123281101232A2101F1
|
||||
:1000C000971000009380C0F417110000130101FB8A
|
||||
:1000D00003A9000093091900130AF97F930AF9FF95
|
||||
:1000E000130B0900930B09802320210123223101E6
|
||||
:1000F000232441012326510123286101232A710170
|
||||
:1001000097100000938000F117110000130181F88F
|
||||
:1001100083AB0000138C1B00938CFB7F138DFBFFC4
|
||||
:10012000938D0B00138E0B802320710123228101FC
|
||||
:10013000232491012326A1012328B101232AC101EF
|
||||
:10014000171D0000130D4DED971D0000938D0DF64A
|
||||
:10015000032E0D00930E1E00138F1E00930F1F0021
|
||||
:1001600093801F00138110009301110023A0CD0183
|
||||
:1001700023A2DD0123A4ED0123A6FD0123A81D0078
|
||||
:1001800023AA2D0023AC3D0097100000938000E9C6
|
||||
:1001900017110000130141F383A200001380120025
|
||||
:1001A0002320010097100000938080E717110000C2
|
||||
:1001B0001301C1F183A2000013801200930210000A
|
||||
:1001C000232001002322510097100000938080E536
|
||||
:1001D00017110000130101F083A100001382010038
|
||||
:1001E0009302020013830200130703009307070022
|
||||
:1001F00013880700930C0800138D0C00930D0D005D
|
||||
:1002000023203100232241002324A1012326B10110
|
||||
:1002100017150000130505E297150000938585EC7E
|
||||
:10022000370610F01306C6F26306B5028326C50032
|
||||
:100230002320D600832685002320D6008326450070
|
||||
:100240002320D600832605002320D60013050501B0
|
||||
:100250006FF09FFD370510F0130505F22320050010
|
||||
:04026000000000009A
|
||||
:101000000000000001000000FFFFFFFFFFFFFF7F67
|
||||
:1010100000000080CDAB00007856341298BADCFE98
|
||||
:10102000145892360000000000000000000000008C
|
||||
:10103000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC0
|
||||
:10104000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB0
|
||||
:10105000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA0
|
||||
:10106000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF90
|
||||
:10107000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF80
|
||||
:10108000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF70
|
||||
:10109000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF60
|
||||
:1010A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF50
|
||||
:1010B000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF40
|
||||
:1010C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF30
|
||||
:1010D000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF20
|
||||
:040000058000000077
|
||||
:00000001FF
|
||||
66
emulator/riscv_tests/I-AND-01.elf.hex
Normal file
66
emulator/riscv_tests/I-AND-01.elf.hex
Normal file
@@ -0,0 +1,66 @@
|
||||
:0200000480007A
|
||||
:100000009710000093800000171100001301810277
|
||||
:1000100083A1000013020000930210001303F0FFFD
|
||||
:10002000B70300809383F3FF3704008033F241006D
|
||||
:10003000B3F2510033F36100B3F3710033F4810084
|
||||
:100040002320310023224100232451002326610074
|
||||
:1000500023287100232A8100971000009380C0FAA2
|
||||
:1000600017110000130181FE03A400009304000097
|
||||
:10007000130510009305F0FF370600801306F6FF06
|
||||
:10008000B7060080B37494003375A400B375B40050
|
||||
:100090003376C400B376D40023208100232291005C
|
||||
:1000A0002324A1002326B1002328C100232AD10044
|
||||
:1000B00097100000938080F517110000130181FA5A
|
||||
:1000C00083A6000013070000930710001308F0FF39
|
||||
:1000D000B70800809388F8FF3709008033F7E600FF
|
||||
:1000E000B3F7F60033F80601B3F8160133F9260129
|
||||
:1000F0002320D1002322E1002324F1002326010143
|
||||
:1001000023281101232A210197100000938040F039
|
||||
:1001100017110000130181F603A9000093090000E4
|
||||
:10012000130A1000930AF0FF370B0080130BFBFF3C
|
||||
:10013000B70B0080B3793901337A4901B37A590199
|
||||
:10014000337B6901B37B7901232021012322310113
|
||||
:10015000232441012326510123286101232A71010F
|
||||
:1001600097100000938000EB17110000130181F23B
|
||||
:1001700083AB0000130C0000930C1000130DF0FF74
|
||||
:10018000B70D0080938DFDFF370E008033FC8B018F
|
||||
:10019000B3FC9B0133FDAB01B3FDBB0133FECB01CF
|
||||
:1001A0002320710123228101232491012326A1010F
|
||||
:1001B0002328B101232AC101971C0000938CCCE5B0
|
||||
:1001C000171D0000130D8DEE03AE0C001302F00797
|
||||
:1001D0009302F0031303F0019303F0001304700083
|
||||
:1001E00093043000B37E4E0033FF5E00B37F6F0098
|
||||
:1001F000B3F07F0033F18000B371910023204D00F4
|
||||
:100200002322CD012324DD012326ED012328FD0136
|
||||
:10021000232A1D00232C2D00232E3D0097100000C3
|
||||
:100220009380C0DF17110000130141EA03AE000004
|
||||
:10023000B79DFFF7938D8D813370BE0123200100A0
|
||||
:10024000971000009380C0DD17110000130141E8F2
|
||||
:1002500003AE0000B79DFFF7938D8D813370BE0113
|
||||
:10026000B3720000232001002322510097100000E8
|
||||
:10027000938040DB17110000130101E683A1000009
|
||||
:100280009303F0FF33F27100B372720033F3530043
|
||||
:1002900033777300B377770033F87700B3FC03014B
|
||||
:1002A00033FD9301B37D7D00232041002322A10172
|
||||
:1002B0002324B101171500001305C5D797150000B9
|
||||
:1002C000938545E2370610F01306C6F26306B502C1
|
||||
:1002D0008326C5002320D600832685002320D60050
|
||||
:1002E000832645002320D600832605002320D60040
|
||||
:1002F000130505016FF09FFD370510F0130505F29A
|
||||
:0403000023200500B1
|
||||
:101000000000000001000000FFFFFFFFFFFFFF7F67
|
||||
:1010100000000080FFFFCDAB7856341298BADCFE9A
|
||||
:10102000145892360000000000000000000000008C
|
||||
:10103000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC0
|
||||
:10104000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB0
|
||||
:10105000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA0
|
||||
:10106000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF90
|
||||
:10107000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF80
|
||||
:10108000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF70
|
||||
:10109000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF60
|
||||
:1010A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF50
|
||||
:1010B000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF40
|
||||
:1010C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF30
|
||||
:1010D000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF20
|
||||
:040000058000000077
|
||||
:00000001FF
|
||||
56
emulator/riscv_tests/I-ANDI-01.elf.hex
Normal file
56
emulator/riscv_tests/I-ANDI-01.elf.hex
Normal file
@@ -0,0 +1,56 @@
|
||||
:0200000480007A
|
||||
:100000009710000093800000171100001301810277
|
||||
:1000100083A1000013F2110093F2F17F13F3F1FFBB
|
||||
:1000200093F3010013F401802320310023224100C7
|
||||
:10003000232451002326610023287100232A8100F4
|
||||
:1000400097100000938040FC17110000130101007D
|
||||
:1000500003A40000937414001375F47F9375F4FFE8
|
||||
:1000600013760400937604802320810023229100DC
|
||||
:100070002324A1002326B1002328C100232AD10074
|
||||
:1000800097100000938080F817110000130181FD84
|
||||
:1000900083A6000013F7160093F7F67F13F8F6FF18
|
||||
:1000A00093F8060013F906802320D1002322E100F3
|
||||
:1000B0002324F1002326010123281101232A2101F1
|
||||
:1000C000971000009380C0F417110000130101FB8A
|
||||
:1000D00003A9000093791900137AF97F937AF9FF45
|
||||
:1000E000137B0900937B0980232021012322310106
|
||||
:1000F000232441012326510123286101232A710170
|
||||
:1001000097100000938000F117110000130181F88F
|
||||
:1001100083AB000013FC1B0093FCFB7F13FDFBFF74
|
||||
:1001200093FD0B0013FE0B8023207101232281011C
|
||||
:10013000232491012326A1012328B101232AC101EF
|
||||
:10014000171D0000130D4DED971D0000938D0DF64A
|
||||
:10015000032E0D00937EFE0713FFFE03937FFF0126
|
||||
:1001600093F0FF0013F170009371310023A0CD01D3
|
||||
:1001700023A2DD0123A4ED0123A6FD0123A81D0078
|
||||
:1001800023AA2D0023AC3D0097100000938000E9C6
|
||||
:1001900017110000130141F383A2000013F01200B5
|
||||
:1001A0002320010097100000938080E717110000C2
|
||||
:1001B0001301C1F183A2000013F01200937210002A
|
||||
:1001C000232001002322510097100000938080E536
|
||||
:1001D00017110000130101F083A1000013F2F1FFD9
|
||||
:1001E0009372F2FF13F3F2FF1377F3FF9377F7FFA6
|
||||
:1001F00013F8F7FF937CF8FF13FDFCFF937DFDFFE1
|
||||
:1002000023203100232241002324A1012326B10110
|
||||
:1002100017150000130505E297150000938585EC7E
|
||||
:10022000370610F01306C6F26306B5028326C50032
|
||||
:100230002320D600832685002320D6008326450070
|
||||
:100240002320D600832605002320D60013050501B0
|
||||
:100250006FF09FFD370510F0130505F22320050010
|
||||
:04026000000000009A
|
||||
:101000000000000001000000FFFFFFFFFFFFFF7F67
|
||||
:1010100000000080FFFFCDAB7856341298BADCFE9A
|
||||
:10102000145892360000000000000000000000008C
|
||||
:10103000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC0
|
||||
:10104000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB0
|
||||
:10105000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA0
|
||||
:10106000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF90
|
||||
:10107000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF80
|
||||
:10108000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF70
|
||||
:10109000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF60
|
||||
:1010A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF50
|
||||
:1010B000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF40
|
||||
:1010C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF30
|
||||
:1010D000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF20
|
||||
:040000058000000077
|
||||
:00000001FF
|
||||
42
emulator/riscv_tests/I-AUIPC-01.elf.hex
Normal file
42
emulator/riscv_tests/I-AUIPC-01.elf.hex
Normal file
@@ -0,0 +1,42 @@
|
||||
:0200000480007A
|
||||
:100000001717000013070700971700009387870151
|
||||
:10001000832007003711000013014100B7F1FFFFF3
|
||||
:100020009381810037F2FF7F1302C200B702008084
|
||||
:100030009382020133812000B3813000338240007B
|
||||
:10004000B3825000170300009713000017F8FFFF5A
|
||||
:1000500097FEFF7F970F008033431300B3C3230045
|
||||
:1000600033483800B3CE4E00B3CF5F0023A0670003
|
||||
:1000700023A2770023A4070123A6D70123A8F70111
|
||||
:1000800097180000938848F8171800001308C8FA5A
|
||||
:10009000B710111193801011372122221301212250
|
||||
:1000A000B737333393873733374E4444130E4E44B8
|
||||
:1000B000375F5555130F5F5583A108003702008045
|
||||
:1000C000B7F2FF7F9382420013038000B713000052
|
||||
:1000D0009383C30037F4FFFF13040401338241000C
|
||||
:1000E000B382510033836100B38371003384810094
|
||||
:1000F0009700008017F1FF7F97070000171E000090
|
||||
:1001000017FFFFFFB3C0400033415100B3C7670082
|
||||
:10011000334E7E00334F8F00232018002322280007
|
||||
:100120002324F8002326C8012328E801171900001A
|
||||
:100130001309C9ED97180000938848F1832009003E
|
||||
:10014000032149008321890017020000130242FFA6
|
||||
:100150009707000093878701170F0000130F0F0404
|
||||
:10016000970200009382C2FD1708000013080800E0
|
||||
:10017000970F0000938F8F0233421200B3C72700FE
|
||||
:10018000334F3F00B382124033482800B3CF3F00C3
|
||||
:1001900023A0480023A2F80023A4E80123A65800C6
|
||||
:1001A00023A8080123AAF80117150000130585E705
|
||||
:1001B00097150000938505EB370610F01306C6F27D
|
||||
:1001C0006306B5028326C5002320D600832685005A
|
||||
:1001D0002320D600832645002320D6008326050051
|
||||
:1001E0002320D600130505016FF09FFD370510F0A1
|
||||
:1001F000130505F2232005000000000000000000A8
|
||||
:0402000000000000FA
|
||||
:1010000044000080F00000803C0100806801008006
|
||||
:1010100098010080000000000000000000000000B7
|
||||
:10102000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD0
|
||||
:10103000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC0
|
||||
:10104000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB0
|
||||
:10105000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA0
|
||||
:040000058000000077
|
||||
:00000001FF
|
||||
72
emulator/riscv_tests/I-BEQ-01.elf.hex
Normal file
72
emulator/riscv_tests/I-BEQ-01.elf.hex
Normal file
@@ -0,0 +1,72 @@
|
||||
:0200000480007A
|
||||
:100000009710000093800000171100001301810178
|
||||
:1000100083A1000013020000930210001303F0FFFD
|
||||
:10002000B70300809383F3FF37040080930F000031
|
||||
:100030006384410093EF1F006384510093EF2F000E
|
||||
:100040006384610093EF4F006384710093EF8F002E
|
||||
:100050006384810093EF0F012320310023224100AC
|
||||
:10006000232451002326610023287100232A8100C4
|
||||
:10007000232CF10197100000938000F91711000064
|
||||
:10008000130101FC03A300009303000013041000FC
|
||||
:100090009304F0FF370500801305F5FFB7050080D6
|
||||
:1000A000930F00006304730093EF1F006304830049
|
||||
:1000B00093EF2F006304930093EF4F006304A300BA
|
||||
:1000C00093EF8F006304B30093EF0F0123206100CF
|
||||
:1000D0002322710023248100232691002328A100DC
|
||||
:1000E000232AB100232CF10197100000938000F225
|
||||
:1000F00017110000130181F603A60000930600000B
|
||||
:10010000130710009307F0FF370800801308F8FF6B
|
||||
:10011000B7080080930F00006304D60093EF1F0020
|
||||
:100120006304E60093EF2F006304F60093EF4F00A3
|
||||
:100130006304060193EF8F006304160193EF0F0130
|
||||
:100140002320C1002322D1002324E1002326F10033
|
||||
:1001500023280101232A1101232CF101971000000B
|
||||
:10016000938000EB17110000130101F103A90000B7
|
||||
:1001700093090000130A1000930AF0FF370B008068
|
||||
:10018000130BFBFFB70B0080930F000063043901D2
|
||||
:1001900093EF1F006304490193EF2F00630459019B
|
||||
:1001A00093EF4F006304690193EF8F0063047901BB
|
||||
:1001B00093EF0F0123202101232231012324410148
|
||||
:1001C0002326510123286101232A7101232CF101E7
|
||||
:1001D00097100000938000E417110000130181EBD9
|
||||
:1001E00003AC0000930C0000130D1000930DF0FF02
|
||||
:1001F000370E0080130EFEFFB70E0080930F000035
|
||||
:1002000063049C0193EF1F006304AC0193EF2F0084
|
||||
:100210006304BC0193EF4F006304CC0193EF8F00A4
|
||||
:100220006304DC0193EF0F0123208101232291015C
|
||||
:100230002324A1012326B1012328C101232AD101AE
|
||||
:10024000232CF101971D0000938D8DE69300000093
|
||||
:10025000130110009301F0FF370200801302F2FF38
|
||||
:10026000B7020080930F00006384000093EF1F002B
|
||||
:100270006304010093EF2F006384010093EF4F00AC
|
||||
:100280006304020093EF8F006384020093EF0F0179
|
||||
:100290006304100093EF0F026304200093EF0F0438
|
||||
:1002A0006304300093EF0F086304400093EF0F10D6
|
||||
:1002B0006304500093EF0F2023A0FD01971A000064
|
||||
:1002C000938A8AD5171B0000130BCBDE83AF0A007D
|
||||
:1002D0001301F0FF9301F0FF37D2ED0F130292BA32
|
||||
:1002E00063840F0213010000930100001302000059
|
||||
:1002F000B74165879381113263840F0213010000B7
|
||||
:10030000930100001302000037E1BC9A130101EFD2
|
||||
:10031000E3800FFE130100009301000013020000B0
|
||||
:1003200023200B0023222B0023243B0023264B00F9
|
||||
:1003300017150000130505CF97150000938585D884
|
||||
:10034000370610F01306C6F26306B5028326C50011
|
||||
:100350002320D600832685002320D600832645004F
|
||||
:100360002320D600832605002320D600130505018F
|
||||
:100370006FF09FFD370510F0130505F223200500EF
|
||||
:040380000000000079
|
||||
:101000000000000001000000FFFFFFFFFFFFFF7F67
|
||||
:101010000000008000000000000000000000000050
|
||||
:10102000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD0
|
||||
:10103000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC0
|
||||
:10104000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB0
|
||||
:10105000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA0
|
||||
:10106000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF90
|
||||
:10107000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF80
|
||||
:10108000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF70
|
||||
:10109000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF60
|
||||
:1010A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF50
|
||||
:1010B000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF40
|
||||
:040000058000000077
|
||||
:00000001FF
|
||||
72
emulator/riscv_tests/I-BGE-01.elf.hex
Normal file
72
emulator/riscv_tests/I-BGE-01.elf.hex
Normal file
@@ -0,0 +1,72 @@
|
||||
:0200000480007A
|
||||
:100000009710000093800000171100001301810178
|
||||
:1000100083A1000013020000930210001303F0FFFD
|
||||
:10002000B70300809383F3FF37040080930F000031
|
||||
:1000300063D4410093EF1F0063D4510093EF2F006E
|
||||
:1000400063D4610093EF4F0063D4710093EF8F008E
|
||||
:1000500063D4810093EF0F0123203100232241005C
|
||||
:10006000232451002326610023287100232A8100C4
|
||||
:10007000232CF10197100000938000F91711000064
|
||||
:10008000130101FC03A300009303000013041000FC
|
||||
:100090009304F0FF370500801305F5FFB7050080D6
|
||||
:1000A000930F00006354730093EF1F0063548300A9
|
||||
:1000B00093EF2F006354930093EF4F006354A3001A
|
||||
:1000C00093EF8F006354B30093EF0F01232061007F
|
||||
:1000D0002322710023248100232691002328A100DC
|
||||
:1000E000232AB100232CF10197100000938000F225
|
||||
:1000F00017110000130181F603A60000930600000B
|
||||
:10010000130710009307F0FF370800801308F8FF6B
|
||||
:10011000B7080080930F00006354D60093EF1F00D0
|
||||
:100120006354E60093EF2F006354F60093EF4F0003
|
||||
:100130006354060193EF8F006354160193EF0F0190
|
||||
:100140002320C1002322D1002324E1002326F10033
|
||||
:1001500023280101232A1101232CF101971000000B
|
||||
:10016000938000EB17110000130101F103A90000B7
|
||||
:1001700093090000130A1000930AF0FF370B008068
|
||||
:10018000130BFBFFB70B0080930F00006354390182
|
||||
:1001900093EF1F006354490193EF2F0063545901FB
|
||||
:1001A00093EF4F006354690193EF8F00635479011B
|
||||
:1001B00093EF0F0123202101232231012324410148
|
||||
:1001C0002326510123286101232A7101232CF101E7
|
||||
:1001D00097100000938000E417110000130181EBD9
|
||||
:1001E00003AC0000930C0000130D1000930DF0FF02
|
||||
:1001F000370E0080130EFEFFB70E0080930F000035
|
||||
:1002000063549C0193EF1F006354AC0193EF2F00E4
|
||||
:100210006354BC0193EF4F006354CC0193EF8F0004
|
||||
:100220006354DC0193EF0F0123208101232291010C
|
||||
:100230002324A1012326B1012328C101232AD101AE
|
||||
:10024000232CF101971D0000938D8DE69300000093
|
||||
:10025000130110009301F0FF370200801302F2FF38
|
||||
:10026000B7020080930F000063D4000093EF1F00DB
|
||||
:100270006354010093EF2F0063D4010093EF4F000C
|
||||
:100280006354020093EF8F0063D4020093EF0F01D9
|
||||
:100290006354100093EF0F026354200093EF0F0498
|
||||
:1002A0006354300093EF0F086354400093EF0F1036
|
||||
:1002B0006354500093EF0F2023A0FD01971A000014
|
||||
:1002C000938A8AD5171B0000130BCBDE83AF0A007D
|
||||
:1002D0001301F0FF9301F0FF37D2ED0F130292BA32
|
||||
:1002E00063D40F0213010000930100001302000009
|
||||
:1002F000B74165879381113263D40F021301000067
|
||||
:10030000930100001302000037E1BC9A130101EFD2
|
||||
:10031000E3D00FFE13010000930100001302000060
|
||||
:1003200023200B0023222B0023243B0023264B00F9
|
||||
:1003300017150000130505CF97150000938585D884
|
||||
:10034000370610F01306C6F26306B5028326C50011
|
||||
:100350002320D600832685002320D600832645004F
|
||||
:100360002320D600832605002320D600130505018F
|
||||
:100370006FF09FFD370510F0130505F223200500EF
|
||||
:040380000000000079
|
||||
:101000000000000001000000FFFFFFFFFFFFFF7F67
|
||||
:10101000000000800100000000000000000000004F
|
||||
:10102000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD0
|
||||
:10103000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC0
|
||||
:10104000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB0
|
||||
:10105000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA0
|
||||
:10106000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF90
|
||||
:10107000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF80
|
||||
:10108000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF70
|
||||
:10109000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF60
|
||||
:1010A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF50
|
||||
:1010B000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF40
|
||||
:040000058000000077
|
||||
:00000001FF
|
||||
72
emulator/riscv_tests/I-BGEU-01.elf.hex
Normal file
72
emulator/riscv_tests/I-BGEU-01.elf.hex
Normal file
@@ -0,0 +1,72 @@
|
||||
:0200000480007A
|
||||
:100000009710000093800000171100001301810178
|
||||
:1000100083A1000013020000930210001303F0FFFD
|
||||
:10002000B70300809383F3FF37040080930F000031
|
||||
:1000300063F4410093EF1F0063F4510093EF2F002E
|
||||
:1000400063F4610093EF4F0063F4710093EF8F004E
|
||||
:1000500063F4810093EF0F0123203100232241003C
|
||||
:10006000232451002326610023287100232A8100C4
|
||||
:10007000232CF10197100000938000F91711000064
|
||||
:10008000130101FC03A300009303000013041000FC
|
||||
:100090009304F0FF370500801305F5FFB7050080D6
|
||||
:1000A000930F00006374730093EF1F006374830069
|
||||
:1000B00093EF2F006374930093EF4F006374A300DA
|
||||
:1000C00093EF8F006374B30093EF0F01232061005F
|
||||
:1000D0002322710023248100232691002328A100DC
|
||||
:1000E000232AB100232CF10197100000938000F225
|
||||
:1000F00017110000130181F603A60000930600000B
|
||||
:10010000130710009307F0FF370800801308F8FF6B
|
||||
:10011000B7080080930F00006374D60093EF1F00B0
|
||||
:100120006374E60093EF2F006374F60093EF4F00C3
|
||||
:100130006374060193EF8F006374160193EF0F0150
|
||||
:100140002320C1002322D1002324E1002326F10033
|
||||
:1001500023280101232A1101232CF101971000000B
|
||||
:10016000938000EB17110000130101F103A90000B7
|
||||
:1001700093090000130A1000930AF0FF370B008068
|
||||
:10018000130BFBFFB70B0080930F00006374390162
|
||||
:1001900093EF1F006374490193EF2F0063745901BB
|
||||
:1001A00093EF4F006374690193EF8F0063747901DB
|
||||
:1001B00093EF0F0123202101232231012324410148
|
||||
:1001C0002326510123286101232A7101232CF101E7
|
||||
:1001D00097100000938000E417110000130181EBD9
|
||||
:1001E00003AC0000930C0000130D1000930DF0FF02
|
||||
:1001F000370E0080130EFEFFB70E0080930F000035
|
||||
:1002000063749C0193EF1F006374AC0193EF2F00A4
|
||||
:100210006374BC0193EF4F006374CC0193EF8F00C4
|
||||
:100220006374DC0193EF0F012320810123229101EC
|
||||
:100230002324A1012326B1012328C101232AD101AE
|
||||
:10024000232CF101971D0000938D8DE69300000093
|
||||
:10025000130110009301F0FF370200801302F2FF38
|
||||
:10026000B7020080930F000063F4000093EF1F00BB
|
||||
:100270006374010093EF2F0063F4010093EF4F00CC
|
||||
:100280006374020093EF8F0063F4020093EF0F0199
|
||||
:100290006374100093EF0F026374200093EF0F0458
|
||||
:1002A0006374300093EF0F086374400093EF0F10F6
|
||||
:1002B0006374500093EF0F2023A0FD01971A0000F4
|
||||
:1002C000938A8AD5171B0000130BCBDE83AF0A007D
|
||||
:1002D0001301F0FF9301F0FF37D2ED0F130292BA32
|
||||
:1002E00063F40F02130100009301000013020000E9
|
||||
:1002F000B74165879381113263F40F021301000047
|
||||
:10030000930100001302000037E1BC9A130101EFD2
|
||||
:10031000E3F00FFE13010000930100001302000040
|
||||
:1003200023200B0023222B0023243B0023264B00F9
|
||||
:1003300017150000130505CF97150000938585D884
|
||||
:10034000370610F01306C6F26306B5028326C50011
|
||||
:100350002320D600832685002320D600832645004F
|
||||
:100360002320D600832605002320D600130505018F
|
||||
:100370006FF09FFD370510F0130505F223200500EF
|
||||
:040380000000000079
|
||||
:101000000000000001000000FFFFFFFFFFFFFF7F67
|
||||
:10101000000000800100000000000000000000004F
|
||||
:10102000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD0
|
||||
:10103000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC0
|
||||
:10104000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB0
|
||||
:10105000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA0
|
||||
:10106000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF90
|
||||
:10107000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF80
|
||||
:10108000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF70
|
||||
:10109000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF60
|
||||
:1010A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF50
|
||||
:1010B000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF40
|
||||
:040000058000000077
|
||||
:00000001FF
|
||||
72
emulator/riscv_tests/I-BLT-01.elf.hex
Normal file
72
emulator/riscv_tests/I-BLT-01.elf.hex
Normal file
@@ -0,0 +1,72 @@
|
||||
:0200000480007A
|
||||
:100000009710000093800000171100001301810178
|
||||
:1000100083A1000013020000930210001303F0FFFD
|
||||
:10002000B70300809383F3FF37040080930F000031
|
||||
:1000300063C4410093EF1F0063C4510093EF2F008E
|
||||
:1000400063C4610093EF4F0063C4710093EF8F00AE
|
||||
:1000500063C4810093EF0F0123203100232241006C
|
||||
:10006000232451002326610023287100232A8100C4
|
||||
:10007000232CF10197100000938000F91711000064
|
||||
:10008000130101FC03A300009303000013041000FC
|
||||
:100090009304F0FF370500801305F5FFB7050080D6
|
||||
:1000A000930F00006344730093EF1F0063448300C9
|
||||
:1000B00093EF2F006344930093EF4F006344A3003A
|
||||
:1000C00093EF8F006344B30093EF0F01232061008F
|
||||
:1000D0002322710023248100232691002328A100DC
|
||||
:1000E000232AB100232CF10197100000938000F225
|
||||
:1000F00017110000130181F603A60000930600000B
|
||||
:10010000130710009307F0FF370800801308F8FF6B
|
||||
:10011000B7080080930F00006344D60093EF1F00E0
|
||||
:100120006344E60093EF2F006344F60093EF4F0023
|
||||
:100130006344060193EF8F006344160193EF0F01B0
|
||||
:100140002320C1002322D1002324E1002326F10033
|
||||
:1001500023280101232A1101232CF101971000000B
|
||||
:10016000938000EB17110000130101F103A90000B7
|
||||
:1001700093090000130A1000930AF0FF370B008068
|
||||
:10018000130BFBFFB70B0080930F00006344390192
|
||||
:1001900093EF1F006344490193EF2F00634459011B
|
||||
:1001A00093EF4F006344690193EF8F00634479013B
|
||||
:1001B00093EF0F0123202101232231012324410148
|
||||
:1001C0002326510123286101232A7101232CF101E7
|
||||
:1001D00097100000938000E417110000130181EBD9
|
||||
:1001E00003AC0000930C0000130D1000930DF0FF02
|
||||
:1001F000370E0080130EFEFFB70E0080930F000035
|
||||
:1002000063449C0193EF1F006344AC0193EF2F0004
|
||||
:100210006344BC0193EF4F006344CC0193EF8F0024
|
||||
:100220006344DC0193EF0F0123208101232291011C
|
||||
:100230002324A1012326B1012328C101232AD101AE
|
||||
:10024000232CF101971D0000938D8DE69300000093
|
||||
:10025000130110009301F0FF370200801302F2FF38
|
||||
:10026000B7020080930F000063C4000093EF1F00EB
|
||||
:100270006344010093EF2F0063C4010093EF4F002C
|
||||
:100280006344020093EF8F0063C4020093EF0F01F9
|
||||
:100290006344100093EF0F026344200093EF0F04B8
|
||||
:1002A0006344300093EF0F086344400093EF0F1056
|
||||
:1002B0006344500093EF0F2023A0FD01971A000024
|
||||
:1002C000938A8AD5171B0000130BCBDE83AF0A007D
|
||||
:1002D0001301F0FF9301F0FF37D2ED0F130292BA32
|
||||
:1002E00063C40F0213010000930100001302000019
|
||||
:1002F000B74165879381113263C40F021301000077
|
||||
:10030000930100001302000037E1BC9A130101EFD2
|
||||
:10031000E3C00FFE13010000930100001302000070
|
||||
:1003200023200B0023222B0023243B0023264B00F9
|
||||
:1003300017150000130505CF97150000938585D884
|
||||
:10034000370610F01306C6F26306B5028326C50011
|
||||
:100350002320D600832685002320D600832645004F
|
||||
:100360002320D600832605002320D600130505018F
|
||||
:100370006FF09FFD370510F0130505F223200500EF
|
||||
:040380000000000079
|
||||
:101000000000000001000000FFFFFFFFFFFFFF7F67
|
||||
:1010100000000080FFFFFFFF000000000000000054
|
||||
:10102000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD0
|
||||
:10103000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC0
|
||||
:10104000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB0
|
||||
:10105000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA0
|
||||
:10106000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF90
|
||||
:10107000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF80
|
||||
:10108000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF70
|
||||
:10109000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF60
|
||||
:1010A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF50
|
||||
:1010B000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF40
|
||||
:040000058000000077
|
||||
:00000001FF
|
||||
72
emulator/riscv_tests/I-BLTU-01.elf.hex
Normal file
72
emulator/riscv_tests/I-BLTU-01.elf.hex
Normal file
@@ -0,0 +1,72 @@
|
||||
:0200000480007A
|
||||
:100000009710000093800000171100001301810178
|
||||
:1000100083A1000013020000930210001303F0FFFD
|
||||
:10002000B70300809383F3FF37040080930F000031
|
||||
:1000300063E4410093EF1F0063E4510093EF2F004E
|
||||
:1000400063E4610093EF4F0063E4710093EF8F006E
|
||||
:1000500063E4810093EF0F0123203100232241004C
|
||||
:10006000232451002326610023287100232A8100C4
|
||||
:10007000232CF10197100000938000F91711000064
|
||||
:10008000130101FC03A300009303000013041000FC
|
||||
:100090009304F0FF370500801305F5FFB7050080D6
|
||||
:1000A000930F00006364730093EF1F006364830089
|
||||
:1000B00093EF2F006364930093EF4F006364A300FA
|
||||
:1000C00093EF8F006364B30093EF0F01232061006F
|
||||
:1000D0002322710023248100232691002328A100DC
|
||||
:1000E000232AB100232CF10197100000938000F225
|
||||
:1000F00017110000130181F603A60000930600000B
|
||||
:10010000130710009307F0FF370800801308F8FF6B
|
||||
:10011000B7080080930F00006364D60093EF1F00C0
|
||||
:100120006364E60093EF2F006364F60093EF4F00E3
|
||||
:100130006364060193EF8F006364160193EF0F0170
|
||||
:100140002320C1002322D1002324E1002326F10033
|
||||
:1001500023280101232A1101232CF101971000000B
|
||||
:10016000938000EB17110000130101F103A90000B7
|
||||
:1001700093090000130A1000930AF0FF370B008068
|
||||
:10018000130BFBFFB70B0080930F00006364390172
|
||||
:1001900093EF1F006364490193EF2F0063645901DB
|
||||
:1001A00093EF4F006364690193EF8F0063647901FB
|
||||
:1001B00093EF0F0123202101232231012324410148
|
||||
:1001C0002326510123286101232A7101232CF101E7
|
||||
:1001D00097100000938000E417110000130181EBD9
|
||||
:1001E00003AC0000930C0000130D1000930DF0FF02
|
||||
:1001F000370E0080130EFEFFB70E0080930F000035
|
||||
:1002000063649C0193EF1F006364AC0193EF2F00C4
|
||||
:100210006364BC0193EF4F006364CC0193EF8F00E4
|
||||
:100220006364DC0193EF0F012320810123229101FC
|
||||
:100230002324A1012326B1012328C101232AD101AE
|
||||
:10024000232CF101971D0000938D8DE69300000093
|
||||
:10025000130110009301F0FF370200801302F2FF38
|
||||
:10026000B7020080930F000063E4000093EF1F00CB
|
||||
:100270006364010093EF2F0063E4010093EF4F00EC
|
||||
:100280006364020093EF8F0063E4020093EF0F01B9
|
||||
:100290006364100093EF0F026364200093EF0F0478
|
||||
:1002A0006364300093EF0F086364400093EF0F1016
|
||||
:1002B0006364500093EF0F2023A0FD01971A000004
|
||||
:1002C000938A8AD5171B0000130BCBDE83AF0A007D
|
||||
:1002D0001301F0FF9301F0FF37D2ED0F130292BA32
|
||||
:1002E0006364F00313010000930100001302000097
|
||||
:1002F000B7416587938111326364F00313010000F5
|
||||
:10030000930100001302000037E1BC9A130101EFD2
|
||||
:10031000E360F0FF130100009301000013020000EE
|
||||
:1003200023200B0023222B0023243B0023264B00F9
|
||||
:1003300017150000130505CF97150000938585D884
|
||||
:10034000370610F01306C6F26306B5028326C50011
|
||||
:100350002320D600832685002320D600832645004F
|
||||
:100360002320D600832605002320D600130505018F
|
||||
:100370006FF09FFD370510F0130505F223200500EF
|
||||
:040380000000000079
|
||||
:101000000000000001000000FFFFFFFFFFFFFF7F67
|
||||
:10101000000000800100000000000000000000004F
|
||||
:10102000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD0
|
||||
:10103000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC0
|
||||
:10104000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB0
|
||||
:10105000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA0
|
||||
:10106000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF90
|
||||
:10107000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF80
|
||||
:10108000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF70
|
||||
:10109000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF60
|
||||
:1010A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF50
|
||||
:1010B000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF40
|
||||
:040000058000000077
|
||||
:00000001FF
|
||||
72
emulator/riscv_tests/I-BNE-01.elf.hex
Normal file
72
emulator/riscv_tests/I-BNE-01.elf.hex
Normal file
@@ -0,0 +1,72 @@
|
||||
:0200000480007A
|
||||
:100000009710000093800000171100001301810178
|
||||
:1000100083A1000013020000930210001303F0FFFD
|
||||
:10002000B70300809383F3FF37040080930F000031
|
||||
:100030006394410093EF1F006394510093EF2F00EE
|
||||
:100040006394610093EF4F006394710093EF8F000E
|
||||
:100050006394810093EF0F0123203100232241009C
|
||||
:10006000232451002326610023287100232A8100C4
|
||||
:10007000232CF10197100000938000F91711000064
|
||||
:10008000130101FC03A300009303000013041000FC
|
||||
:100090009304F0FF370500801305F5FFB7050080D6
|
||||
:1000A000930F00006314730093EF1F006314830029
|
||||
:1000B00093EF2F006314930093EF4F006314A3009A
|
||||
:1000C00093EF8F006314B30093EF0F0123206100BF
|
||||
:1000D0002322710023248100232691002328A100DC
|
||||
:1000E000232AB100232CF10197100000938000F225
|
||||
:1000F00017110000130181F603A60000930600000B
|
||||
:10010000130710009307F0FF370800801308F8FF6B
|
||||
:10011000B7080080930F00006314D60093EF1F0010
|
||||
:100120006314E60093EF2F006314F60093EF4F0083
|
||||
:100130006314060193EF8F006314160193EF0F0110
|
||||
:100140002320C1002322D1002324E1002326F10033
|
||||
:1001500023280101232A1101232CF101971000000B
|
||||
:10016000938000EB17110000130101F103A90000B7
|
||||
:1001700093090000130A1000930AF0FF370B008068
|
||||
:10018000130BFBFFB70B0080930F000063143901C2
|
||||
:1001900093EF1F006314490193EF2F00631459017B
|
||||
:1001A00093EF4F006314690193EF8F00631479019B
|
||||
:1001B00093EF0F0123202101232231012324410148
|
||||
:1001C0002326510123286101232A7101232CF101E7
|
||||
:1001D00097100000938000E417110000130181EBD9
|
||||
:1001E00003AC0000930C0000130D1000930DF0FF02
|
||||
:1001F000370E0080130EFEFFB70E0080930F000035
|
||||
:1002000063149C0193EF1F006314AC0193EF2F0064
|
||||
:100210006314BC0193EF4F006314CC0193EF8F0084
|
||||
:100220006314DC0193EF0F0123208101232291014C
|
||||
:100230002324A1012326B1012328C101232AD101AE
|
||||
:10024000232CF101971D0000938D8DE69300000093
|
||||
:10025000130110009301F0FF370200801302F2FF38
|
||||
:10026000B7020080930F00006394000093EF1F001B
|
||||
:100270006314010093EF2F006394010093EF4F008C
|
||||
:100280006314020093EF8F006394020093EF0F0159
|
||||
:100290006314100093EF0F026314200093EF0F0418
|
||||
:1002A0006314300093EF0F086314400093EF0F10B6
|
||||
:1002B0006314500093EF0F2023A0FD01971A000054
|
||||
:1002C000938A8AD5171B0000130BCBDE83AF0A007D
|
||||
:1002D0001301F0FF9301F0FF37D2ED0F130292BA32
|
||||
:1002E00063940F0213010000930100001302000049
|
||||
:1002F000B74165879381113263940F0213010000A7
|
||||
:10030000930100001302000037E1BC9A130101EFD2
|
||||
:10031000E3900FFE130100009301000013020000A0
|
||||
:1003200023200B0023222B0023243B0023264B00F9
|
||||
:1003300017150000130505CF97150000938585D884
|
||||
:10034000370610F01306C6F26306B5028326C50011
|
||||
:100350002320D600832685002320D600832645004F
|
||||
:100360002320D600832605002320D600130505018F
|
||||
:100370006FF09FFD370510F0130505F223200500EF
|
||||
:040380000000000079
|
||||
:101000000000000001000000FFFFFFFFFFFFFF7F67
|
||||
:1010100000000080FFFFFFFF000000000000000054
|
||||
:10102000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD0
|
||||
:10103000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC0
|
||||
:10104000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB0
|
||||
:10105000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA0
|
||||
:10106000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF90
|
||||
:10107000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF80
|
||||
:10108000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF70
|
||||
:10109000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF60
|
||||
:1010A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF50
|
||||
:1010B000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF40
|
||||
:040000058000000077
|
||||
:00000001FF
|
||||
39
emulator/riscv_tests/I-CSRRC-01.elf.hex
Normal file
39
emulator/riscv_tests/I-CSRRC-01.elf.hex
Normal file
@@ -0,0 +1,39 @@
|
||||
:0200000480007A
|
||||
:10000000971700009387070093001000130100006A
|
||||
:10001000B701F17F9381F1FF370200809302F0FF77
|
||||
:1000200073900234F3B00034F3900234733101342E
|
||||
:1000300073910234F3B10134F39102347332023418
|
||||
:1000400073920234F3B20234F312003423A0070097
|
||||
:1000500023A2170023A4270023A6370023A84700C4
|
||||
:1000600023AA570097120000938242FB93051000C9
|
||||
:1000700013060000B706F17F9386F6FF370700806E
|
||||
:100080009307F0FF73900734F3B5053473360634E5
|
||||
:10009000F3B6063473370734F3B7073473380034D4
|
||||
:1000A00023A0B20023A2C20023A4D20023A6E20010
|
||||
:1000B00023A8F20023AA0201171D0000130D8DF7DB
|
||||
:1000C000B75A3412938A8A67130AF0FF73100A34FE
|
||||
:1000D00073BB0A34F33A0B34F31B0A3473BC0B348E
|
||||
:1000E000F33C003423205D0123226D0123247D0194
|
||||
:1000F00023268D0123289D01971000009380C0F4D2
|
||||
:10010000377F7242130FFFE673100F3473300F34D2
|
||||
:1001100023A0000023A2E00117110000130141F306
|
||||
:10012000B79FFFF7938F8F8173900F347330003434
|
||||
:1001300073300034F33F0034232001002322F10107
|
||||
:1001400017110000130141F11302F0FFB752389666
|
||||
:1001500093824227B7531632938383497310023434
|
||||
:10016000F3B20234F3B30334733404342320510064
|
||||
:10017000232271002324810017150000130585E850
|
||||
:1001800097150000938505EE370610F01306C6F2AA
|
||||
:100190006306B5028326C5002320D600832685008A
|
||||
:1001A0002320D600832645002320D6008326050081
|
||||
:1001B0002320D600130505016FF09FFD370510F0D1
|
||||
:1001C000130505F2232005000000000000000000D8
|
||||
:0401D000000000002B
|
||||
:10100000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0
|
||||
:10101000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0
|
||||
:10102000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD0
|
||||
:10103000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC0
|
||||
:10104000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB0
|
||||
:10105000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA0
|
||||
:040000058000000077
|
||||
:00000001FF
|
||||
25
emulator/riscv_tests/I-CSRRCI-01.elf.hex
Normal file
25
emulator/riscv_tests/I-CSRRCI-01.elf.hex
Normal file
@@ -0,0 +1,25 @@
|
||||
:0200000480007A
|
||||
:1000000097170000938707001304F0FF7310043460
|
||||
:10001000F3F00034F31004347371003473110434BA
|
||||
:10002000F3F10F34F311043473720834731204348F
|
||||
:10003000F3F20734F312043423A0070023A21700BD
|
||||
:1000400023A4270023A6370023A8470023AA57008C
|
||||
:1000500023AC870097120000938282FC1304F0FF08
|
||||
:1000600073100434F3F5003473760034F3F60F3470
|
||||
:1000700073770834F3F707347378003423A0B200A1
|
||||
:1000800023A2C20023A4D20023A6E20023A8F200E8
|
||||
:1000900023AA020123AC820097100000938000FA8B
|
||||
:1000A000375A1632130A8A4973100A3473F0073428
|
||||
:1000B000731A0A3423A0000023A240011715000080
|
||||
:1000C000130545F4971500009385C5F7370610F022
|
||||
:1000D0001306C6F26306B5028326C5002320D600A8
|
||||
:1000E000832685002320D600832645002320D600C2
|
||||
:1000F000832605002320D600130505016FF09FFD20
|
||||
:10010000370510F0130505F223200500000000005C
|
||||
:0401100000000000EB
|
||||
:10100000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0
|
||||
:10101000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0
|
||||
:10102000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD0
|
||||
:10103000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC0
|
||||
:040000058000000077
|
||||
:00000001FF
|
||||
38
emulator/riscv_tests/I-CSRRS-01.elf.hex
Normal file
38
emulator/riscv_tests/I-CSRRS-01.elf.hex
Normal file
@@ -0,0 +1,38 @@
|
||||
:0200000480007A
|
||||
:10000000971700009387070093001000130100006A
|
||||
:10001000B701F17F9381F1FF370200809302F0FF77
|
||||
:1000200073100034F3A00034F31000347321013452
|
||||
:1000300073110034F3A10134F3110034732202343C
|
||||
:1000400073120034F3A20234F312003423A0070029
|
||||
:1000500023A2170023A4270023A6370023A84700C4
|
||||
:1000600023AA570097120000938242FB93051000C9
|
||||
:1000700013060000B706F17F9386F6FF370700806E
|
||||
:100080009307F0FF73100034F3A50534732606348C
|
||||
:10009000F3A6063473270734F3A707347328003414
|
||||
:1000A00023A0B20023A2C20023A4D20023A6E20010
|
||||
:1000B00023A8F20023AA0201171D0000130D8DF7DB
|
||||
:1000C000B75A3412938A8A677310003473AB0A34B8
|
||||
:1000D000F32B0B34F31B003473AC0B34F32C0034D0
|
||||
:1000E00023205D0123226D0123247D0123268D0120
|
||||
:1000F00023289D0197100000938000F5377F7242FE
|
||||
:10010000130FFFE673100F3473200F3423A0000089
|
||||
:1001100023A2E00117110000130181F3B79FFFF73D
|
||||
:10012000938F8F8173900F347320003473200034C9
|
||||
:10013000F32F0034232001002322F10117110000C6
|
||||
:10014000130181F1B753163293838349B75238961E
|
||||
:100150009382422773100034F3A20234F3A30334D2
|
||||
:1001600073240434232051002322710023248100AE
|
||||
:1001700017150000130505E997150000938585EE16
|
||||
:10018000370610F01306C6F26306B5028326C500D3
|
||||
:100190002320D600832685002320D6008326450011
|
||||
:1001A0002320D600832605002320D6001305050151
|
||||
:1001B0006FF09FFD370510F0130505F223200500B1
|
||||
:0401C000000000003B
|
||||
:10100000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0
|
||||
:10101000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0
|
||||
:10102000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD0
|
||||
:10103000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC0
|
||||
:10104000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB0
|
||||
:10105000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA0
|
||||
:040000058000000077
|
||||
:00000001FF
|
||||
24
emulator/riscv_tests/I-CSRRSI-01.elf.hex
Normal file
24
emulator/riscv_tests/I-CSRRSI-01.elf.hex
Normal file
@@ -0,0 +1,24 @@
|
||||
:0200000480007A
|
||||
:10000000971700009387070073100034F3E0003463
|
||||
:10001000F31000347361003473110034F3E10F34D2
|
||||
:10002000F31100347362083473120034F3E20734BE
|
||||
:10003000F312003423A0070023A2170023A42700F3
|
||||
:1000400023A6370023A8470023AA570097120000D1
|
||||
:100050009382C2FC73100034F3E5003473660034FD
|
||||
:10006000F3E60F3473670834F3E70734736800343A
|
||||
:1000700023A0020023A2B20023A4C20023A6D20020
|
||||
:1000800023A8E20023AAF20023AC0201971000008B
|
||||
:10009000938080FA375A1632130A8A4973100A3449
|
||||
:1000A00073E00734F31A0A3423A0000023A250019E
|
||||
:1000B00023A44001171500001305C5F4971500008F
|
||||
:1000C000938545F8370610F01306C6F26306B502AD
|
||||
:1000D0008326C5002320D600832685002320D60052
|
||||
:1000E000832645002320D600832605002320D60042
|
||||
:1000F000130505016FF09FFD370510F0130505F29C
|
||||
:0401000023200500B3
|
||||
:10100000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0
|
||||
:10101000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0
|
||||
:10102000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD0
|
||||
:10103000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC0
|
||||
:040000058000000077
|
||||
:00000001FF
|
||||
30
emulator/riscv_tests/I-CSRRW-01.elf.hex
Normal file
30
emulator/riscv_tests/I-CSRRW-01.elf.hex
Normal file
@@ -0,0 +1,30 @@
|
||||
:0200000480007A
|
||||
:1000000097170000938707009300100093010000EA
|
||||
:100010009302F0FFB70D0080938DFDFFB70E0080B7
|
||||
:10002000731000347391003473920134739302346B
|
||||
:10003000739E0D34739F0E34F31F003423A02700EA
|
||||
:1000400023A2470023A4670023A6C70123A8E70132
|
||||
:1000500023AAF701171D0000130D4DFCB7503412F1
|
||||
:100060009380806737E1BC9A130101EF73900034ED
|
||||
:10007000F311013473920134F31202347313003418
|
||||
:1000800023203D0023224D0023245D0023266D0004
|
||||
:1000900097100000938080F9377172421301F1E6E6
|
||||
:1000A000731001347310003423A0000017110000F6
|
||||
:1000B000130101F8B79DFFF7938D8D8173900D3477
|
||||
:1000C0007310003473100034F31200342320010045
|
||||
:1000D0002322510017110000130101F6B753163205
|
||||
:1000E000938383493763721413036383B75238963B
|
||||
:1000F0009382422773100334F3920234F393033450
|
||||
:100100007314003423205100232271002324810022
|
||||
:1001100017150000130505EF97150000938585F26C
|
||||
:10012000370610F01306C6F26306B5028326C50033
|
||||
:100130002320D600832685002320D6008326450071
|
||||
:100140002320D600832605002320D60013050501B1
|
||||
:100150006FF09FFD370510F0130505F22320050011
|
||||
:04016000000000009B
|
||||
:10100000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0
|
||||
:10101000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0
|
||||
:10102000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD0
|
||||
:10103000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC0
|
||||
:040000058000000077
|
||||
:00000001FF
|
||||
16
emulator/riscv_tests/I-CSRRWI-01.elf.hex
Normal file
16
emulator/riscv_tests/I-CSRRWI-01.elf.hex
Normal file
@@ -0,0 +1,16 @@
|
||||
:0200000480007A
|
||||
:1000000097170000938707007310003473D10034F2
|
||||
:100010007352003473D30F3473DE0734735F0834C4
|
||||
:10002000F35F003423A0070023A2270023A4470086
|
||||
:1000300023A6670023A8C70123AAE70123ACF70181
|
||||
:10004000971000009380C0FD73D0073473500034C4
|
||||
:1000500023A00000171500001305C5FA971500002E
|
||||
:10006000938545FC370610F01306C6F26306B50209
|
||||
:100070008326C5002320D600832685002320D600B2
|
||||
:10008000832645002320D600832605002320D600A2
|
||||
:10009000130505016FF09FFD370510F0130505F2FC
|
||||
:0400A0002320050014
|
||||
:10100000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0
|
||||
:10101000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0
|
||||
:040000058000000077
|
||||
:00000001FF
|
||||
29
emulator/riscv_tests/I-DELAY_SLOTS-01.elf.hex
Normal file
29
emulator/riscv_tests/I-DELAY_SLOTS-01.elf.hex
Normal file
@@ -0,0 +1,29 @@
|
||||
:0200000480007A
|
||||
:100000009710000093800000371111111301111196
|
||||
:100010006F0080001301000023A020009710000053
|
||||
:10002000938080FE37212222130121221702000033
|
||||
:1000300013020201670002001301000023A0200048
|
||||
:1000400097100000938080FC93025000130360001F
|
||||
:10005000373133331301313363845200130100000D
|
||||
:1000600023A0200097100000938080FA9302500094
|
||||
:100070001303600037414444130141446394620018
|
||||
:100080001301000023A0200097100000938080F847
|
||||
:100090009302500013036000375155551301515519
|
||||
:1000A00063C462001301000023A020009710000029
|
||||
:1000B000938080F6930250001303600037616666F8
|
||||
:1000C0001301616663E462001301000023A02000B5
|
||||
:1000D00097100000938080F4930250001303600097
|
||||
:1000E0003771777713017177635453001301000060
|
||||
:1000F00023A0200097100000938080F2930250000C
|
||||
:10010000130360003791888813018188637453005A
|
||||
:100110001301000023A0200017150000130585EE31
|
||||
:1001200097150000938505F0370610F01306C6F208
|
||||
:100130006306B5028326C5002320D60083268500EA
|
||||
:100140002320D600832645002320D60083260500E1
|
||||
:100150002320D600130505016FF09FFD370510F031
|
||||
:10016000130505F223200500000000000000000038
|
||||
:04017000000000008B
|
||||
:10100000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0
|
||||
:10101000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0
|
||||
:040000058000000077
|
||||
:00000001FF
|
||||
15
emulator/riscv_tests/I-EBREAK-01.elf.hex
Normal file
15
emulator/riscv_tests/I-EBREAK-01.elf.hex
Normal file
@@ -0,0 +1,15 @@
|
||||
:0200000480007A
|
||||
:10000000970000009380C002F39F503097100000CB
|
||||
:10001000938040FF3711111113011111730010006B
|
||||
:1000200023A0000073905F306F008002732F1034A4
|
||||
:10003000130F4F0073101F34732F203423A0E001DF
|
||||
:1000400023A2200023A400009380C000730020306E
|
||||
:1000500017150000130505FB97150000938585FB18
|
||||
:10006000370610F01306C6F26306B5028326C500F4
|
||||
:100070002320D600832685002320D6008326450032
|
||||
:100080002320D600832605002320D6001305050172
|
||||
:100090006FF09FFD370510F0130505F223200500D2
|
||||
:0400A000000000005C
|
||||
:10100000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0
|
||||
:040000058000000077
|
||||
:00000001FF
|
||||
15
emulator/riscv_tests/I-ECALL-01.elf.hex
Normal file
15
emulator/riscv_tests/I-ECALL-01.elf.hex
Normal file
@@ -0,0 +1,15 @@
|
||||
:0200000480007A
|
||||
:10000000970000009380C002F39F503097100000CB
|
||||
:10001000938040FF3711111113011111730000007B
|
||||
:1000200023A0000073905F306F008002732F1034A4
|
||||
:10003000130F4F0073101F34732F203423A0E001DF
|
||||
:1000400023A2200023A400009380C000730020306E
|
||||
:1000500017150000130505FB97150000938585FB18
|
||||
:10006000370610F01306C6F26306B5028326C500F4
|
||||
:100070002320D600832685002320D6008326450032
|
||||
:100080002320D600832605002320D6001305050172
|
||||
:100090006FF09FFD370510F0130505F223200500D2
|
||||
:0400A000000000005C
|
||||
:10100000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0
|
||||
:040000058000000077
|
||||
:00000001FF
|
||||
17
emulator/riscv_tests/I-ENDIANESS-01.elf.hex
Normal file
17
emulator/riscv_tests/I-ENDIANESS-01.elf.hex
Normal file
@@ -0,0 +1,17 @@
|
||||
:0200000480007A
|
||||
:10000000171800001308480097180000938888000C
|
||||
:100010008320080003510800835128000342F8FFA1
|
||||
:100020008342080003431800834328000344380038
|
||||
:1000300023A0180023A2280023A4380023A64800E8
|
||||
:1000400023A8580023AA680023AC780023AE8800B8
|
||||
:1000500017150000130505FC97150000938585FD15
|
||||
:10006000370610F01306C6F26306B5028326C500F4
|
||||
:100070002320D600832685002320D6008326450032
|
||||
:100080002320D600832605002320D6001305050172
|
||||
:100090006FF09FFD370510F0130505F223200500D2
|
||||
:0400A000000000005C
|
||||
:10100000EFCDAB8967452301000000000000000020
|
||||
:10101000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0
|
||||
:10102000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD0
|
||||
:040000058000000077
|
||||
:00000001FF
|
||||
16
emulator/riscv_tests/I-FENCE.I-01.elf.hex
Normal file
16
emulator/riscv_tests/I-FENCE.I-01.elf.hex
Normal file
@@ -0,0 +1,16 @@
|
||||
:0200000480007A
|
||||
:10000000171800001308480097180000938888000C
|
||||
:10001000930100008320080003214800171A000004
|
||||
:10002000130A4AFE970A0000938A4A0183270A00AE
|
||||
:1000300023A0FA000F1000003701000023A01800D1
|
||||
:1000400023A2280023A4380023A6F80017150000D7
|
||||
:10005000130545FC971500009385C5FC370610F085
|
||||
:100060001306C6F26306B5028326C5002320D60018
|
||||
:10007000832685002320D600832645002320D60032
|
||||
:10008000832605002320D600130505016FF09FFD90
|
||||
:10009000370510F0130505F22320050000000000CD
|
||||
:0400A000000000005C
|
||||
:10100000B3011100300000001200000000000000D9
|
||||
:10101000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0
|
||||
:040000058000000077
|
||||
:00000001FF
|
||||
65
emulator/riscv_tests/I-IO.elf.hex
Normal file
65
emulator/riscv_tests/I-IO.elf.hex
Normal file
@@ -0,0 +1,65 @@
|
||||
:0200000480007A
|
||||
:100000009710000093800000171100001301810277
|
||||
:1000100083A1000013020000930210001303F0FFFD
|
||||
:10002000B70300809383F3FF3704008033824100DD
|
||||
:10003000B382510033836100B38371003384810044
|
||||
:100040002320310023224100232451002326610074
|
||||
:1000500023287100232A8100971000009380C0FAA2
|
||||
:1000600017110000130181FE03A400009304000097
|
||||
:10007000130510009305F0FF370600801306F6FF06
|
||||
:10008000B7060080B30494003305A400B305B400A0
|
||||
:100090003306C400B306D40023208100232291003C
|
||||
:1000A0002324A1002326B1002328C100232AD10044
|
||||
:1000B00097100000938080F517110000130181FA5A
|
||||
:1000C00083A6000013070000930710001308F0FF39
|
||||
:1000D000B70800809388F8FF370900803387E6006F
|
||||
:1000E000B387F60033880601B388160133892601E9
|
||||
:1000F0002320D1002322E1002324F1002326010143
|
||||
:1001000023281101232A210197100000938040F039
|
||||
:1001100017110000130181F603A9000093090000E4
|
||||
:10012000130A1000930AF0FF370B0080130BFBFF3C
|
||||
:10013000B70B0080B3093901330A4901B30A5901E9
|
||||
:10014000330B6901B30B79012320210123223101F3
|
||||
:10015000232441012326510123286101232A71010F
|
||||
:1001600097100000938000EB17110000130181F23B
|
||||
:1001700083AB0000130C0000930C1000130DF0FF74
|
||||
:10018000B70D0080938DFDFF370E0080338C8B01FF
|
||||
:10019000B38C9B01338DAB01B38DBB01338ECB018F
|
||||
:1001A0002320710123228101232491012326A1010F
|
||||
:1001B0002328B101232AC101971C0000938CCCE5B0
|
||||
:1001C000171D0000130D8DEE03AE0C00930D1000F3
|
||||
:1001D000B30EBE01338FBE01B30FBF01B380BF01A9
|
||||
:1001E0003381B001B301B1012320BD012322CD0130
|
||||
:1001F0002324DD012326ED012328FD01232A1D00F0
|
||||
:10020000232C2D00232E3D0097100000938000E149
|
||||
:1002100017110000130181EB03AE0000B79DFFF73B
|
||||
:10022000938D8D813300BE012320010097100000C3
|
||||
:10023000938000DF17110000130181E903AE000075
|
||||
:10024000B79DFFF7938D8D813300BE01B30200008F
|
||||
:10025000232001002322510097100000938080DCAE
|
||||
:1002600017110000130141E783A100003382010050
|
||||
:10027000B30202003303500033070300B307070043
|
||||
:1002800033880700B30C0001330D9001B30D0D004E
|
||||
:10029000232041002322A1012324B10117150000CE
|
||||
:1002A000130545D9971500009385C5E3370610F06F
|
||||
:1002B0001306C6F26306B5028326C5002320D600C6
|
||||
:1002C000832685002320D600832645002320D600E0
|
||||
:1002D000832605002320D600130505016FF09FFD3E
|
||||
:1002E000370510F0130505F223200500000000007B
|
||||
:0402F000000000000A
|
||||
:101000000000000001000000FFFFFFFFFFFFFF7F67
|
||||
:1010100000000080CDAB00007856341298BADCFE98
|
||||
:10102000145892360000000000000000000000008C
|
||||
:10103000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC0
|
||||
:10104000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB0
|
||||
:10105000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA0
|
||||
:10106000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF90
|
||||
:10107000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF80
|
||||
:10108000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF70
|
||||
:10109000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF60
|
||||
:1010A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF50
|
||||
:1010B000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF40
|
||||
:1010C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF30
|
||||
:1010D000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF20
|
||||
:040000058000000077
|
||||
:00000001FF
|
||||
46
emulator/riscv_tests/I-JAL-01.elf.hex
Normal file
46
emulator/riscv_tests/I-JAL-01.elf.hex
Normal file
@@ -0,0 +1,46 @@
|
||||
:0200000480007A
|
||||
:10000000971000009380000137513412130181676B
|
||||
:100010006F0080001301000023A0000023A2200035
|
||||
:1000200097100000938080FF1301F0FF9301F0FF11
|
||||
:1000300037D2ED0F130292BA6F0080021301000055
|
||||
:100040009301000013020000B741658793811132CC
|
||||
:100050006F008002130100009301000013020000F2
|
||||
:1000600037E1BC9A130101EF6FF01FFE130100008E
|
||||
:10007000930100001302000023A0000023A220002F
|
||||
:1000800023A4300023A6400097140000938484F733
|
||||
:1000900017150000130585F91301F0FF9301F0FF18
|
||||
:1000A0001302F0FF9302F0FF3753555513035355D6
|
||||
:1000B00083AC040003AC4400EF00C001B72122224E
|
||||
:1000C00093812122EF0F0003B742444493824244BC
|
||||
:1000D0006F004004371111111301111167800000E6
|
||||
:1000E00013010000930100001302000093020000BE
|
||||
:1000F00013030000373233331302323367800F00AB
|
||||
:10010000130100009301000013020000930200009D
|
||||
:1001100013030000B3C3900133C48F0123202500D3
|
||||
:10012000232235002324450023265500232865007B
|
||||
:10013000232A7500232C850097140000938404ED76
|
||||
:1001400017150000130545F01301F0FF9301F0FFB0
|
||||
:100150001302F0FF9302F0FF1303F0FF03AC04005F
|
||||
:1001600083AC44006F004002B77177779381717759
|
||||
:1001700067800F00130100009301000013020000CC
|
||||
:100180009302000013030000376166661301616685
|
||||
:10019000EFFF9FFD3792888813028288EF000001ED
|
||||
:1001A00037B3AAAA1303A3AA6F004002B7A2999972
|
||||
:1001B0009382929967800000130100009301000070
|
||||
:1001C000130200009302000013030000B3C38F0169
|
||||
:1001D00033C4900123202500232235002324450029
|
||||
:1001E0002326550023286500232A7500232C85002B
|
||||
:1001F00017150000130505E297150000938585E6A5
|
||||
:10020000370610F01306C6F26306B5028326C50052
|
||||
:100210002320D600832685002320D6008326450090
|
||||
:100220002320D600832605002320D60013050501D0
|
||||
:100230006FF09FFD370510F0130505F22320050030
|
||||
:0402400000000000BA
|
||||
:10100000BC000080C800008094010080A001008026
|
||||
:10101000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0
|
||||
:10102000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD0
|
||||
:10103000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC0
|
||||
:10104000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB0
|
||||
:10105000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA0
|
||||
:040000058000000077
|
||||
:00000001FF
|
||||
60
emulator/riscv_tests/I-JALR-01.elf.hex
Normal file
60
emulator/riscv_tests/I-JALR-01.elf.hex
Normal file
@@ -0,0 +1,60 @@
|
||||
:0200000480007A
|
||||
:10000000971000009380000137513412130181676B
|
||||
:100010009701000093810101678001001301000036
|
||||
:1000200023A0000023A2200097100000938000FF6F
|
||||
:100030001301F0FF9301F0FF37D2ED0F130292BAD4
|
||||
:10004000970F0000938F8F0367800F00130100004C
|
||||
:100050009301000013020000B741658793811132BC
|
||||
:100060009702000093828203678002001301000060
|
||||
:10007000930100001302000037E1BC9A130101EF65
|
||||
:1000800097070000938787FD678007001301000032
|
||||
:10009000930100001302000023A0000023A220000F
|
||||
:1000A00023A4300023A6400097140000938484F515
|
||||
:1000B00017150000130585F71301F0FF9301F0FFFA
|
||||
:1000C0001302F0FF9302F0FF3753555513035355B6
|
||||
:1000D00083AC040003AC4400970300009383430304
|
||||
:1000E000E7800300B7212222938121221704000018
|
||||
:1000F00013040404E70F0400B742444493824244CB
|
||||
:10010000170F0000130FCF0467000F0037111111F4
|
||||
:10011000130111116780000013010000930100001A
|
||||
:100120001302000093020000130300003732333340
|
||||
:100130001302323367800F001301000093010000A7
|
||||
:10014000130200009302000013030000B3C39001E8
|
||||
:1001500033C48F01232025002322350023244500AA
|
||||
:100160002326550023286500232A7500232C8500AB
|
||||
:1001700097140000938484E9171500001305C5EC5B
|
||||
:100180001301F0FF9301F0FF1302F0FF9302F0FF61
|
||||
:100190001303F0FF03AC040083AC44009707000096
|
||||
:1001A0009387C70267800700B7717777938171776C
|
||||
:1001B00067801F001301000093010000130200007C
|
||||
:1001C0009302000013030000376166661301616645
|
||||
:1001D000970F0000938F9FFDE78F0F00379288885D
|
||||
:1001E000130282889700000093801002E7800000CD
|
||||
:1001F00037B3AAAA1303A3AA170F0000130FCF0245
|
||||
:1002000067000F00B7A299999382929967801000B6
|
||||
:10021000130100009301000013020000930200008C
|
||||
:1002200013030000B3C38F0133C4900123202500C2
|
||||
:10023000232235002324450023265500232865006A
|
||||
:10024000232A7500232C850097100000938080E1FD
|
||||
:100250003712111113021211970100009381F1005E
|
||||
:100260006780110013020000B7222222938222220B
|
||||
:1002700097010000938111016780F1FF9302000054
|
||||
:1002800037333333130333339701000093811181E4
|
||||
:100290006780F17F13030000B743444493834344D2
|
||||
:1002A0009711000093810181678001809303000012
|
||||
:1002B00023A0400023A2500023A4600023A67000C6
|
||||
:1002C00017150000130505D597150000938585DAED
|
||||
:1002D000370610F01306C6F26306B5028326C50082
|
||||
:1002E0002320D600832685002320D60083264500C0
|
||||
:1002F0002320D600832605002320D6001305050100
|
||||
:100300006FF09FFD370510F0130505F2232005005F
|
||||
:0403100000000000E9
|
||||
:10100000E4000080F8000080DC010080F001008036
|
||||
:10101000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0
|
||||
:10102000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD0
|
||||
:10103000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC0
|
||||
:10104000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB0
|
||||
:10105000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA0
|
||||
:10106000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF90
|
||||
:040000058000000077
|
||||
:00000001FF
|
||||
51
emulator/riscv_tests/I-LB-01.elf.hex
Normal file
51
emulator/riscv_tests/I-LB-01.elf.hex
Normal file
@@ -0,0 +1,51 @@
|
||||
:0200000480007A
|
||||
:10000000971F0000938F0F00171100001301810349
|
||||
:1000100083810F0003821F0083822F0003833F0030
|
||||
:100020002320310023224100232451002326610094
|
||||
:10003000171C0000130C5CFD9712000093828201D4
|
||||
:10004000830CFCFF030D0C00830D1C00030E2C0021
|
||||
:1000500023A0920123A2A20123A4B20123A6C201DC
|
||||
:1000600097130000938373FA17140000130484FF9E
|
||||
:10007000038F1300838F23008380330003814300A9
|
||||
:100080002320E4012322F401232414002326240046
|
||||
:10009000171500001305C57797150000938585FD9A
|
||||
:1000A00003060580830615800307258083073580B6
|
||||
:1000B00023A0C50023A2D50023A4E50023A6F500B4
|
||||
:1000C000970600009386467517170000130787FBF5
|
||||
:1000D0008387C67F0388D67F8388E67F0389F67F80
|
||||
:1000E0002320F700232207012324170123262701B9
|
||||
:1000F00017180000130888F297180000938888F9F1
|
||||
:100100000309C8FF8309D8FF030AE8FF830AF8FF41
|
||||
:10011000030B0800830B1800030C2800830C380025
|
||||
:10012000030D4800830D5800030E6800830E78000D
|
||||
:1001300023A0280123A2380123A4480123A65801A3
|
||||
:1001400023A8680123AA780123AC880123AE980173
|
||||
:1001500023A0A80323A2B80323A4C80323A6D8037B
|
||||
:10016000971A0000938A0AEC171B0000130B8BF5FB
|
||||
:1001700003800A0023200B00971A0000938ACAEA22
|
||||
:10018000171B0000130B4BF483AB0A00038C0B000E
|
||||
:10019000930C0C0023209B01971C0000938C4CE9CE
|
||||
:1001A000171D0000130D8DF2838C0C0023209D0180
|
||||
:1001B000971D0000938D1DE8171E0000130E4EF1D1
|
||||
:1001C000838DFDFF2320BE0117150000130585E771
|
||||
:1001D00097150000938505F0370610F01306C6F258
|
||||
:1001E0006306B5028326C5002320D600832685003A
|
||||
:1001F0002320D600832645002320D6008326050031
|
||||
:100200002320D600130505016FF09FFD370510F080
|
||||
:10021000130505F223200500000000000000000087
|
||||
:0402200000000000DA
|
||||
:1010000022F2F111F44433F366F6F555F88877F7D8
|
||||
:10101000AA0A09990CCCBB0BEE0E0DDDF000FF0FF8
|
||||
:101020007856341228100080F0DEBC9A10325476C4
|
||||
:1010300098BADCFE00000000000000000000000084
|
||||
:10104000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB0
|
||||
:10105000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA0
|
||||
:10106000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF90
|
||||
:10107000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF80
|
||||
:10108000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF70
|
||||
:10109000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF60
|
||||
:1010A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF50
|
||||
:1010B000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF40
|
||||
:1010C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF30
|
||||
:040000058000000077
|
||||
:00000001FF
|
||||
51
emulator/riscv_tests/I-LBU-01.elf.hex
Normal file
51
emulator/riscv_tests/I-LBU-01.elf.hex
Normal file
@@ -0,0 +1,51 @@
|
||||
:0200000480007A
|
||||
:10000000971F0000938F0F00171100001301810349
|
||||
:1000100083C10F0003C21F0083C22F0003C33F0030
|
||||
:100020002320310023224100232451002326610094
|
||||
:10003000171C0000130C5CFD9712000093828201D4
|
||||
:10004000834CFCFF034D0C00834D1C00034E2C0021
|
||||
:1000500023A0920123A2A20123A4B20123A6C201DC
|
||||
:1000600097130000938373FA17140000130484FF9E
|
||||
:1000700003CF130083CF230083C0330003C14300A9
|
||||
:100080002320E4012322F401232414002326240046
|
||||
:10009000171500001305C57797150000938585FD9A
|
||||
:1000A00003460580834615800347258083473580B6
|
||||
:1000B00023A0C50023A2D50023A4E50023A6F500B4
|
||||
:1000C000970600009386467517170000130787FBF5
|
||||
:1000D00083C7C67F03C8D67F83C8E67F03C9F67F80
|
||||
:1000E0002320F700232207012324170123262701B9
|
||||
:1000F00017180000130888F297180000938888F9F1
|
||||
:100100000349C8FF8349D8FF034AE8FF834AF8FF41
|
||||
:10011000034B0800834B1800034C2800834C380025
|
||||
:10012000034D4800834D5800034E6800834E78000D
|
||||
:1001300023A0280123A2380123A4480123A65801A3
|
||||
:1001400023A8680123AA780123AC880123AE980173
|
||||
:1001500023A0A80323A2B80323A4C80323A6D8037B
|
||||
:10016000971A0000938A0AEC171B0000130B8BF5FB
|
||||
:1001700003C00A0023200B00971A0000938ACAEAE2
|
||||
:10018000171B0000130B4BF483AB0A0003CC0B00CE
|
||||
:10019000930C0C0023209B01971C0000938C4CE9CE
|
||||
:1001A000171D0000130D8DF283CC0C0023209D0140
|
||||
:1001B000971D0000938D1DE8171E0000130E4EF1D1
|
||||
:1001C00083CDFDFF2320BE0117150000130585E731
|
||||
:1001D00097150000938505F0370610F01306C6F258
|
||||
:1001E0006306B5028326C5002320D600832685003A
|
||||
:1001F0002320D600832645002320D6008326050031
|
||||
:100200002320D600130505016FF09FFD370510F080
|
||||
:10021000130505F223200500000000000000000087
|
||||
:0402200000000000DA
|
||||
:1010000022F2F111F44433F366F6F555F88877F7D8
|
||||
:10101000AA0A09990CCCBB0BEE0E0DDDF000FF0FF8
|
||||
:101020007856341228100080F0DEBC9A10325476C4
|
||||
:1010300098BADCFE00000000000000000000000084
|
||||
:10104000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB0
|
||||
:10105000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA0
|
||||
:10106000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF90
|
||||
:10107000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF80
|
||||
:10108000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF70
|
||||
:10109000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF60
|
||||
:1010A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF50
|
||||
:1010B000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF40
|
||||
:1010C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF30
|
||||
:040000058000000077
|
||||
:00000001FF
|
||||
39
emulator/riscv_tests/I-LH-01.elf.hex
Normal file
39
emulator/riscv_tests/I-LH-01.elf.hex
Normal file
@@ -0,0 +1,39 @@
|
||||
:0200000480007A
|
||||
:10000000971F0000938F0F00171100001301810349
|
||||
:1000100083910F0003922F002320310023224100FF
|
||||
:10002000171C0000130C5CFE971200009382020262
|
||||
:10003000831CFCFF031D1C0023A0920123A2A2012C
|
||||
:1000400097130000938373FC1714000013048400BB
|
||||
:10005000039F1300839F33002320E4012322F40134
|
||||
:10006000171500001305C57A97150000938505FF45
|
||||
:10007000031605808316258023A0C50023A2D50082
|
||||
:10008000970600009386367917170000130787FD3F
|
||||
:100090008397D67F0398F67F2320F700232207015A
|
||||
:1000A00017180000130888F797180000938808FCB9
|
||||
:1000B0000319C8FF8319E8FF031A0800831A2800F0
|
||||
:1000C000031B4800831B680023A0280123A23801DA
|
||||
:1000D00023A4480123A6580123A8680123AA780174
|
||||
:1000E000971A0000938A0AF4171B0000130B8BF970
|
||||
:1000F00003900A0023200B00971A0000938ACAF28B
|
||||
:10010000171B0000130B4BF883AB0A00039C0B007A
|
||||
:10011000930C0C0023209B01971C0000938C4CF146
|
||||
:10012000171D0000130D8DF6839C0C0023209D01EC
|
||||
:10013000971D0000938D1DF0171E0000130E4EF545
|
||||
:10014000839DFDFF2320BE0117150000130585EFD9
|
||||
:1001500097150000938505F4370610F01306C6F2D4
|
||||
:100160006306B5028326C5002320D60083268500BA
|
||||
:100170002320D600832645002320D60083260500B1
|
||||
:100180002320D600130505016FF09FFD370510F001
|
||||
:10019000130505F223200500000000000000000008
|
||||
:0401A000000000005B
|
||||
:1010000022F2F111F44433F366F6F555F88877F7D8
|
||||
:10101000AA0A09990CCCBB0BEE0E0DDDF000FF0FF8
|
||||
:101020007856341228100080F0DEBC9A10325476C4
|
||||
:1010300098BADCFE00000000000000000000000084
|
||||
:10104000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB0
|
||||
:10105000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA0
|
||||
:10106000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF90
|
||||
:10107000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF80
|
||||
:10108000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF70
|
||||
:040000058000000077
|
||||
:00000001FF
|
||||
39
emulator/riscv_tests/I-LHU-01.elf.hex
Normal file
39
emulator/riscv_tests/I-LHU-01.elf.hex
Normal file
@@ -0,0 +1,39 @@
|
||||
:0200000480007A
|
||||
:10000000971F0000938F0F00171100001301810349
|
||||
:1000100083D10F0003D22F0023203100232241007F
|
||||
:10002000171C0000130C5CFE971200009382020262
|
||||
:10003000835CFCFF035D1C0023A0920123A2A201AC
|
||||
:1000400097130000938373FC1714000013048400BB
|
||||
:1000500003DF130083DF33002320E4012322F401B4
|
||||
:10006000171500001305C57A97150000938505FF45
|
||||
:10007000035605808356258023A0C50023A2D50002
|
||||
:10008000970600009386367917170000130787FD3F
|
||||
:1000900083D7D67F03D8F67F2320F70023220701DA
|
||||
:1000A00017180000130888F797180000938808FCB9
|
||||
:1000B0000359C8FF8359E8FF035A0800835A2800F0
|
||||
:1000C000035B4800835B680023A0280123A238015A
|
||||
:1000D00023A4480123A6580123A8680123AA780174
|
||||
:1000E000971A0000938A0AF4171B0000130B8BF970
|
||||
:1000F00003D00A0023200B00971A0000938ACAF24B
|
||||
:10010000171B0000130B4BF883AB0A0003DC0B003A
|
||||
:10011000930C0C0023209B01971C0000938C4CF146
|
||||
:10012000171D0000130D8DF683DC0C0023209D01AC
|
||||
:10013000971D0000938D1DF0171E0000130E4EF545
|
||||
:1001400083DDFDFF2320BE0117150000130585EF99
|
||||
:1001500097150000938505F4370610F01306C6F2D4
|
||||
:100160006306B5028326C5002320D60083268500BA
|
||||
:100170002320D600832645002320D60083260500B1
|
||||
:100180002320D600130505016FF09FFD370510F001
|
||||
:10019000130505F223200500000000000000000008
|
||||
:0401A000000000005B
|
||||
:1010000022F2F111F44433F366F6F555F88877F7D8
|
||||
:10101000AA0A09990CCCBB0BEE0E0DDDF000FF0FF8
|
||||
:101020007856341228100080F0DEBC9A10325476C4
|
||||
:1010300098BADCFE00000000000000000000000084
|
||||
:10104000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB0
|
||||
:10105000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA0
|
||||
:10106000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF90
|
||||
:10107000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF80
|
||||
:10108000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF70
|
||||
:040000058000000077
|
||||
:00000001FF
|
||||
27
emulator/riscv_tests/I-LUI-01.elf.hex
Normal file
27
emulator/riscv_tests/I-LUI-01.elf.hex
Normal file
@@ -0,0 +1,27 @@
|
||||
:0200000480007A
|
||||
:100000009717000093870701B7000000B7110000A1
|
||||
:10001000B7F2FFFFB7FEFF7FB70F008023A01700E6
|
||||
:1000200023A2370023A4570023A6D70123A8F70152
|
||||
:1000300097170000938707FD171800001308C8FEE4
|
||||
:1000400003A1070003A2070003A3070003AE0700F4
|
||||
:1000500003AF07003701008037F2FF7F370300004E
|
||||
:10006000371E000037FFFFFF23202800232248000F
|
||||
:10007000232468002326C8012328E80197180000DC
|
||||
:100080009388C8FBB77072429380F0E6B75734127A
|
||||
:100090009387876737EFBC9A130F0FEF3771724260
|
||||
:1000A0001301F1E63758341213088867B7EFBC9A8A
|
||||
:1000B000938F0FEF23A0180023A2F80023A4E801D8
|
||||
:1000C00023A6280023A8080123AAF8011715000079
|
||||
:1000D000130545F4971500009385C5F7370610F012
|
||||
:1000E0001306C6F26306B5028326C5002320D60098
|
||||
:1000F000832685002320D600832645002320D600B2
|
||||
:10010000832605002320D600130505016FF09FFD0F
|
||||
:10011000370510F0130505F223200500000000004C
|
||||
:0401200000000000DB
|
||||
:10100000111111110000000000000000000000009C
|
||||
:10101000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0
|
||||
:10102000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD0
|
||||
:10103000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC0
|
||||
:10104000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB0
|
||||
:040000058000000077
|
||||
:00000001FF
|
||||
33
emulator/riscv_tests/I-LW-01.elf.hex
Normal file
33
emulator/riscv_tests/I-LW-01.elf.hex
Normal file
@@ -0,0 +1,33 @@
|
||||
:0200000480007A
|
||||
:10000000971F0000938F0F00171100001301810349
|
||||
:1000100083A10F0023203100171C0000130CDCFE0D
|
||||
:100020009712000093824202832CFCFF23A09201CE
|
||||
:1000300097130000938373FD171400001304040149
|
||||
:1000400083AF13002320F401171500001305457C2E
|
||||
:10005000971500009385C5FF0326058023A0C500E2
|
||||
:10006000970600009386167B17170000130787FE7C
|
||||
:1000700083A7F67F2320F70017180000130808FA5B
|
||||
:1000800097180000938848FD0329C8FF83290800BA
|
||||
:10009000032A480023A0280123A2380123A44801F1
|
||||
:1000A000971A0000938A0AF8171B0000130B8BFBAA
|
||||
:1000B00003A00A0023200B00971A0000938ACAF6B7
|
||||
:1000C000171B0000130B4BFA83AB0A0003AC0B00A9
|
||||
:1000D000930C0C0023209B01971C0000938C4CF583
|
||||
:1000E000171D0000130D8DF883AC0C0023209D011B
|
||||
:1000F000971D0000938D1DF4171E0000130E4EF780
|
||||
:1001000083ADFDFF2320BE0117150000130585F305
|
||||
:1001100097150000938505F6370610F01306C6F212
|
||||
:100120006306B5028326C5002320D60083268500FA
|
||||
:100130002320D600832645002320D60083260500F1
|
||||
:100140002320D600130505016FF09FFD370510F041
|
||||
:10015000130505F223200500000000000000000048
|
||||
:04016000000000009B
|
||||
:1010000022F2F111F44433F366F6F555F88877F7D8
|
||||
:10101000AA0A09990CCCBB0BEE0E0DDDF000FF0FF8
|
||||
:101020007856341228100080F0DEBC9A10325476C4
|
||||
:1010300098BADCFE00000000000000000000000084
|
||||
:10104000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB0
|
||||
:10105000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA0
|
||||
:10106000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF90
|
||||
:040000058000000077
|
||||
:00000001FF
|
||||
53
emulator/riscv_tests/I-MISALIGN_JMP-01.elf.hex
Normal file
53
emulator/riscv_tests/I-MISALIGN_JMP-01.elf.hex
Normal file
@@ -0,0 +1,53 @@
|
||||
:0200000480007A
|
||||
:100000009700000093808020F39F5030737012306F
|
||||
:1000100097100000938000FF371111111301111187
|
||||
:100020006F00A0001301000097100000938040FEB5
|
||||
:10003000372122221301212217020000130212018C
|
||||
:10004000670002001301000023A0200093804000FD
|
||||
:100050003731333313013133170200001302020129
|
||||
:10006000670012001301000023A0200093804000CD
|
||||
:100070003741444413014144170200001302420176
|
||||
:100080006700D2FF1301000023A0200093804000EE
|
||||
:1000900097100000938080F8375155551301515542
|
||||
:1000A0001702000013022201670002001301000082
|
||||
:1000B00037616666130161661702000013023201A0
|
||||
:1000C0006700020013010000377177771301717721
|
||||
:1000D0001702000013020201670022001301000052
|
||||
:1000E00037918888130181881702000013020201EA
|
||||
:1000F000670032001301000097100000938000F5A4
|
||||
:1001000093025000130360006387620037A199993E
|
||||
:100110001301919913000000130000006385520041
|
||||
:100120001301000097100000938000F39302500029
|
||||
:10013000130360006397520037B1AAAA1301A1AA62
|
||||
:10014000130000001300000063956200130100001B
|
||||
:1001500097100000938000F1930250001303600099
|
||||
:100160006347530037C1BBBB1301B1BB1300000091
|
||||
:100170001300000063C56200130100009710000027
|
||||
:10018000938000EF930250001303600063675300F5
|
||||
:1001900037D1CCCC1301C1CC1300000013000000F8
|
||||
:1001A00063E562001301000097100000938000EDEA
|
||||
:1001B000930250001303600063D7620037E1DDDD76
|
||||
:1001C0001301D1DD1300000013000000635553003C
|
||||
:1001D0001301000097100000938000EB9302500081
|
||||
:1001E0001303600063F7620037F1EEEE1301E1EEF6
|
||||
:1001F000130000001300000063755300130100009A
|
||||
:1002000073905F306F000003732F3034130FEFFFD4
|
||||
:1002100073101F34732F3034137F3F0023A0E0018D
|
||||
:10022000732F203423A2E00123A420009380C00078
|
||||
:1002300073002030171500001305C5DC971500006A
|
||||
:10024000938545E5370610F01306C6F26306B5023E
|
||||
:100250008326C5002320D600832685002320D600D0
|
||||
:10026000832645002320D600832605002320D600C0
|
||||
:10027000130505016FF09FFD370510F0130505F21A
|
||||
:040280002320050032
|
||||
:10100000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0
|
||||
:10101000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0
|
||||
:10102000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD0
|
||||
:10103000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC0
|
||||
:10104000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB0
|
||||
:10105000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA0
|
||||
:10106000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF90
|
||||
:10107000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF80
|
||||
:10108000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF70
|
||||
:040000058000000077
|
||||
:00000001FF
|
||||
44
emulator/riscv_tests/I-MISALIGN_LDST-01.elf.hex
Normal file
44
emulator/riscv_tests/I-MISALIGN_LDST-01.elf.hex
Normal file
@@ -0,0 +1,44 @@
|
||||
:0200000480007A
|
||||
:100000009700000093804014F39F50309711000038
|
||||
:10001000938141FF171100001301C1FF97100000E9
|
||||
:1000200093804000930250001303600003A201007C
|
||||
:100030002320410003A211002322410003A221003A
|
||||
:100040002324410003A23100232641009711000020
|
||||
:10005000938181FB17110000130141FE97100000EE
|
||||
:100060009380C0FF930250001303600003920100CD
|
||||
:10007000232041000392110023224100039221001A
|
||||
:1000800023244100039231002326410003D20100C2
|
||||
:100090002328410003D21100232A410003D221006A
|
||||
:1000A000232C410003D23100232E41001711000000
|
||||
:1000B0001301C1FC97100000938040FD1303000062
|
||||
:1000C000B7A299999382929923205100232251003B
|
||||
:1000D00023245100232651002320610013014100F5
|
||||
:1000E000A32061001301410023216100130141009D
|
||||
:1000F000A3216100171100001301C1FA971000003D
|
||||
:10010000938040FB13030000B7A2999993829299C0
|
||||
:100110002320510023225100232451002326510083
|
||||
:100120002310610013014100A3106100130141007D
|
||||
:100130002311610013014100A311610073905F302E
|
||||
:100140006F00C002732F1034130F4F0073101F3451
|
||||
:10015000732F3034137F3F0023A0E001732F20342E
|
||||
:1001600023A2E00193808000730020301715000067
|
||||
:10017000130545EA971500009385C5F4370610F07E
|
||||
:100180001306C6F26306B5028326C5002320D600F7
|
||||
:10019000832685002320D600832645002320D60011
|
||||
:1001A000832605002320D600130505016FF09FFD6F
|
||||
:1001B000370510F0130505F22320050000000000AC
|
||||
:0401C000000000003B
|
||||
:10100000C1B1A19102F2E2D2000000000000000094
|
||||
:10101000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0
|
||||
:10102000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD0
|
||||
:10103000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC0
|
||||
:10104000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB0
|
||||
:10105000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA0
|
||||
:10106000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF90
|
||||
:10107000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF80
|
||||
:10108000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF70
|
||||
:10109000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF60
|
||||
:1010A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF50
|
||||
:1010B000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF40
|
||||
:040000058000000077
|
||||
:00000001FF
|
||||
37
emulator/riscv_tests/I-NOP-01.elf.hex
Normal file
37
emulator/riscv_tests/I-NOP-01.elf.hex
Normal file
@@ -0,0 +1,37 @@
|
||||
:0200000480007A
|
||||
:10000000971000009380000013012000930130003E
|
||||
:10001000130240009302500013036000930370002A
|
||||
:1000200013048000930490001305A0009305B00012
|
||||
:100030001306C0009306D0001307E0009307F000FA
|
||||
:1000400013080001930810011309200193093001DE
|
||||
:10005000130A4001930A5001130B6001930B7001C6
|
||||
:10006000130C8001930C9001130DA001930DB001AE
|
||||
:10007000130EC001930ED001130FE001930FF00196
|
||||
:100080001300000013000000130000001300000024
|
||||
:10009000130000001300000023A0000023A2200092
|
||||
:1000A00023A4300023A6400023A8500023AA600008
|
||||
:1000B00023AC700023AE800023A0900223A2A002F4
|
||||
:1000C00023A4B00223A6C00223A8D00223AAE002E0
|
||||
:1000D00023ACF00223AE000323A0100523A22005C9
|
||||
:1000E00023A4300523A6400523A8500523AA6005B4
|
||||
:1000F00023AC700523AE800523A0900723A2A007A0
|
||||
:1001000023A4B00723A6C00723A8D00723AAE0078B
|
||||
:1001100023ACF00797110000938181F617040000CB
|
||||
:100120001300000013000000130000001300000083
|
||||
:100130001300000097040000B384844023A09100C2
|
||||
:1001400017150000130505EC97150000938585F33E
|
||||
:10015000370610F01306C6F26306B5028326C50003
|
||||
:100160002320D600832685002320D6008326450041
|
||||
:100170002320D600832605002320D6001305050181
|
||||
:100180006FF09FFD370510F0130505F223200500E1
|
||||
:04019000000000006B
|
||||
:10100000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0
|
||||
:10101000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0
|
||||
:10102000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD0
|
||||
:10103000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC0
|
||||
:10104000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB0
|
||||
:10105000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA0
|
||||
:10106000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF90
|
||||
:10107000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF80
|
||||
:040000058000000077
|
||||
:00000001FF
|
||||
66
emulator/riscv_tests/I-OR-01.elf.hex
Normal file
66
emulator/riscv_tests/I-OR-01.elf.hex
Normal file
@@ -0,0 +1,66 @@
|
||||
:0200000480007A
|
||||
:100000009710000093800000171100001301810277
|
||||
:1000100083A1000013020000930210001303F0FFFD
|
||||
:10002000B70300809383F3FF3704008033E241007D
|
||||
:10003000B3E2510033E36100B3E3710033E48100C4
|
||||
:100040002320310023224100232451002326610074
|
||||
:1000500023287100232A8100971000009380C0FAA2
|
||||
:1000600017110000130181FE03A400009304000097
|
||||
:10007000130510009305F0FF370600801306F6FF06
|
||||
:10008000B7060080B36494003365A400B365B40080
|
||||
:100090003366C400B366D40023208100232291007C
|
||||
:1000A0002324A1002326B1002328C100232AD10044
|
||||
:1000B00097100000938080F517110000130181FA5A
|
||||
:1000C00083A6000013070000930710001308F0FF39
|
||||
:1000D000B70800809388F8FF3709008033E7E6000F
|
||||
:1000E000B3E7F60033E80601B3E8160133E9260169
|
||||
:1000F0002320D1002322E1002324F1002326010143
|
||||
:1001000023281101232A210197100000938040F039
|
||||
:1001100017110000130181F603A9000093090000E4
|
||||
:10012000130A1000930AF0FF370B0080130BFBFF3C
|
||||
:10013000B70B0080B3693901336A4901B36A5901C9
|
||||
:10014000336B6901B36B7901232021012322310133
|
||||
:10015000232441012326510123286101232A71010F
|
||||
:1001600097100000938000EB17110000130181F23B
|
||||
:1001700083AB0000130C0000930C1000130DF0FF74
|
||||
:10018000B70D0080938DFDFF370E008033EC8B019F
|
||||
:10019000B3EC9B0133EDAB01B3EDBB0133EECB010F
|
||||
:1001A0002320710123228101232491012326A1010F
|
||||
:1001B0002328B101232AC101971C0000938CCCE5B0
|
||||
:1001C000171D0000130D8DEE03AE0C00130200018D
|
||||
:1001D00093020002130300049303000813040010A9
|
||||
:1001E00093040080B36E4E0033EF5E00B36F6F0078
|
||||
:1001F000B3E07F0033E18000B361910023204D0024
|
||||
:100200002322CD012324DD012326ED012328FD0136
|
||||
:10021000232A1D00232C2D00232E3D0097100000C3
|
||||
:100220009380C0DF17110000130141EA03AE000004
|
||||
:10023000B79DFFF7938D8D813360BE0123200100B0
|
||||
:10024000971000009380C0DD17110000130141E8F2
|
||||
:1002500003AE0000B79DFFF7938D8D813360BE0123
|
||||
:10026000B3620000232001002322510097100000F8
|
||||
:10027000938040DB17110000130101E683A1000009
|
||||
:1002800033E20100B36202003363500033670300BE
|
||||
:10029000B367070033E80700B36C0001336D9001CA
|
||||
:1002A000B36D0D00232041002322A1012324B101BD
|
||||
:1002B00017150000130505D897150000938585E2F2
|
||||
:1002C000370610F01306C6F26306B5028326C50092
|
||||
:1002D0002320D600832685002320D60083264500D0
|
||||
:1002E0002320D600832605002320D6001305050110
|
||||
:1002F0006FF09FFD370510F0130505F22320050070
|
||||
:0403000000000000F9
|
||||
:101000000000000001000000FFFFFFFFFFFFFF7F67
|
||||
:10101000000000800D0000007856341298BADCFE03
|
||||
:10102000145892360000000000000000000000008C
|
||||
:10103000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC0
|
||||
:10104000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB0
|
||||
:10105000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA0
|
||||
:10106000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF90
|
||||
:10107000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF80
|
||||
:10108000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF70
|
||||
:10109000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF60
|
||||
:1010A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF50
|
||||
:1010B000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF40
|
||||
:1010C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF30
|
||||
:1010D000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF20
|
||||
:040000058000000077
|
||||
:00000001FF
|
||||
56
emulator/riscv_tests/I-ORI-01.elf.hex
Normal file
56
emulator/riscv_tests/I-ORI-01.elf.hex
Normal file
@@ -0,0 +1,56 @@
|
||||
:0200000480007A
|
||||
:100000009710000093800000171100001301810277
|
||||
:1000100083A1000013E2110093E2F17F13E3F1FFEB
|
||||
:1000200093E3010013E401802320310023224100E7
|
||||
:10003000232451002326610023287100232A8100F4
|
||||
:1000400097100000938040FC17110000130101007D
|
||||
:1000500003A40000936414001365F47F9365F4FF18
|
||||
:1000600013660400936604802320810023229100FC
|
||||
:100070002324A1002326B1002328C100232AD10074
|
||||
:1000800097100000938080F817110000130181FD84
|
||||
:1000900083A6000013E7160093E7F67F13E8F6FF48
|
||||
:1000A00093E8060013E906802320D1002322E10013
|
||||
:1000B0002324F1002326010123281101232A2101F1
|
||||
:1000C000971000009380C0F417110000130101FB8A
|
||||
:1000D00003A9000093691900136AF97F936AF9FF75
|
||||
:1000E000136B0900936B0980232021012322310126
|
||||
:1000F000232441012326510123286101232A710170
|
||||
:1001000097100000938000F117110000130181F88F
|
||||
:1001100083AB000013EC1B0093ECFB7F13EDFBFFA4
|
||||
:1001200093ED0B0013EE0B8023207101232281013C
|
||||
:10013000232491012326A1012328B101232AC101EF
|
||||
:10014000171D0000130D4DED971D0000938D0DF64A
|
||||
:10015000032E0D00936E0E0113EF0E02936F0F042A
|
||||
:1001600093E00F0813E100109361018023A0CD01FB
|
||||
:1001700023A2DD0123A4ED0123A6FD0123A81D0078
|
||||
:1001800023AA2D0023AC3D0097100000938000E9C6
|
||||
:1001900017110000130141F383A2000013E01200C5
|
||||
:1001A0002320010097100000938080E717110000C2
|
||||
:1001B0001301C1F183A2000013E01200936210004A
|
||||
:1001C000232001002322510097100000938080E536
|
||||
:1001D00017110000130101F083A1000013E20100D8
|
||||
:1001E0009362020013E302001367030093670700A2
|
||||
:1001F00013E80700936C080013ED0C00936D0D00DD
|
||||
:1002000023203100232241002324A1012326B10110
|
||||
:1002100017150000130505E297150000938585EC7E
|
||||
:10022000370610F01306C6F26306B5028326C50032
|
||||
:100230002320D600832685002320D6008326450070
|
||||
:100240002320D600832605002320D60013050501B0
|
||||
:100250006FF09FFD370510F0130505F22320050010
|
||||
:04026000000000009A
|
||||
:101000000000000001000000FFFFFFFFFFFFFF7F67
|
||||
:10101000000000800D0000007856341298BADCFE03
|
||||
:10102000145892360000000000000000000000008C
|
||||
:10103000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC0
|
||||
:10104000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB0
|
||||
:10105000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA0
|
||||
:10106000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF90
|
||||
:10107000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF80
|
||||
:10108000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF70
|
||||
:10109000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF60
|
||||
:1010A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF50
|
||||
:1010B000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF40
|
||||
:1010C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF30
|
||||
:1010D000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF20
|
||||
:040000058000000077
|
||||
:00000001FF
|
||||
45
emulator/riscv_tests/I-RF_size-01.elf.hex
Normal file
45
emulator/riscv_tests/I-RF_size-01.elf.hex
Normal file
@@ -0,0 +1,45 @@
|
||||
:0200000480007A
|
||||
:100000001718000013080800377072421300F0E65A
|
||||
:10001000B7303356938090243721562D1301210594
|
||||
:10002000B77169529381313637826B731302029232
|
||||
:10003000B7627473938222573753206E1303F3E62B
|
||||
:10004000B773694D938313C63764646F1304341711
|
||||
:10005000B744796B93843406377565741305352777
|
||||
:10006000B7756E28938535F737266B6513068604BA
|
||||
:10007000B76652209386461637376D6F1307C792BF
|
||||
:10008000B7377069938737E62320080023221800CA
|
||||
:10009000232428002326380023284800232A580038
|
||||
:1000A000232C6800232E7800232088022322980224
|
||||
:1000B0002324A8022326B8022328C802232AD80210
|
||||
:1000C000232CE802232EF80217120000130282F7F5
|
||||
:1000D00037686F6313081846B778656A938808B461
|
||||
:1000E0003779282013091986B7696A619389B95647
|
||||
:1000F000376A7661130A0A52B75A202E938A5AC673
|
||||
:10010000377B6F63130B9BD2B77B6973938BEB02C7
|
||||
:10011000378C2066130CFC96B72C6567938C9C0675
|
||||
:10012000377D7365130D1D36B72D7375938DDD0601
|
||||
:10013000371E293A130EAED0B77E6968938E0E3201
|
||||
:10014000372F6461130F4F07B77F2075938F5F269A
|
||||
:10015000232002012322120123242201232632011B
|
||||
:1001600023284201232A5201232C6201232E7201EB
|
||||
:1001700023208203232292032324A2032326B203F3
|
||||
:100180002328C203232AD203232CE203232EF203C3
|
||||
:1001900017120000130202EF232002002322120094
|
||||
:1001A000232422002326320017150000130585E5BD
|
||||
:1001B00097150000938505EE370610F01306C6F27A
|
||||
:1001C0006306B5028326C5002320D600832685005A
|
||||
:1001D0002320D600832645002320D6008326050051
|
||||
:1001E0002320D600130505016FF09FFD370510F0A1
|
||||
:1001F000130505F2232005000000000000000000A8
|
||||
:0402000000000000FA
|
||||
:10100000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0
|
||||
:10101000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0
|
||||
:10102000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD0
|
||||
:10103000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC0
|
||||
:10104000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB0
|
||||
:10105000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA0
|
||||
:10106000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF90
|
||||
:10107000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF80
|
||||
:10108000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF70
|
||||
:040000058000000077
|
||||
:00000001FF
|
||||
57
emulator/riscv_tests/I-RF_width-01.elf.hex
Normal file
57
emulator/riscv_tests/I-RF_width-01.elf.hex
Normal file
@@ -0,0 +1,57 @@
|
||||
:0200000480007A
|
||||
:1000000017180000130808001300100093001000D8
|
||||
:10001000130110009301100013021000930210004E
|
||||
:100020001303100093031000130410009304100036
|
||||
:10003000130510009305100013061000930610001E
|
||||
:1000400013071000930710009390F00163C40000A1
|
||||
:10005000930000001311F10163440100130100003B
|
||||
:100060009391F10163C40100930100001312F201A6
|
||||
:1000700063440200130200009392F20163C4020081
|
||||
:10008000930200001313F301634403001303000001
|
||||
:100090009393F30163C40300930300001314F4016A
|
||||
:1000A00063440400130400009394F40163C4040047
|
||||
:1000B000930400001315F5016344050013050000C7
|
||||
:1000C0009395F50163C40500930500001316F6012E
|
||||
:1000D00063440600130600009396F60163C406000D
|
||||
:1000E000930600001317F70163440700130700008D
|
||||
:1000F0009397F70163C407009307000023200800CB
|
||||
:10010000232218002324280023263800232848000F
|
||||
:10011000232A5800232C6800232E780023208802ED
|
||||
:10012000232298022324A8022326B8022328C802E7
|
||||
:10013000232AD802232CE802232EF802971000006D
|
||||
:10014000938040F01308100093081000130910006A
|
||||
:1001500093091000130A1000930A1000130B1000EB
|
||||
:10016000930B1000130C1000930C1000130D1000D3
|
||||
:10017000930D1000130E1000930E1000130F1000BB
|
||||
:10018000930F10001318F8016344080013080000CF
|
||||
:100190009398F80163C40800930800001319F9014B
|
||||
:1001A00063440900130900009399F90163C409002D
|
||||
:1001B00093090000131AFA0163440A00130A0000AD
|
||||
:1001C000939AFA0163C40A00930A0000131BFB010F
|
||||
:1001D00063440B00130B0000939BFB0163C40B00F3
|
||||
:1001E000930B0000131CFC0163440C00130C000073
|
||||
:1001F000939CFC0163C40C00930C0000131DFD01D3
|
||||
:1002000063440D00130D0000939DFD0163C40D00B8
|
||||
:10021000930D0000131EFE0163440E00130E000038
|
||||
:10022000939EFE0163C40E00930E0000131FFF0196
|
||||
:1002300063440F00130F0000939FFF0163C40F007E
|
||||
:10024000930F000023A0000123A2100123A420018A
|
||||
:1002500023A6300123A8400123AA500123AC60014A
|
||||
:1002600023AE700123A0800323A2900323A4A00344
|
||||
:1002700023A6B00323A8C00323AAD00323ACE00322
|
||||
:1002800023AEF003171500001305C5D7971500001E
|
||||
:10029000938545DF370610F01306C6F26306B502F4
|
||||
:1002A0008326C5002320D600832685002320D60080
|
||||
:1002B000832645002320D600832605002320D60070
|
||||
:1002C000130505016FF09FFD370510F0130505F2CA
|
||||
:0402D00023200500E2
|
||||
:10100000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0
|
||||
:10101000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0
|
||||
:10102000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD0
|
||||
:10103000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC0
|
||||
:10104000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB0
|
||||
:10105000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA0
|
||||
:10106000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF90
|
||||
:10107000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF80
|
||||
:040000058000000077
|
||||
:00000001FF
|
||||
29
emulator/riscv_tests/I-RF_x0-01.elf.hex
Normal file
29
emulator/riscv_tests/I-RF_x0-01.elf.hex
Normal file
@@ -0,0 +1,29 @@
|
||||
:0200000480007A
|
||||
:10000000971F0000938F0F0137E0CDAB1300100056
|
||||
:100010001360007F1370F0531340308013105000B2
|
||||
:10002000135020401350400023A00F00971F0000E2
|
||||
:10003000938F8FFE930010001301007F9301F05304
|
||||
:1000400013023080930250001303200093034000FA
|
||||
:100050001304800117E0CDAB3300100033602000A3
|
||||
:100060003370300033404000331050003350604054
|
||||
:10007000335070003300804023A00F00971F000012
|
||||
:10008000938FCFF9930010001301200033A02000BC
|
||||
:1000900023A00F0033B0200023A20F0013A02000E4
|
||||
:1000A00023A40F0013B0200023A60F00971F000009
|
||||
:1000B000938FCFF76F00400023A00F009700000040
|
||||
:1000C0009380C0006780000023A20F0097100000FB
|
||||
:1000D000938040F3971F0000938FCFF503A000009B
|
||||
:1000E00023A00F000390000023A20F000380000054
|
||||
:1000F00023A40F0003C0000023A60F001715000063
|
||||
:10010000130545F1971500009385C5F3370610F0E8
|
||||
:100110001306C6F26306B5028326C5002320D60067
|
||||
:10012000832685002320D600832645002320D60081
|
||||
:10013000832605002320D600130505016FF09FFDDF
|
||||
:10014000370510F0130505F223200500000000001C
|
||||
:0401500000000000AB
|
||||
:101000004F4E5242000000000000000000000000AF
|
||||
:10101000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0
|
||||
:10102000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD0
|
||||
:10103000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC0
|
||||
:040000058000000077
|
||||
:00000001FF
|
||||
45
emulator/riscv_tests/I-SB-01.elf.hex
Normal file
45
emulator/riscv_tests/I-SB-01.elf.hex
Normal file
@@ -0,0 +1,45 @@
|
||||
:0200000480007A
|
||||
:100000009710000093800001B7CFAAAA938FBFBBBF
|
||||
:1000100023A0F00137F1F1111301212223802000E8
|
||||
:1000200097120000938252FFA3AF02FEB74C33F346
|
||||
:10003000938C4C4FA38F92FF171400001304F4FD10
|
||||
:10004000A3200400B7FFF555938F6F66A300F4015A
|
||||
:10005000971500009385C57C23A00580379677F718
|
||||
:100060001306868F2380C580170700001307977B30
|
||||
:10007000A32F077EB71709999387A7AAA30FF77E27
|
||||
:1000800097180000938888FA371911111309C910BD
|
||||
:10009000B72922229389C92C373A3333130ABA3B42
|
||||
:1000A000B74A4444938ABA40375B5555130BEB5E0D
|
||||
:1000B000B76B6666938BEB60377C7777130CDC70DD
|
||||
:1000C000B79C8888938CDC8D37AD9999130D0D9F63
|
||||
:1000D000B7BDAAAA938D0DA037CEBBBB130EFEBF32
|
||||
:1000E000B7DECCCC938EFEC0238E28FFA38E38FFC4
|
||||
:1000F000238F48FFA38F58FF23806801A3807801D6
|
||||
:1001000023818801A38198012382A801A382B801D9
|
||||
:100110002383C801A383D801171B0000130B8BF1A5
|
||||
:10012000B74065879380103223201B00375034126C
|
||||
:100130001300806723000B00971A0000938A8AEC53
|
||||
:1001400083A00A0023A00000B73922119389493403
|
||||
:1001500083AB0A0023803B01971B0000938BCBEA03
|
||||
:10016000171C0000130C8CED23200C0083AC0B003B
|
||||
:1001700023009C01171D0000130D8DEC23200D00A2
|
||||
:10018000B73C5476938C0C2123009D01930C000006
|
||||
:10019000171E0000130E0EEB23200E00B7DDAB89F7
|
||||
:1001A000938DFDDE2300BE01130ECEFF971E0000CF
|
||||
:1001B000938E8EE923A00E0023A20E00B76D721459
|
||||
:1001C000938D6D832380BE0103AF0E002382EE0169
|
||||
:1001D000971000009380C0E723A0000037513896A5
|
||||
:1001E00013011120B751812593813196238020007E
|
||||
:1001F00023803000171500001305C5E19715000096
|
||||
:10020000938545E5370610F01306C6F26306B5027E
|
||||
:100210008326C5002320D600832685002320D60010
|
||||
:10022000832645002320D600832605002320D60000
|
||||
:10023000130505016FF09FFD370510F0130505F25A
|
||||
:040240002320050072
|
||||
:1010000034100080F0DEBC9A0000000000000000F8
|
||||
:10101000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0
|
||||
:10102000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD0
|
||||
:10103000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC0
|
||||
:10104000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB0
|
||||
:040000058000000077
|
||||
:00000001FF
|
||||
41
emulator/riscv_tests/I-SH-01.elf.hex
Normal file
41
emulator/riscv_tests/I-SH-01.elf.hex
Normal file
@@ -0,0 +1,41 @@
|
||||
:0200000480007A
|
||||
:100000009710000093800001B7CFAAAA938FBFBBBF
|
||||
:1000100023A0F00137F1F1111301212223902000D8
|
||||
:1000200097120000938252FFA3AF02FEB74C33F346
|
||||
:10003000938C4C4FA39F92FF171400001304F4FD00
|
||||
:10004000A3200400B7FFF555938F6F66A310F4014A
|
||||
:10005000971500009385C57C23A00580379677F718
|
||||
:100060001306868F2390C580170700001307977B20
|
||||
:10007000A32F077EB71709999387A7AAA31FF77E17
|
||||
:1000800097180000938888FA37D911111309C9C04D
|
||||
:10009000B71922229389B9BB371A3333130AEAEE10
|
||||
:1000A000B7EA4444938ADAD0370B7777130B0B0FF8
|
||||
:1000B000B71B6666938BFBFF239E28FF239F38FFA9
|
||||
:1000C00023904801239158012392680123937801DA
|
||||
:1000D000171B0000130B0BF6B74065879380103297
|
||||
:1000E00023201B00375034121300806723100B00AD
|
||||
:1000F000971A0000938A0AF183A00A0023A0000047
|
||||
:10010000B73922119389493483AB0A0023903B010C
|
||||
:10011000971B0000938B4BEF171C0000130C0CF285
|
||||
:1001200023200C0083AC0B0023109C01171D000042
|
||||
:10013000130D0DF123200D00B73C5476938C0C2148
|
||||
:1001400023109D01930C0000171E0000130E8EEF6C
|
||||
:1001500023200E00B7DDAB89938DFDDE2310BE0199
|
||||
:10016000130ECEFF971E0000938E0EEE23A00E00FE
|
||||
:1001700023A20E00B76D7214938D6D832390BE0180
|
||||
:1001800003AF0E002392EE0197100000938040EC25
|
||||
:1001900023A000003751389613011120B751812553
|
||||
:1001A0009381319623902000239030001715000092
|
||||
:1001B000130545E6971500009385C5E9370610F04D
|
||||
:1001C0001306C6F26306B5028326C5002320D600B7
|
||||
:1001D000832685002320D600832645002320D600D1
|
||||
:1001E000832605002320D600130505016FF09FFD2F
|
||||
:1001F000370510F0130505F223200500000000006C
|
||||
:0402000000000000FA
|
||||
:1010000034100080F0DEBC9A0000000000000000F8
|
||||
:10101000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0
|
||||
:10102000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD0
|
||||
:10103000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC0
|
||||
:10104000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB0
|
||||
:040000058000000077
|
||||
:00000001FF
|
||||
64
emulator/riscv_tests/I-SLL-01.elf.hex
Normal file
64
emulator/riscv_tests/I-SLL-01.elf.hex
Normal file
@@ -0,0 +1,64 @@
|
||||
:0200000480007A
|
||||
:100000009710000093800000171100001301810277
|
||||
:1000100083A10000130210009302F0001303F0010B
|
||||
:10002000930300001304000133924100B392510086
|
||||
:1000300033936100B3937100339481002320310026
|
||||
:10004000232241002324510023266100232871002C
|
||||
:10005000232A810097100000938000FB17110000F5
|
||||
:100060001301C1FE03A40000930410001305F00067
|
||||
:100070009305F0011306000093060001B3149400E9
|
||||
:100080003315A400B315B4003316C400B316D4005E
|
||||
:1000900023208100232291002324A1002326B100E4
|
||||
:1000A0002328C100232AD10097100000938000F676
|
||||
:1000B00017110000130101FB83A6000013071000B5
|
||||
:1000C0009307F0001308F0019308000013090001E2
|
||||
:1000D0003397E600B397F60033980601B3981601FC
|
||||
:1000E000339926012320D1002322E1002324F100AB
|
||||
:1000F0002326010123281101232A210117160000BC
|
||||
:10010000130606F197160000938646F703290600AA
|
||||
:1001100093091000130AF000930AF001130B00007A
|
||||
:10012000930B0001B3193901331A4901B31A59016C
|
||||
:10013000331B6901B31B790123A0260123A23601D9
|
||||
:1001400023A4460123A6560123A8660123AA76010B
|
||||
:1001500017160000130606EC97160000938686F328
|
||||
:10016000832B0600130C1000930CF000130DF0010C
|
||||
:10017000930D0000130E0001339C8B01B39C9B0177
|
||||
:10018000339DAB01B39DBB01339ECB0123A0760110
|
||||
:1001900023A2860123A4960123A6A60123A8B601C3
|
||||
:1001A00023AAC601971C0000938C0CE7171D0000C2
|
||||
:1001B000130DCDEF03AE0C00930D1000B31EBE0166
|
||||
:1001C000339FBE01B31FBF01B390BF013391B00194
|
||||
:1001D000B311B1012320CD012322DD012324ED0140
|
||||
:1001E0002326FD0123281D00232A2D00232C3D005A
|
||||
:1001F00097100000938080E2171100001301C1ECFA
|
||||
:1002000083A20000930D10003390B201232001005F
|
||||
:10021000971000009380C0E017110000130101EB5C
|
||||
:1002200083A20000930D10003390B201B312B0010D
|
||||
:10023000232001002322510097100000938080DECC
|
||||
:1002400017110000130101E983A10000370200101B
|
||||
:10025000130202FEB7020010938212FE3703001051
|
||||
:100260001303F3FEB70300109383F3FF33924100AF
|
||||
:10027000B392510033936100B39371002320410086
|
||||
:10028000232251002324610023267100171500004A
|
||||
:10029000130545DA971500009385C5E4370610F07D
|
||||
:1002A0001306C6F26306B5028326C5002320D600D6
|
||||
:1002B000832685002320D600832645002320D600F0
|
||||
:1002C000832605002320D600130505016FF09FFD4E
|
||||
:1002D000370510F0130505F223200500000000008B
|
||||
:0402E000000000001A
|
||||
:101000000000000001000000FFFFFFFFFFFFFF7F67
|
||||
:101010000000008010EFCDAB7856341298BADCFE99
|
||||
:101020002143658700000000000000000000000070
|
||||
:10103000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC0
|
||||
:10104000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB0
|
||||
:10105000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA0
|
||||
:10106000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF90
|
||||
:10107000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF80
|
||||
:10108000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF70
|
||||
:10109000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF60
|
||||
:1010A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF50
|
||||
:1010B000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF40
|
||||
:1010C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF30
|
||||
:1010D000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF20
|
||||
:040000058000000077
|
||||
:00000001FF
|
||||
50
emulator/riscv_tests/I-SLLI-01.elf.hex
Normal file
50
emulator/riscv_tests/I-SLLI-01.elf.hex
Normal file
@@ -0,0 +1,50 @@
|
||||
:0200000480007A
|
||||
:100000009710000093800000171100001301810178
|
||||
:1000100083A10000139211009392F1001393F10158
|
||||
:100020009393010013940101232031002322410006
|
||||
:10003000232451002326610023287100232A8100F4
|
||||
:1000400097100000938040FC17110000130101FF7E
|
||||
:1000500003A40000931414001315F4009315F40185
|
||||
:10006000131604009316040123208100232291001B
|
||||
:100070002324A1002326B1002328C100232AD10074
|
||||
:1000800097100000938080F817110000130181FC85
|
||||
:1000900083A60000139716009397F6001398F601B5
|
||||
:1000A00093980600139906012320D1002322E10032
|
||||
:1000B0002324F1002326010123281101232A2101F1
|
||||
:1000C000171600001306C6F497160000938606FA6A
|
||||
:1000D0000329060093191900131AF900931AF9015C
|
||||
:1000E000131B0900931B090123A0260123A236013B
|
||||
:1000F00023A4460123A6560123A8660123AA76015C
|
||||
:1001000017160000130606F197160000938686F76F
|
||||
:10011000832B0600139C1B00939CFB00139DFB018B
|
||||
:10012000939D0B00139E0B0123A0760123A2860151
|
||||
:1001300023A4960123A6A60123A8B60123AAC601DB
|
||||
:10014000171D0000130D4DED971D0000938D0DF54B
|
||||
:10015000032E0D00931E1E00139F1E00931F1F00F1
|
||||
:1001600093901F00139110009311110023A0CD0153
|
||||
:1001700023A2DD0123A4ED0123A6FD0123A81D0078
|
||||
:1001800023AA2D0023AC3D0097100000938000E9C6
|
||||
:1001900017110000130141F283A200001390120016
|
||||
:1001A0002320010097100000938080E717110000C2
|
||||
:1001B0001301C1F083A200001390120093121000EB
|
||||
:1001C000232001002322510017150000130585E5A7
|
||||
:1001D00097150000938505EF370610F01306C6F259
|
||||
:1001E0006306B5028326C5002320D600832685003A
|
||||
:1001F0002320D600832645002320D6008326050031
|
||||
:100200002320D600130505016FF09FFD370510F080
|
||||
:10021000130505F223200500000000000000000087
|
||||
:0402200000000000DA
|
||||
:101000000000000001000000FFFFFFFFFFFFFF7F67
|
||||
:101010000000008010EFCDAB7856341298BADCFE99
|
||||
:10102000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD0
|
||||
:10103000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC0
|
||||
:10104000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB0
|
||||
:10105000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA0
|
||||
:10106000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF90
|
||||
:10107000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF80
|
||||
:10108000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF70
|
||||
:10109000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF60
|
||||
:1010A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF50
|
||||
:1010B000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF40
|
||||
:040000058000000077
|
||||
:00000001FF
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user