From 6c64fa35f830b99e791fe999aecb4be27d793a0d Mon Sep 17 00:00:00 2001 From: felsabbagh3 Date: Fri, 22 Mar 2019 04:14:52 -0400 Subject: [PATCH] Restructure --- .DS_Store | Bin 8196 -> 10244 bytes doc/Makefile | 21 - doc/fig/Makefile | 2 - doc/fig/byte_enc.fig | 35 - doc/fig/logo.xcf | Bin 288237 -> 0 bytes doc/fig/simd_core.fig | 95 - doc/fig/word_enc.fig | 51 - doc/harp_iset.tex | 442 ---- {src => emulator}/.DS_Store | Bin {src => emulator}/BUGS | 0 {src => emulator}/LICENSE | 0 {src => emulator}/Makefile | 0 {src => emulator}/WISHLIST | 0 {src => emulator}/args.cpp | 0 {src => emulator}/core.cpp | 0 {src => emulator}/enc.cpp | 0 emulator/harptool | Bin 0 -> 152212 bytes {src => emulator}/harptool.cpp | 0 {src => emulator}/include/archdef.h | 0 {src => emulator}/include/args.h | 0 {src => emulator}/include/asm-tokens.h | 0 {src => emulator}/include/core.h | 0 {src => emulator}/include/debug.h | 0 {src => emulator}/include/enc.h | 0 {src => emulator}/include/harpfloat.h | 0 {src => emulator}/include/help.h | 0 {src => emulator}/include/instruction.h | 0 {src => emulator}/include/mem.h | 0 {src => emulator}/include/obj.h | 0 {src => emulator}/include/qsim-harp.h | 0 {src => emulator}/include/types.h | 0 {src => emulator}/include/util.h | 0 {src => emulator}/instruction.cpp | 0 emulator/libharplib.a | Bin 0 -> 149192 bytes emulator/libharplib.so | Bin 0 -> 125828 bytes {src => emulator}/mem.cpp | 0 {src => emulator}/qsim-harp.cpp | 0 {src => emulator}/results.txt | 0 {src => emulator}/riscv_tests/C.ADD.elf.hex | 0 {src => emulator}/riscv_tests/C.ADDI.elf.hex | 0 .../riscv_tests/C.ADDI16SP.elf.hex | 0 .../riscv_tests/C.ADDI4SPN.elf.hex | 0 {src => emulator}/riscv_tests/C.AND.elf.hex | 0 {src => emulator}/riscv_tests/C.ANDI.elf.hex | 0 {src => emulator}/riscv_tests/C.BEQZ.elf.hex | 0 {src => emulator}/riscv_tests/C.BNEZ.elf.hex | 0 {src => emulator}/riscv_tests/C.J.elf.hex | 0 {src => emulator}/riscv_tests/C.JAL.elf.hex | 0 {src => emulator}/riscv_tests/C.JALR.elf.hex | 0 {src => emulator}/riscv_tests/C.JR.elf.hex | 0 {src => emulator}/riscv_tests/C.LI.elf.hex | 0 {src => emulator}/riscv_tests/C.LUI.elf.hex | 0 {src => emulator}/riscv_tests/C.LW.elf.hex | 0 {src => emulator}/riscv_tests/C.LWSP.elf.hex | 0 {src => emulator}/riscv_tests/C.MV.elf.hex | 0 {src => emulator}/riscv_tests/C.OR.elf.hex | 0 {src => emulator}/riscv_tests/C.SLLI.elf.hex | 0 {src => emulator}/riscv_tests/C.SRAI.elf.hex | 0 {src => emulator}/riscv_tests/C.SRLI.elf.hex | 0 {src => emulator}/riscv_tests/C.SUB.elf.hex | 0 {src => emulator}/riscv_tests/C.SW.elf.hex | 0 {src => emulator}/riscv_tests/C.SWSP.elf.hex | 0 {src => emulator}/riscv_tests/C.XOR.elf.hex | 0 {src => emulator}/riscv_tests/DIV.elf.hex | 0 {src => emulator}/riscv_tests/DIVU.elf.hex | 0 .../riscv_tests/I-ADD-01.elf.hex | 0 .../riscv_tests/I-ADDI-01.elf.hex | 0 .../riscv_tests/I-AND-01.elf.hex | 0 .../riscv_tests/I-ANDI-01.elf.hex | 0 .../riscv_tests/I-AUIPC-01.elf.hex | 0 .../riscv_tests/I-BEQ-01.elf.hex | 0 .../riscv_tests/I-BGE-01.elf.hex | 0 .../riscv_tests/I-BGEU-01.elf.hex | 0 .../riscv_tests/I-BLT-01.elf.hex | 0 .../riscv_tests/I-BLTU-01.elf.hex | 0 .../riscv_tests/I-BNE-01.elf.hex | 0 .../riscv_tests/I-CSRRC-01.elf.hex | 0 .../riscv_tests/I-CSRRCI-01.elf.hex | 0 .../riscv_tests/I-CSRRS-01.elf.hex | 0 .../riscv_tests/I-CSRRSI-01.elf.hex | 0 .../riscv_tests/I-CSRRW-01.elf.hex | 0 .../riscv_tests/I-CSRRWI-01.elf.hex | 0 .../riscv_tests/I-DELAY_SLOTS-01.elf.hex | 0 .../riscv_tests/I-EBREAK-01.elf.hex | 0 .../riscv_tests/I-ECALL-01.elf.hex | 0 .../riscv_tests/I-ENDIANESS-01.elf.hex | 0 .../riscv_tests/I-FENCE.I-01.elf.hex | 0 {src => emulator}/riscv_tests/I-IO.elf.hex | 0 .../riscv_tests/I-JAL-01.elf.hex | 0 .../riscv_tests/I-JALR-01.elf.hex | 0 {src => emulator}/riscv_tests/I-LB-01.elf.hex | 0 .../riscv_tests/I-LBU-01.elf.hex | 0 {src => emulator}/riscv_tests/I-LH-01.elf.hex | 0 .../riscv_tests/I-LHU-01.elf.hex | 0 .../riscv_tests/I-LUI-01.elf.hex | 0 {src => emulator}/riscv_tests/I-LW-01.elf.hex | 0 .../riscv_tests/I-MISALIGN_JMP-01.elf.hex | 0 .../riscv_tests/I-MISALIGN_LDST-01.elf.hex | 0 .../riscv_tests/I-NOP-01.elf.hex | 0 {src => emulator}/riscv_tests/I-OR-01.elf.hex | 0 .../riscv_tests/I-ORI-01.elf.hex | 0 .../riscv_tests/I-RF_size-01.elf.hex | 0 .../riscv_tests/I-RF_width-01.elf.hex | 0 .../riscv_tests/I-RF_x0-01.elf.hex | 0 {src => emulator}/riscv_tests/I-SB-01.elf.hex | 0 {src => emulator}/riscv_tests/I-SH-01.elf.hex | 0 .../riscv_tests/I-SLL-01.elf.hex | 0 .../riscv_tests/I-SLLI-01.elf.hex | 0 .../riscv_tests/I-SLT-01.elf.hex | 0 .../riscv_tests/I-SLTI-01.elf.hex | 0 .../riscv_tests/I-SLTIU-01.elf.hex | 0 .../riscv_tests/I-SLTU-01.elf.hex | 0 .../riscv_tests/I-SRA-01.elf.hex | 0 .../riscv_tests/I-SRAI-01.elf.hex | 0 .../riscv_tests/I-SRL-01.elf.hex | 0 .../riscv_tests/I-SRLI-01.elf.hex | 0 .../riscv_tests/I-SUB-01.elf.hex | 0 {src => emulator}/riscv_tests/I-SW-01.elf.hex | 0 .../riscv_tests/I-XOR-01.elf.hex | 0 .../riscv_tests/I-XORI-01.elf.hex | 0 {src => emulator}/riscv_tests/MUL.elf.hex | 0 {src => emulator}/riscv_tests/MULH.elf.hex | 0 {src => emulator}/riscv_tests/MULHSU.elf.hex | 0 {src => emulator}/riscv_tests/MULHU.elf.hex | 0 {src => emulator}/riscv_tests/REM.elf.hex | 0 {src => emulator}/riscv_tests/REMU.elf.hex | 0 {src => emulator}/riscv_tests/debugPlugin.hex | 0 .../riscv_tests/debugPluginExternal.hex | 0 {src => emulator}/riscv_tests/dhrystoneO3.hex | 0 .../riscv_tests/dhrystoneO3C.hex | 0 .../riscv_tests/dhrystoneO3M.hex | 0 .../riscv_tests/dhrystoneO3MC.hex | 0 .../riscv_tests/freeRTOS_demo.hex | 0 {src => emulator}/riscv_tests/machineCsr.hex | 0 .../riscv_tests/machineCsrCompressed.hex | 0 {src => emulator}/riscv_tests/mmu.hex | 0 .../riscv_tests/rv32uc-p-rvc.hex | 0 .../riscv_tests/rv32ui-p-add.hex | 0 .../riscv_tests/rv32ui-p-addi.hex | 0 .../riscv_tests/rv32ui-p-and.hex | 0 .../riscv_tests/rv32ui-p-andi.hex | 0 .../riscv_tests/rv32ui-p-auipc.hex | 0 .../riscv_tests/rv32ui-p-beq.hex | 0 .../riscv_tests/rv32ui-p-bge.hex | 0 .../riscv_tests/rv32ui-p-bgeu.hex | 0 .../riscv_tests/rv32ui-p-blt.hex | 0 .../riscv_tests/rv32ui-p-bltu.hex | 0 .../riscv_tests/rv32ui-p-bne.hex | 0 .../riscv_tests/rv32ui-p-fence_i.hex | 0 .../riscv_tests/rv32ui-p-jal.hex | 0 .../riscv_tests/rv32ui-p-jalr.hex | 0 {src => emulator}/riscv_tests/rv32ui-p-lb.hex | 0 .../riscv_tests/rv32ui-p-lbu.hex | 0 {src => emulator}/riscv_tests/rv32ui-p-lh.hex | 0 .../riscv_tests/rv32ui-p-lhu.hex | 0 .../riscv_tests/rv32ui-p-lui.hex | 0 .../riscv_tests/rv32ui-p-lui.hex.hex | 0 {src => emulator}/riscv_tests/rv32ui-p-lw.hex | 0 {src => emulator}/riscv_tests/rv32ui-p-or.hex | 0 .../riscv_tests/rv32ui-p-ori.hex | 0 {src => emulator}/riscv_tests/rv32ui-p-sb.hex | 0 {src => emulator}/riscv_tests/rv32ui-p-sh.hex | 0 .../riscv_tests/rv32ui-p-simple.hex | 0 .../riscv_tests/rv32ui-p-sll.hex | 0 .../riscv_tests/rv32ui-p-slli.hex | 0 .../riscv_tests/rv32ui-p-slt.hex | 0 .../riscv_tests/rv32ui-p-slti.hex | 0 .../riscv_tests/rv32ui-p-sltiu.hex | 0 .../riscv_tests/rv32ui-p-sltu.hex | 0 .../riscv_tests/rv32ui-p-sra.hex | 0 .../riscv_tests/rv32ui-p-srai.hex | 0 .../riscv_tests/rv32ui-p-srl.hex | 0 .../riscv_tests/rv32ui-p-srli.hex | 0 .../riscv_tests/rv32ui-p-sub.hex | 0 {src => emulator}/riscv_tests/rv32ui-p-sw.hex | 0 .../riscv_tests/rv32ui-p-xor.hex | 0 .../riscv_tests/rv32ui-p-xori.hex | 0 .../riscv_tests/rv32um-p-div.hex | 0 .../riscv_tests/rv32um-p-divu.hex | 0 .../riscv_tests/rv32um-p-mul.hex | 0 .../riscv_tests/rv32um-p-mulh.hex | 0 .../riscv_tests/rv32um-p-mulhsu.hex | 0 .../riscv_tests/rv32um-p-mulhu.hex | 0 .../riscv_tests/rv32um-p-rem.hex | 0 .../riscv_tests/rv32um-p-remu.hex | 0 {src => emulator}/riscv_tests/testA.hex | 0 {src => emulator}/test.sh | 0 emulator/test_riscv.sh | 4 + {src => emulator}/util.cpp | 0 {src => emulator}/vortex_software/.DS_Store | Bin {src => emulator}/vortex_software/Makefile | 0 {src => emulator}/vortex_software/linker.ld | 0 .../vortex_software/vortex_test.dump | 0 .../vortex_software/vortex_test.elf | Bin .../vortex_software/vortex_test.hex | 0 .../vortex_software/vx_include/.DS_Store | Bin .../vortex_software/vx_include/vx_front.c | 0 .../vortex_software/vx_include/vx_front.h | 0 {src => emulator}/vortex_software/vx_main.c | 0 .../vortex_software/vx_os/.DS_Store | Bin .../vortex_software/vx_os/vx_back/vx_back.c | 0 .../vortex_software/vx_os/vx_back/vx_back.h | 0 .../vortex_software/vx_os/vx_back/vx_back.s | 0 .../vortex_software/vx_os/vx_io/.DS_Store | Bin .../vortex_software/vx_os/vx_io/vx_io.c | 0 .../vortex_software/vx_os/vx_io/vx_io.h | 0 .../vortex_software/vx_os/vx_io/vx_io.s | 0 .../vortex_software/vx_os/vx_util/.DS_Store | Bin .../vortex_software/vx_os/vx_util/queue.h | 0 .../vortex_software/vx_os/vx_util/queue.s | 0 kernel/.DS_Store | Bin 0 -> 6148 bytes kernel/Makefile | 21 + kernel/linker.ld | 48 + kernel/vortex_test.dump | 2067 +++++++++++++++++ kernel/vortex_test.elf | Bin 0 -> 15536 bytes kernel/vortex_test.hex | 438 ++++ kernel/vx_include/.DS_Store | Bin 0 -> 6148 bytes kernel/vx_include/vx_front.c | 439 ++++ kernel/vx_include/vx_front.h | 55 + kernel/vx_main.c | 70 + kernel/vx_os/.DS_Store | Bin 0 -> 6148 bytes kernel/vx_os/vx_back/vx_back.c | 150 ++ kernel/vx_os/vx_back/vx_back.h | 55 + kernel/vx_os/vx_back/vx_back.s | 151 ++ kernel/vx_os/vx_io/.DS_Store | Bin 0 -> 6148 bytes kernel/vx_os/vx_io/vx_io.c | 29 + kernel/vx_os/vx_io/vx_io.h | 9 + kernel/vx_os/vx_io/vx_io.s | 30 + kernel/vx_os/vx_util/.DS_Store | Bin 0 -> 6148 bytes kernel/vx_os/vx_util/queue.h | 49 + kernel/vx_os/vx_util/queue.s | 123 + rtl/obj_dir/Vvortex | Bin 356652 -> 356652 bytes rtl/obj_dir/Vvortex__ALL.a | Bin 36568 -> 36568 bytes rtl/obj_dir/Vvortex__verFiles.dat | 18 +- rtl/results.txt | 92 +- rtl/test_bench.cpp | 92 +- src/test_riscv.sh | 4 - util/Makefile | 4 - util/bin2mif.cpp | 64 - 239 files changed, 3839 insertions(+), 819 deletions(-) delete mode 100644 doc/Makefile delete mode 100644 doc/fig/Makefile delete mode 100644 doc/fig/byte_enc.fig delete mode 100644 doc/fig/logo.xcf delete mode 100644 doc/fig/simd_core.fig delete mode 100644 doc/fig/word_enc.fig delete mode 100644 doc/harp_iset.tex rename {src => emulator}/.DS_Store (100%) rename {src => emulator}/BUGS (100%) rename {src => emulator}/LICENSE (100%) rename {src => emulator}/Makefile (100%) rename {src => emulator}/WISHLIST (100%) rename {src => emulator}/args.cpp (100%) rename {src => emulator}/core.cpp (100%) rename {src => emulator}/enc.cpp (100%) create mode 100755 emulator/harptool rename {src => emulator}/harptool.cpp (100%) rename {src => emulator}/include/archdef.h (100%) rename {src => emulator}/include/args.h (100%) rename {src => emulator}/include/asm-tokens.h (100%) rename {src => emulator}/include/core.h (100%) rename {src => emulator}/include/debug.h (100%) rename {src => emulator}/include/enc.h (100%) rename {src => emulator}/include/harpfloat.h (100%) rename {src => emulator}/include/help.h (100%) rename {src => emulator}/include/instruction.h (100%) rename {src => emulator}/include/mem.h (100%) rename {src => emulator}/include/obj.h (100%) rename {src => emulator}/include/qsim-harp.h (100%) rename {src => emulator}/include/types.h (100%) rename {src => emulator}/include/util.h (100%) rename {src => emulator}/instruction.cpp (100%) create mode 100644 emulator/libharplib.a create mode 100755 emulator/libharplib.so rename {src => emulator}/mem.cpp (100%) rename {src => emulator}/qsim-harp.cpp (100%) rename {src => emulator}/results.txt (100%) rename {src => emulator}/riscv_tests/C.ADD.elf.hex (100%) rename {src => emulator}/riscv_tests/C.ADDI.elf.hex (100%) rename {src => emulator}/riscv_tests/C.ADDI16SP.elf.hex (100%) rename {src => emulator}/riscv_tests/C.ADDI4SPN.elf.hex (100%) rename {src => emulator}/riscv_tests/C.AND.elf.hex (100%) rename {src => emulator}/riscv_tests/C.ANDI.elf.hex (100%) rename {src => emulator}/riscv_tests/C.BEQZ.elf.hex (100%) rename {src => emulator}/riscv_tests/C.BNEZ.elf.hex (100%) rename {src => emulator}/riscv_tests/C.J.elf.hex (100%) rename {src => emulator}/riscv_tests/C.JAL.elf.hex (100%) rename {src => emulator}/riscv_tests/C.JALR.elf.hex (100%) rename {src => emulator}/riscv_tests/C.JR.elf.hex (100%) rename {src => emulator}/riscv_tests/C.LI.elf.hex (100%) rename {src => emulator}/riscv_tests/C.LUI.elf.hex (100%) rename {src => emulator}/riscv_tests/C.LW.elf.hex (100%) rename {src => emulator}/riscv_tests/C.LWSP.elf.hex (100%) rename {src => emulator}/riscv_tests/C.MV.elf.hex (100%) rename {src => emulator}/riscv_tests/C.OR.elf.hex (100%) rename {src => emulator}/riscv_tests/C.SLLI.elf.hex (100%) rename {src => emulator}/riscv_tests/C.SRAI.elf.hex (100%) rename {src => emulator}/riscv_tests/C.SRLI.elf.hex (100%) rename {src => emulator}/riscv_tests/C.SUB.elf.hex (100%) rename {src => emulator}/riscv_tests/C.SW.elf.hex (100%) rename {src => emulator}/riscv_tests/C.SWSP.elf.hex (100%) rename {src => emulator}/riscv_tests/C.XOR.elf.hex (100%) rename {src => emulator}/riscv_tests/DIV.elf.hex (100%) rename {src => emulator}/riscv_tests/DIVU.elf.hex (100%) rename {src => emulator}/riscv_tests/I-ADD-01.elf.hex (100%) rename {src => emulator}/riscv_tests/I-ADDI-01.elf.hex (100%) rename {src => emulator}/riscv_tests/I-AND-01.elf.hex (100%) rename {src => emulator}/riscv_tests/I-ANDI-01.elf.hex (100%) rename {src => emulator}/riscv_tests/I-AUIPC-01.elf.hex (100%) rename {src => emulator}/riscv_tests/I-BEQ-01.elf.hex (100%) rename {src => emulator}/riscv_tests/I-BGE-01.elf.hex (100%) rename {src => emulator}/riscv_tests/I-BGEU-01.elf.hex (100%) rename {src => emulator}/riscv_tests/I-BLT-01.elf.hex (100%) rename {src => emulator}/riscv_tests/I-BLTU-01.elf.hex (100%) rename {src => emulator}/riscv_tests/I-BNE-01.elf.hex (100%) rename {src => emulator}/riscv_tests/I-CSRRC-01.elf.hex (100%) rename {src => emulator}/riscv_tests/I-CSRRCI-01.elf.hex (100%) rename {src => emulator}/riscv_tests/I-CSRRS-01.elf.hex (100%) rename {src => emulator}/riscv_tests/I-CSRRSI-01.elf.hex (100%) rename {src => emulator}/riscv_tests/I-CSRRW-01.elf.hex (100%) rename {src => emulator}/riscv_tests/I-CSRRWI-01.elf.hex (100%) rename {src => emulator}/riscv_tests/I-DELAY_SLOTS-01.elf.hex (100%) rename {src => emulator}/riscv_tests/I-EBREAK-01.elf.hex (100%) rename {src => emulator}/riscv_tests/I-ECALL-01.elf.hex (100%) rename {src => emulator}/riscv_tests/I-ENDIANESS-01.elf.hex (100%) rename {src => emulator}/riscv_tests/I-FENCE.I-01.elf.hex (100%) rename {src => emulator}/riscv_tests/I-IO.elf.hex (100%) rename {src => emulator}/riscv_tests/I-JAL-01.elf.hex (100%) rename {src => emulator}/riscv_tests/I-JALR-01.elf.hex (100%) rename {src => emulator}/riscv_tests/I-LB-01.elf.hex (100%) rename {src => emulator}/riscv_tests/I-LBU-01.elf.hex (100%) rename {src => emulator}/riscv_tests/I-LH-01.elf.hex (100%) rename {src => emulator}/riscv_tests/I-LHU-01.elf.hex (100%) rename {src => emulator}/riscv_tests/I-LUI-01.elf.hex (100%) rename {src => emulator}/riscv_tests/I-LW-01.elf.hex (100%) rename {src => emulator}/riscv_tests/I-MISALIGN_JMP-01.elf.hex (100%) rename {src => emulator}/riscv_tests/I-MISALIGN_LDST-01.elf.hex (100%) rename {src => emulator}/riscv_tests/I-NOP-01.elf.hex (100%) rename {src => emulator}/riscv_tests/I-OR-01.elf.hex (100%) rename {src => emulator}/riscv_tests/I-ORI-01.elf.hex (100%) rename {src => emulator}/riscv_tests/I-RF_size-01.elf.hex (100%) rename {src => emulator}/riscv_tests/I-RF_width-01.elf.hex (100%) rename {src => emulator}/riscv_tests/I-RF_x0-01.elf.hex (100%) rename {src => emulator}/riscv_tests/I-SB-01.elf.hex (100%) rename {src => emulator}/riscv_tests/I-SH-01.elf.hex (100%) rename {src => emulator}/riscv_tests/I-SLL-01.elf.hex (100%) rename {src => emulator}/riscv_tests/I-SLLI-01.elf.hex (100%) rename {src => emulator}/riscv_tests/I-SLT-01.elf.hex (100%) rename {src => emulator}/riscv_tests/I-SLTI-01.elf.hex (100%) rename {src => emulator}/riscv_tests/I-SLTIU-01.elf.hex (100%) rename {src => emulator}/riscv_tests/I-SLTU-01.elf.hex (100%) rename {src => emulator}/riscv_tests/I-SRA-01.elf.hex (100%) rename {src => emulator}/riscv_tests/I-SRAI-01.elf.hex (100%) rename {src => emulator}/riscv_tests/I-SRL-01.elf.hex (100%) rename {src => emulator}/riscv_tests/I-SRLI-01.elf.hex (100%) rename {src => emulator}/riscv_tests/I-SUB-01.elf.hex (100%) rename {src => emulator}/riscv_tests/I-SW-01.elf.hex (100%) rename {src => emulator}/riscv_tests/I-XOR-01.elf.hex (100%) rename {src => emulator}/riscv_tests/I-XORI-01.elf.hex (100%) rename {src => emulator}/riscv_tests/MUL.elf.hex (100%) rename {src => emulator}/riscv_tests/MULH.elf.hex (100%) rename {src => emulator}/riscv_tests/MULHSU.elf.hex (100%) rename {src => emulator}/riscv_tests/MULHU.elf.hex (100%) rename {src => emulator}/riscv_tests/REM.elf.hex (100%) rename {src => emulator}/riscv_tests/REMU.elf.hex (100%) rename {src => emulator}/riscv_tests/debugPlugin.hex (100%) rename {src => emulator}/riscv_tests/debugPluginExternal.hex (100%) rename {src => emulator}/riscv_tests/dhrystoneO3.hex (100%) rename {src => emulator}/riscv_tests/dhrystoneO3C.hex (100%) rename {src => emulator}/riscv_tests/dhrystoneO3M.hex (100%) rename {src => emulator}/riscv_tests/dhrystoneO3MC.hex (100%) rename {src => emulator}/riscv_tests/freeRTOS_demo.hex (100%) rename {src => emulator}/riscv_tests/machineCsr.hex (100%) rename {src => emulator}/riscv_tests/machineCsrCompressed.hex (100%) rename {src => emulator}/riscv_tests/mmu.hex (100%) rename {src => emulator}/riscv_tests/rv32uc-p-rvc.hex (100%) rename {src => emulator}/riscv_tests/rv32ui-p-add.hex (100%) rename {src => emulator}/riscv_tests/rv32ui-p-addi.hex (100%) rename {src => emulator}/riscv_tests/rv32ui-p-and.hex (100%) rename {src => emulator}/riscv_tests/rv32ui-p-andi.hex (100%) rename {src => emulator}/riscv_tests/rv32ui-p-auipc.hex (100%) rename {src => emulator}/riscv_tests/rv32ui-p-beq.hex (100%) rename {src => emulator}/riscv_tests/rv32ui-p-bge.hex (100%) rename {src => emulator}/riscv_tests/rv32ui-p-bgeu.hex (100%) rename {src => emulator}/riscv_tests/rv32ui-p-blt.hex (100%) rename {src => emulator}/riscv_tests/rv32ui-p-bltu.hex (100%) rename {src => emulator}/riscv_tests/rv32ui-p-bne.hex (100%) rename {src => emulator}/riscv_tests/rv32ui-p-fence_i.hex (100%) rename {src => emulator}/riscv_tests/rv32ui-p-jal.hex (100%) rename {src => emulator}/riscv_tests/rv32ui-p-jalr.hex (100%) rename {src => emulator}/riscv_tests/rv32ui-p-lb.hex (100%) rename {src => emulator}/riscv_tests/rv32ui-p-lbu.hex (100%) rename {src => emulator}/riscv_tests/rv32ui-p-lh.hex (100%) rename {src => emulator}/riscv_tests/rv32ui-p-lhu.hex (100%) rename {src => emulator}/riscv_tests/rv32ui-p-lui.hex (100%) rename {src => emulator}/riscv_tests/rv32ui-p-lui.hex.hex (100%) rename {src => emulator}/riscv_tests/rv32ui-p-lw.hex (100%) rename {src => emulator}/riscv_tests/rv32ui-p-or.hex (100%) rename {src => emulator}/riscv_tests/rv32ui-p-ori.hex (100%) rename {src => emulator}/riscv_tests/rv32ui-p-sb.hex (100%) rename {src => emulator}/riscv_tests/rv32ui-p-sh.hex (100%) rename {src => emulator}/riscv_tests/rv32ui-p-simple.hex (100%) rename {src => emulator}/riscv_tests/rv32ui-p-sll.hex (100%) rename {src => emulator}/riscv_tests/rv32ui-p-slli.hex (100%) rename {src => emulator}/riscv_tests/rv32ui-p-slt.hex (100%) rename {src => emulator}/riscv_tests/rv32ui-p-slti.hex (100%) rename {src => emulator}/riscv_tests/rv32ui-p-sltiu.hex (100%) rename {src => emulator}/riscv_tests/rv32ui-p-sltu.hex (100%) rename {src => emulator}/riscv_tests/rv32ui-p-sra.hex (100%) rename {src => emulator}/riscv_tests/rv32ui-p-srai.hex (100%) rename {src => emulator}/riscv_tests/rv32ui-p-srl.hex (100%) rename {src => emulator}/riscv_tests/rv32ui-p-srli.hex (100%) rename {src => emulator}/riscv_tests/rv32ui-p-sub.hex (100%) rename {src => emulator}/riscv_tests/rv32ui-p-sw.hex (100%) rename {src => emulator}/riscv_tests/rv32ui-p-xor.hex (100%) rename {src => emulator}/riscv_tests/rv32ui-p-xori.hex (100%) rename {src => emulator}/riscv_tests/rv32um-p-div.hex (100%) rename {src => emulator}/riscv_tests/rv32um-p-divu.hex (100%) rename {src => emulator}/riscv_tests/rv32um-p-mul.hex (100%) rename {src => emulator}/riscv_tests/rv32um-p-mulh.hex (100%) rename {src => emulator}/riscv_tests/rv32um-p-mulhsu.hex (100%) rename {src => emulator}/riscv_tests/rv32um-p-mulhu.hex (100%) rename {src => emulator}/riscv_tests/rv32um-p-rem.hex (100%) rename {src => emulator}/riscv_tests/rv32um-p-remu.hex (100%) rename {src => emulator}/riscv_tests/testA.hex (100%) rename {src => emulator}/test.sh (100%) create mode 100755 emulator/test_riscv.sh rename {src => emulator}/util.cpp (100%) rename {src => emulator}/vortex_software/.DS_Store (100%) rename {src => emulator}/vortex_software/Makefile (100%) rename {src => emulator}/vortex_software/linker.ld (100%) rename {src => emulator}/vortex_software/vortex_test.dump (100%) rename {src => emulator}/vortex_software/vortex_test.elf (100%) rename {src => emulator}/vortex_software/vortex_test.hex (100%) rename {src => emulator}/vortex_software/vx_include/.DS_Store (100%) rename {src => emulator}/vortex_software/vx_include/vx_front.c (100%) rename {src => emulator}/vortex_software/vx_include/vx_front.h (100%) rename {src => emulator}/vortex_software/vx_main.c (100%) rename {src => emulator}/vortex_software/vx_os/.DS_Store (100%) rename {src => emulator}/vortex_software/vx_os/vx_back/vx_back.c (100%) rename {src => emulator}/vortex_software/vx_os/vx_back/vx_back.h (100%) rename {src => emulator}/vortex_software/vx_os/vx_back/vx_back.s (100%) rename {src => emulator}/vortex_software/vx_os/vx_io/.DS_Store (100%) rename {src => emulator}/vortex_software/vx_os/vx_io/vx_io.c (100%) rename {src => emulator}/vortex_software/vx_os/vx_io/vx_io.h (100%) rename {src => emulator}/vortex_software/vx_os/vx_io/vx_io.s (100%) rename {src => emulator}/vortex_software/vx_os/vx_util/.DS_Store (100%) rename {src => emulator}/vortex_software/vx_os/vx_util/queue.h (100%) rename {src => emulator}/vortex_software/vx_os/vx_util/queue.s (100%) create mode 100644 kernel/.DS_Store create mode 100644 kernel/Makefile create mode 100644 kernel/linker.ld create mode 100644 kernel/vortex_test.dump create mode 100755 kernel/vortex_test.elf create mode 100644 kernel/vortex_test.hex create mode 100644 kernel/vx_include/.DS_Store create mode 100644 kernel/vx_include/vx_front.c create mode 100644 kernel/vx_include/vx_front.h create mode 100644 kernel/vx_main.c create mode 100644 kernel/vx_os/.DS_Store create mode 100644 kernel/vx_os/vx_back/vx_back.c create mode 100644 kernel/vx_os/vx_back/vx_back.h create mode 100644 kernel/vx_os/vx_back/vx_back.s create mode 100644 kernel/vx_os/vx_io/.DS_Store create mode 100644 kernel/vx_os/vx_io/vx_io.c create mode 100644 kernel/vx_os/vx_io/vx_io.h create mode 100644 kernel/vx_os/vx_io/vx_io.s create mode 100644 kernel/vx_os/vx_util/.DS_Store create mode 100644 kernel/vx_os/vx_util/queue.h create mode 100644 kernel/vx_os/vx_util/queue.s delete mode 100755 src/test_riscv.sh delete mode 100644 util/Makefile delete mode 100644 util/bin2mif.cpp diff --git a/.DS_Store b/.DS_Store index 32aaf96e3075d20a8728890b60cd6dace1b74f65..ea8a9c95db23c5f5cbf7c89e34565509b8c19181 100644 GIT binary patch delta 292 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 r`C@7!A6

mH)5Kqs0G?y%EeeOAj|+NO6W`q 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 literal 0 HcmV?d00001 diff --git a/src/harptool.cpp b/emulator/harptool.cpp similarity index 100% rename from src/harptool.cpp rename to emulator/harptool.cpp diff --git a/src/include/archdef.h b/emulator/include/archdef.h similarity index 100% rename from src/include/archdef.h rename to emulator/include/archdef.h diff --git a/src/include/args.h b/emulator/include/args.h similarity index 100% rename from src/include/args.h rename to emulator/include/args.h diff --git a/src/include/asm-tokens.h b/emulator/include/asm-tokens.h similarity index 100% rename from src/include/asm-tokens.h rename to emulator/include/asm-tokens.h diff --git a/src/include/core.h b/emulator/include/core.h similarity index 100% rename from src/include/core.h rename to emulator/include/core.h diff --git a/src/include/debug.h b/emulator/include/debug.h similarity index 100% rename from src/include/debug.h rename to emulator/include/debug.h diff --git a/src/include/enc.h b/emulator/include/enc.h similarity index 100% rename from src/include/enc.h rename to emulator/include/enc.h diff --git a/src/include/harpfloat.h b/emulator/include/harpfloat.h similarity index 100% rename from src/include/harpfloat.h rename to emulator/include/harpfloat.h diff --git a/src/include/help.h b/emulator/include/help.h similarity index 100% rename from src/include/help.h rename to emulator/include/help.h diff --git a/src/include/instruction.h b/emulator/include/instruction.h similarity index 100% rename from src/include/instruction.h rename to emulator/include/instruction.h diff --git a/src/include/mem.h b/emulator/include/mem.h similarity index 100% rename from src/include/mem.h rename to emulator/include/mem.h diff --git a/src/include/obj.h b/emulator/include/obj.h similarity index 100% rename from src/include/obj.h rename to emulator/include/obj.h diff --git a/src/include/qsim-harp.h b/emulator/include/qsim-harp.h similarity index 100% rename from src/include/qsim-harp.h rename to emulator/include/qsim-harp.h diff --git a/src/include/types.h b/emulator/include/types.h similarity index 100% rename from src/include/types.h rename to emulator/include/types.h diff --git a/src/include/util.h b/emulator/include/util.h similarity index 100% rename from src/include/util.h rename to emulator/include/util.h diff --git a/src/instruction.cpp b/emulator/instruction.cpp similarity index 100% rename from src/instruction.cpp rename to emulator/instruction.cpp diff --git a/emulator/libharplib.a b/emulator/libharplib.a new file mode 100644 index 0000000000000000000000000000000000000000..43d13af84a70b2e154c1669de331bc6810df4b13 GIT binary patch literal 149192 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℘K8-Jc1RDde`1%fOB!n$O3-^4PJSzw;$&|o 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%0A5; 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 literal 0 HcmV?d00001 diff --git a/emulator/libharplib.so b/emulator/libharplib.so new file mode 100755 index 0000000000000000000000000000000000000000..8bd6116db0d5b10ae0af092efd56befd6375682a GIT binary patch literal 125828 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

~1J;OjEpm1a!| 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

_%S#SnZNedUgW4V_mzYr3 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 WsV&}Ju_BXvEis*Bv=y&gPksT;3M$k9 literal 0 HcmV?d00001 diff --git a/src/mem.cpp b/emulator/mem.cpp similarity index 100% rename from src/mem.cpp rename to emulator/mem.cpp diff --git a/src/qsim-harp.cpp b/emulator/qsim-harp.cpp similarity index 100% rename from src/qsim-harp.cpp rename to emulator/qsim-harp.cpp diff --git a/src/results.txt b/emulator/results.txt similarity index 100% rename from src/results.txt rename to emulator/results.txt diff --git a/src/riscv_tests/C.ADD.elf.hex b/emulator/riscv_tests/C.ADD.elf.hex similarity index 100% rename from src/riscv_tests/C.ADD.elf.hex rename to emulator/riscv_tests/C.ADD.elf.hex diff --git a/src/riscv_tests/C.ADDI.elf.hex b/emulator/riscv_tests/C.ADDI.elf.hex similarity index 100% rename from src/riscv_tests/C.ADDI.elf.hex rename to emulator/riscv_tests/C.ADDI.elf.hex diff --git a/src/riscv_tests/C.ADDI16SP.elf.hex b/emulator/riscv_tests/C.ADDI16SP.elf.hex similarity index 100% rename from src/riscv_tests/C.ADDI16SP.elf.hex rename to emulator/riscv_tests/C.ADDI16SP.elf.hex diff --git a/src/riscv_tests/C.ADDI4SPN.elf.hex b/emulator/riscv_tests/C.ADDI4SPN.elf.hex similarity index 100% rename from src/riscv_tests/C.ADDI4SPN.elf.hex rename to emulator/riscv_tests/C.ADDI4SPN.elf.hex diff --git a/src/riscv_tests/C.AND.elf.hex b/emulator/riscv_tests/C.AND.elf.hex similarity index 100% rename from src/riscv_tests/C.AND.elf.hex rename to emulator/riscv_tests/C.AND.elf.hex diff --git a/src/riscv_tests/C.ANDI.elf.hex b/emulator/riscv_tests/C.ANDI.elf.hex similarity index 100% rename from src/riscv_tests/C.ANDI.elf.hex rename to emulator/riscv_tests/C.ANDI.elf.hex diff --git a/src/riscv_tests/C.BEQZ.elf.hex b/emulator/riscv_tests/C.BEQZ.elf.hex similarity index 100% rename from src/riscv_tests/C.BEQZ.elf.hex rename to emulator/riscv_tests/C.BEQZ.elf.hex diff --git a/src/riscv_tests/C.BNEZ.elf.hex b/emulator/riscv_tests/C.BNEZ.elf.hex similarity index 100% rename from src/riscv_tests/C.BNEZ.elf.hex rename to emulator/riscv_tests/C.BNEZ.elf.hex diff --git a/src/riscv_tests/C.J.elf.hex b/emulator/riscv_tests/C.J.elf.hex similarity index 100% rename from src/riscv_tests/C.J.elf.hex rename to emulator/riscv_tests/C.J.elf.hex diff --git a/src/riscv_tests/C.JAL.elf.hex b/emulator/riscv_tests/C.JAL.elf.hex similarity index 100% rename from src/riscv_tests/C.JAL.elf.hex rename to emulator/riscv_tests/C.JAL.elf.hex diff --git a/src/riscv_tests/C.JALR.elf.hex b/emulator/riscv_tests/C.JALR.elf.hex similarity index 100% rename from src/riscv_tests/C.JALR.elf.hex rename to emulator/riscv_tests/C.JALR.elf.hex diff --git a/src/riscv_tests/C.JR.elf.hex b/emulator/riscv_tests/C.JR.elf.hex similarity index 100% rename from src/riscv_tests/C.JR.elf.hex rename to emulator/riscv_tests/C.JR.elf.hex diff --git a/src/riscv_tests/C.LI.elf.hex b/emulator/riscv_tests/C.LI.elf.hex similarity index 100% rename from src/riscv_tests/C.LI.elf.hex rename to emulator/riscv_tests/C.LI.elf.hex diff --git a/src/riscv_tests/C.LUI.elf.hex b/emulator/riscv_tests/C.LUI.elf.hex similarity index 100% rename from src/riscv_tests/C.LUI.elf.hex rename to emulator/riscv_tests/C.LUI.elf.hex diff --git a/src/riscv_tests/C.LW.elf.hex b/emulator/riscv_tests/C.LW.elf.hex similarity index 100% rename from src/riscv_tests/C.LW.elf.hex rename to emulator/riscv_tests/C.LW.elf.hex diff --git a/src/riscv_tests/C.LWSP.elf.hex b/emulator/riscv_tests/C.LWSP.elf.hex similarity index 100% rename from src/riscv_tests/C.LWSP.elf.hex rename to emulator/riscv_tests/C.LWSP.elf.hex diff --git a/src/riscv_tests/C.MV.elf.hex b/emulator/riscv_tests/C.MV.elf.hex similarity index 100% rename from src/riscv_tests/C.MV.elf.hex rename to emulator/riscv_tests/C.MV.elf.hex diff --git a/src/riscv_tests/C.OR.elf.hex b/emulator/riscv_tests/C.OR.elf.hex similarity index 100% rename from src/riscv_tests/C.OR.elf.hex rename to emulator/riscv_tests/C.OR.elf.hex diff --git a/src/riscv_tests/C.SLLI.elf.hex b/emulator/riscv_tests/C.SLLI.elf.hex similarity index 100% rename from src/riscv_tests/C.SLLI.elf.hex rename to emulator/riscv_tests/C.SLLI.elf.hex diff --git a/src/riscv_tests/C.SRAI.elf.hex b/emulator/riscv_tests/C.SRAI.elf.hex similarity index 100% rename from src/riscv_tests/C.SRAI.elf.hex rename to emulator/riscv_tests/C.SRAI.elf.hex diff --git a/src/riscv_tests/C.SRLI.elf.hex b/emulator/riscv_tests/C.SRLI.elf.hex similarity index 100% rename from src/riscv_tests/C.SRLI.elf.hex rename to emulator/riscv_tests/C.SRLI.elf.hex diff --git a/src/riscv_tests/C.SUB.elf.hex b/emulator/riscv_tests/C.SUB.elf.hex similarity index 100% rename from src/riscv_tests/C.SUB.elf.hex rename to emulator/riscv_tests/C.SUB.elf.hex diff --git a/src/riscv_tests/C.SW.elf.hex b/emulator/riscv_tests/C.SW.elf.hex similarity index 100% rename from src/riscv_tests/C.SW.elf.hex rename to emulator/riscv_tests/C.SW.elf.hex diff --git a/src/riscv_tests/C.SWSP.elf.hex b/emulator/riscv_tests/C.SWSP.elf.hex similarity index 100% rename from src/riscv_tests/C.SWSP.elf.hex rename to emulator/riscv_tests/C.SWSP.elf.hex diff --git a/src/riscv_tests/C.XOR.elf.hex b/emulator/riscv_tests/C.XOR.elf.hex similarity index 100% rename from src/riscv_tests/C.XOR.elf.hex rename to emulator/riscv_tests/C.XOR.elf.hex diff --git a/src/riscv_tests/DIV.elf.hex b/emulator/riscv_tests/DIV.elf.hex similarity index 100% rename from src/riscv_tests/DIV.elf.hex rename to emulator/riscv_tests/DIV.elf.hex diff --git a/src/riscv_tests/DIVU.elf.hex b/emulator/riscv_tests/DIVU.elf.hex similarity index 100% rename from src/riscv_tests/DIVU.elf.hex rename to emulator/riscv_tests/DIVU.elf.hex diff --git a/src/riscv_tests/I-ADD-01.elf.hex b/emulator/riscv_tests/I-ADD-01.elf.hex similarity index 100% rename from src/riscv_tests/I-ADD-01.elf.hex rename to emulator/riscv_tests/I-ADD-01.elf.hex diff --git a/src/riscv_tests/I-ADDI-01.elf.hex b/emulator/riscv_tests/I-ADDI-01.elf.hex similarity index 100% rename from src/riscv_tests/I-ADDI-01.elf.hex rename to emulator/riscv_tests/I-ADDI-01.elf.hex diff --git a/src/riscv_tests/I-AND-01.elf.hex b/emulator/riscv_tests/I-AND-01.elf.hex similarity index 100% rename from src/riscv_tests/I-AND-01.elf.hex rename to emulator/riscv_tests/I-AND-01.elf.hex diff --git a/src/riscv_tests/I-ANDI-01.elf.hex b/emulator/riscv_tests/I-ANDI-01.elf.hex similarity index 100% rename from src/riscv_tests/I-ANDI-01.elf.hex rename to emulator/riscv_tests/I-ANDI-01.elf.hex diff --git a/src/riscv_tests/I-AUIPC-01.elf.hex b/emulator/riscv_tests/I-AUIPC-01.elf.hex similarity index 100% rename from src/riscv_tests/I-AUIPC-01.elf.hex rename to emulator/riscv_tests/I-AUIPC-01.elf.hex diff --git a/src/riscv_tests/I-BEQ-01.elf.hex b/emulator/riscv_tests/I-BEQ-01.elf.hex similarity index 100% rename from src/riscv_tests/I-BEQ-01.elf.hex rename to emulator/riscv_tests/I-BEQ-01.elf.hex diff --git a/src/riscv_tests/I-BGE-01.elf.hex b/emulator/riscv_tests/I-BGE-01.elf.hex similarity index 100% rename from src/riscv_tests/I-BGE-01.elf.hex rename to emulator/riscv_tests/I-BGE-01.elf.hex diff --git a/src/riscv_tests/I-BGEU-01.elf.hex b/emulator/riscv_tests/I-BGEU-01.elf.hex similarity index 100% rename from src/riscv_tests/I-BGEU-01.elf.hex rename to emulator/riscv_tests/I-BGEU-01.elf.hex diff --git a/src/riscv_tests/I-BLT-01.elf.hex b/emulator/riscv_tests/I-BLT-01.elf.hex similarity index 100% rename from src/riscv_tests/I-BLT-01.elf.hex rename to emulator/riscv_tests/I-BLT-01.elf.hex diff --git a/src/riscv_tests/I-BLTU-01.elf.hex b/emulator/riscv_tests/I-BLTU-01.elf.hex similarity index 100% rename from src/riscv_tests/I-BLTU-01.elf.hex rename to emulator/riscv_tests/I-BLTU-01.elf.hex diff --git a/src/riscv_tests/I-BNE-01.elf.hex b/emulator/riscv_tests/I-BNE-01.elf.hex similarity index 100% rename from src/riscv_tests/I-BNE-01.elf.hex rename to emulator/riscv_tests/I-BNE-01.elf.hex diff --git a/src/riscv_tests/I-CSRRC-01.elf.hex b/emulator/riscv_tests/I-CSRRC-01.elf.hex similarity index 100% rename from src/riscv_tests/I-CSRRC-01.elf.hex rename to emulator/riscv_tests/I-CSRRC-01.elf.hex diff --git a/src/riscv_tests/I-CSRRCI-01.elf.hex b/emulator/riscv_tests/I-CSRRCI-01.elf.hex similarity index 100% rename from src/riscv_tests/I-CSRRCI-01.elf.hex rename to emulator/riscv_tests/I-CSRRCI-01.elf.hex diff --git a/src/riscv_tests/I-CSRRS-01.elf.hex b/emulator/riscv_tests/I-CSRRS-01.elf.hex similarity index 100% rename from src/riscv_tests/I-CSRRS-01.elf.hex rename to emulator/riscv_tests/I-CSRRS-01.elf.hex diff --git a/src/riscv_tests/I-CSRRSI-01.elf.hex b/emulator/riscv_tests/I-CSRRSI-01.elf.hex similarity index 100% rename from src/riscv_tests/I-CSRRSI-01.elf.hex rename to emulator/riscv_tests/I-CSRRSI-01.elf.hex diff --git a/src/riscv_tests/I-CSRRW-01.elf.hex b/emulator/riscv_tests/I-CSRRW-01.elf.hex similarity index 100% rename from src/riscv_tests/I-CSRRW-01.elf.hex rename to emulator/riscv_tests/I-CSRRW-01.elf.hex diff --git a/src/riscv_tests/I-CSRRWI-01.elf.hex b/emulator/riscv_tests/I-CSRRWI-01.elf.hex similarity index 100% rename from src/riscv_tests/I-CSRRWI-01.elf.hex rename to emulator/riscv_tests/I-CSRRWI-01.elf.hex diff --git a/src/riscv_tests/I-DELAY_SLOTS-01.elf.hex b/emulator/riscv_tests/I-DELAY_SLOTS-01.elf.hex similarity index 100% rename from src/riscv_tests/I-DELAY_SLOTS-01.elf.hex rename to emulator/riscv_tests/I-DELAY_SLOTS-01.elf.hex diff --git a/src/riscv_tests/I-EBREAK-01.elf.hex b/emulator/riscv_tests/I-EBREAK-01.elf.hex similarity index 100% rename from src/riscv_tests/I-EBREAK-01.elf.hex rename to emulator/riscv_tests/I-EBREAK-01.elf.hex diff --git a/src/riscv_tests/I-ECALL-01.elf.hex b/emulator/riscv_tests/I-ECALL-01.elf.hex similarity index 100% rename from src/riscv_tests/I-ECALL-01.elf.hex rename to emulator/riscv_tests/I-ECALL-01.elf.hex diff --git a/src/riscv_tests/I-ENDIANESS-01.elf.hex b/emulator/riscv_tests/I-ENDIANESS-01.elf.hex similarity index 100% rename from src/riscv_tests/I-ENDIANESS-01.elf.hex rename to emulator/riscv_tests/I-ENDIANESS-01.elf.hex diff --git a/src/riscv_tests/I-FENCE.I-01.elf.hex b/emulator/riscv_tests/I-FENCE.I-01.elf.hex similarity index 100% rename from src/riscv_tests/I-FENCE.I-01.elf.hex rename to emulator/riscv_tests/I-FENCE.I-01.elf.hex diff --git a/src/riscv_tests/I-IO.elf.hex b/emulator/riscv_tests/I-IO.elf.hex similarity index 100% rename from src/riscv_tests/I-IO.elf.hex rename to emulator/riscv_tests/I-IO.elf.hex diff --git a/src/riscv_tests/I-JAL-01.elf.hex b/emulator/riscv_tests/I-JAL-01.elf.hex similarity index 100% rename from src/riscv_tests/I-JAL-01.elf.hex rename to emulator/riscv_tests/I-JAL-01.elf.hex diff --git a/src/riscv_tests/I-JALR-01.elf.hex b/emulator/riscv_tests/I-JALR-01.elf.hex similarity index 100% rename from src/riscv_tests/I-JALR-01.elf.hex rename to emulator/riscv_tests/I-JALR-01.elf.hex diff --git a/src/riscv_tests/I-LB-01.elf.hex b/emulator/riscv_tests/I-LB-01.elf.hex similarity index 100% rename from src/riscv_tests/I-LB-01.elf.hex rename to emulator/riscv_tests/I-LB-01.elf.hex diff --git a/src/riscv_tests/I-LBU-01.elf.hex b/emulator/riscv_tests/I-LBU-01.elf.hex similarity index 100% rename from src/riscv_tests/I-LBU-01.elf.hex rename to emulator/riscv_tests/I-LBU-01.elf.hex diff --git a/src/riscv_tests/I-LH-01.elf.hex b/emulator/riscv_tests/I-LH-01.elf.hex similarity index 100% rename from src/riscv_tests/I-LH-01.elf.hex rename to emulator/riscv_tests/I-LH-01.elf.hex diff --git a/src/riscv_tests/I-LHU-01.elf.hex b/emulator/riscv_tests/I-LHU-01.elf.hex similarity index 100% rename from src/riscv_tests/I-LHU-01.elf.hex rename to emulator/riscv_tests/I-LHU-01.elf.hex diff --git a/src/riscv_tests/I-LUI-01.elf.hex b/emulator/riscv_tests/I-LUI-01.elf.hex similarity index 100% rename from src/riscv_tests/I-LUI-01.elf.hex rename to emulator/riscv_tests/I-LUI-01.elf.hex diff --git a/src/riscv_tests/I-LW-01.elf.hex b/emulator/riscv_tests/I-LW-01.elf.hex similarity index 100% rename from src/riscv_tests/I-LW-01.elf.hex rename to emulator/riscv_tests/I-LW-01.elf.hex diff --git a/src/riscv_tests/I-MISALIGN_JMP-01.elf.hex b/emulator/riscv_tests/I-MISALIGN_JMP-01.elf.hex similarity index 100% rename from src/riscv_tests/I-MISALIGN_JMP-01.elf.hex rename to emulator/riscv_tests/I-MISALIGN_JMP-01.elf.hex diff --git a/src/riscv_tests/I-MISALIGN_LDST-01.elf.hex b/emulator/riscv_tests/I-MISALIGN_LDST-01.elf.hex similarity index 100% rename from src/riscv_tests/I-MISALIGN_LDST-01.elf.hex rename to emulator/riscv_tests/I-MISALIGN_LDST-01.elf.hex diff --git a/src/riscv_tests/I-NOP-01.elf.hex b/emulator/riscv_tests/I-NOP-01.elf.hex similarity index 100% rename from src/riscv_tests/I-NOP-01.elf.hex rename to emulator/riscv_tests/I-NOP-01.elf.hex diff --git a/src/riscv_tests/I-OR-01.elf.hex b/emulator/riscv_tests/I-OR-01.elf.hex similarity index 100% rename from src/riscv_tests/I-OR-01.elf.hex rename to emulator/riscv_tests/I-OR-01.elf.hex diff --git a/src/riscv_tests/I-ORI-01.elf.hex b/emulator/riscv_tests/I-ORI-01.elf.hex similarity index 100% rename from src/riscv_tests/I-ORI-01.elf.hex rename to emulator/riscv_tests/I-ORI-01.elf.hex diff --git a/src/riscv_tests/I-RF_size-01.elf.hex b/emulator/riscv_tests/I-RF_size-01.elf.hex similarity index 100% rename from src/riscv_tests/I-RF_size-01.elf.hex rename to emulator/riscv_tests/I-RF_size-01.elf.hex diff --git a/src/riscv_tests/I-RF_width-01.elf.hex b/emulator/riscv_tests/I-RF_width-01.elf.hex similarity index 100% rename from src/riscv_tests/I-RF_width-01.elf.hex rename to emulator/riscv_tests/I-RF_width-01.elf.hex diff --git a/src/riscv_tests/I-RF_x0-01.elf.hex b/emulator/riscv_tests/I-RF_x0-01.elf.hex similarity index 100% rename from src/riscv_tests/I-RF_x0-01.elf.hex rename to emulator/riscv_tests/I-RF_x0-01.elf.hex diff --git a/src/riscv_tests/I-SB-01.elf.hex b/emulator/riscv_tests/I-SB-01.elf.hex similarity index 100% rename from src/riscv_tests/I-SB-01.elf.hex rename to emulator/riscv_tests/I-SB-01.elf.hex diff --git a/src/riscv_tests/I-SH-01.elf.hex b/emulator/riscv_tests/I-SH-01.elf.hex similarity index 100% rename from src/riscv_tests/I-SH-01.elf.hex rename to emulator/riscv_tests/I-SH-01.elf.hex diff --git a/src/riscv_tests/I-SLL-01.elf.hex b/emulator/riscv_tests/I-SLL-01.elf.hex similarity index 100% rename from src/riscv_tests/I-SLL-01.elf.hex rename to emulator/riscv_tests/I-SLL-01.elf.hex diff --git a/src/riscv_tests/I-SLLI-01.elf.hex b/emulator/riscv_tests/I-SLLI-01.elf.hex similarity index 100% rename from src/riscv_tests/I-SLLI-01.elf.hex rename to emulator/riscv_tests/I-SLLI-01.elf.hex diff --git a/src/riscv_tests/I-SLT-01.elf.hex b/emulator/riscv_tests/I-SLT-01.elf.hex similarity index 100% rename from src/riscv_tests/I-SLT-01.elf.hex rename to emulator/riscv_tests/I-SLT-01.elf.hex diff --git a/src/riscv_tests/I-SLTI-01.elf.hex b/emulator/riscv_tests/I-SLTI-01.elf.hex similarity index 100% rename from src/riscv_tests/I-SLTI-01.elf.hex rename to emulator/riscv_tests/I-SLTI-01.elf.hex diff --git a/src/riscv_tests/I-SLTIU-01.elf.hex b/emulator/riscv_tests/I-SLTIU-01.elf.hex similarity index 100% rename from src/riscv_tests/I-SLTIU-01.elf.hex rename to emulator/riscv_tests/I-SLTIU-01.elf.hex diff --git a/src/riscv_tests/I-SLTU-01.elf.hex b/emulator/riscv_tests/I-SLTU-01.elf.hex similarity index 100% rename from src/riscv_tests/I-SLTU-01.elf.hex rename to emulator/riscv_tests/I-SLTU-01.elf.hex diff --git a/src/riscv_tests/I-SRA-01.elf.hex b/emulator/riscv_tests/I-SRA-01.elf.hex similarity index 100% rename from src/riscv_tests/I-SRA-01.elf.hex rename to emulator/riscv_tests/I-SRA-01.elf.hex diff --git a/src/riscv_tests/I-SRAI-01.elf.hex b/emulator/riscv_tests/I-SRAI-01.elf.hex similarity index 100% rename from src/riscv_tests/I-SRAI-01.elf.hex rename to emulator/riscv_tests/I-SRAI-01.elf.hex diff --git a/src/riscv_tests/I-SRL-01.elf.hex b/emulator/riscv_tests/I-SRL-01.elf.hex similarity index 100% rename from src/riscv_tests/I-SRL-01.elf.hex rename to emulator/riscv_tests/I-SRL-01.elf.hex diff --git a/src/riscv_tests/I-SRLI-01.elf.hex b/emulator/riscv_tests/I-SRLI-01.elf.hex similarity index 100% rename from src/riscv_tests/I-SRLI-01.elf.hex rename to emulator/riscv_tests/I-SRLI-01.elf.hex diff --git a/src/riscv_tests/I-SUB-01.elf.hex b/emulator/riscv_tests/I-SUB-01.elf.hex similarity index 100% rename from src/riscv_tests/I-SUB-01.elf.hex rename to emulator/riscv_tests/I-SUB-01.elf.hex diff --git a/src/riscv_tests/I-SW-01.elf.hex b/emulator/riscv_tests/I-SW-01.elf.hex similarity index 100% rename from src/riscv_tests/I-SW-01.elf.hex rename to emulator/riscv_tests/I-SW-01.elf.hex diff --git a/src/riscv_tests/I-XOR-01.elf.hex b/emulator/riscv_tests/I-XOR-01.elf.hex similarity index 100% rename from src/riscv_tests/I-XOR-01.elf.hex rename to emulator/riscv_tests/I-XOR-01.elf.hex diff --git a/src/riscv_tests/I-XORI-01.elf.hex b/emulator/riscv_tests/I-XORI-01.elf.hex similarity index 100% rename from src/riscv_tests/I-XORI-01.elf.hex rename to emulator/riscv_tests/I-XORI-01.elf.hex diff --git a/src/riscv_tests/MUL.elf.hex b/emulator/riscv_tests/MUL.elf.hex similarity index 100% rename from src/riscv_tests/MUL.elf.hex rename to emulator/riscv_tests/MUL.elf.hex diff --git a/src/riscv_tests/MULH.elf.hex b/emulator/riscv_tests/MULH.elf.hex similarity index 100% rename from src/riscv_tests/MULH.elf.hex rename to emulator/riscv_tests/MULH.elf.hex diff --git a/src/riscv_tests/MULHSU.elf.hex b/emulator/riscv_tests/MULHSU.elf.hex similarity index 100% rename from src/riscv_tests/MULHSU.elf.hex rename to emulator/riscv_tests/MULHSU.elf.hex diff --git a/src/riscv_tests/MULHU.elf.hex b/emulator/riscv_tests/MULHU.elf.hex similarity index 100% rename from src/riscv_tests/MULHU.elf.hex rename to emulator/riscv_tests/MULHU.elf.hex diff --git a/src/riscv_tests/REM.elf.hex b/emulator/riscv_tests/REM.elf.hex similarity index 100% rename from src/riscv_tests/REM.elf.hex rename to emulator/riscv_tests/REM.elf.hex diff --git a/src/riscv_tests/REMU.elf.hex b/emulator/riscv_tests/REMU.elf.hex similarity index 100% rename from src/riscv_tests/REMU.elf.hex rename to emulator/riscv_tests/REMU.elf.hex diff --git a/src/riscv_tests/debugPlugin.hex b/emulator/riscv_tests/debugPlugin.hex similarity index 100% rename from src/riscv_tests/debugPlugin.hex rename to emulator/riscv_tests/debugPlugin.hex diff --git a/src/riscv_tests/debugPluginExternal.hex b/emulator/riscv_tests/debugPluginExternal.hex similarity index 100% rename from src/riscv_tests/debugPluginExternal.hex rename to emulator/riscv_tests/debugPluginExternal.hex diff --git a/src/riscv_tests/dhrystoneO3.hex b/emulator/riscv_tests/dhrystoneO3.hex similarity index 100% rename from src/riscv_tests/dhrystoneO3.hex rename to emulator/riscv_tests/dhrystoneO3.hex diff --git a/src/riscv_tests/dhrystoneO3C.hex b/emulator/riscv_tests/dhrystoneO3C.hex similarity index 100% rename from src/riscv_tests/dhrystoneO3C.hex rename to emulator/riscv_tests/dhrystoneO3C.hex diff --git a/src/riscv_tests/dhrystoneO3M.hex b/emulator/riscv_tests/dhrystoneO3M.hex similarity index 100% rename from src/riscv_tests/dhrystoneO3M.hex rename to emulator/riscv_tests/dhrystoneO3M.hex diff --git a/src/riscv_tests/dhrystoneO3MC.hex b/emulator/riscv_tests/dhrystoneO3MC.hex similarity index 100% rename from src/riscv_tests/dhrystoneO3MC.hex rename to emulator/riscv_tests/dhrystoneO3MC.hex diff --git a/src/riscv_tests/freeRTOS_demo.hex b/emulator/riscv_tests/freeRTOS_demo.hex similarity index 100% rename from src/riscv_tests/freeRTOS_demo.hex rename to emulator/riscv_tests/freeRTOS_demo.hex diff --git a/src/riscv_tests/machineCsr.hex b/emulator/riscv_tests/machineCsr.hex similarity index 100% rename from src/riscv_tests/machineCsr.hex rename to emulator/riscv_tests/machineCsr.hex diff --git a/src/riscv_tests/machineCsrCompressed.hex b/emulator/riscv_tests/machineCsrCompressed.hex similarity index 100% rename from src/riscv_tests/machineCsrCompressed.hex rename to emulator/riscv_tests/machineCsrCompressed.hex diff --git a/src/riscv_tests/mmu.hex b/emulator/riscv_tests/mmu.hex similarity index 100% rename from src/riscv_tests/mmu.hex rename to emulator/riscv_tests/mmu.hex diff --git a/src/riscv_tests/rv32uc-p-rvc.hex b/emulator/riscv_tests/rv32uc-p-rvc.hex similarity index 100% rename from src/riscv_tests/rv32uc-p-rvc.hex rename to emulator/riscv_tests/rv32uc-p-rvc.hex diff --git a/src/riscv_tests/rv32ui-p-add.hex b/emulator/riscv_tests/rv32ui-p-add.hex similarity index 100% rename from src/riscv_tests/rv32ui-p-add.hex rename to emulator/riscv_tests/rv32ui-p-add.hex diff --git a/src/riscv_tests/rv32ui-p-addi.hex b/emulator/riscv_tests/rv32ui-p-addi.hex similarity index 100% rename from src/riscv_tests/rv32ui-p-addi.hex rename to emulator/riscv_tests/rv32ui-p-addi.hex diff --git a/src/riscv_tests/rv32ui-p-and.hex b/emulator/riscv_tests/rv32ui-p-and.hex similarity index 100% rename from src/riscv_tests/rv32ui-p-and.hex rename to emulator/riscv_tests/rv32ui-p-and.hex diff --git a/src/riscv_tests/rv32ui-p-andi.hex b/emulator/riscv_tests/rv32ui-p-andi.hex similarity index 100% rename from src/riscv_tests/rv32ui-p-andi.hex rename to emulator/riscv_tests/rv32ui-p-andi.hex diff --git a/src/riscv_tests/rv32ui-p-auipc.hex b/emulator/riscv_tests/rv32ui-p-auipc.hex similarity index 100% rename from src/riscv_tests/rv32ui-p-auipc.hex rename to emulator/riscv_tests/rv32ui-p-auipc.hex diff --git a/src/riscv_tests/rv32ui-p-beq.hex b/emulator/riscv_tests/rv32ui-p-beq.hex similarity index 100% rename from src/riscv_tests/rv32ui-p-beq.hex rename to emulator/riscv_tests/rv32ui-p-beq.hex diff --git a/src/riscv_tests/rv32ui-p-bge.hex b/emulator/riscv_tests/rv32ui-p-bge.hex similarity index 100% rename from src/riscv_tests/rv32ui-p-bge.hex rename to emulator/riscv_tests/rv32ui-p-bge.hex diff --git a/src/riscv_tests/rv32ui-p-bgeu.hex b/emulator/riscv_tests/rv32ui-p-bgeu.hex similarity index 100% rename from src/riscv_tests/rv32ui-p-bgeu.hex rename to emulator/riscv_tests/rv32ui-p-bgeu.hex diff --git a/src/riscv_tests/rv32ui-p-blt.hex b/emulator/riscv_tests/rv32ui-p-blt.hex similarity index 100% rename from src/riscv_tests/rv32ui-p-blt.hex rename to emulator/riscv_tests/rv32ui-p-blt.hex diff --git a/src/riscv_tests/rv32ui-p-bltu.hex b/emulator/riscv_tests/rv32ui-p-bltu.hex similarity index 100% rename from src/riscv_tests/rv32ui-p-bltu.hex rename to emulator/riscv_tests/rv32ui-p-bltu.hex diff --git a/src/riscv_tests/rv32ui-p-bne.hex b/emulator/riscv_tests/rv32ui-p-bne.hex similarity index 100% rename from src/riscv_tests/rv32ui-p-bne.hex rename to emulator/riscv_tests/rv32ui-p-bne.hex diff --git a/src/riscv_tests/rv32ui-p-fence_i.hex b/emulator/riscv_tests/rv32ui-p-fence_i.hex similarity index 100% rename from src/riscv_tests/rv32ui-p-fence_i.hex rename to emulator/riscv_tests/rv32ui-p-fence_i.hex diff --git a/src/riscv_tests/rv32ui-p-jal.hex b/emulator/riscv_tests/rv32ui-p-jal.hex similarity index 100% rename from src/riscv_tests/rv32ui-p-jal.hex rename to emulator/riscv_tests/rv32ui-p-jal.hex diff --git a/src/riscv_tests/rv32ui-p-jalr.hex b/emulator/riscv_tests/rv32ui-p-jalr.hex similarity index 100% rename from src/riscv_tests/rv32ui-p-jalr.hex rename to emulator/riscv_tests/rv32ui-p-jalr.hex diff --git a/src/riscv_tests/rv32ui-p-lb.hex b/emulator/riscv_tests/rv32ui-p-lb.hex similarity index 100% rename from src/riscv_tests/rv32ui-p-lb.hex rename to emulator/riscv_tests/rv32ui-p-lb.hex diff --git a/src/riscv_tests/rv32ui-p-lbu.hex b/emulator/riscv_tests/rv32ui-p-lbu.hex similarity index 100% rename from src/riscv_tests/rv32ui-p-lbu.hex rename to emulator/riscv_tests/rv32ui-p-lbu.hex diff --git a/src/riscv_tests/rv32ui-p-lh.hex b/emulator/riscv_tests/rv32ui-p-lh.hex similarity index 100% rename from src/riscv_tests/rv32ui-p-lh.hex rename to emulator/riscv_tests/rv32ui-p-lh.hex diff --git a/src/riscv_tests/rv32ui-p-lhu.hex b/emulator/riscv_tests/rv32ui-p-lhu.hex similarity index 100% rename from src/riscv_tests/rv32ui-p-lhu.hex rename to emulator/riscv_tests/rv32ui-p-lhu.hex diff --git a/src/riscv_tests/rv32ui-p-lui.hex b/emulator/riscv_tests/rv32ui-p-lui.hex similarity index 100% rename from src/riscv_tests/rv32ui-p-lui.hex rename to emulator/riscv_tests/rv32ui-p-lui.hex diff --git a/src/riscv_tests/rv32ui-p-lui.hex.hex b/emulator/riscv_tests/rv32ui-p-lui.hex.hex similarity index 100% rename from src/riscv_tests/rv32ui-p-lui.hex.hex rename to emulator/riscv_tests/rv32ui-p-lui.hex.hex diff --git a/src/riscv_tests/rv32ui-p-lw.hex b/emulator/riscv_tests/rv32ui-p-lw.hex similarity index 100% rename from src/riscv_tests/rv32ui-p-lw.hex rename to emulator/riscv_tests/rv32ui-p-lw.hex diff --git a/src/riscv_tests/rv32ui-p-or.hex b/emulator/riscv_tests/rv32ui-p-or.hex similarity index 100% rename from src/riscv_tests/rv32ui-p-or.hex rename to emulator/riscv_tests/rv32ui-p-or.hex diff --git a/src/riscv_tests/rv32ui-p-ori.hex b/emulator/riscv_tests/rv32ui-p-ori.hex similarity index 100% rename from src/riscv_tests/rv32ui-p-ori.hex rename to emulator/riscv_tests/rv32ui-p-ori.hex diff --git a/src/riscv_tests/rv32ui-p-sb.hex b/emulator/riscv_tests/rv32ui-p-sb.hex similarity index 100% rename from src/riscv_tests/rv32ui-p-sb.hex rename to emulator/riscv_tests/rv32ui-p-sb.hex diff --git a/src/riscv_tests/rv32ui-p-sh.hex b/emulator/riscv_tests/rv32ui-p-sh.hex similarity index 100% rename from src/riscv_tests/rv32ui-p-sh.hex rename to emulator/riscv_tests/rv32ui-p-sh.hex diff --git a/src/riscv_tests/rv32ui-p-simple.hex b/emulator/riscv_tests/rv32ui-p-simple.hex similarity index 100% rename from src/riscv_tests/rv32ui-p-simple.hex rename to emulator/riscv_tests/rv32ui-p-simple.hex diff --git a/src/riscv_tests/rv32ui-p-sll.hex b/emulator/riscv_tests/rv32ui-p-sll.hex similarity index 100% rename from src/riscv_tests/rv32ui-p-sll.hex rename to emulator/riscv_tests/rv32ui-p-sll.hex diff --git a/src/riscv_tests/rv32ui-p-slli.hex b/emulator/riscv_tests/rv32ui-p-slli.hex similarity index 100% rename from src/riscv_tests/rv32ui-p-slli.hex rename to emulator/riscv_tests/rv32ui-p-slli.hex diff --git a/src/riscv_tests/rv32ui-p-slt.hex b/emulator/riscv_tests/rv32ui-p-slt.hex similarity index 100% rename from src/riscv_tests/rv32ui-p-slt.hex rename to emulator/riscv_tests/rv32ui-p-slt.hex diff --git a/src/riscv_tests/rv32ui-p-slti.hex b/emulator/riscv_tests/rv32ui-p-slti.hex similarity index 100% rename from src/riscv_tests/rv32ui-p-slti.hex rename to emulator/riscv_tests/rv32ui-p-slti.hex diff --git a/src/riscv_tests/rv32ui-p-sltiu.hex b/emulator/riscv_tests/rv32ui-p-sltiu.hex similarity index 100% rename from src/riscv_tests/rv32ui-p-sltiu.hex rename to emulator/riscv_tests/rv32ui-p-sltiu.hex diff --git a/src/riscv_tests/rv32ui-p-sltu.hex b/emulator/riscv_tests/rv32ui-p-sltu.hex similarity index 100% rename from src/riscv_tests/rv32ui-p-sltu.hex rename to emulator/riscv_tests/rv32ui-p-sltu.hex diff --git a/src/riscv_tests/rv32ui-p-sra.hex b/emulator/riscv_tests/rv32ui-p-sra.hex similarity index 100% rename from src/riscv_tests/rv32ui-p-sra.hex rename to emulator/riscv_tests/rv32ui-p-sra.hex diff --git a/src/riscv_tests/rv32ui-p-srai.hex b/emulator/riscv_tests/rv32ui-p-srai.hex similarity index 100% rename from src/riscv_tests/rv32ui-p-srai.hex rename to emulator/riscv_tests/rv32ui-p-srai.hex diff --git a/src/riscv_tests/rv32ui-p-srl.hex b/emulator/riscv_tests/rv32ui-p-srl.hex similarity index 100% rename from src/riscv_tests/rv32ui-p-srl.hex rename to emulator/riscv_tests/rv32ui-p-srl.hex diff --git a/src/riscv_tests/rv32ui-p-srli.hex b/emulator/riscv_tests/rv32ui-p-srli.hex similarity index 100% rename from src/riscv_tests/rv32ui-p-srli.hex rename to emulator/riscv_tests/rv32ui-p-srli.hex diff --git a/src/riscv_tests/rv32ui-p-sub.hex b/emulator/riscv_tests/rv32ui-p-sub.hex similarity index 100% rename from src/riscv_tests/rv32ui-p-sub.hex rename to emulator/riscv_tests/rv32ui-p-sub.hex diff --git a/src/riscv_tests/rv32ui-p-sw.hex b/emulator/riscv_tests/rv32ui-p-sw.hex similarity index 100% rename from src/riscv_tests/rv32ui-p-sw.hex rename to emulator/riscv_tests/rv32ui-p-sw.hex diff --git a/src/riscv_tests/rv32ui-p-xor.hex b/emulator/riscv_tests/rv32ui-p-xor.hex similarity index 100% rename from src/riscv_tests/rv32ui-p-xor.hex rename to emulator/riscv_tests/rv32ui-p-xor.hex diff --git a/src/riscv_tests/rv32ui-p-xori.hex b/emulator/riscv_tests/rv32ui-p-xori.hex similarity index 100% rename from src/riscv_tests/rv32ui-p-xori.hex rename to emulator/riscv_tests/rv32ui-p-xori.hex diff --git a/src/riscv_tests/rv32um-p-div.hex b/emulator/riscv_tests/rv32um-p-div.hex similarity index 100% rename from src/riscv_tests/rv32um-p-div.hex rename to emulator/riscv_tests/rv32um-p-div.hex diff --git a/src/riscv_tests/rv32um-p-divu.hex b/emulator/riscv_tests/rv32um-p-divu.hex similarity index 100% rename from src/riscv_tests/rv32um-p-divu.hex rename to emulator/riscv_tests/rv32um-p-divu.hex diff --git a/src/riscv_tests/rv32um-p-mul.hex b/emulator/riscv_tests/rv32um-p-mul.hex similarity index 100% rename from src/riscv_tests/rv32um-p-mul.hex rename to emulator/riscv_tests/rv32um-p-mul.hex diff --git a/src/riscv_tests/rv32um-p-mulh.hex b/emulator/riscv_tests/rv32um-p-mulh.hex similarity index 100% rename from src/riscv_tests/rv32um-p-mulh.hex rename to emulator/riscv_tests/rv32um-p-mulh.hex diff --git a/src/riscv_tests/rv32um-p-mulhsu.hex b/emulator/riscv_tests/rv32um-p-mulhsu.hex similarity index 100% rename from src/riscv_tests/rv32um-p-mulhsu.hex rename to emulator/riscv_tests/rv32um-p-mulhsu.hex diff --git a/src/riscv_tests/rv32um-p-mulhu.hex b/emulator/riscv_tests/rv32um-p-mulhu.hex similarity index 100% rename from src/riscv_tests/rv32um-p-mulhu.hex rename to emulator/riscv_tests/rv32um-p-mulhu.hex diff --git a/src/riscv_tests/rv32um-p-rem.hex b/emulator/riscv_tests/rv32um-p-rem.hex similarity index 100% rename from src/riscv_tests/rv32um-p-rem.hex rename to emulator/riscv_tests/rv32um-p-rem.hex diff --git a/src/riscv_tests/rv32um-p-remu.hex b/emulator/riscv_tests/rv32um-p-remu.hex similarity index 100% rename from src/riscv_tests/rv32um-p-remu.hex rename to emulator/riscv_tests/rv32um-p-remu.hex diff --git a/src/riscv_tests/testA.hex b/emulator/riscv_tests/testA.hex similarity index 100% rename from src/riscv_tests/testA.hex rename to emulator/riscv_tests/testA.hex diff --git a/src/test.sh b/emulator/test.sh similarity index 100% rename from src/test.sh rename to emulator/test.sh diff --git a/emulator/test_riscv.sh b/emulator/test_riscv.sh new file mode 100755 index 00000000..96a7a446 --- /dev/null +++ b/emulator/test_riscv.sh @@ -0,0 +1,4 @@ +echo start > results.txt + +echo ../kernel/vortex_test.hex +./harptool -E -a rv32i --core ../kernel/vortex_test.hex -s -b diff --git a/src/util.cpp b/emulator/util.cpp similarity index 100% rename from src/util.cpp rename to emulator/util.cpp diff --git a/src/vortex_software/.DS_Store b/emulator/vortex_software/.DS_Store similarity index 100% rename from src/vortex_software/.DS_Store rename to emulator/vortex_software/.DS_Store diff --git a/src/vortex_software/Makefile b/emulator/vortex_software/Makefile similarity index 100% rename from src/vortex_software/Makefile rename to emulator/vortex_software/Makefile diff --git a/src/vortex_software/linker.ld b/emulator/vortex_software/linker.ld similarity index 100% rename from src/vortex_software/linker.ld rename to emulator/vortex_software/linker.ld diff --git a/src/vortex_software/vortex_test.dump b/emulator/vortex_software/vortex_test.dump similarity index 100% rename from src/vortex_software/vortex_test.dump rename to emulator/vortex_software/vortex_test.dump diff --git a/src/vortex_software/vortex_test.elf b/emulator/vortex_software/vortex_test.elf similarity index 100% rename from src/vortex_software/vortex_test.elf rename to emulator/vortex_software/vortex_test.elf diff --git a/src/vortex_software/vortex_test.hex b/emulator/vortex_software/vortex_test.hex similarity index 100% rename from src/vortex_software/vortex_test.hex rename to emulator/vortex_software/vortex_test.hex diff --git a/src/vortex_software/vx_include/.DS_Store b/emulator/vortex_software/vx_include/.DS_Store similarity index 100% rename from src/vortex_software/vx_include/.DS_Store rename to emulator/vortex_software/vx_include/.DS_Store diff --git a/src/vortex_software/vx_include/vx_front.c b/emulator/vortex_software/vx_include/vx_front.c similarity index 100% rename from src/vortex_software/vx_include/vx_front.c rename to emulator/vortex_software/vx_include/vx_front.c diff --git a/src/vortex_software/vx_include/vx_front.h b/emulator/vortex_software/vx_include/vx_front.h similarity index 100% rename from src/vortex_software/vx_include/vx_front.h rename to emulator/vortex_software/vx_include/vx_front.h diff --git a/src/vortex_software/vx_main.c b/emulator/vortex_software/vx_main.c similarity index 100% rename from src/vortex_software/vx_main.c rename to emulator/vortex_software/vx_main.c diff --git a/src/vortex_software/vx_os/.DS_Store b/emulator/vortex_software/vx_os/.DS_Store similarity index 100% rename from src/vortex_software/vx_os/.DS_Store rename to emulator/vortex_software/vx_os/.DS_Store diff --git a/src/vortex_software/vx_os/vx_back/vx_back.c b/emulator/vortex_software/vx_os/vx_back/vx_back.c similarity index 100% rename from src/vortex_software/vx_os/vx_back/vx_back.c rename to emulator/vortex_software/vx_os/vx_back/vx_back.c diff --git a/src/vortex_software/vx_os/vx_back/vx_back.h b/emulator/vortex_software/vx_os/vx_back/vx_back.h similarity index 100% rename from src/vortex_software/vx_os/vx_back/vx_back.h rename to emulator/vortex_software/vx_os/vx_back/vx_back.h diff --git a/src/vortex_software/vx_os/vx_back/vx_back.s b/emulator/vortex_software/vx_os/vx_back/vx_back.s similarity index 100% rename from src/vortex_software/vx_os/vx_back/vx_back.s rename to emulator/vortex_software/vx_os/vx_back/vx_back.s diff --git a/src/vortex_software/vx_os/vx_io/.DS_Store b/emulator/vortex_software/vx_os/vx_io/.DS_Store similarity index 100% rename from src/vortex_software/vx_os/vx_io/.DS_Store rename to emulator/vortex_software/vx_os/vx_io/.DS_Store diff --git a/src/vortex_software/vx_os/vx_io/vx_io.c b/emulator/vortex_software/vx_os/vx_io/vx_io.c similarity index 100% rename from src/vortex_software/vx_os/vx_io/vx_io.c rename to emulator/vortex_software/vx_os/vx_io/vx_io.c diff --git a/src/vortex_software/vx_os/vx_io/vx_io.h b/emulator/vortex_software/vx_os/vx_io/vx_io.h similarity index 100% rename from src/vortex_software/vx_os/vx_io/vx_io.h rename to emulator/vortex_software/vx_os/vx_io/vx_io.h diff --git a/src/vortex_software/vx_os/vx_io/vx_io.s b/emulator/vortex_software/vx_os/vx_io/vx_io.s similarity index 100% rename from src/vortex_software/vx_os/vx_io/vx_io.s rename to emulator/vortex_software/vx_os/vx_io/vx_io.s diff --git a/src/vortex_software/vx_os/vx_util/.DS_Store b/emulator/vortex_software/vx_os/vx_util/.DS_Store similarity index 100% rename from src/vortex_software/vx_os/vx_util/.DS_Store rename to emulator/vortex_software/vx_os/vx_util/.DS_Store diff --git a/src/vortex_software/vx_os/vx_util/queue.h b/emulator/vortex_software/vx_os/vx_util/queue.h similarity index 100% rename from src/vortex_software/vx_os/vx_util/queue.h rename to emulator/vortex_software/vx_os/vx_util/queue.h diff --git a/src/vortex_software/vx_os/vx_util/queue.s b/emulator/vortex_software/vx_os/vx_util/queue.s similarity index 100% rename from src/vortex_software/vx_os/vx_util/queue.s rename to emulator/vortex_software/vx_os/vx_util/queue.s diff --git a/kernel/.DS_Store b/kernel/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..8f25690de3fdd476ee89fc33d976528435b6a321 GIT binary patch literal 6148 zcmeHK&u-H&9R9iOz$rqj5Yl$c1qo?W)lS-&geG;RJM@5r6a)uAUDBj$L=sm`x(-TF zFFXXi0gu6f1G{kKL3jZ8`A;ED6KN-ez(2|U9Q*rX`?F%l06^Lkw+T=K0E&rYrHWZj z@OGZoqNHkWArkQp55`c30Nie{#?}?u0qwxw<^cb84g6w#h~OopzF*dN0_I>VZVjcc zhIQ=qYS?W=fH4pNU(Vhn&7Ny^;tMV?lN+DA?tLM z_w@4fC2g3Wj!{s+b+61F4cGcN)Z9W`O+LRm^jF=0``B}Oc%)|Z z#Tf;DoHQEWNU2=exOSb=Dy`nEzOaUDY9)3uiQD%08Gm|YCqqY-A2SyGD%;Kz-<$So zw;!-5vHi#!3$gEdNO}I$k6bowvq|K};yspZpwys7ueLp#?d|WH&4YXMU31nv*vE&% zy~Fw3pj&sEN8Qu#)$7@t`P=t$jR+oWA~qE+;R6;@X5=hxsx`f&b)$E(BbRiA@p~cj z89B?B(w|%7C}7bUj%qpL(L2816m%dh zi8|K~Xa`muD9gthKmSjP@BgbJ{iGex4*XLNkV?nuv~f!6Y+aiiKWj})r vortex_test.dump + +HEX: ELF + $(CPY) -O ihex vortex_test.elf vortex_test.hex + +ELF: + $(COMP) $(CC_FLAGS) $(VX_LIB) $(VX_IO) $(VX_FR) vx_main.c -o vortex_test.elf diff --git a/kernel/linker.ld b/kernel/linker.ld new file mode 100644 index 00000000..8fbf7896 --- /dev/null +++ b/kernel/linker.ld @@ -0,0 +1,48 @@ +/* ---- Original Script: /opt/riscv32i/riscv32-unknown-elf/lib/ldscripts/elf32lriscv.x ---- */ +/* Default linker script, for normal executables */ +/* Copyright (C) 2014-2017 Free Software Foundation, Inc. + Copying and distribution of this script, with or without modification, + are permitted in any medium without royalty provided the copyright + notice and this notice are preserved. */ +OUTPUT_FORMAT("elf32-littleriscv", "elf32-littleriscv", + "elf32-littleriscv") +OUTPUT_ARCH(riscv) +ENTRY(_start) +SECTIONS +{ + . = 0x80000000; + .text : + { + *(.text) + *(.text.unlikely .text.*_unlikely .text.unlikely.*) + *(.text.exit .text.exit.*) + *(.text.startup .text.startup.*) + *(.text.hot .text.hot.*) + *(.stub .text.* .gnu.linkonce.t.*) + /* .gnu.warning sections are handled specially by elf32.em. */ + *(.gnu.warning) + } + .init : + { + KEEP (*(SORT_NONE(.init))) + } + .plt : { *(.plt) } + .iplt : { *(.iplt) } + .fini : + { + KEEP (*(SORT_NONE(.fini))) + } + PROVIDE (__etext = .); + PROVIDE (_etext = .); + PROVIDE (etext = .); + PROVIDE (_edata = .); + PROVIDE (_end = .); + PROVIDE (__global_pointer$ = .); + + . = 0x81000000; + .rodata : { *(.rodata .rodata.* .gnu.linkonce.r.*) } + .rodata1 : { *(.rodata1) } + . = 0x82000000; + .comment : { *(.comment) } + +} diff --git a/kernel/vortex_test.dump b/kernel/vortex_test.dump new file mode 100644 index 00000000..672a1437 --- /dev/null +++ b/kernel/vortex_test.dump @@ -0,0 +1,2067 @@ + +vortex_test.elf: file format elf32-littleriscv + + +Disassembly of section .text: + +80000000 <_start>: +80000000: 00400513 li a0,4 +80000004: 02051073 csrw 0x20,a0 +80000008: 00800513 li a0,8 +8000000c: 02151073 csrw 0x21,a0 +80000010: f1401073 csrw mhartid,zero +80000014: 30101073 csrw misa,zero +80000018: 7ffff137 lui sp,0x7ffff +8000001c: 198000ef jal ra,800001b4 +80000020: 6dc010ef jal ra,800016fc

+80000024: 00000073 ecall + +80000028 : +80000028: 00068b93 mv s7,a3 +8000002c: 00070d13 mv s10,a4 +80000030: 00010f13 mv t5,sp +80000034: 00050393 mv t2,a0 + +80000038 : +80000038: 00100513 li a0,1 + +8000003c : +8000003c: 00755c63 bge a0,t2,80000054 + +80000040 : +80000040: 80010113 addi sp,sp,-2048 # 7fffe800 +80000044: 00050313 mv t1,a0 +80000048: 0003506b 0x3506b + +8000004c : +8000004c: 00150513 addi a0,a0,1 +80000050: fedff06f j 8000003c + +80000054 : +80000054: 000f0113 mv sp,t5 +80000058: 00000513 li a0,0 +8000005c: 00060f93 mv t6,a2 +80000060: 00038d93 mv s11,t2 +80000064: 01bfe0eb 0x1bfe0eb +80000068: 00000517 auipc a0,0x0 +8000006c: 1b050513 addi a0,a0,432 # 80000218 +80000070: 0005406b 0x5406b + +80000074 : +80000074: 00000317 auipc t1,0x0 +80000078: fb430313 addi t1,t1,-76 # 80000028 +8000007c: 0003006b 0x3006b +80000080: 00008067 ret + +80000084 : +80000084: 01000217 auipc tp,0x1000 +80000088: 26020213 addi tp,tp,608 # 810002e4 +8000008c: 00022023 sw zero,0(tp) # 0 +80000090: 00122223 sw ra,4(tp) # 4 +80000094: 00222423 sw sp,8(tp) # 8 +80000098: 00322623 sw gp,12(tp) # c +8000009c: 00422823 sw tp,16(tp) # 10 +800000a0: 00522a23 sw t0,20(tp) # 14 +800000a4: 00622c23 sw t1,24(tp) # 18 +800000a8: 00722e23 sw t2,28(tp) # 1c +800000ac: 02822023 sw s0,32(tp) # 20 +800000b0: 02922223 sw s1,36(tp) # 24 +800000b4: 02a22423 sw a0,40(tp) # 28 +800000b8: 02b22623 sw a1,44(tp) # 2c +800000bc: 02c22823 sw a2,48(tp) # 30 +800000c0: 02d22a23 sw a3,52(tp) # 34 +800000c4: 02e22c23 sw a4,56(tp) # 38 +800000c8: 02f22e23 sw a5,60(tp) # 3c +800000cc: 05022023 sw a6,64(tp) # 40 +800000d0: 05122223 sw a7,68(tp) # 44 +800000d4: 05222423 sw s2,72(tp) # 48 +800000d8: 05322623 sw s3,76(tp) # 4c +800000dc: 05422823 sw s4,80(tp) # 50 +800000e0: 05522a23 sw s5,84(tp) # 54 +800000e4: 05622c23 sw s6,88(tp) # 58 +800000e8: 05722e23 sw s7,92(tp) # 5c +800000ec: 07822023 sw s8,96(tp) # 60 +800000f0: 07922223 sw s9,100(tp) # 64 +800000f4: 07a22423 sw s10,104(tp) # 68 +800000f8: 07b22623 sw s11,108(tp) # 6c +800000fc: 07c22823 sw t3,112(tp) # 70 +80000100: 07d22a23 sw t4,116(tp) # 74 +80000104: 07e22c23 sw t5,120(tp) # 78 +80000108: 07f22e23 sw t6,124(tp) # 7c +8000010c: 00100213 li tp,1 +80000110: 00008067 ret + +80000114 : +80000114: 01000217 auipc tp,0x1000 +80000118: 1d020213 addi tp,tp,464 # 810002e4 +8000011c: 00022003 lw zero,0(tp) # 0 +80000120: 00422083 lw ra,4(tp) # 4 +80000124: 00822103 lw sp,8(tp) # 8 +80000128: 00c22183 lw gp,12(tp) # c +8000012c: 01022203 lw tp,16(tp) # 10 +80000130: 01422283 lw t0,20(tp) # 14 +80000134: 01822303 lw t1,24(tp) # 18 +80000138: 01c22383 lw t2,28(tp) # 1c +8000013c: 02022403 lw s0,32(tp) # 20 +80000140: 02422483 lw s1,36(tp) # 24 +80000144: 02822503 lw a0,40(tp) # 28 +80000148: 02c22583 lw a1,44(tp) # 2c +8000014c: 03022603 lw a2,48(tp) # 30 +80000150: 03422683 lw a3,52(tp) # 34 +80000154: 03822703 lw a4,56(tp) # 38 +80000158: 03c22783 lw a5,60(tp) # 3c +8000015c: 04022803 lw a6,64(tp) # 40 +80000160: 04422883 lw a7,68(tp) # 44 +80000164: 04822903 lw s2,72(tp) # 48 +80000168: 04c22983 lw s3,76(tp) # 4c +8000016c: 05022a03 lw s4,80(tp) # 50 +80000170: 05422a83 lw s5,84(tp) # 54 +80000174: 05822b03 lw s6,88(tp) # 58 +80000178: 05c22b83 lw s7,92(tp) # 5c +8000017c: 06022c03 lw s8,96(tp) # 60 +80000180: 06422c83 lw s9,100(tp) # 64 +80000184: 06822d03 lw s10,104(tp) # 68 +80000188: 06c22d83 lw s11,108(tp) # 6c +8000018c: 07022e03 lw t3,112(tp) # 70 +80000190: 07422e83 lw t4,116(tp) # 74 +80000194: 07822f03 lw t5,120(tp) # 78 +80000198: 07c22f83 lw t6,124(tp) # 7c +8000019c: 00000213 li tp,0 +800001a0: 00008067 ret + +800001a4 : +800001a4: 02002573 csrr a0,0x20 +800001a8: 00008067 ret + +800001ac : +800001ac: 02102573 csrr a0,0x21 +800001b0: 00008067 ret + +800001b4 : +800001b4: fe010113 addi sp,sp,-32 +800001b8: 00112e23 sw ra,28(sp) +800001bc: 00812c23 sw s0,24(sp) +800001c0: 02010413 addi s0,sp,32 +800001c4: fe042623 sw zero,-20(s0) +800001c8: 0300006f j 800001f8 +800001cc: fec42703 lw a4,-20(s0) +800001d0: 4c400793 li a5,1220 +800001d4: 02f70733 mul a4,a4,a5 +800001d8: 810007b7 lui a5,0x81000 +800001dc: 36478793 addi a5,a5,868 # 81000364 +800001e0: 00f707b3 add a5,a4,a5 +800001e4: 00078513 mv a0,a5 +800001e8: 404000ef jal ra,800005ec +800001ec: fec42783 lw a5,-20(s0) +800001f0: 00178793 addi a5,a5,1 +800001f4: fef42623 sw a5,-20(s0) +800001f8: fec42703 lw a4,-20(s0) +800001fc: 00700793 li a5,7 +80000200: fce7d6e3 bge a5,a4,800001cc +80000204: 00000013 nop +80000208: 01c12083 lw ra,28(sp) +8000020c: 01812403 lw s0,24(sp) +80000210: 02010113 addi sp,sp,32 +80000214: 00008067 ret + +80000218 : +80000218: fd010113 addi sp,sp,-48 +8000021c: 02112623 sw ra,44(sp) +80000220: 02812423 sw s0,40(sp) +80000224: 03a12223 sw s10,36(sp) +80000228: 03010413 addi s0,sp,48 +8000022c: 000d0713 mv a4,s10 +80000230: 4c400793 li a5,1220 +80000234: 02f70733 mul a4,a4,a5 +80000238: 810007b7 lui a5,0x81000 +8000023c: 36478793 addi a5,a5,868 # 81000364 +80000240: 00f707b3 add a5,a4,a5 +80000244: 00078513 mv a0,a5 +80000248: 4b8000ef jal ra,80000700 +8000024c: 00050793 mv a5,a0 +80000250: 02078a63 beqz a5,80000284 +80000254: 000d0713 mv a4,s10 +80000258: 810007b7 lui a5,0x81000 +8000025c: 00271713 slli a4,a4,0x2 +80000260: 2c478793 addi a5,a5,708 # 810002c4 +80000264: 00f707b3 add a5,a4,a5 +80000268: 00100713 li a4,1 +8000026c: 00e7a023 sw a4,0(a5) +80000270: 000d0793 mv a5,s10 +80000274: 00079663 bnez a5,80000280 +80000278: e9dff0ef jal ra,80000114 +8000027c: 0580006f j 800002d4 +80000280: 00000073 ecall +80000284: 000d0713 mv a4,s10 +80000288: 4c400793 li a5,1220 +8000028c: 02f70733 mul a4,a4,a5 +80000290: 810007b7 lui a5,0x81000 +80000294: 36478793 addi a5,a5,868 # 81000364 +80000298: 00f707b3 add a5,a4,a5 +8000029c: fd840713 addi a4,s0,-40 +800002a0: 00070593 mv a1,a4 +800002a4: 00078513 mv a0,a5 +800002a8: 3d0000ef jal ra,80000678 +800002ac: fe042783 lw a5,-32(s0) +800002b0: 00078113 mv sp,a5 +800002b4: fdc42783 lw a5,-36(s0) +800002b8: fd842583 lw a1,-40(s0) +800002bc: fe442603 lw a2,-28(s0) +800002c0: fe842683 lw a3,-24(s0) +800002c4: fec42703 lw a4,-20(s0) +800002c8: 00078513 mv a0,a5 +800002cc: d5dff0ef jal ra,80000028 +800002d0: 00000073 ecall +800002d4: 02c12083 lw ra,44(sp) +800002d8: 02812403 lw s0,40(sp) +800002dc: 02412d03 lw s10,36(sp) +800002e0: 03010113 addi sp,sp,48 +800002e4: 00008067 ret + +800002e8 : +800002e8: fb010113 addi sp,sp,-80 +800002ec: 04112623 sw ra,76(sp) +800002f0: 04812423 sw s0,72(sp) +800002f4: 05010413 addi s0,sp,80 +800002f8: eadff0ef jal ra,800001a4 +800002fc: fea42423 sw a0,-24(s0) +80000300: 00010993 mv s3,sp +80000304: 00100793 li a5,1 +80000308: fef42623 sw a5,-20(s0) +8000030c: 0840006f j 80000390 +80000310: fec42703 lw a4,-20(s0) +80000314: 4c400793 li a5,1220 +80000318: 02f70733 mul a4,a4,a5 +8000031c: 810007b7 lui a5,0x81000 +80000320: 36478793 addi a5,a5,868 # 81000364 +80000324: 00f707b3 add a5,a4,a5 +80000328: 00078513 mv a0,a5 +8000032c: 3d4000ef jal ra,80000700 +80000330: 00050793 mv a5,a0 +80000334: 04079863 bnez a5,80000384 +80000338: fec42703 lw a4,-20(s0) +8000033c: 4c400793 li a5,1220 +80000340: 02f70733 mul a4,a4,a5 +80000344: 810007b7 lui a5,0x81000 +80000348: 36478793 addi a5,a5,868 # 81000364 +8000034c: 00f707b3 add a5,a4,a5 +80000350: fd040713 addi a4,s0,-48 +80000354: 00070593 mv a1,a4 +80000358: 00078513 mv a0,a5 +8000035c: 31c000ef jal ra,80000678 +80000360: fd842783 lw a5,-40(s0) +80000364: 00078113 mv sp,a5 +80000368: fd442783 lw a5,-44(s0) +8000036c: fd042583 lw a1,-48(s0) +80000370: fdc42603 lw a2,-36(s0) +80000374: fe042683 lw a3,-32(s0) +80000378: fe442703 lw a4,-28(s0) +8000037c: 00078513 mv a0,a5 +80000380: cf5ff0ef jal ra,80000074 +80000384: fec42783 lw a5,-20(s0) +80000388: 00178793 addi a5,a5,1 +8000038c: fef42623 sw a5,-20(s0) +80000390: fec42783 lw a5,-20(s0) +80000394: fe842703 lw a4,-24(s0) +80000398: f6e7ece3 bltu a5,a4,80000310 +8000039c: 00098113 mv sp,s3 +800003a0: ce5ff0ef jal ra,80000084 +800003a4: 00020793 mv a5,tp +800003a8: 04078863 beqz a5,800003f8 +800003ac: 810007b7 lui a5,0x81000 +800003b0: 36478513 addi a0,a5,868 # 81000364 +800003b4: 34c000ef jal ra,80000700 +800003b8: 00050793 mv a5,a0 +800003bc: 02079e63 bnez a5,800003f8 +800003c0: fb840793 addi a5,s0,-72 +800003c4: 00078593 mv a1,a5 +800003c8: 810007b7 lui a5,0x81000 +800003cc: 36478513 addi a0,a5,868 # 81000364 +800003d0: 2a8000ef jal ra,80000678 +800003d4: fc042783 lw a5,-64(s0) +800003d8: 00078113 mv sp,a5 +800003dc: fbc42783 lw a5,-68(s0) +800003e0: fb842583 lw a1,-72(s0) +800003e4: fc442603 lw a2,-60(s0) +800003e8: fc842683 lw a3,-56(s0) +800003ec: fcc42703 lw a4,-52(s0) +800003f0: 00078513 mv a0,a5 +800003f4: c35ff0ef jal ra,80000028 +800003f8: 00000013 nop +800003fc: 04c12083 lw ra,76(sp) +80000400: 04812403 lw s0,72(sp) +80000404: 05010113 addi sp,sp,80 +80000408: 00008067 ret + +8000040c : +8000040c: fb010113 addi sp,sp,-80 +80000410: 04112623 sw ra,76(sp) +80000414: 04812423 sw s0,72(sp) +80000418: 05010413 addi s0,sp,80 +8000041c: faa42e23 sw a0,-68(s0) +80000420: fab42c23 sw a1,-72(s0) +80000424: fac42a23 sw a2,-76(s0) +80000428: fad42823 sw a3,-80(s0) +8000042c: d89ff0ef jal ra,800001b4 +80000430: d75ff0ef jal ra,800001a4 +80000434: fea42223 sw a0,-28(s0) +80000438: 00010913 mv s2,sp +8000043c: fe042623 sw zero,-20(s0) +80000440: fe042423 sw zero,-24(s0) +80000444: 08c0006f j 800004d0 +80000448: ffff09b7 lui s3,0xffff0 +8000044c: 01310133 add sp,sp,s3 +80000450: fe842783 lw a5,-24(s0) +80000454: fcf42623 sw a5,-52(s0) +80000458: fb842783 lw a5,-72(s0) +8000045c: fcf42823 sw a5,-48(s0) +80000460: 00010793 mv a5,sp +80000464: fcf42a23 sw a5,-44(s0) +80000468: fb442783 lw a5,-76(s0) +8000046c: fcf42c23 sw a5,-40(s0) +80000470: fb042783 lw a5,-80(s0) +80000474: fcf42e23 sw a5,-36(s0) +80000478: fec42783 lw a5,-20(s0) +8000047c: fef42023 sw a5,-32(s0) +80000480: fec42703 lw a4,-20(s0) +80000484: 4c400793 li a5,1220 +80000488: 02f70733 mul a4,a4,a5 +8000048c: 810007b7 lui a5,0x81000 +80000490: 36478793 addi a5,a5,868 # 81000364 +80000494: 00f707b3 add a5,a4,a5 +80000498: fcc40713 addi a4,s0,-52 +8000049c: 00070593 mv a1,a4 +800004a0: 00078513 mv a0,a5 +800004a4: 16c000ef jal ra,80000610 +800004a8: fec42783 lw a5,-20(s0) +800004ac: 00178793 addi a5,a5,1 +800004b0: fef42623 sw a5,-20(s0) +800004b4: fec42783 lw a5,-20(s0) +800004b8: fe442703 lw a4,-28(s0) +800004bc: 00e7e463 bltu a5,a4,800004c4 +800004c0: fe042623 sw zero,-20(s0) +800004c4: fe842783 lw a5,-24(s0) +800004c8: 00178793 addi a5,a5,1 +800004cc: fef42423 sw a5,-24(s0) +800004d0: fe842703 lw a4,-24(s0) +800004d4: fbc42783 lw a5,-68(s0) +800004d8: f6f768e3 bltu a4,a5,80000448 +800004dc: 00090113 mv sp,s2 +800004e0: e09ff0ef jal ra,800002e8 +800004e4: 00000013 nop +800004e8: 04c12083 lw ra,76(sp) +800004ec: 04812403 lw s0,72(sp) +800004f0: 05010113 addi sp,sp,80 +800004f4: 00008067 ret + +800004f8 : +800004f8: fd010113 addi sp,sp,-48 +800004fc: 02112623 sw ra,44(sp) +80000500: 02812423 sw s0,40(sp) +80000504: 03010413 addi s0,sp,48 +80000508: fca42e23 sw a0,-36(s0) +8000050c: c99ff0ef jal ra,800001a4 +80000510: fea42023 sw a0,-32(s0) +80000514: fe042623 sw zero,-20(s0) +80000518: 0540006f j 8000056c +8000051c: fe042623 sw zero,-20(s0) +80000520: fe042423 sw zero,-24(s0) +80000524: 03c0006f j 80000560 +80000528: 810007b7 lui a5,0x81000 +8000052c: fe842703 lw a4,-24(s0) +80000530: 00271713 slli a4,a4,0x2 +80000534: 2c478793 addi a5,a5,708 # 810002c4 +80000538: 00f707b3 add a5,a4,a5 +8000053c: 0007a703 lw a4,0(a5) +80000540: 00100793 li a5,1 +80000544: 00f71863 bne a4,a5,80000554 +80000548: fec42783 lw a5,-20(s0) +8000054c: 00178793 addi a5,a5,1 +80000550: fef42623 sw a5,-20(s0) +80000554: fe842783 lw a5,-24(s0) +80000558: 00178793 addi a5,a5,1 +8000055c: fef42423 sw a5,-24(s0) +80000560: fe842783 lw a5,-24(s0) +80000564: fe042703 lw a4,-32(s0) +80000568: fce7e0e3 bltu a5,a4,80000528 +8000056c: fec42703 lw a4,-20(s0) +80000570: fdc42783 lw a5,-36(s0) +80000574: faf714e3 bne a4,a5,8000051c +80000578: fe042223 sw zero,-28(s0) +8000057c: 0280006f j 800005a4 +80000580: 810007b7 lui a5,0x81000 +80000584: fe442703 lw a4,-28(s0) +80000588: 00271713 slli a4,a4,0x2 +8000058c: 2c478793 addi a5,a5,708 # 810002c4 +80000590: 00f707b3 add a5,a4,a5 +80000594: 0007a023 sw zero,0(a5) +80000598: fe442783 lw a5,-28(s0) +8000059c: 00178793 addi a5,a5,1 +800005a0: fef42223 sw a5,-28(s0) +800005a4: fe442783 lw a5,-28(s0) +800005a8: fe042703 lw a4,-32(s0) +800005ac: fce7eae3 bltu a5,a4,80000580 +800005b0: 00000013 nop +800005b4: 02c12083 lw ra,44(sp) +800005b8: 02812403 lw s0,40(sp) +800005bc: 03010113 addi sp,sp,48 +800005c0: 00008067 ret + +800005c4 : +800005c4: ff010113 addi sp,sp,-16 +800005c8: 00812623 sw s0,12(sp) +800005cc: 01712423 sw s7,8(sp) +800005d0: 01010413 addi s0,sp,16 +800005d4: 000b8793 mv a5,s7 +800005d8: 00078513 mv a0,a5 +800005dc: 00c12403 lw s0,12(sp) +800005e0: 00812b83 lw s7,8(sp) +800005e4: 01010113 addi sp,sp,16 +800005e8: 00008067 ret + +800005ec : +800005ec: 00050293 mv t0,a0 +800005f0: 00000313 li t1,0 +800005f4: 00700393 li t2,7 +800005f8: 0062a023 sw t1,0(t0) +800005fc: 0062a223 sw t1,4(t0) +80000600: 0062a423 sw t1,8(t0) +80000604: 0072a623 sw t2,12(t0) +80000608: 0062a823 sw t1,16(t0) +8000060c: 00008067 ret + +80000610 : +80000610: 00050293 mv t0,a0 +80000614: 0082a303 lw t1,8(t0) +80000618: 00130313 addi t1,t1,1 +8000061c: 0062a423 sw t1,8(t0) +80000620: 01428313 addi t1,t0,20 +80000624: 0042ae83 lw t4,4(t0) +80000628: 005e9393 slli t2,t4,0x5 +8000062c: 00730333 add t1,t1,t2 +80000630: 0005ae03 lw t3,0(a1) +80000634: 01c32023 sw t3,0(t1) +80000638: 0045ae03 lw t3,4(a1) +8000063c: 01c32223 sw t3,4(t1) +80000640: 0085ae03 lw t3,8(a1) +80000644: 01c32423 sw t3,8(t1) +80000648: 00c5ae03 lw t3,12(a1) +8000064c: 01c32623 sw t3,12(t1) +80000650: 0105ae03 lw t3,16(a1) +80000654: 01c32823 sw t3,16(t1) +80000658: 0145ae03 lw t3,20(a1) +8000065c: 01c32a23 sw t3,20(t1) +80000660: 001e8e93 addi t4,t4,1 +80000664: 03200f13 li t5,50 +80000668: 01ee9463 bne t4,t5,80000670 +8000066c: 00000e93 li t4,0 + +80000670 : +80000670: 01d2a223 sw t4,4(t0) +80000674: 00008067 ret + +80000678 : +80000678: 00050293 mv t0,a0 +8000067c: 0082a303 lw t1,8(t0) +80000680: fff30313 addi t1,t1,-1 +80000684: 0062a423 sw t1,8(t0) +80000688: 01428313 addi t1,t0,20 +8000068c: 0002ae83 lw t4,0(t0) +80000690: 03200f93 li t6,50 +80000694: 000e8f13 mv t5,t4 +80000698: 001f0f13 addi t5,t5,1 +8000069c: 01ff1463 bne t5,t6,800006a4 +800006a0: 00000f13 li t5,0 + +800006a4 : +800006a4: 01e2a023 sw t5,0(t0) +800006a8: 005e9393 slli t2,t4,0x5 +800006ac: 00730333 add t1,t1,t2 +800006b0: 00032e03 lw t3,0(t1) +800006b4: 01c5a023 sw t3,0(a1) +800006b8: 00432e03 lw t3,4(t1) +800006bc: 01c5a223 sw t3,4(a1) +800006c0: 00832e03 lw t3,8(t1) +800006c4: 01c5a423 sw t3,8(a1) +800006c8: 00c32e03 lw t3,12(t1) +800006cc: 01c5a623 sw t3,12(a1) +800006d0: 01032e03 lw t3,16(t1) +800006d4: 01c5a823 sw t3,16(a1) +800006d8: 01432e03 lw t3,20(t1) +800006dc: 01c5aa23 sw t3,20(a1) +800006e0: 00008067 ret + +800006e4 : +800006e4: 00050293 mv t0,a0 +800006e8: 0082a303 lw t1,8(t0) +800006ec: 00000513 li a0,0 +800006f0: 03200e13 li t3,50 +800006f4: 006e1463 bne t3,t1,800006fc +800006f8: 00150513 addi a0,a0,1 + +800006fc : +800006fc: 00008067 ret + +80000700 : +80000700: 00050293 mv t0,a0 +80000704: 0082a303 lw t1,8(t0) +80000708: 00000513 li a0,0 +8000070c: 00000e13 li t3,0 +80000710: 006e1463 bne t3,t1,80000718 +80000714: 00150513 addi a0,a0,1 + +80000718 : +80000718: 00008067 ret + +8000071c : +8000071c: 00050293 mv t0,a0 +80000720: 00c2a303 lw t1,12(t0) +80000724: 0102a383 lw t2,16(t0) +80000728: 0063b533 sltu a0,t2,t1 +8000072c: 00008067 ret + +80000730 : +80000730: ff410113 addi sp,sp,-12 +80000734: 00112023 sw ra,0(sp) +80000738: 00b12223 sw a1,4(sp) + +8000073c : +8000073c: 00054583 lbu a1,0(a0) +80000740: 00058863 beqz a1,80000750 +80000744: 01c000ef jal ra,80000760 +80000748: 00150513 addi a0,a0,1 +8000074c: ff1ff06f j 8000073c + +80000750 : +80000750: 00012083 lw ra,0(sp) +80000754: 00412583 lw a1,4(sp) +80000758: 00c10113 addi sp,sp,12 +8000075c: 00008067 ret + +80000760 : +80000760: 000108b7 lui a7,0x10 +80000764: 00b8a023 sw a1,0(a7) # 10000 +80000768: 00008067 ret + +8000076c : +8000076c: fd010113 addi sp,sp,-48 +80000770: 02112623 sw ra,44(sp) +80000774: 02812423 sw s0,40(sp) +80000778: 03010413 addi s0,sp,48 +8000077c: fca42e23 sw a0,-36(s0) +80000780: fdc42703 lw a4,-36(s0) +80000784: 00f00793 li a5,15 +80000788: 02e7e463 bltu a5,a4,800007b0 +8000078c: 810007b7 lui a5,0x81000 +80000790: fdc42703 lw a4,-36(s0) +80000794: 00271713 slli a4,a4,0x2 +80000798: 20478793 addi a5,a5,516 # 81000204 +8000079c: 00f707b3 add a5,a4,a5 +800007a0: 0007a783 lw a5,0(a5) +800007a4: 00078513 mv a0,a5 +800007a8: f89ff0ef jal ra,80000730 +800007ac: 0740006f j 80000820 +800007b0: 02000793 li a5,32 +800007b4: fef42623 sw a5,-20(s0) +800007b8: fe0405a3 sb zero,-21(s0) +800007bc: fec42783 lw a5,-20(s0) +800007c0: ffc78793 addi a5,a5,-4 +800007c4: fdc42703 lw a4,-36(s0) +800007c8: 00f757b3 srl a5,a4,a5 +800007cc: 00f7f793 andi a5,a5,15 +800007d0: fef42223 sw a5,-28(s0) +800007d4: fe442783 lw a5,-28(s0) +800007d8: 00078663 beqz a5,800007e4 +800007dc: 00100793 li a5,1 +800007e0: fef405a3 sb a5,-21(s0) +800007e4: feb44783 lbu a5,-21(s0) +800007e8: 02078263 beqz a5,8000080c +800007ec: 810007b7 lui a5,0x81000 +800007f0: fe442703 lw a4,-28(s0) +800007f4: 00271713 slli a4,a4,0x2 +800007f8: 20478793 addi a5,a5,516 # 81000204 +800007fc: 00f707b3 add a5,a4,a5 +80000800: 0007a783 lw a5,0(a5) +80000804: 00078513 mv a0,a5 +80000808: f29ff0ef jal ra,80000730 +8000080c: fec42783 lw a5,-20(s0) +80000810: ffc78793 addi a5,a5,-4 +80000814: fef42623 sw a5,-20(s0) +80000818: fec42783 lw a5,-20(s0) +8000081c: faf040e3 bgtz a5,800007bc +80000820: 02c12083 lw ra,44(sp) +80000824: 02812403 lw s0,40(sp) +80000828: 03010113 addi sp,sp,48 +8000082c: 00008067 ret + +80000830 : +80000830: fe010113 addi sp,sp,-32 +80000834: 00112e23 sw ra,28(sp) +80000838: 00812c23 sw s0,24(sp) +8000083c: 02010413 addi s0,sp,32 +80000840: fea42623 sw a0,-20(s0) +80000844: feb42423 sw a1,-24(s0) +80000848: fec42503 lw a0,-20(s0) +8000084c: ee5ff0ef jal ra,80000730 +80000850: fe842503 lw a0,-24(s0) +80000854: f19ff0ef jal ra,8000076c +80000858: 810007b7 lui a5,0x81000 +8000085c: 08078513 addi a0,a5,128 # 81000080 +80000860: ed1ff0ef jal ra,80000730 +80000864: 00000013 nop +80000868: 01c12083 lw ra,28(sp) +8000086c: 01812403 lw s0,24(sp) +80000870: 02010113 addi sp,sp,32 +80000874: 00008067 ret + +80000878 : +80000878: fd010113 addi sp,sp,-48 +8000087c: 02112623 sw ra,44(sp) +80000880: 02812423 sw s0,40(sp) +80000884: 03010413 addi s0,sp,48 +80000888: fca42e23 sw a0,-36(s0) +8000088c: fcb42c23 sw a1,-40(s0) +80000890: fcc42a23 sw a2,-44(s0) +80000894: fcd42823 sw a3,-48(s0) +80000898: 810037b7 lui a5,0x81003 +8000089c: fdc42703 lw a4,-36(s0) +800008a0: 9ae7a223 sw a4,-1628(a5) # 810029a4 +800008a4: 810037b7 lui a5,0x81003 +800008a8: 9a478793 addi a5,a5,-1628 # 810029a4 +800008ac: fd842703 lw a4,-40(s0) +800008b0: 00e7a223 sw a4,4(a5) +800008b4: 810037b7 lui a5,0x81003 +800008b8: 9a478793 addi a5,a5,-1628 # 810029a4 +800008bc: fd442703 lw a4,-44(s0) +800008c0: 00e7a423 sw a4,8(a5) +800008c4: 810037b7 lui a5,0x81003 +800008c8: 9a478793 addi a5,a5,-1628 # 810029a4 +800008cc: fd042703 lw a4,-48(s0) +800008d0: 00e7a623 sw a4,12(a5) +800008d4: 8d9ff0ef jal ra,800001ac +800008d8: fea42423 sw a0,-24(s0) +800008dc: fd042703 lw a4,-48(s0) +800008e0: fe842783 lw a5,-24(s0) +800008e4: 02f757b3 divu a5,a4,a5 +800008e8: fef42623 sw a5,-20(s0) +800008ec: fd042703 lw a4,-48(s0) +800008f0: fe842783 lw a5,-24(s0) +800008f4: 02f777b3 remu a5,a4,a5 +800008f8: 00078863 beqz a5,80000908 +800008fc: fec42783 lw a5,-20(s0) +80000900: 00178793 addi a5,a5,1 +80000904: fef42623 sw a5,-20(s0) +80000908: fec42583 lw a1,-20(s0) +8000090c: 810007b7 lui a5,0x81000 +80000910: 0c478513 addi a0,a5,196 # 810000c4 +80000914: f1dff0ef jal ra,80000830 +80000918: 810037b7 lui a5,0x81003 +8000091c: 9a478793 addi a5,a5,-1628 # 810029a4 +80000920: fec42703 lw a4,-20(s0) +80000924: 00e7a823 sw a4,16(a5) +80000928: fd042703 lw a4,-48(s0) +8000092c: fe842783 lw a5,-24(s0) +80000930: 02f76263 bltu a4,a5,80000954 +80000934: 810037b7 lui a5,0x81003 +80000938: 9a478693 addi a3,a5,-1628 # 810029a4 +8000093c: 800017b7 lui a5,0x80001 +80000940: 9ac78613 addi a2,a5,-1620 # 800009ac +80000944: fe842583 lw a1,-24(s0) +80000948: fd042503 lw a0,-48(s0) +8000094c: ac1ff0ef jal ra,8000040c +80000950: 0200006f j 80000970 +80000954: 810037b7 lui a5,0x81003 +80000958: 9a478693 addi a3,a5,-1628 # 810029a4 +8000095c: 800017b7 lui a5,0x80001 +80000960: 9ac78613 addi a2,a5,-1620 # 800009ac +80000964: fd042583 lw a1,-48(s0) +80000968: fd042503 lw a0,-48(s0) +8000096c: aa1ff0ef jal ra,8000040c +80000970: 835ff0ef jal ra,800001a4 +80000974: fea42223 sw a0,-28(s0) +80000978: fd042703 lw a4,-48(s0) +8000097c: fe442783 lw a5,-28(s0) +80000980: 00e7f863 bgeu a5,a4,80000990 +80000984: fe442503 lw a0,-28(s0) +80000988: b71ff0ef jal ra,800004f8 +8000098c: 00c0006f j 80000998 +80000990: fd042503 lw a0,-48(s0) +80000994: b65ff0ef jal ra,800004f8 +80000998: 00000013 nop +8000099c: 02c12083 lw ra,44(sp) +800009a0: 02812403 lw s0,40(sp) +800009a4: 03010113 addi sp,sp,48 +800009a8: 00008067 ret + +800009ac <_vx_mat_mult>: +800009ac: fa010113 addi sp,sp,-96 +800009b0: 04112e23 sw ra,92(sp) +800009b4: 04812c23 sw s0,88(sp) +800009b8: 06010413 addi s0,sp,96 +800009bc: faa42623 sw a0,-84(s0) +800009c0: fab42423 sw a1,-88(s0) +800009c4: c01ff0ef jal ra,800005c4 +800009c8: fca42c23 sw a0,-40(s0) +800009cc: fd842783 lw a5,-40(s0) +800009d0: 0007a783 lw a5,0(a5) +800009d4: fcf42a23 sw a5,-44(s0) +800009d8: fd842783 lw a5,-40(s0) +800009dc: 0047a783 lw a5,4(a5) +800009e0: fcf42823 sw a5,-48(s0) +800009e4: fd842783 lw a5,-40(s0) +800009e8: 0087a783 lw a5,8(a5) +800009ec: fcf42623 sw a5,-52(s0) +800009f0: fd842783 lw a5,-40(s0) +800009f4: 0107a783 lw a5,16(a5) +800009f8: fef42623 sw a5,-20(s0) +800009fc: fec42703 lw a4,-20(s0) +80000a00: fac42783 lw a5,-84(s0) +80000a04: 02f707b3 mul a5,a4,a5 +80000a08: fef42423 sw a5,-24(s0) +80000a0c: fec42783 lw a5,-20(s0) +80000a10: 00079a63 bnez a5,80000a24 <_vx_mat_mult+0x78> +80000a14: 00100793 li a5,1 +80000a18: fef42623 sw a5,-20(s0) +80000a1c: fac42783 lw a5,-84(s0) +80000a20: fef42423 sw a5,-24(s0) +80000a24: fd842783 lw a5,-40(s0) +80000a28: 00c7a783 lw a5,12(a5) +80000a2c: fcf42423 sw a5,-56(s0) +80000a30: fe042223 sw zero,-28(s0) +80000a34: 1240006f j 80000b58 <_vx_mat_mult+0x1ac> +80000a38: fe042023 sw zero,-32(s0) +80000a3c: fc042e23 sw zero,-36(s0) +80000a40: 0780006f j 80000ab8 <_vx_mat_mult+0x10c> +80000a44: fa842703 lw a4,-88(s0) +80000a48: fc842783 lw a5,-56(s0) +80000a4c: 02f707b3 mul a5,a4,a5 +80000a50: fdc42703 lw a4,-36(s0) +80000a54: 00f707b3 add a5,a4,a5 +80000a58: fcf42223 sw a5,-60(s0) +80000a5c: fc842703 lw a4,-56(s0) +80000a60: fdc42783 lw a5,-36(s0) +80000a64: 02f707b3 mul a5,a4,a5 +80000a68: fe842703 lw a4,-24(s0) +80000a6c: 00f707b3 add a5,a4,a5 +80000a70: fcf42023 sw a5,-64(s0) +80000a74: fc442783 lw a5,-60(s0) +80000a78: 00279793 slli a5,a5,0x2 +80000a7c: fd442703 lw a4,-44(s0) +80000a80: 00f707b3 add a5,a4,a5 +80000a84: 0007a703 lw a4,0(a5) +80000a88: fc042783 lw a5,-64(s0) +80000a8c: 00279793 slli a5,a5,0x2 +80000a90: fd042683 lw a3,-48(s0) +80000a94: 00f687b3 add a5,a3,a5 +80000a98: 0007a783 lw a5,0(a5) +80000a9c: 02f707b3 mul a5,a4,a5 +80000aa0: fe042703 lw a4,-32(s0) +80000aa4: 00f707b3 add a5,a4,a5 +80000aa8: fef42023 sw a5,-32(s0) +80000aac: fdc42783 lw a5,-36(s0) +80000ab0: 00178793 addi a5,a5,1 +80000ab4: fcf42e23 sw a5,-36(s0) +80000ab8: fdc42703 lw a4,-36(s0) +80000abc: fc842783 lw a5,-56(s0) +80000ac0: f8f762e3 bltu a4,a5,80000a44 <_vx_mat_mult+0x98> +80000ac4: fa842703 lw a4,-88(s0) +80000ac8: fc842783 lw a5,-56(s0) +80000acc: 02f70733 mul a4,a4,a5 +80000ad0: fe842783 lw a5,-24(s0) +80000ad4: 00f707b3 add a5,a4,a5 +80000ad8: faf42e23 sw a5,-68(s0) +80000adc: fe842703 lw a4,-24(s0) +80000ae0: fc842783 lw a5,-56(s0) +80000ae4: 00f737b3 sltu a5,a4,a5 +80000ae8: 0ff7f793 andi a5,a5,255 +80000aec: faf42c23 sw a5,-72(s0) +80000af0: fb842783 lw a5,-72(s0) +80000af4: 0017b793 seqz a5,a5 +80000af8: faf40ba3 sb a5,-73(s0) +80000afc: fb744783 lbu a5,-73(s0) +80000b00: 00078f13 mv t5,a5 +80000b04: 800017b7 lui a5,0x80001 +80000b08: b4478f93 addi t6,a5,-1212 # 80000b44 +80000b0c: 000f206b 0xf206b +80000b10: 01ff707b 0x1ff707b +80000b14: fbc42783 lw a5,-68(s0) +80000b18: 00279793 slli a5,a5,0x2 +80000b1c: fcc42703 lw a4,-52(s0) +80000b20: 00f707b3 add a5,a4,a5 +80000b24: fe042703 lw a4,-32(s0) +80000b28: 00e7a023 sw a4,0(a5) +80000b2c: fe842783 lw a5,-24(s0) +80000b30: 00178793 addi a5,a5,1 +80000b34: fef42423 sw a5,-24(s0) +80000b38: 800017b7 lui a5,0x80001 +80000b3c: b4878e13 addi t3,a5,-1208 # 80000b48 +80000b40: 000e0067 jr t3 +80000b44: 00000013 nop +80000b48: 0000306b 0x306b +80000b4c: fe442783 lw a5,-28(s0) +80000b50: 00178793 addi a5,a5,1 +80000b54: fef42223 sw a5,-28(s0) +80000b58: fe442783 lw a5,-28(s0) +80000b5c: fec42703 lw a4,-20(s0) +80000b60: ece7ece3 bltu a5,a4,80000a38 <_vx_mat_mult+0x8c> +80000b64: 00000013 nop +80000b68: 05c12083 lw ra,92(sp) +80000b6c: 05812403 lw s0,88(sp) +80000b70: 06010113 addi sp,sp,96 +80000b74: 00008067 ret + +80000b78 : +80000b78: fc010113 addi sp,sp,-64 +80000b7c: 02112e23 sw ra,60(sp) +80000b80: 02812c23 sw s0,56(sp) +80000b84: 04010413 addi s0,sp,64 +80000b88: fca42e23 sw a0,-36(s0) +80000b8c: fcb42c23 sw a1,-40(s0) +80000b90: fcc42a23 sw a2,-44(s0) +80000b94: fcd42823 sw a3,-48(s0) +80000b98: fce42623 sw a4,-52(s0) +80000b9c: 810037b7 lui a5,0x81003 +80000ba0: fdc42703 lw a4,-36(s0) +80000ba4: 9ae7ac23 sw a4,-1608(a5) # 810029b8 +80000ba8: 810037b7 lui a5,0x81003 +80000bac: 9b878793 addi a5,a5,-1608 # 810029b8 +80000bb0: fd842703 lw a4,-40(s0) +80000bb4: 00e7a223 sw a4,4(a5) +80000bb8: 810037b7 lui a5,0x81003 +80000bbc: 9b878793 addi a5,a5,-1608 # 810029b8 +80000bc0: fd442703 lw a4,-44(s0) +80000bc4: 00e7a423 sw a4,8(a5) +80000bc8: 810037b7 lui a5,0x81003 +80000bcc: 9b878793 addi a5,a5,-1608 # 810029b8 +80000bd0: fcc42703 lw a4,-52(s0) +80000bd4: 00e7a623 sw a4,12(a5) +80000bd8: 810037b7 lui a5,0x81003 +80000bdc: 9b878793 addi a5,a5,-1608 # 810029b8 +80000be0: fd042703 lw a4,-48(s0) +80000be4: 00e7a823 sw a4,16(a5) +80000be8: dc4ff0ef jal ra,800001ac +80000bec: fea42423 sw a0,-24(s0) +80000bf0: fcc42703 lw a4,-52(s0) +80000bf4: fe842783 lw a5,-24(s0) +80000bf8: 02f757b3 divu a5,a4,a5 +80000bfc: fef42623 sw a5,-20(s0) +80000c00: fcc42703 lw a4,-52(s0) +80000c04: fe842783 lw a5,-24(s0) +80000c08: 02f777b3 remu a5,a4,a5 +80000c0c: 00078863 beqz a5,80000c1c +80000c10: fec42783 lw a5,-20(s0) +80000c14: 00178793 addi a5,a5,1 +80000c18: fef42623 sw a5,-20(s0) +80000c1c: 810037b7 lui a5,0x81003 +80000c20: 9b878793 addi a5,a5,-1608 # 810029b8 +80000c24: fec42703 lw a4,-20(s0) +80000c28: 00e7aa23 sw a4,20(a5) +80000c2c: fcc42703 lw a4,-52(s0) +80000c30: fe842783 lw a5,-24(s0) +80000c34: 02f76263 bltu a4,a5,80000c58 +80000c38: 810037b7 lui a5,0x81003 +80000c3c: 9b878693 addi a3,a5,-1608 # 810029b8 +80000c40: 800017b7 lui a5,0x80001 +80000c44: cb078613 addi a2,a5,-848 # 80000cb0 +80000c48: fe842583 lw a1,-24(s0) +80000c4c: fd042503 lw a0,-48(s0) +80000c50: fbcff0ef jal ra,8000040c +80000c54: 0200006f j 80000c74 +80000c58: 810037b7 lui a5,0x81003 +80000c5c: 9b878693 addi a3,a5,-1608 # 810029b8 +80000c60: 800017b7 lui a5,0x80001 +80000c64: cb078613 addi a2,a5,-848 # 80000cb0 +80000c68: fcc42583 lw a1,-52(s0) +80000c6c: fd042503 lw a0,-48(s0) +80000c70: f9cff0ef jal ra,8000040c +80000c74: d30ff0ef jal ra,800001a4 +80000c78: fea42223 sw a0,-28(s0) +80000c7c: fd042703 lw a4,-48(s0) +80000c80: fe442783 lw a5,-28(s0) +80000c84: 00e7f863 bgeu a5,a4,80000c94 +80000c88: fe442503 lw a0,-28(s0) +80000c8c: 86dff0ef jal ra,800004f8 +80000c90: 00c0006f j 80000c9c +80000c94: fd042503 lw a0,-48(s0) +80000c98: 861ff0ef jal ra,800004f8 +80000c9c: 00000013 nop +80000ca0: 03c12083 lw ra,60(sp) +80000ca4: 03812403 lw s0,56(sp) +80000ca8: 04010113 addi sp,sp,64 +80000cac: 00008067 ret + +80000cb0 <_vx_mat_add>: +80000cb0: fb010113 addi sp,sp,-80 +80000cb4: 04112623 sw ra,76(sp) +80000cb8: 04812423 sw s0,72(sp) +80000cbc: 05010413 addi s0,sp,80 +80000cc0: faa42e23 sw a0,-68(s0) +80000cc4: fab42c23 sw a1,-72(s0) +80000cc8: 8fdff0ef jal ra,800005c4 +80000ccc: fea42023 sw a0,-32(s0) +80000cd0: fe042783 lw a5,-32(s0) +80000cd4: 0007a783 lw a5,0(a5) +80000cd8: fcf42e23 sw a5,-36(s0) +80000cdc: fe042783 lw a5,-32(s0) +80000ce0: 0047a783 lw a5,4(a5) +80000ce4: fcf42c23 sw a5,-40(s0) +80000ce8: fe042783 lw a5,-32(s0) +80000cec: 0087a783 lw a5,8(a5) +80000cf0: fcf42a23 sw a5,-44(s0) +80000cf4: fe042783 lw a5,-32(s0) +80000cf8: 0147a783 lw a5,20(a5) +80000cfc: fef42623 sw a5,-20(s0) +80000d00: fec42703 lw a4,-20(s0) +80000d04: fbc42783 lw a5,-68(s0) +80000d08: 02f707b3 mul a5,a4,a5 +80000d0c: fef42423 sw a5,-24(s0) +80000d10: fec42783 lw a5,-20(s0) +80000d14: 00079a63 bnez a5,80000d28 <_vx_mat_add+0x78> +80000d18: 00100793 li a5,1 +80000d1c: fef42623 sw a5,-20(s0) +80000d20: fbc42783 lw a5,-68(s0) +80000d24: fef42423 sw a5,-24(s0) +80000d28: fe042783 lw a5,-32(s0) +80000d2c: 00c7a783 lw a5,12(a5) +80000d30: fcf42823 sw a5,-48(s0) +80000d34: fe042223 sw zero,-28(s0) +80000d38: 0c00006f j 80000df8 <_vx_mat_add+0x148> +80000d3c: fb842703 lw a4,-72(s0) +80000d40: fd042783 lw a5,-48(s0) +80000d44: 02f70733 mul a4,a4,a5 +80000d48: fe842783 lw a5,-24(s0) +80000d4c: 00f707b3 add a5,a4,a5 +80000d50: fcf42623 sw a5,-52(s0) +80000d54: fe842703 lw a4,-24(s0) +80000d58: fd042783 lw a5,-48(s0) +80000d5c: 00f737b3 sltu a5,a4,a5 +80000d60: 0ff7f793 andi a5,a5,255 +80000d64: fcf42423 sw a5,-56(s0) +80000d68: fc842783 lw a5,-56(s0) +80000d6c: 0017b793 seqz a5,a5 +80000d70: fcf403a3 sb a5,-57(s0) +80000d74: fc744783 lbu a5,-57(s0) +80000d78: 00078f13 mv t5,a5 +80000d7c: 800017b7 lui a5,0x80001 +80000d80: de478f93 addi t6,a5,-540 # 80000de4 +80000d84: 000f206b 0xf206b +80000d88: 01ff707b 0x1ff707b +80000d8c: fcc42783 lw a5,-52(s0) +80000d90: 00279793 slli a5,a5,0x2 +80000d94: fdc42703 lw a4,-36(s0) +80000d98: 00f707b3 add a5,a4,a5 +80000d9c: 0007a683 lw a3,0(a5) +80000da0: fcc42783 lw a5,-52(s0) +80000da4: 00279793 slli a5,a5,0x2 +80000da8: fd842703 lw a4,-40(s0) +80000dac: 00f707b3 add a5,a4,a5 +80000db0: 0007a703 lw a4,0(a5) +80000db4: fcc42783 lw a5,-52(s0) +80000db8: 00279793 slli a5,a5,0x2 +80000dbc: fd442603 lw a2,-44(s0) +80000dc0: 00f607b3 add a5,a2,a5 +80000dc4: 00e68733 add a4,a3,a4 +80000dc8: 00e7a023 sw a4,0(a5) +80000dcc: fe842783 lw a5,-24(s0) +80000dd0: 00178793 addi a5,a5,1 +80000dd4: fef42423 sw a5,-24(s0) +80000dd8: 800017b7 lui a5,0x80001 +80000ddc: de878e13 addi t3,a5,-536 # 80000de8 +80000de0: 000e0067 jr t3 +80000de4: 00000013 nop +80000de8: 0000306b 0x306b +80000dec: fe442783 lw a5,-28(s0) +80000df0: 00178793 addi a5,a5,1 +80000df4: fef42223 sw a5,-28(s0) +80000df8: fe442783 lw a5,-28(s0) +80000dfc: fec42703 lw a4,-20(s0) +80000e00: f2e7eee3 bltu a5,a4,80000d3c <_vx_mat_add+0x8c> +80000e04: 00000013 nop +80000e08: 04c12083 lw ra,76(sp) +80000e0c: 04812403 lw s0,72(sp) +80000e10: 05010113 addi sp,sp,80 +80000e14: 00008067 ret + +80000e18 : +80000e18: fc010113 addi sp,sp,-64 +80000e1c: 02112e23 sw ra,60(sp) +80000e20: 02812c23 sw s0,56(sp) +80000e24: 04010413 addi s0,sp,64 +80000e28: fca42e23 sw a0,-36(s0) +80000e2c: fcb42c23 sw a1,-40(s0) +80000e30: fcc42a23 sw a2,-44(s0) +80000e34: fcd42823 sw a3,-48(s0) +80000e38: fce42623 sw a4,-52(s0) +80000e3c: 810037b7 lui a5,0x81003 +80000e40: fdc42703 lw a4,-36(s0) +80000e44: 9ae7ac23 sw a4,-1608(a5) # 810029b8 +80000e48: 810037b7 lui a5,0x81003 +80000e4c: 9b878793 addi a5,a5,-1608 # 810029b8 +80000e50: fd842703 lw a4,-40(s0) +80000e54: 00e7a223 sw a4,4(a5) +80000e58: 810037b7 lui a5,0x81003 +80000e5c: 9b878793 addi a5,a5,-1608 # 810029b8 +80000e60: fd442703 lw a4,-44(s0) +80000e64: 00e7a423 sw a4,8(a5) +80000e68: 810037b7 lui a5,0x81003 +80000e6c: 9b878793 addi a5,a5,-1608 # 810029b8 +80000e70: fcc42703 lw a4,-52(s0) +80000e74: 00e7a623 sw a4,12(a5) +80000e78: 810037b7 lui a5,0x81003 +80000e7c: 9b878793 addi a5,a5,-1608 # 810029b8 +80000e80: fd042703 lw a4,-48(s0) +80000e84: 00e7a823 sw a4,16(a5) +80000e88: b24ff0ef jal ra,800001ac +80000e8c: fea42423 sw a0,-24(s0) +80000e90: fcc42703 lw a4,-52(s0) +80000e94: fe842783 lw a5,-24(s0) +80000e98: 02f757b3 divu a5,a4,a5 +80000e9c: fef42623 sw a5,-20(s0) +80000ea0: fcc42703 lw a4,-52(s0) +80000ea4: fe842783 lw a5,-24(s0) +80000ea8: 02f777b3 remu a5,a4,a5 +80000eac: 00078863 beqz a5,80000ebc +80000eb0: fec42783 lw a5,-20(s0) +80000eb4: 00178793 addi a5,a5,1 +80000eb8: fef42623 sw a5,-20(s0) +80000ebc: 810037b7 lui a5,0x81003 +80000ec0: 9b878793 addi a5,a5,-1608 # 810029b8 +80000ec4: fec42703 lw a4,-20(s0) +80000ec8: 00e7aa23 sw a4,20(a5) +80000ecc: fcc42703 lw a4,-52(s0) +80000ed0: fe842783 lw a5,-24(s0) +80000ed4: 02f76263 bltu a4,a5,80000ef8 +80000ed8: 810037b7 lui a5,0x81003 +80000edc: 9b878693 addi a3,a5,-1608 # 810029b8 +80000ee0: 800017b7 lui a5,0x80001 +80000ee4: f5078613 addi a2,a5,-176 # 80000f50 +80000ee8: fe842583 lw a1,-24(s0) +80000eec: fd042503 lw a0,-48(s0) +80000ef0: d1cff0ef jal ra,8000040c +80000ef4: 0200006f j 80000f14 +80000ef8: 810037b7 lui a5,0x81003 +80000efc: 9b878693 addi a3,a5,-1608 # 810029b8 +80000f00: 800017b7 lui a5,0x80001 +80000f04: f5078613 addi a2,a5,-176 # 80000f50 +80000f08: fcc42583 lw a1,-52(s0) +80000f0c: fd042503 lw a0,-48(s0) +80000f10: cfcff0ef jal ra,8000040c +80000f14: a90ff0ef jal ra,800001a4 +80000f18: fea42223 sw a0,-28(s0) +80000f1c: fd042703 lw a4,-48(s0) +80000f20: fe442783 lw a5,-28(s0) +80000f24: 00e7f863 bgeu a5,a4,80000f34 +80000f28: fe442503 lw a0,-28(s0) +80000f2c: dccff0ef jal ra,800004f8 +80000f30: 00c0006f j 80000f3c +80000f34: fd042503 lw a0,-48(s0) +80000f38: dc0ff0ef jal ra,800004f8 +80000f3c: 00000013 nop +80000f40: 03c12083 lw ra,60(sp) +80000f44: 03812403 lw s0,56(sp) +80000f48: 04010113 addi sp,sp,64 +80000f4c: 00008067 ret + +80000f50 <_vx_mat_sub>: +80000f50: fb010113 addi sp,sp,-80 +80000f54: 04112623 sw ra,76(sp) +80000f58: 04812423 sw s0,72(sp) +80000f5c: 05010413 addi s0,sp,80 +80000f60: faa42e23 sw a0,-68(s0) +80000f64: fab42c23 sw a1,-72(s0) +80000f68: e5cff0ef jal ra,800005c4 +80000f6c: fea42023 sw a0,-32(s0) +80000f70: fe042783 lw a5,-32(s0) +80000f74: 0007a783 lw a5,0(a5) +80000f78: fcf42e23 sw a5,-36(s0) +80000f7c: fe042783 lw a5,-32(s0) +80000f80: 0047a783 lw a5,4(a5) +80000f84: fcf42c23 sw a5,-40(s0) +80000f88: fe042783 lw a5,-32(s0) +80000f8c: 0087a783 lw a5,8(a5) +80000f90: fcf42a23 sw a5,-44(s0) +80000f94: fe042783 lw a5,-32(s0) +80000f98: 0147a783 lw a5,20(a5) +80000f9c: fef42623 sw a5,-20(s0) +80000fa0: fec42703 lw a4,-20(s0) +80000fa4: fbc42783 lw a5,-68(s0) +80000fa8: 02f707b3 mul a5,a4,a5 +80000fac: fef42423 sw a5,-24(s0) +80000fb0: fec42783 lw a5,-20(s0) +80000fb4: 00079a63 bnez a5,80000fc8 <_vx_mat_sub+0x78> +80000fb8: 00100793 li a5,1 +80000fbc: fef42623 sw a5,-20(s0) +80000fc0: fbc42783 lw a5,-68(s0) +80000fc4: fef42423 sw a5,-24(s0) +80000fc8: fe042783 lw a5,-32(s0) +80000fcc: 00c7a783 lw a5,12(a5) +80000fd0: fcf42823 sw a5,-48(s0) +80000fd4: fe042223 sw zero,-28(s0) +80000fd8: 0c00006f j 80001098 <_vx_mat_sub+0x148> +80000fdc: fb842703 lw a4,-72(s0) +80000fe0: fd042783 lw a5,-48(s0) +80000fe4: 02f70733 mul a4,a4,a5 +80000fe8: fe842783 lw a5,-24(s0) +80000fec: 00f707b3 add a5,a4,a5 +80000ff0: fcf42623 sw a5,-52(s0) +80000ff4: fe842703 lw a4,-24(s0) +80000ff8: fd042783 lw a5,-48(s0) +80000ffc: 00f737b3 sltu a5,a4,a5 +80001000: 0ff7f793 andi a5,a5,255 +80001004: fcf42423 sw a5,-56(s0) +80001008: fc842783 lw a5,-56(s0) +8000100c: 0017b793 seqz a5,a5 +80001010: fcf403a3 sb a5,-57(s0) +80001014: fc744783 lbu a5,-57(s0) +80001018: 00078f13 mv t5,a5 +8000101c: 800017b7 lui a5,0x80001 +80001020: 08478f93 addi t6,a5,132 # 80001084 +80001024: 000f206b 0xf206b +80001028: 01ff707b 0x1ff707b +8000102c: fcc42783 lw a5,-52(s0) +80001030: 00279793 slli a5,a5,0x2 +80001034: fdc42703 lw a4,-36(s0) +80001038: 00f707b3 add a5,a4,a5 +8000103c: 0007a683 lw a3,0(a5) +80001040: fcc42783 lw a5,-52(s0) +80001044: 00279793 slli a5,a5,0x2 +80001048: fd842703 lw a4,-40(s0) +8000104c: 00f707b3 add a5,a4,a5 +80001050: 0007a703 lw a4,0(a5) +80001054: fcc42783 lw a5,-52(s0) +80001058: 00279793 slli a5,a5,0x2 +8000105c: fd442603 lw a2,-44(s0) +80001060: 00f607b3 add a5,a2,a5 +80001064: 40e68733 sub a4,a3,a4 +80001068: 00e7a023 sw a4,0(a5) +8000106c: fe842783 lw a5,-24(s0) +80001070: 00178793 addi a5,a5,1 +80001074: fef42423 sw a5,-24(s0) +80001078: 800017b7 lui a5,0x80001 +8000107c: 08878e13 addi t3,a5,136 # 80001088 +80001080: 000e0067 jr t3 +80001084: 00000013 nop +80001088: 0000306b 0x306b +8000108c: fe442783 lw a5,-28(s0) +80001090: 00178793 addi a5,a5,1 +80001094: fef42223 sw a5,-28(s0) +80001098: fe442783 lw a5,-28(s0) +8000109c: fec42703 lw a4,-20(s0) +800010a0: f2e7eee3 bltu a5,a4,80000fdc <_vx_mat_sub+0x8c> +800010a4: 00000013 nop +800010a8: 04c12083 lw ra,76(sp) +800010ac: 04812403 lw s0,72(sp) +800010b0: 05010113 addi sp,sp,80 +800010b4: 00008067 ret + +800010b8 : +800010b8: fc010113 addi sp,sp,-64 +800010bc: 02112e23 sw ra,60(sp) +800010c0: 02812c23 sw s0,56(sp) +800010c4: 04010413 addi s0,sp,64 +800010c8: fca42e23 sw a0,-36(s0) +800010cc: fcb42c23 sw a1,-40(s0) +800010d0: fcc42a23 sw a2,-44(s0) +800010d4: fcd42823 sw a3,-48(s0) +800010d8: fce42623 sw a4,-52(s0) +800010dc: 810037b7 lui a5,0x81003 +800010e0: fdc42703 lw a4,-36(s0) +800010e4: 9ce7a823 sw a4,-1584(a5) # 810029d0 +800010e8: 810037b7 lui a5,0x81003 +800010ec: 9d078793 addi a5,a5,-1584 # 810029d0 +800010f0: fd842703 lw a4,-40(s0) +800010f4: 00e7a223 sw a4,4(a5) +800010f8: 810037b7 lui a5,0x81003 +800010fc: 9d078793 addi a5,a5,-1584 # 810029d0 +80001100: fd442703 lw a4,-44(s0) +80001104: 00e7a423 sw a4,8(a5) +80001108: 810037b7 lui a5,0x81003 +8000110c: 9d078793 addi a5,a5,-1584 # 810029d0 +80001110: fcc42703 lw a4,-52(s0) +80001114: 00e7a623 sw a4,12(a5) +80001118: 810037b7 lui a5,0x81003 +8000111c: 9d078793 addi a5,a5,-1584 # 810029d0 +80001120: fd042703 lw a4,-48(s0) +80001124: 00e7a823 sw a4,16(a5) +80001128: 884ff0ef jal ra,800001ac +8000112c: fea42423 sw a0,-24(s0) +80001130: fcc42703 lw a4,-52(s0) +80001134: fe842783 lw a5,-24(s0) +80001138: 02f757b3 divu a5,a4,a5 +8000113c: fef42623 sw a5,-20(s0) +80001140: fcc42703 lw a4,-52(s0) +80001144: fe842783 lw a5,-24(s0) +80001148: 02f777b3 remu a5,a4,a5 +8000114c: 00078863 beqz a5,8000115c +80001150: fec42783 lw a5,-20(s0) +80001154: 00178793 addi a5,a5,1 +80001158: fef42623 sw a5,-20(s0) +8000115c: 810037b7 lui a5,0x81003 +80001160: 9d078793 addi a5,a5,-1584 # 810029d0 +80001164: fec42703 lw a4,-20(s0) +80001168: 00e7aa23 sw a4,20(a5) +8000116c: fcc42703 lw a4,-52(s0) +80001170: fe842783 lw a5,-24(s0) +80001174: 02f76263 bltu a4,a5,80001198 +80001178: 810037b7 lui a5,0x81003 +8000117c: 9d078693 addi a3,a5,-1584 # 810029d0 +80001180: 800017b7 lui a5,0x80001 +80001184: 1f078613 addi a2,a5,496 # 800011f0 +80001188: fe842583 lw a1,-24(s0) +8000118c: fd042503 lw a0,-48(s0) +80001190: a7cff0ef jal ra,8000040c +80001194: 0200006f j 800011b4 +80001198: 810037b7 lui a5,0x81003 +8000119c: 9d078693 addi a3,a5,-1584 # 810029d0 +800011a0: 800017b7 lui a5,0x80001 +800011a4: 1f078613 addi a2,a5,496 # 800011f0 +800011a8: fcc42583 lw a1,-52(s0) +800011ac: fd042503 lw a0,-48(s0) +800011b0: a5cff0ef jal ra,8000040c +800011b4: ff1fe0ef jal ra,800001a4 +800011b8: fea42223 sw a0,-28(s0) +800011bc: fd042703 lw a4,-48(s0) +800011c0: fe442783 lw a5,-28(s0) +800011c4: 00e7f863 bgeu a5,a4,800011d4 +800011c8: fe442503 lw a0,-28(s0) +800011cc: b2cff0ef jal ra,800004f8 +800011d0: 00c0006f j 800011dc +800011d4: fd042503 lw a0,-48(s0) +800011d8: b20ff0ef jal ra,800004f8 +800011dc: 00000013 nop +800011e0: 03c12083 lw ra,60(sp) +800011e4: 03812403 lw s0,56(sp) +800011e8: 04010113 addi sp,sp,64 +800011ec: 00008067 ret + +800011f0 <_vx_e_mat_add>: +800011f0: fb010113 addi sp,sp,-80 +800011f4: 04112623 sw ra,76(sp) +800011f8: 04812423 sw s0,72(sp) +800011fc: 05010413 addi s0,sp,80 +80001200: faa42e23 sw a0,-68(s0) +80001204: fab42c23 sw a1,-72(s0) +80001208: bbcff0ef jal ra,800005c4 +8000120c: fea42023 sw a0,-32(s0) +80001210: fe042783 lw a5,-32(s0) +80001214: 0007a783 lw a5,0(a5) +80001218: fcf42e23 sw a5,-36(s0) +8000121c: fe042783 lw a5,-32(s0) +80001220: 0047a783 lw a5,4(a5) +80001224: 0007a783 lw a5,0(a5) +80001228: fcf42c23 sw a5,-40(s0) +8000122c: fe042783 lw a5,-32(s0) +80001230: 0087a783 lw a5,8(a5) +80001234: fcf42a23 sw a5,-44(s0) +80001238: fe042783 lw a5,-32(s0) +8000123c: 0147a783 lw a5,20(a5) +80001240: fef42623 sw a5,-20(s0) +80001244: fec42703 lw a4,-20(s0) +80001248: fbc42783 lw a5,-68(s0) +8000124c: 02f707b3 mul a5,a4,a5 +80001250: fef42423 sw a5,-24(s0) +80001254: fec42783 lw a5,-20(s0) +80001258: 00079a63 bnez a5,8000126c <_vx_e_mat_add+0x7c> +8000125c: 00100793 li a5,1 +80001260: fef42623 sw a5,-20(s0) +80001264: fbc42783 lw a5,-68(s0) +80001268: fef42423 sw a5,-24(s0) +8000126c: fe042783 lw a5,-32(s0) +80001270: 00c7a783 lw a5,12(a5) +80001274: fcf42823 sw a5,-48(s0) +80001278: fe042223 sw zero,-28(s0) +8000127c: 0b00006f j 8000132c <_vx_e_mat_add+0x13c> +80001280: fb842703 lw a4,-72(s0) +80001284: fd042783 lw a5,-48(s0) +80001288: 02f70733 mul a4,a4,a5 +8000128c: fe842783 lw a5,-24(s0) +80001290: 00f707b3 add a5,a4,a5 +80001294: fcf42623 sw a5,-52(s0) +80001298: fe842703 lw a4,-24(s0) +8000129c: fd042783 lw a5,-48(s0) +800012a0: 00f737b3 sltu a5,a4,a5 +800012a4: 0ff7f793 andi a5,a5,255 +800012a8: fcf42423 sw a5,-56(s0) +800012ac: fc842783 lw a5,-56(s0) +800012b0: 0017b793 seqz a5,a5 +800012b4: fcf403a3 sb a5,-57(s0) +800012b8: fc744783 lbu a5,-57(s0) +800012bc: 00078f13 mv t5,a5 +800012c0: 800017b7 lui a5,0x80001 +800012c4: 31878f93 addi t6,a5,792 # 80001318 +800012c8: 000f206b 0xf206b +800012cc: 01ff707b 0x1ff707b +800012d0: fcc42783 lw a5,-52(s0) +800012d4: 00279793 slli a5,a5,0x2 +800012d8: fdc42703 lw a4,-36(s0) +800012dc: 00f707b3 add a5,a4,a5 +800012e0: 0007a683 lw a3,0(a5) +800012e4: fcc42783 lw a5,-52(s0) +800012e8: 00279793 slli a5,a5,0x2 +800012ec: fd442703 lw a4,-44(s0) +800012f0: 00f707b3 add a5,a4,a5 +800012f4: fd842703 lw a4,-40(s0) +800012f8: 00e68733 add a4,a3,a4 +800012fc: 00e7a023 sw a4,0(a5) +80001300: fe842783 lw a5,-24(s0) +80001304: 00178793 addi a5,a5,1 +80001308: fef42423 sw a5,-24(s0) +8000130c: 800017b7 lui a5,0x80001 +80001310: 31c78e13 addi t3,a5,796 # 8000131c +80001314: 000e0067 jr t3 +80001318: 00000013 nop +8000131c: 0000306b 0x306b +80001320: fe442783 lw a5,-28(s0) +80001324: 00178793 addi a5,a5,1 +80001328: fef42223 sw a5,-28(s0) +8000132c: fe442783 lw a5,-28(s0) +80001330: fec42703 lw a4,-20(s0) +80001334: f4e7e6e3 bltu a5,a4,80001280 <_vx_e_mat_add+0x90> +80001338: 00000013 nop +8000133c: 04c12083 lw ra,76(sp) +80001340: 04812403 lw s0,72(sp) +80001344: 05010113 addi sp,sp,80 +80001348: 00008067 ret + +8000134c : +8000134c: fc010113 addi sp,sp,-64 +80001350: 02112e23 sw ra,60(sp) +80001354: 02812c23 sw s0,56(sp) +80001358: 04010413 addi s0,sp,64 +8000135c: fca42e23 sw a0,-36(s0) +80001360: fcb42c23 sw a1,-40(s0) +80001364: fcc42a23 sw a2,-44(s0) +80001368: fcd42823 sw a3,-48(s0) +8000136c: fce42623 sw a4,-52(s0) +80001370: 810037b7 lui a5,0x81003 +80001374: fdc42703 lw a4,-36(s0) +80001378: 9ce7a823 sw a4,-1584(a5) # 810029d0 +8000137c: 810037b7 lui a5,0x81003 +80001380: 9d078793 addi a5,a5,-1584 # 810029d0 +80001384: fd842703 lw a4,-40(s0) +80001388: 00e7a223 sw a4,4(a5) +8000138c: 810037b7 lui a5,0x81003 +80001390: 9d078793 addi a5,a5,-1584 # 810029d0 +80001394: fd442703 lw a4,-44(s0) +80001398: 00e7a423 sw a4,8(a5) +8000139c: 810037b7 lui a5,0x81003 +800013a0: 9d078793 addi a5,a5,-1584 # 810029d0 +800013a4: fcc42703 lw a4,-52(s0) +800013a8: 00e7a623 sw a4,12(a5) +800013ac: 810037b7 lui a5,0x81003 +800013b0: 9d078793 addi a5,a5,-1584 # 810029d0 +800013b4: fd042703 lw a4,-48(s0) +800013b8: 00e7a823 sw a4,16(a5) +800013bc: df1fe0ef jal ra,800001ac +800013c0: fea42423 sw a0,-24(s0) +800013c4: fcc42703 lw a4,-52(s0) +800013c8: fe842783 lw a5,-24(s0) +800013cc: 02f757b3 divu a5,a4,a5 +800013d0: fef42623 sw a5,-20(s0) +800013d4: fcc42703 lw a4,-52(s0) +800013d8: fe842783 lw a5,-24(s0) +800013dc: 02f777b3 remu a5,a4,a5 +800013e0: 00078863 beqz a5,800013f0 +800013e4: fec42783 lw a5,-20(s0) +800013e8: 00178793 addi a5,a5,1 +800013ec: fef42623 sw a5,-20(s0) +800013f0: 810037b7 lui a5,0x81003 +800013f4: 9d078793 addi a5,a5,-1584 # 810029d0 +800013f8: fec42703 lw a4,-20(s0) +800013fc: 00e7aa23 sw a4,20(a5) +80001400: fcc42703 lw a4,-52(s0) +80001404: fe842783 lw a5,-24(s0) +80001408: 02f76263 bltu a4,a5,8000142c +8000140c: 810037b7 lui a5,0x81003 +80001410: 9d078693 addi a3,a5,-1584 # 810029d0 +80001414: 800017b7 lui a5,0x80001 +80001418: 48478613 addi a2,a5,1156 # 80001484 +8000141c: fe842583 lw a1,-24(s0) +80001420: fd042503 lw a0,-48(s0) +80001424: fe9fe0ef jal ra,8000040c +80001428: 0200006f j 80001448 +8000142c: 810037b7 lui a5,0x81003 +80001430: 9d078693 addi a3,a5,-1584 # 810029d0 +80001434: 800017b7 lui a5,0x80001 +80001438: 48478613 addi a2,a5,1156 # 80001484 +8000143c: fcc42583 lw a1,-52(s0) +80001440: fd042503 lw a0,-48(s0) +80001444: fc9fe0ef jal ra,8000040c +80001448: d5dfe0ef jal ra,800001a4 +8000144c: fea42223 sw a0,-28(s0) +80001450: fd042703 lw a4,-48(s0) +80001454: fe442783 lw a5,-28(s0) +80001458: 00e7f863 bgeu a5,a4,80001468 +8000145c: fe442503 lw a0,-28(s0) +80001460: 898ff0ef jal ra,800004f8 +80001464: 00c0006f j 80001470 +80001468: fd042503 lw a0,-48(s0) +8000146c: 88cff0ef jal ra,800004f8 +80001470: 00000013 nop +80001474: 03c12083 lw ra,60(sp) +80001478: 03812403 lw s0,56(sp) +8000147c: 04010113 addi sp,sp,64 +80001480: 00008067 ret + +80001484 <_vx_e_mat_mult>: +80001484: fb010113 addi sp,sp,-80 +80001488: 04112623 sw ra,76(sp) +8000148c: 04812423 sw s0,72(sp) +80001490: 05010413 addi s0,sp,80 +80001494: faa42e23 sw a0,-68(s0) +80001498: fab42c23 sw a1,-72(s0) +8000149c: 928ff0ef jal ra,800005c4 +800014a0: fea42023 sw a0,-32(s0) +800014a4: fe042783 lw a5,-32(s0) +800014a8: 0007a783 lw a5,0(a5) +800014ac: fcf42e23 sw a5,-36(s0) +800014b0: fe042783 lw a5,-32(s0) +800014b4: 0047a783 lw a5,4(a5) +800014b8: 0007a783 lw a5,0(a5) +800014bc: fcf42c23 sw a5,-40(s0) +800014c0: fe042783 lw a5,-32(s0) +800014c4: 0087a783 lw a5,8(a5) +800014c8: fcf42a23 sw a5,-44(s0) +800014cc: fe042783 lw a5,-32(s0) +800014d0: 0147a783 lw a5,20(a5) +800014d4: fef42623 sw a5,-20(s0) +800014d8: fec42703 lw a4,-20(s0) +800014dc: fbc42783 lw a5,-68(s0) +800014e0: 02f707b3 mul a5,a4,a5 +800014e4: fef42423 sw a5,-24(s0) +800014e8: fec42783 lw a5,-20(s0) +800014ec: 00079a63 bnez a5,80001500 <_vx_e_mat_mult+0x7c> +800014f0: 00100793 li a5,1 +800014f4: fef42623 sw a5,-20(s0) +800014f8: fbc42783 lw a5,-68(s0) +800014fc: fef42423 sw a5,-24(s0) +80001500: fe042783 lw a5,-32(s0) +80001504: 00c7a783 lw a5,12(a5) +80001508: fcf42823 sw a5,-48(s0) +8000150c: fe042223 sw zero,-28(s0) +80001510: 0b00006f j 800015c0 <_vx_e_mat_mult+0x13c> +80001514: fb842703 lw a4,-72(s0) +80001518: fd042783 lw a5,-48(s0) +8000151c: 02f70733 mul a4,a4,a5 +80001520: fe842783 lw a5,-24(s0) +80001524: 00f707b3 add a5,a4,a5 +80001528: fcf42623 sw a5,-52(s0) +8000152c: fe842703 lw a4,-24(s0) +80001530: fd042783 lw a5,-48(s0) +80001534: 00f737b3 sltu a5,a4,a5 +80001538: 0ff7f793 andi a5,a5,255 +8000153c: fcf42423 sw a5,-56(s0) +80001540: fc842783 lw a5,-56(s0) +80001544: 0017b793 seqz a5,a5 +80001548: fcf403a3 sb a5,-57(s0) +8000154c: fc744783 lbu a5,-57(s0) +80001550: 00078f13 mv t5,a5 +80001554: 800017b7 lui a5,0x80001 +80001558: 5ac78f93 addi t6,a5,1452 # 800015ac +8000155c: 000f206b 0xf206b +80001560: 01ff707b 0x1ff707b +80001564: fcc42783 lw a5,-52(s0) +80001568: 00279793 slli a5,a5,0x2 +8000156c: fdc42703 lw a4,-36(s0) +80001570: 00f707b3 add a5,a4,a5 +80001574: 0007a683 lw a3,0(a5) +80001578: fcc42783 lw a5,-52(s0) +8000157c: 00279793 slli a5,a5,0x2 +80001580: fd442703 lw a4,-44(s0) +80001584: 00f707b3 add a5,a4,a5 +80001588: fd842703 lw a4,-40(s0) +8000158c: 02e68733 mul a4,a3,a4 +80001590: 00e7a023 sw a4,0(a5) +80001594: fe842783 lw a5,-24(s0) +80001598: 00178793 addi a5,a5,1 +8000159c: fef42423 sw a5,-24(s0) +800015a0: 800017b7 lui a5,0x80001 +800015a4: 5b078e13 addi t3,a5,1456 # 800015b0 +800015a8: 000e0067 jr t3 +800015ac: 00000013 nop +800015b0: 0000306b 0x306b +800015b4: fe442783 lw a5,-28(s0) +800015b8: 00178793 addi a5,a5,1 +800015bc: fef42223 sw a5,-28(s0) +800015c0: fe442783 lw a5,-28(s0) +800015c4: fec42703 lw a4,-20(s0) +800015c8: f4e7e6e3 bltu a5,a4,80001514 <_vx_e_mat_mult+0x90> +800015cc: 00000013 nop +800015d0: 04c12083 lw ra,76(sp) +800015d4: 04812403 lw s0,72(sp) +800015d8: 05010113 addi sp,sp,80 +800015dc: 00008067 ret + +800015e0 : +800015e0: fe010113 addi sp,sp,-32 +800015e4: 00812e23 sw s0,28(sp) +800015e8: 02010413 addi s0,sp,32 +800015ec: fe042623 sw zero,-20(s0) +800015f0: 0480006f j 80001638 +800015f4: 810037b7 lui a5,0x81003 +800015f8: fec42703 lw a4,-20(s0) +800015fc: 00271713 slli a4,a4,0x2 +80001600: 9e878793 addi a5,a5,-1560 # 810029e8 +80001604: 00f707b3 add a5,a4,a5 +80001608: 00300713 li a4,3 +8000160c: 00e7a023 sw a4,0(a5) +80001610: 810047b7 lui a5,0x81004 +80001614: fec42703 lw a4,-20(s0) +80001618: 00271713 slli a4,a4,0x2 +8000161c: 9e878793 addi a5,a5,-1560 # 810039e8 +80001620: 00f707b3 add a5,a4,a5 +80001624: 00200713 li a4,2 +80001628: 00e7a023 sw a4,0(a5) +8000162c: fec42783 lw a5,-20(s0) +80001630: 00178793 addi a5,a5,1 +80001634: fef42623 sw a5,-20(s0) +80001638: fec42703 lw a4,-20(s0) +8000163c: 0ff00793 li a5,255 +80001640: fae7dae3 bge a5,a4,800015f4 +80001644: 00000013 nop +80001648: 01c12403 lw s0,28(sp) +8000164c: 02010113 addi sp,sp,32 +80001650: 00008067 ret + +80001654 : +80001654: fd010113 addi sp,sp,-48 +80001658: 02112623 sw ra,44(sp) +8000165c: 02812423 sw s0,40(sp) +80001660: 03010413 addi s0,sp,48 +80001664: fca42e23 sw a0,-36(s0) +80001668: 810007b7 lui a5,0x81000 +8000166c: 11078513 addi a0,a5,272 # 81000110 +80001670: 8c0ff0ef jal ra,80000730 +80001674: fe042623 sw zero,-20(s0) +80001678: 0580006f j 800016d0 +8000167c: fec42783 lw a5,-20(s0) +80001680: 00078e63 beqz a5,8000169c +80001684: fec42783 lw a5,-20(s0) +80001688: 00f7f793 andi a5,a5,15 +8000168c: 00079863 bnez a5,8000169c +80001690: 810007b7 lui a5,0x81000 +80001694: 13478513 addi a0,a5,308 # 81000134 +80001698: 898ff0ef jal ra,80000730 +8000169c: fec42783 lw a5,-20(s0) +800016a0: 00279793 slli a5,a5,0x2 +800016a4: fdc42703 lw a4,-36(s0) +800016a8: 00f707b3 add a5,a4,a5 +800016ac: 0007a783 lw a5,0(a5) +800016b0: 00078513 mv a0,a5 +800016b4: 8b8ff0ef jal ra,8000076c +800016b8: 810007b7 lui a5,0x81000 +800016bc: 13878513 addi a0,a5,312 # 81000138 +800016c0: 870ff0ef jal ra,80000730 +800016c4: fec42783 lw a5,-20(s0) +800016c8: 00178793 addi a5,a5,1 +800016cc: fef42623 sw a5,-20(s0) +800016d0: fec42703 lw a4,-20(s0) +800016d4: 0ff00793 li a5,255 +800016d8: fae7d2e3 bge a5,a4,8000167c +800016dc: 810007b7 lui a5,0x81000 +800016e0: 13c78513 addi a0,a5,316 # 8100013c +800016e4: 84cff0ef jal ra,80000730 +800016e8: 00000013 nop +800016ec: 02c12083 lw ra,44(sp) +800016f0: 02812403 lw s0,40(sp) +800016f4: 03010113 addi sp,sp,48 +800016f8: 00008067 ret + +800016fc
: +800016fc: fe010113 addi sp,sp,-32 +80001700: 00112e23 sw ra,28(sp) +80001704: 00812c23 sw s0,24(sp) +80001708: 02010413 addi s0,sp,32 +8000170c: ed5ff0ef jal ra,800015e0 +80001710: 01000693 li a3,16 +80001714: 810057b7 lui a5,0x81005 +80001718: 9e878613 addi a2,a5,-1560 # 810049e8 +8000171c: 810047b7 lui a5,0x81004 +80001720: 9e878593 addi a1,a5,-1560 # 810039e8 +80001724: 810037b7 lui a5,0x81003 +80001728: 9e878513 addi a0,a5,-1560 # 810029e8 +8000172c: 94cff0ef jal ra,80000878 +80001730: 810007b7 lui a5,0x81000 +80001734: 16078513 addi a0,a5,352 # 81000160 +80001738: ff9fe0ef jal ra,80000730 +8000173c: 810057b7 lui a5,0x81005 +80001740: 9e878513 addi a0,a5,-1560 # 810049e8 +80001744: f11ff0ef jal ra,80001654 +80001748: 01000713 li a4,16 +8000174c: 01000693 li a3,16 +80001750: 810057b7 lui a5,0x81005 +80001754: 9e878613 addi a2,a5,-1560 # 810049e8 +80001758: 810047b7 lui a5,0x81004 +8000175c: 9e878593 addi a1,a5,-1560 # 810039e8 +80001760: 810037b7 lui a5,0x81003 +80001764: 9e878513 addi a0,a5,-1560 # 810029e8 +80001768: c10ff0ef jal ra,80000b78 +8000176c: 810007b7 lui a5,0x81000 +80001770: 17c78513 addi a0,a5,380 # 8100017c +80001774: fbdfe0ef jal ra,80000730 +80001778: 810057b7 lui a5,0x81005 +8000177c: 9e878513 addi a0,a5,-1560 # 810049e8 +80001780: ed5ff0ef jal ra,80001654 +80001784: 01000713 li a4,16 +80001788: 01000693 li a3,16 +8000178c: 810057b7 lui a5,0x81005 +80001790: 9e878613 addi a2,a5,-1560 # 810049e8 +80001794: 810047b7 lui a5,0x81004 +80001798: 9e878593 addi a1,a5,-1560 # 810039e8 +8000179c: 810037b7 lui a5,0x81003 +800017a0: 9e878513 addi a0,a5,-1560 # 810029e8 +800017a4: e74ff0ef jal ra,80000e18 +800017a8: 810007b7 lui a5,0x81000 +800017ac: 19078513 addi a0,a5,400 # 81000190 +800017b0: f81fe0ef jal ra,80000730 +800017b4: 810057b7 lui a5,0x81005 +800017b8: 9e878513 addi a0,a5,-1560 # 810049e8 +800017bc: e99ff0ef jal ra,80001654 +800017c0: 00300793 li a5,3 +800017c4: fef42623 sw a5,-20(s0) +800017c8: fec40593 addi a1,s0,-20 +800017cc: 01000713 li a4,16 +800017d0: 01000693 li a3,16 +800017d4: 810057b7 lui a5,0x81005 +800017d8: 9e878613 addi a2,a5,-1560 # 810049e8 +800017dc: 810057b7 lui a5,0x81005 +800017e0: 9e878513 addi a0,a5,-1560 # 810049e8 +800017e4: 8d5ff0ef jal ra,800010b8 +800017e8: 810007b7 lui a5,0x81000 +800017ec: 1a878513 addi a0,a5,424 # 810001a8 +800017f0: f41fe0ef jal ra,80000730 +800017f4: 810057b7 lui a5,0x81005 +800017f8: 9e878513 addi a0,a5,-1560 # 810049e8 +800017fc: e59ff0ef jal ra,80001654 +80001800: fec40593 addi a1,s0,-20 +80001804: 01000713 li a4,16 +80001808: 01000693 li a3,16 +8000180c: 810057b7 lui a5,0x81005 +80001810: 9e878613 addi a2,a5,-1560 # 810049e8 +80001814: 810057b7 lui a5,0x81005 +80001818: 9e878513 addi a0,a5,-1560 # 810049e8 +8000181c: b31ff0ef jal ra,8000134c +80001820: 810007b7 lui a5,0x81000 +80001824: 1a878513 addi a0,a5,424 # 810001a8 +80001828: f09fe0ef jal ra,80000730 +8000182c: 810057b7 lui a5,0x81005 +80001830: 9e878513 addi a0,a5,-1560 # 810049e8 +80001834: e21ff0ef jal ra,80001654 +80001838: 00000793 li a5,0 +8000183c: 00078513 mv a0,a5 +80001840: 01c12083 lw ra,28(sp) +80001844: 01812403 lw s0,24(sp) +80001848: 02010113 addi sp,sp,32 +8000184c: 00008067 ret + +Disassembly of section .rodata: + +81000000 <.rodata>: +81000000: 0030 addi a2,sp,8 +81000002: 0000 unimp +81000004: 0031 c.nop 12 +81000006: 0000 unimp +81000008: 0032 c.slli zero,0xc +8100000a: 0000 unimp +8100000c: 00000033 add zero,zero,zero +81000010: 0034 addi a3,sp,8 +81000012: 0000 unimp +81000014: 0035 c.nop 13 +81000016: 0000 unimp +81000018: 0036 c.slli zero,0xd +8100001a: 0000 unimp +8100001c: 00000037 lui zero,0x0 +81000020: 0038 addi a4,sp,8 +81000022: 0000 unimp +81000024: 0039 c.nop 14 +81000026: 0000 unimp +81000028: 0061 c.nop 24 +8100002a: 0000 unimp +8100002c: 0062 c.slli zero,0x18 +8100002e: 0000 unimp +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: 0030 addi a2,sp,8 +81000042: 0000 unimp +81000044: 0031 c.nop 12 +81000046: 0000 unimp +81000048: 0032 c.slli zero,0xc +8100004a: 0000 unimp +8100004c: 00000033 add zero,zero,zero +81000050: 0034 addi a3,sp,8 +81000052: 0000 unimp +81000054: 0035 c.nop 13 +81000056: 0000 unimp +81000058: 0036 c.slli zero,0xd +8100005a: 0000 unimp +8100005c: 00000037 lui zero,0x0 +81000060: 0038 addi a4,sp,8 +81000062: 0000 unimp +81000064: 0039 c.nop 14 +81000066: 0000 unimp +81000068: 0061 c.nop 24 +8100006a: 0000 unimp +8100006c: 0062 c.slli zero,0x18 +8100006e: 0000 unimp +81000070: 00000063 beqz zero,81000070 +81000074: 0064 addi s1,sp,12 +81000076: 0000 unimp +81000078: 0065 c.nop 25 +8100007a: 0000 unimp +8100007c: 0066 c.slli zero,0x19 +8100007e: 0000 unimp +81000080: 000a c.slli zero,0x2 +81000082: 0000 unimp +81000084: 0030 addi a2,sp,8 +81000086: 0000 unimp +81000088: 0031 c.nop 12 +8100008a: 0000 unimp +8100008c: 0032 c.slli zero,0xc +8100008e: 0000 unimp +81000090: 00000033 add zero,zero,zero +81000094: 0034 addi a3,sp,8 +81000096: 0000 unimp +81000098: 0035 c.nop 13 +8100009a: 0000 unimp +8100009c: 0036 c.slli zero,0xd +8100009e: 0000 unimp +810000a0: 00000037 lui zero,0x0 +810000a4: 0038 addi a4,sp,8 +810000a6: 0000 unimp +810000a8: 0039 c.nop 14 +810000aa: 0000 unimp +810000ac: 0061 c.nop 24 +810000ae: 0000 unimp +810000b0: 0062 c.slli zero,0x18 +810000b2: 0000 unimp +810000b4: 00000063 beqz zero,810000b4 +810000b8: 0064 addi s1,sp,12 +810000ba: 0000 unimp +810000bc: 0065 c.nop 25 +810000be: 0000 unimp +810000c0: 0066 c.slli zero,0x19 +810000c2: 0000 unimp +810000c4: 7366664f fnmadd.d fa2,fa2,fs6,fa4,unknown +810000c8: 7465 lui s0,0xffff9 +810000ca: 203a fld ft0,392(sp) +810000cc: 0000 unimp +810000ce: 0000 unimp +810000d0: 0030 addi a2,sp,8 +810000d2: 0000 unimp +810000d4: 0031 c.nop 12 +810000d6: 0000 unimp +810000d8: 0032 c.slli zero,0xc +810000da: 0000 unimp +810000dc: 00000033 add zero,zero,zero +810000e0: 0034 addi a3,sp,8 +810000e2: 0000 unimp +810000e4: 0035 c.nop 13 +810000e6: 0000 unimp +810000e8: 0036 c.slli zero,0xd +810000ea: 0000 unimp +810000ec: 00000037 lui zero,0x0 +810000f0: 0038 addi a4,sp,8 +810000f2: 0000 unimp +810000f4: 0039 c.nop 14 +810000f6: 0000 unimp +810000f8: 0061 c.nop 24 +810000fa: 0000 unimp +810000fc: 0062 c.slli zero,0x18 +810000fe: 0000 unimp +81000100: 00000063 beqz zero,81000100 +81000104: 0064 addi s1,sp,12 +81000106: 0000 unimp +81000108: 0065 c.nop 25 +8100010a: 0000 unimp +8100010c: 0066 c.slli zero,0x19 +8100010e: 0000 unimp +81000110: 2d2d jal 8100074a +81000112: 2d2d jal 8100074c +81000114: 2d2d jal 8100074e +81000116: 2d2d jal 81000750 +81000118: 2d2d jal 81000752 +8100011a: 2d2d jal 81000754 +8100011c: 2d2d jal 81000756 +8100011e: 2d2d jal 81000758 +81000120: 2d2d jal 8100075a +81000122: 2d2d jal 8100075c +81000124: 2d2d jal 8100075e +81000126: 2d2d jal 81000760 +81000128: 2d2d jal 81000762 +8100012a: 2d2d jal 81000764 +8100012c: 2d2d jal 81000766 +8100012e: 0a2d addi s4,s4,11 +81000130: 0000 unimp +81000132: 0000 unimp +81000134: 000a c.slli zero,0x2 +81000136: 0000 unimp +81000138: 0020 addi s0,sp,8 +8100013a: 0000 unimp +8100013c: 2d0a fld fs10,128(sp) +8100013e: 2d2d jal 81000778 +81000140: 2d2d jal 8100077a +81000142: 2d2d jal 8100077c +81000144: 2d2d jal 8100077e +81000146: 2d2d jal 81000780 +81000148: 2d2d jal 81000782 +8100014a: 2d2d jal 81000784 +8100014c: 2d2d jal 81000786 +8100014e: 2d2d jal 81000788 +81000150: 2d2d jal 8100078a +81000152: 2d2d jal 8100078c +81000154: 2d2d jal 8100078e +81000156: 2d2d jal 81000790 +81000158: 2d2d jal 81000792 +8100015a: 2d2d jal 81000794 +8100015c: 000a c.slli zero,0x2 +8100015e: 0000 unimp +81000160: 0a0a slli s4,s4,0x2 +81000162: 614d addi sp,sp,176 +81000164: 7274 flw fa3,100(a2) +81000166: 7869 lui a6,0xffffa +81000168: 6d20 flw fs0,88(a0) +8100016a: 6c75 lui s8,0x1d +8100016c: 6974 flw fa3,84(a0) +8100016e: 6c70 flw fa2,92(s0) +81000170: 6369 lui t1,0x1a +81000172: 7461 lui s0,0xffff8 +81000174: 6f69 lui t5,0x1a +81000176: 0a6e slli s4,s4,0x1b +81000178: 0000 unimp +8100017a: 0000 unimp +8100017c: 0a0a slli s4,s4,0x2 +8100017e: 614d addi sp,sp,176 +81000180: 7274 flw fa3,100(a2) +81000182: 7869 lui a6,0xffffa +81000184: 4120 lw s0,64(a0) +81000186: 6464 flw fs1,76(s0) +81000188: 7469 lui s0,0xffffa +8100018a: 6f69 lui t5,0x1a +8100018c: 0a6e slli s4,s4,0x1b +8100018e: 0000 unimp +81000190: 0a0a slli s4,s4,0x2 +81000192: 614d addi sp,sp,176 +81000194: 7274 flw fa3,100(a2) +81000196: 7869 lui a6,0xffffa +81000198: 5320 lw s0,96(a4) +8100019a: 6275 lui tp,0x1d +8100019c: 7274 flw fa3,100(a2) +8100019e: 6361 lui t1,0x18 +810001a0: 6974 flw fa3,84(a0) +810001a2: 000a6e6f jal t3,810a61a2 +810001a6: 0000 unimp +810001a8: 0a0a slli s4,s4,0x2 +810001aa: 614d addi sp,sp,176 +810001ac: 7274 flw fa3,100(a2) +810001ae: 7869 lui a6,0xffffa +810001b0: 4520 lw s0,72(a0) +810001b2: 656c flw fa1,76(a0) +810001b4: 656d lui a0,0x1b +810001b6: 746e flw fs0,248(sp) +810001b8: 4120 lw s0,64(a0) +810001ba: 6464 flw fs1,76(s0) +810001bc: 7469 lui s0,0xffffa +810001be: 6f69 lui t5,0x1a +810001c0: 0a6e slli s4,s4,0x1b + ... + +Disassembly of section .data: + +810001c4 : +810001c4: 0000 unimp +810001c6: 8100 0x8100 +810001c8: 0004 0x4 +810001ca: 8100 0x8100 +810001cc: 0008 0x8 +810001ce: 8100 0x8100 +810001d0: 000c 0xc +810001d2: 8100 0x8100 +810001d4: 0010 0x10 +810001d6: 8100 0x8100 +810001d8: 0014 0x14 +810001da: 8100 0x8100 +810001dc: 0018 0x18 +810001de: 8100 0x8100 +810001e0: 001c 0x1c +810001e2: 8100 0x8100 +810001e4: 0020 addi s0,sp,8 +810001e6: 8100 0x8100 +810001e8: 0024 addi s1,sp,8 +810001ea: 8100 0x8100 +810001ec: 0028 addi a0,sp,8 +810001ee: 8100 0x8100 +810001f0: 002c addi a1,sp,8 +810001f2: 8100 0x8100 +810001f4: 0030 addi a2,sp,8 +810001f6: 8100 0x8100 +810001f8: 0034 addi a3,sp,8 +810001fa: 8100 0x8100 +810001fc: 0038 addi a4,sp,8 +810001fe: 8100 0x8100 +81000200: 003c addi a5,sp,8 +81000202: 8100 0x8100 + +81000204 : +81000204: 0040 addi s0,sp,4 +81000206: 8100 0x8100 +81000208: 0044 addi s1,sp,4 +8100020a: 8100 0x8100 +8100020c: 0048 addi a0,sp,4 +8100020e: 8100 0x8100 +81000210: 004c addi a1,sp,4 +81000212: 8100 0x8100 +81000214: 0050 addi a2,sp,4 +81000216: 8100 0x8100 +81000218: 0054 addi a3,sp,4 +8100021a: 8100 0x8100 +8100021c: 0058 addi a4,sp,4 +8100021e: 8100 0x8100 +81000220: 005c addi a5,sp,4 +81000222: 8100 0x8100 +81000224: 0060 addi s0,sp,12 +81000226: 8100 0x8100 +81000228: 0064 addi s1,sp,12 +8100022a: 8100 0x8100 +8100022c: 0068 addi a0,sp,12 +8100022e: 8100 0x8100 +81000230: 006c addi a1,sp,12 +81000232: 8100 0x8100 +81000234: 0070 addi a2,sp,12 +81000236: 8100 0x8100 +81000238: 0074 addi a3,sp,12 +8100023a: 8100 0x8100 +8100023c: 0078 addi a4,sp,12 +8100023e: 8100 0x8100 +81000240: 007c addi a5,sp,12 +81000242: 8100 0x8100 + +81000244 : +81000244: 0084 addi s1,sp,64 +81000246: 8100 0x8100 +81000248: 0088 addi a0,sp,64 +8100024a: 8100 0x8100 +8100024c: 008c addi a1,sp,64 +8100024e: 8100 0x8100 +81000250: 0090 addi a2,sp,64 +81000252: 8100 0x8100 +81000254: 0094 addi a3,sp,64 +81000256: 8100 0x8100 +81000258: 0098 addi a4,sp,64 +8100025a: 8100 0x8100 +8100025c: 009c addi a5,sp,64 +8100025e: 8100 0x8100 +81000260: 00a0 addi s0,sp,72 +81000262: 8100 0x8100 +81000264: 00a4 addi s1,sp,72 +81000266: 8100 0x8100 +81000268: 00a8 addi a0,sp,72 +8100026a: 8100 0x8100 +8100026c: 00ac addi a1,sp,72 +8100026e: 8100 0x8100 +81000270: 00b0 addi a2,sp,72 +81000272: 8100 0x8100 +81000274: 00b4 addi a3,sp,72 +81000276: 8100 0x8100 +81000278: 00b8 addi a4,sp,72 +8100027a: 8100 0x8100 +8100027c: 00bc addi a5,sp,72 +8100027e: 8100 0x8100 +81000280: 00c0 addi s0,sp,68 +81000282: 8100 0x8100 + +81000284 : +81000284: 00d0 addi a2,sp,68 +81000286: 8100 0x8100 +81000288: 00d4 addi a3,sp,68 +8100028a: 8100 0x8100 +8100028c: 00d8 addi a4,sp,68 +8100028e: 8100 0x8100 +81000290: 00dc addi a5,sp,68 +81000292: 8100 0x8100 +81000294: 00e0 addi s0,sp,76 +81000296: 8100 0x8100 +81000298: 00e4 addi s1,sp,76 +8100029a: 8100 0x8100 +8100029c: 00e8 addi a0,sp,76 +8100029e: 8100 0x8100 +810002a0: 00ec addi a1,sp,76 +810002a2: 8100 0x8100 +810002a4: 00f0 addi a2,sp,76 +810002a6: 8100 0x8100 +810002a8: 00f4 addi a3,sp,76 +810002aa: 8100 0x8100 +810002ac: 00f8 addi a4,sp,76 +810002ae: 8100 0x8100 +810002b0: 00fc addi a5,sp,76 +810002b2: 8100 0x8100 +810002b4: 0100 addi s0,sp,128 +810002b6: 8100 0x8100 +810002b8: 0104 addi s1,sp,128 +810002ba: 8100 0x8100 +810002bc: 0108 addi a0,sp,128 +810002be: 8100 0x8100 +810002c0: 010c addi a1,sp,128 +810002c2: 8100 0x8100 + +Disassembly of section .bss: + +810002c4 : + ... + +810002e0 : +810002e0: 0000 unimp + ... + +810002e4 : + ... + +81000364 : + ... + +81002984 : + ... + +810029a0 : +810029a0: 0000 unimp + ... + +810029a4 : + ... + +810029b8 : + ... + +810029d0 : + ... + +810029e8 : + ... + +810039e8 : + ... + +810049e8 : + ... + +810059e8 : + ... + +81005a04 : +81005a04: 0000 unimp + ... + +Disassembly of section .comment: + +82000000 <.comment>: +82000000: 3a434347 fmsub.d ft6,ft6,ft4,ft7,rmm +82000004: 2820 fld fs0,80(s0) +82000006: 29554e47 fmsub.s ft8,fa0,fs5,ft5,rmm +8200000a: 3820 fld fs0,112(s0) +8200000c: 322e fld ft4,232(sp) +8200000e: 302e fld ft0,232(sp) + ... diff --git a/kernel/vortex_test.elf b/kernel/vortex_test.elf new file mode 100755 index 0000000000000000000000000000000000000000..6482f6dd1a2ff1b347ec5b7751d30cb65bfad028 GIT binary patch literal 15536 zcmeHO4RBP|6~6B;FDRPeqF}XV&C4G#Y`}m>tDO*n(J59&>0qtxx_^O4$cEhwKep5E z<}C#457u>B2Y*5(Rq8m_3T>RRGsUnD)2S`i*4Akq$p|%Q)dZUwn*B+?bKiTrk2LXL zr_StS&fa_OJ?GqW&OPVc`OI&Mpw;cj6k6wjC1}4gs>PvQe>?72F8kL#NeY|;VF2a;DLe%3LYqUpx}Xm2MQi2 zc%a~cf(Hs7D0raYfzQYT4yBQWOBKUj@Gke$^qC+V%OO1buX86O%6NX8MH#Oez-zy}U_~v~EGy1_Y@>6!nTG zQL5|~^~wQJsuCr=s!5WnyCuDPK$2=iS+8l5rFq@5K5sylYDGn_ZBnF*x)uGR0Y$14 zi}bptB58hikv@N*NOFm)?rKt{`fgRPAAmlL>l3bIBKav?S;|}ZJgd28!7nl9kOlZc z&ITF7y2)%pZCu%)j*0y$izRwmF4?D!F~>HQ4YS5Zo#uPyz_+7WgSL|${mW3=f&JB; z&%mCT0NK_W8Les-d>w<&ePBnuLbzBFvlxe$% zz<&nw{RsMu9CgKGWv-_}a+ZXCf)$#1nH;3MJ#Ad)x?mr|{ zk@}&fkj-82URhl##0ISCqEahg`d)jty}g zXiYv>LGt2R%%_g78++FwkpFrIr?E8`-xS-hH4WO|YR*3BPc}88hUDy%$iF1p9@Ekz zDvurC+%bwtn|^tHNH+;_dvtJ!{7<@Nj?Nw%*UD*)D9=+K3$|R*c2kTu8}iCW!P9KW zcq5mqJicwQJ)u>_P&YRUutiApoX&Gbs(6O!7okSr3trmagowH=p_Mw3i(aNZ1n2`i zjM}=_%WDnMNPD_L=iqY=y-Cm?Z(@nWw^@S}X42yd>hM89dVB?HHMQHYF162MFQ`=n zt%lDFTJ1q0apwg%Gn|s|p0|a>nG9>bkkiFj=U)?~gRzc?Gs7u4cAg2IGUl5-Avj9F zv-?#cx4ugP{;VLmmO~b`I`pLWAnc%4612U1UeF$W_SCiL3_26K%zGO&u|2``?FGI zGK<>qwp1BM+k3*OM{4o#NZDIv{!M$nSow!qlSZvcqt>MRmr%YXGulH#yQrV&Y1xJR zBb?>&=8V>7$K{On@DSzv9a=>nwY;W1sKZivf+Yjy1VY7tV4qG3?IXuNY>b^1mD14-AsGo*B)UcC~UD*tu zmGz^JqEB+%zcPI`InT#&?#np$=?p8QMxZ^0e`%k`5ob8(jXn46GUA5jY0elYS%;A4qiLgVHJ+t8Q5#)y8Z}JCzKmn- zG|7R?48<+t5cMujb)ImHV;^YTNjfyA6F;toPn$U{)lnU17LDO-%HM+BzgBfDp97CsInZ+-Y_jD5;r1LL9QlJB zFyfbRt?fD!i+ivu<*ozd_%bXH-$T5tQ9+_O+A#dRG zG>2 zhZeqXOujZW`mt-~ClQl_Wk)`}m~6Q+7n6g%cvrRVwN^~hycv^&z3Jh>BQH)JlRIzC z$K>H1A1)?$-u?NF$wN1MgqReku9NCFKSoUAo^Jo1Fe+0mlyLVq-ZOh1q?~Z53-}$P zzh$a9r+L4i_su!<9>L!o@ZMT-^lwAsw5Ry4Vao3gt#>=~eQ*}e*4vHmSE7mz9ej84 zJ5H9~U48fBE>7PYZfkK2kL1TQ zIBv$>prqy=KT<_gvKelX>3W*AujF*pGyQ{hX`=*}?U5-(m3gd;$EU zHvWISH(%MlJYVlfp0Dgxd=J6*V)FOK2!+B^@Ib)>1rHQFQ1C#(1OMk9pg+@J2)G!~ z0HDA5Uktbeumo@^U@5=@@B(}QKOg{T1$?(i*R-~V1CcK|A?jo6GylCGQkT(( zliK&DolkV9op!Y+5^CGx+|bn?Y3pon^LZj|!45-?HMh*~Z!<@8^w)KHBO#B^BF>Gk zXb)@%bVQss9xM}+0mXos0Q|%vHXDGSWW>$~H~|%a8bBQYdlth!$FR4t%K(jlX26wz zm4H=%)qv{(Hv(<~_yOwx?SM`|1h570T|gYL18_UwF2Fs2djaJ~ zC&fwsMvhAi`;mKy|5;$TvYXF|iQl6~Id42CCSE|Nvna3si@^JAIQE96ZTR1T&sFpE zuK>3mTJJnK=rY^<1;AI?@C$7YBzn?chCPjF1$cPgqMRm!55n)JKTZYgF_vWxhCj&@ZE zi>@>Ar_sKN^}){Pp99_}N5Dn#$?;Xdk6)Fy_gdiXm`|GXZs4uG;gyHvA|Bkzt5TS z$AQOZ=lwSW_LSP>)8EWJF*Cp48t~PyXRpbh0{==!UVm1<$rGw?4YvCOp>Tbuwf^Er z!=i@8x7^&Ybn%k)4L5IEAKvI)w|G%#0iLy;^{eaaeZHopYp;pi;tI0%V6fBO*3lL* zdcI(X-{|>+9RZ`~4f?lQbUwCei`(n*t#|p@22WduJKV|E1-3+jo{yx)@|&BR)+~h@ z%iL?0UAyW!cHLDstY85j^ZVGwR<<$lk)&R+Y{S+oZiZBEJM#ueDk;ty|8axz~9v#aBud6 zI>U^d+2(0)yCnerNSIS>q%L2Pxw+hkJKW`E8@mEs0q%W+foMIOJZLNw^9EXjA=0Fc>&jVMxe{DGx5w|d)CjNG&>7jv zZpkg-#?BJb9`yKg>%#?}P+kr4h$+Ay;Pw!QFBI@Z0;|`d@rTXnoMDD;rtRS?y4u@w zPN6+v8%aWr+8r^aU~sdiE#ihfrl-l3h7|@M_hz8O(8BUF8OW`sEx`4RF;{r&hKR?D zHWD)0bykmi*cA%;JrNIc8K2&8n7Mqx4RjZy8u3A&^FW9aVf+@B>I>>W{dU%RWV3T2 zTB1W*(-WhM?LitaAB%1ta2iHA;OBpmF7s2+)nmBWqC*``;_z>#L)CmNd5eG(JC>uT zo9Jd4ef~*v7MQy6@t5c_fxn@mJ4Q8t5Ukb<4lmizaK1qB50>K$jQs%RPK*v0M8$9;zw7=?s~?EVo?v1k)zDKj zJzX4&IZ2fY733LFKbVt1VFgM?KpV>)8j7aAhPZ;osXIx-6%RU}(?ipV3hFd&* z=U?xK-F820x!-+E?D#>7N&zV#1*Cu!kOIF_z-upUxk}V11*Cu!_)@^X4~_2F7mkVX z>EIA80CB-^80XPT5Ss^xec_nM2+fj8OsZ9jVM%AaRbF2>CMF#gH}jmj*{VaaxSjD9 z>99UgqZE(=Qw2_Q*?IlHqW{qUPf1!y0V(jW6tKnSX0zs#s= num_avail_threads) + { + vx_spawnWarps(mat_dim, num_avail_threads, _vx_mat_mult, (void *) (&mat_mult_args)); + } + else + { + vx_spawnWarps(mat_dim, mat_dim, _vx_mat_mult, (void *) (&mat_mult_args)); + } + + unsigned num_avail_warps = vx_available_warps(); + + if (mat_dim > num_avail_warps) + { + vx_wait_for_warps(num_avail_warps); + } + else + { + vx_wait_for_warps(mat_dim); + } +} + +void _vx_mat_mult(unsigned tid, unsigned wid) +{ + mat_mult_arg_t * args = (mat_mult_arg_t *) vx_get_arg_struct(); + + unsigned * x_ptr = args->x; + unsigned * y_ptr = args->y; + unsigned * z_ptr = args->z; + + unsigned off = args->offset; + + unsigned i_index = off * tid; + + if (off == 0) + { + off = 1; + i_index = tid; + } + + unsigned mat_dim = args->mat_dim; + + for (int iter = 0; iter < off; ++iter) + { + unsigned total = 0; + for (unsigned place = 0; place < mat_dim; ++place) + { + unsigned x_i = (wid * mat_dim) + place; + unsigned y_i = (mat_dim * place) + i_index; + + total += (x_ptr[x_i] * y_ptr[y_i]); + } + + int final_i = (wid * mat_dim) + i_index; + unsigned cond = i_index < mat_dim; + __if(cond) + { + z_ptr[final_i] = total; + i_index++; + } + __else + __end_if + } + + // for (int z = 0; z < ((1000 * wid) + 1000); z++); + return; +} + + + + +static mat_r_arg_t mat_r_args; +// -------------------------- Matrix Addition -------------------------- +void _vx_mat_add(unsigned, unsigned); +void vx_mat_add(void * x, void * y, void * z, unsigned num_rows, unsigned num_cols) +{ + mat_r_args.x = x; + mat_r_args.y = y; + mat_r_args.z = z; + mat_r_args.num_cols = num_cols; + mat_r_args.num_rows = num_rows; + + + unsigned num_avail_threads = vx_available_threads(); + + unsigned off = (num_cols/num_avail_threads); + + if ((num_cols%num_avail_threads) != 0) + { + off += 1; + } + + + mat_r_args.offset = off; + + if (num_cols >= num_avail_threads) + { + vx_spawnWarps(num_rows, num_avail_threads, _vx_mat_add, (void *) (&mat_r_args)); + } + else + { + vx_spawnWarps(num_rows, num_cols, _vx_mat_add, (void *) (&mat_r_args)); + } + + unsigned num_avail_warps = vx_available_warps(); + + if (num_rows > num_avail_warps) + { + vx_wait_for_warps(num_avail_warps); + } + else + { + vx_wait_for_warps(num_rows); + } +} + +void _vx_mat_add(unsigned tid, unsigned wid) +{ + // vx_print_str("*"); + // for (int z = 0; z < ((wid * 1000) + 1000); z++); + + mat_r_arg_t * args = (mat_r_arg_t *) vx_get_arg_struct(); + + unsigned * x_ptr = args->x; + unsigned * y_ptr = args->y; + unsigned * z_ptr = args->z; + + unsigned off = args->offset; + + unsigned i_index = off * tid; + + if (off == 0) + { + off = 1; + i_index = tid; + } + + unsigned num_cols = args->num_cols; + + for (int iter = 0; iter < off; ++iter) + { + int final_i = (wid * num_cols) + i_index; + unsigned cond = i_index < num_cols; + __if(cond) + { + z_ptr[final_i] = x_ptr[final_i] + y_ptr[final_i]; + i_index++; + } + __else + __end_if + } + return; + +} + + + +// -------------------------- Matrix Subtraction -------------------------- +void _vx_mat_sub(unsigned, unsigned); +void vx_mat_sub(void * x, void * y, void * z, unsigned num_rows, unsigned num_cols) +{ + mat_r_args.x = x; + mat_r_args.y = y; + mat_r_args.z = z; + mat_r_args.num_cols = num_cols; + mat_r_args.num_rows = num_rows; + + unsigned num_avail_threads = vx_available_threads(); + + unsigned off = (num_cols/num_avail_threads); + + if ((num_cols%num_avail_threads) != 0) + { + off += 1; + } + + + mat_r_args.offset = off; + + if (num_cols >= num_avail_threads) + { + vx_spawnWarps(num_rows, num_avail_threads, _vx_mat_sub, (void *) (&mat_r_args)); + } + else + { + vx_spawnWarps(num_rows, num_cols, _vx_mat_sub, (void *) (&mat_r_args)); + } + + unsigned num_avail_warps = vx_available_warps(); + + if (num_rows > num_avail_warps) + { + vx_wait_for_warps(num_avail_warps); + } + else + { + vx_wait_for_warps(num_rows); + } +} + +void _vx_mat_sub(unsigned tid, unsigned wid) +{ + // vx_print_str("*"); + // for (int z = 0; z < ((wid * 1000) + 1000); z++); + + mat_r_arg_t * args = (mat_r_arg_t *) vx_get_arg_struct(); + + unsigned * x_ptr = args->x; + unsigned * y_ptr = args->y; + unsigned * z_ptr = args->z; + + unsigned off = args->offset; + + unsigned i_index = off * tid; + + if (off == 0) + { + off = 1; + i_index = tid; + } + + unsigned num_cols = args->num_cols; + + for (int iter = 0; iter < off; ++iter) + { + int final_i = (wid * num_cols) + i_index; + unsigned cond = i_index < num_cols; + __if(cond) + { + z_ptr[final_i] = x_ptr[final_i] - y_ptr[final_i]; + i_index++; + } + __else + __end_if + } + return; + +} + + + +static mat_e_arg_t mat_e_args; +// -------------------------------------------------------------- + +void _vx_e_mat_add(unsigned, unsigned); +void vx_e_mat_add(void * x, void * scal, void * z, unsigned num_rows, unsigned num_cols) +{ + mat_e_args.x = x; + mat_e_args.scal = scal; + mat_e_args.z = z; + mat_e_args.num_cols = num_cols; + mat_e_args.num_rows = num_rows; + + + unsigned num_avail_threads = vx_available_threads(); + + unsigned off = (num_cols/num_avail_threads); + + if ((num_cols%num_avail_threads) != 0) + { + off += 1; + } + + mat_e_args.offset = off; + + if (num_cols >= num_avail_threads) + { + vx_spawnWarps(num_rows, num_avail_threads, _vx_e_mat_add, (void *) (&mat_e_args)); + } + else + { + vx_spawnWarps(num_rows, num_cols, _vx_e_mat_add, (void *) (&mat_e_args)); + } + + unsigned num_avail_warps = vx_available_warps(); + + if (num_rows > num_avail_warps) + { + vx_wait_for_warps(num_avail_warps); + } + else + { + vx_wait_for_warps(num_rows); + } +} + +void _vx_e_mat_add(unsigned tid, unsigned wid) +{ + // vx_print_str("*"); + // for (int z = 0; z < ((wid * 1000) + 1000); z++); + + mat_e_arg_t * args = (mat_e_arg_t *) vx_get_arg_struct(); + + unsigned * x_ptr = args->x; + unsigned scal = *((unsigned *) args->scal); + + unsigned * z_ptr = args->z; + + unsigned off = args->offset; + + unsigned i_index = off * tid; + + if (off == 0) + { + off = 1; + i_index = tid; + } + + unsigned num_cols = args->num_cols; + + for (int iter = 0; iter < off; ++iter) + { + int final_i = (wid * num_cols) + i_index; + unsigned cond = i_index < num_cols; + __if(cond) + { + z_ptr[final_i] = x_ptr[final_i] + scal; + i_index++; + } + __else + __end_if + } + return; + +} + +void _vx_e_mat_mult(unsigned, unsigned); +void vx_e_mat_mult(void * x, void * scal, void * z, unsigned num_rows, unsigned num_cols) +{ + mat_e_args.x = x; + mat_e_args.scal = scal; + mat_e_args.z = z; + mat_e_args.num_cols = num_cols; + mat_e_args.num_rows = num_rows; + + + unsigned num_avail_threads = vx_available_threads(); + + unsigned off = (num_cols/num_avail_threads); + + if ((num_cols%num_avail_threads) != 0) + { + off += 1; + } + + mat_e_args.offset = off; + + if (num_cols >= num_avail_threads) + { + vx_spawnWarps(num_rows, num_avail_threads, _vx_e_mat_mult, (void *) (&mat_e_args)); + } + else + { + vx_spawnWarps(num_rows, num_cols, _vx_e_mat_mult, (void *) (&mat_e_args)); + } + + unsigned num_avail_warps = vx_available_warps(); + + if (num_rows > num_avail_warps) + { + vx_wait_for_warps(num_avail_warps); + } + else + { + vx_wait_for_warps(num_rows); + } +} + +void _vx_e_mat_mult(unsigned tid, unsigned wid) +{ + // vx_print_str("*"); + // for (int z = 0; z < ((wid * 1000) + 1000); z++); + + mat_e_arg_t * args = (mat_e_arg_t *) vx_get_arg_struct(); + + unsigned * x_ptr = args->x; + unsigned scal = *((unsigned *) args->scal); + + unsigned * z_ptr = args->z; + + unsigned off = args->offset; + + unsigned i_index = off * tid; + + if (off == 0) + { + off = 1; + i_index = tid; + } + + unsigned num_cols = args->num_cols; + + for (int iter = 0; iter < off; ++iter) + { + int final_i = (wid * num_cols) + i_index; + unsigned cond = i_index < num_cols; + __if(cond) + { + z_ptr[final_i] = x_ptr[final_i] * scal; + i_index++; + } + __else + __end_if + } + return; + +} + + + diff --git a/kernel/vx_include/vx_front.h b/kernel/vx_include/vx_front.h new file mode 100644 index 00000000..b78b8284 --- /dev/null +++ b/kernel/vx_include/vx_front.h @@ -0,0 +1,55 @@ +#include "../vx_os/vx_back/vx_back.h" +#include "../vx_os/vx_io/vx_io.h" + + +// -------------------------- Matrix Multiplication -------------------------- + +typedef struct +{ + void * x; + void * y; + void * z; + unsigned mat_dim; + unsigned offset; + +} mat_mult_arg_t; +void vx_sq_mat_mult(void *, void *, void *, unsigned); + + +// -------------------------------------------------------------------------- + +typedef struct +{ + void * x; + void * y; + void * z; + unsigned num_cols; + unsigned num_rows; + unsigned offset; + +} mat_r_arg_t; +// -------------------------- Matrix Addition ----------------------------- +void vx_mat_add(void *, void *, void *, unsigned, unsigned); + +// -------------------------- Matrix Subtraction -------------------------- +void vx_mat_sub(void *, void *, void *, unsigned, unsigned); + + + +// ----------------------------------------------------------------------- +typedef struct +{ + void * x; + void * scal; + void * z; + unsigned num_cols; + unsigned num_rows; + unsigned offset; + +} mat_e_arg_t; + +// -------------------------- Matrix element Addition ------------------ +void vx_e_mat_add(void *, void *, void *, unsigned, unsigned); + +// -------------------------- Matrix element Addition ------------------ +void vx_e_mat_mult(void *, void *, void *, unsigned, unsigned); \ No newline at end of file diff --git a/kernel/vx_main.c b/kernel/vx_main.c new file mode 100644 index 00000000..0d70faad --- /dev/null +++ b/kernel/vx_main.c @@ -0,0 +1,70 @@ + +#include "./vx_include/vx_front.h" + +unsigned x[1024] = {0}; +unsigned y[1024] = {0}; +unsigned z[1024] = {0}; + +#define MAT_DIM 16 + +#define NUM_COLS 16 +#define NUM_ROWS 16 + +void initialize_mats() +{ + for (int i = 0; i < (MAT_DIM * MAT_DIM); i++) + { + x[i] = 3; + y[i] = 2; + } +} + +void print_matrix(unsigned * z) +{ + vx_print_str("-------------------------------\n"); + for (int j = 0; j < (MAT_DIM * MAT_DIM); j++) + { + if (j!=0) if ((j % MAT_DIM) == 0) vx_print_str("\n"); + vx_print_hex(z[j]); + vx_print_str(" "); + } + vx_print_str("\n-------------------------------\n"); +} + +int main() +{ + + initialize_mats(); + + // matrix multiplication + vx_sq_mat_mult(x, y, z, MAT_DIM); + vx_print_str("\n\nMatrix multiplication\n"); + print_matrix(z); + + + // matrix addition + vx_mat_add(x, y, z, NUM_ROWS, NUM_COLS); + vx_print_str("\n\nMatrix Addition\n"); + print_matrix(z); + + + // matrix sub + vx_mat_sub(x, y, z, NUM_ROWS, NUM_COLS); + vx_print_str("\n\nMatrix Subtraction\n"); + print_matrix(z); + + unsigned scal = 3; + + // matrix element add + vx_e_mat_add(z, &scal, z, NUM_ROWS, NUM_COLS); + vx_print_str("\n\nMatrix Element Addition\n"); + print_matrix(z); + + // matrix element add + vx_e_mat_mult(z, &scal, z, NUM_ROWS, NUM_COLS); + vx_print_str("\n\nMatrix Element Addition\n"); + print_matrix(z); + + + return 0; +} \ No newline at end of file diff --git a/kernel/vx_os/.DS_Store b/kernel/vx_os/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..b0526ab15f54a77baac97a31e5289fc9dd4c800d GIT binary patch literal 6148 zcmeHKu};G<5Iu*YR&<~P1EblHU_tyqsKS64J26q(6sSl^h1#kc`5QJqfQ>&u`~fRc zH+Fco59%bYDls5HKI!}%`!0U>n#45`iRL)oBWe&)4X&`VhQ?uPUU|s^9@zj2eUA|( z)T5XrotL8hfLFjP@Y@tn@9sK{>6%8=htJ>N6#W=)^UYC`b~{PhK_osC;u*g6u1y!S zBs;m-YjxAX&?odh2~1g|Xkgd+6nxWCllBtnC}^$K_e@(Qe&%ZA$j4;P>R^GW{7E8rFQ zR|<$q)QXxYiTBo0acZxX@HSkTipvb@6g0dY>yFxrH{seaCshX+GG+!b0`q?av<$xS I3jC-7A85G8s{jB1 literal 0 HcmV?d00001 diff --git a/kernel/vx_os/vx_back/vx_back.c b/kernel/vx_os/vx_back/vx_back.c new file mode 100644 index 00000000..9f3d7cee --- /dev/null +++ b/kernel/vx_os/vx_back/vx_back.c @@ -0,0 +1,150 @@ + +#include "vx_back.h" +#include "../vx_io/vx_io.h" + + +void vx_before_main() +{ + // unsigned num_available_warps = vx_available_warps(); + for (int i = 0; i < 8; i++) + { + queue_initialize(q + i); + } +} + +void vx_reschedule_warps() +{ + + + register unsigned curr_warp asm("s10"); + // vx_printf("Reschedule: ", curr_warp); + + if (queue_isEmpty(q+curr_warp)) + { + // vx_printf("Done: ", curr_warp); + done[curr_warp] = 1; + if (curr_warp == 0) + { + vx_load_context(); + return; + } + ECALL; + } + + Job j; + queue_dequeue(q+curr_warp,&j); + + // vx_printf("Reschedule -> ", j.wid); + asm __volatile__("mv sp,%0"::"r" (j.base_sp):); + vx_createThreads(j.n_threads, j.wid, j.func_ptr, j.args, j.assigned_warp); + + ECALL; + +} + +void vx_schedule_warps() +{ + + unsigned num_available_warps = vx_available_warps(); + + asm __volatile__("mv s3, sp"); + + for (int curr_warp = 1; curr_warp < num_available_warps; ++curr_warp) + { + if (!queue_isEmpty(q+curr_warp)) + { + Job j; + queue_dequeue(q+curr_warp,&j); + asm __volatile__("mv sp,%0"::"r" (j.base_sp):); + vx_wspawn(j.n_threads, j.wid, j.func_ptr, j.args, j.assigned_warp); + } + } + + asm __volatile__("mv sp, s3"); + + + vx_save_context(); + + // vx_print_str("saved context\n"); + + register unsigned val asm("tp"); + if (val) + { + if (!queue_isEmpty(q)) + { + // vx_print_str("found something for w0\n"); + Job j; + queue_dequeue(q,&j); + // vx_printf("num_threads: ", j.n_threads); + asm __volatile__("mv sp,%0"::"r" (j.base_sp):); + vx_createThreads(j.n_threads, j.wid, j.func_ptr, j.args, j.assigned_warp); + } + } + +} + + +void vx_spawnWarps(unsigned num_Warps, unsigned num_threads, FUNC, void * args) +{ + vx_before_main(); + + unsigned num_available_warps = vx_available_warps(); + // vx_printf("Num available warps: ", num_available_warps); + + asm __volatile__("addi s2, sp, 0"); + int warp = 0; + for (unsigned i = 0; i < num_Warps; i++) + { + asm __volatile__("lui s3, 0xFFFF0"); + asm __volatile__("add sp, sp, s3"); + register unsigned stack_ptr asm("sp"); + + Job j; + j.wid = i; + j.n_threads = num_threads; + j.base_sp = stack_ptr; + j.func_ptr = (unsigned) func; + j.args = args; + j.assigned_warp = warp; + + queue_enqueue(q + warp,&j); + ++warp; + if (warp >= num_available_warps) warp = 0; + } + asm __volatile__("addi sp, s2, 0"); + + + vx_schedule_warps(); + +} + +void vx_wait_for_warps(unsigned num_wait) +{ + // vx_printf("wait for: ", num_wait); + unsigned num_available_warps = vx_available_warps(); + unsigned num = 0; + while (num != num_wait) + { + num = 0; + for (int i = 0; i < num_available_warps; i++) + { + if (done[i] == 1) + { + num += 1; + } + } + } + + // vx_printf("num found: ", num); + for (int i = 0; i < num_available_warps; i++) done[i] = 0; +} + + +void * vx_get_arg_struct(void) +{ + register void *ret asm("s7"); + return ret; +} + + + diff --git a/kernel/vx_os/vx_back/vx_back.h b/kernel/vx_os/vx_back/vx_back.h new file mode 100644 index 00000000..c31b1dea --- /dev/null +++ b/kernel/vx_os/vx_back/vx_back.h @@ -0,0 +1,55 @@ + + +#pragma once + +#include +#include "../vx_util/queue.h" + +#define WSPAWN asm __volatile__(".word 0x3006b"::); +#define CLONE asm __volatile__(".word 0x3506b":::); +#define JALRS asm __volatile__(".word 0x1bfe0eb":::"s10"); +#define ECALL asm __volatile__(".word 0x00000073"); +#define JMPRT asm __volatile__(".word 0x5406b"); +#define SPLIT asm __volatile__(".word 0xf206b"); +#define P_JUMP asm __volatile__(".word 0x1ff707b"); +#define JOIN asm __volatile__(".word 0x306b"); + + +#define __if(val) bool temp = !val; \ + register unsigned p asm("t5") = temp; \ + register void * e asm("t6") = &&ELSE; \ + SPLIT; \ + P_JUMP; \ + + +#define __else register void * w asm("t3") = &&AFTER; \ + asm __volatile__("jr t3"); \ + ELSE: asm __volatile__("nop"); + +#define __end_if AFTER:\ + JOIN; + +static int done[] = {0, 0, 0, 0, 0, 0, 0}; + +static int main_sp[1]; + +unsigned context[32]; +void vx_save_context(void); +void vx_load_context(void); + + +#define FUNC void (func)(unsigned, unsigned) + +unsigned vx_available_warps(void); +unsigned vx_available_threads(void); + + +void vx_createThreads(unsigned, unsigned, unsigned, void *, unsigned); +void vx_wspawn(unsigned, unsigned, unsigned, void *, unsigned); +void vx_spawnWarps(unsigned num_Warps, unsigned num_threads, FUNC, void *); +void vx_schedule_warps(void); +void vx_reschedule_warps(void); +void vx_wait_for_warps(unsigned); +void * vx_get_arg_struct(void); + + diff --git a/kernel/vx_os/vx_back/vx_back.s b/kernel/vx_os/vx_back/vx_back.s new file mode 100644 index 00000000..c918588d --- /dev/null +++ b/kernel/vx_os/vx_back/vx_back.s @@ -0,0 +1,151 @@ + + + +.section .text + +.type _start, @function +.global _start +_start: + li a0, 4 # Num Warps + csrw 0x20, a0 # Setting the number of available warps + li a0, 8 # Num Threads + csrw 0x21, a0 # Setting the number of available threads + csrw mhartid,zero + csrw misa,zero + lui sp, 0x7ffff + jal vx_before_main + jal main + ecall + +.type vx_createThreads, @function +.global vx_createThreads +vx_createThreads: + mv s7 ,a3 # Moving args to s7 + mv s10,a4 # Moving assigned_warp to s10 + mv t5 ,sp # Saving the current stack pointer to t5 + mv t2 , a0 # t2 = num_threads +loop_init: + li a0,1 # i = 0 +loop_cond: + bge a0, t2, loop_done # i < num_threads +loop_body: + addi sp,sp,-2048 # Allocate 2k stack for new thread + mv t1, a0 # #lane = i + .word 0x3506b # clone register state +loop_inc: + addi a0, a0, 1 + j loop_cond +loop_done: + mv sp,t5 # Restoring the stack + li a0,0 # setting tid = 0 for main thread + mv t6,a2 # setting func_addr + mv s11,t2 # setting num_threads to spawn + .word 0x1bfe0eb + la a0, vx_reschedule_warps + .word 0x5406b + + +.type vx_wspawn, @function +.global vx_wspawn +vx_wspawn: + la t1, vx_createThreads + .word 0x3006b # WSPAWN instruction + ret + +.global context + +.type vx_save_context, @function +.global vx_save_context +vx_save_context: +la tp, context +sw x0 , 0 (tp) +sw x1 , 4 (tp) +sw x2 , 8 (tp) +sw x3 , 12(tp) +sw x4 , 16(tp) +sw x5 , 20(tp) +sw x6 , 24(tp) +sw x7 , 28(tp) +sw x8 , 32(tp) +sw x9 , 36(tp) +sw x10, 40(tp) +sw x11, 44(tp) +sw x12, 48(tp) +sw x13, 52(tp) +sw x14, 56(tp) +sw x15, 60(tp) +sw x16, 64(tp) +sw x17, 68(tp) +sw x18, 72(tp) +sw x19, 76(tp) +sw x20, 80(tp) +sw x21, 84(tp) +sw x22, 88(tp) +sw x23, 92(tp) +sw x24, 96(tp) +sw x25, 100(tp) +sw x26, 104(tp) +sw x27, 108(tp) +sw x28, 112(tp) +sw x29, 116(tp) +sw x30, 120(tp) +sw x31, 124(tp) +li tp, 1 +ret + + +.type vx_load_context, @function +.global vx_load_context +vx_load_context: +la tp, context +lw x0 , 0 (tp) +lw x1 , 4 (tp) +lw x2 , 8 (tp) +lw x3 , 12(tp) +lw x4 , 16(tp) +lw x5 , 20(tp) +lw x6 , 24(tp) +lw x7 , 28(tp) +lw x8 , 32(tp) +lw x9 , 36(tp) +lw x10, 40(tp) +lw x11, 44(tp) +lw x12, 48(tp) +lw x13, 52(tp) +lw x14, 56(tp) +lw x15, 60(tp) +lw x16, 64(tp) +lw x17, 68(tp) +lw x18, 72(tp) +lw x19, 76(tp) +lw x20, 80(tp) +lw x21, 84(tp) +lw x22, 88(tp) +lw x23, 92(tp) +lw x24, 96(tp) +lw x25, 100(tp) +lw x26, 104(tp) +lw x27, 108(tp) +lw x28, 112(tp) +lw x29, 116(tp) +lw x30, 120(tp) +lw x31, 124(tp) +li tp, 0 +ret + +.type vx_available_warps, @function +.global vx_available_warps +vx_available_warps: +csrr a0, 0x20 +ret + +.type vx_available_threads, @function +.global vx_available_threads +vx_available_threads: +csrr a0, 0x21 +ret + + + + + diff --git a/kernel/vx_os/vx_io/.DS_Store b/kernel/vx_os/vx_io/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..b23802d5f92bd7c7768afa931cf20d5308855f76 GIT binary patch literal 6148 zcmeHKO-lno3{7gmLN9ytIKM#f9}HzZ^z08%S`P|^J(QLn=bzX2k|-`N=t)XRVDhs0 zn4NjBGaC`n)#3F)q!W<^22p8D2;GyRStQ>8)#e!FUbgGqu-)t?Cb~oy*M2KUImxrU z%eVCp8$`PENNfY+>^I--AG7zrWM3jfxu#?w8At|_foo#`cQ$3QbWEKLBm>F77Xv&W z3I?$THb*-;psWP|&fzwJ&0c~vC9noIM?@g%r9dy$Xff2w;V+R_1Dm6li$?RI@#fFw zMeXgFzgW6xbxfTMBm-jx*!w~{-v5vIWG0(@OG%XsBm>vVfX@4;eudq|-TGsnylV@_ s3kHRGjRpkv=qCUVJV)*<=Mo6k;;2#+H0LL;(ZvX%Q literal 0 HcmV?d00001 diff --git a/kernel/vx_os/vx_io/vx_io.c b/kernel/vx_os/vx_io/vx_io.c new file mode 100644 index 00000000..e86047b2 --- /dev/null +++ b/kernel/vx_os/vx_io/vx_io.c @@ -0,0 +1,29 @@ + +#include "vx_io.h" + +void vx_print_hex(unsigned f) +{ + if (f < 16) + { + vx_print_str(hextoa[f]); + return; + } + int temp; + int sf = 32; + bool start = false; + do + { + temp = (f >> (sf - 4)) & 0xf; + if (temp != 0) start = true; + if (start) vx_print_str(hextoa[temp]); + sf -= 4; + } while(sf > 0); +} + + +void vx_printf(char * c, unsigned f) +{ + vx_print_str(c); + vx_print_hex(f); + vx_print_str("\n"); +} \ No newline at end of file diff --git a/kernel/vx_os/vx_io/vx_io.h b/kernel/vx_os/vx_io/vx_io.h new file mode 100644 index 00000000..f3ed14f6 --- /dev/null +++ b/kernel/vx_os/vx_io/vx_io.h @@ -0,0 +1,9 @@ + +#pragma once + +#include + +static char * hextoa[] = {"0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "a", "b", "c", "d", "e", "f"}; +void vx_print_hex(unsigned); +void vx_print_str(char *); +void vx_printf(char *, unsigned); \ No newline at end of file diff --git a/kernel/vx_os/vx_io/vx_io.s b/kernel/vx_os/vx_io/vx_io.s new file mode 100644 index 00000000..676b92bd --- /dev/null +++ b/kernel/vx_os/vx_io/vx_io.s @@ -0,0 +1,30 @@ + + +.type vx_print_str, @function +.global vx_print_str +vx_print_str: + addi sp, sp, -12 + sw ra, 0(sp) + sw a1, 4(sp) +bl: + lbu a1,0(a0) + beqz a1,be + jal vx_printc + addi a0, a0, 1 + j bl +be: + lw ra, 0(sp) + lw a1, 4(sp) + addi sp, sp, 12 + ret + + +.type vx_printc, @function +.global vx_printc +vx_printc: + la a7, 0x00010000 + sw a1, 0(a7) + ret + + + diff --git a/kernel/vx_os/vx_util/.DS_Store b/kernel/vx_os/vx_util/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..0ee024ad53f272f5e21483f9b08a969e9e67f889 GIT binary patch literal 6148 zcmeHKu}(uV478yVl~~@$m@h!$51y(rF!KYbP>G>Zg;4jm@!4=^n~LbQD+8P*`x3{F zl^f#3%zSltxicHgYzZaW2hCi#PMyg`d59i+Z0*)wA9nla&2AQb+QHl_d$WUWLy!6U z4OWKFPGXBb`aP?ijXqsfUNImB#DEwO1OJx+^lZxVI#E^(hygKhWPtZWgA&KWDKV}N z7(U;*z93RCj=u!3)qE_R60rjDOa*4D*B8Sx9sX8vW8svT>E=-x`&4DGABsnH_*;aV zkBPEkKn(N@T;_CO|G$Tx`TzGxnu!51@TVB?#rko*!jY=C&JM?3+n`U-Z$WH?!*q`T gOxTKVe#AA75jPf2iIEO}qyzO3ATJUz@EZ(#0bt2C00000 literal 0 HcmV?d00001 diff --git a/kernel/vx_os/vx_util/queue.h b/kernel/vx_os/vx_util/queue.h new file mode 100644 index 00000000..6793d467 --- /dev/null +++ b/kernel/vx_os/vx_util/queue.h @@ -0,0 +1,49 @@ + +#ifndef __QUEUE__ + +#define __QUEUE__ + + + +#define SIZE 50 +#define WARPS 7 + + +typedef struct Job_t +{ + unsigned wid; + unsigned n_threads; + unsigned base_sp; + unsigned func_ptr; + void * args; + unsigned assigned_warp; + +} Job; + +typedef struct Queue_t +{ + unsigned start_i; + unsigned end_i; + unsigned num_j; + unsigned total_warps; + unsigned active_warps; + struct Job_t jobs[SIZE]; + +} Queue; + +Queue q[8]; + +void queue_initialize(Queue *); + +void queue_enqueue(Queue *, Job *); + +void queue_dequeue(Queue *, Job *); + +int queue_isFull(Queue *); +int queue_isEmpty(Queue *); +int queue_availableWarps(Queue *); + + +void func(); + +#endif \ No newline at end of file diff --git a/kernel/vx_os/vx_util/queue.s b/kernel/vx_os/vx_util/queue.s new file mode 100644 index 00000000..6fcec494 --- /dev/null +++ b/kernel/vx_os/vx_util/queue.s @@ -0,0 +1,123 @@ + +.equ A_WARPS, 7 +.equ SIZE, 50 + +.section .text + +.type queue_initialize, @function +.global queue_initialize +queue_initialize: + mv t0, a0 # loading base address of q + li t1, 0 # to initialize variables + li t2, A_WARPS # Num of available warps + sw t1, 0 (t0) # start_i + sw t1, 4 (t0) # end_i + sw t1, 8 (t0) # num_j + sw t2, 12(t0) # total_warps + sw t1, 16(t0) # active_warps + ret + + + + +.type queue_enqueue, @function +.global queue_enqueue +queue_enqueue: + mv t0, a0 # loding base address of q + lw t1, 8 (t0) # t1 = num_j + addi t1, t1, 1 # ++t1 + sw t1, 8 (t0) # num_j = t1 + addi t1, t0, 20 # t1 = jobs_addr + lw t4, 4 (t0) # t4 = end_i + slli t2, t4, 5 # index * 32 [log(sizeof(job))] + add t1, t1, t2 # jobs + index + lw t3, 0 (a1) # wid + sw t3, 0 (t1) # + lw t3, 4 (a1) # n_threads + sw t3, 4 (t1) # + lw t3, 8 (a1) # base_sp + sw t3, 8 (t1) # + lw t3, 12(a1) # func_ptr + sw t3, 12(t1) # + lw t3, 16(a1) # args + sw t3, 16(t1) # + lw t3, 20(a1) # assigned_warp + sw t3, 20(t1) # + addi t4, t4, 1 # end_i++ + li t5, SIZE # size + bne t4, t5, ec # if ((q.end_i + 1) == SIZE) + mv t4, zero +ec: + sw t4, 4 (t0) # end_i + ret + + +.type queue_dequeue, @function +.global queue_dequeue + +queue_dequeue: + mv t0, a0 # loading base address of q + lw t1, 8 (t0) # t1 = num_j + addi t1, t1, -1 # --t1 + sw t1, 8 (t0) # num_j = t1 + addi t1, t0, 20 # t1 = jobs_addr + lw t4, 0 (t0) # t4 = start_i + li t6, SIZE # size + mv t5, t4 # t5 = start_i + addi t5, t5, 1 # t5++ + bne t5, t6, dc # if ((q.start_i + 1) == SIZE) + mv t5, zero +dc: + sw t5, 0(t0) # storing start_i + slli t2, t4, 5 # index * 32 [log(sizeof(job))] + add t1, t1, t2 # jobs + index + lw t3, 0 (t1) # wid + sw t3, 0 (a1) # + lw t3, 4 (t1) # n_threads + sw t3, 4 (a1) # + lw t3, 8 (t1) # base_sp + sw t3, 8 (a1) # + lw t3, 12(t1) # func_ptr + sw t3, 12(a1) # + lw t3, 16(t1) # args + sw t3, 16(a1) # + lw t3, 20(t1) # assigned_warp + sw t3, 20(a1) # + ret + + +.type queue_isFull, @function +.global queue_isFull +queue_isFull: + mv t0, a0 # loading base address of q + lw t1, 8 (t0) # t1 = num_j + mv a0, zero # ret_val = 0 + li t3, SIZE # t3 = SIZE + bne t3, t1, qf # if (num_j == 1) + addi a0, a0, 1 # ret_val = 1; +qf: + ret + + + +.type queue_isEmpty, @function +.global queue_isEmpty +queue_isEmpty: + mv t0, a0 # loading base address of q + lw t1, 8 (t0) # t1 = num_j + mv a0, zero # ret_val = 0 + mv t3, zero # t3 = 0 + bne t3, t1, qe # if (num_j == 0) + addi a0, a0, 1 # ret_val = 1; +qe: + ret + + +.type queue_availableWarps, @function +.global queue_availableWarps +queue_availableWarps: + mv t0, a0 # loading base address of q + lw t1, 12(t0) # t1 = total_warps + lw t2, 16(t0) # t2 = active_warps + sltu a0, t2, t1 + ret diff --git a/rtl/obj_dir/Vvortex b/rtl/obj_dir/Vvortex index 79791de5543534b9d730f30c1e956a52a99e341f..a2de6ab0751d104a48a5dee61665dbe459fc07f4 100755 GIT binary patch delta 21917 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 DC!ll7 delta 21726 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 G?EeEf@+SNM diff --git a/rtl/obj_dir/Vvortex__ALL.a b/rtl/obj_dir/Vvortex__ALL.a index a9070918714506cb016b667716e8d2a146e1d2ec..9985c74b663d1fc3951fff5a660a310a8b4a6a2e 100644 GIT binary patch delta 37 mcmcaHm+8h_rU`N^M#h$A8 results.txt - -echo ./vortex_software/vortex_test.hex -./harptool -E -a rv32i --core ./vortex_software/vortex_test.hex -s -b diff --git a/util/Makefile b/util/Makefile deleted file mode 100644 index dda0940b..00000000 --- a/util/Makefile +++ /dev/null @@ -1,4 +0,0 @@ -bin2mif : bin2mif.cpp - -clean : - rm -f bin2mif diff --git a/util/bin2mif.cpp b/util/bin2mif.cpp deleted file mode 100644 index 9884daf8..00000000 --- a/util/bin2mif.cpp +++ /dev/null @@ -1,64 +0,0 @@ -// bin2mif -- Convert binary file to Memory Initialization File used by some -// FPGA toolchains. - -#include -#include -#include -#include -#include - -int main(int argc, char** argv) { - using namespace std; - - if (argc != 5) { - cerr << "Usage:\n " << argv[0] << ' ' << "" - << " \n";; - return 1; - } - - ifstream in(argv[3]); - ofstream out(argv[4]); - - if (!in) { - cerr << "Failed to open input file \"" << argv[3] << "\"\n"; - return 1; - } - - if (!out) { - cerr << "Failed to open output file \"" << argv[4] << "\"\n"; - return 1; - } - - unsigned word(atol(argv[1])), mem_sz(atol(argv[2])/word); - - out << "DEPTH = " << mem_sz << ";\n" - << "WIDTH = " << word*8 << ";\n" - << "ADDRESS_RADIX = HEX;\n" - << "DATA_RADIX = HEX;\n" - << "CONTENT\n" - << "BEGIN\n"; - - // HARP is little endian, so no matter what the endianness of the machine on - // which this utility runs, this swapping of the byte order when constructing - // hex values is necessary. - for (unsigned j = 0; j < mem_sz; ++j) { - stack bytes; - - out << setw(4) << setfill('0') << hex << j << " : "; - for (unsigned i = 0; i < word; ++i) { - bytes.push(in.get()); - if (in.eof()) { bytes.pop(); while(i++ < word) bytes.push(0); } - } - - for (unsigned i = 0; i < word; ++i) { - out << hex << setw(2) << setfill('0') << unsigned(bytes.top()); - bytes.pop(); - } - out << ";\n"; - if (in.eof()) break; - } - - out << "END;\n"; - - return 0; -}