From c8af6f60ff0c035ea8f4dc9b0f6a855a458c5a02 Mon Sep 17 00:00:00 2001 From: felsabbagh3 Date: Sat, 16 Mar 2019 23:50:01 -0400 Subject: [PATCH] Added support for M extension --- TODO | 4 +- src/core.cpp | 1 - src/include/debug.h | 6 +- src/instruction.cpp | 248 ++++-- src/riscv_gpgpu/Makefile | 2 +- src/riscv_gpgpu/gpgpu_test.c | 70 +- src/riscv_gpgpu/gpgpu_test.dump | 1379 ++++++++++++++----------------- src/riscv_gpgpu/gpgpu_test.elf | Bin 10540 -> 10504 bytes src/riscv_gpgpu/gpgpu_test.hex | 312 ++++--- src/riscv_gpgpu/lib/hi.sh | 3 - src/riscv_gpgpu/lib/lib.c | 25 +- src/riscv_gpgpu/lib/lib.h | 8 +- src/riscv_gpgpu/lib/queue.h | 6 +- src/test.sh | 28 + 14 files changed, 1064 insertions(+), 1028 deletions(-) delete mode 100755 src/riscv_gpgpu/lib/hi.sh diff --git a/TODO b/TODO index baa0c954..0a445ac9 100644 --- a/TODO +++ b/TODO @@ -1,7 +1,7 @@ -* Support for compressed * Implement Matrix Multiplication * 1 warp independance * automatic warp detection * finish python compiler -* print buffers \ No newline at end of file +* print buffers +* Support for compressed \ No newline at end of file diff --git a/src/core.cpp b/src/core.cpp index fcc7f782..a5a7d4a1 100644 --- a/src/core.cpp +++ b/src/core.cpp @@ -86,7 +86,6 @@ void Core::printStats() const { cout << "Total steps: " << steps << endl; cout << "Total insts: " << insts << endl; - for (unsigned i = 0; i < w.size(); ++i) { cout << "=== Warp " << i << " ===" << endl; w[i].printStats(); diff --git a/src/include/debug.h b/src/include/debug.h index 3de108bd..32208896 100644 --- a/src/include/debug.h +++ b/src/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 @@ -12,13 +12,13 @@ #define D(lvl, x) do { \ using namespace std; \ if ((lvl) <= USE_DEBUG) { \ - cerr << "DEBUG " << __FILE__ << ':' << dec << __LINE__ << ": " \ + cout << "DEBUG " << __FILE__ << ':' << dec << __LINE__ << ": " \ << x << endl; \ } \ } while(0) #define D_RAW(x) do { \ - std::cerr << x; \ + std::cout << x; \ } while (0) #else diff --git a/src/instruction.cpp b/src/instruction.cpp index 65d86ac6..ca135ea9 100644 --- a/src/instruction.cpp +++ b/src/instruction.cpp @@ -84,7 +84,7 @@ void Instruction::executeOn(Warp &c) { /* If I try to execute a privileged instruction in user mode, throw an exception 3. */ if (instTable[op].privileged && !c.supervisorMode) { - //std::cout << "INTERRUPT SUPERVISOR\n"; + std::cout << "INTERRUPT SUPERVISOR\n"; c.interrupt(3); return; } @@ -127,18 +127,30 @@ void Instruction::executeOn(Warp &c) { stack &domStack(c.domStack); //std::cout << std::hex << "opcode: " << op << " func3: " << func3 << "\n"; - if (op == GPGPU) //std::cout << "OPCODE MATCHED GPGPU\n"; + //if (op == GPGPU) //std::cout << "OPCODE MATCHED GPGPU\n"; // If this thread is masked out, don't execute the instruction, unless it's // a split or join. // if (((predicated && !pReg[pred]) || !c.tmask[t]) && // op != SPLIT && op != JOIN) continue; - predicated = (op == GPGPU) && ((func3 == 7) || (func3 == 2)); bool split = (op == GPGPU) && (func3 == 2); bool join = (op == GPGPU) && (func3 == 3); - if (((predicated && !reg[pred]) || !c.tmask[t]) && !split && !join) continue; + + predicated = (op == GPGPU) && ((func3 == 7) || (func3 == 2)); + + + // printf("Predicated: %d, split: %d, join: %d\n",predicated, split, join ); + // printf("%d && ((%d) || (%d))\n",(op == GPGPU), (func3 == 7), (func3 == 2) ); + + // cout << "before " << op << " = " << GPGPU << "\n"; + if (((predicated && !reg[pred]) || !c.tmask[t]) && !split && !join) + { + // cout << "about to continue\n"; + continue; + } + // cout << "after\n"; ++c.insts; @@ -148,78 +160,180 @@ void Instruction::executeOn(Warp &c) { Word temp; Word data_read; int op1, op2; + bool m_exten; + // std::cout << "op = " << op << "\n"; + // std::cout << "R_INST: " << R_INST << "\n"; switch (op) { case NOP: //std::cout << "NOP_INST\n"; break; case R_INST: - //std::cout << "R_INST\n"; - switch (func3) + // std::cout << "R_INST\n"; + m_exten = func7 & 0x1; + + if (m_exten) { - case 0: - if (func7) - { - reg[rdest] = reg[rsrc[0]] - reg[rsrc[1]]; - reg[rdest].trunc(wordSz); - } - else - { - reg[rdest] = reg[rsrc[0]] + reg[rsrc[1]]; - reg[rdest].trunc(wordSz); - } - break; - case 1: - reg[rdest] = reg[rsrc[0]] << reg[rsrc[1]]; - reg[rdest].trunc(wordSz); - break; - case 2: - if ( int(reg[rsrc[0]]) < int(reg[rsrc[1]])) - { - reg[rdest] = 1; - } - else - { - reg[rdest] = 0; - } - break; - case 3: - if ( Word_u(reg[rsrc[0]]) < Word_u(reg[rsrc[1]])) - { - reg[rdest] = 1; - } - else - { - reg[rdest] = 0; - } - break; - case 4: - reg[rdest] = reg[rsrc[0]] ^ reg[rsrc[1]]; - break; - case 5: - if (func7) - { - reg[rdest] = int(reg[rsrc[0]]) >> int(reg[rsrc[1]]); - reg[rdest].trunc(wordSz); - } - else - { - reg[rdest] = Word_u(reg[rsrc[0]]) >> Word_u(reg[rsrc[1]]); - reg[rdest].trunc(wordSz); - } - break; - case 6: - reg[rdest] = reg[rsrc[0]] | reg[rsrc[1]]; - break; - case 7: - reg[rdest] = reg[rsrc[0]] & reg[rsrc[1]]; - break; - default: - cout << "ERROR: UNSUPPORTED R INST\n"; - exit(1); + // std::cout << "FOUND A MUL/DIV\n"; + + switch (func3) + { + case 0: + // MUL + // cout << "MUL\n"; + reg[rdest] = ((int) reg[rsrc[0]]) * ((int) reg[rsrc[1]]); + break; + case 1: + // MULH + { + int64_t first = (int64_t) reg[rsrc[0]]; + if (reg[rsrc[0]] & 0x80000000) + { + first = first | 0xFFFFFFFF00000000; + } + int64_t second = (int64_t) reg[rsrc[1]]; + if (reg[rsrc[1]] & 0x80000000) + { + second = second | 0xFFFFFFFF00000000; + } + // cout << "mulh: " << std::dec << first << " * " << second; + uint64_t result = first * second; + reg[rdest] = ( result >> 32) & 0xFFFFFFFF; + // cout << " = " << result << " or " << reg[rdest] << "\n"; + } + break; + case 2: + // MULHSU + { + int64_t first = (int64_t) reg[rsrc[0]]; + if (reg[rsrc[0]] & 0x80000000) + { + first = first | 0xFFFFFFFF00000000; + } + int64_t second = (int64_t) reg[rsrc[1]]; + reg[rdest] = (( first * second ) >> 32) & 0xFFFFFFFF; + } + break; + case 3: + // MULHU + { + uint64_t first = (uint64_t) reg[rsrc[0]]; + uint64_t second = (uint64_t) reg[rsrc[1]]; + // cout << "MULHU\n"; + reg[rdest] = (( first * second) >> 32) & 0xFFFFFFFF; + } + break; + case 4: + // DIV + if (reg[rsrc[1]] == 0) + { + reg[rdest] = -1; + break; + } + // cout << "dividing: " << dec << ((int) reg[rsrc[0]]) << " / " << ((int) reg[rsrc[1]]); + reg[rdest] = ( (int) reg[rsrc[0]]) / ( (int) reg[rsrc[1]]); + // cout << " = " << ((int) reg[rdest]) << "\n"; + break; + case 5: + // DIVU + if (reg[rsrc[1]] == 0) + { + reg[rdest] = -1; + break; + } + reg[rdest] = ((uint32_t) reg[rsrc[0]]) / ((uint32_t) reg[rsrc[1]]); + break; + case 6: + // REM + if (reg[rsrc[1]] == 0) + { + reg[rdest] = reg[rsrc[0]]; + break; + } + reg[rdest] = ((int) reg[rsrc[0]]) % ((int) reg[rsrc[1]]); + break; + case 7: + // REMU + if (reg[rsrc[1]] == 0) + { + reg[rdest] = reg[rsrc[0]]; + break; + } + reg[rdest] = ((uint32_t) reg[rsrc[0]]) % ((uint32_t) reg[rsrc[1]]); + break; + default: + cout << "unsupported MUL/DIV instr\n"; + exit(1); + } + } + else + { + // std::cout << "NORMAL R-TYPE\n"; + switch (func3) + { + case 0: + if (func7) + { + reg[rdest] = reg[rsrc[0]] - reg[rsrc[1]]; + reg[rdest].trunc(wordSz); + } + else + { + reg[rdest] = reg[rsrc[0]] + reg[rsrc[1]]; + reg[rdest].trunc(wordSz); + } + break; + case 1: + reg[rdest] = reg[rsrc[0]] << reg[rsrc[1]]; + reg[rdest].trunc(wordSz); + break; + case 2: + if ( int(reg[rsrc[0]]) < int(reg[rsrc[1]])) + { + reg[rdest] = 1; + } + else + { + reg[rdest] = 0; + } + break; + case 3: + if ( Word_u(reg[rsrc[0]]) < Word_u(reg[rsrc[1]])) + { + reg[rdest] = 1; + } + else + { + reg[rdest] = 0; + } + break; + case 4: + reg[rdest] = reg[rsrc[0]] ^ reg[rsrc[1]]; + break; + case 5: + if (func7) + { + reg[rdest] = int(reg[rsrc[0]]) >> int(reg[rsrc[1]]); + reg[rdest].trunc(wordSz); + } + else + { + reg[rdest] = Word_u(reg[rsrc[0]]) >> Word_u(reg[rsrc[1]]); + reg[rdest].trunc(wordSz); + } + break; + case 6: + reg[rdest] = reg[rsrc[0]] | reg[rsrc[1]]; + break; + case 7: + reg[rdest] = reg[rsrc[0]] & reg[rsrc[1]]; + break; + default: + cout << "ERROR: UNSUPPORTED R INST\n"; + exit(1); + } } break; - case L_INST: //std::cout << "L_INST\n"; memAddr = ((reg[rsrc[0]] + immsrc) & 0xFFFFFFFC); diff --git a/src/riscv_gpgpu/Makefile b/src/riscv_gpgpu/Makefile index 9af1542d..b82d8f7e 100644 --- a/src/riscv_gpgpu/Makefile +++ b/src/riscv_gpgpu/Makefile @@ -1,6 +1,6 @@ COMP = /opt/riscv/bin/riscv32-unknown-elf-gcc -CC_FLAGS = -march=rv32i -mabi=ilp32 -O0 -Wl,-Bstatic,-T,linker.ld -ffreestanding -nostdlib +CC_FLAGS = -march=rv32im -mabi=ilp32 -O0 -Wl,-Bstatic,-T,linker.ld -ffreestanding -nostdlib DMP = /opt/riscv/bin/riscv32-unknown-elf-objdump CPY = /opt/riscv/bin/riscv32-unknown-elf-objcopy diff --git a/src/riscv_gpgpu/gpgpu_test.c b/src/riscv_gpgpu/gpgpu_test.c index abae2f19..c363aa3c 100644 --- a/src/riscv_gpgpu/gpgpu_test.c +++ b/src/riscv_gpgpu/gpgpu_test.c @@ -10,20 +10,31 @@ void matAddition (unsigned, unsigned); #include "./lib/lib.h" -// unsigned x[] = {2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2}; -// unsigned y[] = {1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1}; -// unsigned z[] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; +// unsigned x[] = {1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 , 1 , 1 , 1 , 1 , 1 }; +// unsigned y[] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}; +// unsigned z[] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; -unsigned x[] = {1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 , 1 , 1 , 1 , 1 , 1 }; -unsigned y[] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}; -unsigned z[] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; -// unsigned x[] = {2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2}; -// unsigned y[] = {1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1}; -// unsigned z[] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; -#define NUM_WARPS 2 -#define NUM_THREADS 8 +unsigned x[] = {1,0,0,0, + 0,2,0,0, + 0,0,3,0, + 0,0,0,4}; + +unsigned y[] = {10,0,0,0, + 0,10,0,0, + 0,0,10,0, + 0,0,0,10}; + +unsigned z[] = {0,0,0,0, + 0,0,0,0, + 0,0,0,0, + 0,0,0,0}; + +#define MAT_DIM 4 + +#define NUM_WARPS MAT_DIM +#define NUM_THREADS MAT_DIM int main() { @@ -33,20 +44,21 @@ int main() queue_initialize(q + i); } - createWarps(NUM_WARPS, NUM_THREADS, matAddition, x, y, z); + createWarps(NUM_WARPS, NUM_THREADS, matAddition, (void *) x, (void *) y, (void *) z); wait_for_done(NUM_WARPS); print_consol("-------------------------\n"); print_consol("FINAL Z\n"); - for (int i = 0; i < 16; i++) + + for (int j = 0; j < (MAT_DIM * MAT_DIM); j++) { - int_print(i); - print_consol(": "); - int_print(z[i]); - print_consol("\n"); + if ((j % MAT_DIM) == 0) print_consol("\n"); + int_print(z[j]); + print_consol(" "); } - print_consol("-------------------------------\n"); + + print_consol("\n-------------------------------\n"); return 0; } @@ -54,16 +66,22 @@ int main() void matAddition(unsigned tid, unsigned wid) { - unsigned * x_ptr = get_1st_arg(); - unsigned * y_ptr = get_2nd_arg(); - unsigned * z_ptr = get_3rd_arg(); + unsigned * x_ptr = (unsigned *) get_1st_arg(); + unsigned * y_ptr = (unsigned *) get_2nd_arg(); + unsigned * z_ptr = (unsigned *) get_3rd_arg(); - unsigned i = (wid * NUM_THREADS) + tid; - __if((i < 11)) - z_ptr[i] = x_ptr[i] + y_ptr[i]; - __else - __end_if + unsigned total = 0; + for (unsigned place = 0; place < MAT_DIM; place++) + { + unsigned x_i = (wid * MAT_DIM) + place; + unsigned y_i = (MAT_DIM * place) + tid; + + total += (x_ptr[x_i] * y_ptr[y_i]); + } + + int final_i = (wid * MAT_DIM) + tid; + z_ptr[final_i] = total; return; diff --git a/src/riscv_gpgpu/gpgpu_test.dump b/src/riscv_gpgpu/gpgpu_test.dump index 7a62e860..78c3e1be 100644 --- a/src/riscv_gpgpu/gpgpu_test.dump +++ b/src/riscv_gpgpu/gpgpu_test.dump @@ -39,7 +39,7 @@ Disassembly of section .text: 8000004c: 00038d93 mv s11,t2 80000050: 01bfe0eb 0x1bfe0eb 80000054: 00000517 auipc a0,0x0 -80000058: 4b850513 addi a0,a0,1208 # 8000050c +80000058: 4bc50513 addi a0,a0,1212 # 80000510 8000005c: 0005406b 0x5406b 80000060 : @@ -88,600 +88,552 @@ Disassembly of section .text: 800000d8: 00812c23 sw s0,24(sp) 800000dc: 02010413 addi s0,sp,32 800000e0: fe042623 sw zero,-20(s0) -800000e4: 04c0006f j 80000130 +800000e4: 0300006f j 80000114 800000e8: fec42703 lw a4,-20(s0) -800000ec: 00070793 mv a5,a4 -800000f0: 00379793 slli a5,a5,0x3 -800000f4: 40e787b3 sub a5,a5,a4 -800000f8: 00279793 slli a5,a5,0x2 -800000fc: 40e787b3 sub a5,a5,a4 -80000100: 00479713 slli a4,a5,0x4 -80000104: 40f70733 sub a4,a4,a5 -80000108: 00271793 slli a5,a4,0x2 -8000010c: 00078713 mv a4,a5 -80000110: 810007b7 lui a5,0x81000 -80000114: 24478793 addi a5,a5,580 # 81000244 -80000118: 00f707b3 add a5,a4,a5 -8000011c: 00078513 mv a0,a5 -80000120: 1c4000ef jal ra,800002e4 -80000124: fec42783 lw a5,-20(s0) -80000128: 00178793 addi a5,a5,1 -8000012c: fef42623 sw a5,-20(s0) -80000130: fec42703 lw a4,-20(s0) -80000134: 00700793 li a5,7 -80000138: fae7d8e3 bge a5,a4,800000e8 -8000013c: 810007b7 lui a5,0x81000 -80000140: 1f878793 addi a5,a5,504 # 810001f8 -80000144: 81000737 lui a4,0x81000 -80000148: 17870713 addi a4,a4,376 # 81000178 -8000014c: 810006b7 lui a3,0x81000 -80000150: 13868693 addi a3,a3,312 # 81000138 -80000154: 80000637 lui a2,0x80000 -80000158: 21060613 addi a2,a2,528 # 80000210 -8000015c: 00800593 li a1,8 -80000160: 00200513 li a0,2 -80000164: 604000ef jal ra,80000768 -80000168: 00200513 li a0,2 -8000016c: 710000ef jal ra,8000087c -80000170: 810007b7 lui a5,0x81000 -80000174: 04078513 addi a0,a5,64 # 81000040 -80000178: f05ff0ef jal ra,8000007c -8000017c: 810007b7 lui a5,0x81000 -80000180: 05c78513 addi a0,a5,92 # 8100005c -80000184: ef9ff0ef jal ra,8000007c -80000188: fe042423 sw zero,-24(s0) -8000018c: 0540006f j 800001e0 -80000190: fe842783 lw a5,-24(s0) -80000194: 00078513 mv a0,a5 -80000198: 2b0000ef jal ra,80000448 -8000019c: 810007b7 lui a5,0x81000 -800001a0: 06878513 addi a0,a5,104 # 81000068 -800001a4: ed9ff0ef jal ra,8000007c -800001a8: 810007b7 lui a5,0x81000 -800001ac: fe842703 lw a4,-24(s0) -800001b0: 00271713 slli a4,a4,0x2 -800001b4: 1f878793 addi a5,a5,504 # 810001f8 -800001b8: 00f707b3 add a5,a4,a5 -800001bc: 0007a783 lw a5,0(a5) -800001c0: 00078513 mv a0,a5 -800001c4: 284000ef jal ra,80000448 -800001c8: 810007b7 lui a5,0x81000 -800001cc: 06c78513 addi a0,a5,108 # 8100006c -800001d0: eadff0ef jal ra,8000007c -800001d4: fe842783 lw a5,-24(s0) -800001d8: 00178793 addi a5,a5,1 -800001dc: fef42423 sw a5,-24(s0) -800001e0: fe842703 lw a4,-24(s0) -800001e4: 00f00793 li a5,15 -800001e8: fae7d4e3 bge a5,a4,80000190 -800001ec: 810007b7 lui a5,0x81000 -800001f0: 07078513 addi a0,a5,112 # 81000070 -800001f4: e89ff0ef jal ra,8000007c -800001f8: 00000793 li a5,0 -800001fc: 00078513 mv a0,a5 -80000200: 01c12083 lw ra,28(sp) -80000204: 01812403 lw s0,24(sp) -80000208: 02010113 addi sp,sp,32 -8000020c: 00008067 ret +800000ec: 65400793 li a5,1620 +800000f0: 02f70733 mul a4,a4,a5 +800000f4: 810007b7 lui a5,0x81000 +800000f8: 22078793 addi a5,a5,544 # 81000220 +800000fc: 00f707b3 add a5,a4,a5 +80000100: 00078513 mv a0,a5 +80000104: 1e4000ef jal ra,800002e8 +80000108: fec42783 lw a5,-20(s0) +8000010c: 00178793 addi a5,a5,1 +80000110: fef42623 sw a5,-20(s0) +80000114: fec42703 lw a4,-20(s0) +80000118: 00700793 li a5,7 +8000011c: fce7d6e3 bge a5,a4,800000e8 +80000120: 810007b7 lui a5,0x81000 +80000124: 1d478793 addi a5,a5,468 # 810001d4 +80000128: 81000737 lui a4,0x81000 +8000012c: 15470713 addi a4,a4,340 # 81000154 +80000130: 810006b7 lui a3,0x81000 +80000134: 11468693 addi a3,a3,276 # 81000114 +80000138: 80000637 lui a2,0x80000 +8000013c: 1f460613 addi a2,a2,500 # 800001f4 +80000140: 00400593 li a1,4 +80000144: 00400513 li a0,4 +80000148: 590000ef jal ra,800006d8 +8000014c: 00400513 li a0,4 +80000150: 680000ef jal ra,800007d0 +80000154: 810007b7 lui a5,0x81000 +80000158: 04078513 addi a0,a5,64 # 81000040 +8000015c: f21ff0ef jal ra,8000007c +80000160: 810007b7 lui a5,0x81000 +80000164: 05c78513 addi a0,a5,92 # 8100005c +80000168: f15ff0ef jal ra,8000007c +8000016c: fe042423 sw zero,-24(s0) +80000170: 0540006f j 800001c4 +80000174: fe842783 lw a5,-24(s0) +80000178: 0037f793 andi a5,a5,3 +8000017c: 00079863 bnez a5,8000018c +80000180: 810007b7 lui a5,0x81000 +80000184: 06878513 addi a0,a5,104 # 81000068 +80000188: ef5ff0ef jal ra,8000007c +8000018c: 810007b7 lui a5,0x81000 +80000190: fe842703 lw a4,-24(s0) +80000194: 00271713 slli a4,a4,0x2 +80000198: 1d478793 addi a5,a5,468 # 810001d4 +8000019c: 00f707b3 add a5,a4,a5 +800001a0: 0007a783 lw a5,0(a5) +800001a4: 00078513 mv a0,a5 +800001a8: 2a4000ef jal ra,8000044c +800001ac: 810007b7 lui a5,0x81000 +800001b0: 06c78513 addi a0,a5,108 # 8100006c +800001b4: ec9ff0ef jal ra,8000007c +800001b8: fe842783 lw a5,-24(s0) +800001bc: 00178793 addi a5,a5,1 +800001c0: fef42423 sw a5,-24(s0) +800001c4: fe842703 lw a4,-24(s0) +800001c8: 00f00793 li a5,15 +800001cc: fae7d4e3 bge a5,a4,80000174 +800001d0: 810007b7 lui a5,0x81000 +800001d4: 07078513 addi a0,a5,112 # 81000070 +800001d8: ea5ff0ef jal ra,8000007c +800001dc: 00000793 li a5,0 +800001e0: 00078513 mv a0,a5 +800001e4: 01c12083 lw ra,28(sp) +800001e8: 01812403 lw s0,24(sp) +800001ec: 02010113 addi sp,sp,32 +800001f0: 00008067 ret -80000210 : -80000210: fc010113 addi sp,sp,-64 -80000214: 02112e23 sw ra,60(sp) -80000218: 02812c23 sw s0,56(sp) -8000021c: 04010413 addi s0,sp,64 -80000220: fca42623 sw a0,-52(s0) -80000224: fcb42423 sw a1,-56(s0) -80000228: 6ec000ef jal ra,80000914 -8000022c: fea42623 sw a0,-20(s0) -80000230: 70c000ef jal ra,8000093c -80000234: fea42423 sw a0,-24(s0) -80000238: 72c000ef jal ra,80000964 -8000023c: fea42223 sw a0,-28(s0) -80000240: fc842783 lw a5,-56(s0) -80000244: 00379793 slli a5,a5,0x3 -80000248: fcc42703 lw a4,-52(s0) -8000024c: 00f707b3 add a5,a4,a5 -80000250: fef42023 sw a5,-32(s0) -80000254: fe042783 lw a5,-32(s0) -80000258: 00b7b793 sltiu a5,a5,11 -8000025c: 0017c793 xori a5,a5,1 -80000260: fcf40fa3 sb a5,-33(s0) -80000264: fdf44783 lbu a5,-33(s0) -80000268: 00078f13 mv t5,a5 -8000026c: 800007b7 lui a5,0x80000 -80000270: 2c878f93 addi t6,a5,712 # 800002c8 -80000274: 000f206b 0xf206b -80000278: 01ff707b 0x1ff707b -8000027c: fe042783 lw a5,-32(s0) -80000280: 00279793 slli a5,a5,0x2 +800001f4 : +800001f4: fc010113 addi sp,sp,-64 +800001f8: 02112e23 sw ra,60(sp) +800001fc: 02812c23 sw s0,56(sp) +80000200: 04010413 addi s0,sp,64 +80000204: fca42623 sw a0,-52(s0) +80000208: fcb42423 sw a1,-56(s0) +8000020c: 648000ef jal ra,80000854 +80000210: fea42223 sw a0,-28(s0) +80000214: 668000ef jal ra,8000087c +80000218: fea42023 sw a0,-32(s0) +8000021c: 688000ef jal ra,800008a4 +80000220: fca42e23 sw a0,-36(s0) +80000224: fe042623 sw zero,-20(s0) +80000228: fe042423 sw zero,-24(s0) +8000022c: 0700006f j 8000029c +80000230: fc842783 lw a5,-56(s0) +80000234: 00279793 slli a5,a5,0x2 +80000238: fe842703 lw a4,-24(s0) +8000023c: 00f707b3 add a5,a4,a5 +80000240: fcf42c23 sw a5,-40(s0) +80000244: fe842783 lw a5,-24(s0) +80000248: 00279793 slli a5,a5,0x2 +8000024c: fcc42703 lw a4,-52(s0) +80000250: 00f707b3 add a5,a4,a5 +80000254: fcf42a23 sw a5,-44(s0) +80000258: fd842783 lw a5,-40(s0) +8000025c: 00279793 slli a5,a5,0x2 +80000260: fe442703 lw a4,-28(s0) +80000264: 00f707b3 add a5,a4,a5 +80000268: 0007a703 lw a4,0(a5) +8000026c: fd442783 lw a5,-44(s0) +80000270: 00279793 slli a5,a5,0x2 +80000274: fe042683 lw a3,-32(s0) +80000278: 00f687b3 add a5,a3,a5 +8000027c: 0007a783 lw a5,0(a5) +80000280: 02f707b3 mul a5,a4,a5 80000284: fec42703 lw a4,-20(s0) 80000288: 00f707b3 add a5,a4,a5 -8000028c: 0007a683 lw a3,0(a5) -80000290: fe042783 lw a5,-32(s0) -80000294: 00279793 slli a5,a5,0x2 -80000298: fe842703 lw a4,-24(s0) -8000029c: 00f707b3 add a5,a4,a5 -800002a0: 0007a703 lw a4,0(a5) -800002a4: fe042783 lw a5,-32(s0) -800002a8: 00279793 slli a5,a5,0x2 -800002ac: fe442603 lw a2,-28(s0) -800002b0: 00f607b3 add a5,a2,a5 -800002b4: 00e68733 add a4,a3,a4 -800002b8: 00e7a023 sw a4,0(a5) -800002bc: 800007b7 lui a5,0x80000 -800002c0: 2cc78e13 addi t3,a5,716 # 800002cc -800002c4: 000e0067 jr t3 -800002c8: 00000013 nop -800002cc: 0000306b 0x306b -800002d0: 00000013 nop -800002d4: 03c12083 lw ra,60(sp) -800002d8: 03812403 lw s0,56(sp) -800002dc: 04010113 addi sp,sp,64 -800002e0: 00008067 ret +8000028c: fef42623 sw a5,-20(s0) +80000290: fe842783 lw a5,-24(s0) +80000294: 00178793 addi a5,a5,1 +80000298: fef42423 sw a5,-24(s0) +8000029c: fe842703 lw a4,-24(s0) +800002a0: 00300793 li a5,3 +800002a4: f8e7f6e3 bgeu a5,a4,80000230 +800002a8: fc842783 lw a5,-56(s0) +800002ac: 00279713 slli a4,a5,0x2 +800002b0: fcc42783 lw a5,-52(s0) +800002b4: 00f707b3 add a5,a4,a5 +800002b8: fcf42823 sw a5,-48(s0) +800002bc: fd042783 lw a5,-48(s0) +800002c0: 00279793 slli a5,a5,0x2 +800002c4: fdc42703 lw a4,-36(s0) +800002c8: 00f707b3 add a5,a4,a5 +800002cc: fec42703 lw a4,-20(s0) +800002d0: 00e7a023 sw a4,0(a5) +800002d4: 00000013 nop +800002d8: 03c12083 lw ra,60(sp) +800002dc: 03812403 lw s0,56(sp) +800002e0: 04010113 addi sp,sp,64 +800002e4: 00008067 ret -800002e4 : -800002e4: 00050293 mv t0,a0 -800002e8: 00000313 li t1,0 -800002ec: 00700393 li t2,7 -800002f0: 0062a023 sw t1,0(t0) -800002f4: 0062a223 sw t1,4(t0) -800002f8: 0062a423 sw t1,8(t0) -800002fc: 0072a623 sw t2,12(t0) -80000300: 0062a823 sw t1,16(t0) -80000304: 00008067 ret +800002e8 : +800002e8: 00050293 mv t0,a0 +800002ec: 00000313 li t1,0 +800002f0: 00700393 li t2,7 +800002f4: 0062a023 sw t1,0(t0) +800002f8: 0062a223 sw t1,4(t0) +800002fc: 0062a423 sw t1,8(t0) +80000300: 0072a623 sw t2,12(t0) +80000304: 0062a823 sw t1,16(t0) +80000308: 00008067 ret -80000308 : -80000308: 00050293 mv t0,a0 -8000030c: 0082a303 lw t1,8(t0) -80000310: 00130313 addi t1,t1,1 -80000314: 0062a423 sw t1,8(t0) -80000318: 01428313 addi t1,t0,20 -8000031c: 0042ae83 lw t4,4(t0) -80000320: 005e9393 slli t2,t4,0x5 -80000324: 00730333 add t1,t1,t2 -80000328: 0005ae03 lw t3,0(a1) -8000032c: 01c32023 sw t3,0(t1) -80000330: 0045ae03 lw t3,4(a1) -80000334: 01c32223 sw t3,4(t1) -80000338: 0085ae03 lw t3,8(a1) -8000033c: 01c32423 sw t3,8(t1) -80000340: 00c5ae03 lw t3,12(a1) -80000344: 01c32623 sw t3,12(t1) -80000348: 0105ae03 lw t3,16(a1) -8000034c: 01c32823 sw t3,16(t1) -80000350: 0145ae03 lw t3,20(a1) -80000354: 01c32a23 sw t3,20(t1) -80000358: 0185ae03 lw t3,24(a1) -8000035c: 01c32c23 sw t3,24(t1) -80000360: 01c5ae03 lw t3,28(a1) -80000364: 01c32e23 sw t3,28(t1) -80000368: 001e8e93 addi t4,t4,1 -8000036c: 03200f13 li t5,50 -80000370: 01ee9463 bne t4,t5,80000378 -80000374: 00000e93 li t4,0 +8000030c : +8000030c: 00050293 mv t0,a0 +80000310: 0082a303 lw t1,8(t0) +80000314: 00130313 addi t1,t1,1 +80000318: 0062a423 sw t1,8(t0) +8000031c: 01428313 addi t1,t0,20 +80000320: 0042ae83 lw t4,4(t0) +80000324: 005e9393 slli t2,t4,0x5 +80000328: 00730333 add t1,t1,t2 +8000032c: 0005ae03 lw t3,0(a1) +80000330: 01c32023 sw t3,0(t1) +80000334: 0045ae03 lw t3,4(a1) +80000338: 01c32223 sw t3,4(t1) +8000033c: 0085ae03 lw t3,8(a1) +80000340: 01c32423 sw t3,8(t1) +80000344: 00c5ae03 lw t3,12(a1) +80000348: 01c32623 sw t3,12(t1) +8000034c: 0105ae03 lw t3,16(a1) +80000350: 01c32823 sw t3,16(t1) +80000354: 0145ae03 lw t3,20(a1) +80000358: 01c32a23 sw t3,20(t1) +8000035c: 0185ae03 lw t3,24(a1) +80000360: 01c32c23 sw t3,24(t1) +80000364: 01c5ae03 lw t3,28(a1) +80000368: 01c32e23 sw t3,28(t1) +8000036c: 001e8e93 addi t4,t4,1 +80000370: 03200f13 li t5,50 +80000374: 01ee9463 bne t4,t5,8000037c +80000378: 00000e93 li t4,0 -80000378 : -80000378: 01d2a223 sw t4,4(t0) -8000037c: 00008067 ret +8000037c : +8000037c: 01d2a223 sw t4,4(t0) +80000380: 00008067 ret -80000380 : -80000380: 00050293 mv t0,a0 -80000384: 0082a303 lw t1,8(t0) -80000388: fff30313 addi t1,t1,-1 -8000038c: 0062a423 sw t1,8(t0) -80000390: 01428313 addi t1,t0,20 -80000394: 0002ae83 lw t4,0(t0) -80000398: 03200f93 li t6,50 -8000039c: 000e8f13 mv t5,t4 -800003a0: 001f0f13 addi t5,t5,1 -800003a4: 01ff1463 bne t5,t6,800003ac -800003a8: 00000f13 li t5,0 +80000384 : +80000384: 00050293 mv t0,a0 +80000388: 0082a303 lw t1,8(t0) +8000038c: fff30313 addi t1,t1,-1 +80000390: 0062a423 sw t1,8(t0) +80000394: 01428313 addi t1,t0,20 +80000398: 0002ae83 lw t4,0(t0) +8000039c: 03200f93 li t6,50 +800003a0: 000e8f13 mv t5,t4 +800003a4: 001f0f13 addi t5,t5,1 +800003a8: 01ff1463 bne t5,t6,800003b0 +800003ac: 00000f13 li t5,0 -800003ac : -800003ac: 01e2a023 sw t5,0(t0) -800003b0: 005e9393 slli t2,t4,0x5 -800003b4: 00730333 add t1,t1,t2 -800003b8: 00032e03 lw t3,0(t1) -800003bc: 01c5a023 sw t3,0(a1) -800003c0: 00432e03 lw t3,4(t1) -800003c4: 01c5a223 sw t3,4(a1) -800003c8: 00832e03 lw t3,8(t1) -800003cc: 01c5a423 sw t3,8(a1) -800003d0: 00c32e03 lw t3,12(t1) -800003d4: 01c5a623 sw t3,12(a1) -800003d8: 01032e03 lw t3,16(t1) -800003dc: 01c5a823 sw t3,16(a1) -800003e0: 01432e03 lw t3,20(t1) -800003e4: 01c5aa23 sw t3,20(a1) -800003e8: 01832e03 lw t3,24(t1) -800003ec: 01c5ac23 sw t3,24(a1) -800003f0: 01c32e03 lw t3,28(t1) -800003f4: 01c5ae23 sw t3,28(a1) -800003f8: 00008067 ret +800003b0 : +800003b0: 01e2a023 sw t5,0(t0) +800003b4: 005e9393 slli t2,t4,0x5 +800003b8: 00730333 add t1,t1,t2 +800003bc: 00032e03 lw t3,0(t1) +800003c0: 01c5a023 sw t3,0(a1) +800003c4: 00432e03 lw t3,4(t1) +800003c8: 01c5a223 sw t3,4(a1) +800003cc: 00832e03 lw t3,8(t1) +800003d0: 01c5a423 sw t3,8(a1) +800003d4: 00c32e03 lw t3,12(t1) +800003d8: 01c5a623 sw t3,12(a1) +800003dc: 01032e03 lw t3,16(t1) +800003e0: 01c5a823 sw t3,16(a1) +800003e4: 01432e03 lw t3,20(t1) +800003e8: 01c5aa23 sw t3,20(a1) +800003ec: 01832e03 lw t3,24(t1) +800003f0: 01c5ac23 sw t3,24(a1) +800003f4: 01c32e03 lw t3,28(t1) +800003f8: 01c5ae23 sw t3,28(a1) +800003fc: 00008067 ret -800003fc : -800003fc: 00050293 mv t0,a0 -80000400: 0082a303 lw t1,8(t0) -80000404: 00000513 li a0,0 -80000408: 03200e13 li t3,50 -8000040c: 006e1463 bne t3,t1,80000414 -80000410: 00150513 addi a0,a0,1 +80000400 : +80000400: 00050293 mv t0,a0 +80000404: 0082a303 lw t1,8(t0) +80000408: 00000513 li a0,0 +8000040c: 03200e13 li t3,50 +80000410: 006e1463 bne t3,t1,80000418 +80000414: 00150513 addi a0,a0,1 -80000414 : -80000414: 00008067 ret +80000418 : +80000418: 00008067 ret -80000418 : -80000418: 00050293 mv t0,a0 -8000041c: 0082a303 lw t1,8(t0) -80000420: 00000513 li a0,0 -80000424: 00000e13 li t3,0 -80000428: 006e1463 bne t3,t1,80000430 -8000042c: 00150513 addi a0,a0,1 +8000041c : +8000041c: 00050293 mv t0,a0 +80000420: 0082a303 lw t1,8(t0) +80000424: 00000513 li a0,0 +80000428: 00000e13 li t3,0 +8000042c: 006e1463 bne t3,t1,80000434 +80000430: 00150513 addi a0,a0,1 -80000430 : -80000430: 00008067 ret +80000434 : +80000434: 00008067 ret -80000434 : -80000434: 00050293 mv t0,a0 -80000438: 00c2a303 lw t1,12(t0) -8000043c: 0102a383 lw t2,16(t0) -80000440: 0063b533 sltu a0,t2,t1 -80000444: 00008067 ret +80000438 : +80000438: 00050293 mv t0,a0 +8000043c: 00c2a303 lw t1,12(t0) +80000440: 0102a383 lw t2,16(t0) +80000444: 0063b533 sltu a0,t2,t1 +80000448: 00008067 ret -80000448 : -80000448: fd010113 addi sp,sp,-48 -8000044c: 02112623 sw ra,44(sp) -80000450: 02812423 sw s0,40(sp) -80000454: 03010413 addi s0,sp,48 -80000458: fca42e23 sw a0,-36(s0) -8000045c: fdc42703 lw a4,-36(s0) -80000460: 00f00793 li a5,15 -80000464: 02e7e463 bltu a5,a4,8000048c -80000468: 810007b7 lui a5,0x81000 -8000046c: fdc42703 lw a4,-36(s0) -80000470: 00271713 slli a4,a4,0x2 -80000474: 1b878793 addi a5,a5,440 # 810001b8 -80000478: 00f707b3 add a5,a4,a5 -8000047c: 0007a783 lw a5,0(a5) -80000480: 00078513 mv a0,a5 -80000484: bf9ff0ef jal ra,8000007c -80000488: 0740006f j 800004fc -8000048c: 02000793 li a5,32 -80000490: fef42623 sw a5,-20(s0) -80000494: fe0405a3 sb zero,-21(s0) -80000498: fec42783 lw a5,-20(s0) -8000049c: ffc78793 addi a5,a5,-4 -800004a0: fdc42703 lw a4,-36(s0) -800004a4: 00f757b3 srl a5,a4,a5 -800004a8: 00f7f793 andi a5,a5,15 -800004ac: fef42223 sw a5,-28(s0) -800004b0: fe442783 lw a5,-28(s0) -800004b4: 00078663 beqz a5,800004c0 -800004b8: 00100793 li a5,1 -800004bc: fef405a3 sb a5,-21(s0) -800004c0: feb44783 lbu a5,-21(s0) -800004c4: 02078263 beqz a5,800004e8 -800004c8: 810007b7 lui a5,0x81000 -800004cc: fe442703 lw a4,-28(s0) -800004d0: 00271713 slli a4,a4,0x2 -800004d4: 1b878793 addi a5,a5,440 # 810001b8 -800004d8: 00f707b3 add a5,a4,a5 -800004dc: 0007a783 lw a5,0(a5) -800004e0: 00078513 mv a0,a5 -800004e4: b99ff0ef jal ra,8000007c -800004e8: fec42783 lw a5,-20(s0) -800004ec: ffc78793 addi a5,a5,-4 -800004f0: fef42623 sw a5,-20(s0) -800004f4: fec42783 lw a5,-20(s0) -800004f8: faf040e3 bgtz a5,80000498 -800004fc: 02c12083 lw ra,44(sp) -80000500: 02812403 lw s0,40(sp) -80000504: 03010113 addi sp,sp,48 -80000508: 00008067 ret +8000044c : +8000044c: fd010113 addi sp,sp,-48 +80000450: 02112623 sw ra,44(sp) +80000454: 02812423 sw s0,40(sp) +80000458: 03010413 addi s0,sp,48 +8000045c: fca42e23 sw a0,-36(s0) +80000460: fdc42703 lw a4,-36(s0) +80000464: 00f00793 li a5,15 +80000468: 02e7e463 bltu a5,a4,80000490 +8000046c: 810007b7 lui a5,0x81000 +80000470: fdc42703 lw a4,-36(s0) +80000474: 00271713 slli a4,a4,0x2 +80000478: 19478793 addi a5,a5,404 # 81000194 +8000047c: 00f707b3 add a5,a4,a5 +80000480: 0007a783 lw a5,0(a5) +80000484: 00078513 mv a0,a5 +80000488: bf5ff0ef jal ra,8000007c +8000048c: 0740006f j 80000500 +80000490: 02000793 li a5,32 +80000494: fef42623 sw a5,-20(s0) +80000498: fe0405a3 sb zero,-21(s0) +8000049c: fec42783 lw a5,-20(s0) +800004a0: ffc78793 addi a5,a5,-4 +800004a4: fdc42703 lw a4,-36(s0) +800004a8: 00f757b3 srl a5,a4,a5 +800004ac: 00f7f793 andi a5,a5,15 +800004b0: fef42223 sw a5,-28(s0) +800004b4: fe442783 lw a5,-28(s0) +800004b8: 00078663 beqz a5,800004c4 +800004bc: 00100793 li a5,1 +800004c0: fef405a3 sb a5,-21(s0) +800004c4: feb44783 lbu a5,-21(s0) +800004c8: 02078263 beqz a5,800004ec +800004cc: 810007b7 lui a5,0x81000 +800004d0: fe442703 lw a4,-28(s0) +800004d4: 00271713 slli a4,a4,0x2 +800004d8: 19478793 addi a5,a5,404 # 81000194 +800004dc: 00f707b3 add a5,a4,a5 +800004e0: 0007a783 lw a5,0(a5) +800004e4: 00078513 mv a0,a5 +800004e8: b95ff0ef jal ra,8000007c +800004ec: fec42783 lw a5,-20(s0) +800004f0: ffc78793 addi a5,a5,-4 +800004f4: fef42623 sw a5,-20(s0) +800004f8: fec42783 lw a5,-20(s0) +800004fc: faf040e3 bgtz a5,8000049c +80000500: 02c12083 lw ra,44(sp) +80000504: 02812403 lw s0,40(sp) +80000508: 03010113 addi sp,sp,48 +8000050c: 00008067 ret -8000050c : -8000050c: fd010113 addi sp,sp,-48 -80000510: 02112623 sw ra,44(sp) -80000514: 02812423 sw s0,40(sp) -80000518: 03a12223 sw s10,36(sp) -8000051c: 03010413 addi s0,sp,48 -80000520: 000d0713 mv a4,s10 -80000524: 00070793 mv a5,a4 -80000528: 00379793 slli a5,a5,0x3 -8000052c: 40e787b3 sub a5,a5,a4 -80000530: 00279793 slli a5,a5,0x2 -80000534: 40e787b3 sub a5,a5,a4 -80000538: 00479713 slli a4,a5,0x4 -8000053c: 40f70733 sub a4,a4,a5 -80000540: 00271793 slli a5,a4,0x2 -80000544: 00078713 mv a4,a5 -80000548: 810007b7 lui a5,0x81000 -8000054c: 24478793 addi a5,a5,580 # 81000244 -80000550: 00f707b3 add a5,a4,a5 -80000554: 00078513 mv a0,a5 -80000558: ec1ff0ef jal ra,80000418 -8000055c: 00050793 mv a5,a0 -80000560: 04078263 beqz a5,800005a4 -80000564: 810007b7 lui a5,0x81000 -80000568: 0d478513 addi a0,a5,212 # 810000d4 -8000056c: b11ff0ef jal ra,8000007c -80000570: 000d0793 mv a5,s10 -80000574: 00078513 mv a0,a5 -80000578: ed1ff0ef jal ra,80000448 -8000057c: 810007b7 lui a5,0x81000 -80000580: 0dc78513 addi a0,a5,220 # 810000dc -80000584: af9ff0ef jal ra,8000007c -80000588: 000d0713 mv a4,s10 -8000058c: 810037b7 lui a5,0x81003 -80000590: 4e478793 addi a5,a5,1252 # 810034e4 -80000594: 00f707b3 add a5,a4,a5 -80000598: 00100713 li a4,1 -8000059c: 00e78023 sb a4,0(a5) -800005a0: 00000073 ecall -800005a4: 000d0713 mv a4,s10 -800005a8: 00070793 mv a5,a4 -800005ac: 00379793 slli a5,a5,0x3 -800005b0: 40e787b3 sub a5,a5,a4 -800005b4: 00279793 slli a5,a5,0x2 -800005b8: 40e787b3 sub a5,a5,a4 -800005bc: 00479713 slli a4,a5,0x4 -800005c0: 40f70733 sub a4,a4,a5 -800005c4: 00271793 slli a5,a4,0x2 -800005c8: 00078713 mv a4,a5 -800005cc: 810007b7 lui a5,0x81000 -800005d0: 24478793 addi a5,a5,580 # 81000244 -800005d4: 00f707b3 add a5,a4,a5 -800005d8: fd040713 addi a4,s0,-48 -800005dc: 00070593 mv a1,a4 -800005e0: 00078513 mv a0,a5 -800005e4: d9dff0ef jal ra,80000380 -800005e8: fd842783 lw a5,-40(s0) -800005ec: 00078113 mv sp,a5 -800005f0: fd442503 lw a0,-44(s0) -800005f4: fd042583 lw a1,-48(s0) -800005f8: fdc42603 lw a2,-36(s0) -800005fc: fe042683 lw a3,-32(s0) -80000600: fe442703 lw a4,-28(s0) -80000604: fe842783 lw a5,-24(s0) -80000608: fec42803 lw a6,-20(s0) -8000060c: a01ff0ef jal ra,8000000c -80000610: 00000073 ecall -80000614: 00000013 nop -80000618: 02c12083 lw ra,44(sp) -8000061c: 02812403 lw s0,40(sp) -80000620: 02412d03 lw s10,36(sp) -80000624: 03010113 addi sp,sp,48 -80000628: 00008067 ret +80000510 : +80000510: fd010113 addi sp,sp,-48 +80000514: 02112623 sw ra,44(sp) +80000518: 02812423 sw s0,40(sp) +8000051c: 03a12223 sw s10,36(sp) +80000520: 03010413 addi s0,sp,48 +80000524: 000d0713 mv a4,s10 +80000528: 65400793 li a5,1620 +8000052c: 02f70733 mul a4,a4,a5 +80000530: 810007b7 lui a5,0x81000 +80000534: 22078793 addi a5,a5,544 # 81000220 +80000538: 00f707b3 add a5,a4,a5 +8000053c: 00078513 mv a0,a5 +80000540: eddff0ef jal ra,8000041c +80000544: 00050793 mv a5,a0 +80000548: 02078063 beqz a5,80000568 +8000054c: 000d0713 mv a4,s10 +80000550: 810037b7 lui a5,0x81003 +80000554: 4c078793 addi a5,a5,1216 # 810034c0 +80000558: 00f707b3 add a5,a4,a5 +8000055c: 00100713 li a4,1 +80000560: 00e78023 sb a4,0(a5) +80000564: 00000073 ecall +80000568: 000d0713 mv a4,s10 +8000056c: 65400793 li a5,1620 +80000570: 02f70733 mul a4,a4,a5 +80000574: 810007b7 lui a5,0x81000 +80000578: 22078793 addi a5,a5,544 # 81000220 +8000057c: 00f707b3 add a5,a4,a5 +80000580: fd040713 addi a4,s0,-48 +80000584: 00070593 mv a1,a4 +80000588: 00078513 mv a0,a5 +8000058c: df9ff0ef jal ra,80000384 +80000590: fd842783 lw a5,-40(s0) +80000594: 00078113 mv sp,a5 +80000598: fd442503 lw a0,-44(s0) +8000059c: fd042583 lw a1,-48(s0) +800005a0: fdc42603 lw a2,-36(s0) +800005a4: fe042683 lw a3,-32(s0) +800005a8: fe442703 lw a4,-28(s0) +800005ac: fe842783 lw a5,-24(s0) +800005b0: fec42803 lw a6,-20(s0) +800005b4: a59ff0ef jal ra,8000000c +800005b8: 00000073 ecall +800005bc: 00000013 nop +800005c0: 02c12083 lw ra,44(sp) +800005c4: 02812403 lw s0,40(sp) +800005c8: 02412d03 lw s10,36(sp) +800005cc: 03010113 addi sp,sp,48 +800005d0: 00008067 ret -8000062c : -8000062c: fc010113 addi sp,sp,-64 -80000630: 02112e23 sw ra,60(sp) -80000634: 02812c23 sw s0,56(sp) -80000638: 04010413 addi s0,sp,64 -8000063c: 00010993 mv s3,sp -80000640: fe042623 sw zero,-20(s0) -80000644: 0c00006f j 80000704 -80000648: fec42703 lw a4,-20(s0) -8000064c: 00070793 mv a5,a4 -80000650: 00379793 slli a5,a5,0x3 -80000654: 40e787b3 sub a5,a5,a4 -80000658: 00279793 slli a5,a5,0x2 -8000065c: 40e787b3 sub a5,a5,a4 -80000660: 00479713 slli a4,a5,0x4 -80000664: 40f70733 sub a4,a4,a5 -80000668: 00271793 slli a5,a4,0x2 -8000066c: 00078713 mv a4,a5 -80000670: 810007b7 lui a5,0x81000 -80000674: 24478793 addi a5,a5,580 # 81000244 -80000678: 00f707b3 add a5,a4,a5 -8000067c: 00078513 mv a0,a5 -80000680: d99ff0ef jal ra,80000418 -80000684: 00050793 mv a5,a0 -80000688: 06079863 bnez a5,800006f8 -8000068c: fec42703 lw a4,-20(s0) -80000690: 00070793 mv a5,a4 -80000694: 00379793 slli a5,a5,0x3 -80000698: 40e787b3 sub a5,a5,a4 -8000069c: 00279793 slli a5,a5,0x2 -800006a0: 40e787b3 sub a5,a5,a4 -800006a4: 00479713 slli a4,a5,0x4 -800006a8: 40f70733 sub a4,a4,a5 -800006ac: 00271793 slli a5,a4,0x2 -800006b0: 00078713 mv a4,a5 -800006b4: 810007b7 lui a5,0x81000 -800006b8: 24478793 addi a5,a5,580 # 81000244 -800006bc: 00f707b3 add a5,a4,a5 -800006c0: fcc40713 addi a4,s0,-52 -800006c4: 00070593 mv a1,a4 -800006c8: 00078513 mv a0,a5 -800006cc: cb5ff0ef jal ra,80000380 -800006d0: fd442783 lw a5,-44(s0) -800006d4: 00078113 mv sp,a5 -800006d8: fd042503 lw a0,-48(s0) -800006dc: fcc42583 lw a1,-52(s0) -800006e0: fd842603 lw a2,-40(s0) -800006e4: fdc42683 lw a3,-36(s0) -800006e8: fe042703 lw a4,-32(s0) -800006ec: fe442783 lw a5,-28(s0) -800006f0: fe842803 lw a6,-24(s0) -800006f4: 979ff0ef jal ra,8000006c -800006f8: fec42783 lw a5,-20(s0) -800006fc: 00178793 addi a5,a5,1 -80000700: fef42623 sw a5,-20(s0) -80000704: fec42703 lw a4,-20(s0) -80000708: 00600793 li a5,6 -8000070c: f2e7dee3 bge a5,a4,80000648 -80000710: 00098113 mv sp,s3 -80000714: 00000013 nop -80000718: 03c12083 lw ra,60(sp) -8000071c: 03812403 lw s0,56(sp) -80000720: 04010113 addi sp,sp,64 -80000724: 00008067 ret +800005d4 : +800005d4: fc010113 addi sp,sp,-64 +800005d8: 02112e23 sw ra,60(sp) +800005dc: 02812c23 sw s0,56(sp) +800005e0: 04010413 addi s0,sp,64 +800005e4: 00010993 mv s3,sp +800005e8: fe042623 sw zero,-20(s0) +800005ec: 0880006f j 80000674 +800005f0: fec42703 lw a4,-20(s0) +800005f4: 65400793 li a5,1620 +800005f8: 02f70733 mul a4,a4,a5 +800005fc: 810007b7 lui a5,0x81000 +80000600: 22078793 addi a5,a5,544 # 81000220 +80000604: 00f707b3 add a5,a4,a5 +80000608: 00078513 mv a0,a5 +8000060c: e11ff0ef jal ra,8000041c +80000610: 00050793 mv a5,a0 +80000614: 04079a63 bnez a5,80000668 +80000618: fec42703 lw a4,-20(s0) +8000061c: 65400793 li a5,1620 +80000620: 02f70733 mul a4,a4,a5 +80000624: 810007b7 lui a5,0x81000 +80000628: 22078793 addi a5,a5,544 # 81000220 +8000062c: 00f707b3 add a5,a4,a5 +80000630: fcc40713 addi a4,s0,-52 +80000634: 00070593 mv a1,a4 +80000638: 00078513 mv a0,a5 +8000063c: d49ff0ef jal ra,80000384 +80000640: fd442783 lw a5,-44(s0) +80000644: 00078113 mv sp,a5 +80000648: fd042503 lw a0,-48(s0) +8000064c: fcc42583 lw a1,-52(s0) +80000650: fd842603 lw a2,-40(s0) +80000654: fdc42683 lw a3,-36(s0) +80000658: fe042703 lw a4,-32(s0) +8000065c: fe442783 lw a5,-28(s0) +80000660: fe842803 lw a6,-24(s0) +80000664: a09ff0ef jal ra,8000006c +80000668: fec42783 lw a5,-20(s0) +8000066c: 00178793 addi a5,a5,1 +80000670: fef42623 sw a5,-20(s0) +80000674: fec42703 lw a4,-20(s0) +80000678: 00600793 li a5,6 +8000067c: f6e7dae3 bge a5,a4,800005f0 +80000680: 00098113 mv sp,s3 +80000684: 00000013 nop +80000688: 03c12083 lw ra,60(sp) +8000068c: 03812403 lw s0,56(sp) +80000690: 04010113 addi sp,sp,64 +80000694: 00008067 ret -80000728 : -80000728: fd010113 addi sp,sp,-48 -8000072c: 02812623 sw s0,44(sp) -80000730: 03010413 addi s0,sp,48 -80000734: fca42e23 sw a0,-36(s0) -80000738: fe042623 sw zero,-20(s0) -8000073c: 0100006f j 8000074c -80000740: fec42783 lw a5,-20(s0) -80000744: 00178793 addi a5,a5,1 -80000748: fef42623 sw a5,-20(s0) -8000074c: fec42703 lw a4,-20(s0) -80000750: fdc42783 lw a5,-36(s0) -80000754: fef746e3 blt a4,a5,80000740 -80000758: 00000013 nop -8000075c: 02c12403 lw s0,44(sp) -80000760: 03010113 addi sp,sp,48 -80000764: 00008067 ret +80000698 : +80000698: fd010113 addi sp,sp,-48 +8000069c: 02812623 sw s0,44(sp) +800006a0: 03010413 addi s0,sp,48 +800006a4: fca42e23 sw a0,-36(s0) +800006a8: fe042623 sw zero,-20(s0) +800006ac: 0100006f j 800006bc +800006b0: fec42783 lw a5,-20(s0) +800006b4: 00178793 addi a5,a5,1 +800006b8: fef42623 sw a5,-20(s0) +800006bc: fec42703 lw a4,-20(s0) +800006c0: fdc42783 lw a5,-36(s0) +800006c4: fef746e3 blt a4,a5,800006b0 +800006c8: 00000013 nop +800006cc: 02c12403 lw s0,44(sp) +800006d0: 03010113 addi sp,sp,48 +800006d4: 00008067 ret -80000768 : -80000768: fa010113 addi sp,sp,-96 -8000076c: 04112e23 sw ra,92(sp) -80000770: 04812c23 sw s0,88(sp) -80000774: 06010413 addi s0,sp,96 -80000778: faa42e23 sw a0,-68(s0) -8000077c: fab42c23 sw a1,-72(s0) -80000780: fac42a23 sw a2,-76(s0) -80000784: fad42823 sw a3,-80(s0) -80000788: fae42623 sw a4,-84(s0) -8000078c: faf42423 sw a5,-88(s0) -80000790: 00010913 mv s2,sp -80000794: fe042623 sw zero,-20(s0) -80000798: fe042423 sw zero,-24(s0) -8000079c: 0b80006f j 80000854 -800007a0: ffff09b7 lui s3,0xffff0 -800007a4: 01310133 add sp,sp,s3 -800007a8: fe842783 lw a5,-24(s0) -800007ac: fcf42423 sw a5,-56(s0) -800007b0: fb842783 lw a5,-72(s0) -800007b4: fcf42623 sw a5,-52(s0) -800007b8: 00010793 mv a5,sp -800007bc: fcf42823 sw a5,-48(s0) -800007c0: fb442783 lw a5,-76(s0) -800007c4: fcf42a23 sw a5,-44(s0) -800007c8: fb042783 lw a5,-80(s0) -800007cc: fcf42c23 sw a5,-40(s0) -800007d0: fac42783 lw a5,-84(s0) -800007d4: fcf42e23 sw a5,-36(s0) -800007d8: fa842783 lw a5,-88(s0) -800007dc: fef42023 sw a5,-32(s0) -800007e0: fec42783 lw a5,-20(s0) -800007e4: fef42223 sw a5,-28(s0) -800007e8: fec42703 lw a4,-20(s0) -800007ec: 00070793 mv a5,a4 -800007f0: 00379793 slli a5,a5,0x3 -800007f4: 40e787b3 sub a5,a5,a4 -800007f8: 00279793 slli a5,a5,0x2 -800007fc: 40e787b3 sub a5,a5,a4 -80000800: 00479713 slli a4,a5,0x4 -80000804: 40f70733 sub a4,a4,a5 -80000808: 00271793 slli a5,a4,0x2 -8000080c: 00078713 mv a4,a5 -80000810: 810007b7 lui a5,0x81000 -80000814: 24478793 addi a5,a5,580 # 81000244 -80000818: 00f707b3 add a5,a4,a5 -8000081c: fc840713 addi a4,s0,-56 -80000820: 00070593 mv a1,a4 -80000824: 00078513 mv a0,a5 -80000828: ae1ff0ef jal ra,80000308 -8000082c: fec42783 lw a5,-20(s0) -80000830: 00178793 addi a5,a5,1 -80000834: fef42623 sw a5,-20(s0) -80000838: fec42703 lw a4,-20(s0) -8000083c: 00600793 li a5,6 -80000840: 00e7d463 bge a5,a4,80000848 -80000844: fe042623 sw zero,-20(s0) -80000848: fe842783 lw a5,-24(s0) -8000084c: 00178793 addi a5,a5,1 -80000850: fef42423 sw a5,-24(s0) -80000854: fe842703 lw a4,-24(s0) -80000858: fbc42783 lw a5,-68(s0) -8000085c: f4f762e3 bltu a4,a5,800007a0 -80000860: 00090113 mv sp,s2 -80000864: dc9ff0ef jal ra,8000062c -80000868: 00000013 nop -8000086c: 05c12083 lw ra,92(sp) -80000870: 05812403 lw s0,88(sp) -80000874: 06010113 addi sp,sp,96 +800006d8 : +800006d8: fa010113 addi sp,sp,-96 +800006dc: 04112e23 sw ra,92(sp) +800006e0: 04812c23 sw s0,88(sp) +800006e4: 06010413 addi s0,sp,96 +800006e8: faa42e23 sw a0,-68(s0) +800006ec: fab42c23 sw a1,-72(s0) +800006f0: fac42a23 sw a2,-76(s0) +800006f4: fad42823 sw a3,-80(s0) +800006f8: fae42623 sw a4,-84(s0) +800006fc: faf42423 sw a5,-88(s0) +80000700: 00010913 mv s2,sp +80000704: fe042623 sw zero,-20(s0) +80000708: fe042423 sw zero,-24(s0) +8000070c: 09c0006f j 800007a8 +80000710: ffff09b7 lui s3,0xffff0 +80000714: 01310133 add sp,sp,s3 +80000718: fe842783 lw a5,-24(s0) +8000071c: fcf42423 sw a5,-56(s0) +80000720: fb842783 lw a5,-72(s0) +80000724: fcf42623 sw a5,-52(s0) +80000728: 00010793 mv a5,sp +8000072c: fcf42823 sw a5,-48(s0) +80000730: fb442783 lw a5,-76(s0) +80000734: fcf42a23 sw a5,-44(s0) +80000738: fb042783 lw a5,-80(s0) +8000073c: fcf42c23 sw a5,-40(s0) +80000740: fac42783 lw a5,-84(s0) +80000744: fcf42e23 sw a5,-36(s0) +80000748: fa842783 lw a5,-88(s0) +8000074c: fef42023 sw a5,-32(s0) +80000750: fec42783 lw a5,-20(s0) +80000754: fef42223 sw a5,-28(s0) +80000758: fec42703 lw a4,-20(s0) +8000075c: 65400793 li a5,1620 +80000760: 02f70733 mul a4,a4,a5 +80000764: 810007b7 lui a5,0x81000 +80000768: 22078793 addi a5,a5,544 # 81000220 +8000076c: 00f707b3 add a5,a4,a5 +80000770: fc840713 addi a4,s0,-56 +80000774: 00070593 mv a1,a4 +80000778: 00078513 mv a0,a5 +8000077c: b91ff0ef jal ra,8000030c +80000780: fec42783 lw a5,-20(s0) +80000784: 00178793 addi a5,a5,1 +80000788: fef42623 sw a5,-20(s0) +8000078c: fec42703 lw a4,-20(s0) +80000790: 00600793 li a5,6 +80000794: 00e7d463 bge a5,a4,8000079c +80000798: fe042623 sw zero,-20(s0) +8000079c: fe842783 lw a5,-24(s0) +800007a0: 00178793 addi a5,a5,1 +800007a4: fef42423 sw a5,-24(s0) +800007a8: fe842703 lw a4,-24(s0) +800007ac: fbc42783 lw a5,-68(s0) +800007b0: f6f760e3 bltu a4,a5,80000710 +800007b4: 00090113 mv sp,s2 +800007b8: e1dff0ef jal ra,800005d4 +800007bc: 00000013 nop +800007c0: 05c12083 lw ra,92(sp) +800007c4: 05812403 lw s0,88(sp) +800007c8: 06010113 addi sp,sp,96 +800007cc: 00008067 ret + +800007d0 : +800007d0: fd010113 addi sp,sp,-48 +800007d4: 02812623 sw s0,44(sp) +800007d8: 03010413 addi s0,sp,48 +800007dc: fca42e23 sw a0,-36(s0) +800007e0: fe0407a3 sb zero,-17(s0) +800007e4: 0500006f j 80000834 +800007e8: 00100793 li a5,1 +800007ec: fef407a3 sb a5,-17(s0) +800007f0: fe042423 sw zero,-24(s0) +800007f4: 0340006f j 80000828 +800007f8: fef44783 lbu a5,-17(s0) +800007fc: 81003737 lui a4,0x81003 +80000800: 4c070693 addi a3,a4,1216 # 810034c0 +80000804: fe842703 lw a4,-24(s0) +80000808: 00e68733 add a4,a3,a4 +8000080c: 00074703 lbu a4,0(a4) +80000810: 00e7f7b3 and a5,a5,a4 +80000814: 00f037b3 snez a5,a5 +80000818: fef407a3 sb a5,-17(s0) +8000081c: fe842783 lw a5,-24(s0) +80000820: 00178793 addi a5,a5,1 +80000824: fef42423 sw a5,-24(s0) +80000828: fe842783 lw a5,-24(s0) +8000082c: fdc42703 lw a4,-36(s0) +80000830: fce7e4e3 bltu a5,a4,800007f8 +80000834: fef44783 lbu a5,-17(s0) +80000838: 0017c793 xori a5,a5,1 +8000083c: 0ff7f793 andi a5,a5,255 +80000840: fa0794e3 bnez a5,800007e8 +80000844: 00000013 nop +80000848: 02c12403 lw s0,44(sp) +8000084c: 03010113 addi sp,sp,48 +80000850: 00008067 ret + +80000854 : +80000854: ff010113 addi sp,sp,-16 +80000858: 00812623 sw s0,12(sp) +8000085c: 01712423 sw s7,8(sp) +80000860: 01010413 addi s0,sp,16 +80000864: 000b8793 mv a5,s7 +80000868: 00078513 mv a0,a5 +8000086c: 00c12403 lw s0,12(sp) +80000870: 00812b83 lw s7,8(sp) +80000874: 01010113 addi sp,sp,16 80000878: 00008067 ret -8000087c : -8000087c: fd010113 addi sp,sp,-48 -80000880: 02112623 sw ra,44(sp) -80000884: 02812423 sw s0,40(sp) -80000888: 03010413 addi s0,sp,48 -8000088c: fca42e23 sw a0,-36(s0) -80000890: 810007b7 lui a5,0x81000 -80000894: 0e078513 addi a0,a5,224 # 810000e0 -80000898: fe4ff0ef jal ra,8000007c -8000089c: fe0407a3 sb zero,-17(s0) -800008a0: 0500006f j 800008f0 -800008a4: 00100793 li a5,1 -800008a8: fef407a3 sb a5,-17(s0) -800008ac: fe042423 sw zero,-24(s0) -800008b0: 0340006f j 800008e4 -800008b4: fef44783 lbu a5,-17(s0) -800008b8: 81003737 lui a4,0x81003 -800008bc: 4e470693 addi a3,a4,1252 # 810034e4 -800008c0: fe842703 lw a4,-24(s0) -800008c4: 00e68733 add a4,a3,a4 -800008c8: 00074703 lbu a4,0(a4) -800008cc: 00e7f7b3 and a5,a5,a4 -800008d0: 00f037b3 snez a5,a5 -800008d4: fef407a3 sb a5,-17(s0) -800008d8: fe842783 lw a5,-24(s0) -800008dc: 00178793 addi a5,a5,1 -800008e0: fef42423 sw a5,-24(s0) -800008e4: fe842783 lw a5,-24(s0) -800008e8: fdc42703 lw a4,-36(s0) -800008ec: fce7e4e3 bltu a5,a4,800008b4 -800008f0: fef44783 lbu a5,-17(s0) -800008f4: 0017c793 xori a5,a5,1 -800008f8: 0ff7f793 andi a5,a5,255 -800008fc: fa0794e3 bnez a5,800008a4 -80000900: 00000013 nop -80000904: 02c12083 lw ra,44(sp) -80000908: 02812403 lw s0,40(sp) -8000090c: 03010113 addi sp,sp,48 -80000910: 00008067 ret +8000087c : +8000087c: ff010113 addi sp,sp,-16 +80000880: 00812623 sw s0,12(sp) +80000884: 01812423 sw s8,8(sp) +80000888: 01010413 addi s0,sp,16 +8000088c: 000c0793 mv a5,s8 +80000890: 00078513 mv a0,a5 +80000894: 00c12403 lw s0,12(sp) +80000898: 00812c03 lw s8,8(sp) +8000089c: 01010113 addi sp,sp,16 +800008a0: 00008067 ret -80000914 : -80000914: ff010113 addi sp,sp,-16 -80000918: 00812623 sw s0,12(sp) -8000091c: 01712423 sw s7,8(sp) -80000920: 01010413 addi s0,sp,16 -80000924: 000b8793 mv a5,s7 -80000928: 00078513 mv a0,a5 -8000092c: 00c12403 lw s0,12(sp) -80000930: 00812b83 lw s7,8(sp) -80000934: 01010113 addi sp,sp,16 -80000938: 00008067 ret - -8000093c : -8000093c: ff010113 addi sp,sp,-16 -80000940: 00812623 sw s0,12(sp) -80000944: 01812423 sw s8,8(sp) -80000948: 01010413 addi s0,sp,16 -8000094c: 000c0793 mv a5,s8 -80000950: 00078513 mv a0,a5 -80000954: 00c12403 lw s0,12(sp) -80000958: 00812c03 lw s8,8(sp) -8000095c: 01010113 addi sp,sp,16 -80000960: 00008067 ret - -80000964 : -80000964: ff010113 addi sp,sp,-16 -80000968: 00812623 sw s0,12(sp) -8000096c: 01912423 sw s9,8(sp) -80000970: 01010413 addi s0,sp,16 -80000974: 000c8793 mv a5,s9 -80000978: 00078513 mv a0,a5 -8000097c: 00c12403 lw s0,12(sp) -80000980: 00812c83 lw s9,8(sp) -80000984: 01010113 addi sp,sp,16 -80000988: 00008067 ret +800008a4 : +800008a4: ff010113 addi sp,sp,-16 +800008a8: 00812623 sw s0,12(sp) +800008ac: 01912423 sw s9,8(sp) +800008b0: 01010413 addi s0,sp,16 +800008b4: 000c8793 mv a5,s9 +800008b8: 00078513 mv a0,a5 +800008bc: 00c12403 lw s0,12(sp) +800008c0: 00812c83 lw s9,8(sp) +800008c4: 01010113 addi sp,sp,16 +800008c8: 00008067 ret Disassembly of section .rodata: @@ -708,25 +660,25 @@ 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 8100003a: 0000 unimp 8100003c: 0066 c.slli zero,0x19 8100003e: 0000 unimp -81000040: 2d2d jal 8100067a -81000042: 2d2d jal 8100067c -81000044: 2d2d jal 8100067e -81000046: 2d2d jal 81000680 -81000048: 2d2d jal 81000682 -8100004a: 2d2d jal 81000684 -8100004c: 2d2d jal 81000686 -8100004e: 2d2d jal 81000688 -81000050: 2d2d jal 8100068a -81000052: 2d2d jal 8100068c -81000054: 2d2d jal 8100068e -81000056: 2d2d jal 81000690 +81000040: 2d2d jal 8100067a +81000042: 2d2d jal 8100067c +81000044: 2d2d jal 8100067e +81000046: 2d2d jal 81000680 +81000048: 2d2d jal 81000682 +8100004a: 2d2d jal 81000684 +8100004c: 2d2d jal 81000686 +8100004e: 2d2d jal 81000688 +81000050: 2d2d jal 8100068a +81000052: 2d2d jal 8100068c +81000054: 2d2d jal 8100068e +81000056: 2d2d jal 81000690 81000058: 0a2d addi s4,s4,11 8100005a: 0000 unimp 8100005c: 4946 lw s2,80(sp) @@ -735,27 +687,27 @@ Disassembly of section .rodata: 81000062: 0a5a slli s4,s4,0x16 81000064: 0000 unimp 81000066: 0000 unimp -81000068: 203a fld ft0,392(sp) +81000068: 000a c.slli zero,0x2 8100006a: 0000 unimp -8100006c: 000a c.slli zero,0x2 +8100006c: 0020 addi s0,sp,8 8100006e: 0000 unimp -81000070: 2d2d jal 810006aa -81000072: 2d2d jal 810006ac -81000074: 2d2d jal 810006ae -81000076: 2d2d jal 810006b0 -81000078: 2d2d jal 810006b2 -8100007a: 2d2d jal 810006b4 -8100007c: 2d2d jal 810006b6 -8100007e: 2d2d jal 810006b8 -81000080: 2d2d jal 810006ba -81000082: 2d2d jal 810006bc -81000084: 2d2d jal 810006be -81000086: 2d2d jal 810006c0 -81000088: 2d2d jal 810006c2 -8100008a: 2d2d jal 810006c4 -8100008c: 2d2d jal 810006c6 -8100008e: 0a2d addi s4,s4,11 -81000090: 0000 unimp +81000070: 2d0a fld fs10,128(sp) +81000072: 2d2d jal 810006ac +81000074: 2d2d jal 810006ae +81000076: 2d2d jal 810006b0 +81000078: 2d2d jal 810006b2 +8100007a: 2d2d jal 810006b4 +8100007c: 2d2d jal 810006b6 +8100007e: 2d2d jal 810006b8 +81000080: 2d2d jal 810006ba +81000082: 2d2d jal 810006bc +81000084: 2d2d jal 810006be +81000086: 2d2d jal 810006c0 +81000088: 2d2d jal 810006c2 +8100008a: 2d2d jal 810006c4 +8100008c: 2d2d jal 810006c6 +8100008e: 2d2d jal 810006c8 +81000090: 000a c.slli zero,0x2 81000092: 0000 unimp 81000094: 0030 addi a2,sp,8 81000096: 0000 unimp @@ -779,185 +731,128 @@ Disassembly of section .rodata: 810000be: 0000 unimp 810000c0: 0062 c.slli zero,0x18 810000c2: 0000 unimp -810000c4: 00000063 beqz zero,810000c4 +810000c4: 00000063 beqz zero,810000c4 810000c8: 0064 addi s1,sp,12 810000ca: 0000 unimp 810000cc: 0065 c.nop 25 810000ce: 0000 unimp 810000d0: 0066 c.slli zero,0x19 -810000d2: 0000 unimp -810000d4: 6f64 flw fs1,92(a4) -810000d6: 656e flw fa0,216(sp) -810000d8: 203a fld ft0,392(sp) -810000da: 0000 unimp -810000dc: 000a c.slli zero,0x2 -810000de: 0000 unimp -810000e0: 6261 lui tp,0x18 -810000e2: 2074756f jal a0,81047ae8 -810000e6: 6f74 flw fa3,92(a4) -810000e8: 7720 flw fs0,104(a4) -810000ea: 6961 lui s2,0x18 -810000ec: 2074 fld fa3,192(s0) -810000ee: 6f66 flw ft10,88(sp) -810000f0: 2072 fld ft0,280(sp) -810000f2: 6f64 flw fs1,92(a4) -810000f4: 656e flw fa0,216(sp) -810000f6: 000a c.slli zero,0x2 Disassembly of section .data: -810000f8 : -810000f8: 0000 unimp +810000d4 : +810000d4: 0000 unimp +810000d6: 8100 0x8100 +810000d8: 0004 0x4 +810000da: 8100 0x8100 +810000dc: 0008 0x8 +810000de: 8100 0x8100 +810000e0: 000c 0xc +810000e2: 8100 0x8100 +810000e4: 0010 0x10 +810000e6: 8100 0x8100 +810000e8: 0014 0x14 +810000ea: 8100 0x8100 +810000ec: 0018 0x18 +810000ee: 8100 0x8100 +810000f0: 001c 0x1c +810000f2: 8100 0x8100 +810000f4: 0020 addi s0,sp,8 +810000f6: 8100 0x8100 +810000f8: 0024 addi s1,sp,8 810000fa: 8100 0x8100 -810000fc: 0004 0x4 +810000fc: 0028 addi a0,sp,8 810000fe: 8100 0x8100 -81000100: 0008 0x8 +81000100: 002c addi a1,sp,8 81000102: 8100 0x8100 -81000104: 000c 0xc +81000104: 0030 addi a2,sp,8 81000106: 8100 0x8100 -81000108: 0010 0x10 +81000108: 0034 addi a3,sp,8 8100010a: 8100 0x8100 -8100010c: 0014 0x14 +8100010c: 0038 addi a4,sp,8 8100010e: 8100 0x8100 -81000110: 0018 0x18 +81000110: 003c addi a5,sp,8 81000112: 8100 0x8100 -81000114: 001c 0x1c -81000116: 8100 0x8100 -81000118: 0020 addi s0,sp,8 -8100011a: 8100 0x8100 -8100011c: 0024 addi s1,sp,8 -8100011e: 8100 0x8100 -81000120: 0028 addi a0,sp,8 -81000122: 8100 0x8100 -81000124: 002c addi a1,sp,8 -81000126: 8100 0x8100 -81000128: 0030 addi a2,sp,8 -8100012a: 8100 0x8100 -8100012c: 0034 addi a3,sp,8 -8100012e: 8100 0x8100 -81000130: 0038 addi a4,sp,8 -81000132: 8100 0x8100 -81000134: 003c addi a5,sp,8 -81000136: 8100 0x8100 -81000138 : -81000138: 0001 nop +81000114 : +81000114: 0001 nop + ... +81000126: 0000 unimp +81000128: 0002 c.slli64 zero + ... 8100013a: 0000 unimp -8100013c: 0001 nop -8100013e: 0000 unimp -81000140: 0001 nop -81000142: 0000 unimp -81000144: 0001 nop -81000146: 0000 unimp -81000148: 0001 nop -8100014a: 0000 unimp -8100014c: 0001 nop -8100014e: 0000 unimp -81000150: 0001 nop -81000152: 0000 unimp -81000154: 0001 nop -81000156: 0000 unimp -81000158: 0001 nop -8100015a: 0000 unimp -8100015c: 0001 nop -8100015e: 0000 unimp -81000160: 0001 nop -81000162: 0000 unimp -81000164: 0001 nop -81000166: 0000 unimp -81000168: 0001 nop -8100016a: 0000 unimp -8100016c: 0001 nop -8100016e: 0000 unimp -81000170: 0001 nop -81000172: 0000 unimp -81000174: 0001 nop +8100013c: 00000003 lb zero,0(zero) # 0 + ... +81000150: 0004 0x4 ... -81000178 : -81000178: 0000 unimp +81000154 : +81000154: 000a c.slli zero,0x2 + ... +81000166: 0000 unimp +81000168: 000a c.slli zero,0x2 + ... 8100017a: 0000 unimp -8100017c: 0001 nop -8100017e: 0000 unimp -81000180: 0002 c.slli64 zero -81000182: 0000 unimp -81000184: 00000003 lb zero,0(zero) # 0 -81000188: 0004 0x4 -8100018a: 0000 unimp -8100018c: 0005 c.nop 1 +8100017c: 000a c.slli zero,0x2 + ... 8100018e: 0000 unimp -81000190: 0006 c.slli zero,0x1 -81000192: 0000 unimp -81000194: 00000007 0x7 -81000198: 0008 0x8 -8100019a: 0000 unimp -8100019c: 0009 c.nop 2 -8100019e: 0000 unimp -810001a0: 000a c.slli zero,0x2 -810001a2: 0000 unimp -810001a4: 0000000b 0xb -810001a8: 000c 0xc -810001aa: 0000 unimp -810001ac: 000d c.nop 3 -810001ae: 0000 unimp -810001b0: 000e c.slli zero,0x3 -810001b2: 0000 unimp -810001b4: 0000000f fence unknown,unknown +81000190: 000a c.slli zero,0x2 + ... -810001b8 : -810001b8: 0094 addi a3,sp,64 +81000194 : +81000194: 0094 addi a3,sp,64 +81000196: 8100 0x8100 +81000198: 0098 addi a4,sp,64 +8100019a: 8100 0x8100 +8100019c: 009c addi a5,sp,64 +8100019e: 8100 0x8100 +810001a0: 00a0 addi s0,sp,72 +810001a2: 8100 0x8100 +810001a4: 00a4 addi s1,sp,72 +810001a6: 8100 0x8100 +810001a8: 00a8 addi a0,sp,72 +810001aa: 8100 0x8100 +810001ac: 00ac addi a1,sp,72 +810001ae: 8100 0x8100 +810001b0: 00b0 addi a2,sp,72 +810001b2: 8100 0x8100 +810001b4: 00b4 addi a3,sp,72 +810001b6: 8100 0x8100 +810001b8: 00b8 addi a4,sp,72 810001ba: 8100 0x8100 -810001bc: 0098 addi a4,sp,64 +810001bc: 00bc addi a5,sp,72 810001be: 8100 0x8100 -810001c0: 009c addi a5,sp,64 +810001c0: 00c0 addi s0,sp,68 810001c2: 8100 0x8100 -810001c4: 00a0 addi s0,sp,72 +810001c4: 00c4 addi s1,sp,68 810001c6: 8100 0x8100 -810001c8: 00a4 addi s1,sp,72 +810001c8: 00c8 addi a0,sp,68 810001ca: 8100 0x8100 -810001cc: 00a8 addi a0,sp,72 +810001cc: 00cc addi a1,sp,68 810001ce: 8100 0x8100 -810001d0: 00ac addi a1,sp,72 +810001d0: 00d0 addi a2,sp,68 810001d2: 8100 0x8100 -810001d4: 00b0 addi a2,sp,72 -810001d6: 8100 0x8100 -810001d8: 00b4 addi a3,sp,72 -810001da: 8100 0x8100 -810001dc: 00b8 addi a4,sp,72 -810001de: 8100 0x8100 -810001e0: 00bc addi a5,sp,72 -810001e2: 8100 0x8100 -810001e4: 00c0 addi s0,sp,68 -810001e6: 8100 0x8100 -810001e8: 00c4 addi s1,sp,68 -810001ea: 8100 0x8100 -810001ec: 00c8 addi a0,sp,68 -810001ee: 8100 0x8100 -810001f0: 00cc addi a1,sp,68 -810001f2: 8100 0x8100 -810001f4: 00d0 addi a2,sp,68 -810001f6: 8100 0x8100 Disassembly of section .bss: -810001f8 : +810001d4 : ... -81000238 : +81000214 : ... -81000240 : -81000240: 0000 unimp +8100021c : +8100021c: 0000 unimp ... -81000244 : +81000220 : ... -810034e4 : +810034c0 : ... -810034ec : -810034ec: 0000 unimp +810034c8 : +810034c8: 0000 unimp ... Disassembly of section .comment: diff --git a/src/riscv_gpgpu/gpgpu_test.elf b/src/riscv_gpgpu/gpgpu_test.elf index b1f80c8c421b5b470adcd9f9d552bb322371302b..67840c325b9444b652686af58a2c619f807e73bb 100755 GIT binary patch delta 1499 zcmZ`(Z)jUp6hHU>TaB$Rd^&rA}5mhWeqy&KWpm15@(>ZUlnNp|dm~dOD-~mwwh#hX2o;}tKy?|-zI$cues&FC2w$26S+*-ph7l)oe%Aw)hPDe!AQRbj;;+F zsHQ=uw+8TBU^60ybd_4&_|uy|dvRW^)yLMXgwlK!(rV7mH*vEc#xHa5$pwwpYho_b zn%-#x7KXY-fw?REzakI&+z9YZ|IbS`s*i2i6lypq_QmpgpgILmVexLg++$CgzL_(>tk5x zcxDH0wd3T4U5>N9xQbkbafeGf-wU(--f<5LU7d%)a;oqK0L}Npj#q+Hd1}!0`t%~M z>`zM5Ut;(`--r|PFUM|~jU_Mhr(D^U$19B%br)|Qu)9jsp8s9HbFlntbpyklA4+p= zSn50#-ytWbQ@vBE@dF--_8vXAxuLT*sMQyjblPRkysFBHtg17nz3kAg8QZp!SxHxz zEN%&Y7L7}M80Vq`vYfbDzOU;qtvEIJk(p_0r*MFV({BYhLU<4ORfu?lK^!gDepW* zj$*9Gcs$&qdxKafTC)E}n0n*T=&9TyY|;UhjsZky;WpttnC(exqfegdJM%Wq_k5sb zp6`3-#9;Ys@+&4SgiuN)*-!Xj%235oyZCg<65nH*y_vF^i=U@#X(fi&iI&0DlpTH1 O26#+l3?5N~c>V=PE2WeG delta 1769 zcmbVNU1%It6h1RMKS`4`+03>ZQeh@Lo81*tZJJ_&h@E0WL?OjM^+BZe$JkQZq)oK- z2X6hcH1W4OS5qH z-0wT*eD~aQXJ$Lz>>4i#B38XPYxlx=GfoRZ_oN#dC>oiAU^_O&i9 z8>jsdxqRBIJ7ks9`(6J^ejdgtM&oz&g-#E-exD1VQ=f~8#8@-PKdHg{h3v6;F>}{A zHBc+qf_|Z!S_{m29@n{o$8F~fT?mTs)W#f4SANl#xm1R~7SD3zeorgEX zWOIzKYp$bo3@#7k9wXrEdKik`8E*5MxbsAV%-JM8_PN8Y?o?%CVmo z@Ganw@-RLJyoC?jX7Y-(T6=EWYV8GJaT>ALUHE5<$xXmlg82)+sZbw8Z~p+lfL*2w zaTVh{fM0Y7UgQViadH=7ADa?ID1ij0K-3~3v|@vL;5ptLHESwla(^gf?E+g>IE;|p z2b|%<(WhGK@Vddu1vSX`65;; queue.dump -/opt/riscv/bin/riscv32-unknown-elf-objcopy -O ihex queue.elf queue.hex \ No newline at end of file diff --git a/src/riscv_gpgpu/lib/lib.c b/src/riscv_gpgpu/lib/lib.c index 71db8ec9..9476dde7 100644 --- a/src/riscv_gpgpu/lib/lib.c +++ b/src/riscv_gpgpu/lib/lib.c @@ -1,8 +1,8 @@ #include "lib.h" -extern void createThreads(unsigned, unsigned, unsigned, unsigned *, unsigned *, unsigned *, unsigned); -extern void wspawn(unsigned, unsigned, unsigned, unsigned *, unsigned *, unsigned *, unsigned); +extern void createThreads(unsigned, unsigned, unsigned, void *, void *, void *, unsigned); +extern void wspawn(unsigned, unsigned, unsigned, void *, void *, void *, unsigned); extern void print_consol(char *); extern void printc(char); @@ -33,9 +33,9 @@ void reschedule_warps() if (queue_isEmpty(q+curr_warp)) { - print_consol("done: "); - int_print(curr_warp); - print_consol("\n"); + // print_consol("done: "); + // int_print(curr_warp); + // print_consol("\n"); done[curr_warp] = true; ECALL; } @@ -75,7 +75,7 @@ void sleep(int t) -void createWarps(unsigned num_Warps, unsigned num_threads, FUNC, unsigned * x_ptr, unsigned * y_ptr, unsigned * z_ptr) +void createWarps(unsigned num_Warps, unsigned num_threads, FUNC, void * x_ptr, void * y_ptr, void * z_ptr) { asm __volatile__("addi s2, sp, 0"); int warp = 0; @@ -108,7 +108,6 @@ void createWarps(unsigned num_Warps, unsigned num_threads, FUNC, unsigned * x_pt void wait_for_done(unsigned num_wait) { - print_consol("about to wait for done\n"); bool temp = false; while (!temp) { @@ -121,19 +120,19 @@ void wait_for_done(unsigned num_wait) } -unsigned * get_1st_arg(void) +void * get_1st_arg(void) { - register unsigned *ret asm("s7"); + register void *ret asm("s7"); return ret; } -unsigned * get_2nd_arg(void) +void * get_2nd_arg(void) { - register unsigned *ret asm("s8"); + register void *ret asm("s8"); return ret; } -unsigned * get_3rd_arg(void) +void * get_3rd_arg(void) { - register unsigned *ret asm("s9"); + register void *ret asm("s9"); return ret; } diff --git a/src/riscv_gpgpu/lib/lib.h b/src/riscv_gpgpu/lib/lib.h index 710d3c97..afaff312 100644 --- a/src/riscv_gpgpu/lib/lib.h +++ b/src/riscv_gpgpu/lib/lib.h @@ -35,14 +35,14 @@ static bool done[] = {false, false, false, false, false, false, false}; static int main_sp[1]; #define FUNC void (func)(unsigned, unsigned) -void createWarps(unsigned num_Warps, unsigned num_threads, FUNC, unsigned *, unsigned *, unsigned *); +void createWarps(unsigned num_Warps, unsigned num_threads, FUNC, void *, void *, void *); void reschedule_warps(void); void int_print(unsigned); void wait_for_done(unsigned); -unsigned * get_1st_arg(void); -unsigned * get_2nd_arg(void); -unsigned * get_3rd_arg(void); +void * get_1st_arg(void); +void * get_2nd_arg(void); +void * get_3rd_arg(void); void sleep(int); diff --git a/src/riscv_gpgpu/lib/queue.h b/src/riscv_gpgpu/lib/queue.h index fc02e15a..7b586956 100644 --- a/src/riscv_gpgpu/lib/queue.h +++ b/src/riscv_gpgpu/lib/queue.h @@ -15,9 +15,9 @@ typedef struct Job_t unsigned n_threads; unsigned base_sp; unsigned func_ptr; - unsigned * x; - unsigned * y; - unsigned * z; + void * x; + void * y; + void * z; unsigned assigned_warp; } Job; diff --git a/src/test.sh b/src/test.sh index 7938b5db..066bc487 100755 --- a/src/test.sh +++ b/src/test.sh @@ -113,3 +113,31 @@ echo ./riscv_tests/rv32ui-p-xor.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 + + + + +echo ./riscv_tests/rv32um-p-div.hex >> results.txt +./harptool -E -a rv32i --core ./riscv_tests/rv32um-p-div.hex -s -b >> results.txt + +echo ./riscv_tests/rv32um-p-divu.hex >> results.txt +./harptool -E -a rv32i --core ./riscv_tests/rv32um-p-divu.hex -s -b >> results.txt + +echo ./riscv_tests/rv32um-p-mul.hex >> results.txt +./harptool -E -a rv32i --core ./riscv_tests/rv32um-p-mul.hex -s -b >> results.txt + +echo ./riscv_tests/rv32um-p-mulh.hex >> results.txt +./harptool -E -a rv32i --core ./riscv_tests/rv32um-p-mulh.hex -s -b >> results.txt + +echo ./riscv_tests/rv32um-p-mulhsu.hex >> results.txt +./harptool -E -a rv32i --core ./riscv_tests/rv32um-p-mulhsu.hex -s -b >> results.txt + +echo ./riscv_tests/rv32um-p-mulhu.hex >> results.txt +./harptool -E -a rv32i --core ./riscv_tests/rv32um-p-mulhu.hex -s -b >> results.txt + +echo ./riscv_tests/rv32um-p-rem.hex >> results.txt +./harptool -E -a rv32i --core ./riscv_tests/rv32um-p-rem.hex -s -b >> results.txt + +echo ./riscv_tests/rv32um-p-remu.hex >> results.txt +./harptool -E -a rv32i --core ./riscv_tests/rv32um-p-remu.hex -s -b >> results.txt +