Passes all tests - SRAI

This commit is contained in:
felsabbagh3
2019-02-11 00:41:07 -05:00
parent d9138a1493
commit 2c1f61196a
10 changed files with 589 additions and 139 deletions

View File

@@ -296,7 +296,9 @@ Instruction *WordDecoder::decode(const std::vector<Byte> &v, Size &idx) {
bool usedImm(false); bool usedImm(false);
Word imeed, dest_bits, imm_bits, bit_11, bits_4_1, bit_10_5, 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; 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) switch(instTable[op].iType)
{ {
case InstType::N_TYPE: case InstType::N_TYPE:
@@ -311,12 +313,23 @@ Instruction *WordDecoder::decode(const std::vector<Byte> &v, Size &idx) {
case InstType::I_TYPE: case InstType::I_TYPE:
inst.setDestReg((code>>shift_rd) & reg_mask); inst.setDestReg((code>>shift_rd) & reg_mask);
inst.setSrcReg((code>>shift_rs1) & reg_mask); inst.setSrcReg((code>>shift_rs1) & reg_mask);
inst.setFunc3 ((code>>shift_func3) & func3_mask);
inst.setSrcImm(signExt(code>>shift_i_immed, 12, i_immed_mask)); func3 = (code>>shift_func3) & func3_mask;
inst.setFunc3 (func3);
if ((func3 == 5) && (op != L_INST))
{
inst.setSrcImm(signExt(((code>>shift_rs2)&reg_mask), 5, reg_mask));
}
else
{
inst.setSrcImm(signExt(code>>shift_i_immed, 12, i_immed_mask));
}
usedImm = true; usedImm = true;
break; break;
case InstType::S_TYPE: case InstType::S_TYPE:
// std::cout << "************STORE\n";
inst.setSrcReg((code>>shift_rs1) & reg_mask); inst.setSrcReg((code>>shift_rs1) & reg_mask);
inst.setSrcReg((code>>shift_rs2) & reg_mask); inst.setSrcReg((code>>shift_rs2) & reg_mask);
inst.setFunc3 ((code>>shift_func3) & func3_mask); inst.setFunc3 ((code>>shift_func3) & func3_mask);
@@ -324,6 +337,7 @@ Instruction *WordDecoder::decode(const std::vector<Byte> &v, Size &idx) {
dest_bits = (code>>shift_rd) & reg_mask; dest_bits = (code>>shift_rd) & reg_mask;
imm_bits = (code>>shift_s_b_immed & func7_mask); imm_bits = (code>>shift_s_b_immed & func7_mask);
imeed = (imm_bits << reg_s) | dest_bits; imeed = (imm_bits << reg_s) | dest_bits;
// std::cout << "ENC: store imeed: " << imeed << "\n";
inst.setSrcImm(signExt(imeed, 12, s_immed_mask)); inst.setSrcImm(signExt(imeed, 12, s_immed_mask));
usedImm = true; usedImm = true;
break; break;

View File

@@ -241,6 +241,7 @@ int emu_main(int argc, char **argv) {
// std::cout << "TESTING: " << tests[t] << "\n"; // std::cout << "TESTING: " << tests[t] << "\n";
MemoryUnit mu(4096, arch.getWordSize(), basicMachine); MemoryUnit mu(4096, arch.getWordSize(), basicMachine);
Core core(arch, *dec, mu/*, ID in multicore implementations*/); Core core(arch, *dec, mu/*, ID in multicore implementations*/);
@@ -248,13 +249,12 @@ int emu_main(int argc, char **argv) {
RAM old_ram; RAM old_ram;
old_ram.loadHexImpl(imgFileName.c_str()); old_ram.loadHexImpl(imgFileName.c_str());
// old_ram.loadHexImpl(tests[t]); // old_ram.loadHexImpl(tests[t]);
// MemDevice * memory = &old_ram; // MemDevice * memory = &old_ram;
ConsoleMemDevice console(arch.getWordSize(), cout, core, batch); ConsoleMemDevice console(arch.getWordSize(), cout, core, batch);
mu.attach(old_ram, 0); mu.attach(old_ram, 0);
mu.attach(console, 1ll<<(arch.getWordSize()*8 - 1)); mu.attach(console, 1ll<<(arch.getWordSize()*8 - 1));
// mu.attach(console, 0xf0000000);
while (core.running()) { console.poll(); core.step(); } while (core.running()) { console.poll(); core.step(); }

View File

@@ -4,7 +4,7 @@
#ifndef __DEBUG_H #ifndef __DEBUG_H
#define __DEBUG_H #define __DEBUG_H
#define USE_DEBUG 9 // #define USE_DEBUG 9
#ifdef USE_DEBUG #ifdef USE_DEBUG
#include <iostream> #include <iostream>

View File

@@ -46,7 +46,7 @@ namespace Harp {
{Opcode::R_INST, {"r_type", false, false, false, false, InstType::R_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::L_INST, {"load" , false, false, false, false, InstType::I_TYPE }},
{Opcode::I_INST, {"i_type", 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::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::B_INST, {"branch", true , false, false, false, InstType::B_TYPE }},
{Opcode::LUI_INST, {"lui" , false, false, false, false, InstType::U_TYPE }}, {Opcode::LUI_INST, {"lui" , false, false, false, false, InstType::U_TYPE }},
{Opcode::AUIPC_INST, {"auipc" , false, false, false, false, InstType::U_TYPE }}, {Opcode::AUIPC_INST, {"auipc" , false, false, false, false, InstType::U_TYPE }},

View File

@@ -236,19 +236,23 @@ namespace Harp {
uint8_t third = *get(address + 2); uint8_t third = *get(address + 2);
uint8_t fourth = *get(address + 3); uint8_t fourth = *get(address + 3);
// uint8_t hi = (uint8_t) *get(address + 0);
// std::cout << "RAM: READING ADDRESS " << address + 0 << " DATA: " << hi << "\n"; // std::cout << std::hex;
// hi = (uint8_t) *get(address + 1); // std::cout << "RAM: READING ADDRESS " << address + 0 << " DATA: " << (uint32_t) first << "\n";
// std::cout << "RAM: READING ADDRESS " << address + 1 << " DATA: " << hi << "\n"; // std::cout << "RAM: READING ADDRESS " << address + 1 << " DATA: " << (uint32_t) second << "\n";
// hi = (uint8_t) *get(address + 2); // std::cout << "RAM: READING ADDRESS " << address + 2 << " DATA: " << (uint32_t) third << "\n";
// std::cout << "RAM: READING ADDRESS " << address + 2 << " DATA: " << hi << "\n"; // std::cout << "RAM: READING ADDRESS " << address + 3 << " DATA: " << (uint32_t) fourth << "\n";
// hi = (uint8_t) *get(address + 3);
// std::cout << "RAM: READING ADDRESS " << address + 3 << " DATA: " << hi << "\n";
data[0] = (data[0] << 0) | fourth; data[0] = (data[0] << 0) | fourth;
data[0] = (data[0] << 8) | third; data[0] = (data[0] << 8) | third;
data[0] = (data[0] << 8) | second; data[0] = (data[0] << 8) | second;
data[0] = (data[0] << 8) | first; 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";
} }
@@ -309,6 +313,7 @@ namespace Harp {
{ {
uint32_t w; uint32_t w;
getWord(addr, &w); getWord(addr, &w);
// std::cout << "RAM: read -> " << w << " at addr: " << addr << "\n";
return (Word) w; return (Word) w;
} }
@@ -385,7 +390,7 @@ namespace Harp {
unsigned add = nextAddr + i; unsigned add = nextAddr + i;
*(this->get(add)) = hToI_old(line + 9 + i * 2, 2); *(this->get(add)) = hToI_old(line + 9 + i * 2, 2);
// std::cout << "Address: " << std::hex <<(add) << "\tValue: " << std::hex << hToI_old(line + 9 + i * 2, 2) << std::endl; // std::cout << "lhi: Address: " << std::hex <<(add) << "\tValue: " << std::hex << hToI_old(line + 9 + i * 2, 2) << std::endl;
} }
break; break;
case 2: case 2:
@@ -411,6 +416,7 @@ namespace Harp {
line++; line++;
size--; size--;
} }
if (content) delete[] content; if (content) delete[] content;
} }

View File

@@ -8,9 +8,9 @@
namespace Harp { namespace Harp {
typedef uint8_t Byte; typedef uint8_t Byte;
typedef uint64_t Word; typedef uint32_t Word;
typedef uint64_t Word_u; typedef uint32_t Word_u;
typedef int64_t Word_s; typedef int32_t Word_s;
typedef Word_u Addr; typedef Word_u Addr;
typedef Word_u Size; typedef Word_u Size;

View File

@@ -133,6 +133,7 @@ void Instruction::executeOn(Warp &c) {
Word shift_by; Word shift_by;
Word shamt; Word shamt;
Word temp; Word temp;
Word data_read;
int op1, op2; int op1, op2;
switch (op) { switch (op) {
@@ -204,8 +205,11 @@ void Instruction::executeOn(Warp &c) {
break; break;
case L_INST: case L_INST:
memAddr = (reg[rsrc[0]] + immsrc) & 0xFFFFFF00;
shift_by = (reg[rsrc[0]] + immsrc) & 0x000000FF; 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 #ifdef EMU_INSTRUMENTATION
Harp::OSDomain::osDomain-> Harp::OSDomain::osDomain->
do_mem(0, memAddr, c.core->mem.virtToPhys(memAddr), 8, true); do_mem(0, memAddr, c.core->mem.virtToPhys(memAddr), 8, true);
@@ -215,21 +219,22 @@ void Instruction::executeOn(Warp &c) {
case 0: case 0:
// LB // LB
reg[rdest] = signExt((c.core->mem.read(memAddr, c.supervisorMode) >> shift_by) & 0xFF, 8, 0xFF); reg[rdest] = signExt((data_read >> shift_by) & 0xFF, 8, 0xFF);
break; break;
case 1: case 1:
// LH // LH
reg[rdest] = signExt((c.core->mem.read(memAddr, c.supervisorMode) >> shift_by) & 0xFFFF, 16, 0xFF); // 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; break;
case 2: case 2:
reg[rdest] = int(c.core->mem.read(memAddr, c.supervisorMode) & 0xFFFFFFFF); reg[rdest] = int(data_read & 0xFFFFFFFF);
break; break;
case 4: case 4:
// LBU // LBU
reg[rdest] = Word_u((c.core->mem.read(memAddr, c.supervisorMode) >> shift_by) & 0xFF); reg[rdest] = unsigned((data_read >> shift_by) & 0xFF);
break; break;
case 5: case 5:
reg[rdest] = int((c.core->mem.read(memAddr, c.supervisorMode) >> shift_by) & 0xFFFF); reg[rdest] = unsigned((data_read >> shift_by) & 0xFFFF);
break; break;
default: default:
cout << "ERROR: UNSUPPORTED L INST\n"; cout << "ERROR: UNSUPPORTED L INST\n";
@@ -309,17 +314,19 @@ void Instruction::executeOn(Warp &c) {
break; break;
case S_INST: case S_INST:
++c.stores; ++c.stores;
memAddr = reg[rsrc[1]] + immsrc; memAddr = reg[rsrc[0]] + immsrc;
// std::cout << "STORE MEM ADDRESS: " << std::hex << reg[rsrc[0]] << " + " << immsrc << "\n";
switch (func3) switch (func3)
{ {
case 0: case 0:
c.core->mem.write(memAddr, reg[rsrc[0]], c.supervisorMode, 1); c.core->mem.write(memAddr, reg[rsrc[1]] & 0x000000FF, c.supervisorMode, 1);
break; break;
case 1: case 1:
c.core->mem.write(memAddr, reg[rsrc[0]], c.supervisorMode, 2); // std::cout << std::hex << "INST: about to write: " << reg[rsrc[1]] << " to " << memAddr << "\n";
c.core->mem.write(memAddr, reg[rsrc[1]], c.supervisorMode, 2);
break; break;
case 2: case 2:
c.core->mem.write(memAddr, reg[rsrc[0]], c.supervisorMode, 4); c.core->mem.write(memAddr, reg[rsrc[1]], c.supervisorMode, 4);
break; break;
default: default:
cout << "ERROR: UNSUPPORTED S INST\n"; cout << "ERROR: UNSUPPORTED S INST\n";
@@ -344,8 +351,6 @@ void Instruction::executeOn(Warp &c) {
break; break;
case 1: case 1:
// BNE // BNE
// cout << "COMPARING: " << std::hex << int(reg[rsrc[0]]) << " and " << int(reg[rsrc[1]]) << "\n";
// cout << "COMPARING: " << std::hex << rsrc[0] << " and " << rsrc[1] << "\n";
if (int(reg[rsrc[0]]) != int(reg[rsrc[1]])) if (int(reg[rsrc[0]]) != int(reg[rsrc[1]]))
{ {
if (!pcSet) nextPc = (c.pc - 4) + immsrc; if (!pcSet) nextPc = (c.pc - 4) + immsrc;
@@ -407,8 +412,6 @@ void Instruction::executeOn(Warp &c) {
{ {
reg[rdest] = c.pc; reg[rdest] = c.pc;
} }
// for (int z = 0; z < 32; z++) std::cout << "&&&&&&&& reg[" << z << "] = " << reg[z] << "\n";
// std::cout << "jumping to nextPc reg: " << rsrc[0] << " : " << reg[rsrc[0]] << " + " << immsrc << "\n";
pcSet = true; pcSet = true;
break; break;
case SYS_INST: case SYS_INST:
@@ -418,70 +421,55 @@ void Instruction::executeOn(Warp &c) {
case 1: case 1:
if (rdest != 0) if (rdest != 0)
{ {
// std::cout << "CSR: Writing to reg: " << rdest << " value: " << c.csr[immsrc & 0x00000FFF];
reg[rdest] = c.csr[immsrc & 0x00000FFF]; reg[rdest] = c.csr[immsrc & 0x00000FFF];
} }
// std::cout << "\t and writing to csr: " << reg[rsrc[0]] << "\n";
c.csr[immsrc & 0x00000FFF] = temp; c.csr[immsrc & 0x00000FFF] = temp;
break; break;
case 2: case 2:
if (rdest != 0) if (rdest != 0)
{ {
// std::cout << "CSR: Writing to reg: " << rdest << " value: " << c.csr[immsrc & 0x00000FFF]; reg[rdest] = c.csr[immsrc & 0x00000FFF];
reg[rdest] = c.csr[immsrc & 0x00000FFF];
} }
// std::cout << "\t and writing to csr: " << (reg[rsrc[0]] | c.csr[immsrc & 0x00000FFF]) << "\n";
c.csr[immsrc & 0x00000FFF] = temp | c.csr[immsrc & 0x00000FFF]; c.csr[immsrc & 0x00000FFF] = temp | c.csr[immsrc & 0x00000FFF];
break; break;
case 3: case 3:
if (rdest != 0) if (rdest != 0)
{ {
//std::cout << "CSR: Writing to reg: " << rdest << " value: " << c.csr[immsrc & 0x00000FFF];
reg[rdest] = c.csr[immsrc & 0x00000FFF]; reg[rdest] = c.csr[immsrc & 0x00000FFF];
} }
//std::cout << "\t and writing to csr: " << (temp & (~c.csr[immsrc & 0x00000FFF])) << "\n";
c.csr[immsrc & 0x00000FFF] = temp & (~c.csr[immsrc & 0x00000FFF]); c.csr[immsrc & 0x00000FFF] = temp & (~c.csr[immsrc & 0x00000FFF]);
break; break;
case 5: case 5:
if (rdest != 0) if (rdest != 0)
{ {
//std::cout << "CSR: Writing to reg: " << rdest << " value: " << c.csr[immsrc & 0x00000FFF];
reg[rdest] = c.csr[immsrc & 0x00000FFF]; reg[rdest] = c.csr[immsrc & 0x00000FFF];
} }
//std::cout << "\t and writing to csr: " << (rsrc[0]) << "\n";
c.csr[immsrc & 0x00000FFF] = rsrc[0]; c.csr[immsrc & 0x00000FFF] = rsrc[0];
break; break;
case 6: case 6:
if (rdest != 0) if (rdest != 0)
{ {
//std::cout << "CSR: Writing to reg: " << rdest << " value: " << c.csr[immsrc & 0x00000FFF];
reg[rdest] = c.csr[immsrc & 0x00000FFF]; reg[rdest] = c.csr[immsrc & 0x00000FFF];
} }
//std::cout << "\t and writing to csr: " << (rsrc[0] | c.csr[immsrc & 0x00000FFF]) << "\n";
c.csr[immsrc & 0x00000FFF] = rsrc[0] | c.csr[immsrc & 0x00000FFF]; c.csr[immsrc & 0x00000FFF] = rsrc[0] | c.csr[immsrc & 0x00000FFF];
break; break;
case 7: case 7:
if (rdest != 0) if (rdest != 0)
{ {
//std::cout << "CSR: Writing to reg: " << rdest << " value: " << c.csr[immsrc & 0x00000FFF]; reg[rdest] = c.csr[immsrc & 0x00000FFF];
reg[rdest] = c.csr[immsrc & 0x00000FFF];
} }
//std::cout << "\t and writing to csr: " << (rsrc[0] & (~c.csr[immsrc & 0x00000FFF])) << "\n";
c.csr[immsrc & 0x00000FFF] = rsrc[0] & (~c.csr[immsrc & 0x00000FFF]); c.csr[immsrc & 0x00000FFF] = rsrc[0] & (~c.csr[immsrc & 0x00000FFF]);
break; break;
case 0: case 0:
if (immsrc < 2) if (immsrc < 2)
{ {
std::cout << "INTERRUPT ECALL\n"; std::cout << "INTERRUPT ECALL/EBREAK\n";
nextActiveThreads = 0; nextActiveThreads = 0;
c.interrupt(0); c.interrupt(0);
} }

View File

@@ -87,14 +87,33 @@ Word MemoryUnit::ADecoder::read(Addr a, bool sup, Size wordSize) {
Size bit = wordSize - 1; Size bit = wordSize - 1;
MemDevice &m(doLookup(a, bit)); MemDevice &m(doLookup(a, bit));
a &= (2<<bit)-1; 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); return m.read(a);
} }
void MemoryUnit::ADecoder::write(Addr a, Word w, bool sup, Size wordSize) { void MemoryUnit::ADecoder::write(Addr a, Word w, bool sup, Size wordSize) {
Size bit = wordSize - 1; Size bit = wordSize - 1;
MemDevice &m(doLookup(a, bit)); MemDevice &m(doLookup(a, bit));
a &= (2<<bit)-1;
m.write(a, w); 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 (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) { Byte *MemoryUnit::getPtr(Addr a, Size s) {
@@ -136,6 +155,7 @@ Word MemoryUnit::read(Addr vAddr, bool sup) {
TLBEntry t = tlbLookup(vAddr, flagMask); TLBEntry t = tlbLookup(vAddr, flagMask);
pAddr = t.pfn*pageSize + vAddr%pageSize; 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); return ad.read(pAddr, sup, 8*addrBytes);
} }
@@ -149,7 +169,20 @@ Word MemoryUnit::fetch(Addr vAddr, bool sup) {
TLBEntry t = tlbLookup(vAddr, flagMask); TLBEntry t = tlbLookup(vAddr, flagMask);
pAddr = t.pfn*pageSize + vAddr%pageSize; pAddr = t.pfn*pageSize + vAddr%pageSize;
} }
return ad.read(pAddr, sup, 8*addrBytes);
Word instruction = ad.read(pAddr, sup, 8*addrBytes);
// Flip endianess (instead of changing decoding logic)
// Word first = (instruction) & 0xFF;
// Word second = (instruction >> 8) & 0xFF;
// Word third = (instruction >> 16) & 0xFF;
// Word fourth = (instruction >> 24) & 0xFF;
// instruction = (instruction & 0xFFFFFF00) | fourth;
// instruction = (instruction & 0xFFFF00FF) | (third << 8);
// instruction = (instruction & 0xFF00FFFF) | (second << 16);
// instruction = (instruction & 0x00FFFFFF) | (first << 24);
return instruction;
} }
void MemoryUnit::write(Addr vAddr, Word w, bool sup, Size bytes) { void MemoryUnit::write(Addr vAddr, Word w, bool sup, Size bytes) {
@@ -162,7 +195,9 @@ void MemoryUnit::write(Addr vAddr, Word w, bool sup, Size bytes) {
TLBEntry t = tlbLookup(vAddr, flagMask); TLBEntry t = tlbLookup(vAddr, flagMask);
pAddr = t.pfn*pageSize + vAddr%pageSize; 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); 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) { void MemoryUnit::tlbAdd(Addr virt, Addr phys, Word flags) {

View File

@@ -1,12 +1,419 @@
start start
./riscv_tests/rv32ui-p-lw.hex ./riscv_tests/rv32ui-p-add.hex
INTERRUPT ECALL INTERRUPT ECALL/EBREAK
Total steps: 45 Total steps: 453
Total insts: 45 Total insts: 453
=== Warp 0 === === Warp 0 ===
Steps : 45 Steps : 453
Insts : 45 Insts : 453
Loads : 0
Stores: 0
GRADE: PASSED
./riscv_tests/rv32ui-p-addi.hex
INTERRUPT ECALL/EBREAK
Total steps: 230
Total insts: 230
=== Warp 0 ===
Steps : 230
Insts : 230
Loads : 0
Stores: 0
GRADE: PASSED
./riscv_tests/rv32ui-p-and.hex
INTERRUPT ECALL/EBREAK
Total steps: 473
Total insts: 473
=== Warp 0 ===
Steps : 473
Insts : 473
Loads : 0
Stores: 0
GRADE: PASSED
./riscv_tests/rv32ui-p-andi.hex
INTERRUPT ECALL/EBREAK
Total steps: 186
Total insts: 186
=== Warp 0 ===
Steps : 186
Insts : 186
Loads : 0
Stores: 0
GRADE: PASSED
./riscv_tests/rv32ui-p-auipc.hex
INTERRUPT ECALL/EBREAK
Total steps: 47
Total insts: 47
=== Warp 0 ===
Steps : 47
Insts : 47
Loads : 0
Stores: 0
GRADE: PASSED
./riscv_tests/rv32ui-p-beq.hex
INTERRUPT ECALL/EBREAK
Total steps: 279
Total insts: 279
=== Warp 0 ===
Steps : 279
Insts : 279
Loads : 0
Stores: 0
GRADE: PASSED
./riscv_tests/rv32ui-p-bge.hex
INTERRUPT ECALL/EBREAK
Total steps: 297
Total insts: 297
=== Warp 0 ===
Steps : 297
Insts : 297
Loads : 0
Stores: 0
GRADE: PASSED
./riscv_tests/rv32ui-p-bgeu.hex
INTERRUPT ECALL/EBREAK
Total steps: 322
Total insts: 322
=== Warp 0 ===
Steps : 322
Insts : 322
Loads : 0
Stores: 0
GRADE: PASSED
./riscv_tests/rv32ui-p-blt.hex
INTERRUPT ECALL/EBREAK
Total steps: 279
Total insts: 279
=== Warp 0 ===
Steps : 279
Insts : 279
Loads : 0
Stores: 0
GRADE: PASSED
./riscv_tests/rv32ui-p-bltu.hex
INTERRUPT ECALL/EBREAK
Total steps: 304
Total insts: 304
=== Warp 0 ===
Steps : 304
Insts : 304
Loads : 0
Stores: 0
GRADE: PASSED
./riscv_tests/rv32ui-p-bne.hex
INTERRUPT ECALL/EBREAK
Total steps: 279
Total insts: 279
=== Warp 0 ===
Steps : 279
Insts : 279
Loads : 0
Stores: 0
GRADE: PASSED
./riscv_tests/rv32ui-p-jal.hex
INTERRUPT ECALL/EBREAK
Total steps: 43
Total insts: 43
=== Warp 0 ===
Steps : 43
Insts : 43
Loads : 0
Stores: 0
GRADE: PASSED
./riscv_tests/rv32ui-p-jalr.hex
INTERRUPT ECALL/EBREAK
Total steps: 96
Total insts: 96
=== Warp 0 ===
Steps : 96
Insts : 96
Loads : 0
Stores: 0
GRADE: PASSED
./riscv_tests/rv32ui-p-lb.hex
INTERRUPT ECALL/EBREAK
Total steps: 233
Total insts: 233
=== Warp 0 ===
Steps : 233
Insts : 233
Loads : 0
Stores: 0
GRADE: PASSED
./riscv_tests/rv32ui-p-lbu.hex
INTERRUPT ECALL/EBREAK
Total steps: 233
Total insts: 233
=== Warp 0 ===
Steps : 233
Insts : 233
Loads : 0
Stores: 0
GRADE: PASSED
./riscv_tests/rv32ui-p-lh.hex
INTERRUPT ECALL/EBREAK
Total steps: 245
Total insts: 245
=== Warp 0 ===
Steps : 245
Insts : 245
Loads : 0
Stores: 0
GRADE: PASSED
./riscv_tests/rv32ui-p-lhu.hex
INTERRUPT ECALL/EBREAK
Total steps: 252
Total insts: 252
=== Warp 0 ===
Steps : 252
Insts : 252
Loads : 0
Stores: 0
GRADE: PASSED
./riscv_tests/rv32ui-p-lui.hex
INTERRUPT ECALL/EBREAK
Total steps: 53
Total insts: 53
=== Warp 0 ===
Steps : 53
Insts : 53
Loads : 0
Stores: 0
GRADE: PASSED
./riscv_tests/rv32ui-p-lw.hex
INTERRUPT ECALL/EBREAK
Total steps: 255
Total insts: 255
=== Warp 0 ===
Steps : 255
Insts : 255
Loads : 0
Stores: 0
GRADE: PASSED
./riscv_tests/rv32ui-p-or.hex
INTERRUPT ECALL/EBREAK
Total steps: 476
Total insts: 476
=== Warp 0 ===
Steps : 476
Insts : 476
Loads : 0
Stores: 0
GRADE: PASSED
./riscv_tests/rv32ui-p-ori.hex
INTERRUPT ECALL/EBREAK
Total steps: 193
Total insts: 193
=== Warp 0 ===
Steps : 193
Insts : 193
Loads : 0
Stores: 0
GRADE: PASSED
./riscv_tests/rv32ui-p-sb.hex
INTERRUPT ECALL/EBREAK
Total steps: 418
Total insts: 418
=== Warp 0 ===
Steps : 418
Insts : 418
Loads : 0
Stores: 35
GRADE: PASSED
./riscv_tests/rv32ui-p-sh.hex
INTERRUPT ECALL/EBREAK
Total steps: 471
Total insts: 471
=== Warp 0 ===
Steps : 471
Insts : 471
Loads : 0
Stores: 35
GRADE: PASSED
./riscv_tests/rv32ui-p-simple.hex
INTERRUPT ECALL/EBREAK
Total steps: 29
Total insts: 29
=== Warp 0 ===
Steps : 29
Insts : 29
Loads : 0
Stores: 0
GRADE: PASSED
./riscv_tests/rv32ui-p-sll.hex
INTERRUPT ECALL/EBREAK
Total steps: 481
Total insts: 481
=== Warp 0 ===
Steps : 481
Insts : 481
Loads : 0
Stores: 0
GRADE: PASSED
./riscv_tests/rv32ui-p-slli.hex
INTERRUPT ECALL/EBREAK
Total steps: 229
Total insts: 229
=== Warp 0 ===
Steps : 229
Insts : 229
Loads : 0
Stores: 0
GRADE: PASSED
./riscv_tests/rv32ui-p-slt.hex
INTERRUPT ECALL/EBREAK
Total steps: 447
Total insts: 447
=== Warp 0 ===
Steps : 447
Insts : 447
Loads : 0
Stores: 0
GRADE: PASSED
./riscv_tests/rv32ui-p-slti.hex
INTERRUPT ECALL/EBREAK
Total steps: 225
Total insts: 225
=== Warp 0 ===
Steps : 225
Insts : 225
Loads : 0
Stores: 0
GRADE: PASSED
./riscv_tests/rv32ui-p-sltiu.hex
INTERRUPT ECALL/EBREAK
Total steps: 225
Total insts: 225
=== Warp 0 ===
Steps : 225
Insts : 225
Loads : 0
Stores: 0
GRADE: PASSED
./riscv_tests/rv32ui-p-sltu.hex
INTERRUPT ECALL/EBREAK
Total steps: 447
Total insts: 447
=== Warp 0 ===
Steps : 447
Insts : 447
Loads : 0
Stores: 0
GRADE: PASSED
./riscv_tests/rv32ui-p-sra.hex
INTERRUPT ECALL/EBREAK
Total steps: 500
Total insts: 500
=== Warp 0 ===
Steps : 500
Insts : 500
Loads : 0
Stores: 0
GRADE: PASSED
./riscv_tests/rv32ui-p-srai.hex
INTERRUPT ECALL/EBREAK
Total steps: 41
Total insts: 41
=== Warp 0 ===
Steps : 41
Insts : 41
Loads : 0 Loads : 0
Stores: 0 Stores: 0
GRADE: FAILED 3 GRADE: FAILED 3
./riscv_tests/rv32ui-p-srl.hex
INTERRUPT ECALL/EBREAK
Total steps: 494
Total insts: 494
=== Warp 0 ===
Steps : 494
Insts : 494
Loads : 0
Stores: 0
GRADE: PASSED
./riscv_tests/rv32ui-p-srli.hex
INTERRUPT ECALL/EBREAK
Total steps: 238
Total insts: 238
=== Warp 0 ===
Steps : 238
Insts : 238
Loads : 0
Stores: 0
GRADE: PASSED
./riscv_tests/rv32ui-p-sub.hex
INTERRUPT ECALL/EBREAK
Total steps: 445
Total insts: 445
=== Warp 0 ===
Steps : 445
Insts : 445
Loads : 0
Stores: 0
GRADE: PASSED
./riscv_tests/rv32ui-p-sw.hex
INTERRUPT ECALL/EBREAK
Total steps: 478
Total insts: 478
=== Warp 0 ===
Steps : 478
Insts : 478
Loads : 0
Stores: 34
GRADE: PASSED
./riscv_tests/rv32ui-p-xor.hex
INTERRUPT ECALL/EBREAK
Total steps: 475
Total insts: 475
=== Warp 0 ===
Steps : 475
Insts : 475
Loads : 0
Stores: 0
GRADE: PASSED
./riscv_tests/rv32ui-p-xori.hex
INTERRUPT ECALL/EBREAK
Total steps: 195
Total insts: 195
=== Warp 0 ===
Steps : 195
Insts : 195
Loads : 0
Stores: 0
GRADE: PASSED

View File

@@ -1,115 +1,115 @@
echo start > results.txt echo start > results.txt
# echo ./riscv_tests/rv32ui-p-add.hex >> results.txt echo ./riscv_tests/rv32ui-p-add.hex >> results.txt
# ./harptool -E -a rv32i --core ./riscv_tests/rv32ui-p-add.hex -s -b >> results.txt ./harptool -E -a rv32i --core ./riscv_tests/rv32ui-p-add.hex -s -b >> results.txt
# echo ./riscv_tests/rv32ui-p-addi.hex >> results.txt echo ./riscv_tests/rv32ui-p-addi.hex >> results.txt
# ./harptool -E -a rv32i --core ./riscv_tests/rv32ui-p-addi.hex -s -b >> results.txt ./harptool -E -a rv32i --core ./riscv_tests/rv32ui-p-addi.hex -s -b >> results.txt
# echo ./riscv_tests/rv32ui-p-and.hex >> results.txt echo ./riscv_tests/rv32ui-p-and.hex >> results.txt
# ./harptool -E -a rv32i --core ./riscv_tests/rv32ui-p-and.hex -s -b >> results.txt ./harptool -E -a rv32i --core ./riscv_tests/rv32ui-p-and.hex -s -b >> results.txt
# echo ./riscv_tests/rv32ui-p-andi.hex >> results.txt echo ./riscv_tests/rv32ui-p-andi.hex >> results.txt
# ./harptool -E -a rv32i --core ./riscv_tests/rv32ui-p-andi.hex -s -b >> results.txt ./harptool -E -a rv32i --core ./riscv_tests/rv32ui-p-andi.hex -s -b >> results.txt
# echo ./riscv_tests/rv32ui-p-auipc.hex >> results.txt echo ./riscv_tests/rv32ui-p-auipc.hex >> results.txt
# ./harptool -E -a rv32i --core ./riscv_tests/rv32ui-p-auipc.hex -s -b >> results.txt ./harptool -E -a rv32i --core ./riscv_tests/rv32ui-p-auipc.hex -s -b >> results.txt
# echo ./riscv_tests/rv32ui-p-beq.hex >> results.txt echo ./riscv_tests/rv32ui-p-beq.hex >> results.txt
# ./harptool -E -a rv32i --core ./riscv_tests/rv32ui-p-beq.hex -s -b >> results.txt ./harptool -E -a rv32i --core ./riscv_tests/rv32ui-p-beq.hex -s -b >> results.txt
# echo ./riscv_tests/rv32ui-p-bge.hex >> results.txt echo ./riscv_tests/rv32ui-p-bge.hex >> results.txt
# ./harptool -E -a rv32i --core ./riscv_tests/rv32ui-p-bge.hex -s -b >> results.txt ./harptool -E -a rv32i --core ./riscv_tests/rv32ui-p-bge.hex -s -b >> results.txt
# echo ./riscv_tests/rv32ui-p-bgeu.hex >> results.txt echo ./riscv_tests/rv32ui-p-bgeu.hex >> results.txt
# ./harptool -E -a rv32i --core ./riscv_tests/rv32ui-p-bgeu.hex -s -b >> results.txt ./harptool -E -a rv32i --core ./riscv_tests/rv32ui-p-bgeu.hex -s -b >> results.txt
# echo ./riscv_tests/rv32ui-p-blt.hex >> results.txt echo ./riscv_tests/rv32ui-p-blt.hex >> results.txt
# ./harptool -E -a rv32i --core ./riscv_tests/rv32ui-p-blt.hex -s -b >> results.txt ./harptool -E -a rv32i --core ./riscv_tests/rv32ui-p-blt.hex -s -b >> results.txt
# echo ./riscv_tests/rv32ui-p-bltu.hex >> results.txt echo ./riscv_tests/rv32ui-p-bltu.hex >> results.txt
# ./harptool -E -a rv32i --core ./riscv_tests/rv32ui-p-bltu.hex -s -b >> results.txt ./harptool -E -a rv32i --core ./riscv_tests/rv32ui-p-bltu.hex -s -b >> results.txt
# echo ./riscv_tests/rv32ui-p-bne.hex >> results.txt echo ./riscv_tests/rv32ui-p-bne.hex >> results.txt
# ./harptool -E -a rv32i --core ./riscv_tests/rv32ui-p-bne.hex -s -b >> results.txt ./harptool -E -a rv32i --core ./riscv_tests/rv32ui-p-bne.hex -s -b >> results.txt
# echo ./riscv_tests/rv32ui-p-jal.hex >> results.txt echo ./riscv_tests/rv32ui-p-jal.hex >> results.txt
# ./harptool -E -a rv32i --core ./riscv_tests/rv32ui-p-jal.hex -s -b >> results.txt ./harptool -E -a rv32i --core ./riscv_tests/rv32ui-p-jal.hex -s -b >> results.txt
# echo ./riscv_tests/rv32ui-p-jalr.hex >> results.txt echo ./riscv_tests/rv32ui-p-jalr.hex >> results.txt
# ./harptool -E -a rv32i --core ./riscv_tests/rv32ui-p-jalr.hex -s -b >> results.txt ./harptool -E -a rv32i --core ./riscv_tests/rv32ui-p-jalr.hex -s -b >> results.txt
# echo ./riscv_tests/rv32ui-p-lb.hex >> results.txt echo ./riscv_tests/rv32ui-p-lb.hex >> results.txt
# ./harptool -E -a rv32i --core ./riscv_tests/rv32ui-p-lb.hex -s -b >> results.txt ./harptool -E -a rv32i --core ./riscv_tests/rv32ui-p-lb.hex -s -b >> results.txt
# echo ./riscv_tests/rv32ui-p-lbu.hex >> results.txt echo ./riscv_tests/rv32ui-p-lbu.hex >> results.txt
# ./harptool -E -a rv32i --core ./riscv_tests/rv32ui-p-lbu.hex -s -b >> results.txt ./harptool -E -a rv32i --core ./riscv_tests/rv32ui-p-lbu.hex -s -b >> results.txt
# echo ./riscv_tests/rv32ui-p-lh.hex >> results.txt echo ./riscv_tests/rv32ui-p-lh.hex >> results.txt
# ./harptool -E -a rv32i --core ./riscv_tests/rv32ui-p-lh.hex -s -b >> results.txt ./harptool -E -a rv32i --core ./riscv_tests/rv32ui-p-lh.hex -s -b >> results.txt
# echo ./riscv_tests/rv32ui-p-lhu.hex >> results.txt echo ./riscv_tests/rv32ui-p-lhu.hex >> results.txt
# ./harptool -E -a rv32i --core ./riscv_tests/rv32ui-p-lhu.hex -s -b >> results.txt ./harptool -E -a rv32i --core ./riscv_tests/rv32ui-p-lhu.hex -s -b >> results.txt
# echo ./riscv_tests/rv32ui-p-lui.hex >> results.txt echo ./riscv_tests/rv32ui-p-lui.hex >> results.txt
# ./harptool -E -a rv32i --core ./riscv_tests/rv32ui-p-lui.hex -s -b >> results.txt ./harptool -E -a rv32i --core ./riscv_tests/rv32ui-p-lui.hex -s -b >> results.txt
echo ./riscv_tests/rv32ui-p-lw.hex >> results.txt echo ./riscv_tests/rv32ui-p-lw.hex >> results.txt
./harptool -E -a rv32i --core ./riscv_tests/rv32ui-p-lw.hex -s -b >> results.txt ./harptool -E -a rv32i --core ./riscv_tests/rv32ui-p-lw.hex -s -b >> results.txt
# echo ./riscv_tests/rv32ui-p-or.hex >> results.txt echo ./riscv_tests/rv32ui-p-or.hex >> results.txt
# ./harptool -E -a rv32i --core ./riscv_tests/rv32ui-p-or.hex -s -b >> results.txt ./harptool -E -a rv32i --core ./riscv_tests/rv32ui-p-or.hex -s -b >> results.txt
# echo ./riscv_tests/rv32ui-p-ori.hex >> results.txt echo ./riscv_tests/rv32ui-p-ori.hex >> results.txt
# ./harptool -E -a rv32i --core ./riscv_tests/rv32ui-p-ori.hex -s -b >> results.txt ./harptool -E -a rv32i --core ./riscv_tests/rv32ui-p-ori.hex -s -b >> results.txt
# echo ./riscv_tests/rv32ui-p-sb.hex >> results.txt echo ./riscv_tests/rv32ui-p-sb.hex >> results.txt
# ./harptool -E -a rv32i --core ./riscv_tests/rv32ui-p-sb.hex -s -b >> results.txt ./harptool -E -a rv32i --core ./riscv_tests/rv32ui-p-sb.hex -s -b >> results.txt
# echo ./riscv_tests/rv32ui-p-sh.hex >> results.txt echo ./riscv_tests/rv32ui-p-sh.hex >> results.txt
# ./harptool -E -a rv32i --core ./riscv_tests/rv32ui-p-sh.hex -s -b >> results.txt ./harptool -E -a rv32i --core ./riscv_tests/rv32ui-p-sh.hex -s -b >> results.txt
# echo ./riscv_tests/rv32ui-p-simple.hex >> results.txt echo ./riscv_tests/rv32ui-p-simple.hex >> results.txt
# ./harptool -E -a rv32i --core ./riscv_tests/rv32ui-p-simple.hex -s -b >> results.txt ./harptool -E -a rv32i --core ./riscv_tests/rv32ui-p-simple.hex -s -b >> results.txt
# echo ./riscv_tests/rv32ui-p-sll.hex >> results.txt echo ./riscv_tests/rv32ui-p-sll.hex >> results.txt
# ./harptool -E -a rv32i --core ./riscv_tests/rv32ui-p-sll.hex -s -b >> results.txt ./harptool -E -a rv32i --core ./riscv_tests/rv32ui-p-sll.hex -s -b >> results.txt
# echo ./riscv_tests/rv32ui-p-slli.hex >> results.txt echo ./riscv_tests/rv32ui-p-slli.hex >> results.txt
# ./harptool -E -a rv32i --core ./riscv_tests/rv32ui-p-slli.hex -s -b >> results.txt ./harptool -E -a rv32i --core ./riscv_tests/rv32ui-p-slli.hex -s -b >> results.txt
# echo ./riscv_tests/rv32ui-p-slt.hex >> results.txt echo ./riscv_tests/rv32ui-p-slt.hex >> results.txt
# ./harptool -E -a rv32i --core ./riscv_tests/rv32ui-p-slt.hex -s -b >> results.txt ./harptool -E -a rv32i --core ./riscv_tests/rv32ui-p-slt.hex -s -b >> results.txt
# echo ./riscv_tests/rv32ui-p-slti.hex >> results.txt echo ./riscv_tests/rv32ui-p-slti.hex >> results.txt
# ./harptool -E -a rv32i --core ./riscv_tests/rv32ui-p-slti.hex -s -b >> results.txt ./harptool -E -a rv32i --core ./riscv_tests/rv32ui-p-slti.hex -s -b >> results.txt
# echo ./riscv_tests/rv32ui-p-sltiu.hex >> results.txt echo ./riscv_tests/rv32ui-p-sltiu.hex >> results.txt
# ./harptool -E -a rv32i --core ./riscv_tests/rv32ui-p-sltiu.hex -s -b >> results.txt ./harptool -E -a rv32i --core ./riscv_tests/rv32ui-p-sltiu.hex -s -b >> results.txt
# echo ./riscv_tests/rv32ui-p-sltu.hex >> results.txt echo ./riscv_tests/rv32ui-p-sltu.hex >> results.txt
# ./harptool -E -a rv32i --core ./riscv_tests/rv32ui-p-sltu.hex -s -b >> results.txt ./harptool -E -a rv32i --core ./riscv_tests/rv32ui-p-sltu.hex -s -b >> results.txt
# echo ./riscv_tests/rv32ui-p-sra.hex >> results.txt echo ./riscv_tests/rv32ui-p-sra.hex >> results.txt
# ./harptool -E -a rv32i --core ./riscv_tests/rv32ui-p-sra.hex -s -b >> results.txt ./harptool -E -a rv32i --core ./riscv_tests/rv32ui-p-sra.hex -s -b >> results.txt
# echo ./riscv_tests/rv32ui-p-srai.hex >> results.txt echo ./riscv_tests/rv32ui-p-srai.hex >> results.txt
# ./harptool -E -a rv32i --core ./riscv_tests/rv32ui-p-srai.hex -s -b >> results.txt ./harptool -E -a rv32i --core ./riscv_tests/rv32ui-p-srai.hex -s -b >> results.txt
# echo ./riscv_tests/rv32ui-p-srl.hex >> results.txt echo ./riscv_tests/rv32ui-p-srl.hex >> results.txt
# ./harptool -E -a rv32i --core ./riscv_tests/rv32ui-p-srl.hex -s -b >> results.txt ./harptool -E -a rv32i --core ./riscv_tests/rv32ui-p-srl.hex -s -b >> results.txt
# echo ./riscv_tests/rv32ui-p-srli.hex >> results.txt echo ./riscv_tests/rv32ui-p-srli.hex >> results.txt
# ./harptool -E -a rv32i --core ./riscv_tests/rv32ui-p-srli.hex -s -b >> results.txt ./harptool -E -a rv32i --core ./riscv_tests/rv32ui-p-srli.hex -s -b >> results.txt
# echo ./riscv_tests/rv32ui-p-sub.hex >> results.txt echo ./riscv_tests/rv32ui-p-sub.hex >> results.txt
# ./harptool -E -a rv32i --core ./riscv_tests/rv32ui-p-sub.hex -s -b >> results.txt ./harptool -E -a rv32i --core ./riscv_tests/rv32ui-p-sub.hex -s -b >> results.txt
# echo ./riscv_tests/rv32ui-p-sw.hex >> results.txt echo ./riscv_tests/rv32ui-p-sw.hex >> results.txt
# ./harptool -E -a rv32i --core ./riscv_tests/rv32ui-p-sw.hex -s -b >> results.txt ./harptool -E -a rv32i --core ./riscv_tests/rv32ui-p-sw.hex -s -b >> results.txt
# echo ./riscv_tests/rv32ui-p-xor.hex >> results.txt echo ./riscv_tests/rv32ui-p-xor.hex >> results.txt
# ./harptool -E -a rv32i --core ./riscv_tests/rv32ui-p-xor.hex -s -b >> results.txt ./harptool -E -a rv32i --core ./riscv_tests/rv32ui-p-xor.hex -s -b >> results.txt
# echo ./riscv_tests/rv32ui-p-xori.hex >> results.txt echo ./riscv_tests/rv32ui-p-xori.hex >> results.txt
# ./harptool -E -a rv32i --core ./riscv_tests/rv32ui-p-xori.hex -s -b >> results.txt ./harptool -E -a rv32i --core ./riscv_tests/rv32ui-p-xori.hex -s -b >> results.txt