diff --git a/emulator/args.o b/emulator/args.o index b82b4373..052c8b1e 100644 Binary files a/emulator/args.o and b/emulator/args.o differ diff --git a/emulator/core.cpp b/emulator/core.cpp index a5a7d4a1..51daf5c6 100644 --- a/emulator/core.cpp +++ b/emulator/core.cpp @@ -3,6 +3,7 @@ *******************************************************************************/ #include +#include // #define USE_DEBUG 7 // #define PRINT_ACTIVE_THREADS @@ -36,7 +37,7 @@ 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.push_back(Warp(this, i)); w[0].activeThreads = 1; w[0].spawned = true; @@ -53,6 +54,7 @@ void Core::step() { 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 << ']'); @@ -93,11 +95,12 @@ void Core::printStats() const { } Warp::Warp(Core *c, Word id) : - core(c), pc(0), interruptEnable(true), + core(c), pc(0x80000000), 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) { + D(3, "Creating a new thread with PC: " << hex << this->pc << '\n'); /* Build the register file. */ Word regNum(0); for (Word j = 0; j < core->a.getNThds(); ++j) { @@ -111,8 +114,10 @@ Warp::Warp(Core *c, Word id) : pred[j].push_back(Reg(id, regNum++)); } - tmask.push_back(true); - shadowTmask.push_back(true); + bool act = false; + if (j == 0) act = true; + tmask.push_back(act); + shadowTmask.push_back(act); } Word csrNum(0); @@ -197,9 +202,9 @@ void Warp::step() { if (USE_DEBUG >= 3) { D(3, "Register state:"); for (unsigned i = 0; i < reg[0].size(); ++i) { - D_RAW(" %r" << dec << i << ':'); + D_RAW(" %r" << setfill(' ') << setw(2) << dec << i << ':'); for (unsigned j = 0; j < reg.size(); ++j) - D_RAW(' ' << hex << reg[j][i] << ' '); + D_RAW(' ' << setfill('0') << setw(8) << hex << reg[j][i] << setfill(' ') << ' '); D_RAW('(' << shadowReg[i] << ')' << endl); } // D(3, "Predicate state:"); diff --git a/emulator/core.o b/emulator/core.o index 5e55d1fd..62ec4f3c 100644 Binary files a/emulator/core.o and b/emulator/core.o differ diff --git a/emulator/enc.o b/emulator/enc.o index d62e4d92..f5f8e370 100644 Binary files a/emulator/enc.o and b/emulator/enc.o differ diff --git a/emulator/harptool b/emulator/harptool index 0cf9a2cd..cb141580 100755 Binary files a/emulator/harptool and b/emulator/harptool differ diff --git a/emulator/harptool.o b/emulator/harptool.o index 5e3f8760..84af87f3 100644 Binary files a/emulator/harptool.o and b/emulator/harptool.o differ diff --git a/emulator/include/debug.h b/emulator/include/debug.h index 32208896..cd8c7e48 100644 --- a/emulator/include/debug.h +++ b/emulator/include/debug.h @@ -4,7 +4,7 @@ #ifndef __DEBUG_H #define __DEBUG_H -// #define USE_DEBUG 9 +#define USE_DEBUG 9 #ifdef USE_DEBUG #include diff --git a/emulator/instruction.cpp b/emulator/instruction.cpp index e521a79b..5dbbc29a 100644 --- a/emulator/instruction.cpp +++ b/emulator/instruction.cpp @@ -138,18 +138,38 @@ void Instruction::executeOn(Warp &c) { bool join = (op == GPGPU) && (func3 == 3); - predicated = (op == GPGPU) && ((func3 == 7) || (func3 == 2)); + // predicated = (op == GPGPU) && ((func3 == 7) || (func3 == 2)); + // bool is_branch = (op == B_INST); + // bool is_jump = (op == JAL_INST) || (op == JALR_INST); + + bool is_gpgpu = (op == GPGPU); + + bool is_tmc = is_gpgpu && (func3 == 0); + bool is_wspawn = is_gpgpu && (func3 == 1); + bool is_barrier = is_gpgpu && (func3 == 4); + bool is_split = is_gpgpu && (func3 == 2); + bool is_join = is_gpgpu && (func3 == 3); + + bool gpgpu_zero = (is_tmc || is_barrier || is_wspawn) && (t != 0); + + bool not_active = !c.tmask[t]; + + if (not_active || gpgpu_zero) + { + continue; + } + // 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; - } + // if (((predicated && !reg[pred]) || !c.tmask[t]) && !split && !join) + // { + // // cout << "about to continue\n"; + // continue; + // } // cout << "after\n"; ++c.insts; @@ -163,6 +183,7 @@ void Instruction::executeOn(Warp &c) { bool m_exten; // std::cout << "op = " << op << "\n"; // std::cout << "R_INST: " << R_INST << "\n"; + int num_to_wspawn; switch (op) { case NOP: @@ -462,11 +483,11 @@ void Instruction::executeOn(Warp &c) { //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 << "STORE MEM ADDRESS: " << std::hex << reg[rsrc[0]] << " + " << immsrc << "\n"; // //std::cout << "FUNC3: " << func3 << "\n"; - if (memAddr == 0x00010000) + if ((memAddr == 0x00010000) && (t == 0)) { - std::cout << (char) reg[rsrc[1]]; + fprintf(stderr, "%c", (char) reg[rsrc[1]]); break; } switch (func3) @@ -558,7 +579,7 @@ void Instruction::executeOn(Warp &c) { 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 (!pcSet) {/*std::cout << "JAL... SETTING PC: " << nextPc << "\n"; */} if (rdest != 0) { reg[rdest] = c.pc; @@ -566,9 +587,9 @@ void Instruction::executeOn(Warp &c) { pcSet = true; break; case JALR_INST: - //std::cout << "JALR_INST\n"; + std::cout << "JALR_INST\n"; if (!pcSet) nextPc = reg[rsrc[0]] + immsrc; - if (!pcSet) //std::cout << "JALR... SETTING PC: " << nextPc << "\n"; + if (!pcSet) {/*std::cout << "JALR... SETTING PC: " << nextPc << "\n";*/ } if (rdest != 0) { reg[rdest] = c.pc; @@ -578,76 +599,85 @@ void Instruction::executeOn(Warp &c) { case SYS_INST: //std::cout << "SYS_INST\n"; temp = reg[rsrc[0]]; - switch (func3) + if (immsrc == 0x20) // ThreadID { - 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; + reg[rdest] = t; + D(2, "CSR Reading tid " << hex << immsrc << dec << " and returning " << reg[rdest]); + } else if (immsrc == 0x21) // WarpID + { + reg[rdest] = c.id; + D(2, "CSR Reading wid " << hex << immsrc << dec << " and returning " << reg[rdest]); } + // 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"; @@ -670,30 +700,44 @@ void Instruction::executeOn(Warp &c) { //std::cout << "GPGPU\n"; switch(func3) { - case 0: + case 1: // WSPAWN - //std::cout << "WSPAWN\n"; + 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) + num_to_wspawn = reg[rsrc[0]]; + + D(0, "Spawning " << num_to_wspawn << " new warps at PC: " << hex << reg[rsrc[1]]); + for (unsigned i = 1; i < num_to_wspawn; ++i) { // std::cout << "SPAWNING WARP\n"; Warp &newWarp(c.core->w[i]); // //std::cout << "STARTING\n"; - if (newWarp.spawned == false) { + // if (newWarp.spawned == false) + { // //std::cout << "ABOUT TO START\n"; - newWarp.pc = reg[rsrc[0]]; - newWarp.reg[0] = reg; - newWarp.csr = c.csr; + newWarp.pc = reg[rsrc[1]]; + // newWarp.reg[0] = reg; + // newWarp.csr = c.csr; + for (int kk = 0; kk < newWarp.tmask.size(); kk++) + { + if (kk == 0) + { + newWarp.tmask[kk] = true; + } + else + { + newWarp.tmask[kk] = false; + } + } newWarp.activeThreads = 1; newWarp.supervisorMode = false; newWarp.spawned = true; - break; } } + break; } break; case 2: @@ -704,12 +748,16 @@ void Instruction::executeOn(Warp &c) { { sjOnce = false; if (checkUnanimous(pred, c.reg, c.tmask)) { - //std::cout << "Unanimous pred: " << pred << " val: " << reg[pred] << "\n"; + std::cout << "Unanimous pred: " << pred << " val: " << reg[pred] << "\n"; DomStackEntry e(c.tmask); e.uni = true; c.domStack.push(e); break; } + cout << "Split: Original TM: "; + for (auto y : c.tmask) cout << y << " "; + cout << "\n"; + DomStackEntry e(pred, c.reg, c.tmask, c.pc); c.domStack.push(c.tmask); c.domStack.push(e); @@ -717,49 +765,79 @@ void Instruction::executeOn(Warp &c) { { c.tmask[i] = !e.tmask[i] && c.tmask[i]; } + + + cout << "Split: New TM\n"; + for (auto y : c.tmask) cout << y << " "; + cout << "\n"; + cout << "Split: Pushed TM PC: " << hex << e.pc << dec << "\n"; + for (auto y : e.tmask) cout << y << " "; + cout << "\n"; } - } break; + } case 3: // JOIN //std::cout << "JOIN\n"; + D(3, "JOIN INSTRUCTION"); if (sjOnce) { sjOnce = false; if (!c.domStack.empty() && c.domStack.top().uni) { D(2, "Uni branch at join"); + printf("NEW DOMESTACK: \n"); c.tmask = c.domStack.top().tmask; c.domStack.pop(); break; } if (!c.domStack.top().fallThrough) { - if (!pcSet) nextPc = c.domStack.top().pc; + if (!pcSet) { + nextPc = c.domStack.top().pc; + cout << "join: NOT FALLTHROUGH PC: " << hex << nextPc << dec << '\n'; + } pcSet = true; } + + cout << "Join: Old TM: "; + for (auto y : c.tmask) cout << y << " "; + cout << "\n"; c.tmask = c.domStack.top().tmask; + + cout << "Join: New TM: " << '\n'; + for (auto y : c.tmask) cout << y << " "; + cout << "\n"; + c.domStack.pop(); } break; case 4: - // JMPRT - //std::cout << "JMPRT\n"; - nextActiveThreads = 1; - if (!pcSet) nextPc = reg[rsrc[0]]; - pcSet = true; + // is_barrier 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 + case 0: + // TMC //std::cout << "JALRS\n"; - nextActiveThreads = reg[rsrc[1]]; - reg[rdest] = c.pc; - if (!pcSet) nextPc = reg[rsrc[0]]; - pcSet = true; + + nextActiveThreads = reg[rsrc[0]]; + { + for (int ff = 0; ff < c.tmask.size(); ff++) + { + if (ff < nextActiveThreads) + { + c.tmask[ff] = true; + } + else + { + c.tmask[ff] = false; + } + } + } + if (nextActiveThreads == 0) + { + c.spawned = false; + } + // 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; @@ -794,7 +872,11 @@ void Instruction::executeOn(Warp &c) { // 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 (pcSet) + { + c.pc = nextPc; + cout << "Next PC: " << hex << nextPc << dec << "\n"; + } if (nextActiveThreads > c.reg.size()) { cerr << "Error: attempt to spawn " << nextActiveThreads << " threads. " diff --git a/emulator/instruction.o b/emulator/instruction.o index 5fe73f1d..fa825403 100644 Binary files a/emulator/instruction.o and b/emulator/instruction.o differ diff --git a/emulator/libharplib.a b/emulator/libharplib.a index 045f5b74..6b7d5e88 100644 Binary files a/emulator/libharplib.a and b/emulator/libharplib.a differ diff --git a/emulator/libharplib.so b/emulator/libharplib.so index 6afd15b4..c147329e 100755 Binary files a/emulator/libharplib.so and b/emulator/libharplib.so differ diff --git a/emulator/mem.cpp b/emulator/mem.cpp index ebd71530..65b1464a 100644 --- a/emulator/mem.cpp +++ b/emulator/mem.cpp @@ -102,10 +102,10 @@ void MemoryUnit::ADecoder::write(Addr a, Word w, bool sup, Size wordSize) { Word before = m.read(a); Word new_word = w; - if (a == 0x8000012c) - { - printf("WRITING TO 0x8000012c -> %d\n", w); - } + // if (a == 0x00010000) + // { + // fprintf(stderr, "%c", w); + // } if (wordSize == 8) { diff --git a/emulator/mem.o b/emulator/mem.o index 54a170a2..ecb0f803 100644 Binary files a/emulator/mem.o and b/emulator/mem.o differ diff --git a/emulator/test_riscv.sh b/emulator/test_riscv.sh index 96a7a446..da6e89bc 100755 --- a/emulator/test_riscv.sh +++ b/emulator/test_riscv.sh @@ -1,4 +1,4 @@ echo start > results.txt echo ../kernel/vortex_test.hex -./harptool -E -a rv32i --core ../kernel/vortex_test.hex -s -b +./harptool -E -a rv32i --core ../runtime/vortex_runtime.hex -s -b 1> emulator.debug diff --git a/emulator/util.o b/emulator/util.o index 4bf5b10f..c474368e 100644 Binary files a/emulator/util.o and b/emulator/util.o differ diff --git a/kernel/vx_main.c b/kernel/vx_main.c index 99e130b0..031a2c3c 100644 --- a/kernel/vx_main.c +++ b/kernel/vx_main.c @@ -69,7 +69,7 @@ int main() // unsigned scal = 3; // // matrix element add - // vx_e_mat_add(z, &scal, z, NUM_ROWS, NUM_COLS); + vx_e_mat_add(z, &scal, z, NUM_ROWS, NUM_COLS); // vx_print_str("\n\nMatrix Element Addition\n"); // print_matrix(z); diff --git a/runtime/startup/vx_start.s b/runtime/startup/vx_start.s index 03f12c31..9e05aa2e 100644 --- a/runtime/startup/vx_start.s +++ b/runtime/startup/vx_start.s @@ -19,7 +19,7 @@ vx_set_sp: .word 0x0005006b # tmc 4 csrr a3, 0x21 # get wid - slli a3, a3, 15 # shift by wid + slli a3, a3, 0x1a # shift by wid csrr a2, 0x20 # get tid slli a1, a2, 10 # multiply tid by 1024 slli a2, a2, 2 # multiply tid by 4 diff --git a/runtime/tests/tests.c b/runtime/tests/tests.c index 1aa856ee..7b449ef7 100644 --- a/runtime/tests/tests.c +++ b/runtime/tests/tests.c @@ -106,14 +106,14 @@ void test_wsapwn() void intrinsics_tests() { - // // TMC test - // test_tmc(); + // TMC test + test_tmc(); - // // Control Divergence Test - // vx_print_str("test_divergence\n"); - // vx_tmc(4); - // test_divergence(); - // vx_tmc(1); + // Control Divergence Test + vx_print_str("test_divergence\n"); + vx_tmc(4); + test_divergence(); + vx_tmc(1); // Test wspawn diff --git a/runtime/vortex_runtime.dump b/runtime/vortex_runtime.dump index edd93f4b..f875ed52 100644 --- a/runtime/vortex_runtime.dump +++ b/runtime/vortex_runtime.dump @@ -10,7 +10,7 @@ Disassembly of section .text: 80000008: 00400513 li a0,4 8000000c: 00b5106b 0xb5106b 80000010: 010000ef jal ra,80000020 -80000014: 720000ef jal ra,80000734
+80000014: 748000ef jal ra,8000075c
80000018: 00000513 li a0,0 8000001c: 0005006b 0x5006b @@ -18,7 +18,7 @@ Disassembly of section .text: 80000020: 00400513 li a0,4 80000024: 0005006b 0x5006b 80000028: 021026f3 csrr a3,0x21 -8000002c: 00f69693 slli a3,a3,0xf +8000002c: 01a69693 slli a3,a3,0x1a 80000030: 02002673 csrr a2,0x20 80000034: 00a61593 slli a1,a2,0xa 80000038: 00261613 slli a2,a2,0x2 @@ -114,7 +114,7 @@ Disassembly of section .text: 80000128: 810007b7 lui a5,0x81000 8000012c: fec42703 lw a4,-20(s0) 80000130: 00271713 slli a4,a4,0x2 -80000134: 0f478793 addi a5,a5,244 # 810000f4 +80000134: 0fc78793 addi a5,a5,252 # 810000fc 80000138: 00f707b3 add a5,a4,a5 8000013c: 0007a783 lw a5,0(a5) 80000140: 00078513 mv a0,a5 @@ -137,7 +137,7 @@ Disassembly of section .text: 8000017c: fe842503 lw a0,-24(s0) 80000180: f95ff0ef jal ra,80000114 80000184: 810007b7 lui a5,0x81000 -80000188: 04078513 addi a0,a5,64 # 81000040 +80000188: 04078513 addi a0,a5,64 # 81000040 8000018c: f4dff0ef jal ra,800000d8 80000190: 00000013 nop 80000194: 01c12083 lw ra,28(sp) @@ -151,13 +151,13 @@ Disassembly of section .text: 800001ac: 00812c23 sw s0,24(sp) 800001b0: 02010413 addi s0,sp,32 800001b4: 810007b7 lui a5,0x81000 -800001b8: 23c7a783 lw a5,572(a5) # 8100023c +800001b8: 2447a783 lw a5,580(a5) # 81000244 800001bc: 00078513 mv a0,a5 800001c0: ea9ff0ef jal ra,80000068 800001c4: 810007b7 lui a5,0x81000 -800001c8: 2387a703 lw a4,568(a5) # 81000238 +800001c8: 2407a703 lw a4,576(a5) # 81000240 800001cc: 810007b7 lui a5,0x81000 -800001d0: 2347a783 lw a5,564(a5) # 81000234 +800001d0: 23c7a783 lw a5,572(a5) # 8100023c 800001d4: 00078513 mv a0,a5 800001d8: 000700e7 jalr a4 800001dc: eadff0ef jal ra,80000088 @@ -186,359 +186,421 @@ Disassembly of section .text: 80000230: fed42023 sw a3,-32(s0) 80000234: 810007b7 lui a5,0x81000 80000238: fe442703 lw a4,-28(s0) -8000023c: 22e7ac23 sw a4,568(a5) # 81000238 +8000023c: 24e7a023 sw a4,576(a5) # 81000240 80000240: 810007b7 lui a5,0x81000 80000244: fe042703 lw a4,-32(s0) -80000248: 22e7aa23 sw a4,564(a5) # 81000234 +80000248: 22e7ae23 sw a4,572(a5) # 8100023c 8000024c: 810007b7 lui a5,0x81000 80000250: fe842703 lw a4,-24(s0) -80000254: 22e7ae23 sw a4,572(a5) # 8100023c -80000258: fe442783 lw a5,-28(s0) -8000025c: 00078593 mv a1,a5 -80000260: fec42503 lw a0,-20(s0) -80000264: dfdff0ef jal ra,80000060 -80000268: f3dff0ef jal ra,800001a4 -8000026c: 00000013 nop -80000270: 01c12083 lw ra,28(sp) -80000274: 01812403 lw s0,24(sp) -80000278: 02010113 addi sp,sp,32 -8000027c: 00008067 ret +80000254: 24e7a223 sw a4,580(a5) # 81000244 +80000258: 800007b7 lui a5,0x80000 +8000025c: 1a478793 addi a5,a5,420 # 800001a4 +80000260: 00078593 mv a1,a5 +80000264: fec42503 lw a0,-20(s0) +80000268: df9ff0ef jal ra,80000060 +8000026c: f39ff0ef jal ra,800001a4 +80000270: 00000013 nop +80000274: 01c12083 lw ra,28(sp) +80000278: 01812403 lw s0,24(sp) +8000027c: 02010113 addi sp,sp,32 +80000280: 00008067 ret -80000280 : -80000280: fe010113 addi sp,sp,-32 -80000284: 00112e23 sw ra,28(sp) -80000288: 00812c23 sw s0,24(sp) -8000028c: 02010413 addi s0,sp,32 -80000290: 810007b7 lui a5,0x81000 -80000294: 08478513 addi a0,a5,132 # 81000084 -80000298: e41ff0ef jal ra,800000d8 -8000029c: 00400513 li a0,4 -800002a0: dc9ff0ef jal ra,80000068 -800002a4: dedff0ef jal ra,80000090 -800002a8: fea42623 sw a0,-20(s0) -800002ac: fec42703 lw a4,-20(s0) -800002b0: 810007b7 lui a5,0x81000 -800002b4: fec42683 lw a3,-20(s0) -800002b8: 00269693 slli a3,a3,0x2 -800002bc: 24078793 addi a5,a5,576 # 81000240 -800002c0: 00f687b3 add a5,a3,a5 -800002c4: 00e7a023 sw a4,0(a5) -800002c8: 00100513 li a0,1 -800002cc: d9dff0ef jal ra,80000068 -800002d0: 810007b7 lui a5,0x81000 -800002d4: 2407a783 lw a5,576(a5) # 81000240 -800002d8: 00078513 mv a0,a5 -800002dc: e39ff0ef jal ra,80000114 -800002e0: 810007b7 lui a5,0x81000 -800002e4: 09078513 addi a0,a5,144 # 81000090 -800002e8: df1ff0ef jal ra,800000d8 -800002ec: 810007b7 lui a5,0x81000 -800002f0: 24078793 addi a5,a5,576 # 81000240 -800002f4: 0047a783 lw a5,4(a5) -800002f8: 00078513 mv a0,a5 -800002fc: e19ff0ef jal ra,80000114 -80000300: 810007b7 lui a5,0x81000 -80000304: 09078513 addi a0,a5,144 # 81000090 -80000308: dd1ff0ef jal ra,800000d8 -8000030c: 810007b7 lui a5,0x81000 -80000310: 24078793 addi a5,a5,576 # 81000240 -80000314: 0087a783 lw a5,8(a5) -80000318: 00078513 mv a0,a5 -8000031c: df9ff0ef jal ra,80000114 -80000320: 810007b7 lui a5,0x81000 -80000324: 09078513 addi a0,a5,144 # 81000090 -80000328: db1ff0ef jal ra,800000d8 -8000032c: 810007b7 lui a5,0x81000 -80000330: 24078793 addi a5,a5,576 # 81000240 -80000334: 00c7a783 lw a5,12(a5) -80000338: 00078513 mv a0,a5 -8000033c: dd9ff0ef jal ra,80000114 -80000340: 810007b7 lui a5,0x81000 -80000344: 09078513 addi a0,a5,144 # 81000090 -80000348: d91ff0ef jal ra,800000d8 -8000034c: 00000013 nop -80000350: 01c12083 lw ra,28(sp) -80000354: 01812403 lw s0,24(sp) -80000358: 02010113 addi sp,sp,32 -8000035c: 00008067 ret +80000284 : +80000284: fe010113 addi sp,sp,-32 +80000288: 00112e23 sw ra,28(sp) +8000028c: 00812c23 sw s0,24(sp) +80000290: 02010413 addi s0,sp,32 +80000294: 810007b7 lui a5,0x81000 +80000298: 08478513 addi a0,a5,132 # 81000084 +8000029c: e3dff0ef jal ra,800000d8 +800002a0: 00400513 li a0,4 +800002a4: dc5ff0ef jal ra,80000068 +800002a8: de9ff0ef jal ra,80000090 +800002ac: fea42623 sw a0,-20(s0) +800002b0: fec42703 lw a4,-20(s0) +800002b4: 810007b7 lui a5,0x81000 +800002b8: fec42683 lw a3,-20(s0) +800002bc: 00269693 slli a3,a3,0x2 +800002c0: 24878793 addi a5,a5,584 # 81000248 +800002c4: 00f687b3 add a5,a3,a5 +800002c8: 00e7a023 sw a4,0(a5) +800002cc: 00100513 li a0,1 +800002d0: d99ff0ef jal ra,80000068 +800002d4: 810007b7 lui a5,0x81000 +800002d8: 2487a783 lw a5,584(a5) # 81000248 +800002dc: 00078513 mv a0,a5 +800002e0: e35ff0ef jal ra,80000114 +800002e4: 810007b7 lui a5,0x81000 +800002e8: 09078513 addi a0,a5,144 # 81000090 +800002ec: dedff0ef jal ra,800000d8 +800002f0: 810007b7 lui a5,0x81000 +800002f4: 24878793 addi a5,a5,584 # 81000248 +800002f8: 0047a783 lw a5,4(a5) +800002fc: 00078513 mv a0,a5 +80000300: e15ff0ef jal ra,80000114 +80000304: 810007b7 lui a5,0x81000 +80000308: 09078513 addi a0,a5,144 # 81000090 +8000030c: dcdff0ef jal ra,800000d8 +80000310: 810007b7 lui a5,0x81000 +80000314: 24878793 addi a5,a5,584 # 81000248 +80000318: 0087a783 lw a5,8(a5) +8000031c: 00078513 mv a0,a5 +80000320: df5ff0ef jal ra,80000114 +80000324: 810007b7 lui a5,0x81000 +80000328: 09078513 addi a0,a5,144 # 81000090 +8000032c: dadff0ef jal ra,800000d8 +80000330: 810007b7 lui a5,0x81000 +80000334: 24878793 addi a5,a5,584 # 81000248 +80000338: 00c7a783 lw a5,12(a5) +8000033c: 00078513 mv a0,a5 +80000340: dd5ff0ef jal ra,80000114 +80000344: 810007b7 lui a5,0x81000 +80000348: 09078513 addi a0,a5,144 # 81000090 +8000034c: d8dff0ef jal ra,800000d8 +80000350: 00000013 nop +80000354: 01c12083 lw ra,28(sp) +80000358: 01812403 lw s0,24(sp) +8000035c: 02010113 addi sp,sp,32 +80000360: 00008067 ret -80000360 : -80000360: fe010113 addi sp,sp,-32 -80000364: 00112e23 sw ra,28(sp) -80000368: 00812c23 sw s0,24(sp) -8000036c: 02010413 addi s0,sp,32 -80000370: d21ff0ef jal ra,80000090 -80000374: fea42623 sw a0,-20(s0) -80000378: fec42783 lw a5,-20(s0) -8000037c: 0027b793 sltiu a5,a5,2 -80000380: fef405a3 sb a5,-21(s0) -80000384: feb44783 lbu a5,-21(s0) -80000388: 00078513 mv a0,a5 -8000038c: cedff0ef jal ra,80000078 -80000390: feb44783 lbu a5,-21(s0) -80000394: 06078463 beqz a5,800003fc -80000398: fec42783 lw a5,-20(s0) -8000039c: 0017b793 seqz a5,a5 -800003a0: fef40523 sb a5,-22(s0) -800003a4: fea44783 lbu a5,-22(s0) -800003a8: 00078513 mv a0,a5 -800003ac: ccdff0ef jal ra,80000078 -800003b0: fea44783 lbu a5,-22(s0) -800003b4: 02078263 beqz a5,800003d8 -800003b8: 810007b7 lui a5,0x81000 -800003bc: fec42703 lw a4,-20(s0) -800003c0: 00271713 slli a4,a4,0x2 -800003c4: 24078793 addi a5,a5,576 # 81000240 -800003c8: 00f707b3 add a5,a4,a5 -800003cc: 00a00713 li a4,10 -800003d0: 00e7a023 sw a4,0(a5) -800003d4: 0200006f j 800003f4 -800003d8: 810007b7 lui a5,0x81000 -800003dc: fec42703 lw a4,-20(s0) -800003e0: 00271713 slli a4,a4,0x2 -800003e4: 24078793 addi a5,a5,576 # 81000240 -800003e8: 00f707b3 add a5,a4,a5 -800003ec: 00b00713 li a4,11 -800003f0: 00e7a023 sw a4,0(a5) -800003f4: c8dff0ef jal ra,80000080 -800003f8: 0640006f j 8000045c -800003fc: fec42783 lw a5,-20(s0) -80000400: 0037b793 sltiu a5,a5,3 -80000404: fef404a3 sb a5,-23(s0) -80000408: fe944783 lbu a5,-23(s0) -8000040c: 00078513 mv a0,a5 -80000410: c69ff0ef jal ra,80000078 -80000414: fe944783 lbu a5,-23(s0) -80000418: 02078263 beqz a5,8000043c -8000041c: 810007b7 lui a5,0x81000 -80000420: fec42703 lw a4,-20(s0) -80000424: 00271713 slli a4,a4,0x2 -80000428: 24078793 addi a5,a5,576 # 81000240 -8000042c: 00f707b3 add a5,a4,a5 -80000430: 00c00713 li a4,12 -80000434: 00e7a023 sw a4,0(a5) -80000438: 0200006f j 80000458 -8000043c: 810007b7 lui a5,0x81000 -80000440: fec42703 lw a4,-20(s0) -80000444: 00271713 slli a4,a4,0x2 -80000448: 24078793 addi a5,a5,576 # 81000240 -8000044c: 00f707b3 add a5,a4,a5 -80000450: 00d00713 li a4,13 -80000454: 00e7a023 sw a4,0(a5) -80000458: c29ff0ef jal ra,80000080 +80000364 : +80000364: fe010113 addi sp,sp,-32 +80000368: 00112e23 sw ra,28(sp) +8000036c: 00812c23 sw s0,24(sp) +80000370: 02010413 addi s0,sp,32 +80000374: d1dff0ef jal ra,80000090 +80000378: fea42623 sw a0,-20(s0) +8000037c: fec42783 lw a5,-20(s0) +80000380: 0027b793 sltiu a5,a5,2 +80000384: fef405a3 sb a5,-21(s0) +80000388: feb44783 lbu a5,-21(s0) +8000038c: 00078513 mv a0,a5 +80000390: ce9ff0ef jal ra,80000078 +80000394: feb44783 lbu a5,-21(s0) +80000398: 06078463 beqz a5,80000400 +8000039c: fec42783 lw a5,-20(s0) +800003a0: 0017b793 seqz a5,a5 +800003a4: fef40523 sb a5,-22(s0) +800003a8: fea44783 lbu a5,-22(s0) +800003ac: 00078513 mv a0,a5 +800003b0: cc9ff0ef jal ra,80000078 +800003b4: fea44783 lbu a5,-22(s0) +800003b8: 02078263 beqz a5,800003dc +800003bc: 810007b7 lui a5,0x81000 +800003c0: fec42703 lw a4,-20(s0) +800003c4: 00271713 slli a4,a4,0x2 +800003c8: 24878793 addi a5,a5,584 # 81000248 +800003cc: 00f707b3 add a5,a4,a5 +800003d0: 00a00713 li a4,10 +800003d4: 00e7a023 sw a4,0(a5) +800003d8: 0200006f j 800003f8 +800003dc: 810007b7 lui a5,0x81000 +800003e0: fec42703 lw a4,-20(s0) +800003e4: 00271713 slli a4,a4,0x2 +800003e8: 24878793 addi a5,a5,584 # 81000248 +800003ec: 00f707b3 add a5,a4,a5 +800003f0: 00b00713 li a4,11 +800003f4: 00e7a023 sw a4,0(a5) +800003f8: c89ff0ef jal ra,80000080 +800003fc: 0640006f j 80000460 +80000400: fec42783 lw a5,-20(s0) +80000404: 0037b793 sltiu a5,a5,3 +80000408: fef404a3 sb a5,-23(s0) +8000040c: fe944783 lbu a5,-23(s0) +80000410: 00078513 mv a0,a5 +80000414: c65ff0ef jal ra,80000078 +80000418: fe944783 lbu a5,-23(s0) +8000041c: 02078263 beqz a5,80000440 +80000420: 810007b7 lui a5,0x81000 +80000424: fec42703 lw a4,-20(s0) +80000428: 00271713 slli a4,a4,0x2 +8000042c: 24878793 addi a5,a5,584 # 81000248 +80000430: 00f707b3 add a5,a4,a5 +80000434: 00c00713 li a4,12 +80000438: 00e7a023 sw a4,0(a5) +8000043c: 0200006f j 8000045c +80000440: 810007b7 lui a5,0x81000 +80000444: fec42703 lw a4,-20(s0) +80000448: 00271713 slli a4,a4,0x2 +8000044c: 24878793 addi a5,a5,584 # 81000248 +80000450: 00f707b3 add a5,a4,a5 +80000454: 00d00713 li a4,13 +80000458: 00e7a023 sw a4,0(a5) 8000045c: c25ff0ef jal ra,80000080 -80000460: 810007b7 lui a5,0x81000 -80000464: 2407a783 lw a5,576(a5) # 81000240 -80000468: 00078513 mv a0,a5 -8000046c: ca9ff0ef jal ra,80000114 -80000470: 810007b7 lui a5,0x81000 -80000474: 09078513 addi a0,a5,144 # 81000090 -80000478: c61ff0ef jal ra,800000d8 -8000047c: 810007b7 lui a5,0x81000 -80000480: 24078793 addi a5,a5,576 # 81000240 -80000484: 0047a783 lw a5,4(a5) -80000488: 00078513 mv a0,a5 -8000048c: c89ff0ef jal ra,80000114 -80000490: 810007b7 lui a5,0x81000 -80000494: 09078513 addi a0,a5,144 # 81000090 -80000498: c41ff0ef jal ra,800000d8 -8000049c: 810007b7 lui a5,0x81000 -800004a0: 24078793 addi a5,a5,576 # 81000240 -800004a4: 0087a783 lw a5,8(a5) -800004a8: 00078513 mv a0,a5 -800004ac: c69ff0ef jal ra,80000114 -800004b0: 810007b7 lui a5,0x81000 -800004b4: 09078513 addi a0,a5,144 # 81000090 -800004b8: c21ff0ef jal ra,800000d8 -800004bc: 810007b7 lui a5,0x81000 -800004c0: 24078793 addi a5,a5,576 # 81000240 -800004c4: 00c7a783 lw a5,12(a5) -800004c8: 00078513 mv a0,a5 -800004cc: c49ff0ef jal ra,80000114 -800004d0: 810007b7 lui a5,0x81000 -800004d4: 09078513 addi a0,a5,144 # 81000090 -800004d8: c01ff0ef jal ra,800000d8 -800004dc: 00000013 nop -800004e0: 01c12083 lw ra,28(sp) -800004e4: 01812403 lw s0,24(sp) -800004e8: 02010113 addi sp,sp,32 -800004ec: 00008067 ret +80000460: c21ff0ef jal ra,80000080 +80000464: 810007b7 lui a5,0x81000 +80000468: 2487a783 lw a5,584(a5) # 81000248 +8000046c: 00078513 mv a0,a5 +80000470: ca5ff0ef jal ra,80000114 +80000474: 810007b7 lui a5,0x81000 +80000478: 09078513 addi a0,a5,144 # 81000090 +8000047c: c5dff0ef jal ra,800000d8 +80000480: 810007b7 lui a5,0x81000 +80000484: 24878793 addi a5,a5,584 # 81000248 +80000488: 0047a783 lw a5,4(a5) +8000048c: 00078513 mv a0,a5 +80000490: c85ff0ef jal ra,80000114 +80000494: 810007b7 lui a5,0x81000 +80000498: 09078513 addi a0,a5,144 # 81000090 +8000049c: c3dff0ef jal ra,800000d8 +800004a0: 810007b7 lui a5,0x81000 +800004a4: 24878793 addi a5,a5,584 # 81000248 +800004a8: 0087a783 lw a5,8(a5) +800004ac: 00078513 mv a0,a5 +800004b0: c65ff0ef jal ra,80000114 +800004b4: 810007b7 lui a5,0x81000 +800004b8: 09078513 addi a0,a5,144 # 81000090 +800004bc: c1dff0ef jal ra,800000d8 +800004c0: 810007b7 lui a5,0x81000 +800004c4: 24878793 addi a5,a5,584 # 81000248 +800004c8: 00c7a783 lw a5,12(a5) +800004cc: 00078513 mv a0,a5 +800004d0: c45ff0ef jal ra,80000114 +800004d4: 810007b7 lui a5,0x81000 +800004d8: 09078513 addi a0,a5,144 # 81000090 +800004dc: bfdff0ef jal ra,800000d8 +800004e0: 00000013 nop +800004e4: 01c12083 lw ra,28(sp) +800004e8: 01812403 lw s0,24(sp) +800004ec: 02010113 addi sp,sp,32 +800004f0: 00008067 ret -800004f0 : -800004f0: fe010113 addi sp,sp,-32 -800004f4: 00112e23 sw ra,28(sp) -800004f8: 00812c23 sw s0,24(sp) -800004fc: 02010413 addi s0,sp,32 -80000500: b89ff0ef jal ra,80000088 -80000504: fea42623 sw a0,-20(s0) -80000508: 810007b7 lui a5,0x81000 -8000050c: fec42703 lw a4,-20(s0) -80000510: 00271713 slli a4,a4,0x2 -80000514: 25078793 addi a5,a5,592 # 81000250 -80000518: 00f707b3 add a5,a4,a5 -8000051c: fec42703 lw a4,-20(s0) -80000520: 00e7a023 sw a4,0(a5) -80000524: fec42783 lw a5,-20(s0) -80000528: 00078663 beqz a5,80000534 -8000052c: 00000513 li a0,0 -80000530: b39ff0ef jal ra,80000068 -80000534: 00000013 nop -80000538: 01c12083 lw ra,28(sp) -8000053c: 01812403 lw s0,24(sp) -80000540: 02010113 addi sp,sp,32 -80000544: 00008067 ret +800004f4 : +800004f4: fe010113 addi sp,sp,-32 +800004f8: 00112e23 sw ra,28(sp) +800004fc: 00812c23 sw s0,24(sp) +80000500: 02010413 addi s0,sp,32 +80000504: b85ff0ef jal ra,80000088 +80000508: fea42623 sw a0,-20(s0) +8000050c: 810007b7 lui a5,0x81000 +80000510: fec42703 lw a4,-20(s0) +80000514: 00271713 slli a4,a4,0x2 +80000518: 25878793 addi a5,a5,600 # 81000258 +8000051c: 00f707b3 add a5,a4,a5 +80000520: fec42703 lw a4,-20(s0) +80000524: 00e7a023 sw a4,0(a5) +80000528: fec42783 lw a5,-20(s0) +8000052c: 00078663 beqz a5,80000538 +80000530: 00000513 li a0,0 +80000534: b35ff0ef jal ra,80000068 +80000538: 00000013 nop +8000053c: 01c12083 lw ra,28(sp) +80000540: 01812403 lw s0,24(sp) +80000544: 02010113 addi sp,sp,32 +80000548: 00008067 ret -80000548 : -80000548: fe010113 addi sp,sp,-32 -8000054c: 00112e23 sw ra,28(sp) -80000550: 00812c23 sw s0,24(sp) -80000554: 02010413 addi s0,sp,32 -80000558: 800007b7 lui a5,0x80000 -8000055c: 4f078793 addi a5,a5,1264 # 800004f0 -80000560: fef42623 sw a5,-20(s0) -80000564: fec42583 lw a1,-20(s0) -80000568: 00400513 li a0,4 -8000056c: af5ff0ef jal ra,80000060 -80000570: f81ff0ef jal ra,800004f0 -80000574: 810007b7 lui a5,0x81000 -80000578: 2507a783 lw a5,592(a5) # 81000250 -8000057c: 00078513 mv a0,a5 -80000580: b95ff0ef jal ra,80000114 -80000584: 810007b7 lui a5,0x81000 -80000588: 09078513 addi a0,a5,144 # 81000090 -8000058c: b4dff0ef jal ra,800000d8 -80000590: 810007b7 lui a5,0x81000 -80000594: 25078793 addi a5,a5,592 # 81000250 -80000598: 0047a783 lw a5,4(a5) -8000059c: 00078513 mv a0,a5 -800005a0: b75ff0ef jal ra,80000114 -800005a4: 810007b7 lui a5,0x81000 -800005a8: 09078513 addi a0,a5,144 # 81000090 -800005ac: b2dff0ef jal ra,800000d8 -800005b0: 810007b7 lui a5,0x81000 -800005b4: 25078793 addi a5,a5,592 # 81000250 -800005b8: 0087a783 lw a5,8(a5) -800005bc: 00078513 mv a0,a5 -800005c0: b55ff0ef jal ra,80000114 -800005c4: 810007b7 lui a5,0x81000 -800005c8: 09078513 addi a0,a5,144 # 81000090 -800005cc: b0dff0ef jal ra,800000d8 -800005d0: 810007b7 lui a5,0x81000 -800005d4: 25078793 addi a5,a5,592 # 81000250 -800005d8: 00c7a783 lw a5,12(a5) -800005dc: 00078513 mv a0,a5 -800005e0: b35ff0ef jal ra,80000114 -800005e4: 810007b7 lui a5,0x81000 -800005e8: 09078513 addi a0,a5,144 # 81000090 -800005ec: aedff0ef jal ra,800000d8 -800005f0: 00000013 nop -800005f4: 01c12083 lw ra,28(sp) -800005f8: 01812403 lw s0,24(sp) -800005fc: 02010113 addi sp,sp,32 -80000600: 00008067 ret +8000054c : +8000054c: fe010113 addi sp,sp,-32 +80000550: 00112e23 sw ra,28(sp) +80000554: 00812c23 sw s0,24(sp) +80000558: 02010413 addi s0,sp,32 +8000055c: 800007b7 lui a5,0x80000 +80000560: 4f478793 addi a5,a5,1268 # 800004f4 +80000564: fef42623 sw a5,-20(s0) +80000568: fec42583 lw a1,-20(s0) +8000056c: 00400513 li a0,4 +80000570: af1ff0ef jal ra,80000060 +80000574: f81ff0ef jal ra,800004f4 +80000578: 810007b7 lui a5,0x81000 +8000057c: 2587a783 lw a5,600(a5) # 81000258 +80000580: 00078513 mv a0,a5 +80000584: b91ff0ef jal ra,80000114 +80000588: 810007b7 lui a5,0x81000 +8000058c: 09078513 addi a0,a5,144 # 81000090 +80000590: b49ff0ef jal ra,800000d8 +80000594: 810007b7 lui a5,0x81000 +80000598: 25878793 addi a5,a5,600 # 81000258 +8000059c: 0047a783 lw a5,4(a5) +800005a0: 00078513 mv a0,a5 +800005a4: b71ff0ef jal ra,80000114 +800005a8: 810007b7 lui a5,0x81000 +800005ac: 09078513 addi a0,a5,144 # 81000090 +800005b0: b29ff0ef jal ra,800000d8 +800005b4: 810007b7 lui a5,0x81000 +800005b8: 25878793 addi a5,a5,600 # 81000258 +800005bc: 0087a783 lw a5,8(a5) +800005c0: 00078513 mv a0,a5 +800005c4: b51ff0ef jal ra,80000114 +800005c8: 810007b7 lui a5,0x81000 +800005cc: 09078513 addi a0,a5,144 # 81000090 +800005d0: b09ff0ef jal ra,800000d8 +800005d4: 810007b7 lui a5,0x81000 +800005d8: 25878793 addi a5,a5,600 # 81000258 +800005dc: 00c7a783 lw a5,12(a5) +800005e0: 00078513 mv a0,a5 +800005e4: b31ff0ef jal ra,80000114 +800005e8: 810007b7 lui a5,0x81000 +800005ec: 09078513 addi a0,a5,144 # 81000090 +800005f0: ae9ff0ef jal ra,800000d8 +800005f4: 00000013 nop +800005f8: 01c12083 lw ra,28(sp) +800005fc: 01812403 lw s0,24(sp) +80000600: 02010113 addi sp,sp,32 +80000604: 00008067 ret -80000604 : -80000604: ff010113 addi sp,sp,-16 -80000608: 00112623 sw ra,12(sp) -8000060c: 00812423 sw s0,8(sp) -80000610: 01010413 addi s0,sp,16 -80000614: 810007b7 lui a5,0x81000 -80000618: 09478513 addi a0,a5,148 # 81000094 -8000061c: abdff0ef jal ra,800000d8 -80000620: f29ff0ef jal ra,80000548 -80000624: 00000013 nop -80000628: 00c12083 lw ra,12(sp) -8000062c: 00812403 lw s0,8(sp) -80000630: 01010113 addi sp,sp,16 -80000634: 00008067 ret +80000608 : +80000608: ff010113 addi sp,sp,-16 +8000060c: 00112623 sw ra,12(sp) +80000610: 00812423 sw s0,8(sp) +80000614: 01010413 addi s0,sp,16 +80000618: c6dff0ef jal ra,80000284 +8000061c: 810007b7 lui a5,0x81000 +80000620: 09478513 addi a0,a5,148 # 81000094 +80000624: ab5ff0ef jal ra,800000d8 +80000628: 00400513 li a0,4 +8000062c: a3dff0ef jal ra,80000068 +80000630: d35ff0ef jal ra,80000364 +80000634: 00100513 li a0,1 +80000638: a31ff0ef jal ra,80000068 +8000063c: 810007b7 lui a5,0x81000 +80000640: 0a878513 addi a0,a5,168 # 810000a8 +80000644: a95ff0ef jal ra,800000d8 +80000648: f05ff0ef jal ra,8000054c +8000064c: 00000013 nop +80000650: 00c12083 lw ra,12(sp) +80000654: 00812403 lw s0,8(sp) +80000658: 01010113 addi sp,sp,16 +8000065c: 00008067 ret -80000638 : -80000638: fc010113 addi sp,sp,-64 -8000063c: 02112e23 sw ra,60(sp) -80000640: 02812c23 sw s0,56(sp) -80000644: 04010413 addi s0,sp,64 -80000648: fca42623 sw a0,-52(s0) -8000064c: fcc42783 lw a5,-52(s0) -80000650: fef42623 sw a5,-20(s0) -80000654: a35ff0ef jal ra,80000088 -80000658: fea42423 sw a0,-24(s0) -8000065c: a35ff0ef jal ra,80000090 -80000660: fea42223 sw a0,-28(s0) -80000664: fec42783 lw a5,-20(s0) -80000668: 0107a783 lw a5,16(a5) -8000066c: fe842703 lw a4,-24(s0) -80000670: 00f77e63 bgeu a4,a5,8000068c -80000674: fec42783 lw a5,-20(s0) -80000678: 00c7a783 lw a5,12(a5) -8000067c: fe442703 lw a4,-28(s0) -80000680: 00f77663 bgeu a4,a5,8000068c -80000684: 00100793 li a5,1 -80000688: 0080006f j 80000690 -8000068c: 00000793 li a5,0 -80000690: fef401a3 sb a5,-29(s0) -80000694: fe344783 lbu a5,-29(s0) -80000698: 0017f793 andi a5,a5,1 -8000069c: fef401a3 sb a5,-29(s0) -800006a0: fe344783 lbu a5,-29(s0) -800006a4: 00078513 mv a0,a5 -800006a8: 9d1ff0ef jal ra,80000078 -800006ac: fe344783 lbu a5,-29(s0) -800006b0: 06078663 beqz a5,8000071c -800006b4: fec42783 lw a5,-20(s0) -800006b8: 00c7a703 lw a4,12(a5) -800006bc: fe842783 lw a5,-24(s0) -800006c0: 02f707b3 mul a5,a4,a5 -800006c4: fe442703 lw a4,-28(s0) -800006c8: 00f707b3 add a5,a4,a5 -800006cc: fcf42e23 sw a5,-36(s0) -800006d0: fec42783 lw a5,-20(s0) -800006d4: 0007a703 lw a4,0(a5) -800006d8: fdc42783 lw a5,-36(s0) -800006dc: 00279793 slli a5,a5,0x2 -800006e0: 00f707b3 add a5,a4,a5 -800006e4: 0007a683 lw a3,0(a5) -800006e8: fec42783 lw a5,-20(s0) -800006ec: 0047a703 lw a4,4(a5) -800006f0: fdc42783 lw a5,-36(s0) -800006f4: 00279793 slli a5,a5,0x2 -800006f8: 00f707b3 add a5,a4,a5 +80000660 : +80000660: fc010113 addi sp,sp,-64 +80000664: 02112e23 sw ra,60(sp) +80000668: 02812c23 sw s0,56(sp) +8000066c: 04010413 addi s0,sp,64 +80000670: fca42623 sw a0,-52(s0) +80000674: fcc42783 lw a5,-52(s0) +80000678: fef42623 sw a5,-20(s0) +8000067c: a0dff0ef jal ra,80000088 +80000680: fea42423 sw a0,-24(s0) +80000684: a0dff0ef jal ra,80000090 +80000688: fea42223 sw a0,-28(s0) +8000068c: fec42783 lw a5,-20(s0) +80000690: 0107a783 lw a5,16(a5) +80000694: fe842703 lw a4,-24(s0) +80000698: 00f77e63 bgeu a4,a5,800006b4 +8000069c: fec42783 lw a5,-20(s0) +800006a0: 00c7a783 lw a5,12(a5) +800006a4: fe442703 lw a4,-28(s0) +800006a8: 00f77663 bgeu a4,a5,800006b4 +800006ac: 00100793 li a5,1 +800006b0: 0080006f j 800006b8 +800006b4: 00000793 li a5,0 +800006b8: fef401a3 sb a5,-29(s0) +800006bc: fe344783 lbu a5,-29(s0) +800006c0: 0017f793 andi a5,a5,1 +800006c4: fef401a3 sb a5,-29(s0) +800006c8: fe344783 lbu a5,-29(s0) +800006cc: 00078513 mv a0,a5 +800006d0: 9a9ff0ef jal ra,80000078 +800006d4: fe344783 lbu a5,-29(s0) +800006d8: 06078663 beqz a5,80000744 +800006dc: fec42783 lw a5,-20(s0) +800006e0: 00c7a703 lw a4,12(a5) +800006e4: fe842783 lw a5,-24(s0) +800006e8: 02f707b3 mul a5,a4,a5 +800006ec: fe442703 lw a4,-28(s0) +800006f0: 00f707b3 add a5,a4,a5 +800006f4: fcf42e23 sw a5,-36(s0) +800006f8: fec42783 lw a5,-20(s0) 800006fc: 0007a703 lw a4,0(a5) -80000700: fec42783 lw a5,-20(s0) -80000704: 0087a603 lw a2,8(a5) -80000708: fdc42783 lw a5,-36(s0) -8000070c: 00279793 slli a5,a5,0x2 -80000710: 00f607b3 add a5,a2,a5 -80000714: 00e68733 add a4,a3,a4 -80000718: 00e7a023 sw a4,0(a5) -8000071c: 965ff0ef jal ra,80000080 -80000720: 00000013 nop -80000724: 03c12083 lw ra,60(sp) -80000728: 03812403 lw s0,56(sp) -8000072c: 04010113 addi sp,sp,64 -80000730: 00008067 ret +80000700: fdc42783 lw a5,-36(s0) +80000704: 00279793 slli a5,a5,0x2 +80000708: 00f707b3 add a5,a4,a5 +8000070c: 0007a683 lw a3,0(a5) +80000710: fec42783 lw a5,-20(s0) +80000714: 0047a703 lw a4,4(a5) +80000718: fdc42783 lw a5,-36(s0) +8000071c: 00279793 slli a5,a5,0x2 +80000720: 00f707b3 add a5,a4,a5 +80000724: 0007a703 lw a4,0(a5) +80000728: fec42783 lw a5,-20(s0) +8000072c: 0087a603 lw a2,8(a5) +80000730: fdc42783 lw a5,-36(s0) +80000734: 00279793 slli a5,a5,0x2 +80000738: 00f607b3 add a5,a2,a5 +8000073c: 00e68733 add a4,a3,a4 +80000740: 00e7a023 sw a4,0(a5) +80000744: 93dff0ef jal ra,80000080 +80000748: 00000013 nop +8000074c: 03c12083 lw ra,60(sp) +80000750: 03812403 lw s0,56(sp) +80000754: 04010113 addi sp,sp,64 +80000758: 00008067 ret -80000734
: -80000734: ff010113 addi sp,sp,-16 -80000738: 00112623 sw ra,12(sp) -8000073c: 00812423 sw s0,8(sp) -80000740: 01010413 addi s0,sp,16 -80000744: 00100513 li a0,1 -80000748: 921ff0ef jal ra,80000068 -8000074c: b35ff0ef jal ra,80000280 -80000750: 810007b7 lui a5,0x81000 -80000754: 0e078513 addi a0,a5,224 # 810000e0 -80000758: 981ff0ef jal ra,800000d8 -8000075c: 00400513 li a0,4 -80000760: 909ff0ef jal ra,80000068 -80000764: bfdff0ef jal ra,80000360 -80000768: 00100513 li a0,1 -8000076c: 8fdff0ef jal ra,80000068 -80000770: 00000793 li a5,0 -80000774: 00078513 mv a0,a5 -80000778: 00c12083 lw ra,12(sp) -8000077c: 00812403 lw s0,8(sp) -80000780: 01010113 addi sp,sp,16 -80000784: 00008067 ret +8000075c
: +8000075c: fc010113 addi sp,sp,-64 +80000760: 02112e23 sw ra,60(sp) +80000764: 02812c23 sw s0,56(sp) +80000768: 04010413 addi s0,sp,64 +8000076c: 00100513 li a0,1 +80000770: 8f9ff0ef jal ra,80000068 +80000774: 810007b7 lui a5,0x81000 +80000778: 1bc78793 addi a5,a5,444 # 810001bc +8000077c: fcf42423 sw a5,-56(s0) +80000780: 810007b7 lui a5,0x81000 +80000784: 1fc78793 addi a5,a5,508 # 810001fc +80000788: fcf42623 sw a5,-52(s0) +8000078c: 810007b7 lui a5,0x81000 +80000790: 26878793 addi a5,a5,616 # 81000268 +80000794: fcf42823 sw a5,-48(s0) +80000798: 00400793 li a5,4 +8000079c: fcf42a23 sw a5,-44(s0) +800007a0: 00400793 li a5,4 +800007a4: fcf42c23 sw a5,-40(s0) +800007a8: 00400793 li a5,4 +800007ac: fef42223 sw a5,-28(s0) +800007b0: 00400793 li a5,4 +800007b4: fef42023 sw a5,-32(s0) +800007b8: fe442703 lw a4,-28(s0) +800007bc: fe042583 lw a1,-32(s0) +800007c0: fc840793 addi a5,s0,-56 +800007c4: 00078693 mv a3,a5 +800007c8: 800007b7 lui a5,0x80000 +800007cc: 66078613 addi a2,a5,1632 # 80000660 +800007d0: 00070513 mv a0,a4 +800007d4: a41ff0ef jal ra,80000214 +800007d8: fe042623 sw zero,-20(s0) +800007dc: 0800006f j 8000085c +800007e0: fe042423 sw zero,-24(s0) +800007e4: 0540006f j 80000838 +800007e8: fd442703 lw a4,-44(s0) +800007ec: fec42783 lw a5,-20(s0) +800007f0: 02f70733 mul a4,a4,a5 +800007f4: fe842783 lw a5,-24(s0) +800007f8: 00f707b3 add a5,a4,a5 +800007fc: fcf42e23 sw a5,-36(s0) +80000800: 810007b7 lui a5,0x81000 +80000804: fdc42703 lw a4,-36(s0) +80000808: 00271713 slli a4,a4,0x2 +8000080c: 26878793 addi a5,a5,616 # 81000268 +80000810: 00f707b3 add a5,a4,a5 +80000814: 0007a783 lw a5,0(a5) +80000818: 00078513 mv a0,a5 +8000081c: 8f9ff0ef jal ra,80000114 +80000820: 810007b7 lui a5,0x81000 +80000824: 0f478513 addi a0,a5,244 # 810000f4 +80000828: 8b1ff0ef jal ra,800000d8 +8000082c: fe842783 lw a5,-24(s0) +80000830: 00178793 addi a5,a5,1 +80000834: fef42423 sw a5,-24(s0) +80000838: fd442703 lw a4,-44(s0) +8000083c: fe842783 lw a5,-24(s0) +80000840: fae7e4e3 bltu a5,a4,800007e8 +80000844: 810007b7 lui a5,0x81000 +80000848: 0f878513 addi a0,a5,248 # 810000f8 +8000084c: 88dff0ef jal ra,800000d8 +80000850: fec42783 lw a5,-20(s0) +80000854: 00178793 addi a5,a5,1 +80000858: fef42623 sw a5,-20(s0) +8000085c: fd842703 lw a4,-40(s0) +80000860: fec42783 lw a5,-20(s0) +80000864: f6e7eee3 bltu a5,a4,800007e0 +80000868: 00000793 li a5,0 +8000086c: 00078513 mv a0,a5 +80000870: 03c12083 lw ra,60(sp) +80000874: 03812403 lw s0,56(sp) +80000878: 04010113 addi sp,sp,64 +8000087c: 00008067 ret Disassembly of section .rodata: @@ -565,7 +627,7 @@ Disassembly of section .rodata: 8100002a: 0000 unimp 8100002c: 0062 c.slli zero,0x18 8100002e: 0000 unimp -81000030: 00000063 beqz zero,81000030 +81000030: 00000063 beqz zero,81000030 81000034: 0064 addi s1,sp,12 81000036: 0000 unimp 81000038: 0065 c.nop 25 @@ -596,7 +658,7 @@ Disassembly of section .rodata: 8100006e: 0000 unimp 81000070: 0062 c.slli zero,0x18 81000072: 0000 unimp -81000074: 00000063 beqz zero,81000074 +81000074: 00000063 beqz zero,81000074 81000078: 0064 addi s1,sp,12 8100007a: 0000 unimp 8100007c: 0065 c.nop 25 @@ -611,239 +673,239 @@ Disassembly of section .rodata: 81000090: 000a c.slli zero,0x2 81000092: 0000 unimp 81000094: 6574 flw fa3,76(a0) -81000096: 735f7473 csrrci s0,0x735,30 -8100009a: 6170 flw fa2,68(a0) -8100009c: 000a6e77 0xa6e77 -810000a0: 0030 addi a2,sp,8 -810000a2: 0000 unimp -810000a4: 0031 c.nop 12 +81000096: 645f7473 csrrci s0,0x645,30 +8100009a: 7669 lui a2,0xffffa +8100009c: 7265 lui tp,0xffff9 +8100009e: 636e6567 0x636e6567 +810000a2: 0a65 addi s4,s4,25 +810000a4: 0000 unimp 810000a6: 0000 unimp -810000a8: 0032 c.slli zero,0xc -810000aa: 0000 unimp -810000ac: 00000033 add zero,zero,zero -810000b0: 0034 addi a3,sp,8 -810000b2: 0000 unimp -810000b4: 0035 c.nop 13 +810000a8: 6574 flw fa3,76(a0) +810000aa: 735f7473 csrrci s0,0x735,30 +810000ae: 6170 flw fa2,68(a0) +810000b0: 000a6e77 0xa6e77 +810000b4: 0030 addi a2,sp,8 810000b6: 0000 unimp -810000b8: 0036 c.slli zero,0xd +810000b8: 0031 c.nop 12 810000ba: 0000 unimp -810000bc: 00000037 lui zero,0x0 -810000c0: 0038 addi a4,sp,8 -810000c2: 0000 unimp -810000c4: 0039 c.nop 14 +810000bc: 0032 c.slli zero,0xc +810000be: 0000 unimp +810000c0: 00000033 add zero,zero,zero +810000c4: 0034 addi a3,sp,8 810000c6: 0000 unimp -810000c8: 0061 c.nop 24 +810000c8: 0035 c.nop 13 810000ca: 0000 unimp -810000cc: 0062 c.slli zero,0x18 +810000cc: 0036 c.slli zero,0xd 810000ce: 0000 unimp -810000d0: 00000063 beqz zero,810000d0 -810000d4: 0064 addi s1,sp,12 +810000d0: 00000037 lui zero,0x0 +810000d4: 0038 addi a4,sp,8 810000d6: 0000 unimp -810000d8: 0065 c.nop 25 +810000d8: 0039 c.nop 14 810000da: 0000 unimp -810000dc: 0066 c.slli zero,0x19 +810000dc: 0061 c.nop 24 810000de: 0000 unimp -810000e0: 6574 flw fa3,76(a0) -810000e2: 645f7473 csrrci s0,0x645,30 -810000e6: 7669 lui a2,0xffffa -810000e8: 7265 lui tp,0xffff9 -810000ea: 636e6567 0x636e6567 -810000ee: 0a65 addi s4,s4,25 - ... +810000e0: 0062 c.slli zero,0x18 +810000e2: 0000 unimp +810000e4: 00000063 beqz zero,810000e4 +810000e8: 0064 addi s1,sp,12 +810000ea: 0000 unimp +810000ec: 0065 c.nop 25 +810000ee: 0000 unimp +810000f0: 0066 c.slli zero,0x19 +810000f2: 0000 unimp +810000f4: 0020 addi s0,sp,8 +810000f6: 0000 unimp +810000f8: 000a c.slli zero,0x2 Disassembly of section .data: -810000f4 : -810000f4: 0000 unimp -810000f6: 8100 0x8100 -810000f8: 0004 0x4 -810000fa: 8100 0x8100 -810000fc: 0008 0x8 +810000fc : +810000fc: 0000 unimp 810000fe: 8100 0x8100 -81000100: 000c 0xc +81000100: 0004 0x4 81000102: 8100 0x8100 -81000104: 0010 0x10 +81000104: 0008 0x8 81000106: 8100 0x8100 -81000108: 0014 0x14 +81000108: 000c 0xc 8100010a: 8100 0x8100 -8100010c: 0018 0x18 +8100010c: 0010 0x10 8100010e: 8100 0x8100 -81000110: 001c 0x1c +81000110: 0014 0x14 81000112: 8100 0x8100 -81000114: 0020 addi s0,sp,8 +81000114: 0018 0x18 81000116: 8100 0x8100 -81000118: 0024 addi s1,sp,8 +81000118: 001c 0x1c 8100011a: 8100 0x8100 -8100011c: 0028 addi a0,sp,8 +8100011c: 0020 addi s0,sp,8 8100011e: 8100 0x8100 -81000120: 002c addi a1,sp,8 +81000120: 0024 addi s1,sp,8 81000122: 8100 0x8100 -81000124: 0030 addi a2,sp,8 +81000124: 0028 addi a0,sp,8 81000126: 8100 0x8100 -81000128: 0034 addi a3,sp,8 +81000128: 002c addi a1,sp,8 8100012a: 8100 0x8100 -8100012c: 0038 addi a4,sp,8 +8100012c: 0030 addi a2,sp,8 8100012e: 8100 0x8100 -81000130: 003c addi a5,sp,8 +81000130: 0034 addi a3,sp,8 81000132: 8100 0x8100 - -81000134 : -81000134: 0044 addi s1,sp,4 +81000134: 0038 addi a4,sp,8 81000136: 8100 0x8100 -81000138: 0048 addi a0,sp,4 +81000138: 003c addi a5,sp,8 8100013a: 8100 0x8100 -8100013c: 004c addi a1,sp,4 + +8100013c : +8100013c: 0044 addi s1,sp,4 8100013e: 8100 0x8100 -81000140: 0050 addi a2,sp,4 +81000140: 0048 addi a0,sp,4 81000142: 8100 0x8100 -81000144: 0054 addi a3,sp,4 +81000144: 004c addi a1,sp,4 81000146: 8100 0x8100 -81000148: 0058 addi a4,sp,4 +81000148: 0050 addi a2,sp,4 8100014a: 8100 0x8100 -8100014c: 005c addi a5,sp,4 +8100014c: 0054 addi a3,sp,4 8100014e: 8100 0x8100 -81000150: 0060 addi s0,sp,12 +81000150: 0058 addi a4,sp,4 81000152: 8100 0x8100 -81000154: 0064 addi s1,sp,12 +81000154: 005c addi a5,sp,4 81000156: 8100 0x8100 -81000158: 0068 addi a0,sp,12 +81000158: 0060 addi s0,sp,12 8100015a: 8100 0x8100 -8100015c: 006c addi a1,sp,12 +8100015c: 0064 addi s1,sp,12 8100015e: 8100 0x8100 -81000160: 0070 addi a2,sp,12 +81000160: 0068 addi a0,sp,12 81000162: 8100 0x8100 -81000164: 0074 addi a3,sp,12 +81000164: 006c addi a1,sp,12 81000166: 8100 0x8100 -81000168: 0078 addi a4,sp,12 +81000168: 0070 addi a2,sp,12 8100016a: 8100 0x8100 -8100016c: 007c addi a5,sp,12 +8100016c: 0074 addi a3,sp,12 8100016e: 8100 0x8100 -81000170: 0080 addi s0,sp,64 +81000170: 0078 addi a4,sp,12 81000172: 8100 0x8100 - -81000174 : -81000174: 00a0 addi s0,sp,72 +81000174: 007c addi a5,sp,12 81000176: 8100 0x8100 -81000178: 00a4 addi s1,sp,72 +81000178: 0080 addi s0,sp,64 8100017a: 8100 0x8100 -8100017c: 00a8 addi a0,sp,72 -8100017e: 8100 0x8100 -81000180: 00ac addi a1,sp,72 -81000182: 8100 0x8100 -81000184: 00b0 addi a2,sp,72 -81000186: 8100 0x8100 -81000188: 00b4 addi a3,sp,72 -8100018a: 8100 0x8100 -8100018c: 00b8 addi a4,sp,72 -8100018e: 8100 0x8100 -81000190: 00bc addi a5,sp,72 -81000192: 8100 0x8100 -81000194: 00c0 addi s0,sp,68 -81000196: 8100 0x8100 -81000198: 00c4 addi s1,sp,68 -8100019a: 8100 0x8100 -8100019c: 00c8 addi a0,sp,68 -8100019e: 8100 0x8100 -810001a0: 00cc addi a1,sp,68 -810001a2: 8100 0x8100 -810001a4: 00d0 addi a2,sp,68 -810001a6: 8100 0x8100 -810001a8: 00d4 addi a3,sp,68 -810001aa: 8100 0x8100 -810001ac: 00d8 addi a4,sp,68 -810001ae: 8100 0x8100 -810001b0: 00dc addi a5,sp,68 -810001b2: 8100 0x8100 -810001b4 : -810001b4: 0001 nop -810001b6: 0000 unimp -810001b8: 0001 nop -810001ba: 0000 unimp -810001bc: 0001 nop +8100017c : +8100017c: 00b4 addi a3,sp,72 +8100017e: 8100 0x8100 +81000180: 00b8 addi a4,sp,72 +81000182: 8100 0x8100 +81000184: 00bc addi a5,sp,72 +81000186: 8100 0x8100 +81000188: 00c0 addi s0,sp,68 +8100018a: 8100 0x8100 +8100018c: 00c4 addi s1,sp,68 +8100018e: 8100 0x8100 +81000190: 00c8 addi a0,sp,68 +81000192: 8100 0x8100 +81000194: 00cc addi a1,sp,68 +81000196: 8100 0x8100 +81000198: 00d0 addi a2,sp,68 +8100019a: 8100 0x8100 +8100019c: 00d4 addi a3,sp,68 +8100019e: 8100 0x8100 +810001a0: 00d8 addi a4,sp,68 +810001a2: 8100 0x8100 +810001a4: 00dc addi a5,sp,68 +810001a6: 8100 0x8100 +810001a8: 00e0 addi s0,sp,76 +810001aa: 8100 0x8100 +810001ac: 00e4 addi s1,sp,76 +810001ae: 8100 0x8100 +810001b0: 00e8 addi a0,sp,76 +810001b2: 8100 0x8100 +810001b4: 00ec addi a1,sp,76 +810001b6: 8100 0x8100 +810001b8: 00f0 addi a2,sp,76 +810001ba: 8100 0x8100 + +810001bc : +810001bc: 0005 c.nop 1 810001be: 0000 unimp -810001c0: 0001 nop +810001c0: 0005 c.nop 1 810001c2: 0000 unimp -810001c4: 0001 nop +810001c4: 0005 c.nop 1 810001c6: 0000 unimp -810001c8: 0001 nop +810001c8: 0005 c.nop 1 810001ca: 0000 unimp -810001cc: 0001 nop +810001cc: 0006 c.slli zero,0x1 810001ce: 0000 unimp -810001d0: 0001 nop +810001d0: 0006 c.slli zero,0x1 810001d2: 0000 unimp -810001d4: 0001 nop +810001d4: 0006 c.slli zero,0x1 810001d6: 0000 unimp -810001d8: 0001 nop +810001d8: 0006 c.slli zero,0x1 810001da: 0000 unimp -810001dc: 0001 nop -810001de: 0000 unimp -810001e0: 0001 nop -810001e2: 0000 unimp -810001e4: 0001 nop -810001e6: 0000 unimp -810001e8: 0001 nop -810001ea: 0000 unimp -810001ec: 0001 nop +810001dc: 00000007 0x7 +810001e0: 00000007 0x7 +810001e4: 00000007 0x7 +810001e8: 00000007 0x7 +810001ec: 0008 0x8 810001ee: 0000 unimp -810001f0: 0001 nop +810001f0: 0008 0x8 +810001f2: 0000 unimp +810001f4: 0008 0x8 +810001f6: 0000 unimp +810001f8: 0008 0x8 ... -810001f4 : -810001f4: 0006 c.slli zero,0x1 -810001f6: 0000 unimp -810001f8: 0006 c.slli zero,0x1 -810001fa: 0000 unimp -810001fc: 0006 c.slli zero,0x1 +810001fc : +810001fc: 0001 nop 810001fe: 0000 unimp -81000200: 0006 c.slli zero,0x1 +81000200: 0001 nop 81000202: 0000 unimp -81000204: 0006 c.slli zero,0x1 +81000204: 0001 nop 81000206: 0000 unimp -81000208: 0006 c.slli zero,0x1 +81000208: 0001 nop 8100020a: 0000 unimp -8100020c: 0006 c.slli zero,0x1 +8100020c: 0001 nop 8100020e: 0000 unimp -81000210: 0006 c.slli zero,0x1 +81000210: 0001 nop 81000212: 0000 unimp -81000214: 0006 c.slli zero,0x1 +81000214: 0001 nop 81000216: 0000 unimp -81000218: 0006 c.slli zero,0x1 +81000218: 0001 nop 8100021a: 0000 unimp -8100021c: 0006 c.slli zero,0x1 +8100021c: 0001 nop 8100021e: 0000 unimp -81000220: 0006 c.slli zero,0x1 +81000220: 0001 nop 81000222: 0000 unimp -81000224: 0006 c.slli zero,0x1 +81000224: 0001 nop 81000226: 0000 unimp -81000228: 0006 c.slli zero,0x1 +81000228: 0001 nop 8100022a: 0000 unimp -8100022c: 0006 c.slli zero,0x1 +8100022c: 0001 nop 8100022e: 0000 unimp -81000230: 0006 c.slli zero,0x1 +81000230: 0001 nop +81000232: 0000 unimp +81000234: 0001 nop +81000236: 0000 unimp +81000238: 0001 nop ... Disassembly of section .bss: -81000234 : -81000234: 0000 unimp - ... - -81000238 : -81000238: 0000 unimp - ... - -8100023c : +8100023c : 8100023c: 0000 unimp ... -81000240 : +81000240 : +81000240: 0000 unimp ... -81000250 : +81000244 : +81000244: 0000 unimp ... -81000260 : +81000248 : + ... + +81000258 : + ... + +81000268 : ... Disassembly of section .comment: diff --git a/runtime/vortex_runtime.elf b/runtime/vortex_runtime.elf index e6e0523c..5147bd11 100644 Binary files a/runtime/vortex_runtime.elf and b/runtime/vortex_runtime.elf differ diff --git a/runtime/vortex_runtime.hex b/runtime/vortex_runtime.hex index d6c905bd..5af1b045 100644 --- a/runtime/vortex_runtime.hex +++ b/runtime/vortex_runtime.hex @@ -1,7 +1,7 @@ :0200000480007A :100000009705000093850502130540006B10B500AD -:10001000EF000001EF000072130500006B00050007 -:10002000130540006B000500F32610029396F600BE +:10001000EF000001EF008074130500006B00050085 +:10002000130540006B000500F32610029396A6010D :10003000732600029315A6001316260037F1FF6FF2 :100040003301B1403301D1403301C100F326100226 :1000500063860600130500006B0005006780000042 @@ -18,7 +18,7 @@ :100100001301C10067800000B702010023A0B20004 :1001100067800000130101FE232E1100232C8100B3 :10012000130401022326A4FEB70700810327C4FE9F -:10013000131727009387470FB307F70083A707001C +:10013000131727009387C70FB307F70083A707009C :1001400013850700EFF05FF9130000008320C10161 :10015000032481011301010267800000130101FEE5 :10016000232E1100232C8100130401022326A4FE58 @@ -26,100 +26,115 @@ :10018000EFF05FF9B707008113850704EFF0DFF4A4 :10019000130000008320C101032481011301010227 :1001A00067800000130101FE232E1100232C810023 -:1001B00013040102B707008183A7C7231385070033 -:1001C000EFF09FEAB707008103A78723B7070081F5 -:1001D00083A7472313850700E7000700EFF0DFEA56 +:1001B00013040102B707008183A7472413850700B2 +:1001C000EFF09FEAB707008103A70724B707008174 +:1001D00083A7C72313850700E7000700EFF0DFEAD6 :1001E0002326A4FE8327C4FE6388070013050000AE :1001F000EFF09FE76F00C00013051000EFF0DFE69F :10020000130000008320C1010324810113010102B6 :1002100067800000130101FE232E1100232C8100B2 :10022000130401022326A4FE2324B4FE2322C4FEC9 -:100230002320D4FEB7070081032744FE23ACE72226 -:10024000B7070081032704FE23AAE722B70700812E -:10025000032784FE23AEE722832744FE938507000D -:100260000325C4FEEFF0DFDFEFF0DFF31300000043 -:100270008320C10103248101130101026780000072 -:10028000130101FE232E1100232C8100130401020F -:10029000B707008113854708EFF01FE413054000FE -:1002A000EFF09FDCEFF0DFDE2326A4FE0327C4FE81 -:1002B000B70700818326C4FE939626009387072400 -:1002C000B387F60023A0E70013051000EFF0DFD995 -:1002D000B707008183A7072413850700EFF09FE38A -:1002E000B707008113850709EFF01FDFB70700810B -:1002F0009387072483A7470013850700EFF09FE14A -:10030000B707008113850709EFF01FDDB7070081EC -:100310009387072483A7870013850700EFF09FDFEB -:10032000B707008113850709EFF01FDBB7070081CE -:100330009387072483A7C70013850700EFF09FDD8D -:10034000B707008113850709EFF01FD913000000DC -:100350008320C10103248101130101026780000091 -:10036000130101FE232E1100232C8100130401022E -:10037000EFF01FD22326A4FE8327C4FE93B72700E5 -:10038000A305F4FE8347B4FE13850700EFF0DFCE2C -:100390008347B4FE638407068327C4FE93B7170020 -:1003A0002305F4FE8347A4FE13850700EFF0DFCC9E -:1003B0008347A4FE63820702B70700810327C4FEB8 -:1003C0001317270093870724B307F7001307A0002C -:1003D00023A0E7006F000002B70700810327C4FED7 -:1003E0001317270093870724B307F7001307B000FC -:1003F00023A0E700EFF0DFC86F0040068327C4FEAC -:1004000093B73700A304F4FE834794FE13850700D7 -:10041000EFF09FC6834794FE63820702B70700810F -:100420000327C4FE1317270093870724B307F70099 -:100430001307C00023A0E7006F000002B707008188 -:100440000327C4FE1317270093870724B307F70079 -:100450001307D00023A0E700EFF09FC2EFF05FC2C8 -:10046000B707008183A7072413850700EFF09FCA11 -:10047000B707008113850709EFF01FC6B707008192 -:100480009387072483A7470013850700EFF09FC8D1 -:10049000B707008113850709EFF01FC4B707008174 -:1004A0009387072483A7870013850700EFF09FC673 -:1004B000B707008113850709EFF01FC2B707008156 -:1004C0009387072483A7C70013850700EFF09FC415 -:1004D000B707008113850709EFF01FC01300000064 -:1004E0008320C10103248101130101026780000000 -:1004F000130101FE232E1100232C8100130401029D -:10050000EFF09FB82326A4FEB70700810327C4FE9F -:100510001317270093870725B307F7000327C4FEA7 -:1005200023A0E7008327C4FE6386070013050000AD -:10053000EFF09FB3130000008320C1010324810169 -:100540001301010267800000130101FE232E110038 -:10055000232C810013040102B70700809387074F03 -:100560002326F4FE8325C4FE13054000EFF05FAFA1 -:10057000EFF01FF8B707008183A707251385070051 -:10058000EFF05FB9B707008113850709EFF0DFB41B -:10059000B70700819387072583A7470013850700C6 -:1005A000EFF05FB7B707008113850709EFF0DFB2FF -:1005B000B70700819387072583A787001385070066 -:1005C000EFF05FB5B707008113850709EFF0DFB0E3 -:1005D000B70700819387072583A7C7001385070006 -:1005E000EFF05FB3B707008113850709EFF0DFAEC7 -:1005F000130000008320C1010324810113010102C3 -:1006000067800000130101FF2326110023248100CD -:1006100013040101B707008113854709EFF0DFAB31 -:10062000EFF09FF2130000008320C100032481003B -:100630001301010167800000130101FC232E110248 -:10064000232C8102130401042326A4FC8327C4FC69 -:100650002326F4FEEFF05FA32324A4FEEFF05FA3B4 -:100660002322A4FE8327C4FE83A70701032784FE59 -:10067000637EF7008327C4FE83A7C700032744FED9 -:100680006376F700930710006F0080009307000067 -:10069000A301F4FE834734FE93F71700A301F4FE91 -:1006A000834734FE13850700EFF01F9D834734FE18 -:1006B000638607068327C4FE03A7C700832784FE3B -:1006C000B307F702032744FEB307F700232EF4FC19 -:1006D0008327C4FE03A707008327C4FD9397270041 -:1006E000B307F70083A607008327C4FE03A74700CC -:1006F0008327C4FD93972700B307F70003A70700DC -:100700008327C4FE03A687008327C4FD9397270091 -:10071000B307F6003387E60023A0E700EFF05F960B -:10072000130000008320C10303248103130101048B -:1007300067800000130101FF23261100232481009C -:100740001304010113051000EFF01F92EFF05FB3E7 -:10075000B70700811385070EEFF01F9813054000BF -:10076000EFF09F90EFF0DFBF13051000EFF0DF8F89 -:1007700093070000138507008320C1000324810034 -:08078000130101016780000074 +:100230002320D4FEB7070081032744FE23A0E72430 +:10024000B7070081032704FE23AEE722B70700812A +:10025000032784FE23A2E724B70700809387471A69 +:10026000938507000325C4FEEFF09FDFEFF09FF3B7 +:10027000130000008320C101032481011301010246 +:1002800067800000130101FE232E1100232C810042 +:1002900013040102B707008113854708EFF0DFE37D +:1002A00013054000EFF05FDCEFF09FDE2326A4FE95 +:1002B0000327C4FEB70700818326C4FE9396260059 +:1002C00093878724B387F60023A0E7001305100067 +:1002D000EFF09FD9B707008183A787241385070014 +:1002E000EFF05FE3B707008113850709EFF0DFDE6A +:1002F000B70700819387872483A7470013850700EA +:10030000EFF05FE1B707008113850709EFF0DFDC4D +:10031000B70700819387872483A787001385070089 +:10032000EFF05FDFB707008113850709EFF0DFDA31 +:10033000B70700819387872483A7C7001385070029 +:10034000EFF05FDDB707008113850709EFF0DFD815 +:10035000130000008320C101032481011301010265 +:1003600067800000130101FE232E1100232C810061 +:1003700013040102EFF0DFD12326A4FE8327C4FE7D +:1003800093B72700A305F4FE8347B4FE1385070047 +:10039000EFF09FCE8347B4FE638407068327C4FE35 +:1003A00093B717002305F4FE8347A4FE13850700C7 +:1003B000EFF09FCC8347A4FE63820702B70700815A +:1003C0000327C4FE1317270093878724B307F7007A +:1003D0001307A00023A0E7006F000002B707008109 +:1003E0000327C4FE1317270093878724B307F7005A +:1003F0001307B00023A0E700EFF09FC86F0040068E +:100400008327C4FE93B73700A304F4FE834794FE0A +:1004100013850700EFF05FC6834794FE63820702EF +:10042000B70700810327C4FE13172700938787248B +:10043000B307F7001307C00023A0E7006F00000216 +:10044000B70700810327C4FE13172700938787246B +:10045000B307F7001307D00023A0E700EFF05FC257 +:10046000EFF01FC2B707008183A787241385070019 +:10047000EFF05FCAB707008113850709EFF0DFC50A +:10048000B70700819387872483A747001385070058 +:10049000EFF05FC8B707008113850709EFF0DFC3EE +:1004A000B70700819387872483A7870013850700F8 +:1004B000EFF05FC6B707008113850709EFF0DFC1D2 +:1004C000B70700819387872483A7C7001385070098 +:1004D000EFF05FC4B707008113850709EFF0DFBFB6 +:1004E000130000008320C1010324810113010102D4 +:1004F00067800000130101FE232E1100232C8100D0 +:1005000013040102EFF05FB82326A4FEB7070081B1 +:100510000327C4FE1317270093878725B307F70027 +:100520000327C4FE23A0E7008327C4FE63860700D9 +:1005300013050000EFF05FB3130000008320C1013A +:10054000032481011301010267800000130101FEF1 +:10055000232E1100232C810013040102B707008011 +:100560009387474F2326F4FE8325C4FE13054000DE +:10057000EFF01FAFEFF01FF8B707008183A78725C3 +:1005800013850700EFF01FB9B7070081138507092E +:10059000EFF09FB4B70700819387872583A74700B3 +:1005A00013850700EFF01FB7B70700811385070910 +:1005B000EFF09FB2B70700819387872583A7870055 +:1005C00013850700EFF01FB5B707008113850709F2 +:1005D000EFF09FB0B70700819387872583A7C700F7 +:1005E00013850700EFF01FB3B707008113850709D4 +:1005F000EFF09FAE130000008320C10103248101AE +:100600001301010267800000130101FF232611007E +:100610002324810013040101EFF0DFC6B707008136 +:1006200013854709EFF05FAB13054000EFF0DFA340 +:10063000EFF05FD313051000EFF01FA3B7070081A1 +:100640001385870AEFF05FA9EFF05FF01300000059 +:100650008320C10003248100130101016780000091 +:10066000130101FC232E1102232C81021304010427 +:100670002326A4FC8327C4FC2326F4FEEFF0DFA08E +:100680002324A4FEEFF0DFA02322A4FE8327C4FED0 +:1006900083A70701032784FE637EF7008327C4FE38 +:1006A00083A7C700032744FE6376F7009307100073 +:1006B0006F00800093070000A301F4FE834734FE1F +:1006C00093F71700A301F4FE834734FE1385070058 +:1006D000EFF09F9A834734FE638607068327C4FEA4 +:1006E00003A7C700832784FEB307F702032744FE4E +:1006F000B307F700232EF4FC8327C4FE03A70700EB +:100700008327C4FD93972700B307F70083A607004C +:100710008327C4FE03A747008327C4FD93972700C0 +:10072000B307F70003A707008327C4FE03A68700CB +:100730008327C4FD93972700B307F6003387E600AD +:1007400023A0E700EFF0DF93130000008320C10334 +:10075000032481031301010467800000130101FCDD +:10076000232E1102232C810213040104130510000F +:10077000EFF09F8FB70700819387C71B2324F4FCFA +:10078000B70700819387C71F2326F4FCB7070081B2 +:10079000938787262328F4FC93074000232AF4FC40 +:1007A00093074000232CF4FC930740002322F4FE1F +:1007B000930740002320F4FE032744FE832504FE14 +:1007C000930784FC93860700B707008013860766AB +:1007D00013050700EFF01FA4232604FE6F00000896 +:1007E000232404FE6F004005032744FD8327C4FE35 +:1007F0003307F702832784FEB307F700232EF4FCA8 +:10080000B70700810327C4FD1317270093878726A6 +:10081000B307F70083A7070013850700EFF09F8F4A +:10082000B70700811385470FEFF01F8B832784FEE6 +:10083000938717002324F4FE032744FD832784FEB7 +:10084000E3E4E7FAB70700811385870FEFF0DF884D +:100850008327C4FE938717002326F4FE032784FD15 +:100860008327C4FEE3EEE7F6930700001385070035 +:100870008320C10303248103130101046780000066 :02000004810079 :10000000300000003100000032000000330000002A :10001000340000003500000036000000370000000A @@ -130,32 +145,32 @@ :100060003700000038000000390000006100000087 :1000700062000000630000006400000065000000F2 :1000800066000000746573745F746D630A0000009D -:100090000A000000746573745F737061776E0A0004 -:1000A000300000003100000032000000330000008A -:1000B000340000003500000036000000370000006A -:1000C00038000000390000006100000062000000FC -:1000D000630000006400000065000000660000008E -:1000E000746573745F646976657267656E63650ACB -:0100F000000F -:1000F4000000008104000081080000810C000081E0 -:100104001000008114000081180000811C0000818F -:100114002000008124000081280000812C0000813F -:100124003000008134000081380000813C000081EF -:1001340044000081480000814C000081500000818F -:1001440054000081580000815C000081600000813F -:1001540064000081680000816C00008170000081EF -:1001640074000081780000817C000081800000819F -:10017400A0000081A4000081A8000081AC000081DF -:10018400B0000081B4000081B8000081BC0000818F -:10019400C0000081C4000081C8000081CC0000813F -:1001A400D0000081D4000081D8000081DC000081EF -:1001B4000100000001000000010000000100000037 -:1001C4000100000001000000010000000100000027 -:1001D4000100000001000000010000000100000017 -:1001E4000100000001000000010000000100000007 -:1001F40006000000060000000600000006000000E3 -:1002040006000000060000000600000006000000D2 -:1002140006000000060000000600000006000000C2 -:1002240006000000060000000600000006000000B2 +:100090000A000000746573745F6469766572676551 +:1000A0006E63650A00000000746573745F737061AD +:1000B000776E0A00300000003100000032000000BE +:1000C000330000003400000035000000360000005E +:1000D0003700000038000000390000006100000017 +:1000E0006200000063000000640000006500000082 +:0A00F00066000000200000000A0076 +:1000FC000000008104000081080000810C000081D8 +:10010C001000008114000081180000811C00008187 +:10011C002000008124000081280000812C00008137 +:10012C003000008134000081380000813C000081E7 +:10013C0044000081480000814C0000815000008187 +:10014C0054000081580000815C0000816000008137 +:10015C0064000081680000816C00008170000081E7 +:10016C0074000081780000817C0000818000008197 +:10017C00B4000081B8000081BC000081C000008187 +:10018C00C4000081C8000081CC000081D000008137 +:10019C00D4000081D8000081DC000081E0000081E7 +:1001AC00E4000081E8000081EC000081F000008197 +:1001BC00050000000500000005000000050000001F +:1001CC00060000000600000006000000060000000B +:1001DC0007000000070000000700000007000000F7 +:1001EC0008000000080000000800000008000000E3 +:1001FC0001000000010000000100000001000000EF +:10020C0001000000010000000100000001000000DE +:10021C0001000000010000000100000001000000CE +:10022C0001000000010000000100000001000000BE :040000058000000077 :00000001FF diff --git a/runtime/vx_api/vx_api.c b/runtime/vx_api/vx_api.c index f636b4e6..5b0ae371 100644 --- a/runtime/vx_api/vx_api.c +++ b/runtime/vx_api/vx_api.c @@ -31,7 +31,7 @@ void vx_spawnWarps(unsigned numWarps, unsigned numThreads, func_t func_ptr, void global_function_pointer = func_ptr; global_argument_struct = args; global_num_threads = numThreads; - vx_wspawn(numWarps, (unsigned) func_ptr); + vx_wspawn(numWarps, (unsigned) setup_call); setup_call(); } diff --git a/runtime/vx_main.c b/runtime/vx_main.c index fe94f669..ae483154 100644 --- a/runtime/vx_main.c +++ b/runtime/vx_main.c @@ -14,16 +14,16 @@ typedef struct } mat_add_args_t; -unsigned x[] = {1, 1, 1, 1, +unsigned x[] = {5, 5, 5, 5, + 6, 6, 6, 6, + 7, 7, 7, 7, + 8, 8, 8, 8}; + +unsigned y[] = {1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1}; -unsigned y[] = {6, 6, 6, 6, - 6, 6, 6, 6, - 6, 6, 6, 6, - 6, 6, 6, 6}; - unsigned z[] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -51,48 +51,38 @@ int main() { // Main is called with all threads active of warp 0 vx_tmc(1); - /////////////////////////////////////////////////////////////////////// - - // mat_add_args_t arguments; - // arguments.x = x; - // arguments.y = y; - // arguments.z = z; - // arguments.numColums = 4; - // arguments.numRows = 4; - - - // int numWarps = 4; - // int numThreads = 4; - - // vx_spawnWarps(numWarps, numThreads, mat_add_kernel, &arguments); /////////////////////////////////////////////////////////////////////// - /* - NOTE: * when test_wspawn is called from instrinsic_tests, RA 80000458 is stored at address 6fffefbc, - but when read back again it reads zeros even though no other write request is made to that - address (when only test_wsapwn is called by itself). + mat_add_args_t arguments; + arguments.x = x; + arguments.y = y; + arguments.z = z; + arguments.numColums = 4; + arguments.numRows = 4; - * When test_wsapwn is called by itself from main new lines are not printed.... - * when test_wspawn is called with other tests from main it works fine... - */ + int numWarps = 4; + int numThreads = 4; + + vx_spawnWarps(numWarps, numThreads, mat_add_kernel, &arguments); + + for (int i = 0; i < arguments.numRows; i++) + { + for (int j = 0; j < arguments.numColums; j++) + { + unsigned index = (i * arguments.numColums) + j; + vx_print_hex(z[index]); + vx_print_str(" "); + } + vx_print_str("\n"); + } + + /////////////////////////////////////////////////////////////////////// + // intrinsics_tests(); /////////////////////////////////////////////////////////////////////// - test_tmc(); - - // Control Divergence Test - vx_print_str("test_divergence\n"); - vx_tmc(4); - test_divergence(); - vx_tmc(1); - - - // // Test wspawn - // vx_print_str("test_wspawn\n"); - // test_wsapwn(); - return 0; } \ No newline at end of file